{"version":3,"file":"index-BhLlJjT-.js","sources":["../../../app/frontend/store/auth_store.js","../../../app/frontend/store/index.js","../../../app/frontend/plugins/theme_changer.js","../../../app/frontend/pages/auth/_forget_password.vue","../../../app/frontend/pages/auth/_company_invite.vue","../../../app/frontend/pages/auth/login.vue","../../../app/frontend/components/ui/flash.vue","../../../app/frontend/pages/auth/_email_confirmation.vue","../../../app/frontend/pages/auth/index.vue","../../../node_modules/element-plus/es/utils/dom/aria.mjs","../../../node_modules/element-plus/es/utils/dom/event.mjs","../../../node_modules/@vueuse/shared/index.mjs","../../../node_modules/@vueuse/core/index.mjs","../../../node_modules/element-plus/es/utils/browser.mjs","../../../node_modules/element-plus/es/utils/easings.mjs","../../../node_modules/lodash-es/_freeGlobal.js","../../../node_modules/lodash-es/_root.js","../../../node_modules/lodash-es/_Symbol.js","../../../node_modules/lodash-es/_getRawTag.js","../../../node_modules/lodash-es/_objectToString.js","../../../node_modules/lodash-es/_baseGetTag.js","../../../node_modules/lodash-es/isObjectLike.js","../../../node_modules/lodash-es/isSymbol.js","../../../node_modules/lodash-es/_arrayMap.js","../../../node_modules/lodash-es/isArray.js","../../../node_modules/lodash-es/_baseToString.js","../../../node_modules/lodash-es/_trimmedEndIndex.js","../../../node_modules/lodash-es/_baseTrim.js","../../../node_modules/lodash-es/isObject.js","../../../node_modules/lodash-es/toNumber.js","../../../node_modules/lodash-es/identity.js","../../../node_modules/lodash-es/isFunction.js","../../../node_modules/lodash-es/_coreJsData.js","../../../node_modules/lodash-es/_isMasked.js","../../../node_modules/lodash-es/_toSource.js","../../../node_modules/lodash-es/_baseIsNative.js","../../../node_modules/lodash-es/_getValue.js","../../../node_modules/lodash-es/_getNative.js","../../../node_modules/lodash-es/_WeakMap.js","../../../node_modules/lodash-es/_baseCreate.js","../../../node_modules/lodash-es/_apply.js","../../../node_modules/lodash-es/_copyArray.js","../../../node_modules/lodash-es/_shortOut.js","../../../node_modules/lodash-es/constant.js","../../../node_modules/lodash-es/_defineProperty.js","../../../node_modules/lodash-es/_baseSetToString.js","../../../node_modules/lodash-es/_setToString.js","../../../node_modules/lodash-es/_arrayEach.js","../../../node_modules/lodash-es/_isIndex.js","../../../node_modules/lodash-es/_baseAssignValue.js","../../../node_modules/lodash-es/eq.js","../../../node_modules/lodash-es/_assignValue.js","../../../node_modules/lodash-es/_copyObject.js","../../../node_modules/lodash-es/_overRest.js","../../../node_modules/lodash-es/_baseRest.js","../../../node_modules/lodash-es/isLength.js","../../../node_modules/lodash-es/isArrayLike.js","../../../node_modules/lodash-es/_isIterateeCall.js","../../../node_modules/lodash-es/_createAssigner.js","../../../node_modules/lodash-es/_isPrototype.js","../../../node_modules/lodash-es/_baseTimes.js","../../../node_modules/lodash-es/_baseIsArguments.js","../../../node_modules/lodash-es/isArguments.js","../../../node_modules/lodash-es/stubFalse.js","../../../node_modules/lodash-es/isBuffer.js","../../../node_modules/lodash-es/_baseIsTypedArray.js","../../../node_modules/lodash-es/_baseUnary.js","../../../node_modules/lodash-es/_nodeUtil.js","../../../node_modules/lodash-es/isTypedArray.js","../../../node_modules/lodash-es/_arrayLikeKeys.js","../../../node_modules/lodash-es/_overArg.js","../../../node_modules/lodash-es/_nativeKeys.js","../../../node_modules/lodash-es/_baseKeys.js","../../../node_modules/lodash-es/keys.js","../../../node_modules/lodash-es/_nativeKeysIn.js","../../../node_modules/lodash-es/_baseKeysIn.js","../../../node_modules/lodash-es/keysIn.js","../../../node_modules/lodash-es/_isKey.js","../../../node_modules/lodash-es/_nativeCreate.js","../../../node_modules/lodash-es/_hashClear.js","../../../node_modules/lodash-es/_hashDelete.js","../../../node_modules/lodash-es/_hashGet.js","../../../node_modules/lodash-es/_hashHas.js","../../../node_modules/lodash-es/_hashSet.js","../../../node_modules/lodash-es/_Hash.js","../../../node_modules/lodash-es/_listCacheClear.js","../../../node_modules/lodash-es/_assocIndexOf.js","../../../node_modules/lodash-es/_listCacheDelete.js","../../../node_modules/lodash-es/_listCacheGet.js","../../../node_modules/lodash-es/_listCacheHas.js","../../../node_modules/lodash-es/_listCacheSet.js","../../../node_modules/lodash-es/_ListCache.js","../../../node_modules/lodash-es/_Map.js","../../../node_modules/lodash-es/_mapCacheClear.js","../../../node_modules/lodash-es/_isKeyable.js","../../../node_modules/lodash-es/_getMapData.js","../../../node_modules/lodash-es/_mapCacheDelete.js","../../../node_modules/lodash-es/_mapCacheGet.js","../../../node_modules/lodash-es/_mapCacheHas.js","../../../node_modules/lodash-es/_mapCacheSet.js","../../../node_modules/lodash-es/_MapCache.js","../../../node_modules/lodash-es/memoize.js","../../../node_modules/lodash-es/_memoizeCapped.js","../../../node_modules/lodash-es/_stringToPath.js","../../../node_modules/lodash-es/toString.js","../../../node_modules/lodash-es/_castPath.js","../../../node_modules/lodash-es/_toKey.js","../../../node_modules/lodash-es/_baseGet.js","../../../node_modules/lodash-es/get.js","../../../node_modules/lodash-es/_arrayPush.js","../../../node_modules/lodash-es/_isFlattenable.js","../../../node_modules/lodash-es/_baseFlatten.js","../../../node_modules/lodash-es/flatten.js","../../../node_modules/lodash-es/_flatRest.js","../../../node_modules/lodash-es/_getPrototype.js","../../../node_modules/lodash-es/isPlainObject.js","../../../node_modules/lodash-es/_stackClear.js","../../../node_modules/lodash-es/_stackDelete.js","../../../node_modules/lodash-es/_stackGet.js","../../../node_modules/lodash-es/_stackHas.js","../../../node_modules/lodash-es/_stackSet.js","../../../node_modules/lodash-es/_Stack.js","../../../node_modules/lodash-es/_baseAssign.js","../../../node_modules/lodash-es/_baseAssignIn.js","../../../node_modules/lodash-es/_cloneBuffer.js","../../../node_modules/lodash-es/_arrayFilter.js","../../../node_modules/lodash-es/stubArray.js","../../../node_modules/lodash-es/_getSymbols.js","../../../node_modules/lodash-es/_copySymbols.js","../../../node_modules/lodash-es/_getSymbolsIn.js","../../../node_modules/lodash-es/_copySymbolsIn.js","../../../node_modules/lodash-es/_baseGetAllKeys.js","../../../node_modules/lodash-es/_getAllKeys.js","../../../node_modules/lodash-es/_getAllKeysIn.js","../../../node_modules/lodash-es/_DataView.js","../../../node_modules/lodash-es/_Promise.js","../../../node_modules/lodash-es/_Set.js","../../../node_modules/lodash-es/_getTag.js","../../../node_modules/lodash-es/_initCloneArray.js","../../../node_modules/lodash-es/_Uint8Array.js","../../../node_modules/lodash-es/_cloneArrayBuffer.js","../../../node_modules/lodash-es/_cloneDataView.js","../../../node_modules/lodash-es/_cloneRegExp.js","../../../node_modules/lodash-es/_cloneSymbol.js","../../../node_modules/lodash-es/_cloneTypedArray.js","../../../node_modules/lodash-es/_initCloneByTag.js","../../../node_modules/lodash-es/_initCloneObject.js","../../../node_modules/lodash-es/_baseIsMap.js","../../../node_modules/lodash-es/isMap.js","../../../node_modules/lodash-es/_baseIsSet.js","../../../node_modules/lodash-es/isSet.js","../../../node_modules/lodash-es/_baseClone.js","../../../node_modules/lodash-es/cloneDeep.js","../../../node_modules/lodash-es/_setCacheAdd.js","../../../node_modules/lodash-es/_setCacheHas.js","../../../node_modules/lodash-es/_SetCache.js","../../../node_modules/lodash-es/_arraySome.js","../../../node_modules/lodash-es/_cacheHas.js","../../../node_modules/lodash-es/_equalArrays.js","../../../node_modules/lodash-es/_mapToArray.js","../../../node_modules/lodash-es/_setToArray.js","../../../node_modules/lodash-es/_equalByTag.js","../../../node_modules/lodash-es/_equalObjects.js","../../../node_modules/lodash-es/_baseIsEqualDeep.js","../../../node_modules/lodash-es/_baseIsEqual.js","../../../node_modules/lodash-es/_baseIsMatch.js","../../../node_modules/lodash-es/_isStrictComparable.js","../../../node_modules/lodash-es/_getMatchData.js","../../../node_modules/lodash-es/_matchesStrictComparable.js","../../../node_modules/lodash-es/_baseMatches.js","../../../node_modules/lodash-es/_baseHasIn.js","../../../node_modules/lodash-es/_hasPath.js","../../../node_modules/lodash-es/hasIn.js","../../../node_modules/lodash-es/_baseMatchesProperty.js","../../../node_modules/lodash-es/_baseProperty.js","../../../node_modules/lodash-es/_basePropertyDeep.js","../../../node_modules/lodash-es/property.js","../../../node_modules/lodash-es/_baseIteratee.js","../../../node_modules/lodash-es/_createBaseFor.js","../../../node_modules/lodash-es/_baseFor.js","../../../node_modules/lodash-es/_baseForOwn.js","../../../node_modules/lodash-es/_createBaseEach.js","../../../node_modules/lodash-es/_baseEach.js","../../../node_modules/lodash-es/now.js","../../../node_modules/lodash-es/debounce.js","../../../node_modules/lodash-es/_assignMergeValue.js","../../../node_modules/lodash-es/isArrayLikeObject.js","../../../node_modules/lodash-es/_safeGet.js","../../../node_modules/lodash-es/toPlainObject.js","../../../node_modules/lodash-es/_baseMergeDeep.js","../../../node_modules/lodash-es/_baseMerge.js","../../../node_modules/lodash-es/_baseMap.js","../../../node_modules/lodash-es/map.js","../../../node_modules/lodash-es/flatMap.js","../../../node_modules/lodash-es/fromPairs.js","../../../node_modules/lodash-es/isEqual.js","../../../node_modules/lodash-es/isNil.js","../../../node_modules/lodash-es/isUndefined.js","../../../node_modules/lodash-es/merge.js","../../../node_modules/lodash-es/_baseSet.js","../../../node_modules/lodash-es/_basePickBy.js","../../../node_modules/lodash-es/_basePick.js","../../../node_modules/lodash-es/pick.js","../../../node_modules/lodash-es/set.js","../../../node_modules/element-plus/es/utils/types.mjs","../../../node_modules/element-plus/es/utils/raf.mjs","../../../node_modules/element-plus/es/utils/strings.mjs","../../../node_modules/element-plus/es/utils/objects.mjs","../../../node_modules/element-plus/es/utils/error.mjs","../../../node_modules/element-plus/es/utils/dom/style.mjs","../../../node_modules/element-plus/es/utils/dom/scroll.mjs","../../../node_modules/element-plus/es/utils/vue/props/runtime.mjs","../../../node_modules/element-plus/es/utils/vue/icon.mjs","../../../node_modules/element-plus/es/utils/vue/install.mjs","../../../node_modules/element-plus/es/utils/vue/refs.mjs","../../../node_modules/element-plus/es/constants/aria.mjs","../../../node_modules/element-plus/es/constants/event.mjs","../../../node_modules/element-plus/es/constants/size.mjs","../../../node_modules/element-plus/es/utils/vue/validator.mjs","../../../node_modules/element-plus/es/utils/vue/vnode.mjs","../../../node_modules/element-plus/es/utils/i18n.mjs","../../../node_modules/element-plus/es/utils/typescript.mjs","../../../node_modules/element-plus/es/hooks/use-attrs/index.mjs","../../../node_modules/element-plus/es/hooks/use-deprecated/index.mjs","../../../node_modules/element-plus/es/hooks/use-draggable/index.mjs","../../../node_modules/element-plus/es/locale/lang/en.mjs","../../../node_modules/element-plus/es/hooks/use-locale/index.mjs","../../../node_modules/element-plus/es/hooks/use-namespace/index.mjs","../../../node_modules/element-plus/es/hooks/use-lockscreen/index.mjs","../../../node_modules/element-plus/es/hooks/use-model-toggle/index.mjs","../../../node_modules/element-plus/es/hooks/use-prop/index.mjs","../../../node_modules/element-plus/node_modules/@popperjs/core/dist/index.mjs","../../../node_modules/element-plus/es/hooks/use-popper/index.mjs","../../../node_modules/element-plus/es/hooks/use-same-target/index.mjs","../../../node_modules/element-plus/es/hooks/use-timeout/index.mjs","../../../node_modules/element-plus/es/hooks/use-id/index.mjs","../../../node_modules/element-plus/es/hooks/use-escape-keydown/index.mjs","../../../node_modules/element-plus/es/hooks/use-popper-container/index.mjs","../../../node_modules/element-plus/es/hooks/use-delayed-toggle/index.mjs","../../../node_modules/element-plus/es/hooks/use-forward-ref/index.mjs","../../../node_modules/element-plus/es/hooks/use-z-index/index.mjs","../../../node_modules/element-plus/es/hooks/use-cursor/index.mjs","../../../node_modules/element-plus/es/hooks/use-ordered-children/index.mjs","../../../node_modules/element-plus/es/hooks/use-size/index.mjs","../../../node_modules/element-plus/es/hooks/use-focus-controller/index.mjs","../../../node_modules/element-plus/es/hooks/use-composition/index.mjs","../../../node_modules/element-plus/es/hooks/use-empty-values/index.mjs","../../../node_modules/element-plus/es/hooks/use-aria/index.mjs","../../../node_modules/element-plus/es/components/config-provider/src/constants.mjs","../../../node_modules/element-plus/es/components/config-provider/src/hooks/use-global-config.mjs","../../../node_modules/element-plus/es/components/config-provider/src/config-provider-props.mjs","../../../node_modules/element-plus/es/components/config-provider/src/config-provider.mjs","../../../node_modules/element-plus/es/_virtual/plugin-vue_export-helper.mjs","../../../node_modules/element-plus/es/components/icon/src/icon.mjs","../../../node_modules/element-plus/es/components/icon/src/icon2.mjs","../../../node_modules/element-plus/es/components/icon/index.mjs","../../../node_modules/element-plus/es/components/form/src/constants.mjs","../../../node_modules/element-plus/es/components/form/src/hooks/use-form-common-props.mjs","../../../node_modules/element-plus/es/components/form/src/hooks/use-form-item.mjs","../../../node_modules/element-plus/es/components/input/src/utils.mjs","../../../node_modules/element-plus/es/components/input/src/input.mjs","../../../node_modules/element-plus/es/components/input/src/input2.mjs","../../../node_modules/element-plus/es/components/input/index.mjs","../../../node_modules/element-plus/es/components/scrollbar/src/util.mjs","../../../node_modules/element-plus/es/components/scrollbar/src/constants.mjs","../../../node_modules/element-plus/es/components/scrollbar/src/thumb.mjs","../../../node_modules/element-plus/es/components/scrollbar/src/thumb2.mjs","../../../node_modules/element-plus/es/components/scrollbar/src/bar.mjs","../../../node_modules/element-plus/es/components/scrollbar/src/bar2.mjs","../../../node_modules/element-plus/es/components/scrollbar/src/scrollbar.mjs","../../../node_modules/element-plus/es/components/scrollbar/src/scrollbar2.mjs","../../../node_modules/element-plus/es/components/scrollbar/index.mjs","../../../node_modules/element-plus/es/components/popper/src/constants.mjs","../../../node_modules/element-plus/es/components/popper/src/popper.mjs","../../../node_modules/element-plus/es/components/popper/src/popper2.mjs","../../../node_modules/element-plus/es/components/popper/src/arrow.mjs","../../../node_modules/element-plus/es/components/popper/src/arrow2.mjs","../../../node_modules/element-plus/es/components/slot/src/only-child.mjs","../../../node_modules/element-plus/es/components/popper/src/trigger.mjs","../../../node_modules/element-plus/es/components/popper/src/trigger2.mjs","../../../node_modules/element-plus/es/components/focus-trap/src/tokens.mjs","../../../node_modules/element-plus/es/components/focus-trap/src/utils.mjs","../../../node_modules/element-plus/es/components/focus-trap/src/focus-trap.mjs","../../../node_modules/element-plus/es/components/popper/src/content.mjs","../../../node_modules/element-plus/es/components/popper/src/utils.mjs","../../../node_modules/element-plus/es/components/popper/src/composables/use-content.mjs","../../../node_modules/element-plus/es/components/popper/src/composables/use-content-dom.mjs","../../../node_modules/element-plus/es/components/popper/src/composables/use-focus-trap.mjs","../../../node_modules/element-plus/es/components/popper/src/content2.mjs","../../../node_modules/element-plus/es/components/popper/index.mjs","../../../node_modules/element-plus/es/components/tooltip/src/constants.mjs","../../../node_modules/element-plus/es/components/tooltip/src/content.mjs","../../../node_modules/element-plus/es/components/tooltip/src/trigger.mjs","../../../node_modules/element-plus/es/components/tooltip/src/tooltip.mjs","../../../node_modules/element-plus/es/components/tooltip/src/utils.mjs","../../../node_modules/element-plus/es/components/tooltip/src/trigger2.mjs","../../../node_modules/element-plus/es/components/teleport/src/teleport.mjs","../../../node_modules/element-plus/es/components/teleport/src/teleport2.mjs","../../../node_modules/element-plus/es/components/teleport/index.mjs","../../../node_modules/element-plus/es/components/tooltip/src/content2.mjs","../../../node_modules/element-plus/es/components/tooltip/src/tooltip2.mjs","../../../node_modules/element-plus/es/components/tooltip/index.mjs","../../../node_modules/element-plus/es/components/badge/src/badge.mjs","../../../node_modules/element-plus/es/components/badge/src/badge2.mjs","../../../node_modules/element-plus/es/components/badge/index.mjs","../../../node_modules/element-plus/es/components/button/src/constants.mjs","../../../node_modules/element-plus/es/components/button/src/use-button.mjs","../../../node_modules/element-plus/es/components/button/src/button.mjs","../../../node_modules/@ctrl/tinycolor/dist/module/util.js","../../../node_modules/@ctrl/tinycolor/dist/module/conversion.js","../../../node_modules/@ctrl/tinycolor/dist/module/css-color-names.js","../../../node_modules/@ctrl/tinycolor/dist/module/format-input.js","../../../node_modules/@ctrl/tinycolor/dist/module/index.js","../../../node_modules/element-plus/es/components/button/src/button-custom.mjs","../../../node_modules/element-plus/es/components/button/src/button2.mjs","../../../node_modules/element-plus/es/components/button/src/button-group.mjs","../../../node_modules/element-plus/es/components/button/src/button-group2.mjs","../../../node_modules/element-plus/es/components/button/index.mjs","../../../node_modules/element-plus/es/directives/click-outside/index.mjs","../../../node_modules/element-plus/es/directives/trap-focus/index.mjs","../../../node_modules/normalize-wheel-es/dist/index.mjs","../../../node_modules/element-plus/es/directives/mousewheel/index.mjs","../../../node_modules/element-plus/es/components/checkbox/src/checkbox.mjs","../../../node_modules/element-plus/es/components/checkbox/src/constants.mjs","../../../node_modules/element-plus/es/components/checkbox/src/composables/use-checkbox-disabled.mjs","../../../node_modules/element-plus/es/components/checkbox/src/composables/use-checkbox-event.mjs","../../../node_modules/element-plus/es/components/checkbox/src/composables/use-checkbox-model.mjs","../../../node_modules/element-plus/es/components/checkbox/src/composables/use-checkbox-status.mjs","../../../node_modules/element-plus/es/components/checkbox/src/composables/use-checkbox.mjs","../../../node_modules/element-plus/es/components/checkbox/src/checkbox2.mjs","../../../node_modules/element-plus/es/components/checkbox/src/checkbox-button.mjs","../../../node_modules/element-plus/es/components/checkbox/src/checkbox-group.mjs","../../../node_modules/element-plus/es/components/checkbox/src/checkbox-group2.mjs","../../../node_modules/element-plus/es/components/checkbox/index.mjs","../../../node_modules/element-plus/es/components/overlay/src/overlay.mjs","../../../node_modules/element-plus/es/components/overlay/index.mjs","../../../node_modules/element-plus/es/components/dialog/src/constants.mjs","../../../node_modules/element-plus/es/components/dialog/src/dialog-content.mjs","../../../node_modules/element-plus/es/components/dialog/src/dialog-content2.mjs","../../../node_modules/element-plus/es/components/dialog/src/dialog.mjs","../../../node_modules/element-plus/es/components/dialog/src/use-dialog.mjs","../../../node_modules/element-plus/es/components/dialog/src/dialog2.mjs","../../../node_modules/element-plus/es/components/dialog/index.mjs","../../../node_modules/element-plus/es/components/collection/src/collection2.mjs","../../../node_modules/element-plus/es/components/collection/src/collection-item.mjs","../../../node_modules/element-plus/es/components/collection/src/collection.mjs","../../../node_modules/element-plus/es/components/dropdown/src/dropdown.mjs","../../../node_modules/element-plus/es/components/empty/src/img-empty.mjs","../../../node_modules/element-plus/es/components/empty/src/empty.mjs","../../../node_modules/element-plus/es/components/empty/src/empty2.mjs","../../../node_modules/element-plus/es/components/empty/index.mjs","../../../node_modules/element-plus/es/components/popover/src/popover.mjs","../../../node_modules/element-plus/es/components/popover/src/popover2.mjs","../../../node_modules/element-plus/es/components/popover/src/directive.mjs","../../../node_modules/element-plus/es/components/popover/index.mjs","../../../node_modules/element-plus/es/components/progress/src/progress.mjs","../../../node_modules/element-plus/es/components/progress/src/progress2.mjs","../../../node_modules/element-plus/es/components/progress/index.mjs","../../../node_modules/element-plus/es/components/table/src/util.mjs","../../../node_modules/element-plus/es/components/table/src/store/expand.mjs","../../../node_modules/element-plus/es/components/table/src/store/current.mjs","../../../node_modules/element-plus/es/components/table/src/store/tree.mjs","../../../node_modules/element-plus/es/components/table/src/store/watcher.mjs","../../../node_modules/element-plus/es/components/table/src/store/index.mjs","../../../node_modules/element-plus/es/components/table/src/store/helper.mjs","../../../node_modules/element-plus/es/components/table/src/table-layout.mjs","../../../node_modules/element-plus/es/components/table/src/filter-panel.mjs","../../../node_modules/element-plus/es/components/table/src/layout-observer.mjs","../../../node_modules/element-plus/es/components/table/src/tokens.mjs","../../../node_modules/element-plus/es/components/table/src/table-header/event-helper.mjs","../../../node_modules/element-plus/es/components/table/src/table-header/style.helper.mjs","../../../node_modules/element-plus/es/components/table/src/table-header/utils-helper.mjs","../../../node_modules/element-plus/es/components/table/src/table-header/index.mjs","../../../node_modules/element-plus/es/components/table/src/table-body/events-helper.mjs","../../../node_modules/element-plus/es/components/table/src/table-body/styles-helper.mjs","../../../node_modules/element-plus/es/components/table/src/table-body/render-helper.mjs","../../../node_modules/element-plus/es/components/table/src/table-body/defaults.mjs","../../../node_modules/element-plus/es/components/table/src/table-body/index.mjs","../../../node_modules/element-plus/es/components/table/src/table-footer/mapState-helper.mjs","../../../node_modules/element-plus/es/components/table/src/table-footer/style-helper.mjs","../../../node_modules/element-plus/es/components/table/src/table-footer/index.mjs","../../../node_modules/element-plus/es/components/table/src/table/utils-helper.mjs","../../../node_modules/element-plus/es/components/table/src/table/style-helper.mjs","../../../node_modules/element-plus/es/components/table/src/table/key-render-helper.mjs","../../../node_modules/element-plus/es/components/table/src/table/defaults.mjs","../../../node_modules/element-plus/es/components/table/src/h-helper.mjs","../../../node_modules/element-plus/es/components/table/src/composables/use-scrollbar.mjs","../../../node_modules/element-plus/es/components/table/src/table.mjs","../../../node_modules/element-plus/es/components/table/src/config.mjs","../../../node_modules/element-plus/es/components/table/src/table-column/watcher-helper.mjs","../../../node_modules/element-plus/es/components/table/src/table-column/render-helper.mjs","../../../node_modules/element-plus/es/components/table/src/table-column/defaults.mjs","../../../node_modules/element-plus/es/components/table/src/table-column/index.mjs","../../../node_modules/element-plus/es/components/table/index.mjs","../../../node_modules/element-plus/es/components/tabs/src/constants.mjs","../../../node_modules/element-plus/es/components/tabs/src/tab-bar.mjs","../../../node_modules/element-plus/es/components/tabs/src/tab-bar2.mjs","../../../node_modules/element-plus/es/components/tabs/src/tab-nav.mjs","../../../node_modules/element-plus/es/components/tabs/src/tabs.mjs","../../../node_modules/element-plus/es/components/tabs/src/tab-pane.mjs","../../../node_modules/element-plus/es/components/tabs/src/tab-pane2.mjs","../../../node_modules/element-plus/es/components/tabs/index.mjs","../../../node_modules/element-plus/es/components/upload/src/constants.mjs","../../../node_modules/element-plus/es/components/upload/src/ajax.mjs","../../../node_modules/element-plus/es/components/upload/src/upload.mjs","../../../node_modules/element-plus/es/components/upload/src/upload-list.mjs","../../../node_modules/element-plus/es/components/upload/src/upload-list2.mjs","../../../node_modules/element-plus/es/components/upload/src/upload-dragger.mjs","../../../node_modules/element-plus/es/components/upload/src/upload-dragger2.mjs","../../../node_modules/element-plus/es/components/upload/src/upload-content.mjs","../../../node_modules/element-plus/es/components/upload/src/upload-content2.mjs","../../../node_modules/element-plus/es/components/upload/src/use-handlers.mjs","../../../node_modules/element-plus/es/components/upload/src/upload2.mjs","../../../node_modules/element-plus/es/components/upload/index.mjs","../../../node_modules/element-plus/es/components/loading/src/loading.mjs","../../../node_modules/element-plus/es/components/loading/src/service.mjs","../../../node_modules/element-plus/es/components/loading/src/directive.mjs","../../../node_modules/element-plus/es/components/loading/index.mjs","../../../node_modules/element-plus/es/components/message/src/message.mjs","../../../node_modules/element-plus/es/components/message/src/instance.mjs","../../../node_modules/element-plus/es/components/message/src/message2.mjs","../../../node_modules/element-plus/es/components/message/src/method.mjs","../../../node_modules/element-plus/es/components/message/index.mjs","../../../node_modules/element-plus/es/components/message-box/src/index.mjs","../../../node_modules/element-plus/es/components/message-box/src/messageBox.mjs","../../../node_modules/element-plus/es/components/message-box/index.mjs","../../../node_modules/moment/moment.js","../../../app/frontend/components/ui/back_button.vue","../../../app/frontend/plugins/shared_plugins.js","../../../app/frontend/plugins/constants_plugin.js","../../../app/frontend/pages/applicant/application/academics/_show.vue","../../../app/frontend/components/disciplines.vue","../../../app/frontend/pages/auth/edit.vue","../../../node_modules/vue-pdf-embed/dist/index.mjs","../../../app/frontend/components/applicant_profile.vue","../../../app/frontend/pages/applicant/public_profile.vue","../../../app/frontend/components/comments/index.vue"],"sourcesContent":["import axios from \"axios\";\nimport store from \"./index.js\"\n\nexport default {\n is_admin: false,\n is_applicant: false,\n is_company: false,\n token: null,\n set_login_as_token(token) {\n localStorage.user_token = token\n },\n set_token(token) {\n store.$auth.token = token\n if (store.$auth.is_admin) {\n localStorage.admin_token = token\n } else {\n localStorage.user_token = token\n }\n axios.defaults.headers.common['Authorization'] = token\n\n return token\n },\n init_company(){\n store.$auth.is_company = true\n store.$auth.init_token()\n },\n init_admin(){\n store.$auth.is_admin = true\n store.$auth.init_token()\n },\n init_applicant(){\n store.$auth.is_applicant = true\n store.$auth.init_token()\n },\n init_token() {\n let token = ''\n let api = ''\n if (store.$auth.is_admin) {\n token = localStorage.admin_token\n api = 'v1/admin/current_admin'\n } else{\n token = localStorage.user_token\n api = 'api/user'\n }\n\n if (token) {\n store.$auth.set_token(token)\n\n axios.get(api).then((response) =>{\n store.$current_user = response.data\n }).catch((error) => {\n store.$auth.logout()\n })\n return token\n }\n },\n logout() {\n store.$auth.set_token(null)\n }\n}","import {reactive} from 'vue'\nimport auth_store from \"@/store/auth_store.js\";\n\nlet store = reactive({\n $constants: {states:{}},\n $current_user: {},\n $term_conditions: {\n link: '/#/terms_and_conditions',\n get() {\n return store.$term_conditions.link\n },\n },\n $auth: auth_store,\n})\nexport default store","\nconst ThemeChanger = {\n init(color = null) {\n if (color) return this.setTheme(color)\n\n if (localStorage.theme) {\n this.setTheme(localStorage.theme)\n } else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // this.setTheme('dark')\n }else{\n this.setTheme('light')\n }\n },\n toggleTheme() {\n this.setTheme(this.getTheme() === 'dark' ? 'light' : 'dark')\n },\n getTheme() {\n return localStorage.theme\n },\n setTheme(color) {\n localStorage.theme = color\n const body = document.querySelector('html')\n body.setAttribute('data-theme', color);\n body.className = color;\n },\n}\n\nexport default ThemeChanger;","\n","\n","\n\n","\n","\n","\n\n\n","const FOCUSABLE_ELEMENT_SELECTORS = `a[href],button:not([disabled]),button:not([hidden]),:not([tabindex=\"-1\"]),input:not([disabled]),input:not([type=\"hidden\"]),select:not([disabled]),textarea:not([disabled])`;\nconst isVisible = (element) => {\n if (process.env.NODE_ENV === \"test\")\n return true;\n const computed = getComputedStyle(element);\n return computed.position === \"fixed\" ? false : element.offsetParent !== null;\n};\nconst obtainAllFocusableElements = (element) => {\n return Array.from(element.querySelectorAll(FOCUSABLE_ELEMENT_SELECTORS)).filter((item) => isFocusable(item) && isVisible(item));\n};\nconst isFocusable = (element) => {\n if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute(\"tabIndex\") !== null) {\n return true;\n }\n if (element.disabled) {\n return false;\n }\n switch (element.nodeName) {\n case \"A\": {\n return !!element.href && element.rel !== \"ignore\";\n }\n case \"INPUT\": {\n return !(element.type === \"hidden\" || element.type === \"file\");\n }\n case \"BUTTON\":\n case \"SELECT\":\n case \"TEXTAREA\": {\n return true;\n }\n default: {\n return false;\n }\n }\n};\nconst attemptFocus = (element) => {\n var _a;\n if (!isFocusable(element)) {\n return false;\n }\n (_a = element.focus) == null ? void 0 : _a.call(element);\n return document.activeElement === element;\n};\nconst triggerEvent = function(elm, name, ...opts) {\n let eventName;\n if (name.includes(\"mouse\") || name.includes(\"click\")) {\n eventName = \"MouseEvents\";\n } else if (name.includes(\"key\")) {\n eventName = \"KeyboardEvent\";\n } else {\n eventName = \"HTMLEvents\";\n }\n const evt = document.createEvent(eventName);\n evt.initEvent(name, ...opts);\n elm.dispatchEvent(evt);\n return elm;\n};\nconst isLeaf = (el) => !el.getAttribute(\"aria-owns\");\nconst getSibling = (el, distance, elClass) => {\n const { parentNode } = el;\n if (!parentNode)\n return null;\n const siblings = parentNode.querySelectorAll(elClass);\n const index = Array.prototype.indexOf.call(siblings, el);\n return siblings[index + distance] || null;\n};\nconst focusNode = (el) => {\n if (!el)\n return;\n el.focus();\n !isLeaf(el) && el.click();\n};\n\nexport { attemptFocus, focusNode, getSibling, isFocusable, isLeaf, isVisible, obtainAllFocusableElements, triggerEvent };\n//# sourceMappingURL=aria.mjs.map\n","const composeEventHandlers = (theirsHandler, oursHandler, { checkForDefaultPrevented = true } = {}) => {\n const handleEvent = (event) => {\n const shouldPrevent = theirsHandler == null ? void 0 : theirsHandler(event);\n if (checkForDefaultPrevented === false || !shouldPrevent) {\n return oursHandler == null ? void 0 : oursHandler(event);\n }\n };\n return handleEvent;\n};\nconst whenMouse = (handler) => {\n return (e) => e.pointerType === \"mouse\" ? handler(e) : void 0;\n};\n\nexport { composeEventHandlers, whenMouse };\n//# sourceMappingURL=event.mjs.map\n","import { shallowRef, watchEffect, readonly, unref, ref, isVue3, version, watch, customRef, getCurrentScope, onScopeDispose, effectScope, provide, inject, isRef, computed, reactive, toRefs as toRefs$1, toRef, isVue2, set as set$1, getCurrentInstance, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$b.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n if (__getOwnPropSymbols$b)\n for (var prop of __getOwnPropSymbols$b(b)) {\n if (__propIsEnum$b.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, __spreadProps$6(__spreadValues$9({}, options), {\n flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n }));\n return readonly(result);\n}\n\nvar _a;\nconst isClient = typeof window !== \"undefined\";\nconst isDef = (val) => typeof val !== \"undefined\";\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isBoolean = (val) => typeof val === \"boolean\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isNumber = (val) => typeof val === \"number\";\nconst isString = (val) => typeof val === \"string\";\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst isWindow = (val) => typeof window !== \"undefined\" && toString.call(val) === \"[object Window]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent);\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\n\nfunction resolveUnref(r) {\n return typeof r === \"function\" ? r() : unref(r);\n}\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n return new Promise((resolve, reject) => {\n Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n let lastRejector = noop;\n const _clearTimeout = (timer2) => {\n clearTimeout(timer2);\n lastRejector();\n lastRejector = noop;\n };\n const filter = (invoke) => {\n const duration = resolveUnref(ms);\n const maxDuration = resolveUnref(options.maxWait);\n if (timer)\n _clearTimeout(timer);\n if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n if (maxTimer) {\n _clearTimeout(maxTimer);\n maxTimer = null;\n }\n return Promise.resolve(invoke());\n }\n return new Promise((resolve, reject) => {\n lastRejector = options.rejectOnCancel ? reject : resolve;\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n _clearTimeout(timer);\n maxTimer = null;\n resolve(invoke());\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n _clearTimeout(maxTimer);\n maxTimer = null;\n resolve(invoke());\n }, duration);\n });\n };\n return filter;\n}\nfunction throttleFilter(ms, trailing = true, leading = true, rejectOnCancel = false) {\n let lastExec = 0;\n let timer;\n let isLeading = true;\n let lastRejector = noop;\n let lastValue;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n lastRejector();\n lastRejector = noop;\n }\n };\n const filter = (_invoke) => {\n const duration = resolveUnref(ms);\n const elapsed = Date.now() - lastExec;\n const invoke = () => {\n return lastValue = _invoke();\n };\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration && (leading || !isLeading)) {\n lastExec = Date.now();\n invoke();\n } else if (trailing) {\n lastValue = new Promise((resolve, reject) => {\n lastRejector = rejectOnCancel ? reject : resolve;\n timer = setTimeout(() => {\n lastExec = Date.now();\n isLeading = true;\n resolve(invoke());\n clear();\n }, Math.max(0, duration - elapsed));\n });\n }\n if (!leading && !timer)\n timer = setTimeout(() => isLeading = true, duration);\n isLeading = false;\n return lastValue;\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n const isActive = ref(true);\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nfunction __onlyVue3(name = \"this function\") {\n if (isVue3)\n return;\n throw new Error(`[VueUse] ${name} is only works on Vue 3.`);\n}\nfunction __onlyVue27Plus(name = \"this function\") {\n if (isVue3 || version.startsWith(\"2.7.\"))\n return;\n throw new Error(`[VueUse] ${name} is only works on Vue 2.7 or above.`);\n}\nconst directiveHooks = {\n mounted: isVue3 ? \"mounted\" : \"inserted\",\n updated: isVue3 ? \"updated\" : \"componentUpdated\",\n unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = void 0;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || obj[k] !== void 0)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\n\nfunction computedWithControl(source, fn) {\n let v = void 0;\n let track;\n let trigger;\n const dirty = ref(true);\n const update = () => {\n dirty.value = true;\n trigger();\n };\n watch(source, update, { flush: \"sync\" });\n const get = isFunction(fn) ? fn : fn.get;\n const set = isFunction(fn) ? void 0 : fn.set;\n const result = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = get();\n dirty.value = false;\n }\n track();\n return v;\n },\n set(v2) {\n set == null ? void 0 : set(v2);\n }\n };\n });\n if (Object.isExtensible(result))\n result.trigger = update;\n return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createEventHook() {\n const fns = [];\n const off = (fn) => {\n const index = fns.indexOf(fn);\n if (index !== -1)\n fns.splice(index, 1);\n };\n const on = (fn) => {\n fns.push(fn);\n const offFn = () => off(fn);\n tryOnScopeDispose(offFn);\n return {\n off: offFn\n };\n };\n const trigger = (param) => {\n fns.forEach((fn) => fn(param));\n };\n return {\n on,\n off,\n trigger\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return () => {\n if (!initialized) {\n state = scope.run(stateFactory);\n initialized = true;\n }\n return state;\n };\n}\n\nfunction createInjectionState(composable) {\n const key = Symbol(\"InjectionState\");\n const useProvidingState = (...args) => {\n const state = composable(...args);\n provide(key, state);\n return state;\n };\n const useInjectedState = () => inject(key);\n return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = void 0;\n scope = void 0;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!state) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n __onlyVue27Plus();\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$a.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n if (__getOwnPropSymbols$a)\n for (var prop of __getOwnPropSymbols$a(b)) {\n if (__propIsEnum$a.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n }\n return a;\n};\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = __spreadValues$8({}, obj);\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction reactify(fn, options) {\n const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : resolveUnref;\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n let options;\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n options = optionsOrKeys;\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n ];\n }));\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n const flatKeys = keys.flat();\n return reactiveComputed(() => Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nfunction reactivePick(obj, ...keys) {\n const flatKeys = keys.flat();\n return reactive(Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = defaultValue;\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = defaultValue;\n trigger();\n }, resolveUnref(afterMs));\n tryOnScopeDispose(() => {\n clearTimeout(timer);\n });\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(debounceFilter(ms, options), fn);\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n return createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(ref, {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n }, { enumerable: true });\n}\nconst controlledRef = refWithControl;\n\nfunction resolveRef(r) {\n return typeof r === \"function\" ? computed(r) : ref(r);\n}\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n if (isVue2) {\n set$1(...args);\n } else {\n const [target, key, value] = args;\n target[key] = value;\n }\n }\n}\n\nfunction syncRef(left, right, options = {}) {\n var _a, _b;\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\",\n transform = {}\n } = options;\n let watchLeft;\n let watchRight;\n const transformLTR = (_a = transform.ltr) != null ? _a : (v) => v;\n const transformRTL = (_b = transform.rtl) != null ? _b : (v) => v;\n if (direction === \"both\" || direction === \"ltr\") {\n watchLeft = watch(left, (newValue) => right.value = transformLTR(newValue), { flush, deep, immediate });\n }\n if (direction === \"both\" || direction === \"rtl\") {\n watchRight = watch(right, (newValue) => left.value = transformRTL(newValue), { flush, deep, immediate });\n }\n return () => {\n watchLeft == null ? void 0 : watchLeft();\n watchRight == null ? void 0 : watchRight();\n };\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n if (!Array.isArray(targets))\n targets = [targets];\n return watch(source, (newValue) => targets.forEach((target) => target.value = newValue), { flush, deep, immediate });\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$9.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n if (__getOwnPropSymbols$9)\n for (var prop of __getOwnPropSymbols$9(b)) {\n if (__propIsEnum$9.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction toRefs(objectRef) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? new Array(objectRef.value.length) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n const newObject = __spreadProps$5(__spreadValues$7({}, objectRef.value), { [key]: v });\n Object.setPrototypeOf(newObject, objectRef.value);\n objectRef.value = newObject;\n }\n }\n }));\n }\n return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true) {\n if (getCurrentInstance())\n onBeforeMount(fn);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn) {\n if (getCurrentInstance())\n onBeforeUnmount(fn);\n}\n\nfunction tryOnMounted(fn, sync = true) {\n if (getCurrentInstance())\n onMounted(fn);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn) {\n if (getCurrentInstance())\n onUnmounted(fn);\n}\n\nfunction createUntil(r, isNot = false) {\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(r, (v) => {\n if (condition(v) !== isNot) {\n stop == null ? void 0 : stop();\n resolve(v);\n }\n }, {\n flush,\n deep,\n immediate: true\n });\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => stop == null ? void 0 : stop()));\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n if (!isRef(value))\n return toMatch((v) => v === value, options);\n const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch([r, value], ([v1, v2]) => {\n if (isNot !== (v1 === v2)) {\n stop == null ? void 0 : stop();\n resolve(v1);\n }\n }, {\n flush,\n deep,\n immediate: true\n });\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => {\n stop == null ? void 0 : stop();\n return resolveUnref(r);\n }));\n }\n return Promise.race(promises);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(void 0, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(resolveUnref(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(resolveUnref(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n }\n}\nfunction until(r) {\n return createUntil(r);\n}\n\nfunction useArrayEvery(list, fn) {\n return computed(() => resolveUnref(list).every((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n return computed(() => resolveUnref(resolveUnref(list).find((element, index, array) => fn(resolveUnref(element), index, array))));\n}\n\nfunction useArrayFindIndex(list, fn) {\n return computed(() => resolveUnref(list).findIndex((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n let index = arr.length;\n while (index-- > 0) {\n if (cb(arr[index], index, arr))\n return arr[index];\n }\n return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n return computed(() => resolveUnref(!Array.prototype.findLast ? findLast(resolveUnref(list), (element, index, array) => fn(resolveUnref(element), index, array)) : resolveUnref(list).findLast((element, index, array) => fn(resolveUnref(element), index, array))));\n}\n\nfunction useArrayJoin(list, separator) {\n return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).join(resolveUnref(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n const reduceCallback = (sum, value, index) => reducer(resolveUnref(sum), resolveUnref(value), index);\n return computed(() => {\n const resolved = resolveUnref(list);\n return args.length ? resolved.reduce(reduceCallback, resolveUnref(args[0])) : resolved.reduce(reduceCallback);\n });\n}\n\nfunction useArraySome(list, fn) {\n return computed(() => resolveUnref(list).some((element, index, array) => fn(resolveUnref(element), index, array)));\n}\n\nfunction useArrayUnique(list) {\n return computed(() => [...new Set(resolveUnref(list).map((element) => resolveUnref(element)))]);\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n const count = ref(initialValue);\n const {\n max = Infinity,\n min = -Infinity\n } = options;\n const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n const get = () => count.value;\n const set = (val) => count.value = Math.max(min, Math.min(max, val));\n const reset = (val = initialValue) => {\n initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nconst defaultMeridiem = (hours, minutes, isLowercase, hasPeriod) => {\n let m = hours < 12 ? \"AM\" : \"PM\";\n if (hasPeriod)\n m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n return isLowercase ? m.toLowerCase() : m;\n};\nconst formatDate = (date, formatStr, options = {}) => {\n var _a;\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n const matches = {\n YY: () => String(years).slice(-2),\n YYYY: () => years,\n M: () => month + 1,\n MM: () => `${month + 1}`.padStart(2, \"0\"),\n MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n D: () => String(days),\n DD: () => `${days}`.padStart(2, \"0\"),\n H: () => String(hours),\n HH: () => `${hours}`.padStart(2, \"0\"),\n h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: () => String(minutes),\n mm: () => `${minutes}`.padStart(2, \"0\"),\n s: () => String(seconds),\n ss: () => `${seconds}`.padStart(2, \"0\"),\n SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n d: () => day,\n dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n A: () => meridiem(hours, minutes),\n AA: () => meridiem(hours, minutes, false, true),\n a: () => meridiem(hours, minutes, true),\n aa: () => meridiem(hours, minutes, true, true)\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => $1 || matches[match]());\n};\nconst normalizeDate = (date) => {\n if (date === null)\n return new Date(NaN);\n if (date === void 0)\n return new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n};\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n return computed(() => formatDate(normalizeDate(resolveUnref(date)), resolveUnref(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = ref(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n const intervalValue = resolveUnref(interval);\n if (intervalValue <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n timer = setInterval(cb, intervalValue);\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval) || isFunction(interval)) {\n const stopWatch = watch(interval, () => {\n if (isActive.value && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$8.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n if (__getOwnPropSymbols$8)\n for (var prop of __getOwnPropSymbols$8(b)) {\n if (__propIsEnum$8.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n }\n return a;\n};\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true,\n callback\n } = options;\n const counter = ref(0);\n const update = () => counter.value += 1;\n const reset = () => {\n counter.value = 0;\n };\n const controls = useIntervalFn(callback ? () => {\n update();\n callback(counter.value);\n } : update, interval, { immediate });\n if (exposeControls) {\n return __spreadValues$6({\n counter,\n reset\n }, controls);\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = ref((_a = options.initialValue) != null ? _a : null);\n watch(source, () => ms.value = timestamp(), options);\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const isPending = ref(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, resolveUnref(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending: readonly(isPending),\n start,\n stop\n };\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$7.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n if (__getOwnPropSymbols$7)\n for (var prop of __getOwnPropSymbols$7(b)) {\n if (__propIsEnum$7.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n }\n return a;\n};\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n callback\n } = options;\n const controls = useTimeoutFn(callback != null ? callback : noop, interval, options);\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return __spreadValues$5({\n ready\n }, controls);\n } else {\n return ready;\n }\n}\n\nfunction useToNumber(value, options = {}) {\n const {\n method = \"parseFloat\",\n radix,\n nanToZero\n } = options;\n return computed(() => {\n let resolved = resolveUnref(value);\n if (typeof resolved === \"string\")\n resolved = Number[method](resolved, radix);\n if (nanToZero && isNaN(resolved))\n resolved = 0;\n return resolved;\n });\n}\n\nfunction useToString(value) {\n return computed(() => `${resolveUnref(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n const {\n truthyValue = true,\n falsyValue = false\n } = options;\n const valueIsRef = isRef(initialValue);\n const _value = ref(initialValue);\n function toggle(value) {\n if (arguments.length) {\n _value.value = value;\n return _value.value;\n } else {\n const truthy = resolveUnref(truthyValue);\n _value.value = _value.value === truthy ? resolveUnref(falsyValue) : truthy;\n return _value.value;\n }\n }\n if (valueIsRef)\n return toggle;\n else\n return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n let oldList = (options == null ? void 0 : options.immediate) ? [] : [\n ...source instanceof Function ? source() : Array.isArray(source) ? source : unref(source)\n ];\n return watch(source, (newList, _, onCleanup) => {\n const oldListRemains = new Array(oldList.length);\n const added = [];\n for (const obj of newList) {\n let found = false;\n for (let i = 0; i < oldList.length; i++) {\n if (!oldListRemains[i] && obj === oldList[i]) {\n oldListRemains[i] = true;\n found = true;\n break;\n }\n }\n if (!found)\n added.push(obj);\n }\n const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n cb(newList, oldList, added, removed, onCleanup);\n oldList = [...newList];\n }, options);\n}\n\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __objRest$5 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$6)\n for (var prop of __getOwnPropSymbols$6(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchWithFilter(source, cb, options = {}) {\n const _a = options, {\n eventFilter = bypassFilter\n } = _a, watchOptions = __objRest$5(_a, [\n \"eventFilter\"\n ]);\n return watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __objRest$4 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$5.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$5)\n for (var prop of __getOwnPropSymbols$5(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$5.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchAtMost(source, cb, options) {\n const _a = options, {\n count\n } = _a, watchOptions = __objRest$4(_a, [\n \"count\"\n ]);\n const current = ref(0);\n const stop = watchWithFilter(source, (...args) => {\n current.value += 1;\n if (current.value >= resolveUnref(count))\n nextTick(() => stop());\n cb(...args);\n }, watchOptions);\n return { count: current, stop };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n if (__getOwnPropSymbols$4)\n for (var prop of __getOwnPropSymbols$4(b)) {\n if (__propIsEnum$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nvar __objRest$3 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$4)\n for (var prop of __getOwnPropSymbols$4(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchDebounced(source, cb, options = {}) {\n const _a = options, {\n debounce = 0,\n maxWait = void 0\n } = _a, watchOptions = __objRest$3(_a, [\n \"debounce\",\n \"maxWait\"\n ]);\n return watchWithFilter(source, cb, __spreadProps$4(__spreadValues$4({}, watchOptions), {\n eventFilter: debounceFilter(debounce, { maxWait })\n }));\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n if (__getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(b)) {\n if (__propIsEnum$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nvar __objRest$2 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$3.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$3.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchIgnorable(source, cb, options = {}) {\n const _a = options, {\n eventFilter = bypassFilter\n } = _a, watchOptions = __objRest$2(_a, [\n \"eventFilter\"\n ]);\n const filteredCb = createFilterWrapper(eventFilter, cb);\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = ref(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(source, (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n }, watchOptions);\n } else {\n const disposables = [];\n const ignoreCounter = ref(0);\n const syncCounter = ref(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(watch(source, () => {\n syncCounter.value++;\n }, __spreadProps$3(__spreadValues$3({}, watchOptions), { flush: \"sync\" })));\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(watch(source, (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n }, watchOptions));\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nvar __objRest$1 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchPausable(source, cb, options = {}) {\n const _a = options, {\n eventFilter: filter\n } = _a, watchOptions = __objRest$1(_a, [\n \"eventFilter\"\n ]);\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n const stop = watchWithFilter(source, cb, __spreadProps$2(__spreadValues$2({}, watchOptions), {\n eventFilter\n }));\n return { stop, pause, resume, isActive };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction watchThrottled(source, cb, options = {}) {\n const _a = options, {\n throttle = 0,\n trailing = true,\n leading = true\n } = _a, watchOptions = __objRest(_a, [\n \"throttle\",\n \"trailing\",\n \"leading\"\n ]);\n return watchWithFilter(source, cb, __spreadProps$1(__spreadValues$1({}, watchOptions), {\n eventFilter: throttleFilter(throttle, trailing, leading)\n }));\n}\n\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction watchTriggerable(source, cb, options = {}) {\n let cleanupFn;\n function onEffect() {\n if (!cleanupFn)\n return;\n const fn = cleanupFn;\n cleanupFn = void 0;\n fn();\n }\n function onCleanup(callback) {\n cleanupFn = callback;\n }\n const _cb = (value, oldValue) => {\n onEffect();\n return cb(value, oldValue, onCleanup);\n };\n const res = watchIgnorable(source, _cb, options);\n const { ignoreUpdates } = res;\n const trigger = () => {\n let res2;\n ignoreUpdates(() => {\n res2 = _cb(getWatchSources(source), getOldValue(source));\n });\n return res2;\n };\n return __spreadProps(__spreadValues({}, res), {\n trigger\n });\n}\nfunction getWatchSources(sources) {\n if (isReactive(sources))\n return sources;\n if (Array.isArray(sources))\n return sources.map((item) => getOneWatchSource(item));\n return getOneWatchSource(sources);\n}\nfunction getOneWatchSource(source) {\n return typeof source === \"function\" ? source() : unref(source);\n}\nfunction getOldValue(source) {\n return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n return watch(source, (v, ov, onInvalidate) => {\n if (v)\n cb(v, ov, onInvalidate);\n }, options);\n}\n\nexport { __onlyVue27Plus, __onlyVue3, assert, refAutoReset as autoResetRef, bypassFilter, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, hasOwn, identity, watchIgnorable as ignorableWatch, increaseWithUnit, invoke, isBoolean, isClient, isDef, isDefined, isFunction, isIOS, isNumber, isObject, isString, isWindow, makeDestructurable, noop, normalizeDate, now, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchIgnorable, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { noop, resolveUnref, isClient, isString, tryOnScopeDispose, isIOS, tryOnMounted, computedWithControl, promiseTimeout, isFunction, resolveRef, increaseWithUnit, useTimeoutFn, pausableWatch, createEventHook, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, createSingletonPromise, toRefs, containsProp, until, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, isObject, isNumber, useIntervalFn, clamp, syncRef, objectPick, tryOnUnmounted, watchWithFilter, identity, isDef } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, unref, watch, getCurrentInstance, customRef, onUpdated, reactive, nextTick, onMounted, markRaw, readonly, getCurrentScope, isVue2, set, del, isReadonly, onBeforeUpdate } from 'vue-demi';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = void 0,\n shallow = false,\n onError = noop\n } = options;\n const started = ref(!lazy);\n const current = shallow ? shallowRef(initialState) : ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating && counterAtBeginning === counter)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nconst createUnrefFn = (fn) => {\n return function(...args) {\n return fn.apply(this, args.map((i) => unref(i)));\n };\n};\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = resolveUnref(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (isString(args[0]) || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n if (!Array.isArray(events))\n events = [events];\n if (!Array.isArray(listeners))\n listeners = [listeners];\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(() => [unrefElement(target), resolveUnref(options)], ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n cleanups.push(...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, options2));\n }));\n }, { immediate: true, flush: \"post\" });\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return ignore.some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n const listener = (event) => {\n const el = unrefElement(target);\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n const cleanup = [\n useEventListener(window, \"click\", listener, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n if (el)\n shouldListen = !e.composedPath().includes(el) && !shouldIgnore(e);\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement)))\n handler(event);\n })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nvar __defProp$n = Object.defineProperty;\nvar __defProps$9 = Object.defineProperties;\nvar __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$p = Object.getOwnPropertySymbols;\nvar __hasOwnProp$p = Object.prototype.hasOwnProperty;\nvar __propIsEnum$p = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$n = (obj, key, value) => key in obj ? __defProp$n(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$n = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$p.call(b, prop))\n __defNormalProp$n(a, prop, b[prop]);\n if (__getOwnPropSymbols$p)\n for (var prop of __getOwnPropSymbols$p(b)) {\n if (__propIsEnum$p.call(b, prop))\n __defNormalProp$n(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));\nconst createKeyPredicate = (keyFilter) => {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n};\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const { target = defaultWindow, eventName = \"keydown\", passive = false } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$n({}, options), { eventName: \"keydown\" }));\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$n({}, options), { eventName: \"keypress\" }));\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$n({}, options), { eventName: \"keyup\" }));\n}\n\nconst DEFAULT_DELAY = 500;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n timeout = setTimeout(() => handler(ev), (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY);\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions);\n useEventListener(elementRef, \"pointerup\", clear, listenerOptions);\n useEventListener(elementRef, \"pointerleave\", clear, listenerOptions);\n}\n\nconst isFocusedElementEditable = () => {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n};\nconst isTypedCharValid = ({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) => {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n return false;\n};\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useActiveElement(options = {}) {\n var _a;\n const { window = defaultWindow } = options;\n const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n const activeElement = computedWithControl(() => null, () => document == null ? void 0 : document.activeElement);\n if (window) {\n useEventListener(window, \"blur\", (event) => {\n if (event.relatedTarget !== null)\n return;\n activeElement.trigger();\n }, true);\n useEventListener(window, \"focus\", activeElement.trigger, true);\n }\n return activeElement;\n}\n\nfunction useAsyncQueue(tasks, options = {}) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop\n } = options;\n const promiseState = {\n pending: \"pending\",\n rejected: \"rejected\",\n fulfilled: \"fulfilled\"\n };\n const initialResult = Array.from(new Array(tasks.length), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = ref(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n return curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n activeIndex.value === tasks.length - 1 && onFinished();\n return currentRes;\n });\n }).catch((e) => {\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = ref(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw error;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate)\n execute(delay);\n return {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n}\n\nconst defaults = {\n array: (v) => JSON.stringify(v),\n object: (v) => JSON.stringify(v),\n set: (v) => JSON.stringify(Array.from(v)),\n map: (v) => JSON.stringify(Object.fromEntries(v)),\n null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n if (!target)\n return defaults.null;\n if (target instanceof Map)\n return defaults.map;\n else if (target instanceof Set)\n return defaults.set;\n else if (Array.isArray(target))\n return defaults.array;\n else\n return defaults.object;\n}\n\nfunction useBase64(target, options) {\n const base64 = ref(\"\");\n const promise = ref();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = resolveUnref(target);\n if (_target == null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else if (typeof _target === \"object\") {\n const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n const serialized = _serializeFn(_target);\n return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => base64.value = res);\n return promise.value;\n }\n if (isRef(target) || isFunction(target))\n watch(target, execute, { immediate: true });\n else\n execute();\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useSupported(callback, sync = false) {\n const isSupported = ref();\n const update = () => isSupported.value = Boolean(callback());\n update();\n tryOnMounted(update, sync);\n return isSupported;\n}\n\nfunction useBattery({ navigator = defaultNavigator } = {}) {\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = useSupported(() => navigator && \"getBattery\" in navigator);\n const charging = ref(false);\n const chargingTime = ref(0);\n const dischargingTime = ref(0);\n const level = ref(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported.value) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n for (const event of events)\n useEventListener(battery, event, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useBluetooth(options) {\n let {\n acceptAllDevices = false\n } = options || {};\n const {\n filters = void 0,\n optionalServices = void 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n const device = shallowRef(void 0);\n const error = shallowRef(null);\n watch(device, () => {\n connectToBluetoothGATTServer();\n });\n async function requestDevice() {\n if (!isSupported.value)\n return;\n error.value = null;\n if (filters && filters.length > 0)\n acceptAllDevices = false;\n try {\n device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n acceptAllDevices,\n filters,\n optionalServices\n }));\n } catch (err) {\n error.value = err;\n }\n }\n const server = ref();\n const isConnected = computed(() => {\n var _a;\n return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n });\n async function connectToBluetoothGATTServer() {\n error.value = null;\n if (device.value && device.value.gatt) {\n device.value.addEventListener(\"gattserverdisconnected\", () => {\n });\n try {\n server.value = await device.value.gatt.connect();\n } catch (err) {\n error.value = err;\n }\n }\n }\n tryOnMounted(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.connect();\n });\n tryOnScopeDispose(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n });\n return {\n isSupported,\n isConnected,\n device,\n requestDevice,\n server,\n error\n };\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n let mediaQuery;\n const matches = ref(false);\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", update);\n else\n mediaQuery.removeListener(update);\n };\n const update = () => {\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(resolveRef(query).value);\n matches.value = mediaQuery.matches;\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", update);\n else\n mediaQuery.addListener(update);\n };\n watchEffect(update);\n tryOnScopeDispose(() => cleanup());\n return matches;\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetify = {\n xs: 600,\n sm: 960,\n md: 1264,\n lg: 1904\n};\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 600,\n sm: 1024,\n md: 1440,\n lg: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n \"3xs\": 360,\n \"2xs\": 480,\n \"xs\": 600,\n \"sm\": 768,\n \"md\": 1024,\n \"lg\": 1280,\n \"xl\": 1440,\n \"2xl\": 1600,\n \"3xl\": 1920,\n \"4xl\": 2560\n};\n\nvar __defProp$m = Object.defineProperty;\nvar __getOwnPropSymbols$o = Object.getOwnPropertySymbols;\nvar __hasOwnProp$o = Object.prototype.hasOwnProperty;\nvar __propIsEnum$o = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$m = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$o.call(b, prop))\n __defNormalProp$m(a, prop, b[prop]);\n if (__getOwnPropSymbols$o)\n for (var prop of __getOwnPropSymbols$o(b)) {\n if (__propIsEnum$o.call(b, prop))\n __defNormalProp$m(a, prop, b[prop]);\n }\n return a;\n};\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = breakpoints[k];\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow } = options;\n function match(query) {\n if (!window)\n return false;\n return window.matchMedia(query).matches;\n }\n const greaterOrEqual = (k) => {\n return useMediaQuery(`(min-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => greaterOrEqual(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n return __spreadValues$m({\n greater(k) {\n return useMediaQuery(`(min-width: ${getValue(k, 0.1)})`, options);\n },\n greaterOrEqual,\n smaller(k) {\n return useMediaQuery(`(max-width: ${getValue(k, -0.1)})`, options);\n },\n smallerOrEqual(k) {\n return useMediaQuery(`(max-width: ${getValue(k)})`, options);\n },\n between(a, b) {\n return useMediaQuery(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(`(min-width: ${getValue(k, 0.1)})`);\n },\n isGreaterOrEqual(k) {\n return match(`(min-width: ${getValue(k)})`);\n },\n isSmaller(k) {\n return match(`(max-width: ${getValue(k, -0.1)})`);\n },\n isSmallerOrEqual(k) {\n return match(`(max-width: ${getValue(k)})`);\n },\n isInBetween(a, b) {\n return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n }\n }, shortcutMethods);\n}\n\nconst useBroadcastChannel = (options) => {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n const isClosed = ref(false);\n const channel = ref();\n const data = ref();\n const error = ref(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported.value) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n channel.value.addEventListener(\"message\", (e) => {\n data.value = e.data;\n }, { passive: true });\n channel.value.addEventListener(\"messageerror\", (e) => {\n error.value = e;\n }, { passive: true });\n channel.value.addEventListener(\"close\", () => {\n isClosed.value = true;\n });\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n};\n\nfunction useBrowserLocation({ window = defaultWindow } = {}) {\n const buildState = (trigger) => {\n const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n const { hash, host, hostname, href, origin, pathname, port, protocol, search } = (window == null ? void 0 : window.location) || {};\n return {\n trigger,\n state: state2,\n length,\n hash,\n host,\n hostname,\n href,\n origin,\n pathname,\n port,\n protocol,\n search\n };\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n const cachedValue = ref(refValue.value);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500,\n legacy = false\n } = options;\n const events = [\"copy\", \"cut\"];\n const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n const text = ref(\"\");\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n function updateText() {\n if (isClipboardApiSupported.value) {\n navigator.clipboard.readText().then((value) => {\n text.value = value;\n });\n } else {\n text.value = legacyRead();\n }\n }\n if (isSupported.value && read) {\n for (const event of events)\n useEventListener(event, updateText);\n }\n async function copy(value = resolveUnref(source)) {\n if (isSupported.value && value != null) {\n if (isClipboardApiSupported.value)\n await navigator.clipboard.writeText(value);\n else\n legacyCopy(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n function legacyCopy(value) {\n const ta = document.createElement(\"textarea\");\n ta.value = value != null ? value : \"\";\n ta.style.position = \"absolute\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n function legacyRead() {\n var _a, _b, _c;\n return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nvar __defProp$l = Object.defineProperty;\nvar __defProps$8 = Object.defineProperties;\nvar __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$n = Object.getOwnPropertySymbols;\nvar __hasOwnProp$n = Object.prototype.hasOwnProperty;\nvar __propIsEnum$n = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$l = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$n.call(b, prop))\n __defNormalProp$l(a, prop, b[prop]);\n if (__getOwnPropSymbols$n)\n for (var prop of __getOwnPropSymbols$n(b)) {\n if (__propIsEnum$n.call(b, prop))\n __defNormalProp$l(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));\nfunction cloneFnJSON(source) {\n return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n const cloned = ref({});\n const {\n manual,\n clone = cloneFnJSON,\n deep = true,\n immediate = true\n } = options;\n function sync() {\n cloned.value = clone(unref(source));\n }\n if (!manual && isRef(source)) {\n watch(source, sync, __spreadProps$8(__spreadValues$l({}, options), {\n deep,\n immediate\n }));\n } else {\n sync();\n }\n return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\n_global[globalKey] = _global[globalKey] || {};\nconst handlers = _global[globalKey];\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nvar __defProp$k = Object.defineProperty;\nvar __getOwnPropSymbols$m = Object.getOwnPropertySymbols;\nvar __hasOwnProp$m = Object.prototype.hasOwnProperty;\nvar __propIsEnum$m = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$k = (obj, key, value) => key in obj ? __defProp$k(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$k = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$m.call(b, prop))\n __defNormalProp$k(a, prop, b[prop]);\n if (__getOwnPropSymbols$m)\n for (var prop of __getOwnPropSymbols$m(b)) {\n if (__propIsEnum$m.call(b, prop))\n __defNormalProp$k(a, prop, b[prop]);\n }\n return a;\n};\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const data = (shallow ? shallowRef : ref)(defaults);\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = resolveUnref(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(data, () => write(data.value), { flush, deep, eventFilter });\n if (window && listenToStorageChanges) {\n useEventListener(window, \"storage\", update);\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n }\n update();\n return data;\n function write(v) {\n try {\n if (v == null) {\n storage.removeItem(key);\n } else {\n const serialized = serializer.write(v);\n const oldValue = storage.getItem(key);\n if (oldValue !== serialized) {\n storage.setItem(key, serialized);\n if (window) {\n window.dispatchEvent(new CustomEvent(customStorageEventName, {\n detail: {\n key,\n oldValue,\n newValue: serialized,\n storageArea: storage\n }\n }));\n }\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(key);\n if (rawValue == null) {\n if (writeDefaults && rawInit !== null)\n storage.setItem(key, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (isFunction(mergeDefaults))\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return __spreadValues$k(__spreadValues$k({}, rawInit), value);\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== key)\n return;\n pauseWatch();\n try {\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nvar __defProp$j = Object.defineProperty;\nvar __getOwnPropSymbols$l = Object.getOwnPropertySymbols;\nvar __hasOwnProp$l = Object.prototype.hasOwnProperty;\nvar __propIsEnum$l = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$j = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$l.call(b, prop))\n __defNormalProp$j(a, prop, b[prop]);\n if (__getOwnPropSymbols$l)\n for (var prop of __getOwnPropSymbols$l(b)) {\n if (__propIsEnum$l.call(b, prop))\n __defNormalProp$j(a, prop, b[prop]);\n }\n return a;\n};\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto\n } = options;\n const modes = __spreadValues$j({\n auto: \"\",\n light: \"light\",\n dark: \"dark\"\n }, options.modes || {});\n const preferredDark = usePreferredDark({ window });\n const preferredMode = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? ref(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed({\n get() {\n return store.value === \"auto\" && !emitAuto ? preferredMode.value : store.value;\n },\n set(v) {\n store.value = v;\n }\n });\n const updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector2, attribute2, value) => {\n const el = window == null ? void 0 : window.document.querySelector(selector2);\n if (!el)\n return;\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n el.classList.add(v);\n else\n el.classList.remove(v);\n });\n } else {\n el.setAttribute(attribute2, value);\n }\n });\n function defaultOnChanged(mode) {\n var _a;\n const resolvedMode = mode === \"auto\" ? preferredMode.value : mode;\n updateHTMLAttrs(selector, attribute, (_a = modes[resolvedMode]) != null ? _a : resolvedMode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n if (emitAuto)\n watch(preferredMode, () => onChanged(state.value), { flush: \"post\" });\n tryOnMounted(() => onChanged(state.value));\n return state;\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nfunction useCssVar(prop, target, { window = defaultWindow, initialValue = \"\" } = {}) {\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n watch([elRef, () => resolveUnref(prop)], ([el, prop2]) => {\n var _a;\n if (el && window) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(prop2)) == null ? void 0 : _a.trim();\n variable.value = value || initialValue;\n }\n }, { immediate: true });\n watch(variable, (val) => {\n var _a;\n if ((_a = elRef.value) == null ? void 0 : _a.style)\n elRef.value.style.setProperty(resolveUnref(prop), val);\n });\n return variable;\n}\n\nfunction useCurrentElement() {\n const vm = getCurrentInstance();\n const currentElement = computedWithControl(() => null, () => vm.proxy.$el);\n onUpdated(currentElement.trigger);\n onMounted(currentElement.trigger);\n return currentElement;\n}\n\nfunction useCycleList(list, options) {\n var _a;\n const state = shallowRef((_a = options == null ? void 0 : options.initialValue) != null ? _a : list[0]);\n const index = computed({\n get() {\n var _a2;\n let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, list) : list.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a2 = options == null ? void 0 : options.fallbackIndex) != null ? _a2 : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const length = list.length;\n const index2 = (i % length + length) % length;\n const value = list[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n return {\n state,\n index,\n next,\n prev\n };\n}\n\nvar __defProp$i = Object.defineProperty;\nvar __defProps$7 = Object.defineProperties;\nvar __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$k = Object.getOwnPropertySymbols;\nvar __hasOwnProp$k = Object.prototype.hasOwnProperty;\nvar __propIsEnum$k = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$i = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$k.call(b, prop))\n __defNormalProp$i(a, prop, b[prop]);\n if (__getOwnPropSymbols$k)\n for (var prop of __getOwnPropSymbols$k(b)) {\n if (__propIsEnum$k.call(b, prop))\n __defNormalProp$i(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\",\n window = defaultWindow\n } = options;\n const mode = useColorMode(__spreadProps$7(__spreadValues$i({}, options), {\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\");\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n }));\n const preferredDark = usePreferredDark({ window });\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n if (v === preferredDark.value)\n mode.value = \"auto\";\n else\n mode.value = v ? \"dark\" : \"light\";\n }\n });\n return isDark;\n}\n\nconst fnBypass = (v) => v;\nconst fnSetSource = (source, value) => source.value = value;\nfunction defaultDump(clone) {\n return clone ? isFunction(clone) ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? isFunction(clone) ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Infinity);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nvar __defProp$h = Object.defineProperty;\nvar __defProps$6 = Object.defineProperties;\nvar __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$j = Object.getOwnPropertySymbols;\nvar __hasOwnProp$j = Object.prototype.hasOwnProperty;\nvar __propIsEnum$j = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$h = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$j.call(b, prop))\n __defNormalProp$h(a, prop, b[prop]);\n if (__getOwnPropSymbols$j)\n for (var prop of __getOwnPropSymbols$j(b)) {\n if (__propIsEnum$j.call(b, prop))\n __defNormalProp$h(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(source, commit, { deep, flush, eventFilter: composedFilter });\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, __spreadProps$6(__spreadValues$h({}, options), { clone: options.clone || deep, setSource }));\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return __spreadProps$6(__spreadValues$h({}, manualHistory), {\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n });\n}\n\nvar __defProp$g = Object.defineProperty;\nvar __defProps$5 = Object.defineProperties;\nvar __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$i = Object.getOwnPropertySymbols;\nvar __hasOwnProp$i = Object.prototype.hasOwnProperty;\nvar __propIsEnum$i = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$g = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$i.call(b, prop))\n __defNormalProp$g(a, prop, b[prop]);\n if (__getOwnPropSymbols$i)\n for (var prop of __getOwnPropSymbols$i(b)) {\n if (__propIsEnum$i.call(b, prop))\n __defNormalProp$g(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n const history = useRefHistory(source, __spreadProps$5(__spreadValues$g({}, options), { eventFilter: filter }));\n return __spreadValues$g({}, history);\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n eventFilter = bypassFilter\n } = options;\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = ref(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n if (window) {\n const onDeviceMotion = createFilterWrapper(eventFilter, (event) => {\n acceleration.value = event.acceleration;\n accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n rotationRate.value = event.rotationRate;\n interval.value = event.interval;\n });\n useEventListener(window, \"devicemotion\", onDeviceMotion);\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = ref(false);\n const alpha = ref(null);\n const beta = ref(null);\n const gamma = ref(null);\n if (window && isSupported.value) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nfunction useDevicePixelRatio({\n window = defaultWindow\n} = {}) {\n const pixelRatio = ref(1);\n if (window) {\n let observe = function() {\n pixelRatio.value = window.devicePixelRatio;\n cleanup();\n media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n media.addEventListener(\"change\", observe, { once: true });\n }, cleanup = function() {\n media == null ? void 0 : media.removeEventListener(\"change\", observe);\n };\n let media;\n observe();\n tryOnScopeDispose(cleanup);\n }\n return { pixelRatio };\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n let permissionStatus;\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = ref();\n const onChange = () => {\n if (permissionStatus)\n state.value = permissionStatus.state;\n };\n const query = createSingletonPromise(async () => {\n if (!isSupported.value)\n return;\n if (!permissionStatus) {\n try {\n permissionStatus = await navigator.permissions.query(desc);\n useEventListener(permissionStatus, \"change\", onChange);\n onChange();\n } catch (e) {\n state.value = \"prompt\";\n }\n }\n return permissionStatus;\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n const permissionGranted = ref(false);\n async function update() {\n if (!isSupported.value)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? void 0 : onUpdated(devices.value);\n }\n async function ensurePermissions() {\n if (!isSupported.value)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(\"camera\", { controls: true });\n await query();\n if (state.value !== \"granted\") {\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n stream.getTracks().forEach((t) => t.stop());\n update();\n permissionGranted.value = true;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (isSupported.value) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update);\n update();\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n });\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(enabled, (v) => {\n if (v)\n _start();\n else\n _stop();\n }, { immediate: true });\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility({ document = defaultDocument } = {}) {\n if (!document)\n return ref(\"visible\");\n const visibility = ref(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n });\n return visibility;\n}\n\nvar __defProp$f = Object.defineProperty;\nvar __defProps$4 = Object.defineProperties;\nvar __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$h = Object.getOwnPropertySymbols;\nvar __hasOwnProp$h = Object.prototype.hasOwnProperty;\nvar __propIsEnum$h = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$f = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$h.call(b, prop))\n __defNormalProp$f(a, prop, b[prop]);\n if (__getOwnPropSymbols$h)\n for (var prop of __getOwnPropSymbols$h(b)) {\n if (__propIsEnum$h.call(b, prop))\n __defNormalProp$f(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));\nfunction useDraggable(target, options = {}) {\n var _a, _b, _c;\n const draggingElement = (_a = options.draggingElement) != null ? _a : defaultWindow;\n const draggingHandle = (_b = options.handle) != null ? _b : target;\n const position = ref((_c = resolveUnref(options.initialValue)) != null ? _c : { x: 0, y: 0 });\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (options.pointerTypes)\n return options.pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (resolveUnref(options.preventDefault))\n e.preventDefault();\n if (resolveUnref(options.stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n var _a2;\n if (!filterEvent(e))\n return;\n if (resolveUnref(options.exact) && e.target !== resolveUnref(target))\n return;\n const rect = resolveUnref(target).getBoundingClientRect();\n const pos = {\n x: e.clientX - rect.left,\n y: e.clientY - rect.top\n };\n if (((_a2 = options.onStart) == null ? void 0 : _a2.call(options, pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n var _a2;\n if (!filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n position.value = {\n x: e.clientX - pressedDelta.value.x,\n y: e.clientY - pressedDelta.value.y\n };\n (_a2 = options.onMove) == null ? void 0 : _a2.call(options, position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n var _a2;\n if (!filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = void 0;\n (_a2 = options.onEnd) == null ? void 0 : _a2.call(options, position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n useEventListener(draggingHandle, \"pointerdown\", start, true);\n useEventListener(draggingElement, \"pointermove\", move, true);\n useEventListener(draggingElement, \"pointerup\", end, true);\n }\n return __spreadProps$4(__spreadValues$f({}, toRefs(position)), {\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(() => `left:${position.value.x}px;top:${position.value.y}px;`)\n });\n}\n\nfunction useDropZone(target, onDrop) {\n const isOverDropZone = ref(false);\n let counter = 0;\n if (isClient) {\n useEventListener(target, \"dragenter\", (event) => {\n event.preventDefault();\n counter += 1;\n isOverDropZone.value = true;\n });\n useEventListener(target, \"dragover\", (event) => {\n event.preventDefault();\n });\n useEventListener(target, \"dragleave\", (event) => {\n event.preventDefault();\n counter -= 1;\n if (counter === 0)\n isOverDropZone.value = false;\n });\n useEventListener(target, \"drop\", (event) => {\n var _a, _b;\n event.preventDefault();\n counter = 0;\n isOverDropZone.value = false;\n const files = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n onDrop == null ? void 0 : onDrop(files.length === 0 ? null : files);\n });\n }\n return {\n isOverDropZone\n };\n}\n\nvar __getOwnPropSymbols$g = Object.getOwnPropertySymbols;\nvar __hasOwnProp$g = Object.prototype.hasOwnProperty;\nvar __propIsEnum$g = Object.prototype.propertyIsEnumerable;\nvar __objRest$2 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$g.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$g)\n for (var prop of __getOwnPropSymbols$g(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$g.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction useResizeObserver(target, callback, options = {}) {\n const _a = options, { window = defaultWindow } = _a, observerOptions = __objRest$2(_a, [\"window\"]);\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const stopWatch = watch(() => unrefElement(target), (el) => {\n cleanup();\n if (isSupported.value && window && el) {\n observer = new ResizeObserver(callback);\n observer.observe(el, observerOptions);\n }\n }, { immediate: true, flush: \"post\" });\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true,\n immediate = true\n } = options;\n const height = ref(0);\n const bottom = ref(0);\n const left = ref(0);\n const right = ref(0);\n const top = ref(0);\n const width = ref(0);\n const x = ref(0);\n const y = ref(0);\n function update() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n if (windowScroll)\n useEventListener(\"scroll\", update, { capture: true, passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n tryOnMounted(() => {\n if (immediate)\n update();\n });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n window = defaultWindow\n } = options;\n const isActive = ref(false);\n let previousFrameTimestamp = 0;\n let rafId = null;\n function loop(timestamp) {\n if (!isActive.value || !window)\n return;\n const delta = timestamp - previousFrameTimestamp;\n fn({ delta, timestamp });\n previousFrameTimestamp = timestamp;\n rafId = window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n rafId = window.requestAnimationFrame(loop);\n }\n }\n function pause() {\n isActive.value = false;\n if (rafId != null && window) {\n window.cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive: readonly(isActive),\n pause,\n resume\n };\n}\n\nvar __defProp$e = Object.defineProperty;\nvar __getOwnPropSymbols$f = Object.getOwnPropertySymbols;\nvar __hasOwnProp$f = Object.prototype.hasOwnProperty;\nvar __propIsEnum$f = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$e = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$f.call(b, prop))\n __defNormalProp$e(a, prop, b[prop]);\n if (__getOwnPropSymbols$f)\n for (var prop of __getOwnPropSymbols$f(b)) {\n if (__propIsEnum$f.call(b, prop))\n __defNormalProp$e(a, prop, b[prop]);\n }\n return a;\n};\nfunction useElementByPoint(options) {\n const element = ref(null);\n const { x, y, document = defaultDocument } = options;\n const controls = useRafFn(() => {\n element.value = (document == null ? void 0 : document.elementFromPoint(resolveUnref(x), resolveUnref(y))) || null;\n });\n return __spreadValues$e({\n element\n }, controls);\n}\n\nfunction useElementHover(el, options = {}) {\n const delayEnter = options ? options.delayEnter : 0;\n const delayLeave = options ? options.delayLeave : 0;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n useResizeObserver(target, ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const styles = window.getComputedStyle($elem);\n width.value = parseFloat(styles.width);\n height.value = parseFloat(styles.height);\n }\n } else {\n if (boxSize) {\n const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n }, options);\n watch(() => unrefElement(target), (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n });\n return {\n width,\n height\n };\n}\n\nfunction useElementVisibility(element, { window = defaultWindow, scrollTarget } = {}) {\n const elementIsVisible = ref(false);\n const testBounding = () => {\n if (!window)\n return;\n const document = window.document;\n const el = unrefElement(element);\n if (!el) {\n elementIsVisible.value = false;\n } else {\n const rect = el.getBoundingClientRect();\n elementIsVisible.value = rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth) && rect.bottom >= 0 && rect.right >= 0;\n }\n };\n watch(() => unrefElement(element), () => testBounding(), { immediate: true, flush: \"post\" });\n if (window) {\n useEventListener(scrollTarget || window, \"scroll\", testBounding, {\n capture: false,\n passive: true\n });\n }\n return elementIsVisible;\n}\n\nconst events = new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n var _a;\n const listeners = events.get(key) || [];\n listeners.push(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n const index = listeners.indexOf(listener);\n if (index > -1)\n listeners.splice(index, 1);\n if (!listeners.length)\n events.delete(key);\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction useEventSource(url, events = [], options = {}) {\n const event = ref(null);\n const data = ref(null);\n const status = ref(\"CONNECTING\");\n const eventSource = ref(null);\n const error = ref(null);\n const {\n withCredentials = false\n } = options;\n const close = () => {\n if (eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n }\n };\n const es = new EventSource(url, { withCredentials });\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n eventSource,\n event,\n data,\n status,\n error,\n close\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = ref(initialValue);\n async function open(openOptions) {\n if (!isSupported.value)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = resolveRef(newIcon);\n const applyIcon = (icon) => {\n document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`).forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(favicon, (i, o) => {\n if (isString(i) && i !== o)\n applyIcon(i);\n }, { immediate: true });\n return favicon;\n}\n\nvar __defProp$d = Object.defineProperty;\nvar __defProps$3 = Object.defineProperties;\nvar __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$e = Object.getOwnPropertySymbols;\nvar __hasOwnProp$e = Object.prototype.hasOwnProperty;\nvar __propIsEnum$e = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$d = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$e.call(b, prop))\n __defNormalProp$d(a, prop, b[prop]);\n if (__getOwnPropSymbols$e)\n for (var prop of __getOwnPropSymbols$e(b)) {\n if (__propIsEnum$e.call(b, prop))\n __defNormalProp$d(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\");\n}\nfunction isAbsoluteURL(url) {\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\nfunction headersToObject(headers) {\n if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n return Object.fromEntries([...headers.entries()]);\n return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n if (combination === \"overwrite\") {\n return async (ctx) => {\n const callback = callbacks[callbacks.length - 1];\n if (callback !== void 0)\n await callback(ctx);\n return ctx;\n };\n } else {\n return async (ctx) => {\n await callbacks.reduce((prevCallback, callback) => prevCallback.then(async () => {\n if (callback)\n ctx = __spreadValues$d(__spreadValues$d({}, ctx), await callback(ctx));\n }), Promise.resolve());\n return ctx;\n };\n }\n}\nfunction createFetch(config = {}) {\n const _combination = config.combination || \"chain\";\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => {\n const baseUrl = resolveUnref(config.baseUrl);\n const targetUrl = resolveUnref(url);\n return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n });\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = __spreadProps$3(__spreadValues$d(__spreadValues$d({}, options), args[0]), {\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n });\n } else {\n fetchOptions = __spreadProps$3(__spreadValues$d(__spreadValues$d({}, fetchOptions), args[0]), {\n headers: __spreadValues$d(__spreadValues$d({}, headersToObject(fetchOptions.headers) || {}), headersToObject(args[0].headers) || {})\n });\n }\n }\n if (args.length > 1 && isFetchOptions(args[1])) {\n options = __spreadProps$3(__spreadValues$d(__spreadValues$d({}, options), args[1]), {\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n });\n }\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = { immediate: true, refetch: false, timeout: 0 };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: void 0\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = __spreadValues$d(__spreadValues$d({}, options), args[0]);\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = __spreadValues$d(__spreadValues$d({}, options), args[1]);\n }\n const {\n fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = ref(false);\n const isFetching = ref(false);\n const aborted = ref(false);\n const statusCode = ref(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort && controller) {\n controller.abort();\n controller = void 0;\n }\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n const execute = async (throwOnFailed = false) => {\n var _a2;\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n if (supportsAbort) {\n abort();\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = __spreadProps$3(__spreadValues$d({}, fetchOptions), {\n signal: controller.signal\n });\n }\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n if (config.payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n const payload = resolveUnref(config.payload);\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n }\n let isCanceled = false;\n const context = {\n url: resolveUnref(url),\n options: __spreadValues$d(__spreadValues$d({}, defaultFetchOptions), fetchOptions),\n cancel: () => {\n isCanceled = true;\n }\n };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return new Promise((resolve, reject) => {\n var _a3;\n fetch(context.url, __spreadProps$3(__spreadValues$d(__spreadValues$d({}, defaultFetchOptions), context.options), {\n headers: __spreadValues$d(__spreadValues$d({}, headersToObject(defaultFetchOptions.headers)), headersToObject((_a3 = context.options) == null ? void 0 : _a3.headers))\n })).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse[config.type]();\n if (options.afterFetch && statusCode.value >= 200 && statusCode.value < 300)\n ({ data: responseData } = await options.afterFetch({ data: responseData, response: fetchResponse }));\n data.value = responseData;\n if (!fetchResponse.ok)\n throw new Error(fetchResponse.statusText);\n responseEvent.trigger(fetchResponse);\n return resolve(fetchResponse);\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError)\n ({ data: responseData, error: errorData } = await options.onFetchError({ data: responseData, error: fetchError, response: response.value }));\n data.value = responseData;\n error.value = errorData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n return reject(fetchError);\n return resolve(null);\n }).finally(() => {\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n });\n };\n const refetch = resolveRef(options.refetch);\n watch([\n refetch,\n resolveRef(url)\n ], ([refetch2]) => refetch2 && execute(), { deep: true });\n const shell = {\n isFinished,\n statusCode,\n response,\n error,\n data,\n isFetching,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch([\n refetch,\n resolveRef(config.payload)\n ], ([refetch2]) => refetch2 && execute(), { deep: true });\n }\n const rawPayload = resolveUnref(config.payload);\n if (!payloadType && rawPayload && Object.getPrototypeOf(rawPayload) === Object.prototype && !(rawPayload instanceof FormData))\n config.payloadType = \"json\";\n return __spreadProps$3(__spreadValues$d({}, shell), {\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n });\n }\n return void 0;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return __spreadProps$3(__spreadValues$d({}, shell), {\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n });\n }\n return void 0;\n };\n }\n if (options.immediate)\n setTimeout(execute, 0);\n return __spreadProps$3(__spreadValues$d({}, shell), {\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n });\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n return `${start}/${end}`;\n return `${start}${end}`;\n}\n\nvar __defProp$c = Object.defineProperty;\nvar __getOwnPropSymbols$d = Object.getOwnPropertySymbols;\nvar __hasOwnProp$d = Object.prototype.hasOwnProperty;\nvar __propIsEnum$d = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$c = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$d.call(b, prop))\n __defNormalProp$c(a, prop, b[prop]);\n if (__getOwnPropSymbols$d)\n for (var prop of __getOwnPropSymbols$d(b)) {\n if (__propIsEnum$d.call(b, prop))\n __defNormalProp$c(a, prop, b[prop]);\n }\n return a;\n};\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: \"*\"\n};\nfunction useFileDialog(options = {}) {\n const {\n document = defaultDocument\n } = options;\n const files = ref(null);\n let input;\n if (document) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = (event) => {\n const result = event.target;\n files.value = result.files;\n };\n }\n const open = (localOptions) => {\n if (!input)\n return;\n const _options = __spreadValues$c(__spreadValues$c(__spreadValues$c({}, DEFAULT_OPTIONS), options), localOptions);\n input.multiple = _options.multiple;\n input.accept = _options.accept;\n if (hasOwn(_options, \"capture\"))\n input.capture = _options.capture;\n input.click();\n };\n const reset = () => {\n files.value = null;\n if (input)\n input.value = \"\";\n };\n return {\n files: readonly(files),\n open,\n reset\n };\n}\n\nvar __defProp$b = Object.defineProperty;\nvar __getOwnPropSymbols$c = Object.getOwnPropertySymbols;\nvar __hasOwnProp$c = Object.prototype.hasOwnProperty;\nvar __propIsEnum$c = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$b = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$c.call(b, prop))\n __defNormalProp$b(a, prop, b[prop]);\n if (__getOwnPropSymbols$c)\n for (var prop of __getOwnPropSymbols$c(b)) {\n if (__propIsEnum$c.call(b, prop))\n __defNormalProp$b(a, prop, b[prop]);\n }\n return a;\n};\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = unref(options);\n const window = _window;\n const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = ref();\n const data = ref();\n const file = ref();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported.value)\n return;\n const [handle] = await window.showOpenFilePicker(__spreadValues$b(__spreadValues$b({}, unref(options)), _options));\n fileHandle.value = handle;\n await updateFile();\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker(__spreadValues$b(__spreadValues$b({}, unref(options)), _options));\n data.value = void 0;\n await updateFile();\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported.value)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker(__spreadValues$b(__spreadValues$b({}, unref(options)), _options));\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n if (unref(dataType) === \"Text\")\n data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n if (unref(dataType) === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n if (unref(dataType) === \"Blob\")\n data.value = file.value;\n }\n watch(() => unref(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false } = options;\n const innerFocused = ref(false);\n const targetElement = computed(() => unrefElement(target));\n useEventListener(targetElement, \"focus\", () => innerFocused.value = true);\n useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n const focused = computed({\n get: () => innerFocused.value,\n set(value) {\n var _a, _b;\n if (!value && innerFocused.value)\n (_a = targetElement.value) == null ? void 0 : _a.blur();\n else if (value && !innerFocused.value)\n (_b = targetElement.value) == null ? void 0 : _b.focus();\n }\n });\n watch(targetElement, () => {\n focused.value = initialValue;\n }, { immediate: true, flush: \"post\" });\n return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n const activeElement = useActiveElement(options);\n const targetElement = computed(() => unrefElement(target));\n const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = ref(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst functionsMap = [\n [\n \"requestFullscreen\",\n \"exitFullscreen\",\n \"fullscreenElement\",\n \"fullscreenEnabled\",\n \"fullscreenchange\",\n \"fullscreenerror\"\n ],\n [\n \"webkitRequestFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitFullscreenElement\",\n \"webkitFullscreenEnabled\",\n \"webkitfullscreenchange\",\n \"webkitfullscreenerror\"\n ],\n [\n \"webkitRequestFullScreen\",\n \"webkitCancelFullScreen\",\n \"webkitCurrentFullScreenElement\",\n \"webkitCancelFullScreen\",\n \"webkitfullscreenchange\",\n \"webkitfullscreenerror\"\n ],\n [\n \"mozRequestFullScreen\",\n \"mozCancelFullScreen\",\n \"mozFullScreenElement\",\n \"mozFullScreenEnabled\",\n \"mozfullscreenchange\",\n \"mozfullscreenerror\"\n ],\n [\n \"msRequestFullscreen\",\n \"msExitFullscreen\",\n \"msFullscreenElement\",\n \"msFullscreenEnabled\",\n \"MSFullscreenChange\",\n \"MSFullscreenError\"\n ]\n];\nfunction useFullscreen(target, options = {}) {\n const { document = defaultDocument, autoExit = false } = options;\n const targetRef = target || (document == null ? void 0 : document.querySelector(\"html\"));\n const isFullscreen = ref(false);\n let map = functionsMap[0];\n const isSupported = useSupported(() => {\n if (!document) {\n return false;\n } else {\n for (const m of functionsMap) {\n if (m[1] in document) {\n map = m;\n return true;\n }\n }\n }\n return false;\n });\n const [REQUEST, EXIT, ELEMENT, , EVENT] = map;\n async function exit() {\n if (!isSupported.value)\n return;\n if (document == null ? void 0 : document[ELEMENT])\n await document[EXIT]();\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported.value)\n return;\n await exit();\n const target2 = unrefElement(targetRef);\n if (target2) {\n await target2[REQUEST]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n if (isFullscreen.value)\n await exit();\n else\n await enter();\n }\n if (document) {\n useEventListener(document, EVENT, () => {\n isFullscreen.value = !!(document == null ? void 0 : document[ELEMENT]);\n }, false);\n }\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return {\n id: gamepad.id,\n hapticActuators,\n index: gamepad.index,\n mapping: gamepad.mapping,\n connected: gamepad.connected,\n timestamp: gamepad.timestamp,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n };\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n for (let i = 0; i < _gamepads.length; ++i) {\n const gamepad = _gamepads[i];\n if (gamepad) {\n const index = gamepads.value.findIndex(({ index: index2 }) => index2 === gamepad.index);\n if (index > -1)\n gamepads.value[index] = stateFromGamepad(gamepad);\n }\n }\n };\n const { isActive, pause, resume } = useRafFn(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n if (_gamepads) {\n for (let i = 0; i < _gamepads.length; ++i) {\n const gamepad = _gamepads[i];\n if (gamepad)\n onGamepadConnected(gamepad);\n }\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator,\n immediate = true\n } = options;\n const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n const locatedAt = ref(null);\n const error = ref(null);\n const coords = ref({\n accuracy: 0,\n latitude: Infinity,\n longitude: Infinity,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n function resume() {\n if (isSupported.value) {\n watcher = navigator.geolocation.watchPosition(updatePosition, (err) => error.value = err, {\n enableHighAccuracy,\n maximumAge,\n timeout\n });\n }\n }\n if (immediate)\n resume();\n function pause() {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n }\n tryOnScopeDispose(() => {\n pause();\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error,\n resume,\n pause\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = ref(initialState);\n const lastActive = ref(timestamp());\n let timer;\n const onEvent = createFilterWrapper(eventFilter, () => {\n idle.value = false;\n lastActive.value = timestamp();\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n });\n if (window) {\n const document = window.document;\n for (const event of events)\n useEventListener(window, event, onEvent, { passive: true });\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n });\n }\n }\n timer = setTimeout(() => idle.value = true, timeout);\n return { idle, lastActive };\n}\n\nvar __defProp$a = Object.defineProperty;\nvar __getOwnPropSymbols$b = Object.getOwnPropertySymbols;\nvar __hasOwnProp$b = Object.prototype.hasOwnProperty;\nvar __propIsEnum$b = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$a = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$b.call(b, prop))\n __defNormalProp$a(a, prop, b[prop]);\n if (__getOwnPropSymbols$b)\n for (var prop of __getOwnPropSymbols$b(b)) {\n if (__propIsEnum$b.call(b, prop))\n __defNormalProp$a(a, prop, b[prop]);\n }\n return a;\n};\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes } = options;\n img.src = src;\n if (srcset)\n img.srcset = srcset;\n if (sizes)\n img.sizes = sizes;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nconst useImage = (options, asyncStateOptions = {}) => {\n const state = useAsyncState(() => loadImage(resolveUnref(options)), void 0, __spreadValues$a({\n resetOnExecute: true\n }, asyncStateOptions));\n watch(() => resolveUnref(options), () => state.execute(asyncStateOptions.delay), { deep: true });\n return state;\n};\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\"\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c;\n const _element = resolveUnref(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = resolveUnref(_y)) != null ? _a : y.value,\n left: (_b = resolveUnref(_x)) != null ? _b : x.value,\n behavior: resolveUnref(behavior)\n });\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const onScrollHandler = (e) => {\n const eventTarget = e.target === document ? e.target.documentElement : e.target;\n const scrollLeft = eventTarget.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalY.value;\n arrivedState.left = scrollLeft <= 0 + (offset.left || 0);\n arrivedState.right = scrollLeft + eventTarget.clientWidth >= eventTarget.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n internalX.value = scrollLeft;\n let scrollTop = eventTarget.scrollTop;\n if (e.target === document && !scrollTop)\n scrollTop = document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n arrivedState.top = scrollTop <= 0 + (offset.top || 0);\n arrivedState.bottom = scrollTop + eventTarget.clientHeight >= eventTarget.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n internalY.value = scrollTop;\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(element, \"scroll\", throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);\n useEventListener(element, \"scrollend\", onScrollEnd, eventListenerOptions);\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions\n };\n}\n\nvar __defProp$9 = Object.defineProperty;\nvar __defProps$2 = Object.defineProperties;\nvar __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$a = Object.getOwnPropertySymbols;\nvar __hasOwnProp$a = Object.prototype.hasOwnProperty;\nvar __propIsEnum$a = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$9 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$a.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n if (__getOwnPropSymbols$a)\n for (var prop of __getOwnPropSymbols$a(b)) {\n if (__propIsEnum$a.call(b, prop))\n __defNormalProp$9(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a, _b;\n const direction = (_a = options.direction) != null ? _a : \"bottom\";\n const state = reactive(useScroll(element, __spreadProps$2(__spreadValues$9({}, options), {\n offset: __spreadValues$9({\n [direction]: (_b = options.distance) != null ? _b : 0\n }, options.offset)\n })));\n watch(() => state.arrivedState[direction], async (v) => {\n var _a2, _b2;\n if (v) {\n const elem = resolveUnref(element);\n const previous = {\n height: (_a2 = elem == null ? void 0 : elem.scrollHeight) != null ? _a2 : 0,\n width: (_b2 = elem == null ? void 0 : elem.scrollWidth) != null ? _b2 : 0\n };\n await onLoadMore(state);\n if (options.preserveScrollPosition && elem) {\n nextTick(() => {\n elem.scrollTo({\n top: elem.scrollHeight - previous.height,\n left: elem.scrollWidth - previous.width\n });\n });\n }\n }\n });\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0.1,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n let cleanup = noop;\n const stopWatch = isSupported.value ? watch(() => ({\n el: unrefElement(target),\n root: unrefElement(root)\n }), ({ el, root: root2 }) => {\n cleanup();\n if (!el)\n return;\n const observer = new IntersectionObserver(callback, {\n root: root2,\n rootMargin,\n threshold\n });\n observer.observe(el);\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n }, { immediate: true, flush: \"post\" }) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = ref(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(new Set());\n const obj = {\n toJSON() {\n return {};\n },\n current\n };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = new Set();\n const usedKeys = new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function reset() {\n current.clear();\n for (const key of usedKeys)\n setRefs(key, false);\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (key) {\n if (value)\n current.add(key);\n else\n current.delete(key);\n }\n for (const key2 of values) {\n usedKeys.add(key2);\n setRefs(key2, value);\n }\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n useEventListener(\"blur\", reset, { passive: true });\n useEventListener(\"focus\", reset, { passive: true });\n const proxy = new Proxy(refs, {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.every((key) => unref(proxy[key])));\n } else {\n refs[prop] = ref(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? unref(r) : r;\n }\n });\n return proxy;\n}\n\nvar __defProp$8 = Object.defineProperty;\nvar __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$9 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$9 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$8 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$9.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n if (__getOwnPropSymbols$9)\n for (var prop of __getOwnPropSymbols$9(b)) {\n if (__propIsEnum$9.call(b, prop))\n __defNormalProp$8(a, prop, b[prop]);\n }\n return a;\n};\nfunction usingElRef(source, cb) {\n if (resolveUnref(source))\n cb(resolveUnref(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n options = __spreadValues$8(__spreadValues$8({}, defaultOptions), options);\n const {\n document = defaultDocument\n } = options;\n const currentTime = ref(0);\n const duration = ref(0);\n const seeking = ref(false);\n const volume = ref(1);\n const waiting = ref(false);\n const ended = ref(false);\n const playing = ref(false);\n const rate = ref(1);\n const stalled = ref(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = ref(-1);\n const isPictureInPicture = ref(false);\n const muted = ref(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = isNumber(track) ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = isNumber(track) ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = resolveUnref(target);\n if (!el)\n return;\n const src = resolveUnref(options.src);\n let sources = [];\n if (!src)\n return;\n if (isString(src))\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n e.remove();\n });\n sources.forEach(({ src: src2, type }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.addEventListener(\"error\", sourceErrorEvent.trigger);\n el.appendChild(source);\n });\n el.load();\n });\n tryOnScopeDispose(() => {\n const el = resolveUnref(target);\n if (!el)\n return;\n el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n });\n watch(volume, (vol) => {\n const el = resolveUnref(target);\n if (!el)\n return;\n el.volume = vol;\n });\n watch(muted, (mute) => {\n const el = resolveUnref(target);\n if (!el)\n return;\n el.muted = mute;\n });\n watch(rate, (rate2) => {\n const el = resolveUnref(target);\n if (!el)\n return;\n el.playbackRate = rate2;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = resolveUnref(options.tracks);\n const el = resolveUnref(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = resolveUnref(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = resolveUnref(target);\n if (!el)\n return;\n isPlaying ? el.play() : el.pause();\n });\n useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = resolveUnref(target).currentTime));\n useEventListener(target, \"durationchange\", () => duration.value = resolveUnref(target).duration);\n useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(resolveUnref(target).buffered));\n useEventListener(target, \"seeking\", () => seeking.value = true);\n useEventListener(target, \"seeked\", () => seeking.value = false);\n useEventListener(target, \"waiting\", () => waiting.value = true);\n useEventListener(target, \"playing\", () => {\n waiting.value = false;\n ended.value = false;\n });\n useEventListener(target, \"ratechange\", () => rate.value = resolveUnref(target).playbackRate);\n useEventListener(target, \"stalled\", () => stalled.value = true);\n useEventListener(target, \"ended\", () => ended.value = true);\n useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n useEventListener(target, \"volumechange\", () => {\n const el = resolveUnref(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n });\n const listeners = [];\n const stop = watch([target], () => {\n const el = resolveUnref(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n volume,\n muted,\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n onSourceError: sourceErrorEvent.on\n };\n}\n\nconst getMapVue2Compat = () => {\n const data = reactive({});\n return {\n get: (key) => data[key],\n set: (key, value) => set(data, key, value),\n has: (key) => hasOwn(data, key),\n delete: (key) => del(data, key),\n clear: () => {\n Object.keys(data).forEach((key) => {\n del(data, key);\n });\n }\n };\n};\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? void 0 : options.cache)\n return reactive(options.cache);\n if (isVue2)\n return getMapVue2Compat();\n return reactive(new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n if (isSupported.value) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n onMounted(() => {\n isMounted.value = true;\n });\n return isMounted;\n}\n\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n eventFilter\n } = options;\n const x = ref(initialValue.x);\n const y = ref(initialValue.y);\n const sourceType = ref(null);\n const mouseHandler = (event) => {\n if (type === \"page\") {\n x.value = event.pageX;\n y.value = event.pageY;\n } else if (type === \"client\") {\n x.value = event.clientX;\n y.value = event.clientY;\n } else if (type === \"movement\") {\n x.value = event.movementX;\n y.value = event.movementY;\n }\n sourceType.value = \"mouse\";\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const touch2 = event.touches[0];\n if (type === \"page\") {\n x.value = touch2.pageX;\n y.value = touch2.pageY;\n } else if (type === \"client\") {\n x.value = touch2.clientX;\n y.value = touch2.clientY;\n }\n sourceType.value = \"touch\";\n }\n };\n const mouseHandlerWrapper = (event) => {\n return eventFilter === void 0 ? mouseHandler(event) : eventFilter(() => mouseHandler(event), {});\n };\n const touchHandlerWrapper = (event) => {\n return eventFilter === void 0 ? touchHandler(event) : eventFilter(() => touchHandler(event), {});\n };\n if (window) {\n useEventListener(window, \"mousemove\", mouseHandlerWrapper, { passive: true });\n useEventListener(window, \"dragover\", mouseHandlerWrapper, { passive: true });\n if (touch && type !== \"movement\") {\n useEventListener(window, \"touchstart\", touchHandlerWrapper, { passive: true });\n useEventListener(window, \"touchmove\", touchHandlerWrapper, { passive: true });\n if (resetOnTouchEnds)\n useEventListener(window, \"touchend\", reset, { passive: true });\n }\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const { x, y, sourceType } = useMouse(options);\n const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n const elementX = ref(0);\n const elementY = ref(0);\n const elementPositionX = ref(0);\n const elementPositionY = ref(0);\n const elementHeight = ref(0);\n const elementWidth = ref(0);\n const isOutside = ref(true);\n let stop = () => {\n };\n if (window) {\n stop = watch([targetRef, x, y], () => {\n const el = unrefElement(targetRef);\n if (!el)\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + window.pageXOffset;\n elementPositionY.value = top + window.pageYOffset;\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n }, { immediate: true });\n useEventListener(document, \"mouseleave\", () => {\n isOutside.value = true;\n });\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = ref(initialValue);\n const sourceType = ref(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => () => {\n pressed.value = true;\n sourceType.value = srcType;\n };\n const onReleased = () => {\n pressed.value = false;\n sourceType.value = null;\n };\n const target = computed(() => unrefElement(options.target) || window);\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true });\n useEventListener(window, \"mouseleave\", onReleased, { passive: true });\n useEventListener(window, \"mouseup\", onReleased, { passive: true });\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true });\n useEventListener(window, \"drop\", onReleased, { passive: true });\n useEventListener(window, \"dragend\", onReleased, { passive: true });\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true });\n useEventListener(window, \"touchend\", onReleased, { passive: true });\n useEventListener(window, \"touchcancel\", onReleased, { passive: true });\n }\n return {\n pressed,\n sourceType\n };\n}\n\nvar __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$8 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$8 = Object.prototype.propertyIsEnumerable;\nvar __objRest$1 = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$8.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$8)\n for (var prop of __getOwnPropSymbols$8(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$8.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nfunction useMutationObserver(target, callback, options = {}) {\n const _a = options, { window = defaultWindow } = _a, mutationOptions = __objRest$1(_a, [\"window\"]);\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const stopWatch = watch(() => unrefElement(target), (el) => {\n cleanup();\n if (isSupported.value && window && el) {\n observer = new MutationObserver(callback);\n observer.observe(el, mutationOptions);\n }\n }, { immediate: true });\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nconst useNavigatorLanguage = (options = {}) => {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"language\" in navigator);\n const language = ref(navigator == null ? void 0 : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n });\n return {\n isSupported,\n language\n };\n};\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? void 0 : window.navigator;\n const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n const isOnline = ref(true);\n const saveData = ref(false);\n const offlineAt = ref(void 0);\n const onlineAt = ref(void 0);\n const downlink = ref(void 0);\n const downlinkMax = ref(void 0);\n const rtt = ref(void 0);\n const effectiveType = ref(void 0);\n const type = ref(\"unknown\");\n const connection = isSupported.value && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? void 0 : Date.now();\n onlineAt.value = isOnline.value ? Date.now() : void 0;\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n });\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n onlineAt.value = Date.now();\n });\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, false);\n updateNetworkInformation();\n return {\n isSupported,\n isOnline,\n saveData,\n offlineAt,\n onlineAt,\n downlink,\n downlinkMax,\n effectiveType,\n rtt,\n type\n };\n}\n\nvar __defProp$7 = Object.defineProperty;\nvar __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$7 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$7 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$7 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$7.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n if (__getOwnPropSymbols$7)\n for (var prop of __getOwnPropSymbols$7(b)) {\n if (__propIsEnum$7.call(b, prop))\n __defNormalProp$7(a, prop, b[prop]);\n }\n return a;\n};\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(new Date());\n const update = () => now.value = new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return __spreadValues$7({\n now\n }, controls);\n } else {\n return now;\n }\n}\n\nfunction useObjectUrl(object) {\n const url = ref();\n const release = () => {\n if (url.value)\n URL.revokeObjectURL(url.value);\n url.value = void 0;\n };\n watch(() => unref(object), (newObject) => {\n release();\n if (newObject)\n url.value = URL.createObjectURL(newObject);\n }, { immediate: true });\n tryOnScopeDispose(release);\n return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n if (isFunction(value) || isReadonly(value))\n return computed(() => clamp(resolveUnref(value), resolveUnref(min), resolveUnref(max)));\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, resolveUnref(min), resolveUnref(max));\n },\n set(value2) {\n _value.value = clamp(value2, resolveUnref(min), resolveUnref(max));\n }\n });\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Infinity,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Infinity);\n const pageCount = computed(() => Math.max(1, Math.ceil(unref(total) / unref(currentPageSize))));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page))\n syncRef(page, currentPage);\n if (isRef(pageSize))\n syncRef(pageSize, currentPageSize);\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = ref(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n useEventListener(window, \"mouseout\", handler, { passive: true });\n useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n }\n return isLeft;\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))\n return \"deviceOrientation\";\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n const value = -orientation.beta / 90;\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n const value = orientation.gamma / 90;\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nvar __defProp$6 = Object.defineProperty;\nvar __defProps$1 = Object.defineProperties;\nvar __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$6 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$6 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$6 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$6.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n if (__getOwnPropSymbols$6)\n for (var prop of __getOwnPropSymbols$6(b)) {\n if (__propIsEnum$6.call(b, prop))\n __defNormalProp$6(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = ref(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n useEventListener(target, \"pointerdown\", handler, { passive: true });\n useEventListener(target, \"pointermove\", handler, { passive: true });\n useEventListener(target, \"pointerleave\", () => isInside.value = false, { passive: true });\n }\n return __spreadProps$1(__spreadValues$6({}, toRefs(state)), {\n isInside\n });\n}\n\nfunction usePointerLock(target, options = {}) {\n const { document = defaultDocument, pointerLockOptions } = options;\n const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n const element = ref();\n const triggerElement = ref();\n let targetElement;\n if (isSupported.value) {\n useEventListener(document, \"pointerlockchange\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n element.value = document.pointerLockElement;\n if (!element.value)\n targetElement = triggerElement.value = null;\n }\n });\n useEventListener(document, \"pointerlockerror\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n const action = document.pointerLockElement ? \"release\" : \"acquire\";\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n });\n }\n async function lock(e, options2) {\n var _a;\n if (!isSupported.value)\n throw new Error(\"Pointer Lock API is not supported by your browser.\");\n triggerElement.value = e instanceof Event ? e.currentTarget : null;\n targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n if (!targetElement)\n throw new Error(\"Target element undefined.\");\n targetElement.requestPointerLock(options2 != null ? options2 : pointerLockOptions);\n return await until(element).toBe(targetElement);\n }\n async function unlock() {\n if (!element.value)\n return false;\n document.exitPointerLock();\n await until(element).toBeNull();\n return true;\n }\n return {\n isSupported,\n element,\n triggerElement,\n lock,\n unlock\n };\n}\n\nvar SwipeDirection;\n(function(SwipeDirection2) {\n SwipeDirection2[\"UP\"] = \"UP\";\n SwipeDirection2[\"RIGHT\"] = \"RIGHT\";\n SwipeDirection2[\"DOWN\"] = \"DOWN\";\n SwipeDirection2[\"LEFT\"] = \"LEFT\";\n SwipeDirection2[\"NONE\"] = \"NONE\";\n})(SwipeDirection || (SwipeDirection = {}));\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true,\n window = defaultWindow\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return SwipeDirection.NONE;\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT;\n } else {\n return diffY.value > 0 ? SwipeDirection.UP : SwipeDirection.DOWN;\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n let listenerOptions;\n const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n if (!passive)\n listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n else\n listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (listenerOptions.capture && !listenerOptions.passive)\n e.preventDefault();\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, \"touchend\", onTouchEnd, listenerOptions),\n useEventListener(target, \"touchcancel\", onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isPassiveEventSupported,\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop\n };\n}\nfunction checkPassiveEventSupport(document) {\n if (!document)\n return false;\n let supportsPassive = false;\n const optionsBlock = {\n get passive() {\n supportsPassive = true;\n return false;\n }\n };\n document.addEventListener(\"x\", noop, optionsBlock);\n document.removeEventListener(\"x\", noop);\n return supportsPassive;\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = resolveRef(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = ref(false);\n const isPointerDown = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return SwipeDirection.NONE;\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT;\n } else {\n return distanceY.value > 0 ? SwipeDirection.UP : SwipeDirection.DOWN;\n }\n });\n const eventIsAllowed = (e) => {\n var _a, _b, _c;\n const isReleasingButton = e.buttons === 0;\n const isPrimaryButton = e.buttons === 1;\n return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n var _a, _b;\n if (!eventIsAllowed(e))\n return;\n isPointerDown.value = true;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n const eventTarget = e.target;\n eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? void 0 : onSwipeStart(e);\n }),\n useEventListener(target, \"pointermove\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? void 0 : onSwipe(e);\n }),\n useEventListener(target, \"pointerup\", (e) => {\n var _a, _b;\n if (!eventIsAllowed(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"initial\");\n })\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredContrast(options) {\n const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n return computed(() => {\n if (isMore.value)\n return \"more\";\n if (isLess.value)\n return \"less\";\n if (isCustom.value)\n return \"custom\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n });\n return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePrevious(value, initialValue) {\n const previous = shallowRef(initialValue);\n watch(resolveRef(value), (_, oldValue) => {\n previous.value = oldValue;\n }, { flush: \"sync\" });\n return readonly(previous);\n}\n\nconst useScreenOrientation = (options = {}) => {\n const {\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n const screenOrientation = isSupported.value ? window.screen.orientation : {};\n const orientation = ref(screenOrientation.type);\n const angle = ref(screenOrientation.angle || 0);\n if (isSupported.value) {\n useEventListener(window, \"orientationchange\", () => {\n orientation.value = screenOrientation.type;\n angle.value = screenOrientation.angle;\n });\n }\n const lockOrientation = (type) => {\n if (!isSupported.value)\n return Promise.reject(new Error(\"Not supported\"));\n return screenOrientation.lock(type);\n };\n const unlockOrientation = () => {\n if (isSupported.value)\n screenOrientation.unlock();\n };\n return {\n isSupported,\n orientation,\n angle,\n lockOrientation,\n unlockOrientation\n };\n};\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update));\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = ref(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${resolveUnref(src)}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = resolveUnref(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n el.addEventListener(\"error\", (event) => reject(event));\n el.addEventListener(\"abort\", (event) => reject(event));\n el.addEventListener(\"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n });\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${resolveUnref(src)}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientHeight < ele.scrollHeight || style.overflowY === \"auto\" && ele.clientWidth < ele.scrollWidth) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow;\n watch(resolveRef(element), (el) => {\n if (el) {\n const ele = el;\n initialOverflow = ele.style.overflow;\n if (isLocked.value)\n ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const ele = resolveUnref(element);\n if (!ele || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(ele, \"touchmove\", (e) => {\n preventDefault(e);\n }, { passive: false });\n }\n ele.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const ele = resolveUnref(element);\n if (!ele || !isLocked.value)\n return;\n isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n ele.style.overflow = initialOverflow;\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else\n unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nvar __defProp$5 = Object.defineProperty;\nvar __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$5 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$5 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$5 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$5.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n if (__getOwnPropSymbols$5)\n for (var prop of __getOwnPropSymbols$5(b)) {\n if (__propIsEnum$5.call(b, prop))\n __defNormalProp$5(a, prop, b[prop]);\n }\n return a;\n};\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n const share = async (overrideOptions = {}) => {\n if (isSupported.value) {\n const data = __spreadValues$5(__spreadValues$5({}, resolveUnref(shareOptions)), resolveUnref(overrideOptions));\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n var _a, _b, _c, _d;\n const [source] = args;\n let compareFn = defaultCompare;\n let options = {};\n if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n options = args[1];\n compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n } else {\n compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n }\n } else if (args.length > 2) {\n compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n options = (_d = args[2]) != null ? _d : {};\n }\n const {\n dirty = false,\n sortFn = defaultSortFn\n } = options;\n if (!dirty)\n return computed(() => sortFn([...unref(source)], compareFn));\n watchEffect(() => {\n const result = sortFn(unref(source), compareFn);\n if (isRef(source))\n source.value = result;\n else\n source.splice(0, source.length, ...result);\n });\n return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n window = defaultWindow\n } = options;\n const lang = resolveRef(options.lang || \"en-US\");\n const isListening = ref(false);\n const isFinal = ref(false);\n const result = ref(\"\");\n const error = shallowRef(void 0);\n const toggle = (value = !isListening.value) => {\n isListening.value = value;\n };\n const start = () => {\n isListening.value = true;\n };\n const stop = () => {\n isListening.value = false;\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = useSupported(() => SpeechRecognition);\n let recognition;\n if (isSupported.value) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = unref(lang);\n recognition.onstart = () => {\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const transcript = Array.from(event.results).map((result2) => {\n isFinal.value = result2.isFinal;\n return result2[0];\n }).map((result2) => result2.transcript).join(\"\");\n result.value = transcript;\n error.value = void 0;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = unref(lang);\n };\n watch(isListening, () => {\n if (isListening.value)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n isListening.value = false;\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = useSupported(() => synth);\n const isPlaying = ref(false);\n const status = ref(\"init\");\n const spokenText = resolveRef(text || \"\");\n const lang = resolveRef(options.lang || \"en-US\");\n const error = shallowRef(void 0);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = unref(lang);\n utterance2.voice = unref(options.voice) || null;\n utterance2.pitch = pitch;\n utterance2.rate = rate;\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n utterance && synth.speak(utterance.value);\n };\n const stop = () => {\n synth.cancel();\n isPlaying.value = false;\n };\n if (isSupported.value) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n if (options.voice) {\n watch(options.voice, () => {\n synth.cancel();\n });\n }\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n utterance,\n error,\n stop,\n toggle,\n speak\n };\n}\n\nfunction useStepper(steps, initialStep) {\n const stepsRef = ref(steps);\n const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n const current = computed(() => at(index.value));\n const isFirst = computed(() => index.value === 0);\n const isLast = computed(() => index.value === stepNames.value.length - 1);\n const next = computed(() => stepNames.value[index.value + 1]);\n const previous = computed(() => stepNames.value[index.value - 1]);\n function at(index2) {\n if (Array.isArray(stepsRef.value))\n return stepsRef.value[index2];\n return stepsRef.value[stepNames.value[index2]];\n }\n function get(step) {\n if (!stepNames.value.includes(step))\n return;\n return at(stepNames.value.indexOf(step));\n }\n function goTo(step) {\n if (stepNames.value.includes(step))\n index.value = stepNames.value.indexOf(step);\n }\n function goToNext() {\n if (isLast.value)\n return;\n index.value++;\n }\n function goToPrevious() {\n if (isFirst.value)\n return;\n index.value--;\n }\n function goBackTo(step) {\n if (isAfter(step))\n goTo(step);\n }\n function isNext(step) {\n return stepNames.value.indexOf(step) === index.value + 1;\n }\n function isPrevious(step) {\n return stepNames.value.indexOf(step) === index.value - 1;\n }\n function isCurrent(step) {\n return stepNames.value.indexOf(step) === index.value;\n }\n function isBefore(step) {\n return index.value < stepNames.value.indexOf(step);\n }\n function isAfter(step) {\n return index.value > stepNames.value.indexOf(step);\n }\n return {\n steps: stepsRef,\n stepNames,\n index,\n current,\n next,\n previous,\n isFirst,\n isLast,\n at,\n get,\n goTo,\n goToNext,\n goToPrevious,\n goBackTo,\n isNext,\n isPrevious,\n isCurrent,\n isBefore,\n isAfter\n };\n}\n\nvar __defProp$4 = Object.defineProperty;\nvar __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$4 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$4 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$4 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n if (__getOwnPropSymbols$4)\n for (var prop of __getOwnPropSymbols$4(b)) {\n if (__propIsEnum$4.call(b, prop))\n __defNormalProp$4(a, prop, b[prop]);\n }\n return a;\n};\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = resolveUnref(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(initialValue);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else if (mergeDefaults) {\n const value = await serializer.read(rawValue);\n if (isFunction(mergeDefaults))\n data.value = mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n data.value = __spreadValues$4(__spreadValues$4({}, rawInit), value);\n else\n data.value = value;\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => setTimeout(() => read(e), 0));\n if (storage) {\n watchWithFilter(data, async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n }, {\n flush,\n deep,\n eventFilter\n });\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = ref(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = ref(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n if (!el.isConnected) {\n el.type = \"text/css\";\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n }\n if (isLoaded.value)\n return;\n stop = watch(cssRef, (value) => {\n el.textContent = value;\n }, { immediate: true });\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction useTextDirection(options = {}) {\n const {\n document = defaultDocument,\n selector = \"html\",\n observe = false,\n initialValue = \"ltr\"\n } = options;\n function getValue() {\n var _a, _b;\n return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n }\n const dir = ref(getValue());\n tryOnMounted(() => dir.value = getValue());\n if (observe && document) {\n useMutationObserver(document.querySelector(selector), () => dir.value = getValue(), { attributes: true });\n }\n return computed({\n get() {\n return dir.value;\n },\n set(v) {\n var _a, _b;\n dir.value = v;\n if (!document)\n return;\n if (dir.value)\n (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n else\n (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n }\n });\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n const ranges = new Array(rangeCount);\n for (let i = 0; i < rangeCount; i++) {\n const range = selection.getRangeAt(i);\n ranges[i] = range;\n }\n return ranges;\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange);\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nfunction useTextareaAutosize(options) {\n const textarea = ref(options == null ? void 0 : options.element);\n const input = ref(options == null ? void 0 : options.input);\n function triggerResize() {\n var _a, _b;\n if (!textarea.value)\n return;\n textarea.value.style.height = \"1px\";\n textarea.value.style.height = `${(_a = textarea.value) == null ? void 0 : _a.scrollHeight}px`;\n (_b = options == null ? void 0 : options.onResize) == null ? void 0 : _b.call(options);\n }\n watch([input, textarea], triggerResize, { immediate: true });\n useResizeObserver(textarea, () => triggerResize());\n if (options == null ? void 0 : options.watch)\n watch(options.watch, triggerResize, { immediate: true, deep: true });\n return {\n textarea,\n input,\n triggerResize\n };\n}\n\nvar __defProp$3 = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$3 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$3 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$3 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n if (__getOwnPropSymbols$3)\n for (var prop of __getOwnPropSymbols$3(b)) {\n if (__propIsEnum$3.call(b, prop))\n __defNormalProp$3(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, __spreadProps(__spreadValues$3({}, options), { eventFilter: filter }));\n return __spreadValues$3({}, history);\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b)) {\n if (__propIsEnum$2.call(b, prop))\n __defNormalProp$2(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nconst DEFAULT_UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Infinity, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n invalid: \"\"\n};\nconst DEFAULT_FORMATTER = (date) => date.toISOString().slice(0, 10);\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n updateInterval = 3e4\n } = options;\n const _a = useNow({ interval: updateInterval, controls: true }), { now } = _a, controls = __objRest(_a, [\"now\"]);\n const timeAgo = computed(() => formatTimeAgo(new Date(resolveUnref(time)), options, unref(now.value)));\n if (exposeControls) {\n return __spreadValues$2({\n timeAgo\n }, controls);\n } else {\n return timeAgo;\n }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n var _a;\n const {\n max,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER,\n units = DEFAULT_UNITS,\n showSecond = false,\n rounding = \"round\"\n } = options;\n const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n const diff = +now - +from;\n const absDiff = Math.abs(diff);\n function getValue(diff2, unit) {\n return roundFn(Math.abs(diff2) / unit.value);\n }\n function format(diff2, unit) {\n const val = getValue(diff2, unit);\n const past = diff2 > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n if (absDiff < 6e4 && !showSecond)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const [idx, unit] of units.entries()) {\n const val = getValue(diff, unit);\n if (val <= 0 && units[idx - 1])\n return format(diff, units[idx - 1]);\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n const { start } = useTimeoutFn(loop, interval);\n const isActive = ref(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n loop();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b)) {\n if (__propIsEnum$1.call(b, prop))\n __defNormalProp$1(a, prop, b[prop]);\n }\n return a;\n};\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\",\n callback\n } = options;\n const ts = ref(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const cb = callback ? () => {\n update();\n callback(ts.value);\n } : update;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n if (exposeControls) {\n return __spreadValues$1({\n timestamp: ts\n }, controls);\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b;\n const {\n document = defaultDocument\n } = options;\n const title = resolveRef((_a = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _a : null);\n const isReadonly = newTitle && isFunction(newTitle);\n function format(t) {\n if (!(\"titleTemplate\" in options))\n return t;\n const template = options.titleTemplate || \"%s\";\n return isFunction(template) ? template(t) : unref(template).replace(/%s/g, t);\n }\n watch(title, (t, o) => {\n if (t !== o && document)\n document.title = format(isString(t) ? t : \"\");\n }, { immediate: true });\n if (options.observe && !options.titleTemplate && document && !isReadonly) {\n useMutationObserver((_b = document.head) == null ? void 0 : _b.querySelector(\"title\"), () => {\n if (document && document.title !== title.value)\n title.value = format(document.title);\n }, { childList: true });\n }\n return title;\n}\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nconst _TransitionPresets = {\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = __spreadValues({\n linear: identity\n}, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction useTransition(source, options = {}) {\n const {\n delay = 0,\n disabled = false,\n duration = 1e3,\n onFinished = noop,\n onStarted = noop,\n transition = identity\n } = options;\n const currentTransition = computed(() => {\n const t = unref(transition);\n return isFunction(t) ? t : createEasingFunction(t);\n });\n const sourceValue = computed(() => {\n const s = unref(source);\n return isNumber(s) ? s : s.map(unref);\n });\n const sourceVector = computed(() => isNumber(sourceValue.value) ? [sourceValue.value] : sourceValue.value);\n const outputVector = ref(sourceVector.value.slice(0));\n let currentDuration;\n let diffVector;\n let endAt;\n let startAt;\n let startVector;\n const { resume, pause } = useRafFn(() => {\n const now = Date.now();\n const progress = clamp(1 - (endAt - now) / currentDuration, 0, 1);\n outputVector.value = startVector.map((val, i) => {\n var _a;\n return val + ((_a = diffVector[i]) != null ? _a : 0) * currentTransition.value(progress);\n });\n if (progress >= 1) {\n pause();\n onFinished();\n }\n }, { immediate: false });\n const start = () => {\n pause();\n currentDuration = unref(duration);\n diffVector = outputVector.value.map((n, i) => {\n var _a, _b;\n return ((_a = sourceVector.value[i]) != null ? _a : 0) - ((_b = outputVector.value[i]) != null ? _b : 0);\n });\n startVector = outputVector.value.slice(0);\n startAt = Date.now();\n endAt = startAt + currentDuration;\n resume();\n onStarted();\n };\n const timeout = useTimeoutFn(start, delay, { immediate: false });\n watch(sourceVector, () => {\n if (unref(disabled))\n return;\n if (unref(delay) <= 0)\n start();\n else\n timeout.start();\n }, { deep: true });\n watch(() => unref(disabled), (v) => {\n if (v) {\n outputVector.value = sourceVector.value.slice(0);\n pause();\n }\n });\n return computed(() => {\n const targetVector = unref(disabled) ? sourceVector : outputVector;\n return isNumber(sourceValue.value) ? targetVector.value[0] : targetVector.value;\n });\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n write: enableWrite = true,\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive({});\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(state, () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params);\n }, { deep: true });\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n window.history.replaceState(window.history.state, window.document.title, window.location.pathname + constructQuery(params));\n resume();\n }\n function onChanged() {\n if (!enableWrite)\n return;\n write(read(), true);\n }\n useEventListener(window, \"popstate\", onChanged, false);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, false);\n const initial = read();\n if (initial.keys().next().value)\n updateState(initial);\n else\n Object.assign(state, initialValue);\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n const videoDeviceId = ref(options.videoDeviceId);\n const audioDeviceId = ref(options.audioDeviceId);\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n });\n const stream = shallowRef();\n function getDeviceOptions(device) {\n if (device.value === \"none\" || device.value === false)\n return false;\n if (device.value == null)\n return true;\n return {\n deviceId: device.value\n };\n }\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(videoDeviceId),\n audio: getDeviceOptions(audioDeviceId)\n });\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n stream.value = void 0;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(enabled, (v) => {\n if (v)\n _start();\n else\n _stop();\n }, { immediate: true });\n watch([videoDeviceId, audioDeviceId], () => {\n if (autoSwitch.value && stream.value)\n restart();\n }, { immediate: true });\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n videoDeviceId,\n audioDeviceId,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c, _d, _e;\n const {\n clone = false,\n passive = false,\n eventName,\n deep = false,\n defaultValue\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n let event = eventName;\n if (!key) {\n if (isVue2) {\n const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n if (!eventName)\n event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n } else {\n key = \"modelValue\";\n }\n }\n event = eventName || event || `update:${key.toString()}`;\n const cloneFn = (val) => !clone ? val : isFunction(clone) ? clone(val) : cloneFnJSON(val);\n const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n if (passive) {\n const initialValue = getValue();\n const proxy = ref(initialValue);\n watch(() => props[key], (v) => proxy.value = cloneFn(v));\n watch(proxy, (v) => {\n if (v !== props[key] || deep)\n _emit(event, v);\n }, { deep });\n return proxy;\n } else {\n return computed({\n get() {\n return getValue();\n },\n set(value) {\n _emit(event, value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props)\n ret[key] = useVModel(props, key, emit, options);\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n const patternRef = resolveRef(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported.value)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported.value)\n navigator.vibrate(0);\n intervalControls == null ? void 0 : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(vibrate, interval, {\n immediate: false,\n immediateCallback: false\n });\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\nfunction useVirtualListResources(list) {\n const containerRef = ref(null);\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n return (containerSize) => {\n if (typeof itemSize === \"number\")\n return Math.ceil(containerSize / itemSize);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n capacity = i;\n if (sum > containerSize)\n break;\n }\n return capacity - start;\n };\n}\nfunction createGetOffset(source, itemSize) {\n return (scrollDirection) => {\n if (typeof itemSize === \"number\")\n return Math.floor(scrollDirection / itemSize) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n if (sum >= scrollDirection) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n return () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n}\nfunction createGetDistance(itemSize, source) {\n return (index) => {\n if (typeof itemSize === \"number\") {\n const size2 = index * itemSize;\n return size2;\n }\n const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n return size;\n };\n}\nfunction useWatchForSizes(size, list, calculateRange) {\n watch([size.width, size.height, list], () => {\n calculateRange();\n });\n}\nfunction createComputedTotalSize(itemSize, source) {\n return computed(() => {\n if (typeof itemSize === \"number\")\n return source.value.length * itemSize;\n return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n });\n}\nconst scrollToDictionaryForElementScrollKey = {\n horizontal: \"scrollLeft\",\n vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n return (index) => {\n if (containerRef.value) {\n containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n calculateRange();\n }\n };\n}\nfunction useHorizontalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowX: \"auto\" };\n const { itemWidth, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n const getOffset = createGetOffset(source, itemWidth);\n const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceLeft = createGetDistance(itemWidth, source);\n const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n const totalWidth = createComputedTotalSize(itemWidth, source);\n useWatchForSizes(size, list, calculateRange);\n const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n height: \"100%\",\n width: `${totalWidth.value - offsetLeft.value}px`,\n marginLeft: `${offsetLeft.value}px`,\n display: \"flex\"\n }\n };\n });\n return {\n scrollTo,\n calculateRange,\n wrapperProps,\n containerStyle,\n currentList,\n containerRef\n };\n}\nfunction useVerticalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowY: \"auto\" };\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n const getOffset = createGetOffset(source, itemHeight);\n const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceTop = createGetDistance(itemHeight, source);\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const totalHeight = createComputedTotalSize(itemHeight, source);\n useWatchForSizes(size, list, calculateRange);\n const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n return {\n calculateRange,\n scrollTo,\n containerStyle,\n wrapperProps,\n currentList,\n containerRef\n };\n}\n\nconst useWakeLock = (options = {}) => {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n let wakeLock;\n const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n const isActive = ref(false);\n async function onVisibilityChange() {\n if (!isSupported.value || !wakeLock)\n return;\n if (document && document.visibilityState === \"visible\")\n wakeLock = await navigator.wakeLock.request(\"screen\");\n isActive.value = !wakeLock.released;\n }\n if (document)\n useEventListener(document, \"visibilitychange\", onVisibilityChange, { passive: true });\n async function request(type) {\n if (!isSupported.value)\n return;\n wakeLock = await navigator.wakeLock.request(type);\n isActive.value = !wakeLock.released;\n }\n async function release() {\n if (!isSupported.value || !wakeLock)\n return;\n await wakeLock.release();\n isActive.value = !wakeLock.released;\n wakeLock = null;\n }\n return {\n isSupported,\n isActive,\n request,\n release\n };\n};\n\nconst useWebNotification = (defaultOptions = {}) => {\n const {\n window = defaultWindow\n } = defaultOptions;\n const isSupported = useSupported(() => !!window && \"Notification\" in window);\n const notification = ref(null);\n const requestPermission = async () => {\n if (!isSupported.value)\n return;\n if (\"permission\" in Notification && Notification.permission !== \"denied\")\n await Notification.requestPermission();\n };\n const onClick = createEventHook();\n const onShow = createEventHook();\n const onError = createEventHook();\n const onClose = createEventHook();\n const show = async (overrides) => {\n if (!isSupported.value)\n return;\n await requestPermission();\n const options = Object.assign({}, defaultOptions, overrides);\n notification.value = new Notification(options.title || \"\", options);\n notification.value.onclick = (event) => onClick.trigger(event);\n notification.value.onshow = (event) => onShow.trigger(event);\n notification.value.onerror = (event) => onError.trigger(event);\n notification.value.onclose = (event) => onClose.trigger(event);\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n tryOnMounted(async () => {\n if (isSupported.value)\n await requestPermission();\n });\n tryOnScopeDispose(close);\n if (isSupported.value && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n};\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = ref(\"CLOSED\");\n const wsRef = ref();\n const urlRef = resolveRef(url);\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n let pongTimeoutWait;\n const close = (code = 1e3, reason) => {\n if (!wsRef.value)\n return;\n explicitlyClosed = true;\n heartbeatPause == null ? void 0 : heartbeatPause();\n wsRef.value.close(code, reason);\n };\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const resetHeartbeat = () => {\n clearTimeout(pongTimeoutWait);\n pongTimeoutWait = void 0;\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const ws = new WebSocket(urlRef.value, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n ws.onopen = () => {\n status.value = \"OPEN\";\n onConnected == null ? void 0 : onConnected(ws);\n heartbeatResume == null ? void 0 : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n wsRef.value = void 0;\n onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? void 0 : onFailed();\n }\n };\n ws.onerror = (e) => {\n onError == null ? void 0 : onError(ws, e);\n };\n ws.onmessage = (e) => {\n if (options.heartbeat) {\n resetHeartbeat();\n const {\n message = DEFAULT_PING_MESSAGE\n } = resolveNestedOptions(options.heartbeat);\n if (e.data === message)\n return;\n }\n data.value = e.data;\n onMessage == null ? void 0 : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = DEFAULT_PING_MESSAGE,\n interval = 1e3,\n pongTimeout = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(() => {\n send(message, false);\n if (pongTimeoutWait != null)\n return;\n pongTimeoutWait = setTimeout(() => {\n close();\n }, pongTimeout);\n }, interval, { immediate: false });\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (autoClose) {\n useEventListener(window, \"beforeunload\", () => close());\n tryOnScopeDispose(close);\n }\n const open = () => {\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n watch(urlRef, open, { immediate: true });\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n const {\n window = defaultWindow\n } = options != null ? options : {};\n const data = ref(null);\n const worker = shallowRef();\n const post = function post2(val) {\n if (!worker.value)\n return;\n worker.value.postMessage(val);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n if (isString(arg0))\n worker.value = new Worker(arg0, workerOptions);\n else if (isFunction(arg0))\n worker.value = arg0();\n else\n worker.value = arg0;\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nconst jobRunner = (userFunc) => (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n};\n\nconst depsParser = (deps) => {\n if (deps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n return `importScripts(${depsString})`;\n};\n\nconst createWorkerBlobUrl = (fn, deps) => {\n const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n};\n\nconst useWebWorkerFn = (fn, options = {}) => {\n const {\n dependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = ref(\"PENDING\");\n const promise = ref({});\n const timeoutId = ref();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = void 0;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(() => workerTerminate(\"TIMEOUT_EXPIRED\"), timeout);\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n promise.value = {\n resolve,\n reject\n };\n worker.value && worker.value.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\"[useWebWorkerFn] You can only run one instance of the worker at a time.\");\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n};\n\nfunction useWindowFocus({ window = defaultWindow } = {}) {\n if (!window)\n return ref(false);\n const focused = ref(window.document.hasFocus());\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n });\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n });\n return focused;\n}\n\nfunction useWindowScroll({ window = defaultWindow } = {}) {\n if (!window) {\n return {\n x: ref(0),\n y: ref(0)\n };\n }\n const x = ref(window.scrollX);\n const y = ref(window.scrollY);\n useEventListener(window, \"scroll\", () => {\n x.value = window.scrollX;\n y.value = window.scrollY;\n }, {\n capture: false,\n passive: true\n });\n return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n const {\n window = defaultWindow,\n initialWidth = Infinity,\n initialHeight = Infinity,\n listenOrientation = true,\n includeScrollbar = true\n } = options;\n const width = ref(initialWidth);\n const height = ref(initialHeight);\n const update = () => {\n if (window) {\n if (includeScrollbar) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n } else {\n width.value = window.document.documentElement.clientWidth;\n height.value = window.document.documentElement.clientHeight;\n }\n }\n };\n update();\n tryOnMounted(update);\n useEventListener(\"resize\", update, { passive: true });\n if (listenOrientation)\n useEventListener(\"orientationchange\", update, { passive: true });\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, SwipeDirection, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsMasterCss, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, cloneFnJSON, computedAsync, computedInject, createFetch, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","import { isClient } from '@vueuse/core';\nexport { isClient, isIOS } from '@vueuse/core';\n\nconst isFirefox = () => isClient && /firefox/i.test(window.navigator.userAgent);\n\nexport { isFirefox };\n//# sourceMappingURL=browser.mjs.map\n","function easeInOutCubic(t, b, c, d) {\n const cc = c - b;\n t /= d / 2;\n if (t < 1) {\n return cc / 2 * t * t * t + b;\n }\n return cc / 2 * ((t -= 2) * t * t + 2) + b;\n}\n\nexport { easeInOutCubic };\n//# sourceMappingURL=easings.mjs.map\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nexport default baseMap;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n","import baseFlatten from './_baseFlatten.js';\nimport map from './map.js';\n\n/**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\nfunction flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n}\n\nexport default flatMap;\n","/**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n}\n\nexport default fromPairs;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nexport default isNil;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nexport default basePickBy;\n","import basePickBy from './_basePickBy.js';\nimport hasIn from './hasIn.js';\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nexport default basePick;\n","import basePick from './_basePick.js';\nimport flatRest from './_flatRest.js';\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nexport default pick;\n","import baseSet from './_baseSet.js';\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nexport default set;\n","import { isArray, isObject, isString } from '@vue/shared';\nexport { isArray, isDate, isFunction, isObject, isPlainObject, isPromise, isString, isSymbol } from '@vue/shared';\nimport { isNil } from 'lodash-unified';\nexport { isVNode } from 'vue';\n\nconst isUndefined = (val) => val === void 0;\nconst isBoolean = (val) => typeof val === \"boolean\";\nconst isNumber = (val) => typeof val === \"number\";\nconst isEmpty = (val) => !val && val !== 0 || isArray(val) && val.length === 0 || isObject(val) && !Object.keys(val).length;\nconst isElement = (e) => {\n if (typeof Element === \"undefined\")\n return false;\n return e instanceof Element;\n};\nconst isPropAbsent = (prop) => {\n return isNil(prop);\n};\nconst isStringNumber = (val) => {\n if (!isString(val)) {\n return false;\n }\n return !Number.isNaN(Number(val));\n};\nconst isWindow = (val) => {\n return val === window;\n};\n\nexport { isBoolean, isElement, isEmpty, isNumber, isPropAbsent, isStringNumber, isUndefined, isWindow };\n//# sourceMappingURL=types.mjs.map\n","import './browser.mjs';\nimport { isClient } from '@vueuse/core';\n\nconst rAF = (fn) => isClient ? window.requestAnimationFrame(fn) : setTimeout(fn, 16);\nconst cAF = (handle) => isClient ? window.cancelAnimationFrame(handle) : clearTimeout(handle);\n\nexport { cAF, rAF };\n//# sourceMappingURL=raf.mjs.map\n","import { capitalize as capitalize$1 } from '@vue/shared';\nexport { camelize, hyphenate, hyphenate as kebabCase } from '@vue/shared';\n\nconst escapeStringRegexp = (string = \"\") => string.replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\").replace(/-/g, \"\\\\x2d\");\nconst capitalize = (str) => capitalize$1(str);\n\nexport { capitalize, escapeStringRegexp };\n//# sourceMappingURL=strings.mjs.map\n","import { get, set } from 'lodash-unified';\nexport { hasOwn } from '@vue/shared';\n\nconst keysOf = (arr) => Object.keys(arr);\nconst entriesOf = (arr) => Object.entries(arr);\nconst getProp = (obj, path, defaultValue) => {\n return {\n get value() {\n return get(obj, path, defaultValue);\n },\n set value(val) {\n set(obj, path, val);\n }\n };\n};\n\nexport { entriesOf, getProp, keysOf };\n//# sourceMappingURL=objects.mjs.map\n","import './types.mjs';\nimport { isString } from '@vue/shared';\n\nclass ElementPlusError extends Error {\n constructor(m) {\n super(m);\n this.name = \"ElementPlusError\";\n }\n}\nfunction throwError(scope, m) {\n throw new ElementPlusError(`[${scope}] ${m}`);\n}\nfunction debugWarn(scope, message) {\n if (process.env.NODE_ENV !== \"production\") {\n const error = isString(scope) ? new ElementPlusError(`[${scope}] ${message}`) : scope;\n console.warn(error);\n }\n}\n\nexport { debugWarn, throwError };\n//# sourceMappingURL=error.mjs.map\n","import { isNumber, isStringNumber } from '../types.mjs';\nimport '../browser.mjs';\nimport '../strings.mjs';\nimport { entriesOf, keysOf } from '../objects.mjs';\nimport { debugWarn } from '../error.mjs';\nimport { isClient } from '@vueuse/core';\nimport { camelize, isObject, isString } from '@vue/shared';\n\nconst SCOPE = \"utils/dom/style\";\nconst classNameToArray = (cls = \"\") => cls.split(\" \").filter((item) => !!item.trim());\nconst hasClass = (el, cls) => {\n if (!el || !cls)\n return false;\n if (cls.includes(\" \"))\n throw new Error(\"className should not contain space.\");\n return el.classList.contains(cls);\n};\nconst addClass = (el, cls) => {\n if (!el || !cls.trim())\n return;\n el.classList.add(...classNameToArray(cls));\n};\nconst removeClass = (el, cls) => {\n if (!el || !cls.trim())\n return;\n el.classList.remove(...classNameToArray(cls));\n};\nconst getStyle = (element, styleName) => {\n var _a;\n if (!isClient || !element || !styleName)\n return \"\";\n let key = camelize(styleName);\n if (key === \"float\")\n key = \"cssFloat\";\n try {\n const style = element.style[key];\n if (style)\n return style;\n const computed = (_a = document.defaultView) == null ? void 0 : _a.getComputedStyle(element, \"\");\n return computed ? computed[key] : \"\";\n } catch (e) {\n return element.style[key];\n }\n};\nconst setStyle = (element, styleName, value) => {\n if (!element || !styleName)\n return;\n if (isObject(styleName)) {\n entriesOf(styleName).forEach(([prop, value2]) => setStyle(element, prop, value2));\n } else {\n const key = camelize(styleName);\n element.style[key] = value;\n }\n};\nconst removeStyle = (element, style) => {\n if (!element || !style)\n return;\n if (isObject(style)) {\n keysOf(style).forEach((prop) => removeStyle(element, prop));\n } else {\n setStyle(element, style, \"\");\n }\n};\nfunction addUnit(value, defaultUnit = \"px\") {\n if (!value)\n return \"\";\n if (isNumber(value) || isStringNumber(value)) {\n return `${value}${defaultUnit}`;\n } else if (isString(value)) {\n return value;\n }\n debugWarn(SCOPE, \"binding value must be a string or number\");\n}\n\nexport { addClass, addUnit, classNameToArray, getStyle, hasClass, removeClass, removeStyle, setStyle };\n//# sourceMappingURL=style.mjs.map\n","import '../browser.mjs';\nimport { easeInOutCubic } from '../easings.mjs';\nimport { isWindow } from '../types.mjs';\nimport { rAF, cAF } from '../raf.mjs';\nimport { getStyle } from './style.mjs';\nimport { isClient } from '@vueuse/core';\n\nconst isScroll = (el, isVertical) => {\n if (!isClient)\n return false;\n const key = {\n undefined: \"overflow\",\n true: \"overflow-y\",\n false: \"overflow-x\"\n }[String(isVertical)];\n const overflow = getStyle(el, key);\n return [\"scroll\", \"auto\", \"overlay\"].some((s) => overflow.includes(s));\n};\nconst getScrollContainer = (el, isVertical) => {\n if (!isClient)\n return;\n let parent = el;\n while (parent) {\n if ([window, document, document.documentElement].includes(parent))\n return window;\n if (isScroll(parent, isVertical))\n return parent;\n parent = parent.parentNode;\n }\n return parent;\n};\nlet scrollBarWidth;\nconst getScrollBarWidth = (namespace) => {\n var _a;\n if (!isClient)\n return 0;\n if (scrollBarWidth !== void 0)\n return scrollBarWidth;\n const outer = document.createElement(\"div\");\n outer.className = `${namespace}-scrollbar__wrap`;\n outer.style.visibility = \"hidden\";\n outer.style.width = \"100px\";\n outer.style.position = \"absolute\";\n outer.style.top = \"-9999px\";\n document.body.appendChild(outer);\n const widthNoScroll = outer.offsetWidth;\n outer.style.overflow = \"scroll\";\n const inner = document.createElement(\"div\");\n inner.style.width = \"100%\";\n outer.appendChild(inner);\n const widthWithScroll = inner.offsetWidth;\n (_a = outer.parentNode) == null ? void 0 : _a.removeChild(outer);\n scrollBarWidth = widthNoScroll - widthWithScroll;\n return scrollBarWidth;\n};\nfunction scrollIntoView(container, selected) {\n if (!isClient)\n return;\n if (!selected) {\n container.scrollTop = 0;\n return;\n }\n const offsetParents = [];\n let pointer = selected.offsetParent;\n while (pointer !== null && container !== pointer && container.contains(pointer)) {\n offsetParents.push(pointer);\n pointer = pointer.offsetParent;\n }\n const top = selected.offsetTop + offsetParents.reduce((prev, curr) => prev + curr.offsetTop, 0);\n const bottom = top + selected.offsetHeight;\n const viewRectTop = container.scrollTop;\n const viewRectBottom = viewRectTop + container.clientHeight;\n if (top < viewRectTop) {\n container.scrollTop = top;\n } else if (bottom > viewRectBottom) {\n container.scrollTop = bottom - container.clientHeight;\n }\n}\nfunction animateScrollTo(container, from, to, duration, callback) {\n const startTime = Date.now();\n let handle;\n const scroll = () => {\n const timestamp = Date.now();\n const time = timestamp - startTime;\n const nextScrollTop = easeInOutCubic(time > duration ? duration : time, from, to, duration);\n if (isWindow(container)) {\n container.scrollTo(window.pageXOffset, nextScrollTop);\n } else {\n container.scrollTop = nextScrollTop;\n }\n if (time < duration) {\n handle = rAF(scroll);\n } else if (typeof callback === \"function\") {\n callback();\n }\n };\n scroll();\n return () => {\n handle && cAF(handle);\n };\n}\nconst getScrollElement = (target, container) => {\n if (isWindow(container)) {\n return target.ownerDocument.documentElement;\n }\n return container;\n};\nconst getScrollTop = (container) => {\n if (isWindow(container)) {\n return window.scrollY;\n }\n return container.scrollTop;\n};\n\nexport { animateScrollTo, getScrollBarWidth, getScrollContainer, getScrollElement, getScrollTop, isScroll, scrollIntoView };\n//# sourceMappingURL=scroll.mjs.map\n","import { warn } from 'vue';\nimport { fromPairs } from 'lodash-unified';\nimport '../../types.mjs';\nimport '../../objects.mjs';\nimport { isObject, hasOwn } from '@vue/shared';\n\nconst epPropKey = \"__epPropKey\";\nconst definePropType = (val) => val;\nconst isEpProp = (val) => isObject(val) && !!val[epPropKey];\nconst buildProp = (prop, key) => {\n if (!isObject(prop) || isEpProp(prop))\n return prop;\n const { values, required, default: defaultValue, type, validator } = prop;\n const _validator = values || validator ? (val) => {\n let valid = false;\n let allowedValues = [];\n if (values) {\n allowedValues = Array.from(values);\n if (hasOwn(prop, \"default\")) {\n allowedValues.push(defaultValue);\n }\n valid || (valid = allowedValues.includes(val));\n }\n if (validator)\n valid || (valid = validator(val));\n if (!valid && allowedValues.length > 0) {\n const allowValuesText = [...new Set(allowedValues)].map((value) => JSON.stringify(value)).join(\", \");\n warn(`Invalid prop: validation failed${key ? ` for prop \"${key}\"` : \"\"}. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`);\n }\n return valid;\n } : void 0;\n const epProp = {\n type,\n required: !!required,\n validator: _validator,\n [epPropKey]: true\n };\n if (hasOwn(prop, \"default\"))\n epProp.default = defaultValue;\n return epProp;\n};\nconst buildProps = (props) => fromPairs(Object.entries(props).map(([key, option]) => [\n key,\n buildProp(option, key)\n]));\n\nexport { buildProp, buildProps, definePropType, epPropKey, isEpProp };\n//# sourceMappingURL=runtime.mjs.map\n","import { Close, SuccessFilled, InfoFilled, WarningFilled, CircleCloseFilled, Loading, CircleCheck, CircleClose } from '@element-plus/icons-vue';\nimport './props/index.mjs';\nimport { definePropType } from './props/runtime.mjs';\n\nconst iconPropType = definePropType([\n String,\n Object,\n Function\n]);\nconst CloseComponents = {\n Close\n};\nconst TypeComponents = {\n Close,\n SuccessFilled,\n InfoFilled,\n WarningFilled,\n CircleCloseFilled\n};\nconst TypeComponentsMap = {\n success: SuccessFilled,\n warning: WarningFilled,\n error: CircleCloseFilled,\n info: InfoFilled\n};\nconst ValidateComponentsMap = {\n validating: Loading,\n success: CircleCheck,\n error: CircleClose\n};\n\nexport { CloseComponents, TypeComponents, TypeComponentsMap, ValidateComponentsMap, iconPropType };\n//# sourceMappingURL=icon.mjs.map\n","import '../functions.mjs';\nimport { NOOP } from '@vue/shared';\n\nconst withInstall = (main, extra) => {\n ;\n main.install = (app) => {\n for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {\n app.component(comp.name, comp);\n }\n };\n if (extra) {\n for (const [key, comp] of Object.entries(extra)) {\n ;\n main[key] = comp;\n }\n }\n return main;\n};\nconst withInstallFunction = (fn, name) => {\n ;\n fn.install = (app) => {\n ;\n fn._context = app._context;\n app.config.globalProperties[name] = fn;\n };\n return fn;\n};\nconst withInstallDirective = (directive, name) => {\n ;\n directive.install = (app) => {\n app.directive(name, directive);\n };\n return directive;\n};\nconst withNoopInstall = (component) => {\n ;\n component.install = NOOP;\n return component;\n};\n\nexport { withInstall, withInstallDirective, withInstallFunction, withNoopInstall };\n//# sourceMappingURL=install.mjs.map\n","import '../types.mjs';\nimport { isFunction } from '@vue/shared';\n\nconst composeRefs = (...refs) => {\n return (el) => {\n refs.forEach((ref) => {\n if (isFunction(ref)) {\n ref(el);\n } else {\n ref.value = el;\n }\n });\n };\n};\n\nexport { composeRefs };\n//# sourceMappingURL=refs.mjs.map\n","const EVENT_CODE = {\n tab: \"Tab\",\n enter: \"Enter\",\n space: \"Space\",\n left: \"ArrowLeft\",\n up: \"ArrowUp\",\n right: \"ArrowRight\",\n down: \"ArrowDown\",\n esc: \"Escape\",\n delete: \"Delete\",\n backspace: \"Backspace\",\n numpadEnter: \"NumpadEnter\",\n pageUp: \"PageUp\",\n pageDown: \"PageDown\",\n home: \"Home\",\n end: \"End\"\n};\n\nexport { EVENT_CODE };\n//# sourceMappingURL=aria.mjs.map\n","const UPDATE_MODEL_EVENT = \"update:modelValue\";\nconst CHANGE_EVENT = \"change\";\nconst INPUT_EVENT = \"input\";\n\nexport { CHANGE_EVENT, INPUT_EVENT, UPDATE_MODEL_EVENT };\n//# sourceMappingURL=event.mjs.map\n","const componentSizes = [\"\", \"default\", \"small\", \"large\"];\nconst componentSizeMap = {\n large: 40,\n default: 32,\n small: 24\n};\n\nexport { componentSizeMap, componentSizes };\n//# sourceMappingURL=size.mjs.map\n","import '../../constants/index.mjs';\nimport { componentSizes } from '../../constants/size.mjs';\nimport { datePickTypes } from '../../constants/date.mjs';\n\nconst isValidComponentSize = (val) => [\"\", ...componentSizes].includes(val);\nconst isValidDatePickType = (val) => [...datePickTypes].includes(val);\n\nexport { isValidComponentSize, isValidDatePickType };\n//# sourceMappingURL=validator.mjs.map\n","import { isVNode, Fragment, Text, Comment, openBlock, createBlock, createCommentVNode } from 'vue';\nimport '../strings.mjs';\nimport '../types.mjs';\nimport '../objects.mjs';\nimport { debugWarn } from '../error.mjs';\nimport { hasOwn, camelize, isArray } from '@vue/shared';\n\nconst SCOPE = \"utils/vue/vnode\";\nvar PatchFlags = /* @__PURE__ */ ((PatchFlags2) => {\n PatchFlags2[PatchFlags2[\"TEXT\"] = 1] = \"TEXT\";\n PatchFlags2[PatchFlags2[\"CLASS\"] = 2] = \"CLASS\";\n PatchFlags2[PatchFlags2[\"STYLE\"] = 4] = \"STYLE\";\n PatchFlags2[PatchFlags2[\"PROPS\"] = 8] = \"PROPS\";\n PatchFlags2[PatchFlags2[\"FULL_PROPS\"] = 16] = \"FULL_PROPS\";\n PatchFlags2[PatchFlags2[\"HYDRATE_EVENTS\"] = 32] = \"HYDRATE_EVENTS\";\n PatchFlags2[PatchFlags2[\"STABLE_FRAGMENT\"] = 64] = \"STABLE_FRAGMENT\";\n PatchFlags2[PatchFlags2[\"KEYED_FRAGMENT\"] = 128] = \"KEYED_FRAGMENT\";\n PatchFlags2[PatchFlags2[\"UNKEYED_FRAGMENT\"] = 256] = \"UNKEYED_FRAGMENT\";\n PatchFlags2[PatchFlags2[\"NEED_PATCH\"] = 512] = \"NEED_PATCH\";\n PatchFlags2[PatchFlags2[\"DYNAMIC_SLOTS\"] = 1024] = \"DYNAMIC_SLOTS\";\n PatchFlags2[PatchFlags2[\"HOISTED\"] = -1] = \"HOISTED\";\n PatchFlags2[PatchFlags2[\"BAIL\"] = -2] = \"BAIL\";\n return PatchFlags2;\n})(PatchFlags || {});\nfunction isFragment(node) {\n return isVNode(node) && node.type === Fragment;\n}\nfunction isText(node) {\n return isVNode(node) && node.type === Text;\n}\nfunction isComment(node) {\n return isVNode(node) && node.type === Comment;\n}\nconst TEMPLATE = \"template\";\nfunction isTemplate(node) {\n return isVNode(node) && node.type === TEMPLATE;\n}\nfunction isValidElementNode(node) {\n return isVNode(node) && !isFragment(node) && !isComment(node);\n}\nfunction getChildren(node, depth) {\n if (isComment(node))\n return;\n if (isFragment(node) || isTemplate(node)) {\n return depth > 0 ? getFirstValidNode(node.children, depth - 1) : void 0;\n }\n return node;\n}\nconst getFirstValidNode = (nodes, maxDepth = 3) => {\n if (Array.isArray(nodes)) {\n return getChildren(nodes[0], maxDepth);\n } else {\n return getChildren(nodes, maxDepth);\n }\n};\nfunction renderIf(condition, ...args) {\n return condition ? renderBlock(...args) : createCommentVNode(\"v-if\", true);\n}\nfunction renderBlock(...args) {\n return openBlock(), createBlock(...args);\n}\nconst getNormalizedProps = (node) => {\n if (!isVNode(node)) {\n debugWarn(SCOPE, \"[getNormalizedProps] must be a VNode\");\n return {};\n }\n const raw = node.props || {};\n const type = (isVNode(node.type) ? node.type.props : void 0) || {};\n const props = {};\n Object.keys(type).forEach((key) => {\n if (hasOwn(type[key], \"default\")) {\n props[key] = type[key].default;\n }\n });\n Object.keys(raw).forEach((key) => {\n props[camelize(key)] = raw[key];\n });\n return props;\n};\nconst ensureOnlyChild = (children) => {\n if (!isArray(children) || children.length > 1) {\n throw new Error(\"expect to receive a single Vue element child\");\n }\n return children[0];\n};\nconst flattedChildren = (children) => {\n const vNodes = isArray(children) ? children : [children];\n const result = [];\n vNodes.forEach((child) => {\n var _a;\n if (isArray(child)) {\n result.push(...flattedChildren(child));\n } else if (isVNode(child) && isArray(child.children)) {\n result.push(...flattedChildren(child.children));\n } else {\n result.push(child);\n if (isVNode(child) && ((_a = child.component) == null ? void 0 : _a.subTree)) {\n result.push(...flattedChildren(child.component.subTree));\n }\n }\n });\n return result;\n};\n\nexport { PatchFlags, ensureOnlyChild, flattedChildren, getFirstValidNode, getNormalizedProps, isComment, isFragment, isTemplate, isText, isValidElementNode, renderBlock, renderIf };\n//# sourceMappingURL=vnode.mjs.map\n","const isKorean = (text) => /([\\uAC00-\\uD7AF\\u3130-\\u318F])+/gi.test(text);\n\nexport { isKorean };\n//# sourceMappingURL=i18n.mjs.map\n","const mutable = (val) => val;\n\nexport { mutable };\n//# sourceMappingURL=typescript.mjs.map\n","import { computed, getCurrentInstance } from 'vue';\nimport { fromPairs } from 'lodash-unified';\nimport '../../utils/index.mjs';\nimport { debugWarn } from '../../utils/error.mjs';\n\nconst DEFAULT_EXCLUDE_KEYS = [\"class\", \"style\"];\nconst LISTENER_PREFIX = /^on[A-Z]/;\nconst useAttrs = (params = {}) => {\n const { excludeListeners = false, excludeKeys } = params;\n const allExcludeKeys = computed(() => {\n return ((excludeKeys == null ? void 0 : excludeKeys.value) || []).concat(DEFAULT_EXCLUDE_KEYS);\n });\n const instance = getCurrentInstance();\n if (!instance) {\n debugWarn(\"use-attrs\", \"getCurrentInstance() returned null. useAttrs() must be called at the top of a setup function\");\n return computed(() => ({}));\n }\n return computed(() => {\n var _a;\n return fromPairs(Object.entries((_a = instance.proxy) == null ? void 0 : _a.$attrs).filter(([key]) => !allExcludeKeys.value.includes(key) && !(excludeListeners && LISTENER_PREFIX.test(key))));\n });\n};\n\nexport { useAttrs };\n//# sourceMappingURL=index.mjs.map\n","import { watch, unref } from 'vue';\nimport '../../utils/index.mjs';\nimport { debugWarn } from '../../utils/error.mjs';\n\nconst useDeprecated = ({ from, replacement, scope, version, ref, type = \"API\" }, condition) => {\n watch(() => unref(condition), (val) => {\n if (val) {\n debugWarn(scope, `[${type}] ${from} is about to be deprecated in version ${version}, please use ${replacement} instead.\nFor more detail, please visit: ${ref}\n`);\n }\n }, {\n immediate: true\n });\n};\n\nexport { useDeprecated };\n//# sourceMappingURL=index.mjs.map\n","import { onMounted, watchEffect, onBeforeUnmount } from 'vue';\nimport '../../utils/index.mjs';\nimport { addUnit } from '../../utils/dom/style.mjs';\n\nconst useDraggable = (targetRef, dragRef, draggable, overflow) => {\n let transform = {\n offsetX: 0,\n offsetY: 0\n };\n const onMousedown = (e) => {\n const downX = e.clientX;\n const downY = e.clientY;\n const { offsetX, offsetY } = transform;\n const targetRect = targetRef.value.getBoundingClientRect();\n const targetLeft = targetRect.left;\n const targetTop = targetRect.top;\n const targetWidth = targetRect.width;\n const targetHeight = targetRect.height;\n const clientWidth = document.documentElement.clientWidth;\n const clientHeight = document.documentElement.clientHeight;\n const minLeft = -targetLeft + offsetX;\n const minTop = -targetTop + offsetY;\n const maxLeft = clientWidth - targetLeft - targetWidth + offsetX;\n const maxTop = clientHeight - targetTop - targetHeight + offsetY;\n const onMousemove = (e2) => {\n let moveX = offsetX + e2.clientX - downX;\n let moveY = offsetY + e2.clientY - downY;\n if (!(overflow == null ? void 0 : overflow.value)) {\n moveX = Math.min(Math.max(moveX, minLeft), maxLeft);\n moveY = Math.min(Math.max(moveY, minTop), maxTop);\n }\n transform = {\n offsetX: moveX,\n offsetY: moveY\n };\n if (targetRef.value) {\n targetRef.value.style.transform = `translate(${addUnit(moveX)}, ${addUnit(moveY)})`;\n }\n };\n const onMouseup = () => {\n document.removeEventListener(\"mousemove\", onMousemove);\n document.removeEventListener(\"mouseup\", onMouseup);\n };\n document.addEventListener(\"mousemove\", onMousemove);\n document.addEventListener(\"mouseup\", onMouseup);\n };\n const onDraggable = () => {\n if (dragRef.value && targetRef.value) {\n dragRef.value.addEventListener(\"mousedown\", onMousedown);\n }\n };\n const offDraggable = () => {\n if (dragRef.value && targetRef.value) {\n dragRef.value.removeEventListener(\"mousedown\", onMousedown);\n }\n };\n const resetPosition = () => {\n transform = {\n offsetX: 0,\n offsetY: 0\n };\n if (targetRef.value) {\n targetRef.value.style.transform = \"none\";\n }\n };\n onMounted(() => {\n watchEffect(() => {\n if (draggable.value) {\n onDraggable();\n } else {\n offDraggable();\n }\n });\n });\n onBeforeUnmount(() => {\n offDraggable();\n });\n return {\n resetPosition\n };\n};\n\nexport { useDraggable };\n//# sourceMappingURL=index.mjs.map\n","var English = {\n name: \"en\",\n el: {\n breadcrumb: {\n label: \"Breadcrumb\"\n },\n colorpicker: {\n confirm: \"OK\",\n clear: \"Clear\",\n defaultLabel: \"color picker\",\n description: \"current color is {color}. press enter to select a new color.\",\n alphaLabel: \"pick alpha value\"\n },\n datepicker: {\n now: \"Now\",\n today: \"Today\",\n cancel: \"Cancel\",\n clear: \"Clear\",\n confirm: \"OK\",\n dateTablePrompt: \"Use the arrow keys and enter to select the day of the month\",\n monthTablePrompt: \"Use the arrow keys and enter to select the month\",\n yearTablePrompt: \"Use the arrow keys and enter to select the year\",\n selectedDate: \"Selected date\",\n selectDate: \"Select date\",\n selectTime: \"Select time\",\n startDate: \"Start Date\",\n startTime: \"Start Time\",\n endDate: \"End Date\",\n endTime: \"End Time\",\n prevYear: \"Previous Year\",\n nextYear: \"Next Year\",\n prevMonth: \"Previous Month\",\n nextMonth: \"Next Month\",\n year: \"\",\n month1: \"January\",\n month2: \"February\",\n month3: \"March\",\n month4: \"April\",\n month5: \"May\",\n month6: \"June\",\n month7: \"July\",\n month8: \"August\",\n month9: \"September\",\n month10: \"October\",\n month11: \"November\",\n month12: \"December\",\n week: \"week\",\n weeks: {\n sun: \"Sun\",\n mon: \"Mon\",\n tue: \"Tue\",\n wed: \"Wed\",\n thu: \"Thu\",\n fri: \"Fri\",\n sat: \"Sat\"\n },\n weeksFull: {\n sun: \"Sunday\",\n mon: \"Monday\",\n tue: \"Tuesday\",\n wed: \"Wednesday\",\n thu: \"Thursday\",\n fri: \"Friday\",\n sat: \"Saturday\"\n },\n months: {\n jan: \"Jan\",\n feb: \"Feb\",\n mar: \"Mar\",\n apr: \"Apr\",\n may: \"May\",\n jun: \"Jun\",\n jul: \"Jul\",\n aug: \"Aug\",\n sep: \"Sep\",\n oct: \"Oct\",\n nov: \"Nov\",\n dec: \"Dec\"\n }\n },\n inputNumber: {\n decrease: \"decrease number\",\n increase: \"increase number\"\n },\n select: {\n loading: \"Loading\",\n noMatch: \"No matching data\",\n noData: \"No data\",\n placeholder: \"Select\"\n },\n mention: {\n loading: \"Loading\"\n },\n dropdown: {\n toggleDropdown: \"Toggle Dropdown\"\n },\n cascader: {\n noMatch: \"No matching data\",\n loading: \"Loading\",\n placeholder: \"Select\",\n noData: \"No data\"\n },\n pagination: {\n goto: \"Go to\",\n pagesize: \"/page\",\n total: \"Total {total}\",\n pageClassifier: \"\",\n page: \"Page\",\n prev: \"Go to previous page\",\n next: \"Go to next page\",\n currentPage: \"page {pager}\",\n prevPages: \"Previous {pager} pages\",\n nextPages: \"Next {pager} pages\",\n deprecationWarning: \"Deprecated usages detected, please refer to the el-pagination documentation for more details\"\n },\n dialog: {\n close: \"Close this dialog\"\n },\n drawer: {\n close: \"Close this dialog\"\n },\n messagebox: {\n title: \"Message\",\n confirm: \"OK\",\n cancel: \"Cancel\",\n error: \"Illegal input\",\n close: \"Close this dialog\"\n },\n upload: {\n deleteTip: \"press delete to remove\",\n delete: \"Delete\",\n preview: \"Preview\",\n continue: \"Continue\"\n },\n slider: {\n defaultLabel: \"slider between {min} and {max}\",\n defaultRangeStartLabel: \"pick start value\",\n defaultRangeEndLabel: \"pick end value\"\n },\n table: {\n emptyText: \"No Data\",\n confirmFilter: \"Confirm\",\n resetFilter: \"Reset\",\n clearFilter: \"All\",\n sumText: \"Sum\"\n },\n tour: {\n next: \"Next\",\n previous: \"Previous\",\n finish: \"Finish\"\n },\n tree: {\n emptyText: \"No Data\"\n },\n transfer: {\n noMatch: \"No matching data\",\n noData: \"No data\",\n titles: [\"List 1\", \"List 2\"],\n filterPlaceholder: \"Enter keyword\",\n noCheckedFormat: \"{total} items\",\n hasCheckedFormat: \"{checked}/{total} checked\"\n },\n image: {\n error: \"FAILED\"\n },\n pageHeader: {\n title: \"Back\"\n },\n popconfirm: {\n confirmButtonText: \"Yes\",\n cancelButtonText: \"No\"\n },\n carousel: {\n leftArrow: \"Carousel arrow left\",\n rightArrow: \"Carousel arrow right\",\n indicator: \"Carousel switch to index {index}\"\n }\n }\n};\n\nexport { English as default };\n//# sourceMappingURL=en.mjs.map\n","import { unref, computed, isRef, ref, inject } from 'vue';\nimport { get } from 'lodash-unified';\nimport English from '../../locale/lang/en.mjs';\n\nconst buildTranslator = (locale) => (path, option) => translate(path, option, unref(locale));\nconst translate = (path, option, locale) => get(locale, path, path).replace(/\\{(\\w+)\\}/g, (_, key) => {\n var _a;\n return `${(_a = option == null ? void 0 : option[key]) != null ? _a : `{${key}}`}`;\n});\nconst buildLocaleContext = (locale) => {\n const lang = computed(() => unref(locale).name);\n const localeRef = isRef(locale) ? locale : ref(locale);\n return {\n lang,\n locale: localeRef,\n t: buildTranslator(locale)\n };\n};\nconst localeContextKey = Symbol(\"localeContextKey\");\nconst useLocale = (localeOverrides) => {\n const locale = localeOverrides || inject(localeContextKey, ref());\n return buildLocaleContext(computed(() => locale.value || English));\n};\n\nexport { buildLocaleContext, buildTranslator, localeContextKey, translate, useLocale };\n//# sourceMappingURL=index.mjs.map\n","import { getCurrentInstance, inject, ref, computed, unref } from 'vue';\n\nconst defaultNamespace = \"el\";\nconst statePrefix = \"is-\";\nconst _bem = (namespace, block, blockSuffix, element, modifier) => {\n let cls = `${namespace}-${block}`;\n if (blockSuffix) {\n cls += `-${blockSuffix}`;\n }\n if (element) {\n cls += `__${element}`;\n }\n if (modifier) {\n cls += `--${modifier}`;\n }\n return cls;\n};\nconst namespaceContextKey = Symbol(\"namespaceContextKey\");\nconst useGetDerivedNamespace = (namespaceOverrides) => {\n const derivedNamespace = namespaceOverrides || (getCurrentInstance() ? inject(namespaceContextKey, ref(defaultNamespace)) : ref(defaultNamespace));\n const namespace = computed(() => {\n return unref(derivedNamespace) || defaultNamespace;\n });\n return namespace;\n};\nconst useNamespace = (block, namespaceOverrides) => {\n const namespace = useGetDerivedNamespace(namespaceOverrides);\n const b = (blockSuffix = \"\") => _bem(namespace.value, block, blockSuffix, \"\", \"\");\n const e = (element) => element ? _bem(namespace.value, block, \"\", element, \"\") : \"\";\n const m = (modifier) => modifier ? _bem(namespace.value, block, \"\", \"\", modifier) : \"\";\n const be = (blockSuffix, element) => blockSuffix && element ? _bem(namespace.value, block, blockSuffix, element, \"\") : \"\";\n const em = (element, modifier) => element && modifier ? _bem(namespace.value, block, \"\", element, modifier) : \"\";\n const bm = (blockSuffix, modifier) => blockSuffix && modifier ? _bem(namespace.value, block, blockSuffix, \"\", modifier) : \"\";\n const bem = (blockSuffix, element, modifier) => blockSuffix && element && modifier ? _bem(namespace.value, block, blockSuffix, element, modifier) : \"\";\n const is = (name, ...args) => {\n const state = args.length >= 1 ? args[0] : true;\n return name && state ? `${statePrefix}${name}` : \"\";\n };\n const cssVar = (object) => {\n const styles = {};\n for (const key in object) {\n if (object[key]) {\n styles[`--${namespace.value}-${key}`] = object[key];\n }\n }\n return styles;\n };\n const cssVarBlock = (object) => {\n const styles = {};\n for (const key in object) {\n if (object[key]) {\n styles[`--${namespace.value}-${block}-${key}`] = object[key];\n }\n }\n return styles;\n };\n const cssVarName = (name) => `--${namespace.value}-${name}`;\n const cssVarBlockName = (name) => `--${namespace.value}-${block}-${name}`;\n return {\n namespace,\n b,\n e,\n m,\n be,\n em,\n bm,\n bem,\n is,\n cssVar,\n cssVarName,\n cssVarBlock,\n cssVarBlockName\n };\n};\n\nexport { defaultNamespace, namespaceContextKey, useGetDerivedNamespace, useNamespace };\n//# sourceMappingURL=index.mjs.map\n","import { isRef, computed, watch, onScopeDispose } from 'vue';\nimport '../../utils/index.mjs';\nimport { useNamespace } from '../use-namespace/index.mjs';\nimport { throwError } from '../../utils/error.mjs';\nimport { isClient } from '@vueuse/core';\nimport { hasClass, removeClass, getStyle, addClass } from '../../utils/dom/style.mjs';\nimport { getScrollBarWidth } from '../../utils/dom/scroll.mjs';\n\nconst useLockscreen = (trigger, options = {}) => {\n if (!isRef(trigger)) {\n throwError(\"[useLockscreen]\", \"You need to pass a ref param to this function\");\n }\n const ns = options.ns || useNamespace(\"popup\");\n const hiddenCls = computed(() => ns.bm(\"parent\", \"hidden\"));\n if (!isClient || hasClass(document.body, hiddenCls.value)) {\n return;\n }\n let scrollBarWidth = 0;\n let withoutHiddenClass = false;\n let bodyWidth = \"0\";\n const cleanup = () => {\n setTimeout(() => {\n removeClass(document == null ? void 0 : document.body, hiddenCls.value);\n if (withoutHiddenClass && document) {\n document.body.style.width = bodyWidth;\n }\n }, 200);\n };\n watch(trigger, (val) => {\n if (!val) {\n cleanup();\n return;\n }\n withoutHiddenClass = !hasClass(document.body, hiddenCls.value);\n if (withoutHiddenClass) {\n bodyWidth = document.body.style.width;\n }\n scrollBarWidth = getScrollBarWidth(ns.namespace.value);\n const bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;\n const bodyOverflowY = getStyle(document.body, \"overflowY\");\n if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === \"scroll\") && withoutHiddenClass) {\n document.body.style.width = `calc(100% - ${scrollBarWidth}px)`;\n }\n addClass(document.body, hiddenCls.value);\n });\n onScopeDispose(() => cleanup());\n};\n\nexport { useLockscreen };\n//# sourceMappingURL=index.mjs.map\n","import { getCurrentInstance, computed, watch, onMounted } from 'vue';\nimport '../../utils/index.mjs';\nimport { buildProp, definePropType } from '../../utils/vue/props/runtime.mjs';\nimport { isFunction } from '@vue/shared';\nimport { isClient } from '@vueuse/core';\nimport { isBoolean } from '../../utils/types.mjs';\n\nconst _prop = buildProp({\n type: definePropType(Boolean),\n default: null\n});\nconst _event = buildProp({\n type: definePropType(Function)\n});\nconst createModelToggleComposable = (name) => {\n const updateEventKey = `update:${name}`;\n const updateEventKeyRaw = `onUpdate:${name}`;\n const useModelToggleEmits2 = [updateEventKey];\n const useModelToggleProps2 = {\n [name]: _prop,\n [updateEventKeyRaw]: _event\n };\n const useModelToggle2 = ({\n indicator,\n toggleReason,\n shouldHideWhenRouteChanges,\n shouldProceed,\n onShow,\n onHide\n }) => {\n const instance = getCurrentInstance();\n const { emit } = instance;\n const props = instance.props;\n const hasUpdateHandler = computed(() => isFunction(props[updateEventKeyRaw]));\n const isModelBindingAbsent = computed(() => props[name] === null);\n const doShow = (event) => {\n if (indicator.value === true) {\n return;\n }\n indicator.value = true;\n if (toggleReason) {\n toggleReason.value = event;\n }\n if (isFunction(onShow)) {\n onShow(event);\n }\n };\n const doHide = (event) => {\n if (indicator.value === false) {\n return;\n }\n indicator.value = false;\n if (toggleReason) {\n toggleReason.value = event;\n }\n if (isFunction(onHide)) {\n onHide(event);\n }\n };\n const show = (event) => {\n if (props.disabled === true || isFunction(shouldProceed) && !shouldProceed())\n return;\n const shouldEmit = hasUpdateHandler.value && isClient;\n if (shouldEmit) {\n emit(updateEventKey, true);\n }\n if (isModelBindingAbsent.value || !shouldEmit) {\n doShow(event);\n }\n };\n const hide = (event) => {\n if (props.disabled === true || !isClient)\n return;\n const shouldEmit = hasUpdateHandler.value && isClient;\n if (shouldEmit) {\n emit(updateEventKey, false);\n }\n if (isModelBindingAbsent.value || !shouldEmit) {\n doHide(event);\n }\n };\n const onChange = (val) => {\n if (!isBoolean(val))\n return;\n if (props.disabled && val) {\n if (hasUpdateHandler.value) {\n emit(updateEventKey, false);\n }\n } else if (indicator.value !== val) {\n if (val) {\n doShow();\n } else {\n doHide();\n }\n }\n };\n const toggle = () => {\n if (indicator.value) {\n hide();\n } else {\n show();\n }\n };\n watch(() => props[name], onChange);\n if (shouldHideWhenRouteChanges && instance.appContext.config.globalProperties.$route !== void 0) {\n watch(() => ({\n ...instance.proxy.$route\n }), () => {\n if (shouldHideWhenRouteChanges.value && indicator.value) {\n hide();\n }\n });\n }\n onMounted(() => {\n onChange(props[name]);\n });\n return {\n hide,\n show,\n toggle,\n hasUpdateHandler\n };\n };\n return {\n useModelToggle: useModelToggle2,\n useModelToggleProps: useModelToggleProps2,\n useModelToggleEmits: useModelToggleEmits2\n };\n};\nconst { useModelToggle, useModelToggleProps, useModelToggleEmits } = createModelToggleComposable(\"modelValue\");\n\nexport { createModelToggleComposable, useModelToggle, useModelToggleEmits, useModelToggleProps };\n//# sourceMappingURL=index.mjs.map\n","import { getCurrentInstance, computed } from 'vue';\n\nconst useProp = (name) => {\n const vm = getCurrentInstance();\n return computed(() => {\n var _a, _b;\n return (_b = (_a = vm == null ? void 0 : vm.proxy) == null ? void 0 : _a.$props) == null ? void 0 : _b[name];\n });\n};\n\nexport { useProp };\n//# sourceMappingURL=index.mjs.map\n","var E=\"top\",R=\"bottom\",W=\"right\",P=\"left\",me=\"auto\",G=[E,R,W,P],U=\"start\",J=\"end\",Xe=\"clippingParents\",je=\"viewport\",K=\"popper\",Ye=\"reference\",De=G.reduce(function(t,e){return t.concat([e+\"-\"+U,e+\"-\"+J])},[]),Ee=[].concat(G,[me]).reduce(function(t,e){return t.concat([e,e+\"-\"+U,e+\"-\"+J])},[]),Ge=\"beforeRead\",Je=\"read\",Ke=\"afterRead\",Qe=\"beforeMain\",Ze=\"main\",et=\"afterMain\",tt=\"beforeWrite\",nt=\"write\",rt=\"afterWrite\",ot=[Ge,Je,Ke,Qe,Ze,et,tt,nt,rt];function C(t){return t?(t.nodeName||\"\").toLowerCase():null}function H(t){if(t==null)return window;if(t.toString()!==\"[object Window]\"){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function Q(t){var e=H(t).Element;return t instanceof e||t instanceof Element}function B(t){var e=H(t).HTMLElement;return t instanceof e||t instanceof HTMLElement}function Pe(t){if(typeof ShadowRoot==\"undefined\")return!1;var e=H(t).ShadowRoot;return t instanceof e||t instanceof ShadowRoot}function Mt(t){var e=t.state;Object.keys(e.elements).forEach(function(n){var r=e.styles[n]||{},o=e.attributes[n]||{},i=e.elements[n];!B(i)||!C(i)||(Object.assign(i.style,r),Object.keys(o).forEach(function(a){var s=o[a];s===!1?i.removeAttribute(a):i.setAttribute(a,s===!0?\"\":s)}))})}function Rt(t){var e=t.state,n={popper:{position:e.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow),function(){Object.keys(e.elements).forEach(function(r){var o=e.elements[r],i=e.attributes[r]||{},a=Object.keys(e.styles.hasOwnProperty(r)?e.styles[r]:n[r]),s=a.reduce(function(f,c){return f[c]=\"\",f},{});!B(o)||!C(o)||(Object.assign(o.style,s),Object.keys(i).forEach(function(f){o.removeAttribute(f)}))})}}var Ae={name:\"applyStyles\",enabled:!0,phase:\"write\",fn:Mt,effect:Rt,requires:[\"computeStyles\"]};function q(t){return t.split(\"-\")[0]}var X=Math.max,ve=Math.min,Z=Math.round;function ee(t,e){e===void 0&&(e=!1);var n=t.getBoundingClientRect(),r=1,o=1;if(B(t)&&e){var i=t.offsetHeight,a=t.offsetWidth;a>0&&(r=Z(n.width)/a||1),i>0&&(o=Z(n.height)/i||1)}return{width:n.width/r,height:n.height/o,top:n.top/o,right:n.right/r,bottom:n.bottom/o,left:n.left/r,x:n.left/r,y:n.top/o}}function ke(t){var e=ee(t),n=t.offsetWidth,r=t.offsetHeight;return Math.abs(e.width-n)<=1&&(n=e.width),Math.abs(e.height-r)<=1&&(r=e.height),{x:t.offsetLeft,y:t.offsetTop,width:n,height:r}}function it(t,e){var n=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(n&&Pe(n)){var r=e;do{if(r&&t.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function N(t){return H(t).getComputedStyle(t)}function Wt(t){return[\"table\",\"td\",\"th\"].indexOf(C(t))>=0}function I(t){return((Q(t)?t.ownerDocument:t.document)||window.document).documentElement}function ge(t){return C(t)===\"html\"?t:t.assignedSlot||t.parentNode||(Pe(t)?t.host:null)||I(t)}function at(t){return!B(t)||N(t).position===\"fixed\"?null:t.offsetParent}function Bt(t){var e=navigator.userAgent.toLowerCase().indexOf(\"firefox\")!==-1,n=navigator.userAgent.indexOf(\"Trident\")!==-1;if(n&&B(t)){var r=N(t);if(r.position===\"fixed\")return null}var o=ge(t);for(Pe(o)&&(o=o.host);B(o)&&[\"html\",\"body\"].indexOf(C(o))<0;){var i=N(o);if(i.transform!==\"none\"||i.perspective!==\"none\"||i.contain===\"paint\"||[\"transform\",\"perspective\"].indexOf(i.willChange)!==-1||e&&i.willChange===\"filter\"||e&&i.filter&&i.filter!==\"none\")return o;o=o.parentNode}return null}function se(t){for(var e=H(t),n=at(t);n&&Wt(n)&&N(n).position===\"static\";)n=at(n);return n&&(C(n)===\"html\"||C(n)===\"body\"&&N(n).position===\"static\")?e:n||Bt(t)||e}function Le(t){return[\"top\",\"bottom\"].indexOf(t)>=0?\"x\":\"y\"}function fe(t,e,n){return X(t,ve(e,n))}function St(t,e,n){var r=fe(t,e,n);return r>n?n:r}function st(){return{top:0,right:0,bottom:0,left:0}}function ft(t){return Object.assign({},st(),t)}function ct(t,e){return e.reduce(function(n,r){return n[r]=t,n},{})}var Tt=function(t,e){return t=typeof t==\"function\"?t(Object.assign({},e.rects,{placement:e.placement})):t,ft(typeof t!=\"number\"?t:ct(t,G))};function Ht(t){var e,n=t.state,r=t.name,o=t.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=q(n.placement),f=Le(s),c=[P,W].indexOf(s)>=0,u=c?\"height\":\"width\";if(!(!i||!a)){var m=Tt(o.padding,n),v=ke(i),l=f===\"y\"?E:P,h=f===\"y\"?R:W,p=n.rects.reference[u]+n.rects.reference[f]-a[f]-n.rects.popper[u],g=a[f]-n.rects.reference[f],x=se(i),y=x?f===\"y\"?x.clientHeight||0:x.clientWidth||0:0,$=p/2-g/2,d=m[l],b=y-v[u]-m[h],w=y/2-v[u]/2+$,O=fe(d,w,b),j=f;n.modifiersData[r]=(e={},e[j]=O,e.centerOffset=O-w,e)}}function Ct(t){var e=t.state,n=t.options,r=n.element,o=r===void 0?\"[data-popper-arrow]\":r;o!=null&&(typeof o==\"string\"&&(o=e.elements.popper.querySelector(o),!o)||!it(e.elements.popper,o)||(e.elements.arrow=o))}var pt={name:\"arrow\",enabled:!0,phase:\"main\",fn:Ht,effect:Ct,requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function te(t){return t.split(\"-\")[1]}var qt={top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function Vt(t){var e=t.x,n=t.y,r=window,o=r.devicePixelRatio||1;return{x:Z(e*o)/o||0,y:Z(n*o)/o||0}}function ut(t){var e,n=t.popper,r=t.popperRect,o=t.placement,i=t.variation,a=t.offsets,s=t.position,f=t.gpuAcceleration,c=t.adaptive,u=t.roundOffsets,m=t.isFixed,v=a.x,l=v===void 0?0:v,h=a.y,p=h===void 0?0:h,g=typeof u==\"function\"?u({x:l,y:p}):{x:l,y:p};l=g.x,p=g.y;var x=a.hasOwnProperty(\"x\"),y=a.hasOwnProperty(\"y\"),$=P,d=E,b=window;if(c){var w=se(n),O=\"clientHeight\",j=\"clientWidth\";if(w===H(n)&&(w=I(n),N(w).position!==\"static\"&&s===\"absolute\"&&(O=\"scrollHeight\",j=\"scrollWidth\")),w=w,o===E||(o===P||o===W)&&i===J){d=R;var A=m&&w===b&&b.visualViewport?b.visualViewport.height:w[O];p-=A-r.height,p*=f?1:-1}if(o===P||(o===E||o===R)&&i===J){$=W;var k=m&&w===b&&b.visualViewport?b.visualViewport.width:w[j];l-=k-r.width,l*=f?1:-1}}var D=Object.assign({position:s},c&&qt),S=u===!0?Vt({x:l,y:p}):{x:l,y:p};if(l=S.x,p=S.y,f){var L;return Object.assign({},D,(L={},L[d]=y?\"0\":\"\",L[$]=x?\"0\":\"\",L.transform=(b.devicePixelRatio||1)<=1?\"translate(\"+l+\"px, \"+p+\"px)\":\"translate3d(\"+l+\"px, \"+p+\"px, 0)\",L))}return Object.assign({},D,(e={},e[d]=y?p+\"px\":\"\",e[$]=x?l+\"px\":\"\",e.transform=\"\",e))}function Nt(t){var e=t.state,n=t.options,r=n.gpuAcceleration,o=r===void 0?!0:r,i=n.adaptive,a=i===void 0?!0:i,s=n.roundOffsets,f=s===void 0?!0:s,c={placement:q(e.placement),variation:te(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o,isFixed:e.options.strategy===\"fixed\"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,ut(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:a,roundOffsets:f})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,ut(Object.assign({},c,{offsets:e.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:f})))),e.attributes.popper=Object.assign({},e.attributes.popper,{\"data-popper-placement\":e.placement})}var Me={name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:Nt,data:{}},ye={passive:!0};function It(t){var e=t.state,n=t.instance,r=t.options,o=r.scroll,i=o===void 0?!0:o,a=r.resize,s=a===void 0?!0:a,f=H(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return i&&c.forEach(function(u){u.addEventListener(\"scroll\",n.update,ye)}),s&&f.addEventListener(\"resize\",n.update,ye),function(){i&&c.forEach(function(u){u.removeEventListener(\"scroll\",n.update,ye)}),s&&f.removeEventListener(\"resize\",n.update,ye)}}var Re={name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:It,data:{}},_t={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function be(t){return t.replace(/left|right|bottom|top/g,function(e){return _t[e]})}var zt={start:\"end\",end:\"start\"};function lt(t){return t.replace(/start|end/g,function(e){return zt[e]})}function We(t){var e=H(t),n=e.pageXOffset,r=e.pageYOffset;return{scrollLeft:n,scrollTop:r}}function Be(t){return ee(I(t)).left+We(t).scrollLeft}function Ft(t){var e=H(t),n=I(t),r=e.visualViewport,o=n.clientWidth,i=n.clientHeight,a=0,s=0;return r&&(o=r.width,i=r.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(a=r.offsetLeft,s=r.offsetTop)),{width:o,height:i,x:a+Be(t),y:s}}function Ut(t){var e,n=I(t),r=We(t),o=(e=t.ownerDocument)==null?void 0:e.body,i=X(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),a=X(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),s=-r.scrollLeft+Be(t),f=-r.scrollTop;return N(o||n).direction===\"rtl\"&&(s+=X(n.clientWidth,o?o.clientWidth:0)-i),{width:i,height:a,x:s,y:f}}function Se(t){var e=N(t),n=e.overflow,r=e.overflowX,o=e.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function dt(t){return[\"html\",\"body\",\"#document\"].indexOf(C(t))>=0?t.ownerDocument.body:B(t)&&Se(t)?t:dt(ge(t))}function ce(t,e){var n;e===void 0&&(e=[]);var r=dt(t),o=r===((n=t.ownerDocument)==null?void 0:n.body),i=H(r),a=o?[i].concat(i.visualViewport||[],Se(r)?r:[]):r,s=e.concat(a);return o?s:s.concat(ce(ge(a)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Xt(t){var e=ee(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}function ht(t,e){return e===je?Te(Ft(t)):Q(e)?Xt(e):Te(Ut(I(t)))}function Yt(t){var e=ce(ge(t)),n=[\"absolute\",\"fixed\"].indexOf(N(t).position)>=0,r=n&&B(t)?se(t):t;return Q(r)?e.filter(function(o){return Q(o)&&it(o,r)&&C(o)!==\"body\"}):[]}function Gt(t,e,n){var r=e===\"clippingParents\"?Yt(t):[].concat(e),o=[].concat(r,[n]),i=o[0],a=o.reduce(function(s,f){var c=ht(t,f);return s.top=X(c.top,s.top),s.right=ve(c.right,s.right),s.bottom=ve(c.bottom,s.bottom),s.left=X(c.left,s.left),s},ht(t,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function mt(t){var e=t.reference,n=t.element,r=t.placement,o=r?q(r):null,i=r?te(r):null,a=e.x+e.width/2-n.width/2,s=e.y+e.height/2-n.height/2,f;switch(o){case E:f={x:a,y:e.y-n.height};break;case R:f={x:a,y:e.y+e.height};break;case W:f={x:e.x+e.width,y:s};break;case P:f={x:e.x-n.width,y:s};break;default:f={x:e.x,y:e.y}}var c=o?Le(o):null;if(c!=null){var u=c===\"y\"?\"height\":\"width\";switch(i){case U:f[c]=f[c]-(e[u]/2-n[u]/2);break;case J:f[c]=f[c]+(e[u]/2-n[u]/2);break}}return f}function ne(t,e){e===void 0&&(e={});var n=e,r=n.placement,o=r===void 0?t.placement:r,i=n.boundary,a=i===void 0?Xe:i,s=n.rootBoundary,f=s===void 0?je:s,c=n.elementContext,u=c===void 0?K:c,m=n.altBoundary,v=m===void 0?!1:m,l=n.padding,h=l===void 0?0:l,p=ft(typeof h!=\"number\"?h:ct(h,G)),g=u===K?Ye:K,x=t.rects.popper,y=t.elements[v?g:u],$=Gt(Q(y)?y:y.contextElement||I(t.elements.popper),a,f),d=ee(t.elements.reference),b=mt({reference:d,element:x,strategy:\"absolute\",placement:o}),w=Te(Object.assign({},x,b)),O=u===K?w:d,j={top:$.top-O.top+p.top,bottom:O.bottom-$.bottom+p.bottom,left:$.left-O.left+p.left,right:O.right-$.right+p.right},A=t.modifiersData.offset;if(u===K&&A){var k=A[o];Object.keys(j).forEach(function(D){var S=[W,R].indexOf(D)>=0?1:-1,L=[E,R].indexOf(D)>=0?\"y\":\"x\";j[D]+=k[L]*S})}return j}function Jt(t,e){e===void 0&&(e={});var n=e,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=f===void 0?Ee:f,u=te(r),m=u?s?De:De.filter(function(h){return te(h)===u}):G,v=m.filter(function(h){return c.indexOf(h)>=0});v.length===0&&(v=m);var l=v.reduce(function(h,p){return h[p]=ne(t,{placement:p,boundary:o,rootBoundary:i,padding:a})[q(p)],h},{});return Object.keys(l).sort(function(h,p){return l[h]-l[p]})}function Kt(t){if(q(t)===me)return[];var e=be(t);return[lt(t),e,lt(e)]}function Qt(t){var e=t.state,n=t.options,r=t.name;if(!e.modifiersData[r]._skip){for(var o=n.mainAxis,i=o===void 0?!0:o,a=n.altAxis,s=a===void 0?!0:a,f=n.fallbackPlacements,c=n.padding,u=n.boundary,m=n.rootBoundary,v=n.altBoundary,l=n.flipVariations,h=l===void 0?!0:l,p=n.allowedAutoPlacements,g=e.options.placement,x=q(g),y=x===g,$=f||(y||!h?[be(g)]:Kt(g)),d=[g].concat($).reduce(function(z,V){return z.concat(q(V)===me?Jt(e,{placement:V,boundary:u,rootBoundary:m,padding:c,flipVariations:h,allowedAutoPlacements:p}):V)},[]),b=e.rects.reference,w=e.rects.popper,O=new Map,j=!0,A=d[0],k=0;k=0,oe=re?\"width\":\"height\",M=ne(e,{placement:D,boundary:u,rootBoundary:m,altBoundary:v,padding:c}),T=re?L?W:P:L?R:E;b[oe]>w[oe]&&(T=be(T));var pe=be(T),_=[];if(i&&_.push(M[S]<=0),s&&_.push(M[T]<=0,M[pe]<=0),_.every(function(z){return z})){A=D,j=!1;break}O.set(D,_)}if(j)for(var ue=h?3:1,xe=function(z){var V=d.find(function(de){var ae=O.get(de);if(ae)return ae.slice(0,z).every(function(Y){return Y})});if(V)return A=V,\"break\"},ie=ue;ie>0;ie--){var le=xe(ie);if(le===\"break\")break}e.placement!==A&&(e.modifiersData[r]._skip=!0,e.placement=A,e.reset=!0)}}var vt={name:\"flip\",enabled:!0,phase:\"main\",fn:Qt,requiresIfExists:[\"offset\"],data:{_skip:!1}};function gt(t,e,n){return n===void 0&&(n={x:0,y:0}),{top:t.top-e.height-n.y,right:t.right-e.width+n.x,bottom:t.bottom-e.height+n.y,left:t.left-e.width-n.x}}function yt(t){return[E,W,R,P].some(function(e){return t[e]>=0})}function Zt(t){var e=t.state,n=t.name,r=e.rects.reference,o=e.rects.popper,i=e.modifiersData.preventOverflow,a=ne(e,{elementContext:\"reference\"}),s=ne(e,{altBoundary:!0}),f=gt(a,r),c=gt(s,o,i),u=yt(f),m=yt(c);e.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:m},e.attributes.popper=Object.assign({},e.attributes.popper,{\"data-popper-reference-hidden\":u,\"data-popper-escaped\":m})}var bt={name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:Zt};function en(t,e,n){var r=q(t),o=[P,E].indexOf(r)>=0?-1:1,i=typeof n==\"function\"?n(Object.assign({},e,{placement:t})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,W].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}function tn(t){var e=t.state,n=t.options,r=t.name,o=n.offset,i=o===void 0?[0,0]:o,a=Ee.reduce(function(u,m){return u[m]=en(m,e.rects,i),u},{}),s=a[e.placement],f=s.x,c=s.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=f,e.modifiersData.popperOffsets.y+=c),e.modifiersData[r]=a}var wt={name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:tn};function nn(t){var e=t.state,n=t.name;e.modifiersData[n]=mt({reference:e.rects.reference,element:e.rects.popper,strategy:\"absolute\",placement:e.placement})}var He={name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:nn,data:{}};function rn(t){return t===\"x\"?\"y\":\"x\"}function on(t){var e=t.state,n=t.options,r=t.name,o=n.mainAxis,i=o===void 0?!0:o,a=n.altAxis,s=a===void 0?!1:a,f=n.boundary,c=n.rootBoundary,u=n.altBoundary,m=n.padding,v=n.tether,l=v===void 0?!0:v,h=n.tetherOffset,p=h===void 0?0:h,g=ne(e,{boundary:f,rootBoundary:c,padding:m,altBoundary:u}),x=q(e.placement),y=te(e.placement),$=!y,d=Le(x),b=rn(d),w=e.modifiersData.popperOffsets,O=e.rects.reference,j=e.rects.popper,A=typeof p==\"function\"?p(Object.assign({},e.rects,{placement:e.placement})):p,k=typeof A==\"number\"?{mainAxis:A,altAxis:A}:Object.assign({mainAxis:0,altAxis:0},A),D=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,S={x:0,y:0};if(w){if(i){var L,re=d===\"y\"?E:P,oe=d===\"y\"?R:W,M=d===\"y\"?\"height\":\"width\",T=w[d],pe=T+g[re],_=T-g[oe],ue=l?-j[M]/2:0,xe=y===U?O[M]:j[M],ie=y===U?-j[M]:-O[M],le=e.elements.arrow,z=l&&le?ke(le):{width:0,height:0},V=e.modifiersData[\"arrow#persistent\"]?e.modifiersData[\"arrow#persistent\"].padding:st(),de=V[re],ae=V[oe],Y=fe(0,O[M],z[M]),jt=$?O[M]/2-ue-Y-de-k.mainAxis:xe-Y-de-k.mainAxis,Dt=$?-O[M]/2+ue+Y+ae+k.mainAxis:ie+Y+ae+k.mainAxis,Oe=e.elements.arrow&&se(e.elements.arrow),Et=Oe?d===\"y\"?Oe.clientTop||0:Oe.clientLeft||0:0,Ce=(L=D==null?void 0:D[d])!=null?L:0,Pt=T+jt-Ce-Et,At=T+Dt-Ce,qe=fe(l?ve(pe,Pt):pe,T,l?X(_,At):_);w[d]=qe,S[d]=qe-T}if(s){var Ve,kt=d===\"x\"?E:P,Lt=d===\"x\"?R:W,F=w[b],he=b===\"y\"?\"height\":\"width\",Ne=F+g[kt],Ie=F-g[Lt],$e=[E,P].indexOf(x)!==-1,_e=(Ve=D==null?void 0:D[b])!=null?Ve:0,ze=$e?Ne:F-O[he]-j[he]-_e+k.altAxis,Fe=$e?F+O[he]+j[he]-_e-k.altAxis:Ie,Ue=l&&$e?St(ze,F,Fe):fe(l?ze:Ne,F,l?Fe:Ie);w[b]=Ue,S[b]=Ue-F}e.modifiersData[r]=S}}var xt={name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:on,requiresIfExists:[\"offset\"]};function an(t){return{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}}function sn(t){return t===H(t)||!B(t)?We(t):an(t)}function fn(t){var e=t.getBoundingClientRect(),n=Z(e.width)/t.offsetWidth||1,r=Z(e.height)/t.offsetHeight||1;return n!==1||r!==1}function cn(t,e,n){n===void 0&&(n=!1);var r=B(e),o=B(e)&&fn(e),i=I(e),a=ee(t,o),s={scrollLeft:0,scrollTop:0},f={x:0,y:0};return(r||!r&&!n)&&((C(e)!==\"body\"||Se(i))&&(s=sn(e)),B(e)?(f=ee(e,!0),f.x+=e.clientLeft,f.y+=e.clientTop):i&&(f.x=Be(i))),{x:a.left+s.scrollLeft-f.x,y:a.top+s.scrollTop-f.y,width:a.width,height:a.height}}function pn(t){var e=new Map,n=new Set,r=[];t.forEach(function(i){e.set(i.name,i)});function o(i){n.add(i.name);var a=[].concat(i.requires||[],i.requiresIfExists||[]);a.forEach(function(s){if(!n.has(s)){var f=e.get(s);f&&o(f)}}),r.push(i)}return t.forEach(function(i){n.has(i.name)||o(i)}),r}function un(t){var e=pn(t);return ot.reduce(function(n,r){return n.concat(e.filter(function(o){return o.phase===r}))},[])}function ln(t){var e;return function(){return e||(e=new Promise(function(n){Promise.resolve().then(function(){e=void 0,n(t())})})),e}}function dn(t){var e=t.reduce(function(n,r){var o=n[r.name];return n[r.name]=o?Object.assign({},o,r,{options:Object.assign({},o.options,r.options),data:Object.assign({},o.data,r.data)}):r,n},{});return Object.keys(e).map(function(n){return e[n]})}var Ot={placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function $t(){for(var t=arguments.length,e=new Array(t),n=0;n {\n const stateUpdater = {\n name: \"updateState\",\n enabled: true,\n phase: \"write\",\n fn: ({ state }) => {\n const derivedState = deriveState(state);\n Object.assign(states.value, derivedState);\n },\n requires: [\"computeStyles\"]\n };\n const options = computed(() => {\n const { onFirstUpdate, placement, strategy, modifiers } = unref(opts);\n return {\n onFirstUpdate,\n placement: placement || \"bottom\",\n strategy: strategy || \"absolute\",\n modifiers: [\n ...modifiers || [],\n stateUpdater,\n { name: \"applyStyles\", enabled: false }\n ]\n };\n });\n const instanceRef = shallowRef();\n const states = ref({\n styles: {\n popper: {\n position: unref(options).strategy,\n left: \"0\",\n top: \"0\"\n },\n arrow: {\n position: \"absolute\"\n }\n },\n attributes: {}\n });\n const destroy = () => {\n if (!instanceRef.value)\n return;\n instanceRef.value.destroy();\n instanceRef.value = void 0;\n };\n watch(options, (newOptions) => {\n const instance = unref(instanceRef);\n if (instance) {\n instance.setOptions(newOptions);\n }\n }, {\n deep: true\n });\n watch([referenceElementRef, popperElementRef], ([referenceElement, popperElement]) => {\n destroy();\n if (!referenceElement || !popperElement)\n return;\n instanceRef.value = createPopper(referenceElement, popperElement, unref(options));\n });\n onBeforeUnmount(() => {\n destroy();\n });\n return {\n state: computed(() => {\n var _a;\n return { ...((_a = unref(instanceRef)) == null ? void 0 : _a.state) || {} };\n }),\n styles: computed(() => unref(states).styles),\n attributes: computed(() => unref(states).attributes),\n update: () => {\n var _a;\n return (_a = unref(instanceRef)) == null ? void 0 : _a.update();\n },\n forceUpdate: () => {\n var _a;\n return (_a = unref(instanceRef)) == null ? void 0 : _a.forceUpdate();\n },\n instanceRef: computed(() => unref(instanceRef))\n };\n};\nfunction deriveState(state) {\n const elements = Object.keys(state.elements);\n const styles = fromPairs(elements.map((element) => [element, state.styles[element] || {}]));\n const attributes = fromPairs(elements.map((element) => [element, state.attributes[element]]));\n return {\n styles,\n attributes\n };\n}\n\nexport { usePopper };\n//# sourceMappingURL=index.mjs.map\n","import '../../utils/index.mjs';\nimport { NOOP } from '@vue/shared';\n\nconst useSameTarget = (handleClick) => {\n if (!handleClick) {\n return { onClick: NOOP, onMousedown: NOOP, onMouseup: NOOP };\n }\n let mousedownTarget = false;\n let mouseupTarget = false;\n const onClick = (e) => {\n if (mousedownTarget && mouseupTarget) {\n handleClick(e);\n }\n mousedownTarget = mouseupTarget = false;\n };\n const onMousedown = (e) => {\n mousedownTarget = e.target === e.currentTarget;\n };\n const onMouseup = (e) => {\n mouseupTarget = e.target === e.currentTarget;\n };\n return { onClick, onMousedown, onMouseup };\n};\n\nexport { useSameTarget };\n//# sourceMappingURL=index.mjs.map\n","import { tryOnScopeDispose } from '@vueuse/core';\n\nfunction useTimeout() {\n let timeoutHandle;\n const registerTimeout = (fn, delay) => {\n cancelTimeout();\n timeoutHandle = window.setTimeout(fn, delay);\n };\n const cancelTimeout = () => window.clearTimeout(timeoutHandle);\n tryOnScopeDispose(() => cancelTimeout());\n return {\n registerTimeout,\n cancelTimeout\n };\n}\n\nexport { useTimeout };\n//# sourceMappingURL=index.mjs.map\n","import { getCurrentInstance, inject, computed, unref } from 'vue';\nimport '../../utils/index.mjs';\nimport { useGetDerivedNamespace } from '../use-namespace/index.mjs';\nimport { isClient } from '@vueuse/core';\nimport { debugWarn } from '../../utils/error.mjs';\n\nconst defaultIdInjection = {\n prefix: Math.floor(Math.random() * 1e4),\n current: 0\n};\nconst ID_INJECTION_KEY = Symbol(\"elIdInjection\");\nconst useIdInjection = () => {\n return getCurrentInstance() ? inject(ID_INJECTION_KEY, defaultIdInjection) : defaultIdInjection;\n};\nconst useId = (deterministicId) => {\n const idInjection = useIdInjection();\n if (!isClient && idInjection === defaultIdInjection) {\n debugWarn(\"IdInjection\", `Looks like you are using server rendering, you must provide a id provider to ensure the hydration process to be succeed\nusage: app.provide(ID_INJECTION_KEY, {\n prefix: number,\n current: number,\n})`);\n }\n const namespace = useGetDerivedNamespace();\n const idRef = computed(() => unref(deterministicId) || `${namespace.value}-id-${idInjection.prefix}-${idInjection.current++}`);\n return idRef;\n};\n\nexport { ID_INJECTION_KEY, useId, useIdInjection };\n//# sourceMappingURL=index.mjs.map\n","import { onMounted, onBeforeUnmount } from 'vue';\nimport '../../utils/index.mjs';\nimport '../../constants/index.mjs';\nimport { EVENT_CODE } from '../../constants/aria.mjs';\nimport { isClient } from '@vueuse/core';\n\nlet registeredEscapeHandlers = [];\nconst cachedHandler = (e) => {\n const event = e;\n if (event.key === EVENT_CODE.esc) {\n registeredEscapeHandlers.forEach((registeredHandler) => registeredHandler(event));\n }\n};\nconst useEscapeKeydown = (handler) => {\n onMounted(() => {\n if (registeredEscapeHandlers.length === 0) {\n document.addEventListener(\"keydown\", cachedHandler);\n }\n if (isClient)\n registeredEscapeHandlers.push(handler);\n });\n onBeforeUnmount(() => {\n registeredEscapeHandlers = registeredEscapeHandlers.filter((registeredHandler) => registeredHandler !== handler);\n if (registeredEscapeHandlers.length === 0) {\n if (isClient)\n document.removeEventListener(\"keydown\", cachedHandler);\n }\n });\n};\n\nexport { useEscapeKeydown };\n//# sourceMappingURL=index.mjs.map\n","import { computed, onBeforeMount } from 'vue';\nimport '../../utils/index.mjs';\nimport { useGetDerivedNamespace } from '../use-namespace/index.mjs';\nimport { useIdInjection } from '../use-id/index.mjs';\nimport { isClient } from '@vueuse/core';\n\nlet cachedContainer;\nconst usePopperContainerId = () => {\n const namespace = useGetDerivedNamespace();\n const idInjection = useIdInjection();\n const id = computed(() => {\n return `${namespace.value}-popper-container-${idInjection.prefix}`;\n });\n const selector = computed(() => `#${id.value}`);\n return {\n id,\n selector\n };\n};\nconst createContainer = (id) => {\n const container = document.createElement(\"div\");\n container.id = id;\n document.body.appendChild(container);\n return container;\n};\nconst usePopperContainer = () => {\n const { id, selector } = usePopperContainerId();\n onBeforeMount(() => {\n if (!isClient)\n return;\n if (process.env.NODE_ENV === \"test\" || !cachedContainer || !document.body.querySelector(selector.value)) {\n cachedContainer = createContainer(id.value);\n }\n });\n return {\n id,\n selector\n };\n};\n\nexport { usePopperContainer, usePopperContainerId };\n//# sourceMappingURL=index.mjs.map\n","import { unref } from 'vue';\nimport '../../utils/index.mjs';\nimport { useTimeout } from '../use-timeout/index.mjs';\nimport { buildProps } from '../../utils/vue/props/runtime.mjs';\nimport { isNumber } from '../../utils/types.mjs';\n\nconst useDelayedToggleProps = buildProps({\n showAfter: {\n type: Number,\n default: 0\n },\n hideAfter: {\n type: Number,\n default: 200\n },\n autoClose: {\n type: Number,\n default: 0\n }\n});\nconst useDelayedToggle = ({\n showAfter,\n hideAfter,\n autoClose,\n open,\n close\n}) => {\n const { registerTimeout } = useTimeout();\n const {\n registerTimeout: registerTimeoutForAutoClose,\n cancelTimeout: cancelTimeoutForAutoClose\n } = useTimeout();\n const onOpen = (event) => {\n registerTimeout(() => {\n open(event);\n const _autoClose = unref(autoClose);\n if (isNumber(_autoClose) && _autoClose > 0) {\n registerTimeoutForAutoClose(() => {\n close(event);\n }, _autoClose);\n }\n }, unref(showAfter));\n };\n const onClose = (event) => {\n cancelTimeoutForAutoClose();\n registerTimeout(() => {\n close(event);\n }, unref(hideAfter));\n };\n return {\n onOpen,\n onClose\n };\n};\n\nexport { useDelayedToggle, useDelayedToggleProps };\n//# sourceMappingURL=index.mjs.map\n","import { provide } from 'vue';\n\nconst FORWARD_REF_INJECTION_KEY = Symbol(\"elForwardRef\");\nconst useForwardRef = (forwardRef) => {\n const setForwardRef = (el) => {\n forwardRef.value = el;\n };\n provide(FORWARD_REF_INJECTION_KEY, {\n setForwardRef\n });\n};\nconst useForwardRefDirective = (setForwardRef) => {\n return {\n mounted(el) {\n setForwardRef(el);\n },\n updated(el) {\n setForwardRef(el);\n },\n unmounted() {\n setForwardRef(null);\n }\n };\n};\n\nexport { FORWARD_REF_INJECTION_KEY, useForwardRef, useForwardRefDirective };\n//# sourceMappingURL=index.mjs.map\n","import { ref, getCurrentInstance, inject, computed, unref } from 'vue';\nimport '../../utils/index.mjs';\nimport { isNumber } from '../../utils/types.mjs';\nimport { isClient } from '@vueuse/core';\nimport { debugWarn } from '../../utils/error.mjs';\n\nconst initial = {\n current: 0\n};\nconst zIndex = ref(0);\nconst defaultInitialZIndex = 2e3;\nconst ZINDEX_INJECTION_KEY = Symbol(\"elZIndexContextKey\");\nconst zIndexContextKey = Symbol(\"zIndexContextKey\");\nconst useZIndex = (zIndexOverrides) => {\n const increasingInjection = getCurrentInstance() ? inject(ZINDEX_INJECTION_KEY, initial) : initial;\n const zIndexInjection = zIndexOverrides || (getCurrentInstance() ? inject(zIndexContextKey, void 0) : void 0);\n const initialZIndex = computed(() => {\n const zIndexFromInjection = unref(zIndexInjection);\n return isNumber(zIndexFromInjection) ? zIndexFromInjection : defaultInitialZIndex;\n });\n const currentZIndex = computed(() => initialZIndex.value + zIndex.value);\n const nextZIndex = () => {\n increasingInjection.current++;\n zIndex.value = increasingInjection.current;\n return currentZIndex.value;\n };\n if (!isClient && !inject(ZINDEX_INJECTION_KEY)) {\n debugWarn(\"ZIndexInjection\", `Looks like you are using server rendering, you must provide a z-index provider to ensure the hydration process to be succeed\nusage: app.provide(ZINDEX_INJECTION_KEY, { current: 0 })`);\n }\n return {\n initialZIndex,\n currentZIndex,\n nextZIndex\n };\n};\n\nexport { ZINDEX_INJECTION_KEY, defaultInitialZIndex, useZIndex, zIndexContextKey };\n//# sourceMappingURL=index.mjs.map\n","function useCursor(input) {\n let selectionInfo;\n function recordCursor() {\n if (input.value == void 0)\n return;\n const { selectionStart, selectionEnd, value } = input.value;\n if (selectionStart == null || selectionEnd == null)\n return;\n const beforeTxt = value.slice(0, Math.max(0, selectionStart));\n const afterTxt = value.slice(Math.max(0, selectionEnd));\n selectionInfo = {\n selectionStart,\n selectionEnd,\n value,\n beforeTxt,\n afterTxt\n };\n }\n function setCursor() {\n if (input.value == void 0 || selectionInfo == void 0)\n return;\n const { value } = input.value;\n const { beforeTxt, afterTxt, selectionStart } = selectionInfo;\n if (beforeTxt == void 0 || afterTxt == void 0 || selectionStart == void 0)\n return;\n let startPos = value.length;\n if (value.endsWith(afterTxt)) {\n startPos = value.length - afterTxt.length;\n } else if (value.startsWith(beforeTxt)) {\n startPos = beforeTxt.length;\n } else {\n const beforeLastChar = beforeTxt[selectionStart - 1];\n const newIndex = value.indexOf(beforeLastChar, selectionStart - 1);\n if (newIndex !== -1) {\n startPos = newIndex + 1;\n }\n }\n input.value.setSelectionRange(startPos, startPos);\n }\n return [recordCursor, setCursor];\n}\n\nexport { useCursor };\n//# sourceMappingURL=index.mjs.map\n","import { isVNode, shallowRef } from 'vue';\nimport '../../utils/index.mjs';\nimport { flattedChildren } from '../../utils/vue/vnode.mjs';\n\nconst getOrderedChildren = (vm, childComponentName, children) => {\n const nodes = flattedChildren(vm.subTree).filter((n) => {\n var _a;\n return isVNode(n) && ((_a = n.type) == null ? void 0 : _a.name) === childComponentName && !!n.component;\n });\n const uids = nodes.map((n) => n.component.uid);\n return uids.map((uid) => children[uid]).filter((p) => !!p);\n};\nconst useOrderedChildren = (vm, childComponentName) => {\n const children = {};\n const orderedChildren = shallowRef([]);\n const addChild = (child) => {\n children[child.uid] = child;\n orderedChildren.value = getOrderedChildren(vm, childComponentName, children);\n };\n const removeChild = (uid) => {\n delete children[uid];\n orderedChildren.value = orderedChildren.value.filter((children2) => children2.uid !== uid);\n };\n return {\n children: orderedChildren,\n addChild,\n removeChild\n };\n};\n\nexport { useOrderedChildren };\n//# sourceMappingURL=index.mjs.map\n","import { inject, computed, unref } from 'vue';\nimport '../../utils/index.mjs';\nimport '../../constants/index.mjs';\nimport { buildProp } from '../../utils/vue/props/runtime.mjs';\nimport { componentSizes } from '../../constants/size.mjs';\n\nconst useSizeProp = buildProp({\n type: String,\n values: componentSizes,\n required: false\n});\nconst useSizeProps = {\n size: useSizeProp\n};\nconst SIZE_INJECTION_KEY = Symbol(\"size\");\nconst useGlobalSize = () => {\n const injectedSize = inject(SIZE_INJECTION_KEY, {});\n return computed(() => {\n return unref(injectedSize.size) || \"\";\n });\n};\n\nexport { SIZE_INJECTION_KEY, useGlobalSize, useSizeProp, useSizeProps };\n//# sourceMappingURL=index.mjs.map\n","import { getCurrentInstance, shallowRef, ref, watch, onMounted } from 'vue';\nimport { useEventListener } from '@vueuse/core';\nimport '../../utils/index.mjs';\nimport { isFunction } from '@vue/shared';\nimport { isElement } from '../../utils/types.mjs';\n\nfunction useFocusController(target, {\n beforeFocus,\n afterFocus,\n beforeBlur,\n afterBlur\n} = {}) {\n const instance = getCurrentInstance();\n const { emit } = instance;\n const wrapperRef = shallowRef();\n const isFocused = ref(false);\n const handleFocus = (event) => {\n const cancelFocus = isFunction(beforeFocus) ? beforeFocus(event) : false;\n if (cancelFocus || isFocused.value)\n return;\n isFocused.value = true;\n emit(\"focus\", event);\n afterFocus == null ? void 0 : afterFocus();\n };\n const handleBlur = (event) => {\n var _a;\n const cancelBlur = isFunction(beforeBlur) ? beforeBlur(event) : false;\n if (cancelBlur || event.relatedTarget && ((_a = wrapperRef.value) == null ? void 0 : _a.contains(event.relatedTarget)))\n return;\n isFocused.value = false;\n emit(\"blur\", event);\n afterBlur == null ? void 0 : afterBlur();\n };\n const handleClick = () => {\n var _a, _b;\n if (((_a = wrapperRef.value) == null ? void 0 : _a.contains(document.activeElement)) && wrapperRef.value !== document.activeElement)\n return;\n (_b = target.value) == null ? void 0 : _b.focus();\n };\n watch(wrapperRef, (el) => {\n if (el) {\n el.setAttribute(\"tabindex\", \"-1\");\n }\n });\n useEventListener(wrapperRef, \"focus\", handleFocus, true);\n useEventListener(wrapperRef, \"blur\", handleBlur, true);\n useEventListener(wrapperRef, \"click\", handleClick, true);\n if (process.env.NODE_ENV === \"test\") {\n onMounted(() => {\n const targetEl = isElement(target.value) ? target.value : document.querySelector(\"input,textarea\");\n if (targetEl) {\n useEventListener(targetEl, \"focus\", handleFocus, true);\n useEventListener(targetEl, \"blur\", handleBlur, true);\n }\n });\n }\n return {\n isFocused,\n wrapperRef,\n handleFocus,\n handleBlur\n };\n}\n\nexport { useFocusController };\n//# sourceMappingURL=index.mjs.map\n","import { ref, nextTick } from 'vue';\nimport '../../utils/index.mjs';\nimport { isKorean } from '../../utils/i18n.mjs';\n\nfunction useComposition({\n afterComposition,\n emit\n}) {\n const isComposing = ref(false);\n const handleCompositionStart = (event) => {\n emit == null ? void 0 : emit(\"compositionstart\", event);\n isComposing.value = true;\n };\n const handleCompositionUpdate = (event) => {\n var _a;\n emit == null ? void 0 : emit(\"compositionupdate\", event);\n const text = (_a = event.target) == null ? void 0 : _a.value;\n const lastCharacter = text[text.length - 1] || \"\";\n isComposing.value = !isKorean(lastCharacter);\n };\n const handleCompositionEnd = (event) => {\n emit == null ? void 0 : emit(\"compositionend\", event);\n if (isComposing.value) {\n isComposing.value = false;\n nextTick(() => afterComposition(event));\n }\n };\n const handleComposition = (event) => {\n event.type === \"compositionend\" ? handleCompositionEnd(event) : handleCompositionUpdate(event);\n };\n return {\n isComposing,\n handleComposition,\n handleCompositionStart,\n handleCompositionUpdate,\n handleCompositionEnd\n };\n}\n\nexport { useComposition };\n//# sourceMappingURL=index.mjs.map\n","import { getCurrentInstance, inject, ref, computed } from 'vue';\nimport '../../utils/index.mjs';\nimport { buildProps } from '../../utils/vue/props/runtime.mjs';\nimport { isFunction } from '@vue/shared';\nimport { debugWarn } from '../../utils/error.mjs';\n\nconst emptyValuesContextKey = Symbol(\"emptyValuesContextKey\");\nconst SCOPE = \"use-empty-values\";\nconst DEFAULT_EMPTY_VALUES = [\"\", void 0, null];\nconst DEFAULT_VALUE_ON_CLEAR = void 0;\nconst useEmptyValuesProps = buildProps({\n emptyValues: Array,\n valueOnClear: {\n type: [String, Number, Boolean, Function],\n default: void 0,\n validator: (val) => isFunction(val) ? !val() : !val\n }\n});\nconst useEmptyValues = (props, defaultValue) => {\n const config = getCurrentInstance() ? inject(emptyValuesContextKey, ref({})) : ref({});\n const emptyValues = computed(() => props.emptyValues || config.value.emptyValues || DEFAULT_EMPTY_VALUES);\n const valueOnClear = computed(() => {\n if (isFunction(props.valueOnClear)) {\n return props.valueOnClear();\n } else if (props.valueOnClear !== void 0) {\n return props.valueOnClear;\n } else if (isFunction(config.value.valueOnClear)) {\n return config.value.valueOnClear();\n } else if (config.value.valueOnClear !== void 0) {\n return config.value.valueOnClear;\n }\n return defaultValue !== void 0 ? defaultValue : DEFAULT_VALUE_ON_CLEAR;\n });\n const isEmptyValue = (value) => {\n return emptyValues.value.includes(value);\n };\n if (!emptyValues.value.includes(valueOnClear.value)) {\n debugWarn(SCOPE, \"value-on-clear should be a value of empty-values\");\n }\n return {\n emptyValues,\n valueOnClear,\n isEmptyValue\n };\n};\n\nexport { DEFAULT_EMPTY_VALUES, DEFAULT_VALUE_ON_CLEAR, SCOPE, emptyValuesContextKey, useEmptyValues, useEmptyValuesProps };\n//# sourceMappingURL=index.mjs.map\n","import { pick } from 'lodash-unified';\nimport '../../utils/index.mjs';\nimport { buildProps } from '../../utils/vue/props/runtime.mjs';\n\nconst ariaProps = buildProps({\n ariaLabel: String,\n ariaOrientation: {\n type: String,\n values: [\"horizontal\", \"vertical\", \"undefined\"]\n },\n ariaControls: String\n});\nconst useAriaProps = (arias) => {\n return pick(ariaProps, arias);\n};\n\nexport { ariaProps, useAriaProps };\n//# sourceMappingURL=index.mjs.map\n","const configProviderContextKey = Symbol();\n\nexport { configProviderContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import { ref, getCurrentInstance, inject, computed, unref, provide } from 'vue';\nimport '../../../../utils/index.mjs';\nimport '../../../../hooks/index.mjs';\nimport { configProviderContextKey } from '../constants.mjs';\nimport { useNamespace, defaultNamespace, namespaceContextKey } from '../../../../hooks/use-namespace/index.mjs';\nimport { useLocale, localeContextKey } from '../../../../hooks/use-locale/index.mjs';\nimport { useZIndex, defaultInitialZIndex, zIndexContextKey } from '../../../../hooks/use-z-index/index.mjs';\nimport { debugWarn } from '../../../../utils/error.mjs';\nimport { SIZE_INJECTION_KEY } from '../../../../hooks/use-size/index.mjs';\nimport { emptyValuesContextKey } from '../../../../hooks/use-empty-values/index.mjs';\nimport { keysOf } from '../../../../utils/objects.mjs';\n\nconst globalConfig = ref();\nfunction useGlobalConfig(key, defaultValue = void 0) {\n const config = getCurrentInstance() ? inject(configProviderContextKey, globalConfig) : globalConfig;\n if (key) {\n return computed(() => {\n var _a, _b;\n return (_b = (_a = config.value) == null ? void 0 : _a[key]) != null ? _b : defaultValue;\n });\n } else {\n return config;\n }\n}\nfunction useGlobalComponentSettings(block, sizeFallback) {\n const config = useGlobalConfig();\n const ns = useNamespace(block, computed(() => {\n var _a;\n return ((_a = config.value) == null ? void 0 : _a.namespace) || defaultNamespace;\n }));\n const locale = useLocale(computed(() => {\n var _a;\n return (_a = config.value) == null ? void 0 : _a.locale;\n }));\n const zIndex = useZIndex(computed(() => {\n var _a;\n return ((_a = config.value) == null ? void 0 : _a.zIndex) || defaultInitialZIndex;\n }));\n const size = computed(() => {\n var _a;\n return unref(sizeFallback) || ((_a = config.value) == null ? void 0 : _a.size) || \"\";\n });\n provideGlobalConfig(computed(() => unref(config) || {}));\n return {\n ns,\n locale,\n zIndex,\n size\n };\n}\nconst provideGlobalConfig = (config, app, global = false) => {\n var _a;\n const inSetup = !!getCurrentInstance();\n const oldConfig = inSetup ? useGlobalConfig() : void 0;\n const provideFn = (_a = app == null ? void 0 : app.provide) != null ? _a : inSetup ? provide : void 0;\n if (!provideFn) {\n debugWarn(\"provideGlobalConfig\", \"provideGlobalConfig() can only be used inside setup().\");\n return;\n }\n const context = computed(() => {\n const cfg = unref(config);\n if (!(oldConfig == null ? void 0 : oldConfig.value))\n return cfg;\n return mergeConfig(oldConfig.value, cfg);\n });\n provideFn(configProviderContextKey, context);\n provideFn(localeContextKey, computed(() => context.value.locale));\n provideFn(namespaceContextKey, computed(() => context.value.namespace));\n provideFn(zIndexContextKey, computed(() => context.value.zIndex));\n provideFn(SIZE_INJECTION_KEY, {\n size: computed(() => context.value.size || \"\")\n });\n provideFn(emptyValuesContextKey, computed(() => ({\n emptyValues: context.value.emptyValues,\n valueOnClear: context.value.valueOnClear\n })));\n if (global || !globalConfig.value) {\n globalConfig.value = context.value;\n }\n return context;\n};\nconst mergeConfig = (a, b) => {\n const keys = [.../* @__PURE__ */ new Set([...keysOf(a), ...keysOf(b)])];\n const obj = {};\n for (const key of keys) {\n obj[key] = b[key] !== void 0 ? b[key] : a[key];\n }\n return obj;\n};\n\nexport { provideGlobalConfig, useGlobalComponentSettings, useGlobalConfig };\n//# sourceMappingURL=use-global-config.mjs.map\n","import '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useSizeProp } from '../../../hooks/use-size/index.mjs';\nimport { useEmptyValuesProps } from '../../../hooks/use-empty-values/index.mjs';\n\nconst configProviderProps = buildProps({\n a11y: {\n type: Boolean,\n default: true\n },\n locale: {\n type: definePropType(Object)\n },\n size: useSizeProp,\n button: {\n type: definePropType(Object)\n },\n experimentalFeatures: {\n type: definePropType(Object)\n },\n keyboardNavigation: {\n type: Boolean,\n default: true\n },\n message: {\n type: definePropType(Object)\n },\n zIndex: Number,\n namespace: {\n type: String,\n default: \"el\"\n },\n ...useEmptyValuesProps\n});\n\nexport { configProviderProps };\n//# sourceMappingURL=config-provider-props.mjs.map\n","import { defineComponent, watch, renderSlot } from 'vue';\nimport { provideGlobalConfig } from './hooks/use-global-config.mjs';\nimport { configProviderProps } from './config-provider-props.mjs';\n\nconst messageConfig = {};\nconst ConfigProvider = defineComponent({\n name: \"ElConfigProvider\",\n props: configProviderProps,\n setup(props, { slots }) {\n watch(() => props.message, (val) => {\n Object.assign(messageConfig, val != null ? val : {});\n }, { immediate: true, deep: true });\n const config = provideGlobalConfig(props);\n return () => renderSlot(slots, \"default\", { config: config == null ? void 0 : config.value });\n }\n});\n\nexport { ConfigProvider as default, messageConfig };\n//# sourceMappingURL=config-provider.mjs.map\n","var _export_sfc = (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n};\n\nexport { _export_sfc as default };\n//# sourceMappingURL=plugin-vue_export-helper.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\n\nconst iconProps = buildProps({\n size: {\n type: definePropType([Number, String])\n },\n color: {\n type: String\n }\n});\n\nexport { iconProps };\n//# sourceMappingURL=icon.mjs.map\n","import { defineComponent, computed, openBlock, createElementBlock, mergeProps, unref, renderSlot } from 'vue';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { iconProps } from './icon.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { isUndefined } from '../../../utils/types.mjs';\nimport { addUnit } from '../../../utils/dom/style.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElIcon\",\n inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: iconProps,\n setup(__props) {\n const props = __props;\n const ns = useNamespace(\"icon\");\n const style = computed(() => {\n const { size, color } = props;\n if (!size && !color)\n return {};\n return {\n fontSize: isUndefined(size) ? void 0 : addUnit(size),\n \"--color\": color\n };\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"i\", mergeProps({\n class: unref(ns).b(),\n style: unref(style)\n }, _ctx.$attrs), [\n renderSlot(_ctx.$slots, \"default\")\n ], 16);\n };\n }\n});\nvar Icon = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"icon.vue\"]]);\n\nexport { Icon as default };\n//# sourceMappingURL=icon2.mjs.map\n","import '../../utils/index.mjs';\nimport Icon from './src/icon2.mjs';\nexport { iconProps } from './src/icon.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElIcon = withInstall(Icon);\n\nexport { ElIcon, ElIcon as default };\n//# sourceMappingURL=index.mjs.map\n","const formContextKey = Symbol(\"formContextKey\");\nconst formItemContextKey = Symbol(\"formItemContextKey\");\n\nexport { formContextKey, formItemContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import { ref, inject, computed, unref } from 'vue';\nimport '../../../../hooks/index.mjs';\nimport { formContextKey, formItemContextKey } from '../constants.mjs';\nimport { useProp } from '../../../../hooks/use-prop/index.mjs';\nimport { useGlobalSize } from '../../../../hooks/use-size/index.mjs';\n\nconst useFormSize = (fallback, ignore = {}) => {\n const emptyRef = ref(void 0);\n const size = ignore.prop ? emptyRef : useProp(\"size\");\n const globalConfig = ignore.global ? emptyRef : useGlobalSize();\n const form = ignore.form ? { size: void 0 } : inject(formContextKey, void 0);\n const formItem = ignore.formItem ? { size: void 0 } : inject(formItemContextKey, void 0);\n return computed(() => size.value || unref(fallback) || (formItem == null ? void 0 : formItem.size) || (form == null ? void 0 : form.size) || globalConfig.value || \"\");\n};\nconst useFormDisabled = (fallback) => {\n const disabled = useProp(\"disabled\");\n const form = inject(formContextKey, void 0);\n return computed(() => disabled.value || unref(fallback) || (form == null ? void 0 : form.disabled) || false);\n};\nconst useSize = useFormSize;\nconst useDisabled = useFormDisabled;\n\nexport { useDisabled, useFormDisabled, useFormSize, useSize };\n//# sourceMappingURL=use-form-common-props.mjs.map\n","import { inject, ref, computed, onMounted, watch, toRef, onUnmounted } from 'vue';\nimport '../../../../hooks/index.mjs';\nimport { formContextKey, formItemContextKey } from '../constants.mjs';\nimport { useId } from '../../../../hooks/use-id/index.mjs';\n\nconst useFormItem = () => {\n const form = inject(formContextKey, void 0);\n const formItem = inject(formItemContextKey, void 0);\n return {\n form,\n formItem\n };\n};\nconst useFormItemInputId = (props, {\n formItemContext,\n disableIdGeneration,\n disableIdManagement\n}) => {\n if (!disableIdGeneration) {\n disableIdGeneration = ref(false);\n }\n if (!disableIdManagement) {\n disableIdManagement = ref(false);\n }\n const inputId = ref();\n let idUnwatch = void 0;\n const isLabeledByFormItem = computed(() => {\n var _a;\n return !!(!(props.label || props.ariaLabel) && formItemContext && formItemContext.inputIds && ((_a = formItemContext.inputIds) == null ? void 0 : _a.length) <= 1);\n });\n onMounted(() => {\n idUnwatch = watch([toRef(props, \"id\"), disableIdGeneration], ([id, disableIdGeneration2]) => {\n const newId = id != null ? id : !disableIdGeneration2 ? useId().value : void 0;\n if (newId !== inputId.value) {\n if (formItemContext == null ? void 0 : formItemContext.removeInputId) {\n inputId.value && formItemContext.removeInputId(inputId.value);\n if (!(disableIdManagement == null ? void 0 : disableIdManagement.value) && !disableIdGeneration2 && newId) {\n formItemContext.addInputId(newId);\n }\n }\n inputId.value = newId;\n }\n }, { immediate: true });\n });\n onUnmounted(() => {\n idUnwatch && idUnwatch();\n if (formItemContext == null ? void 0 : formItemContext.removeInputId) {\n inputId.value && formItemContext.removeInputId(inputId.value);\n }\n });\n return {\n isLabeledByFormItem,\n inputId\n };\n};\n\nexport { useFormItem, useFormItemInputId };\n//# sourceMappingURL=use-form-item.mjs.map\n","import '../../../utils/index.mjs';\nimport { isFirefox } from '../../../utils/browser.mjs';\nimport { isNumber } from '../../../utils/types.mjs';\n\nlet hiddenTextarea = void 0;\nconst HIDDEN_STYLE = `\n height:0 !important;\n visibility:hidden !important;\n ${isFirefox() ? \"\" : \"overflow:hidden !important;\"}\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important;\n`;\nconst CONTEXT_STYLE = [\n \"letter-spacing\",\n \"line-height\",\n \"padding-top\",\n \"padding-bottom\",\n \"font-family\",\n \"font-weight\",\n \"font-size\",\n \"text-rendering\",\n \"text-transform\",\n \"width\",\n \"text-indent\",\n \"padding-left\",\n \"padding-right\",\n \"border-width\",\n \"box-sizing\"\n];\nfunction calculateNodeStyling(targetElement) {\n const style = window.getComputedStyle(targetElement);\n const boxSizing = style.getPropertyValue(\"box-sizing\");\n const paddingSize = Number.parseFloat(style.getPropertyValue(\"padding-bottom\")) + Number.parseFloat(style.getPropertyValue(\"padding-top\"));\n const borderSize = Number.parseFloat(style.getPropertyValue(\"border-bottom-width\")) + Number.parseFloat(style.getPropertyValue(\"border-top-width\"));\n const contextStyle = CONTEXT_STYLE.map((name) => `${name}:${style.getPropertyValue(name)}`).join(\";\");\n return { contextStyle, paddingSize, borderSize, boxSizing };\n}\nfunction calcTextareaHeight(targetElement, minRows = 1, maxRows) {\n var _a;\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement(\"textarea\");\n document.body.appendChild(hiddenTextarea);\n }\n const { paddingSize, borderSize, boxSizing, contextStyle } = calculateNodeStyling(targetElement);\n hiddenTextarea.setAttribute(\"style\", `${contextStyle};${HIDDEN_STYLE}`);\n hiddenTextarea.value = targetElement.value || targetElement.placeholder || \"\";\n let height = hiddenTextarea.scrollHeight;\n const result = {};\n if (boxSizing === \"border-box\") {\n height = height + borderSize;\n } else if (boxSizing === \"content-box\") {\n height = height - paddingSize;\n }\n hiddenTextarea.value = \"\";\n const singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n if (isNumber(minRows)) {\n let minHeight = singleRowHeight * minRows;\n if (boxSizing === \"border-box\") {\n minHeight = minHeight + paddingSize + borderSize;\n }\n height = Math.max(minHeight, height);\n result.minHeight = `${minHeight}px`;\n }\n if (isNumber(maxRows)) {\n let maxHeight = singleRowHeight * maxRows;\n if (boxSizing === \"border-box\") {\n maxHeight = maxHeight + paddingSize + borderSize;\n }\n height = Math.min(maxHeight, height);\n }\n result.height = `${height}px`;\n (_a = hiddenTextarea.parentNode) == null ? void 0 : _a.removeChild(hiddenTextarea);\n hiddenTextarea = void 0;\n return result;\n}\n\nexport { calcTextareaHeight };\n//# sourceMappingURL=utils.mjs.map\n","import '../../../utils/index.mjs';\nimport '../../../constants/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useSizeProp } from '../../../hooks/use-size/index.mjs';\nimport { iconPropType } from '../../../utils/vue/icon.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { useAriaProps } from '../../../hooks/use-aria/index.mjs';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { isString } from '@vue/shared';\n\nconst inputProps = buildProps({\n id: {\n type: String,\n default: void 0\n },\n size: useSizeProp,\n disabled: Boolean,\n modelValue: {\n type: definePropType([\n String,\n Number,\n Object\n ]),\n default: \"\"\n },\n maxlength: {\n type: [String, Number]\n },\n minlength: {\n type: [String, Number]\n },\n type: {\n type: String,\n default: \"text\"\n },\n resize: {\n type: String,\n values: [\"none\", \"both\", \"horizontal\", \"vertical\"]\n },\n autosize: {\n type: definePropType([Boolean, Object]),\n default: false\n },\n autocomplete: {\n type: String,\n default: \"off\"\n },\n formatter: {\n type: Function\n },\n parser: {\n type: Function\n },\n placeholder: {\n type: String\n },\n form: {\n type: String\n },\n readonly: Boolean,\n clearable: Boolean,\n showPassword: Boolean,\n showWordLimit: Boolean,\n suffixIcon: {\n type: iconPropType\n },\n prefixIcon: {\n type: iconPropType\n },\n containerRole: {\n type: String,\n default: void 0\n },\n tabindex: {\n type: [String, Number],\n default: 0\n },\n validateEvent: {\n type: Boolean,\n default: true\n },\n inputStyle: {\n type: definePropType([Object, Array, String]),\n default: () => mutable({})\n },\n autofocus: Boolean,\n rows: {\n type: Number,\n default: 2\n },\n ...useAriaProps([\"ariaLabel\"])\n});\nconst inputEmits = {\n [UPDATE_MODEL_EVENT]: (value) => isString(value),\n input: (value) => isString(value),\n change: (value) => isString(value),\n focus: (evt) => evt instanceof FocusEvent,\n blur: (evt) => evt instanceof FocusEvent,\n clear: () => true,\n mouseleave: (evt) => evt instanceof MouseEvent,\n mouseenter: (evt) => evt instanceof MouseEvent,\n keydown: (evt) => evt instanceof Event,\n compositionstart: (evt) => evt instanceof CompositionEvent,\n compositionupdate: (evt) => evt instanceof CompositionEvent,\n compositionend: (evt) => evt instanceof CompositionEvent\n};\n\nexport { inputEmits, inputProps };\n//# sourceMappingURL=input.mjs.map\n","import { defineComponent, useAttrs, useSlots, computed, shallowRef, ref, nextTick, watch, onMounted, toRef, openBlock, createElementBlock, mergeProps, unref, createCommentVNode, Fragment, normalizeClass, renderSlot, createElementVNode, createBlock, withCtx, resolveDynamicComponent, withModifiers, createVNode, toDisplayString, normalizeStyle } from 'vue';\nimport { useResizeObserver, isClient } from '@vueuse/core';\nimport { isNil } from 'lodash-unified';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { View, Hide, CircleClose } from '@element-plus/icons-vue';\nimport '../../form/index.mjs';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport '../../../constants/index.mjs';\nimport { calcTextareaHeight } from './utils.mjs';\nimport { inputProps, inputEmits } from './input.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useAttrs as useAttrs$1 } from '../../../hooks/use-attrs/index.mjs';\nimport { useFormItem, useFormItemInputId } from '../../form/src/hooks/use-form-item.mjs';\nimport { useFormSize, useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useFocusController } from '../../../hooks/use-focus-controller/index.mjs';\nimport { debugWarn } from '../../../utils/error.mjs';\nimport { ValidateComponentsMap } from '../../../utils/vue/icon.mjs';\nimport { useCursor } from '../../../hooks/use-cursor/index.mjs';\nimport { isObject, NOOP } from '@vue/shared';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { useComposition } from '../../../hooks/use-composition/index.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElInput\",\n inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: inputProps,\n emits: inputEmits,\n setup(__props, { expose, emit }) {\n const props = __props;\n const rawAttrs = useAttrs();\n const slots = useSlots();\n const containerAttrs = computed(() => {\n const comboBoxAttrs = {};\n if (props.containerRole === \"combobox\") {\n comboBoxAttrs[\"aria-haspopup\"] = rawAttrs[\"aria-haspopup\"];\n comboBoxAttrs[\"aria-owns\"] = rawAttrs[\"aria-owns\"];\n comboBoxAttrs[\"aria-expanded\"] = rawAttrs[\"aria-expanded\"];\n }\n return comboBoxAttrs;\n });\n const containerKls = computed(() => [\n props.type === \"textarea\" ? nsTextarea.b() : nsInput.b(),\n nsInput.m(inputSize.value),\n nsInput.is(\"disabled\", inputDisabled.value),\n nsInput.is(\"exceed\", inputExceed.value),\n {\n [nsInput.b(\"group\")]: slots.prepend || slots.append,\n [nsInput.m(\"prefix\")]: slots.prefix || props.prefixIcon,\n [nsInput.m(\"suffix\")]: slots.suffix || props.suffixIcon || props.clearable || props.showPassword,\n [nsInput.bm(\"suffix\", \"password-clear\")]: showClear.value && showPwdVisible.value,\n [nsInput.b(\"hidden\")]: props.type === \"hidden\"\n },\n rawAttrs.class\n ]);\n const wrapperKls = computed(() => [\n nsInput.e(\"wrapper\"),\n nsInput.is(\"focus\", isFocused.value)\n ]);\n const attrs = useAttrs$1({\n excludeKeys: computed(() => {\n return Object.keys(containerAttrs.value);\n })\n });\n const { form: elForm, formItem: elFormItem } = useFormItem();\n const { inputId } = useFormItemInputId(props, {\n formItemContext: elFormItem\n });\n const inputSize = useFormSize();\n const inputDisabled = useFormDisabled();\n const nsInput = useNamespace(\"input\");\n const nsTextarea = useNamespace(\"textarea\");\n const input = shallowRef();\n const textarea = shallowRef();\n const hovering = ref(false);\n const passwordVisible = ref(false);\n const countStyle = ref();\n const textareaCalcStyle = shallowRef(props.inputStyle);\n const _ref = computed(() => input.value || textarea.value);\n const { wrapperRef, isFocused, handleFocus, handleBlur } = useFocusController(_ref, {\n beforeFocus() {\n return inputDisabled.value;\n },\n afterBlur() {\n var _a;\n if (props.validateEvent) {\n (_a = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a.call(elFormItem, \"blur\").catch((err) => debugWarn(err));\n }\n }\n });\n const needStatusIcon = computed(() => {\n var _a;\n return (_a = elForm == null ? void 0 : elForm.statusIcon) != null ? _a : false;\n });\n const validateState = computed(() => (elFormItem == null ? void 0 : elFormItem.validateState) || \"\");\n const validateIcon = computed(() => validateState.value && ValidateComponentsMap[validateState.value]);\n const passwordIcon = computed(() => passwordVisible.value ? View : Hide);\n const containerStyle = computed(() => [\n rawAttrs.style\n ]);\n const textareaStyle = computed(() => [\n props.inputStyle,\n textareaCalcStyle.value,\n { resize: props.resize }\n ]);\n const nativeInputValue = computed(() => isNil(props.modelValue) ? \"\" : String(props.modelValue));\n const showClear = computed(() => props.clearable && !inputDisabled.value && !props.readonly && !!nativeInputValue.value && (isFocused.value || hovering.value));\n const showPwdVisible = computed(() => props.showPassword && !inputDisabled.value && !props.readonly && !!nativeInputValue.value && (!!nativeInputValue.value || isFocused.value));\n const isWordLimitVisible = computed(() => props.showWordLimit && !!props.maxlength && (props.type === \"text\" || props.type === \"textarea\") && !inputDisabled.value && !props.readonly && !props.showPassword);\n const textLength = computed(() => nativeInputValue.value.length);\n const inputExceed = computed(() => !!isWordLimitVisible.value && textLength.value > Number(props.maxlength));\n const suffixVisible = computed(() => !!slots.suffix || !!props.suffixIcon || showClear.value || props.showPassword || isWordLimitVisible.value || !!validateState.value && needStatusIcon.value);\n const [recordCursor, setCursor] = useCursor(input);\n useResizeObserver(textarea, (entries) => {\n onceInitSizeTextarea();\n if (!isWordLimitVisible.value || props.resize !== \"both\")\n return;\n const entry = entries[0];\n const { width } = entry.contentRect;\n countStyle.value = {\n right: `calc(100% - ${width + 15 + 6}px)`\n };\n });\n const resizeTextarea = () => {\n const { type, autosize } = props;\n if (!isClient || type !== \"textarea\" || !textarea.value)\n return;\n if (autosize) {\n const minRows = isObject(autosize) ? autosize.minRows : void 0;\n const maxRows = isObject(autosize) ? autosize.maxRows : void 0;\n const textareaStyle2 = calcTextareaHeight(textarea.value, minRows, maxRows);\n textareaCalcStyle.value = {\n overflowY: \"hidden\",\n ...textareaStyle2\n };\n nextTick(() => {\n textarea.value.offsetHeight;\n textareaCalcStyle.value = textareaStyle2;\n });\n } else {\n textareaCalcStyle.value = {\n minHeight: calcTextareaHeight(textarea.value).minHeight\n };\n }\n };\n const createOnceInitResize = (resizeTextarea2) => {\n let isInit = false;\n return () => {\n var _a;\n if (isInit || !props.autosize)\n return;\n const isElHidden = ((_a = textarea.value) == null ? void 0 : _a.offsetParent) === null;\n if (!isElHidden) {\n resizeTextarea2();\n isInit = true;\n }\n };\n };\n const onceInitSizeTextarea = createOnceInitResize(resizeTextarea);\n const setNativeInputValue = () => {\n const input2 = _ref.value;\n const formatterValue = props.formatter ? props.formatter(nativeInputValue.value) : nativeInputValue.value;\n if (!input2 || input2.value === formatterValue)\n return;\n input2.value = formatterValue;\n };\n const handleInput = async (event) => {\n recordCursor();\n let { value } = event.target;\n if (props.formatter) {\n value = props.parser ? props.parser(value) : value;\n }\n if (isComposing.value)\n return;\n if (value === nativeInputValue.value) {\n setNativeInputValue();\n return;\n }\n emit(UPDATE_MODEL_EVENT, value);\n emit(\"input\", value);\n await nextTick();\n setNativeInputValue();\n setCursor();\n };\n const handleChange = (event) => {\n emit(\"change\", event.target.value);\n };\n const {\n isComposing,\n handleCompositionStart,\n handleCompositionUpdate,\n handleCompositionEnd\n } = useComposition({ emit, afterComposition: handleInput });\n const handlePasswordVisible = () => {\n passwordVisible.value = !passwordVisible.value;\n focus();\n };\n const focus = async () => {\n var _a;\n await nextTick();\n (_a = _ref.value) == null ? void 0 : _a.focus();\n };\n const blur = () => {\n var _a;\n return (_a = _ref.value) == null ? void 0 : _a.blur();\n };\n const handleMouseLeave = (evt) => {\n hovering.value = false;\n emit(\"mouseleave\", evt);\n };\n const handleMouseEnter = (evt) => {\n hovering.value = true;\n emit(\"mouseenter\", evt);\n };\n const handleKeydown = (evt) => {\n emit(\"keydown\", evt);\n };\n const select = () => {\n var _a;\n (_a = _ref.value) == null ? void 0 : _a.select();\n };\n const clear = () => {\n emit(UPDATE_MODEL_EVENT, \"\");\n emit(\"change\", \"\");\n emit(\"clear\");\n emit(\"input\", \"\");\n };\n watch(() => props.modelValue, () => {\n var _a;\n nextTick(() => resizeTextarea());\n if (props.validateEvent) {\n (_a = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a.call(elFormItem, \"change\").catch((err) => debugWarn(err));\n }\n });\n watch(nativeInputValue, () => setNativeInputValue());\n watch(() => props.type, async () => {\n await nextTick();\n setNativeInputValue();\n resizeTextarea();\n });\n onMounted(() => {\n if (!props.formatter && props.parser) {\n debugWarn(\"ElInput\", \"If you set the parser, you also need to set the formatter.\");\n }\n setNativeInputValue();\n nextTick(resizeTextarea);\n });\n expose({\n input,\n textarea,\n ref: _ref,\n textareaStyle,\n autosize: toRef(props, \"autosize\"),\n isComposing,\n focus,\n blur,\n select,\n clear,\n resizeTextarea\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", mergeProps(unref(containerAttrs), {\n class: [\n unref(containerKls),\n {\n [unref(nsInput).bm(\"group\", \"append\")]: _ctx.$slots.append,\n [unref(nsInput).bm(\"group\", \"prepend\")]: _ctx.$slots.prepend\n }\n ],\n style: unref(containerStyle),\n role: _ctx.containerRole,\n onMouseenter: handleMouseEnter,\n onMouseleave: handleMouseLeave\n }), [\n createCommentVNode(\" input \"),\n _ctx.type !== \"textarea\" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n createCommentVNode(\" prepend slot \"),\n _ctx.$slots.prepend ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass(unref(nsInput).be(\"group\", \"prepend\"))\n }, [\n renderSlot(_ctx.$slots, \"prepend\")\n ], 2)) : createCommentVNode(\"v-if\", true),\n createElementVNode(\"div\", {\n ref_key: \"wrapperRef\",\n ref: wrapperRef,\n class: normalizeClass(unref(wrapperKls))\n }, [\n createCommentVNode(\" prefix slot \"),\n _ctx.$slots.prefix || _ctx.prefixIcon ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n class: normalizeClass(unref(nsInput).e(\"prefix\"))\n }, [\n createElementVNode(\"span\", {\n class: normalizeClass(unref(nsInput).e(\"prefix-inner\"))\n }, [\n renderSlot(_ctx.$slots, \"prefix\"),\n _ctx.prefixIcon ? (openBlock(), createBlock(unref(ElIcon), {\n key: 0,\n class: normalizeClass(unref(nsInput).e(\"icon\"))\n }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent(_ctx.prefixIcon)))\n ]),\n _: 1\n }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true)\n ], 2)\n ], 2)) : createCommentVNode(\"v-if\", true),\n createElementVNode(\"input\", mergeProps({\n id: unref(inputId),\n ref_key: \"input\",\n ref: input,\n class: unref(nsInput).e(\"inner\")\n }, unref(attrs), {\n minlength: _ctx.minlength,\n maxlength: _ctx.maxlength,\n type: _ctx.showPassword ? passwordVisible.value ? \"text\" : \"password\" : _ctx.type,\n disabled: unref(inputDisabled),\n readonly: _ctx.readonly,\n autocomplete: _ctx.autocomplete,\n tabindex: _ctx.tabindex,\n \"aria-label\": _ctx.ariaLabel,\n placeholder: _ctx.placeholder,\n style: _ctx.inputStyle,\n form: _ctx.form,\n autofocus: _ctx.autofocus,\n onCompositionstart: unref(handleCompositionStart),\n onCompositionupdate: unref(handleCompositionUpdate),\n onCompositionend: unref(handleCompositionEnd),\n onInput: handleInput,\n onChange: handleChange,\n onKeydown: handleKeydown\n }), null, 16, [\"id\", \"minlength\", \"maxlength\", \"type\", \"disabled\", \"readonly\", \"autocomplete\", \"tabindex\", \"aria-label\", \"placeholder\", \"form\", \"autofocus\", \"onCompositionstart\", \"onCompositionupdate\", \"onCompositionend\"]),\n createCommentVNode(\" suffix slot \"),\n unref(suffixVisible) ? (openBlock(), createElementBlock(\"span\", {\n key: 1,\n class: normalizeClass(unref(nsInput).e(\"suffix\"))\n }, [\n createElementVNode(\"span\", {\n class: normalizeClass(unref(nsInput).e(\"suffix-inner\"))\n }, [\n !unref(showClear) || !unref(showPwdVisible) || !unref(isWordLimitVisible) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n renderSlot(_ctx.$slots, \"suffix\"),\n _ctx.suffixIcon ? (openBlock(), createBlock(unref(ElIcon), {\n key: 0,\n class: normalizeClass(unref(nsInput).e(\"icon\"))\n }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent(_ctx.suffixIcon)))\n ]),\n _: 1\n }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true)\n ], 64)) : createCommentVNode(\"v-if\", true),\n unref(showClear) ? (openBlock(), createBlock(unref(ElIcon), {\n key: 1,\n class: normalizeClass([unref(nsInput).e(\"icon\"), unref(nsInput).e(\"clear\")]),\n onMousedown: withModifiers(unref(NOOP), [\"prevent\"]),\n onClick: clear\n }, {\n default: withCtx(() => [\n createVNode(unref(CircleClose))\n ]),\n _: 1\n }, 8, [\"class\", \"onMousedown\"])) : createCommentVNode(\"v-if\", true),\n unref(showPwdVisible) ? (openBlock(), createBlock(unref(ElIcon), {\n key: 2,\n class: normalizeClass([unref(nsInput).e(\"icon\"), unref(nsInput).e(\"password\")]),\n onClick: handlePasswordVisible\n }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent(unref(passwordIcon))))\n ]),\n _: 1\n }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true),\n unref(isWordLimitVisible) ? (openBlock(), createElementBlock(\"span\", {\n key: 3,\n class: normalizeClass(unref(nsInput).e(\"count\"))\n }, [\n createElementVNode(\"span\", {\n class: normalizeClass(unref(nsInput).e(\"count-inner\"))\n }, toDisplayString(unref(textLength)) + \" / \" + toDisplayString(_ctx.maxlength), 3)\n ], 2)) : createCommentVNode(\"v-if\", true),\n unref(validateState) && unref(validateIcon) && unref(needStatusIcon) ? (openBlock(), createBlock(unref(ElIcon), {\n key: 4,\n class: normalizeClass([\n unref(nsInput).e(\"icon\"),\n unref(nsInput).e(\"validateIcon\"),\n unref(nsInput).is(\"loading\", unref(validateState) === \"validating\")\n ])\n }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent(unref(validateIcon))))\n ]),\n _: 1\n }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true)\n ], 2)\n ], 2)) : createCommentVNode(\"v-if\", true)\n ], 2),\n createCommentVNode(\" append slot \"),\n _ctx.$slots.append ? (openBlock(), createElementBlock(\"div\", {\n key: 1,\n class: normalizeClass(unref(nsInput).be(\"group\", \"append\"))\n }, [\n renderSlot(_ctx.$slots, \"append\")\n ], 2)) : createCommentVNode(\"v-if\", true)\n ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [\n createCommentVNode(\" textarea \"),\n createElementVNode(\"textarea\", mergeProps({\n id: unref(inputId),\n ref_key: \"textarea\",\n ref: textarea,\n class: [unref(nsTextarea).e(\"inner\"), unref(nsInput).is(\"focus\", unref(isFocused))]\n }, unref(attrs), {\n minlength: _ctx.minlength,\n maxlength: _ctx.maxlength,\n tabindex: _ctx.tabindex,\n disabled: unref(inputDisabled),\n readonly: _ctx.readonly,\n autocomplete: _ctx.autocomplete,\n style: unref(textareaStyle),\n \"aria-label\": _ctx.ariaLabel,\n placeholder: _ctx.placeholder,\n form: _ctx.form,\n autofocus: _ctx.autofocus,\n rows: _ctx.rows,\n onCompositionstart: unref(handleCompositionStart),\n onCompositionupdate: unref(handleCompositionUpdate),\n onCompositionend: unref(handleCompositionEnd),\n onInput: handleInput,\n onFocus: unref(handleFocus),\n onBlur: unref(handleBlur),\n onChange: handleChange,\n onKeydown: handleKeydown\n }), null, 16, [\"id\", \"minlength\", \"maxlength\", \"tabindex\", \"disabled\", \"readonly\", \"autocomplete\", \"aria-label\", \"placeholder\", \"form\", \"autofocus\", \"rows\", \"onCompositionstart\", \"onCompositionupdate\", \"onCompositionend\", \"onFocus\", \"onBlur\"]),\n unref(isWordLimitVisible) ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n style: normalizeStyle(countStyle.value),\n class: normalizeClass(unref(nsInput).e(\"count\"))\n }, toDisplayString(unref(textLength)) + \" / \" + toDisplayString(_ctx.maxlength), 7)) : createCommentVNode(\"v-if\", true)\n ], 64))\n ], 16, [\"role\"]);\n };\n }\n});\nvar Input = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"input.vue\"]]);\n\nexport { Input as default };\n//# sourceMappingURL=input2.mjs.map\n","import '../../utils/index.mjs';\nimport Input from './src/input2.mjs';\nexport { inputEmits, inputProps } from './src/input.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElInput = withInstall(Input);\n\nexport { ElInput, ElInput as default };\n//# sourceMappingURL=index.mjs.map\n","const GAP = 4;\nconst BAR_MAP = {\n vertical: {\n offset: \"offsetHeight\",\n scroll: \"scrollTop\",\n scrollSize: \"scrollHeight\",\n size: \"height\",\n key: \"vertical\",\n axis: \"Y\",\n client: \"clientY\",\n direction: \"top\"\n },\n horizontal: {\n offset: \"offsetWidth\",\n scroll: \"scrollLeft\",\n scrollSize: \"scrollWidth\",\n size: \"width\",\n key: \"horizontal\",\n axis: \"X\",\n client: \"clientX\",\n direction: \"left\"\n }\n};\nconst renderThumbStyle = ({\n move,\n size,\n bar\n}) => ({\n [bar.size]: size,\n transform: `translate${bar.axis}(${move}%)`\n});\n\nexport { BAR_MAP, GAP, renderThumbStyle };\n//# sourceMappingURL=util.mjs.map\n","const scrollbarContextKey = Symbol(\"scrollbarContextKey\");\n\nexport { scrollbarContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst thumbProps = buildProps({\n vertical: Boolean,\n size: String,\n move: Number,\n ratio: {\n type: Number,\n required: true\n },\n always: Boolean\n});\n\nexport { thumbProps };\n//# sourceMappingURL=thumb.mjs.map\n","import { defineComponent, inject, ref, computed, onBeforeUnmount, toRef, openBlock, createBlock, Transition, unref, withCtx, withDirectives, createElementVNode, normalizeClass, normalizeStyle, vShow } from 'vue';\nimport { isClient, useEventListener } from '@vueuse/core';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { scrollbarContextKey } from './constants.mjs';\nimport { BAR_MAP, renderThumbStyle } from './util.mjs';\nimport { thumbProps } from './thumb.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { throwError } from '../../../utils/error.mjs';\n\nconst COMPONENT_NAME = \"Thumb\";\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"thumb\",\n props: thumbProps,\n setup(__props) {\n const props = __props;\n const scrollbar = inject(scrollbarContextKey);\n const ns = useNamespace(\"scrollbar\");\n if (!scrollbar)\n throwError(COMPONENT_NAME, \"can not inject scrollbar context\");\n const instance = ref();\n const thumb = ref();\n const thumbState = ref({});\n const visible = ref(false);\n let cursorDown = false;\n let cursorLeave = false;\n let originalOnSelectStart = isClient ? document.onselectstart : null;\n const bar = computed(() => BAR_MAP[props.vertical ? \"vertical\" : \"horizontal\"]);\n const thumbStyle = computed(() => renderThumbStyle({\n size: props.size,\n move: props.move,\n bar: bar.value\n }));\n const offsetRatio = computed(() => instance.value[bar.value.offset] ** 2 / scrollbar.wrapElement[bar.value.scrollSize] / props.ratio / thumb.value[bar.value.offset]);\n const clickThumbHandler = (e) => {\n var _a;\n e.stopPropagation();\n if (e.ctrlKey || [1, 2].includes(e.button))\n return;\n (_a = window.getSelection()) == null ? void 0 : _a.removeAllRanges();\n startDrag(e);\n const el = e.currentTarget;\n if (!el)\n return;\n thumbState.value[bar.value.axis] = el[bar.value.offset] - (e[bar.value.client] - el.getBoundingClientRect()[bar.value.direction]);\n };\n const clickTrackHandler = (e) => {\n if (!thumb.value || !instance.value || !scrollbar.wrapElement)\n return;\n const offset = Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]);\n const thumbHalf = thumb.value[bar.value.offset] / 2;\n const thumbPositionPercentage = (offset - thumbHalf) * 100 * offsetRatio.value / instance.value[bar.value.offset];\n scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100;\n };\n const startDrag = (e) => {\n e.stopImmediatePropagation();\n cursorDown = true;\n document.addEventListener(\"mousemove\", mouseMoveDocumentHandler);\n document.addEventListener(\"mouseup\", mouseUpDocumentHandler);\n originalOnSelectStart = document.onselectstart;\n document.onselectstart = () => false;\n };\n const mouseMoveDocumentHandler = (e) => {\n if (!instance.value || !thumb.value)\n return;\n if (cursorDown === false)\n return;\n const prevPage = thumbState.value[bar.value.axis];\n if (!prevPage)\n return;\n const offset = (instance.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1;\n const thumbClickPosition = thumb.value[bar.value.offset] - prevPage;\n const thumbPositionPercentage = (offset - thumbClickPosition) * 100 * offsetRatio.value / instance.value[bar.value.offset];\n scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100;\n };\n const mouseUpDocumentHandler = () => {\n cursorDown = false;\n thumbState.value[bar.value.axis] = 0;\n document.removeEventListener(\"mousemove\", mouseMoveDocumentHandler);\n document.removeEventListener(\"mouseup\", mouseUpDocumentHandler);\n restoreOnselectstart();\n if (cursorLeave)\n visible.value = false;\n };\n const mouseMoveScrollbarHandler = () => {\n cursorLeave = false;\n visible.value = !!props.size;\n };\n const mouseLeaveScrollbarHandler = () => {\n cursorLeave = true;\n visible.value = cursorDown;\n };\n onBeforeUnmount(() => {\n restoreOnselectstart();\n document.removeEventListener(\"mouseup\", mouseUpDocumentHandler);\n });\n const restoreOnselectstart = () => {\n if (document.onselectstart !== originalOnSelectStart)\n document.onselectstart = originalOnSelectStart;\n };\n useEventListener(toRef(scrollbar, \"scrollbarElement\"), \"mousemove\", mouseMoveScrollbarHandler);\n useEventListener(toRef(scrollbar, \"scrollbarElement\"), \"mouseleave\", mouseLeaveScrollbarHandler);\n return (_ctx, _cache) => {\n return openBlock(), createBlock(Transition, {\n name: unref(ns).b(\"fade\"),\n persisted: \"\"\n }, {\n default: withCtx(() => [\n withDirectives(createElementVNode(\"div\", {\n ref_key: \"instance\",\n ref: instance,\n class: normalizeClass([unref(ns).e(\"bar\"), unref(ns).is(unref(bar).key)]),\n onMousedown: clickTrackHandler\n }, [\n createElementVNode(\"div\", {\n ref_key: \"thumb\",\n ref: thumb,\n class: normalizeClass(unref(ns).e(\"thumb\")),\n style: normalizeStyle(unref(thumbStyle)),\n onMousedown: clickThumbHandler\n }, null, 38)\n ], 34), [\n [vShow, _ctx.always || visible.value]\n ])\n ]),\n _: 1\n }, 8, [\"name\"]);\n };\n }\n});\nvar Thumb = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"thumb.vue\"]]);\n\nexport { Thumb as default };\n//# sourceMappingURL=thumb2.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst barProps = buildProps({\n always: {\n type: Boolean,\n default: true\n },\n minSize: {\n type: Number,\n required: true\n }\n});\n\nexport { barProps };\n//# sourceMappingURL=bar.mjs.map\n","import { defineComponent, inject, ref, openBlock, createElementBlock, Fragment, createVNode } from 'vue';\nimport { GAP } from './util.mjs';\nimport Thumb from './thumb2.mjs';\nimport { barProps } from './bar.mjs';\nimport { scrollbarContextKey } from './constants.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"bar\",\n props: barProps,\n setup(__props, { expose }) {\n const props = __props;\n const scrollbar = inject(scrollbarContextKey);\n const moveX = ref(0);\n const moveY = ref(0);\n const sizeWidth = ref(\"\");\n const sizeHeight = ref(\"\");\n const ratioY = ref(1);\n const ratioX = ref(1);\n const handleScroll = (wrap) => {\n if (wrap) {\n const offsetHeight = wrap.offsetHeight - GAP;\n const offsetWidth = wrap.offsetWidth - GAP;\n moveY.value = wrap.scrollTop * 100 / offsetHeight * ratioY.value;\n moveX.value = wrap.scrollLeft * 100 / offsetWidth * ratioX.value;\n }\n };\n const update = () => {\n const wrap = scrollbar == null ? void 0 : scrollbar.wrapElement;\n if (!wrap)\n return;\n const offsetHeight = wrap.offsetHeight - GAP;\n const offsetWidth = wrap.offsetWidth - GAP;\n const originalHeight = offsetHeight ** 2 / wrap.scrollHeight;\n const originalWidth = offsetWidth ** 2 / wrap.scrollWidth;\n const height = Math.max(originalHeight, props.minSize);\n const width = Math.max(originalWidth, props.minSize);\n ratioY.value = originalHeight / (offsetHeight - originalHeight) / (height / (offsetHeight - height));\n ratioX.value = originalWidth / (offsetWidth - originalWidth) / (width / (offsetWidth - width));\n sizeHeight.value = height + GAP < offsetHeight ? `${height}px` : \"\";\n sizeWidth.value = width + GAP < offsetWidth ? `${width}px` : \"\";\n };\n expose({\n handleScroll,\n update\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(Fragment, null, [\n createVNode(Thumb, {\n move: moveX.value,\n ratio: ratioX.value,\n size: sizeWidth.value,\n always: _ctx.always\n }, null, 8, [\"move\", \"ratio\", \"size\", \"always\"]),\n createVNode(Thumb, {\n move: moveY.value,\n ratio: ratioY.value,\n size: sizeHeight.value,\n vertical: \"\",\n always: _ctx.always\n }, null, 8, [\"move\", \"ratio\", \"size\", \"always\"])\n ], 64);\n };\n }\n});\nvar Bar = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"bar.vue\"]]);\n\nexport { Bar as default };\n//# sourceMappingURL=bar2.mjs.map\n","import '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useAriaProps } from '../../../hooks/use-aria/index.mjs';\nimport { isNumber } from '../../../utils/types.mjs';\n\nconst scrollbarProps = buildProps({\n height: {\n type: [String, Number],\n default: \"\"\n },\n maxHeight: {\n type: [String, Number],\n default: \"\"\n },\n native: {\n type: Boolean,\n default: false\n },\n wrapStyle: {\n type: definePropType([String, Object, Array]),\n default: \"\"\n },\n wrapClass: {\n type: [String, Array],\n default: \"\"\n },\n viewClass: {\n type: [String, Array],\n default: \"\"\n },\n viewStyle: {\n type: [String, Array, Object],\n default: \"\"\n },\n noresize: Boolean,\n tag: {\n type: String,\n default: \"div\"\n },\n always: Boolean,\n minSize: {\n type: Number,\n default: 20\n },\n tabindex: {\n type: [String, Number],\n default: void 0\n },\n id: String,\n role: String,\n ...useAriaProps([\"ariaLabel\", \"ariaOrientation\"])\n});\nconst scrollbarEmits = {\n scroll: ({\n scrollTop,\n scrollLeft\n }) => [scrollTop, scrollLeft].every(isNumber)\n};\n\nexport { scrollbarEmits, scrollbarProps };\n//# sourceMappingURL=scrollbar.mjs.map\n","import { defineComponent, ref, computed, watch, nextTick, provide, reactive, onActivated, onMounted, onUpdated, openBlock, createElementBlock, normalizeClass, unref, createElementVNode, normalizeStyle, createBlock, resolveDynamicComponent, withCtx, renderSlot, createCommentVNode } from 'vue';\nimport { useResizeObserver, useEventListener } from '@vueuse/core';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport Bar from './bar2.mjs';\nimport { scrollbarContextKey } from './constants.mjs';\nimport { scrollbarProps, scrollbarEmits } from './scrollbar.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { addUnit } from '../../../utils/dom/style.mjs';\nimport { isObject } from '@vue/shared';\nimport { isNumber } from '../../../utils/types.mjs';\nimport { debugWarn } from '../../../utils/error.mjs';\n\nconst COMPONENT_NAME = \"ElScrollbar\";\nconst __default__ = defineComponent({\n name: COMPONENT_NAME\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: scrollbarProps,\n emits: scrollbarEmits,\n setup(__props, { expose, emit }) {\n const props = __props;\n const ns = useNamespace(\"scrollbar\");\n let stopResizeObserver = void 0;\n let stopResizeListener = void 0;\n let wrapScrollTop = 0;\n let wrapScrollLeft = 0;\n const scrollbarRef = ref();\n const wrapRef = ref();\n const resizeRef = ref();\n const barRef = ref();\n const wrapStyle = computed(() => {\n const style = {};\n if (props.height)\n style.height = addUnit(props.height);\n if (props.maxHeight)\n style.maxHeight = addUnit(props.maxHeight);\n return [props.wrapStyle, style];\n });\n const wrapKls = computed(() => {\n return [\n props.wrapClass,\n ns.e(\"wrap\"),\n { [ns.em(\"wrap\", \"hidden-default\")]: !props.native }\n ];\n });\n const resizeKls = computed(() => {\n return [ns.e(\"view\"), props.viewClass];\n });\n const handleScroll = () => {\n var _a;\n if (wrapRef.value) {\n (_a = barRef.value) == null ? void 0 : _a.handleScroll(wrapRef.value);\n wrapScrollTop = wrapRef.value.scrollTop;\n wrapScrollLeft = wrapRef.value.scrollLeft;\n emit(\"scroll\", {\n scrollTop: wrapRef.value.scrollTop,\n scrollLeft: wrapRef.value.scrollLeft\n });\n }\n };\n function scrollTo(arg1, arg2) {\n if (isObject(arg1)) {\n wrapRef.value.scrollTo(arg1);\n } else if (isNumber(arg1) && isNumber(arg2)) {\n wrapRef.value.scrollTo(arg1, arg2);\n }\n }\n const setScrollTop = (value) => {\n if (!isNumber(value)) {\n debugWarn(COMPONENT_NAME, \"value must be a number\");\n return;\n }\n wrapRef.value.scrollTop = value;\n };\n const setScrollLeft = (value) => {\n if (!isNumber(value)) {\n debugWarn(COMPONENT_NAME, \"value must be a number\");\n return;\n }\n wrapRef.value.scrollLeft = value;\n };\n const update = () => {\n var _a;\n (_a = barRef.value) == null ? void 0 : _a.update();\n };\n watch(() => props.noresize, (noresize) => {\n if (noresize) {\n stopResizeObserver == null ? void 0 : stopResizeObserver();\n stopResizeListener == null ? void 0 : stopResizeListener();\n } else {\n ;\n ({ stop: stopResizeObserver } = useResizeObserver(resizeRef, update));\n stopResizeListener = useEventListener(\"resize\", update);\n }\n }, { immediate: true });\n watch(() => [props.maxHeight, props.height], () => {\n if (!props.native)\n nextTick(() => {\n var _a;\n update();\n if (wrapRef.value) {\n (_a = barRef.value) == null ? void 0 : _a.handleScroll(wrapRef.value);\n }\n });\n });\n provide(scrollbarContextKey, reactive({\n scrollbarElement: scrollbarRef,\n wrapElement: wrapRef\n }));\n onActivated(() => {\n wrapRef.value.scrollTop = wrapScrollTop;\n wrapRef.value.scrollLeft = wrapScrollLeft;\n });\n onMounted(() => {\n if (!props.native)\n nextTick(() => {\n update();\n });\n });\n onUpdated(() => update());\n expose({\n wrapRef,\n update,\n scrollTo,\n setScrollTop,\n setScrollLeft,\n handleScroll\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref_key: \"scrollbarRef\",\n ref: scrollbarRef,\n class: normalizeClass(unref(ns).b())\n }, [\n createElementVNode(\"div\", {\n ref_key: \"wrapRef\",\n ref: wrapRef,\n class: normalizeClass(unref(wrapKls)),\n style: normalizeStyle(unref(wrapStyle)),\n tabindex: _ctx.tabindex,\n onScroll: handleScroll\n }, [\n (openBlock(), createBlock(resolveDynamicComponent(_ctx.tag), {\n id: _ctx.id,\n ref_key: \"resizeRef\",\n ref: resizeRef,\n class: normalizeClass(unref(resizeKls)),\n style: normalizeStyle(_ctx.viewStyle),\n role: _ctx.role,\n \"aria-label\": _ctx.ariaLabel,\n \"aria-orientation\": _ctx.ariaOrientation\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"id\", \"class\", \"style\", \"role\", \"aria-label\", \"aria-orientation\"]))\n ], 46, [\"tabindex\"]),\n !_ctx.native ? (openBlock(), createBlock(Bar, {\n key: 0,\n ref_key: \"barRef\",\n ref: barRef,\n always: _ctx.always,\n \"min-size\": _ctx.minSize\n }, null, 8, [\"always\", \"min-size\"])) : createCommentVNode(\"v-if\", true)\n ], 2);\n };\n }\n});\nvar Scrollbar = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"scrollbar.vue\"]]);\n\nexport { Scrollbar as default };\n//# sourceMappingURL=scrollbar2.mjs.map\n","import '../../utils/index.mjs';\nimport Scrollbar from './src/scrollbar2.mjs';\nexport { BAR_MAP, GAP, renderThumbStyle } from './src/util.mjs';\nexport { scrollbarEmits, scrollbarProps } from './src/scrollbar.mjs';\nexport { thumbProps } from './src/thumb.mjs';\nexport { scrollbarContextKey } from './src/constants.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElScrollbar = withInstall(Scrollbar);\n\nexport { ElScrollbar, ElScrollbar as default };\n//# sourceMappingURL=index.mjs.map\n","const POPPER_INJECTION_KEY = Symbol(\"popper\");\nconst POPPER_CONTENT_INJECTION_KEY = Symbol(\"popperContent\");\n\nexport { POPPER_CONTENT_INJECTION_KEY, POPPER_INJECTION_KEY };\n//# sourceMappingURL=constants.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst effects = [\"light\", \"dark\"];\nconst triggers = [\"click\", \"contextmenu\", \"hover\", \"focus\"];\nconst Effect = {\n LIGHT: \"light\",\n DARK: \"dark\"\n};\nconst roleTypes = [\n \"dialog\",\n \"grid\",\n \"group\",\n \"listbox\",\n \"menu\",\n \"navigation\",\n \"tooltip\",\n \"tree\"\n];\nconst popperProps = buildProps({\n role: {\n type: String,\n values: roleTypes,\n default: \"tooltip\"\n }\n});\nconst usePopperProps = popperProps;\n\nexport { Effect, popperProps, roleTypes, usePopperProps };\n//# sourceMappingURL=popper.mjs.map\n","import { defineComponent, ref, computed, provide, renderSlot } from 'vue';\nimport { POPPER_INJECTION_KEY } from './constants.mjs';\nimport { popperProps } from './popper.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElPopper\",\n inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: popperProps,\n setup(__props, { expose }) {\n const props = __props;\n const triggerRef = ref();\n const popperInstanceRef = ref();\n const contentRef = ref();\n const referenceRef = ref();\n const role = computed(() => props.role);\n const popperProvides = {\n triggerRef,\n popperInstanceRef,\n contentRef,\n referenceRef,\n role\n };\n expose(popperProvides);\n provide(POPPER_INJECTION_KEY, popperProvides);\n return (_ctx, _cache) => {\n return renderSlot(_ctx.$slots, \"default\");\n };\n }\n});\nvar Popper = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"popper.vue\"]]);\n\nexport { Popper as default };\n//# sourceMappingURL=popper2.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst popperArrowProps = buildProps({\n arrowOffset: {\n type: Number,\n default: 5\n }\n});\nconst usePopperArrowProps = popperArrowProps;\n\nexport { popperArrowProps, usePopperArrowProps };\n//# sourceMappingURL=arrow.mjs.map\n","import { defineComponent, inject, watch, onBeforeUnmount, openBlock, createElementBlock, normalizeClass, unref, normalizeStyle } from 'vue';\nimport '../../../hooks/index.mjs';\nimport { POPPER_CONTENT_INJECTION_KEY } from './constants.mjs';\nimport { popperArrowProps } from './arrow.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElPopperArrow\",\n inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: popperArrowProps,\n setup(__props, { expose }) {\n const props = __props;\n const ns = useNamespace(\"popper\");\n const { arrowOffset, arrowRef, arrowStyle } = inject(POPPER_CONTENT_INJECTION_KEY, void 0);\n watch(() => props.arrowOffset, (val) => {\n arrowOffset.value = val;\n });\n onBeforeUnmount(() => {\n arrowRef.value = void 0;\n });\n expose({\n arrowRef\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"span\", {\n ref_key: \"arrowRef\",\n ref: arrowRef,\n class: normalizeClass(unref(ns).e(\"arrow\")),\n style: normalizeStyle(unref(arrowStyle)),\n \"data-popper-arrow\": \"\"\n }, null, 6);\n };\n }\n});\nvar ElPopperArrow = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"arrow.vue\"]]);\n\nexport { ElPopperArrow as default };\n//# sourceMappingURL=arrow2.mjs.map\n","import { defineComponent, inject, withDirectives, cloneVNode, Fragment, createVNode, Text, Comment } from 'vue';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { FORWARD_REF_INJECTION_KEY, useForwardRefDirective } from '../../../hooks/use-forward-ref/index.mjs';\nimport { NOOP, isObject } from '@vue/shared';\nimport { debugWarn } from '../../../utils/error.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst NAME = \"ElOnlyChild\";\nconst OnlyChild = defineComponent({\n name: NAME,\n setup(_, {\n slots,\n attrs\n }) {\n var _a;\n const forwardRefInjection = inject(FORWARD_REF_INJECTION_KEY);\n const forwardRefDirective = useForwardRefDirective((_a = forwardRefInjection == null ? void 0 : forwardRefInjection.setForwardRef) != null ? _a : NOOP);\n return () => {\n var _a2;\n const defaultSlot = (_a2 = slots.default) == null ? void 0 : _a2.call(slots, attrs);\n if (!defaultSlot)\n return null;\n if (defaultSlot.length > 1) {\n debugWarn(NAME, \"requires exact only one valid child.\");\n return null;\n }\n const firstLegitNode = findFirstLegitChild(defaultSlot);\n if (!firstLegitNode) {\n debugWarn(NAME, \"no valid child node found\");\n return null;\n }\n return withDirectives(cloneVNode(firstLegitNode, attrs), [[forwardRefDirective]]);\n };\n }\n});\nfunction findFirstLegitChild(node) {\n if (!node)\n return null;\n const children = node;\n for (const child of children) {\n if (isObject(child)) {\n switch (child.type) {\n case Comment:\n continue;\n case Text:\n case \"svg\":\n return wrapTextContent(child);\n case Fragment:\n return findFirstLegitChild(child.children);\n default:\n return child;\n }\n }\n return wrapTextContent(child);\n }\n return null;\n}\nfunction wrapTextContent(s) {\n const ns = useNamespace(\"only-child\");\n return createVNode(\"span\", {\n \"class\": ns.e(\"content\")\n }, [s]);\n}\n\nexport { OnlyChild };\n//# sourceMappingURL=only-child.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\n\nconst popperTriggerProps = buildProps({\n virtualRef: {\n type: definePropType(Object)\n },\n virtualTriggering: Boolean,\n onMouseenter: {\n type: definePropType(Function)\n },\n onMouseleave: {\n type: definePropType(Function)\n },\n onClick: {\n type: definePropType(Function)\n },\n onKeydown: {\n type: definePropType(Function)\n },\n onFocus: {\n type: definePropType(Function)\n },\n onBlur: {\n type: definePropType(Function)\n },\n onContextmenu: {\n type: definePropType(Function)\n },\n id: String,\n open: Boolean\n});\nconst usePopperTriggerProps = popperTriggerProps;\n\nexport { popperTriggerProps, usePopperTriggerProps };\n//# sourceMappingURL=trigger.mjs.map\n","import { defineComponent, inject, computed, onMounted, watch, onBeforeUnmount, openBlock, createBlock, unref, mergeProps, withCtx, renderSlot, createCommentVNode } from 'vue';\nimport { isNil } from 'lodash-unified';\nimport { unrefElement } from '@vueuse/core';\nimport '../../slot/index.mjs';\nimport '../../../hooks/index.mjs';\nimport '../../../utils/index.mjs';\nimport { POPPER_INJECTION_KEY } from './constants.mjs';\nimport { popperTriggerProps } from './trigger.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useForwardRef } from '../../../hooks/use-forward-ref/index.mjs';\nimport { isElement } from '../../../utils/types.mjs';\nimport { OnlyChild } from '../../slot/src/only-child.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElPopperTrigger\",\n inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: popperTriggerProps,\n setup(__props, { expose }) {\n const props = __props;\n const { role, triggerRef } = inject(POPPER_INJECTION_KEY, void 0);\n useForwardRef(triggerRef);\n const ariaControls = computed(() => {\n return ariaHaspopup.value ? props.id : void 0;\n });\n const ariaDescribedby = computed(() => {\n if (role && role.value === \"tooltip\") {\n return props.open && props.id ? props.id : void 0;\n }\n return void 0;\n });\n const ariaHaspopup = computed(() => {\n if (role && role.value !== \"tooltip\") {\n return role.value;\n }\n return void 0;\n });\n const ariaExpanded = computed(() => {\n return ariaHaspopup.value ? `${props.open}` : void 0;\n });\n let virtualTriggerAriaStopWatch = void 0;\n const TRIGGER_ELE_EVENTS = [\n \"onMouseenter\",\n \"onMouseleave\",\n \"onClick\",\n \"onKeydown\",\n \"onFocus\",\n \"onBlur\",\n \"onContextmenu\"\n ];\n onMounted(() => {\n watch(() => props.virtualRef, (virtualEl) => {\n if (virtualEl) {\n triggerRef.value = unrefElement(virtualEl);\n }\n }, {\n immediate: true\n });\n watch(triggerRef, (el, prevEl) => {\n virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch();\n virtualTriggerAriaStopWatch = void 0;\n if (isElement(el)) {\n TRIGGER_ELE_EVENTS.forEach((eventName) => {\n var _a;\n const handler = props[eventName];\n if (handler) {\n ;\n el.addEventListener(eventName.slice(2).toLowerCase(), handler);\n (_a = prevEl == null ? void 0 : prevEl.removeEventListener) == null ? void 0 : _a.call(prevEl, eventName.slice(2).toLowerCase(), handler);\n }\n });\n virtualTriggerAriaStopWatch = watch([ariaControls, ariaDescribedby, ariaHaspopup, ariaExpanded], (watches) => {\n ;\n [\n \"aria-controls\",\n \"aria-describedby\",\n \"aria-haspopup\",\n \"aria-expanded\"\n ].forEach((key, idx) => {\n isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]);\n });\n }, { immediate: true });\n }\n if (isElement(prevEl)) {\n ;\n [\n \"aria-controls\",\n \"aria-describedby\",\n \"aria-haspopup\",\n \"aria-expanded\"\n ].forEach((key) => prevEl.removeAttribute(key));\n }\n }, {\n immediate: true\n });\n });\n onBeforeUnmount(() => {\n virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch();\n virtualTriggerAriaStopWatch = void 0;\n if (triggerRef.value && isElement(triggerRef.value)) {\n const el = triggerRef.value;\n TRIGGER_ELE_EVENTS.forEach((eventName) => {\n const handler = props[eventName];\n if (handler) {\n el.removeEventListener(eventName.slice(2).toLowerCase(), handler);\n }\n });\n triggerRef.value = void 0;\n }\n });\n expose({\n triggerRef\n });\n return (_ctx, _cache) => {\n return !_ctx.virtualTriggering ? (openBlock(), createBlock(unref(OnlyChild), mergeProps({ key: 0 }, _ctx.$attrs, {\n \"aria-controls\": unref(ariaControls),\n \"aria-describedby\": unref(ariaDescribedby),\n \"aria-expanded\": unref(ariaExpanded),\n \"aria-haspopup\": unref(ariaHaspopup)\n }), {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 16, [\"aria-controls\", \"aria-describedby\", \"aria-expanded\", \"aria-haspopup\"])) : createCommentVNode(\"v-if\", true);\n };\n }\n});\nvar ElPopperTrigger = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"trigger.vue\"]]);\n\nexport { ElPopperTrigger as default };\n//# sourceMappingURL=trigger2.mjs.map\n","const FOCUS_AFTER_TRAPPED = \"focus-trap.focus-after-trapped\";\nconst FOCUS_AFTER_RELEASED = \"focus-trap.focus-after-released\";\nconst FOCUSOUT_PREVENTED = \"focus-trap.focusout-prevented\";\nconst FOCUS_AFTER_TRAPPED_OPTS = {\n cancelable: true,\n bubbles: false\n};\nconst FOCUSOUT_PREVENTED_OPTS = {\n cancelable: true,\n bubbles: false\n};\nconst ON_TRAP_FOCUS_EVT = \"focusAfterTrapped\";\nconst ON_RELEASE_FOCUS_EVT = \"focusAfterReleased\";\nconst FOCUS_TRAP_INJECTION_KEY = Symbol(\"elFocusTrap\");\n\nexport { FOCUSOUT_PREVENTED, FOCUSOUT_PREVENTED_OPTS, FOCUS_AFTER_RELEASED, FOCUS_AFTER_TRAPPED, FOCUS_AFTER_TRAPPED_OPTS, FOCUS_TRAP_INJECTION_KEY, ON_RELEASE_FOCUS_EVT, ON_TRAP_FOCUS_EVT };\n//# sourceMappingURL=tokens.mjs.map\n","import { ref, onMounted, onBeforeUnmount } from 'vue';\nimport { FOCUSOUT_PREVENTED, FOCUSOUT_PREVENTED_OPTS } from './tokens.mjs';\n\nconst focusReason = ref();\nconst lastUserFocusTimestamp = ref(0);\nconst lastAutomatedFocusTimestamp = ref(0);\nlet focusReasonUserCount = 0;\nconst obtainAllFocusableElements = (element) => {\n const nodes = [];\n const walker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput)\n return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 || node === document.activeElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }\n });\n while (walker.nextNode())\n nodes.push(walker.currentNode);\n return nodes;\n};\nconst getVisibleElement = (elements, container) => {\n for (const element of elements) {\n if (!isHidden(element, container))\n return element;\n }\n};\nconst isHidden = (element, container) => {\n if (process.env.NODE_ENV === \"test\")\n return false;\n if (getComputedStyle(element).visibility === \"hidden\")\n return true;\n while (element) {\n if (container && element === container)\n return false;\n if (getComputedStyle(element).display === \"none\")\n return true;\n element = element.parentElement;\n }\n return false;\n};\nconst getEdges = (container) => {\n const focusable = obtainAllFocusableElements(container);\n const first = getVisibleElement(focusable, container);\n const last = getVisibleElement(focusable.reverse(), container);\n return [first, last];\n};\nconst isSelectable = (element) => {\n return element instanceof HTMLInputElement && \"select\" in element;\n};\nconst tryFocus = (element, shouldSelect) => {\n if (element && element.focus) {\n const prevFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n lastAutomatedFocusTimestamp.value = window.performance.now();\n if (element !== prevFocusedElement && isSelectable(element) && shouldSelect) {\n element.select();\n }\n }\n};\nfunction removeFromStack(list, item) {\n const copy = [...list];\n const idx = list.indexOf(item);\n if (idx !== -1) {\n copy.splice(idx, 1);\n }\n return copy;\n}\nconst createFocusableStack = () => {\n let stack = [];\n const push = (layer) => {\n const currentLayer = stack[0];\n if (currentLayer && layer !== currentLayer) {\n currentLayer.pause();\n }\n stack = removeFromStack(stack, layer);\n stack.unshift(layer);\n };\n const remove = (layer) => {\n var _a, _b;\n stack = removeFromStack(stack, layer);\n (_b = (_a = stack[0]) == null ? void 0 : _a.resume) == null ? void 0 : _b.call(_a);\n };\n return {\n push,\n remove\n };\n};\nconst focusFirstDescendant = (elements, shouldSelect = false) => {\n const prevFocusedElement = document.activeElement;\n for (const element of elements) {\n tryFocus(element, shouldSelect);\n if (document.activeElement !== prevFocusedElement)\n return;\n }\n};\nconst focusableStack = createFocusableStack();\nconst isFocusCausedByUserEvent = () => {\n return lastUserFocusTimestamp.value > lastAutomatedFocusTimestamp.value;\n};\nconst notifyFocusReasonPointer = () => {\n focusReason.value = \"pointer\";\n lastUserFocusTimestamp.value = window.performance.now();\n};\nconst notifyFocusReasonKeydown = () => {\n focusReason.value = \"keyboard\";\n lastUserFocusTimestamp.value = window.performance.now();\n};\nconst useFocusReason = () => {\n onMounted(() => {\n if (focusReasonUserCount === 0) {\n document.addEventListener(\"mousedown\", notifyFocusReasonPointer);\n document.addEventListener(\"touchstart\", notifyFocusReasonPointer);\n document.addEventListener(\"keydown\", notifyFocusReasonKeydown);\n }\n focusReasonUserCount++;\n });\n onBeforeUnmount(() => {\n focusReasonUserCount--;\n if (focusReasonUserCount <= 0) {\n document.removeEventListener(\"mousedown\", notifyFocusReasonPointer);\n document.removeEventListener(\"touchstart\", notifyFocusReasonPointer);\n document.removeEventListener(\"keydown\", notifyFocusReasonKeydown);\n }\n });\n return {\n focusReason,\n lastUserFocusTimestamp,\n lastAutomatedFocusTimestamp\n };\n};\nconst createFocusOutPreventedEvent = (detail) => {\n return new CustomEvent(FOCUSOUT_PREVENTED, {\n ...FOCUSOUT_PREVENTED_OPTS,\n detail\n });\n};\n\nexport { createFocusOutPreventedEvent, focusFirstDescendant, focusableStack, getEdges, getVisibleElement, isFocusCausedByUserEvent, isHidden, obtainAllFocusableElements, tryFocus, useFocusReason };\n//# sourceMappingURL=utils.mjs.map\n","import { defineComponent, ref, provide, watch, unref, nextTick, onMounted, onBeforeUnmount, renderSlot } from 'vue';\nimport { isNil } from 'lodash-unified';\nimport '../../../constants/index.mjs';\nimport '../../../hooks/index.mjs';\nimport '../../../utils/index.mjs';\nimport { useFocusReason, getEdges, createFocusOutPreventedEvent, tryFocus, focusableStack, focusFirstDescendant, obtainAllFocusableElements, isFocusCausedByUserEvent } from './utils.mjs';\nimport { ON_TRAP_FOCUS_EVT, ON_RELEASE_FOCUS_EVT, FOCUS_TRAP_INJECTION_KEY, FOCUS_AFTER_TRAPPED, FOCUS_AFTER_TRAPPED_OPTS, FOCUS_AFTER_RELEASED } from './tokens.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useEscapeKeydown } from '../../../hooks/use-escape-keydown/index.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\nimport { isString } from '@vue/shared';\n\nconst _sfc_main = defineComponent({\n name: \"ElFocusTrap\",\n inheritAttrs: false,\n props: {\n loop: Boolean,\n trapped: Boolean,\n focusTrapEl: Object,\n focusStartEl: {\n type: [Object, String],\n default: \"first\"\n }\n },\n emits: [\n ON_TRAP_FOCUS_EVT,\n ON_RELEASE_FOCUS_EVT,\n \"focusin\",\n \"focusout\",\n \"focusout-prevented\",\n \"release-requested\"\n ],\n setup(props, { emit }) {\n const forwardRef = ref();\n let lastFocusBeforeTrapped;\n let lastFocusAfterTrapped;\n const { focusReason } = useFocusReason();\n useEscapeKeydown((event) => {\n if (props.trapped && !focusLayer.paused) {\n emit(\"release-requested\", event);\n }\n });\n const focusLayer = {\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n };\n const onKeydown = (e) => {\n if (!props.loop && !props.trapped)\n return;\n if (focusLayer.paused)\n return;\n const { key, altKey, ctrlKey, metaKey, currentTarget, shiftKey } = e;\n const { loop } = props;\n const isTabbing = key === EVENT_CODE.tab && !altKey && !ctrlKey && !metaKey;\n const currentFocusingEl = document.activeElement;\n if (isTabbing && currentFocusingEl) {\n const container = currentTarget;\n const [first, last] = getEdges(container);\n const isTabbable = first && last;\n if (!isTabbable) {\n if (currentFocusingEl === container) {\n const focusoutPreventedEvent = createFocusOutPreventedEvent({\n focusReason: focusReason.value\n });\n emit(\"focusout-prevented\", focusoutPreventedEvent);\n if (!focusoutPreventedEvent.defaultPrevented) {\n e.preventDefault();\n }\n }\n } else {\n if (!shiftKey && currentFocusingEl === last) {\n const focusoutPreventedEvent = createFocusOutPreventedEvent({\n focusReason: focusReason.value\n });\n emit(\"focusout-prevented\", focusoutPreventedEvent);\n if (!focusoutPreventedEvent.defaultPrevented) {\n e.preventDefault();\n if (loop)\n tryFocus(first, true);\n }\n } else if (shiftKey && [first, container].includes(currentFocusingEl)) {\n const focusoutPreventedEvent = createFocusOutPreventedEvent({\n focusReason: focusReason.value\n });\n emit(\"focusout-prevented\", focusoutPreventedEvent);\n if (!focusoutPreventedEvent.defaultPrevented) {\n e.preventDefault();\n if (loop)\n tryFocus(last, true);\n }\n }\n }\n }\n };\n provide(FOCUS_TRAP_INJECTION_KEY, {\n focusTrapRef: forwardRef,\n onKeydown\n });\n watch(() => props.focusTrapEl, (focusTrapEl) => {\n if (focusTrapEl) {\n forwardRef.value = focusTrapEl;\n }\n }, { immediate: true });\n watch([forwardRef], ([forwardRef2], [oldForwardRef]) => {\n if (forwardRef2) {\n forwardRef2.addEventListener(\"keydown\", onKeydown);\n forwardRef2.addEventListener(\"focusin\", onFocusIn);\n forwardRef2.addEventListener(\"focusout\", onFocusOut);\n }\n if (oldForwardRef) {\n oldForwardRef.removeEventListener(\"keydown\", onKeydown);\n oldForwardRef.removeEventListener(\"focusin\", onFocusIn);\n oldForwardRef.removeEventListener(\"focusout\", onFocusOut);\n }\n });\n const trapOnFocus = (e) => {\n emit(ON_TRAP_FOCUS_EVT, e);\n };\n const releaseOnFocus = (e) => emit(ON_RELEASE_FOCUS_EVT, e);\n const onFocusIn = (e) => {\n const trapContainer = unref(forwardRef);\n if (!trapContainer)\n return;\n const target = e.target;\n const relatedTarget = e.relatedTarget;\n const isFocusedInTrap = target && trapContainer.contains(target);\n if (!props.trapped) {\n const isPrevFocusedInTrap = relatedTarget && trapContainer.contains(relatedTarget);\n if (!isPrevFocusedInTrap) {\n lastFocusBeforeTrapped = relatedTarget;\n }\n }\n if (isFocusedInTrap)\n emit(\"focusin\", e);\n if (focusLayer.paused)\n return;\n if (props.trapped) {\n if (isFocusedInTrap) {\n lastFocusAfterTrapped = target;\n } else {\n tryFocus(lastFocusAfterTrapped, true);\n }\n }\n };\n const onFocusOut = (e) => {\n const trapContainer = unref(forwardRef);\n if (focusLayer.paused || !trapContainer)\n return;\n if (props.trapped) {\n const relatedTarget = e.relatedTarget;\n if (!isNil(relatedTarget) && !trapContainer.contains(relatedTarget)) {\n setTimeout(() => {\n if (!focusLayer.paused && props.trapped) {\n const focusoutPreventedEvent = createFocusOutPreventedEvent({\n focusReason: focusReason.value\n });\n emit(\"focusout-prevented\", focusoutPreventedEvent);\n if (!focusoutPreventedEvent.defaultPrevented) {\n tryFocus(lastFocusAfterTrapped, true);\n }\n }\n }, 0);\n }\n } else {\n const target = e.target;\n const isFocusedInTrap = target && trapContainer.contains(target);\n if (!isFocusedInTrap)\n emit(\"focusout\", e);\n }\n };\n async function startTrap() {\n await nextTick();\n const trapContainer = unref(forwardRef);\n if (trapContainer) {\n focusableStack.push(focusLayer);\n const prevFocusedElement = trapContainer.contains(document.activeElement) ? lastFocusBeforeTrapped : document.activeElement;\n lastFocusBeforeTrapped = prevFocusedElement;\n const isPrevFocusContained = trapContainer.contains(prevFocusedElement);\n if (!isPrevFocusContained) {\n const focusEvent = new Event(FOCUS_AFTER_TRAPPED, FOCUS_AFTER_TRAPPED_OPTS);\n trapContainer.addEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus);\n trapContainer.dispatchEvent(focusEvent);\n if (!focusEvent.defaultPrevented) {\n nextTick(() => {\n let focusStartEl = props.focusStartEl;\n if (!isString(focusStartEl)) {\n tryFocus(focusStartEl);\n if (document.activeElement !== focusStartEl) {\n focusStartEl = \"first\";\n }\n }\n if (focusStartEl === \"first\") {\n focusFirstDescendant(obtainAllFocusableElements(trapContainer), true);\n }\n if (document.activeElement === prevFocusedElement || focusStartEl === \"container\") {\n tryFocus(trapContainer);\n }\n });\n }\n }\n }\n }\n function stopTrap() {\n const trapContainer = unref(forwardRef);\n if (trapContainer) {\n trapContainer.removeEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus);\n const releasedEvent = new CustomEvent(FOCUS_AFTER_RELEASED, {\n ...FOCUS_AFTER_TRAPPED_OPTS,\n detail: {\n focusReason: focusReason.value\n }\n });\n trapContainer.addEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus);\n trapContainer.dispatchEvent(releasedEvent);\n if (!releasedEvent.defaultPrevented && (focusReason.value == \"keyboard\" || !isFocusCausedByUserEvent() || trapContainer.contains(document.activeElement))) {\n tryFocus(lastFocusBeforeTrapped != null ? lastFocusBeforeTrapped : document.body);\n }\n trapContainer.removeEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus);\n focusableStack.remove(focusLayer);\n }\n }\n onMounted(() => {\n if (props.trapped) {\n startTrap();\n }\n watch(() => props.trapped, (trapped) => {\n if (trapped) {\n startTrap();\n } else {\n stopTrap();\n }\n });\n });\n onBeforeUnmount(() => {\n if (props.trapped) {\n stopTrap();\n }\n if (forwardRef.value) {\n forwardRef.value.removeEventListener(\"keydown\", onKeydown);\n forwardRef.value.removeEventListener(\"focusin\", onFocusIn);\n forwardRef.value.removeEventListener(\"focusout\", onFocusOut);\n forwardRef.value = void 0;\n }\n });\n return {\n onKeydown\n };\n }\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return renderSlot(_ctx.$slots, \"default\", { handleKeydown: _ctx.onKeydown });\n}\nvar ElFocusTrap = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__file\", \"focus-trap.vue\"]]);\n\nexport { ElFocusTrap as default };\n//# sourceMappingURL=focus-trap.mjs.map\n","import { placements } from '@popperjs/core';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useAriaProps } from '../../../hooks/use-aria/index.mjs';\n\nconst POSITIONING_STRATEGIES = [\"fixed\", \"absolute\"];\nconst popperCoreConfigProps = buildProps({\n boundariesPadding: {\n type: Number,\n default: 0\n },\n fallbackPlacements: {\n type: definePropType(Array),\n default: void 0\n },\n gpuAcceleration: {\n type: Boolean,\n default: true\n },\n offset: {\n type: Number,\n default: 12\n },\n placement: {\n type: String,\n values: placements,\n default: \"bottom\"\n },\n popperOptions: {\n type: definePropType(Object),\n default: () => ({})\n },\n strategy: {\n type: String,\n values: POSITIONING_STRATEGIES,\n default: \"absolute\"\n }\n});\nconst popperContentProps = buildProps({\n ...popperCoreConfigProps,\n id: String,\n style: {\n type: definePropType([String, Array, Object])\n },\n className: {\n type: definePropType([String, Array, Object])\n },\n effect: {\n type: definePropType(String),\n default: \"dark\"\n },\n visible: Boolean,\n enterable: {\n type: Boolean,\n default: true\n },\n pure: Boolean,\n focusOnShow: {\n type: Boolean,\n default: false\n },\n trapping: {\n type: Boolean,\n default: false\n },\n popperClass: {\n type: definePropType([String, Array, Object])\n },\n popperStyle: {\n type: definePropType([String, Array, Object])\n },\n referenceEl: {\n type: definePropType(Object)\n },\n triggerTargetEl: {\n type: definePropType(Object)\n },\n stopPopperMouseEvent: {\n type: Boolean,\n default: true\n },\n virtualTriggering: Boolean,\n zIndex: Number,\n ...useAriaProps([\"ariaLabel\"])\n});\nconst popperContentEmits = {\n mouseenter: (evt) => evt instanceof MouseEvent,\n mouseleave: (evt) => evt instanceof MouseEvent,\n focus: () => true,\n blur: () => true,\n close: () => true\n};\nconst usePopperCoreConfigProps = popperCoreConfigProps;\nconst usePopperContentProps = popperContentProps;\nconst usePopperContentEmits = popperContentEmits;\n\nexport { popperContentEmits, popperContentProps, popperCoreConfigProps, usePopperContentEmits, usePopperContentProps, usePopperCoreConfigProps };\n//# sourceMappingURL=content.mjs.map\n","import { isClient, unrefElement } from '@vueuse/core';\nimport '../../../utils/index.mjs';\n\nconst buildPopperOptions = (props, modifiers = []) => {\n const { placement, strategy, popperOptions } = props;\n const options = {\n placement,\n strategy,\n ...popperOptions,\n modifiers: [...genModifiers(props), ...modifiers]\n };\n deriveExtraModifiers(options, popperOptions == null ? void 0 : popperOptions.modifiers);\n return options;\n};\nconst unwrapMeasurableEl = ($el) => {\n if (!isClient)\n return;\n return unrefElement($el);\n};\nfunction genModifiers(options) {\n const { offset, gpuAcceleration, fallbackPlacements } = options;\n return [\n {\n name: \"offset\",\n options: {\n offset: [0, offset != null ? offset : 12]\n }\n },\n {\n name: \"preventOverflow\",\n options: {\n padding: {\n top: 2,\n bottom: 2,\n left: 5,\n right: 5\n }\n }\n },\n {\n name: \"flip\",\n options: {\n padding: 5,\n fallbackPlacements\n }\n },\n {\n name: \"computeStyles\",\n options: {\n gpuAcceleration\n }\n }\n ];\n}\nfunction deriveExtraModifiers(options, modifiers) {\n if (modifiers) {\n options.modifiers = [...options.modifiers, ...modifiers != null ? modifiers : []];\n }\n}\n\nexport { buildPopperOptions, unwrapMeasurableEl };\n//# sourceMappingURL=utils.mjs.map\n","import { inject, ref, computed, unref, watch, onMounted } from 'vue';\nimport { isUndefined } from 'lodash-unified';\nimport '../../../../hooks/index.mjs';\nimport { POPPER_INJECTION_KEY } from '../constants.mjs';\nimport { buildPopperOptions, unwrapMeasurableEl } from '../utils.mjs';\nimport { usePopper } from '../../../../hooks/use-popper/index.mjs';\n\nconst DEFAULT_ARROW_OFFSET = 0;\nconst usePopperContent = (props) => {\n const { popperInstanceRef, contentRef, triggerRef, role } = inject(POPPER_INJECTION_KEY, void 0);\n const arrowRef = ref();\n const arrowOffset = ref();\n const eventListenerModifier = computed(() => {\n return {\n name: \"eventListeners\",\n enabled: !!props.visible\n };\n });\n const arrowModifier = computed(() => {\n var _a;\n const arrowEl = unref(arrowRef);\n const offset = (_a = unref(arrowOffset)) != null ? _a : DEFAULT_ARROW_OFFSET;\n return {\n name: \"arrow\",\n enabled: !isUndefined(arrowEl),\n options: {\n element: arrowEl,\n padding: offset\n }\n };\n });\n const options = computed(() => {\n return {\n onFirstUpdate: () => {\n update();\n },\n ...buildPopperOptions(props, [\n unref(arrowModifier),\n unref(eventListenerModifier)\n ])\n };\n });\n const computedReference = computed(() => unwrapMeasurableEl(props.referenceEl) || unref(triggerRef));\n const { attributes, state, styles, update, forceUpdate, instanceRef } = usePopper(computedReference, contentRef, options);\n watch(instanceRef, (instance) => popperInstanceRef.value = instance);\n onMounted(() => {\n watch(() => {\n var _a;\n return (_a = unref(computedReference)) == null ? void 0 : _a.getBoundingClientRect();\n }, () => {\n update();\n });\n });\n return {\n attributes,\n arrowRef,\n contentRef,\n instanceRef,\n state,\n styles,\n role,\n forceUpdate,\n update\n };\n};\n\nexport { usePopperContent };\n//# sourceMappingURL=use-content.mjs.map\n","import { computed, unref, ref } from 'vue';\nimport '../../../../hooks/index.mjs';\nimport '../../../../utils/index.mjs';\nimport { useZIndex } from '../../../../hooks/use-z-index/index.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\nimport { isNumber } from '../../../../utils/types.mjs';\n\nconst usePopperContentDOM = (props, {\n attributes,\n styles,\n role\n}) => {\n const { nextZIndex } = useZIndex();\n const ns = useNamespace(\"popper\");\n const contentAttrs = computed(() => unref(attributes).popper);\n const contentZIndex = ref(isNumber(props.zIndex) ? props.zIndex : nextZIndex());\n const contentClass = computed(() => [\n ns.b(),\n ns.is(\"pure\", props.pure),\n ns.is(props.effect),\n props.popperClass\n ]);\n const contentStyle = computed(() => {\n return [\n { zIndex: unref(contentZIndex) },\n unref(styles).popper,\n props.popperStyle || {}\n ];\n });\n const ariaModal = computed(() => role.value === \"dialog\" ? \"false\" : void 0);\n const arrowStyle = computed(() => unref(styles).arrow || {});\n const updateZIndex = () => {\n contentZIndex.value = isNumber(props.zIndex) ? props.zIndex : nextZIndex();\n };\n return {\n ariaModal,\n arrowStyle,\n contentAttrs,\n contentClass,\n contentStyle,\n contentZIndex,\n updateZIndex\n };\n};\n\nexport { usePopperContentDOM };\n//# sourceMappingURL=use-content-dom.mjs.map\n","import { ref } from 'vue';\n\nconst usePopperContentFocusTrap = (props, emit) => {\n const trapped = ref(false);\n const focusStartRef = ref();\n const onFocusAfterTrapped = () => {\n emit(\"focus\");\n };\n const onFocusAfterReleased = (event) => {\n var _a;\n if (((_a = event.detail) == null ? void 0 : _a.focusReason) !== \"pointer\") {\n focusStartRef.value = \"first\";\n emit(\"blur\");\n }\n };\n const onFocusInTrap = (event) => {\n if (props.visible && !trapped.value) {\n if (event.target) {\n focusStartRef.value = event.target;\n }\n trapped.value = true;\n }\n };\n const onFocusoutPrevented = (event) => {\n if (!props.trapping) {\n if (event.detail.focusReason === \"pointer\") {\n event.preventDefault();\n }\n trapped.value = false;\n }\n };\n const onReleaseRequested = () => {\n trapped.value = false;\n emit(\"close\");\n };\n return {\n focusStartRef,\n trapped,\n onFocusAfterReleased,\n onFocusAfterTrapped,\n onFocusInTrap,\n onFocusoutPrevented,\n onReleaseRequested\n };\n};\n\nexport { usePopperContentFocusTrap };\n//# sourceMappingURL=use-focus-trap.mjs.map\n","import { defineComponent, inject, ref, provide, onMounted, watch, unref, onBeforeUnmount, openBlock, createElementBlock, mergeProps, createVNode, withCtx, renderSlot } from 'vue';\nimport { isNil } from 'lodash-unified';\nimport '../../../utils/index.mjs';\nimport '../../focus-trap/index.mjs';\nimport '../../form/index.mjs';\nimport { POPPER_CONTENT_INJECTION_KEY } from './constants.mjs';\nimport { popperContentProps, popperContentEmits } from './content.mjs';\nimport './composables/index.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { usePopperContentFocusTrap } from './composables/use-focus-trap.mjs';\nimport { usePopperContent } from './composables/use-content.mjs';\nimport { usePopperContentDOM } from './composables/use-content-dom.mjs';\nimport { formItemContextKey } from '../../form/src/constants.mjs';\nimport { NOOP } from '@vue/shared';\nimport { isElement } from '../../../utils/types.mjs';\nimport ElFocusTrap from '../../focus-trap/src/focus-trap.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElPopperContent\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: popperContentProps,\n emits: popperContentEmits,\n setup(__props, { expose, emit }) {\n const props = __props;\n const {\n focusStartRef,\n trapped,\n onFocusAfterReleased,\n onFocusAfterTrapped,\n onFocusInTrap,\n onFocusoutPrevented,\n onReleaseRequested\n } = usePopperContentFocusTrap(props, emit);\n const { attributes, arrowRef, contentRef, styles, instanceRef, role, update } = usePopperContent(props);\n const {\n ariaModal,\n arrowStyle,\n contentAttrs,\n contentClass,\n contentStyle,\n updateZIndex\n } = usePopperContentDOM(props, {\n styles,\n attributes,\n role\n });\n const formItemContext = inject(formItemContextKey, void 0);\n const arrowOffset = ref();\n provide(POPPER_CONTENT_INJECTION_KEY, {\n arrowStyle,\n arrowRef,\n arrowOffset\n });\n if (formItemContext) {\n provide(formItemContextKey, {\n ...formItemContext,\n addInputId: NOOP,\n removeInputId: NOOP\n });\n }\n let triggerTargetAriaStopWatch = void 0;\n const updatePopper = (shouldUpdateZIndex = true) => {\n update();\n shouldUpdateZIndex && updateZIndex();\n };\n const togglePopperAlive = () => {\n updatePopper(false);\n if (props.visible && props.focusOnShow) {\n trapped.value = true;\n } else if (props.visible === false) {\n trapped.value = false;\n }\n };\n onMounted(() => {\n watch(() => props.triggerTargetEl, (triggerTargetEl, prevTriggerTargetEl) => {\n triggerTargetAriaStopWatch == null ? void 0 : triggerTargetAriaStopWatch();\n triggerTargetAriaStopWatch = void 0;\n const el = unref(triggerTargetEl || contentRef.value);\n const prevEl = unref(prevTriggerTargetEl || contentRef.value);\n if (isElement(el)) {\n triggerTargetAriaStopWatch = watch([role, () => props.ariaLabel, ariaModal, () => props.id], (watches) => {\n ;\n [\"role\", \"aria-label\", \"aria-modal\", \"id\"].forEach((key, idx) => {\n isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]);\n });\n }, { immediate: true });\n }\n if (prevEl !== el && isElement(prevEl)) {\n ;\n [\"role\", \"aria-label\", \"aria-modal\", \"id\"].forEach((key) => {\n prevEl.removeAttribute(key);\n });\n }\n }, { immediate: true });\n watch(() => props.visible, togglePopperAlive, { immediate: true });\n });\n onBeforeUnmount(() => {\n triggerTargetAriaStopWatch == null ? void 0 : triggerTargetAriaStopWatch();\n triggerTargetAriaStopWatch = void 0;\n });\n expose({\n popperContentRef: contentRef,\n popperInstanceRef: instanceRef,\n updatePopper,\n contentStyle\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", mergeProps({\n ref_key: \"contentRef\",\n ref: contentRef\n }, unref(contentAttrs), {\n style: unref(contentStyle),\n class: unref(contentClass),\n tabindex: \"-1\",\n onMouseenter: (e) => _ctx.$emit(\"mouseenter\", e),\n onMouseleave: (e) => _ctx.$emit(\"mouseleave\", e)\n }), [\n createVNode(unref(ElFocusTrap), {\n trapped: unref(trapped),\n \"trap-on-focus-in\": true,\n \"focus-trap-el\": unref(contentRef),\n \"focus-start-el\": unref(focusStartRef),\n onFocusAfterTrapped: unref(onFocusAfterTrapped),\n onFocusAfterReleased: unref(onFocusAfterReleased),\n onFocusin: unref(onFocusInTrap),\n onFocusoutPrevented: unref(onFocusoutPrevented),\n onReleaseRequested: unref(onReleaseRequested)\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"trapped\", \"focus-trap-el\", \"focus-start-el\", \"onFocusAfterTrapped\", \"onFocusAfterReleased\", \"onFocusin\", \"onFocusoutPrevented\", \"onReleaseRequested\"])\n ], 16, [\"onMouseenter\", \"onMouseleave\"]);\n };\n }\n});\nvar ElPopperContent = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"content.vue\"]]);\n\nexport { ElPopperContent as default };\n//# sourceMappingURL=content2.mjs.map\n","import '../../utils/index.mjs';\nimport Popper from './src/popper2.mjs';\nexport { default as ElPopperArrow } from './src/arrow2.mjs';\nexport { default as ElPopperTrigger } from './src/trigger2.mjs';\nexport { default as ElPopperContent } from './src/content2.mjs';\nexport { Effect, popperProps, roleTypes, usePopperProps } from './src/popper.mjs';\nexport { popperTriggerProps, usePopperTriggerProps } from './src/trigger.mjs';\nexport { popperContentEmits, popperContentProps, popperCoreConfigProps, usePopperContentEmits, usePopperContentProps, usePopperCoreConfigProps } from './src/content.mjs';\nexport { popperArrowProps, usePopperArrowProps } from './src/arrow.mjs';\nexport { POPPER_CONTENT_INJECTION_KEY, POPPER_INJECTION_KEY } from './src/constants.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElPopper = withInstall(Popper);\n\nexport { ElPopper, ElPopper as default };\n//# sourceMappingURL=index.mjs.map\n","const TOOLTIP_INJECTION_KEY = Symbol(\"elTooltip\");\n\nexport { TOOLTIP_INJECTION_KEY };\n//# sourceMappingURL=constants.mjs.map\n","import '../../../utils/index.mjs';\nimport '../../popper/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useDelayedToggleProps } from '../../../hooks/use-delayed-toggle/index.mjs';\nimport { popperContentProps } from '../../popper/src/content.mjs';\nimport { useAriaProps } from '../../../hooks/use-aria/index.mjs';\n\nconst useTooltipContentProps = buildProps({\n ...useDelayedToggleProps,\n ...popperContentProps,\n appendTo: {\n type: definePropType([String, Object])\n },\n content: {\n type: String,\n default: \"\"\n },\n rawContent: Boolean,\n persistent: Boolean,\n visible: {\n type: definePropType(Boolean),\n default: null\n },\n transition: String,\n teleported: {\n type: Boolean,\n default: true\n },\n disabled: Boolean,\n ...useAriaProps([\"ariaLabel\"])\n});\n\nexport { useTooltipContentProps };\n//# sourceMappingURL=content.mjs.map\n","import '../../../utils/index.mjs';\nimport '../../popper/index.mjs';\nimport '../../../constants/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { popperTriggerProps } from '../../popper/src/trigger.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\n\nconst useTooltipTriggerProps = buildProps({\n ...popperTriggerProps,\n disabled: Boolean,\n trigger: {\n type: definePropType([String, Array]),\n default: \"hover\"\n },\n triggerKeys: {\n type: definePropType(Array),\n default: () => [EVENT_CODE.enter, EVENT_CODE.space]\n }\n});\n\nexport { useTooltipTriggerProps };\n//# sourceMappingURL=trigger.mjs.map\n","import '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport '../../popper/index.mjs';\nimport { useTooltipContentProps } from './content.mjs';\nimport { useTooltipTriggerProps } from './trigger.mjs';\nimport { createModelToggleComposable } from '../../../hooks/use-model-toggle/index.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\nimport { popperProps } from '../../popper/src/popper.mjs';\nimport { popperArrowProps } from '../../popper/src/arrow.mjs';\n\nconst {\n useModelToggleProps: useTooltipModelToggleProps,\n useModelToggleEmits: useTooltipModelToggleEmits,\n useModelToggle: useTooltipModelToggle\n} = createModelToggleComposable(\"visible\");\nconst useTooltipProps = buildProps({\n ...popperProps,\n ...useTooltipModelToggleProps,\n ...useTooltipContentProps,\n ...useTooltipTriggerProps,\n ...popperArrowProps,\n showArrow: {\n type: Boolean,\n default: true\n }\n});\nconst tooltipEmits = [\n ...useTooltipModelToggleEmits,\n \"before-show\",\n \"before-hide\",\n \"show\",\n \"hide\",\n \"open\",\n \"close\"\n];\n\nexport { tooltipEmits, useTooltipModelToggle, useTooltipModelToggleEmits, useTooltipModelToggleProps, useTooltipProps };\n//# sourceMappingURL=tooltip.mjs.map\n","import { unref } from 'vue';\nimport '../../../utils/index.mjs';\nimport { isArray } from '@vue/shared';\n\nconst isTriggerType = (trigger, type) => {\n if (isArray(trigger)) {\n return trigger.includes(type);\n }\n return trigger === type;\n};\nconst whenTrigger = (trigger, type, handler) => {\n return (e) => {\n isTriggerType(unref(trigger), type) && handler(e);\n };\n};\n\nexport { isTriggerType, whenTrigger };\n//# sourceMappingURL=utils.mjs.map\n","import { defineComponent, inject, ref, unref, toRef, openBlock, createBlock, normalizeClass, withCtx, renderSlot } from 'vue';\nimport '../../popper/index.mjs';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { TOOLTIP_INJECTION_KEY } from './constants.mjs';\nimport { useTooltipTriggerProps } from './trigger.mjs';\nimport { whenTrigger } from './utils.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { composeEventHandlers } from '../../../utils/dom/event.mjs';\nimport ElPopperTrigger from '../../popper/src/trigger2.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElTooltipTrigger\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: useTooltipTriggerProps,\n setup(__props, { expose }) {\n const props = __props;\n const ns = useNamespace(\"tooltip\");\n const { controlled, id, open, onOpen, onClose, onToggle } = inject(TOOLTIP_INJECTION_KEY, void 0);\n const triggerRef = ref(null);\n const stopWhenControlledOrDisabled = () => {\n if (unref(controlled) || props.disabled) {\n return true;\n }\n };\n const trigger = toRef(props, \"trigger\");\n const onMouseenter = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, \"hover\", onOpen));\n const onMouseleave = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, \"hover\", onClose));\n const onClick = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, \"click\", (e) => {\n if (e.button === 0) {\n onToggle(e);\n }\n }));\n const onFocus = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, \"focus\", onOpen));\n const onBlur = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, \"focus\", onClose));\n const onContextMenu = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, \"contextmenu\", (e) => {\n e.preventDefault();\n onToggle(e);\n }));\n const onKeydown = composeEventHandlers(stopWhenControlledOrDisabled, (e) => {\n const { code } = e;\n if (props.triggerKeys.includes(code)) {\n e.preventDefault();\n onToggle(e);\n }\n });\n expose({\n triggerRef\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(ElPopperTrigger), {\n id: unref(id),\n \"virtual-ref\": _ctx.virtualRef,\n open: unref(open),\n \"virtual-triggering\": _ctx.virtualTriggering,\n class: normalizeClass(unref(ns).e(\"trigger\")),\n onBlur: unref(onBlur),\n onClick: unref(onClick),\n onContextmenu: unref(onContextMenu),\n onFocus: unref(onFocus),\n onMouseenter: unref(onMouseenter),\n onMouseleave: unref(onMouseleave),\n onKeydown: unref(onKeydown)\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"id\", \"virtual-ref\", \"open\", \"virtual-triggering\", \"class\", \"onBlur\", \"onClick\", \"onContextmenu\", \"onFocus\", \"onMouseenter\", \"onMouseleave\", \"onKeydown\"]);\n };\n }\n});\nvar ElTooltipTrigger = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"trigger.vue\"]]);\n\nexport { ElTooltipTrigger as default };\n//# sourceMappingURL=trigger2.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\n\nconst teleportProps = buildProps({\n to: {\n type: definePropType([String, Object]),\n required: true\n },\n disabled: Boolean\n});\n\nexport { teleportProps };\n//# sourceMappingURL=teleport.mjs.map\n","import { defineComponent, renderSlot, openBlock, createBlock, Teleport as Teleport$1 } from 'vue';\nimport { teleportProps } from './teleport.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"teleport\",\n props: teleportProps,\n setup(__props) {\n return (_ctx, _cache) => {\n return _ctx.disabled ? renderSlot(_ctx.$slots, \"default\", { key: 0 }) : (openBlock(), createBlock(Teleport$1, {\n key: 1,\n to: _ctx.to\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 8, [\"to\"]));\n };\n }\n});\nvar Teleport = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"teleport.vue\"]]);\n\nexport { Teleport as default };\n//# sourceMappingURL=teleport2.mjs.map\n","import '../../utils/index.mjs';\nimport Teleport from './src/teleport2.mjs';\nexport { teleportProps } from './src/teleport.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElTeleport = withInstall(Teleport);\n\nexport { ElTeleport, ElTeleport as default };\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, ref, inject, computed, onBeforeUnmount, unref, watch, openBlock, createBlock, withCtx, createVNode, Transition, withDirectives, mergeProps, renderSlot, vShow, createCommentVNode } from 'vue';\nimport { onClickOutside } from '@vueuse/core';\nimport '../../../hooks/index.mjs';\nimport '../../../utils/index.mjs';\nimport '../../popper/index.mjs';\nimport { ElTeleport } from '../../teleport/index.mjs';\nimport { TOOLTIP_INJECTION_KEY } from './constants.mjs';\nimport { useTooltipContentProps } from './content.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { usePopperContainerId } from '../../../hooks/use-popper-container/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { composeEventHandlers } from '../../../utils/dom/event.mjs';\nimport ElPopperContent from '../../popper/src/content2.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElTooltipContent\",\n inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: useTooltipContentProps,\n setup(__props, { expose }) {\n const props = __props;\n const { selector } = usePopperContainerId();\n const ns = useNamespace(\"tooltip\");\n const contentRef = ref(null);\n let stopHandle;\n const {\n controlled,\n id,\n open,\n trigger,\n onClose,\n onOpen,\n onShow,\n onHide,\n onBeforeShow,\n onBeforeHide\n } = inject(TOOLTIP_INJECTION_KEY, void 0);\n const transitionClass = computed(() => {\n return props.transition || `${ns.namespace.value}-fade-in-linear`;\n });\n const persistentRef = computed(() => {\n if (process.env.NODE_ENV === \"test\") {\n return true;\n }\n return props.persistent;\n });\n onBeforeUnmount(() => {\n stopHandle == null ? void 0 : stopHandle();\n });\n const shouldRender = computed(() => {\n return unref(persistentRef) ? true : unref(open);\n });\n const shouldShow = computed(() => {\n return props.disabled ? false : unref(open);\n });\n const appendTo = computed(() => {\n return props.appendTo || selector.value;\n });\n const contentStyle = computed(() => {\n var _a;\n return (_a = props.style) != null ? _a : {};\n });\n const ariaHidden = ref(true);\n const onTransitionLeave = () => {\n onHide();\n ariaHidden.value = true;\n };\n const stopWhenControlled = () => {\n if (unref(controlled))\n return true;\n };\n const onContentEnter = composeEventHandlers(stopWhenControlled, () => {\n if (props.enterable && unref(trigger) === \"hover\") {\n onOpen();\n }\n });\n const onContentLeave = composeEventHandlers(stopWhenControlled, () => {\n if (unref(trigger) === \"hover\") {\n onClose();\n }\n });\n const onBeforeEnter = () => {\n var _a, _b;\n (_b = (_a = contentRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a);\n onBeforeShow == null ? void 0 : onBeforeShow();\n };\n const onBeforeLeave = () => {\n onBeforeHide == null ? void 0 : onBeforeHide();\n };\n const onAfterShow = () => {\n onShow();\n stopHandle = onClickOutside(computed(() => {\n var _a;\n return (_a = contentRef.value) == null ? void 0 : _a.popperContentRef;\n }), () => {\n if (unref(controlled))\n return;\n const $trigger = unref(trigger);\n if ($trigger !== \"hover\") {\n onClose();\n }\n });\n };\n const onBlur = () => {\n if (!props.virtualTriggering) {\n onClose();\n }\n };\n watch(() => unref(open), (val) => {\n if (!val) {\n stopHandle == null ? void 0 : stopHandle();\n } else {\n ariaHidden.value = false;\n }\n }, {\n flush: \"post\"\n });\n watch(() => props.content, () => {\n var _a, _b;\n (_b = (_a = contentRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a);\n });\n expose({\n contentRef\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(ElTeleport), {\n disabled: !_ctx.teleported,\n to: unref(appendTo)\n }, {\n default: withCtx(() => [\n createVNode(Transition, {\n name: unref(transitionClass),\n onAfterLeave: onTransitionLeave,\n onBeforeEnter,\n onAfterEnter: onAfterShow,\n onBeforeLeave\n }, {\n default: withCtx(() => [\n unref(shouldRender) ? withDirectives((openBlock(), createBlock(unref(ElPopperContent), mergeProps({\n key: 0,\n id: unref(id),\n ref_key: \"contentRef\",\n ref: contentRef\n }, _ctx.$attrs, {\n \"aria-label\": _ctx.ariaLabel,\n \"aria-hidden\": ariaHidden.value,\n \"boundaries-padding\": _ctx.boundariesPadding,\n \"fallback-placements\": _ctx.fallbackPlacements,\n \"gpu-acceleration\": _ctx.gpuAcceleration,\n offset: _ctx.offset,\n placement: _ctx.placement,\n \"popper-options\": _ctx.popperOptions,\n strategy: _ctx.strategy,\n effect: _ctx.effect,\n enterable: _ctx.enterable,\n pure: _ctx.pure,\n \"popper-class\": _ctx.popperClass,\n \"popper-style\": [_ctx.popperStyle, unref(contentStyle)],\n \"reference-el\": _ctx.referenceEl,\n \"trigger-target-el\": _ctx.triggerTargetEl,\n visible: unref(shouldShow),\n \"z-index\": _ctx.zIndex,\n onMouseenter: unref(onContentEnter),\n onMouseleave: unref(onContentLeave),\n onBlur,\n onClose: unref(onClose)\n }), {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 16, [\"id\", \"aria-label\", \"aria-hidden\", \"boundaries-padding\", \"fallback-placements\", \"gpu-acceleration\", \"offset\", \"placement\", \"popper-options\", \"strategy\", \"effect\", \"enterable\", \"pure\", \"popper-class\", \"popper-style\", \"reference-el\", \"trigger-target-el\", \"visible\", \"z-index\", \"onMouseenter\", \"onMouseleave\", \"onClose\"])), [\n [vShow, unref(shouldShow)]\n ]) : createCommentVNode(\"v-if\", true)\n ]),\n _: 3\n }, 8, [\"name\"])\n ]),\n _: 3\n }, 8, [\"disabled\", \"to\"]);\n };\n }\n});\nvar ElTooltipContent = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"content.vue\"]]);\n\nexport { ElTooltipContent as default };\n//# sourceMappingURL=content2.mjs.map\n","import { defineComponent, ref, unref, toRef, computed, provide, readonly, watch, onDeactivated, openBlock, createBlock, withCtx, createVNode, renderSlot, createCommentVNode, createElementBlock, toDisplayString } from 'vue';\nimport { ElPopper } from '../../popper/index.mjs';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { TOOLTIP_INJECTION_KEY } from './constants.mjs';\nimport { useTooltipProps, tooltipEmits, useTooltipModelToggle } from './tooltip.mjs';\nimport ElTooltipTrigger from './trigger2.mjs';\nimport ElTooltipContent from './content2.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { usePopperContainer } from '../../../hooks/use-popper-container/index.mjs';\nimport { useId } from '../../../hooks/use-id/index.mjs';\nimport { useDelayedToggle } from '../../../hooks/use-delayed-toggle/index.mjs';\nimport { isBoolean } from '../../../utils/types.mjs';\nimport ElPopperArrow from '../../popper/src/arrow2.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElTooltip\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: useTooltipProps,\n emits: tooltipEmits,\n setup(__props, { expose, emit }) {\n const props = __props;\n usePopperContainer();\n const id = useId();\n const popperRef = ref();\n const contentRef = ref();\n const updatePopper = () => {\n var _a;\n const popperComponent = unref(popperRef);\n if (popperComponent) {\n (_a = popperComponent.popperInstanceRef) == null ? void 0 : _a.update();\n }\n };\n const open = ref(false);\n const toggleReason = ref();\n const { show, hide, hasUpdateHandler } = useTooltipModelToggle({\n indicator: open,\n toggleReason\n });\n const { onOpen, onClose } = useDelayedToggle({\n showAfter: toRef(props, \"showAfter\"),\n hideAfter: toRef(props, \"hideAfter\"),\n autoClose: toRef(props, \"autoClose\"),\n open: show,\n close: hide\n });\n const controlled = computed(() => isBoolean(props.visible) && !hasUpdateHandler.value);\n provide(TOOLTIP_INJECTION_KEY, {\n controlled,\n id,\n open: readonly(open),\n trigger: toRef(props, \"trigger\"),\n onOpen: (event) => {\n onOpen(event);\n },\n onClose: (event) => {\n onClose(event);\n },\n onToggle: (event) => {\n if (unref(open)) {\n onClose(event);\n } else {\n onOpen(event);\n }\n },\n onShow: () => {\n emit(\"show\", toggleReason.value);\n },\n onHide: () => {\n emit(\"hide\", toggleReason.value);\n },\n onBeforeShow: () => {\n emit(\"before-show\", toggleReason.value);\n },\n onBeforeHide: () => {\n emit(\"before-hide\", toggleReason.value);\n },\n updatePopper\n });\n watch(() => props.disabled, (disabled) => {\n if (disabled && open.value) {\n open.value = false;\n }\n });\n const isFocusInsideContent = (event) => {\n var _a, _b;\n const popperContent = (_b = (_a = contentRef.value) == null ? void 0 : _a.contentRef) == null ? void 0 : _b.popperContentRef;\n const activeElement = (event == null ? void 0 : event.relatedTarget) || document.activeElement;\n return popperContent && popperContent.contains(activeElement);\n };\n onDeactivated(() => open.value && hide());\n expose({\n popperRef,\n contentRef,\n isFocusInsideContent,\n updatePopper,\n onOpen,\n onClose,\n hide\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(ElPopper), {\n ref_key: \"popperRef\",\n ref: popperRef,\n role: _ctx.role\n }, {\n default: withCtx(() => [\n createVNode(ElTooltipTrigger, {\n disabled: _ctx.disabled,\n trigger: _ctx.trigger,\n \"trigger-keys\": _ctx.triggerKeys,\n \"virtual-ref\": _ctx.virtualRef,\n \"virtual-triggering\": _ctx.virtualTriggering\n }, {\n default: withCtx(() => [\n _ctx.$slots.default ? renderSlot(_ctx.$slots, \"default\", { key: 0 }) : createCommentVNode(\"v-if\", true)\n ]),\n _: 3\n }, 8, [\"disabled\", \"trigger\", \"trigger-keys\", \"virtual-ref\", \"virtual-triggering\"]),\n createVNode(ElTooltipContent, {\n ref_key: \"contentRef\",\n ref: contentRef,\n \"aria-label\": _ctx.ariaLabel,\n \"boundaries-padding\": _ctx.boundariesPadding,\n content: _ctx.content,\n disabled: _ctx.disabled,\n effect: _ctx.effect,\n enterable: _ctx.enterable,\n \"fallback-placements\": _ctx.fallbackPlacements,\n \"hide-after\": _ctx.hideAfter,\n \"gpu-acceleration\": _ctx.gpuAcceleration,\n offset: _ctx.offset,\n persistent: _ctx.persistent,\n \"popper-class\": _ctx.popperClass,\n \"popper-style\": _ctx.popperStyle,\n placement: _ctx.placement,\n \"popper-options\": _ctx.popperOptions,\n pure: _ctx.pure,\n \"raw-content\": _ctx.rawContent,\n \"reference-el\": _ctx.referenceEl,\n \"trigger-target-el\": _ctx.triggerTargetEl,\n \"show-after\": _ctx.showAfter,\n strategy: _ctx.strategy,\n teleported: _ctx.teleported,\n transition: _ctx.transition,\n \"virtual-triggering\": _ctx.virtualTriggering,\n \"z-index\": _ctx.zIndex,\n \"append-to\": _ctx.appendTo\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"content\", {}, () => [\n _ctx.rawContent ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n innerHTML: _ctx.content\n }, null, 8, [\"innerHTML\"])) : (openBlock(), createElementBlock(\"span\", { key: 1 }, toDisplayString(_ctx.content), 1))\n ]),\n _ctx.showArrow ? (openBlock(), createBlock(unref(ElPopperArrow), {\n key: 0,\n \"arrow-offset\": _ctx.arrowOffset\n }, null, 8, [\"arrow-offset\"])) : createCommentVNode(\"v-if\", true)\n ]),\n _: 3\n }, 8, [\"aria-label\", \"boundaries-padding\", \"content\", \"disabled\", \"effect\", \"enterable\", \"fallback-placements\", \"hide-after\", \"gpu-acceleration\", \"offset\", \"persistent\", \"popper-class\", \"popper-style\", \"placement\", \"popper-options\", \"pure\", \"raw-content\", \"reference-el\", \"trigger-target-el\", \"show-after\", \"strategy\", \"teleported\", \"transition\", \"virtual-triggering\", \"z-index\", \"append-to\"])\n ]),\n _: 3\n }, 8, [\"role\"]);\n };\n }\n});\nvar Tooltip = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"tooltip.vue\"]]);\n\nexport { Tooltip as default };\n//# sourceMappingURL=tooltip2.mjs.map\n","import '../../utils/index.mjs';\nimport Tooltip from './src/tooltip2.mjs';\nexport { tooltipEmits, useTooltipModelToggle, useTooltipModelToggleEmits, useTooltipModelToggleProps, useTooltipProps } from './src/tooltip.mjs';\nexport { useTooltipTriggerProps } from './src/trigger.mjs';\nexport { useTooltipContentProps } from './src/content.mjs';\nexport { TOOLTIP_INJECTION_KEY } from './src/constants.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElTooltip = withInstall(Tooltip);\n\nexport { ElTooltip, ElTooltip as default };\n//# sourceMappingURL=index.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\n\nconst badgeProps = buildProps({\n value: {\n type: [String, Number],\n default: \"\"\n },\n max: {\n type: Number,\n default: 99\n },\n isDot: Boolean,\n hidden: Boolean,\n type: {\n type: String,\n values: [\"primary\", \"success\", \"warning\", \"info\", \"danger\"],\n default: \"danger\"\n },\n showZero: {\n type: Boolean,\n default: true\n },\n color: String,\n badgeStyle: {\n type: definePropType([String, Object, Array])\n },\n offset: {\n type: definePropType(Array),\n default: [0, 0]\n },\n badgeClass: {\n type: String\n }\n});\n\nexport { badgeProps };\n//# sourceMappingURL=badge.mjs.map\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, unref, renderSlot, createVNode, Transition, withCtx, withDirectives, createElementVNode, normalizeStyle, toDisplayString, vShow } from 'vue';\nimport '../../../hooks/index.mjs';\nimport '../../../utils/index.mjs';\nimport { badgeProps } from './badge.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { isNumber } from '../../../utils/types.mjs';\nimport { addUnit } from '../../../utils/dom/style.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElBadge\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: badgeProps,\n setup(__props, { expose }) {\n const props = __props;\n const ns = useNamespace(\"badge\");\n const content = computed(() => {\n if (props.isDot)\n return \"\";\n if (isNumber(props.value) && isNumber(props.max)) {\n if (props.max < props.value) {\n return `${props.max}+`;\n }\n return props.value === 0 && !props.showZero ? \"\" : `${props.value}`;\n }\n return `${props.value}`;\n });\n const style = computed(() => {\n var _a, _b, _c, _d, _e;\n return [\n {\n backgroundColor: props.color,\n marginRight: addUnit(-((_b = (_a = props.offset) == null ? void 0 : _a[0]) != null ? _b : 0)),\n marginTop: addUnit((_d = (_c = props.offset) == null ? void 0 : _c[1]) != null ? _d : 0)\n },\n (_e = props.badgeStyle) != null ? _e : {}\n ];\n });\n expose({\n content\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass(unref(ns).b())\n }, [\n renderSlot(_ctx.$slots, \"default\"),\n createVNode(Transition, {\n name: `${unref(ns).namespace.value}-zoom-in-center`,\n persisted: \"\"\n }, {\n default: withCtx(() => [\n withDirectives(createElementVNode(\"sup\", {\n class: normalizeClass([\n unref(ns).e(\"content\"),\n unref(ns).em(\"content\", _ctx.type),\n unref(ns).is(\"fixed\", !!_ctx.$slots.default),\n unref(ns).is(\"dot\", _ctx.isDot),\n _ctx.badgeClass\n ]),\n style: normalizeStyle(unref(style)),\n textContent: toDisplayString(unref(content))\n }, null, 14, [\"textContent\"]), [\n [vShow, !_ctx.hidden && (unref(content) || _ctx.isDot)]\n ])\n ]),\n _: 1\n }, 8, [\"name\"])\n ], 2);\n };\n }\n});\nvar Badge = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"badge.vue\"]]);\n\nexport { Badge as default };\n//# sourceMappingURL=badge2.mjs.map\n","import '../../utils/index.mjs';\nimport Badge from './src/badge2.mjs';\nexport { badgeProps } from './src/badge.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElBadge = withInstall(Badge);\n\nexport { ElBadge, ElBadge as default };\n//# sourceMappingURL=index.mjs.map\n","const buttonGroupContextKey = Symbol(\"buttonGroupContextKey\");\n\nexport { buttonGroupContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import { computed, inject, ref, useSlots, Text } from 'vue';\nimport '../../form/index.mjs';\nimport '../../config-provider/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { buttonGroupContextKey } from './constants.mjs';\nimport { useDeprecated } from '../../../hooks/use-deprecated/index.mjs';\nimport { useGlobalConfig } from '../../config-provider/src/hooks/use-global-config.mjs';\nimport { useFormItem } from '../../form/src/hooks/use-form-item.mjs';\nimport { useFormSize, useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';\n\nconst useButton = (props, emit) => {\n useDeprecated({\n from: \"type.text\",\n replacement: \"link\",\n version: \"3.0.0\",\n scope: \"props\",\n ref: \"https://element-plus.org/en-US/component/button.html#button-attributes\"\n }, computed(() => props.type === \"text\"));\n const buttonGroupContext = inject(buttonGroupContextKey, void 0);\n const globalConfig = useGlobalConfig(\"button\");\n const { form } = useFormItem();\n const _size = useFormSize(computed(() => buttonGroupContext == null ? void 0 : buttonGroupContext.size));\n const _disabled = useFormDisabled();\n const _ref = ref();\n const slots = useSlots();\n const _type = computed(() => props.type || (buttonGroupContext == null ? void 0 : buttonGroupContext.type) || \"\");\n const autoInsertSpace = computed(() => {\n var _a, _b, _c;\n return (_c = (_b = props.autoInsertSpace) != null ? _b : (_a = globalConfig.value) == null ? void 0 : _a.autoInsertSpace) != null ? _c : false;\n });\n const _props = computed(() => {\n if (props.tag === \"button\") {\n return {\n ariaDisabled: _disabled.value || props.loading,\n disabled: _disabled.value || props.loading,\n autofocus: props.autofocus,\n type: props.nativeType\n };\n }\n return {};\n });\n const shouldAddSpace = computed(() => {\n var _a;\n const defaultSlot = (_a = slots.default) == null ? void 0 : _a.call(slots);\n if (autoInsertSpace.value && (defaultSlot == null ? void 0 : defaultSlot.length) === 1) {\n const slot = defaultSlot[0];\n if ((slot == null ? void 0 : slot.type) === Text) {\n const text = slot.children;\n return /^\\p{Unified_Ideograph}{2}$/u.test(text.trim());\n }\n }\n return false;\n });\n const handleClick = (evt) => {\n if (_disabled.value || props.loading) {\n evt.stopPropagation();\n return;\n }\n if (props.nativeType === \"reset\") {\n form == null ? void 0 : form.resetFields();\n }\n emit(\"click\", evt);\n };\n return {\n _disabled,\n _size,\n _type,\n _ref,\n _props,\n shouldAddSpace,\n handleClick\n };\n};\n\nexport { useButton };\n//# sourceMappingURL=use-button.mjs.map\n","import '../../../hooks/index.mjs';\nimport '../../../utils/index.mjs';\nimport { Loading } from '@element-plus/icons-vue';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useSizeProp } from '../../../hooks/use-size/index.mjs';\nimport { iconPropType } from '../../../utils/vue/icon.mjs';\n\nconst buttonTypes = [\n \"default\",\n \"primary\",\n \"success\",\n \"warning\",\n \"info\",\n \"danger\",\n \"text\",\n \"\"\n];\nconst buttonNativeTypes = [\"button\", \"submit\", \"reset\"];\nconst buttonProps = buildProps({\n size: useSizeProp,\n disabled: Boolean,\n type: {\n type: String,\n values: buttonTypes,\n default: \"\"\n },\n icon: {\n type: iconPropType\n },\n nativeType: {\n type: String,\n values: buttonNativeTypes,\n default: \"button\"\n },\n loading: Boolean,\n loadingIcon: {\n type: iconPropType,\n default: () => Loading\n },\n plain: Boolean,\n text: Boolean,\n link: Boolean,\n bg: Boolean,\n autofocus: Boolean,\n round: Boolean,\n circle: Boolean,\n color: String,\n dark: Boolean,\n autoInsertSpace: {\n type: Boolean,\n default: void 0\n },\n tag: {\n type: definePropType([String, Object]),\n default: \"button\"\n }\n});\nconst buttonEmits = {\n click: (evt) => evt instanceof MouseEvent\n};\n\nexport { buttonEmits, buttonNativeTypes, buttonProps, buttonTypes };\n//# sourceMappingURL=button.mjs.map\n","/**\n * Take input from [0, n] and return it as [0, 1]\n * @hidden\n */\nexport function bound01(n, max) {\n if (isOnePointZero(n)) {\n n = '100%';\n }\n var isPercent = isPercentage(n);\n n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n)));\n // Automatically convert percentage into number\n if (isPercent) {\n n = parseInt(String(n * max), 10) / 100;\n }\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n // Convert into [0, 1] range if it isn't already\n if (max === 360) {\n // If n is a hue given in degrees,\n // wrap around out-of-range values into [0, 360] range\n // then convert into [0, 1].\n n = (n < 0 ? (n % max) + max : n % max) / parseFloat(String(max));\n }\n else {\n // If n not a hue given in degrees\n // Convert into [0, 1] range if it isn't already.\n n = (n % max) / parseFloat(String(max));\n }\n return n;\n}\n/**\n * Force a number between 0 and 1\n * @hidden\n */\nexport function clamp01(val) {\n return Math.min(1, Math.max(0, val));\n}\n/**\n * Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n * \n * @hidden\n */\nexport function isOnePointZero(n) {\n return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1;\n}\n/**\n * Check to see if string passed in is a percentage\n * @hidden\n */\nexport function isPercentage(n) {\n return typeof n === 'string' && n.indexOf('%') !== -1;\n}\n/**\n * Return a valid alpha value [0,1] with all invalid values being set to 1\n * @hidden\n */\nexport function boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n}\n/**\n * Replace a decimal with it's percentage value\n * @hidden\n */\nexport function convertToPercentage(n) {\n if (n <= 1) {\n return \"\".concat(Number(n) * 100, \"%\");\n }\n return n;\n}\n/**\n * Force a hex value to have 2 characters\n * @hidden\n */\nexport function pad2(c) {\n return c.length === 1 ? '0' + c : String(c);\n}\n","import { bound01, pad2 } from './util.js';\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n/**\n * Handle bounds / percentage checking to conform to CSS color spec\n * \n * *Assumes:* r, g, b in [0, 255] or [0, 1]\n * *Returns:* { r, g, b } in [0, 255]\n */\nexport function rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255,\n };\n}\n/**\n * Converts an RGB color value to HSL.\n * *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n * *Returns:* { h, s, l } in [0,1]\n */\nexport function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h = 0;\n var s = 0;\n var l = (max + min) / 2;\n if (max === min) {\n s = 0;\n h = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return { h: h, s: s, l: l };\n}\nfunction hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * (6 * t);\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n}\n/**\n * Converts an HSL color value to RGB.\n *\n * *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n * *Returns:* { r, g, b } in the set [0, 255]\n */\nexport function hslToRgb(h, s, l) {\n var r;\n var g;\n var b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n if (s === 0) {\n // achromatic\n g = l;\n b = l;\n r = l;\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color value to HSV\n *\n * *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n * *Returns:* { h, s, v } in [0,1]\n */\nexport function rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h = 0;\n var v = max;\n var d = max - min;\n var s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0; // achromatic\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n/**\n * Converts an HSV color value to RGB.\n *\n * *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n * *Returns:* { r, g, b } in the set [0, 255]\n */\nexport function hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - f * s);\n var t = v * (1 - (1 - f) * s);\n var mod = i % 6;\n var r = [v, q, p, p, t, v][mod];\n var g = [t, v, v, q, p, p][mod];\n var b = [p, p, t, v, v, q][mod];\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color to hex\n *\n * Assumes r, g, and b are contained in the set [0, 255]\n * Returns a 3 or 6 character hex\n */\nexport function rgbToHex(r, g, b, allow3Char) {\n var hex = [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n ];\n // Return a 3 character hex if possible\n if (allow3Char &&\n hex[0].startsWith(hex[0].charAt(1)) &&\n hex[1].startsWith(hex[1].charAt(1)) &&\n hex[2].startsWith(hex[2].charAt(1))) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join('');\n}\n/**\n * Converts an RGBA color plus alpha transparency to hex\n *\n * Assumes r, g, b are contained in the set [0, 255] and\n * a in [0, 1]. Returns a 4 or 8 character rgba hex\n */\n// eslint-disable-next-line max-params\nexport function rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n pad2(convertDecimalToHex(a)),\n ];\n // Return a 4 character hex if possible\n if (allow4Char &&\n hex[0].startsWith(hex[0].charAt(1)) &&\n hex[1].startsWith(hex[1].charAt(1)) &&\n hex[2].startsWith(hex[2].charAt(1)) &&\n hex[3].startsWith(hex[3].charAt(1))) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join('');\n}\n/**\n * Converts an RGBA color to an ARGB Hex8 string\n * Rarely used, but required for \"toFilter()\"\n */\nexport function rgbaToArgbHex(r, g, b, a) {\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n ];\n return hex.join('');\n}\n/** Converts a decimal to a hex value */\nexport function convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n/** Converts a hex value to a decimal */\nexport function convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n}\n/** Parse a base-16 hex value into a base-10 integer */\nexport function parseIntFromHex(val) {\n return parseInt(val, 16);\n}\nexport function numberInputToObject(color) {\n return {\n r: color >> 16,\n g: (color & 0xff00) >> 8,\n b: color & 0xff,\n };\n}\n","// https://github.com/bahamas10/css-color-names/blob/master/css-color-names.json\n/**\n * @hidden\n */\nexport var names = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n goldenrod: '#daa520',\n gold: '#ffd700',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavenderblush: '#fff0f5',\n lavender: '#e6e6fa',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n","/* eslint-disable @typescript-eslint/no-redundant-type-constituents */\nimport { convertHexToDecimal, hslToRgb, hsvToRgb, parseIntFromHex, rgbToRgb, } from './conversion.js';\nimport { names } from './css-color-names.js';\nimport { boundAlpha, convertToPercentage } from './util.js';\n/**\n * Given a string or object, convert that input to RGB\n *\n * Possible string inputs:\n * ```\n * \"red\"\n * \"#f00\" or \"f00\"\n * \"#ff0000\" or \"ff0000\"\n * \"#ff000000\" or \"ff000000\"\n * \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n * \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n * \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n * \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n * \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n * \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n * \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n * ```\n */\nexport function inputToRGB(color) {\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n if (typeof color === 'string') {\n color = stringInputToObject(color);\n }\n if (typeof color === 'object') {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === '%' ? 'prgb' : 'rgb';\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = 'hsv';\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = 'hsl';\n }\n if (Object.prototype.hasOwnProperty.call(color, 'a')) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a,\n };\n}\n// \nvar CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// \nvar CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\nvar CSS_UNIT = \"(?:\".concat(CSS_NUMBER, \")|(?:\").concat(CSS_INTEGER, \")\");\n// Actual matching.\n// Parentheses and commas are optional, but not required.\n// Whitespace can take the place of commas or opening paren\nvar PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\".concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")\\\\s*\\\\)?\");\nvar PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\".concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")\\\\s*\\\\)?\");\nvar matchers = {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp('rgb' + PERMISSIVE_MATCH3),\n rgba: new RegExp('rgba' + PERMISSIVE_MATCH4),\n hsl: new RegExp('hsl' + PERMISSIVE_MATCH3),\n hsla: new RegExp('hsla' + PERMISSIVE_MATCH4),\n hsv: new RegExp('hsv' + PERMISSIVE_MATCH3),\n hsva: new RegExp('hsva' + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n};\n/**\n * Permissive string parsing. Take in a number of formats, and output an object\n * based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n */\nexport function stringInputToObject(color) {\n color = color.trim().toLowerCase();\n if (color.length === 0) {\n return false;\n }\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color === 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: 'name' };\n }\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match = matchers.rgb.exec(color);\n if (match) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n match = matchers.rgba.exec(color);\n if (match) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n match = matchers.hsl.exec(color);\n if (match) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n match = matchers.hsla.exec(color);\n if (match) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n match = matchers.hsv.exec(color);\n if (match) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n match = matchers.hsva.exec(color);\n if (match) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n match = matchers.hex8.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? 'name' : 'hex8',\n };\n }\n match = matchers.hex6.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? 'name' : 'hex',\n };\n }\n match = matchers.hex4.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1] + match[1]),\n g: parseIntFromHex(match[2] + match[2]),\n b: parseIntFromHex(match[3] + match[3]),\n a: convertHexToDecimal(match[4] + match[4]),\n format: named ? 'name' : 'hex8',\n };\n }\n match = matchers.hex3.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1] + match[1]),\n g: parseIntFromHex(match[2] + match[2]),\n b: parseIntFromHex(match[3] + match[3]),\n format: named ? 'name' : 'hex',\n };\n }\n return false;\n}\n/**\n * Check to see if it looks like a CSS unit\n * (see `matchers` above for definition).\n */\nexport function isValidCSSUnit(color) {\n return Boolean(matchers.CSS_UNIT.exec(String(color)));\n}\n","import { numberInputToObject, rgbaToHex, rgbToHex, rgbToHsl, rgbToHsv } from './conversion.js';\nimport { names } from './css-color-names.js';\nimport { inputToRGB } from './format-input';\nimport { bound01, boundAlpha, clamp01 } from './util.js';\nvar TinyColor = /** @class */ (function () {\n function TinyColor(color, opts) {\n if (color === void 0) { color = ''; }\n if (opts === void 0) { opts = {}; }\n var _a;\n // If input is already a tinycolor, return itself\n if (color instanceof TinyColor) {\n // eslint-disable-next-line no-constructor-return\n return color;\n }\n if (typeof color === 'number') {\n color = numberInputToObject(color);\n }\n this.originalInput = color;\n var rgb = inputToRGB(color);\n this.originalInput = color;\n this.r = rgb.r;\n this.g = rgb.g;\n this.b = rgb.b;\n this.a = rgb.a;\n this.roundA = Math.round(100 * this.a) / 100;\n this.format = (_a = opts.format) !== null && _a !== void 0 ? _a : rgb.format;\n this.gradientType = opts.gradientType;\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this.r < 1) {\n this.r = Math.round(this.r);\n }\n if (this.g < 1) {\n this.g = Math.round(this.g);\n }\n if (this.b < 1) {\n this.b = Math.round(this.b);\n }\n this.isValid = rgb.ok;\n }\n TinyColor.prototype.isDark = function () {\n return this.getBrightness() < 128;\n };\n TinyColor.prototype.isLight = function () {\n return !this.isDark();\n };\n /**\n * Returns the perceived brightness of the color, from 0-255.\n */\n TinyColor.prototype.getBrightness = function () {\n // http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n };\n /**\n * Returns the perceived luminance of a color, from 0-1.\n */\n TinyColor.prototype.getLuminance = function () {\n // http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var R;\n var G;\n var B;\n var RsRGB = rgb.r / 255;\n var GsRGB = rgb.g / 255;\n var BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n };\n /**\n * Returns the alpha value of a color, from 0-1.\n */\n TinyColor.prototype.getAlpha = function () {\n return this.a;\n };\n /**\n * Sets the alpha value on the current color.\n *\n * @param alpha - The new alpha value. The accepted range is 0-1.\n */\n TinyColor.prototype.setAlpha = function (alpha) {\n this.a = boundAlpha(alpha);\n this.roundA = Math.round(100 * this.a) / 100;\n return this;\n };\n /**\n * Returns whether the color is monochrome.\n */\n TinyColor.prototype.isMonochrome = function () {\n var s = this.toHsl().s;\n return s === 0;\n };\n /**\n * Returns the object as a HSVA object.\n */\n TinyColor.prototype.toHsv = function () {\n var hsv = rgbToHsv(this.r, this.g, this.b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this.a };\n };\n /**\n * Returns the hsva values interpolated into a string with the following format:\n * \"hsva(xxx, xxx, xxx, xx)\".\n */\n TinyColor.prototype.toHsvString = function () {\n var hsv = rgbToHsv(this.r, this.g, this.b);\n var h = Math.round(hsv.h * 360);\n var s = Math.round(hsv.s * 100);\n var v = Math.round(hsv.v * 100);\n return this.a === 1 ? \"hsv(\".concat(h, \", \").concat(s, \"%, \").concat(v, \"%)\") : \"hsva(\".concat(h, \", \").concat(s, \"%, \").concat(v, \"%, \").concat(this.roundA, \")\");\n };\n /**\n * Returns the object as a HSLA object.\n */\n TinyColor.prototype.toHsl = function () {\n var hsl = rgbToHsl(this.r, this.g, this.b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this.a };\n };\n /**\n * Returns the hsla values interpolated into a string with the following format:\n * \"hsla(xxx, xxx, xxx, xx)\".\n */\n TinyColor.prototype.toHslString = function () {\n var hsl = rgbToHsl(this.r, this.g, this.b);\n var h = Math.round(hsl.h * 360);\n var s = Math.round(hsl.s * 100);\n var l = Math.round(hsl.l * 100);\n return this.a === 1 ? \"hsl(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%)\") : \"hsla(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%, \").concat(this.roundA, \")\");\n };\n /**\n * Returns the hex value of the color.\n * @param allow3Char will shorten hex value to 3 char if possible\n */\n TinyColor.prototype.toHex = function (allow3Char) {\n if (allow3Char === void 0) { allow3Char = false; }\n return rgbToHex(this.r, this.g, this.b, allow3Char);\n };\n /**\n * Returns the hex value of the color -with a # prefixed.\n * @param allow3Char will shorten hex value to 3 char if possible\n */\n TinyColor.prototype.toHexString = function (allow3Char) {\n if (allow3Char === void 0) { allow3Char = false; }\n return '#' + this.toHex(allow3Char);\n };\n /**\n * Returns the hex 8 value of the color.\n * @param allow4Char will shorten hex value to 4 char if possible\n */\n TinyColor.prototype.toHex8 = function (allow4Char) {\n if (allow4Char === void 0) { allow4Char = false; }\n return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char);\n };\n /**\n * Returns the hex 8 value of the color -with a # prefixed.\n * @param allow4Char will shorten hex value to 4 char if possible\n */\n TinyColor.prototype.toHex8String = function (allow4Char) {\n if (allow4Char === void 0) { allow4Char = false; }\n return '#' + this.toHex8(allow4Char);\n };\n /**\n * Returns the shorter hex value of the color depends on its alpha -with a # prefixed.\n * @param allowShortChar will shorten hex value to 3 or 4 char if possible\n */\n TinyColor.prototype.toHexShortString = function (allowShortChar) {\n if (allowShortChar === void 0) { allowShortChar = false; }\n return this.a === 1 ? this.toHexString(allowShortChar) : this.toHex8String(allowShortChar);\n };\n /**\n * Returns the object as a RGBA object.\n */\n TinyColor.prototype.toRgb = function () {\n return {\n r: Math.round(this.r),\n g: Math.round(this.g),\n b: Math.round(this.b),\n a: this.a,\n };\n };\n /**\n * Returns the RGBA values interpolated into a string with the following format:\n * \"RGBA(xxx, xxx, xxx, xx)\".\n */\n TinyColor.prototype.toRgbString = function () {\n var r = Math.round(this.r);\n var g = Math.round(this.g);\n var b = Math.round(this.b);\n return this.a === 1 ? \"rgb(\".concat(r, \", \").concat(g, \", \").concat(b, \")\") : \"rgba(\".concat(r, \", \").concat(g, \", \").concat(b, \", \").concat(this.roundA, \")\");\n };\n /**\n * Returns the object as a RGBA object.\n */\n TinyColor.prototype.toPercentageRgb = function () {\n var fmt = function (x) { return \"\".concat(Math.round(bound01(x, 255) * 100), \"%\"); };\n return {\n r: fmt(this.r),\n g: fmt(this.g),\n b: fmt(this.b),\n a: this.a,\n };\n };\n /**\n * Returns the RGBA relative values interpolated into a string\n */\n TinyColor.prototype.toPercentageRgbString = function () {\n var rnd = function (x) { return Math.round(bound01(x, 255) * 100); };\n return this.a === 1\n ? \"rgb(\".concat(rnd(this.r), \"%, \").concat(rnd(this.g), \"%, \").concat(rnd(this.b), \"%)\")\n : \"rgba(\".concat(rnd(this.r), \"%, \").concat(rnd(this.g), \"%, \").concat(rnd(this.b), \"%, \").concat(this.roundA, \")\");\n };\n /**\n * The 'real' name of the color -if there is one.\n */\n TinyColor.prototype.toName = function () {\n if (this.a === 0) {\n return 'transparent';\n }\n if (this.a < 1) {\n return false;\n }\n var hex = '#' + rgbToHex(this.r, this.g, this.b, false);\n for (var _i = 0, _a = Object.entries(names); _i < _a.length; _i++) {\n var _b = _a[_i], key = _b[0], value = _b[1];\n if (hex === value) {\n return key;\n }\n }\n return false;\n };\n TinyColor.prototype.toString = function (format) {\n var formatSet = Boolean(format);\n format = format !== null && format !== void 0 ? format : this.format;\n var formattedString = false;\n var hasAlpha = this.a < 1 && this.a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format.startsWith('hex') || format === 'name');\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === 'name' && this.a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === 'rgb') {\n formattedString = this.toRgbString();\n }\n if (format === 'prgb') {\n formattedString = this.toPercentageRgbString();\n }\n if (format === 'hex' || format === 'hex6') {\n formattedString = this.toHexString();\n }\n if (format === 'hex3') {\n formattedString = this.toHexString(true);\n }\n if (format === 'hex4') {\n formattedString = this.toHex8String(true);\n }\n if (format === 'hex8') {\n formattedString = this.toHex8String();\n }\n if (format === 'name') {\n formattedString = this.toName();\n }\n if (format === 'hsl') {\n formattedString = this.toHslString();\n }\n if (format === 'hsv') {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n };\n TinyColor.prototype.toNumber = function () {\n return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b);\n };\n TinyColor.prototype.clone = function () {\n return new TinyColor(this.toString());\n };\n /**\n * Lighten the color a given amount. Providing 100 will always return white.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.lighten = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return new TinyColor(hsl);\n };\n /**\n * Brighten the color a given amount, from 0 to 100.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.brighten = function (amount) {\n if (amount === void 0) { amount = 10; }\n var rgb = this.toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return new TinyColor(rgb);\n };\n /**\n * Darken the color a given amount, from 0 to 100.\n * Providing 100 will always return black.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.darken = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return new TinyColor(hsl);\n };\n /**\n * Mix the color with pure white, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return white.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.tint = function (amount) {\n if (amount === void 0) { amount = 10; }\n return this.mix('white', amount);\n };\n /**\n * Mix the color with pure black, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return black.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.shade = function (amount) {\n if (amount === void 0) { amount = 10; }\n return this.mix('black', amount);\n };\n /**\n * Desaturate the color a given amount, from 0 to 100.\n * Providing 100 will is the same as calling greyscale\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.desaturate = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return new TinyColor(hsl);\n };\n /**\n * Saturate the color a given amount, from 0 to 100.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.saturate = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return new TinyColor(hsl);\n };\n /**\n * Completely desaturates a color into greyscale.\n * Same as calling `desaturate(100)`\n */\n TinyColor.prototype.greyscale = function () {\n return this.desaturate(100);\n };\n /**\n * Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n * Values outside of this range will be wrapped into this range.\n */\n TinyColor.prototype.spin = function (amount) {\n var hsl = this.toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return new TinyColor(hsl);\n };\n /**\n * Mix the current color a given amount with another color, from 0 to 100.\n * 0 means no mixing (return current color).\n */\n TinyColor.prototype.mix = function (color, amount) {\n if (amount === void 0) { amount = 50; }\n var rgb1 = this.toRgb();\n var rgb2 = new TinyColor(color).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a,\n };\n return new TinyColor(rgba);\n };\n TinyColor.prototype.analogous = function (results, slices) {\n if (results === void 0) { results = 6; }\n if (slices === void 0) { slices = 30; }\n var hsl = this.toHsl();\n var part = 360 / slices;\n var ret = [this];\n for (hsl.h = (hsl.h - ((part * results) >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(new TinyColor(hsl));\n }\n return ret;\n };\n /**\n * taken from https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js\n */\n TinyColor.prototype.complement = function () {\n var hsl = this.toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return new TinyColor(hsl);\n };\n TinyColor.prototype.monochromatic = function (results) {\n if (results === void 0) { results = 6; }\n var hsv = this.toHsv();\n var h = hsv.h;\n var s = hsv.s;\n var v = hsv.v;\n var res = [];\n var modification = 1 / results;\n while (results--) {\n res.push(new TinyColor({ h: h, s: s, v: v }));\n v = (v + modification) % 1;\n }\n return res;\n };\n TinyColor.prototype.splitcomplement = function () {\n var hsl = this.toHsl();\n var h = hsl.h;\n return [\n this,\n new TinyColor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),\n new TinyColor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l }),\n ];\n };\n /**\n * Compute how the color would appear on a background\n */\n TinyColor.prototype.onBackground = function (background) {\n var fg = this.toRgb();\n var bg = new TinyColor(background).toRgb();\n var alpha = fg.a + bg.a * (1 - fg.a);\n return new TinyColor({\n r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha,\n g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha,\n b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha,\n a: alpha,\n });\n };\n /**\n * Alias for `polyad(3)`\n */\n TinyColor.prototype.triad = function () {\n return this.polyad(3);\n };\n /**\n * Alias for `polyad(4)`\n */\n TinyColor.prototype.tetrad = function () {\n return this.polyad(4);\n };\n /**\n * Get polyad colors, like (for 1, 2, 3, 4, 5, 6, 7, 8, etc...)\n * monad, dyad, triad, tetrad, pentad, hexad, heptad, octad, etc...\n */\n TinyColor.prototype.polyad = function (n) {\n var hsl = this.toHsl();\n var h = hsl.h;\n var result = [this];\n var increment = 360 / n;\n for (var i = 1; i < n; i++) {\n result.push(new TinyColor({ h: (h + i * increment) % 360, s: hsl.s, l: hsl.l }));\n }\n return result;\n };\n /**\n * compare color vs current color\n */\n TinyColor.prototype.equals = function (color) {\n return this.toRgbString() === new TinyColor(color).toRgbString();\n };\n return TinyColor;\n}());\nexport { TinyColor };\n// kept for backwards compatability with v1\nexport function tinycolor(color, opts) {\n if (color === void 0) { color = ''; }\n if (opts === void 0) { opts = {}; }\n return new TinyColor(color, opts);\n}\n","import { computed } from 'vue';\nimport { TinyColor } from '@ctrl/tinycolor';\nimport '../../../hooks/index.mjs';\nimport '../../form/index.mjs';\nimport { useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nfunction darken(color, amount = 20) {\n return color.mix(\"#141414\", amount).toString();\n}\nfunction useButtonCustomStyle(props) {\n const _disabled = useFormDisabled();\n const ns = useNamespace(\"button\");\n return computed(() => {\n let styles = {};\n let buttonColor = props.color;\n if (buttonColor) {\n const match = buttonColor.match(/var\\((.*?)\\)/);\n if (match) {\n buttonColor = window.getComputedStyle(window.document.documentElement).getPropertyValue(match[1]);\n }\n const color = new TinyColor(buttonColor);\n const activeBgColor = props.dark ? color.tint(20).toString() : darken(color, 20);\n if (props.plain) {\n styles = ns.cssVarBlock({\n \"bg-color\": props.dark ? darken(color, 90) : color.tint(90).toString(),\n \"text-color\": buttonColor,\n \"border-color\": props.dark ? darken(color, 50) : color.tint(50).toString(),\n \"hover-text-color\": `var(${ns.cssVarName(\"color-white\")})`,\n \"hover-bg-color\": buttonColor,\n \"hover-border-color\": buttonColor,\n \"active-bg-color\": activeBgColor,\n \"active-text-color\": `var(${ns.cssVarName(\"color-white\")})`,\n \"active-border-color\": activeBgColor\n });\n if (_disabled.value) {\n styles[ns.cssVarBlockName(\"disabled-bg-color\")] = props.dark ? darken(color, 90) : color.tint(90).toString();\n styles[ns.cssVarBlockName(\"disabled-text-color\")] = props.dark ? darken(color, 50) : color.tint(50).toString();\n styles[ns.cssVarBlockName(\"disabled-border-color\")] = props.dark ? darken(color, 80) : color.tint(80).toString();\n }\n } else {\n const hoverBgColor = props.dark ? darken(color, 30) : color.tint(30).toString();\n const textColor = color.isDark() ? `var(${ns.cssVarName(\"color-white\")})` : `var(${ns.cssVarName(\"color-black\")})`;\n styles = ns.cssVarBlock({\n \"bg-color\": buttonColor,\n \"text-color\": textColor,\n \"border-color\": buttonColor,\n \"hover-bg-color\": hoverBgColor,\n \"hover-text-color\": textColor,\n \"hover-border-color\": hoverBgColor,\n \"active-bg-color\": activeBgColor,\n \"active-border-color\": activeBgColor\n });\n if (_disabled.value) {\n const disabledButtonColor = props.dark ? darken(color, 50) : color.tint(50).toString();\n styles[ns.cssVarBlockName(\"disabled-bg-color\")] = disabledButtonColor;\n styles[ns.cssVarBlockName(\"disabled-text-color\")] = props.dark ? \"rgba(255, 255, 255, 0.5)\" : `var(${ns.cssVarName(\"color-white\")})`;\n styles[ns.cssVarBlockName(\"disabled-border-color\")] = disabledButtonColor;\n }\n }\n }\n return styles;\n });\n}\n\nexport { darken, useButtonCustomStyle };\n//# sourceMappingURL=button-custom.mjs.map\n","import { defineComponent, computed, openBlock, createBlock, resolveDynamicComponent, mergeProps, unref, withCtx, createElementBlock, Fragment, renderSlot, normalizeClass, createCommentVNode } from 'vue';\nimport { ElIcon } from '../../icon/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { useButton } from './use-button.mjs';\nimport { buttonProps, buttonEmits } from './button.mjs';\nimport { useButtonCustomStyle } from './button-custom.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElButton\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: buttonProps,\n emits: buttonEmits,\n setup(__props, { expose, emit }) {\n const props = __props;\n const buttonStyle = useButtonCustomStyle(props);\n const ns = useNamespace(\"button\");\n const { _ref, _size, _type, _disabled, _props, shouldAddSpace, handleClick } = useButton(props, emit);\n const buttonKls = computed(() => [\n ns.b(),\n ns.m(_type.value),\n ns.m(_size.value),\n ns.is(\"disabled\", _disabled.value),\n ns.is(\"loading\", props.loading),\n ns.is(\"plain\", props.plain),\n ns.is(\"round\", props.round),\n ns.is(\"circle\", props.circle),\n ns.is(\"text\", props.text),\n ns.is(\"link\", props.link),\n ns.is(\"has-bg\", props.bg)\n ]);\n expose({\n ref: _ref,\n size: _size,\n type: _type,\n disabled: _disabled,\n shouldAddSpace\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(resolveDynamicComponent(_ctx.tag), mergeProps({\n ref_key: \"_ref\",\n ref: _ref\n }, unref(_props), {\n class: unref(buttonKls),\n style: unref(buttonStyle),\n onClick: unref(handleClick)\n }), {\n default: withCtx(() => [\n _ctx.loading ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n _ctx.$slots.loading ? renderSlot(_ctx.$slots, \"loading\", { key: 0 }) : (openBlock(), createBlock(unref(ElIcon), {\n key: 1,\n class: normalizeClass(unref(ns).is(\"loading\"))\n }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent(_ctx.loadingIcon)))\n ]),\n _: 1\n }, 8, [\"class\"]))\n ], 64)) : _ctx.icon || _ctx.$slots.icon ? (openBlock(), createBlock(unref(ElIcon), { key: 1 }, {\n default: withCtx(() => [\n _ctx.icon ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.icon), { key: 0 })) : renderSlot(_ctx.$slots, \"icon\", { key: 1 })\n ]),\n _: 3\n })) : createCommentVNode(\"v-if\", true),\n _ctx.$slots.default ? (openBlock(), createElementBlock(\"span\", {\n key: 2,\n class: normalizeClass({ [unref(ns).em(\"text\", \"expand\")]: unref(shouldAddSpace) })\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 2)) : createCommentVNode(\"v-if\", true)\n ]),\n _: 3\n }, 16, [\"class\", \"style\", \"onClick\"]);\n };\n }\n});\nvar Button = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"button.vue\"]]);\n\nexport { Button as default };\n//# sourceMappingURL=button2.mjs.map\n","import { buttonProps } from './button.mjs';\n\nconst buttonGroupProps = {\n size: buttonProps.size,\n type: buttonProps.type\n};\n\nexport { buttonGroupProps };\n//# sourceMappingURL=button-group.mjs.map\n","import { defineComponent, provide, reactive, toRef, openBlock, createElementBlock, normalizeClass, unref, renderSlot } from 'vue';\nimport '../../../hooks/index.mjs';\nimport { buttonGroupProps } from './button-group.mjs';\nimport { buttonGroupContextKey } from './constants.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElButtonGroup\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: buttonGroupProps,\n setup(__props) {\n const props = __props;\n provide(buttonGroupContextKey, reactive({\n size: toRef(props, \"size\"),\n type: toRef(props, \"type\")\n }));\n const ns = useNamespace(\"button\");\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass(unref(ns).b(\"group\"))\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 2);\n };\n }\n});\nvar ButtonGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"button-group.vue\"]]);\n\nexport { ButtonGroup as default };\n//# sourceMappingURL=button-group2.mjs.map\n","import '../../utils/index.mjs';\nimport Button from './src/button2.mjs';\nimport ButtonGroup from './src/button-group2.mjs';\nexport { buttonEmits, buttonNativeTypes, buttonProps, buttonTypes } from './src/button.mjs';\nexport { buttonGroupContextKey } from './src/constants.mjs';\nimport { withInstall, withNoopInstall } from '../../utils/vue/install.mjs';\n\nconst ElButton = withInstall(Button, {\n ButtonGroup\n});\nconst ElButtonGroup = withNoopInstall(ButtonGroup);\n\nexport { ElButton, ElButtonGroup, ElButton as default };\n//# sourceMappingURL=index.mjs.map\n","import '../../utils/index.mjs';\nimport { isClient } from '@vueuse/core';\nimport { isElement } from '../../utils/types.mjs';\n\nconst nodeList = /* @__PURE__ */ new Map();\nif (isClient) {\n let startClick;\n document.addEventListener(\"mousedown\", (e) => startClick = e);\n document.addEventListener(\"mouseup\", (e) => {\n if (startClick) {\n for (const handlers of nodeList.values()) {\n for (const { documentHandler } of handlers) {\n documentHandler(e, startClick);\n }\n }\n startClick = void 0;\n }\n });\n}\nfunction createDocumentHandler(el, binding) {\n let excludes = [];\n if (Array.isArray(binding.arg)) {\n excludes = binding.arg;\n } else if (isElement(binding.arg)) {\n excludes.push(binding.arg);\n }\n return function(mouseup, mousedown) {\n const popperRef = binding.instance.popperRef;\n const mouseUpTarget = mouseup.target;\n const mouseDownTarget = mousedown == null ? void 0 : mousedown.target;\n const isBound = !binding || !binding.instance;\n const isTargetExists = !mouseUpTarget || !mouseDownTarget;\n const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget);\n const isSelf = el === mouseUpTarget;\n const isTargetExcluded = excludes.length && excludes.some((item) => item == null ? void 0 : item.contains(mouseUpTarget)) || excludes.length && excludes.includes(mouseDownTarget);\n const isContainedByPopper = popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget));\n if (isBound || isTargetExists || isContainedByEl || isSelf || isTargetExcluded || isContainedByPopper) {\n return;\n }\n binding.value(mouseup, mousedown);\n };\n}\nconst ClickOutside = {\n beforeMount(el, binding) {\n if (!nodeList.has(el)) {\n nodeList.set(el, []);\n }\n nodeList.get(el).push({\n documentHandler: createDocumentHandler(el, binding),\n bindingFn: binding.value\n });\n },\n updated(el, binding) {\n if (!nodeList.has(el)) {\n nodeList.set(el, []);\n }\n const handlers = nodeList.get(el);\n const oldHandlerIndex = handlers.findIndex((item) => item.bindingFn === binding.oldValue);\n const newHandler = {\n documentHandler: createDocumentHandler(el, binding),\n bindingFn: binding.value\n };\n if (oldHandlerIndex >= 0) {\n handlers.splice(oldHandlerIndex, 1, newHandler);\n } else {\n handlers.push(newHandler);\n }\n },\n unmounted(el) {\n nodeList.delete(el);\n }\n};\n\nexport { ClickOutside as default };\n//# sourceMappingURL=index.mjs.map\n","import { nextTick } from 'vue';\nimport '../../utils/index.mjs';\nimport '../../constants/index.mjs';\nimport { EVENT_CODE } from '../../constants/aria.mjs';\nimport { obtainAllFocusableElements } from '../../utils/dom/aria.mjs';\n\nconst FOCUSABLE_CHILDREN = \"_trap-focus-children\";\nconst TRAP_FOCUS_HANDLER = \"_trap-focus-handler\";\nconst FOCUS_STACK = [];\nconst FOCUS_HANDLER = (e) => {\n var _a;\n if (FOCUS_STACK.length === 0)\n return;\n const focusableElement = FOCUS_STACK[FOCUS_STACK.length - 1][FOCUSABLE_CHILDREN];\n if (focusableElement.length > 0 && e.code === EVENT_CODE.tab) {\n if (focusableElement.length === 1) {\n e.preventDefault();\n if (document.activeElement !== focusableElement[0]) {\n focusableElement[0].focus();\n }\n return;\n }\n const goingBackward = e.shiftKey;\n const isFirst = e.target === focusableElement[0];\n const isLast = e.target === focusableElement[focusableElement.length - 1];\n if (isFirst && goingBackward) {\n e.preventDefault();\n focusableElement[focusableElement.length - 1].focus();\n }\n if (isLast && !goingBackward) {\n e.preventDefault();\n focusableElement[0].focus();\n }\n if (process.env.NODE_ENV === \"test\") {\n const index = focusableElement.indexOf(e.target);\n if (index !== -1) {\n (_a = focusableElement[goingBackward ? index - 1 : index + 1]) == null ? void 0 : _a.focus();\n }\n }\n }\n};\nconst TrapFocus = {\n beforeMount(el) {\n el[FOCUSABLE_CHILDREN] = obtainAllFocusableElements(el);\n FOCUS_STACK.push(el);\n if (FOCUS_STACK.length <= 1) {\n document.addEventListener(\"keydown\", FOCUS_HANDLER);\n }\n },\n updated(el) {\n nextTick(() => {\n el[FOCUSABLE_CHILDREN] = obtainAllFocusableElements(el);\n });\n },\n unmounted() {\n FOCUS_STACK.shift();\n if (FOCUS_STACK.length === 0) {\n document.removeEventListener(\"keydown\", FOCUS_HANDLER);\n }\n }\n};\n\nexport { FOCUSABLE_CHILDREN, TRAP_FOCUS_HANDLER, TrapFocus as default };\n//# sourceMappingURL=index.mjs.map\n","var v=!1,o,f,s,u,d,N,l,p,m,w,D,x,E,M,F;function a(){if(!v){v=!0;var e=navigator.userAgent,n=/(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(e),i=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(x=/\\b(iPhone|iP[ao]d)/.exec(e),E=/\\b(iP[ao]d)/.exec(e),w=/Android/i.exec(e),M=/FBAN\\/\\w+;/i.exec(e),F=/Mobile/i.exec(e),D=!!/Win64/.exec(e),n){o=n[1]?parseFloat(n[1]):n[5]?parseFloat(n[5]):NaN,o&&document&&document.documentMode&&(o=document.documentMode);var r=/(?:Trident\\/(\\d+.\\d+))/.exec(e);N=r?parseFloat(r[1])+4:o,f=n[2]?parseFloat(n[2]):NaN,s=n[3]?parseFloat(n[3]):NaN,u=n[4]?parseFloat(n[4]):NaN,u?(n=/(?:Chrome\\/(\\d+\\.\\d+))/.exec(e),d=n&&n[1]?parseFloat(n[1]):NaN):d=NaN}else o=f=s=d=u=NaN;if(i){if(i[1]){var t=/(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(e);l=t?parseFloat(t[1].replace(\"_\",\".\")):!0}else l=!1;p=!!i[2],m=!!i[3]}else l=p=m=!1}}var _={ie:function(){return a()||o},ieCompatibilityMode:function(){return a()||N>o},ie64:function(){return _.ie()&&D},firefox:function(){return a()||f},opera:function(){return a()||s},webkit:function(){return a()||u},safari:function(){return _.webkit()},chrome:function(){return a()||d},windows:function(){return a()||p},osx:function(){return a()||l},linux:function(){return a()||m},iphone:function(){return a()||x},mobile:function(){return a()||x||E||w||F},nativeApp:function(){return a()||M},android:function(){return a()||w},ipad:function(){return a()||E}},A=_;var c=!!(typeof window<\"u\"&&window.document&&window.document.createElement),U={canUseDOM:c,canUseWorkers:typeof Worker<\"u\",canUseEventListeners:c&&!!(window.addEventListener||window.attachEvent),canUseViewport:c&&!!window.screen,isInWorker:!c},h=U;var X;h.canUseDOM&&(X=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature(\"\",\"\")!==!0);function S(e,n){if(!h.canUseDOM||n&&!(\"addEventListener\"in document))return!1;var i=\"on\"+e,r=i in document;if(!r){var t=document.createElement(\"div\");t.setAttribute(i,\"return;\"),r=typeof t[i]==\"function\"}return!r&&X&&e===\"wheel\"&&(r=document.implementation.hasFeature(\"Events.wheel\",\"3.0\")),r}var b=S;var O=10,I=40,P=800;function T(e){var n=0,i=0,r=0,t=0;return\"detail\"in e&&(i=e.detail),\"wheelDelta\"in e&&(i=-e.wheelDelta/120),\"wheelDeltaY\"in e&&(i=-e.wheelDeltaY/120),\"wheelDeltaX\"in e&&(n=-e.wheelDeltaX/120),\"axis\"in e&&e.axis===e.HORIZONTAL_AXIS&&(n=i,i=0),r=n*O,t=i*O,\"deltaY\"in e&&(t=e.deltaY),\"deltaX\"in e&&(r=e.deltaX),(r||t)&&e.deltaMode&&(e.deltaMode==1?(r*=I,t*=I):(r*=P,t*=P)),r&&!n&&(n=r<1?-1:1),t&&!i&&(i=t<1?-1:1),{spinX:n,spinY:i,pixelX:r,pixelY:t}}T.getEventType=function(){return A.firefox()?\"DOMMouseScroll\":b(\"wheel\")?\"wheel\":\"mousewheel\"};var Y=T;export{Y as default};\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\n//# sourceMappingURL=index.mjs.map","import normalizeWheel from 'normalize-wheel-es';\n\nconst mousewheel = function(element, callback) {\n if (element && element.addEventListener) {\n const fn = function(event) {\n const normalized = normalizeWheel(event);\n callback && Reflect.apply(callback, this, [event, normalized]);\n };\n element.addEventListener(\"wheel\", fn, { passive: true });\n }\n};\nconst Mousewheel = {\n beforeMount(el, binding) {\n mousewheel(el, binding.value);\n }\n};\n\nexport { Mousewheel as default };\n//# sourceMappingURL=index.mjs.map\n","import '../../../constants/index.mjs';\nimport '../../../hooks/index.mjs';\nimport '../../../utils/index.mjs';\nimport { useSizeProp } from '../../../hooks/use-size/index.mjs';\nimport { useAriaProps } from '../../../hooks/use-aria/index.mjs';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { isString } from '@vue/shared';\nimport { isNumber, isBoolean } from '../../../utils/types.mjs';\n\nconst checkboxProps = {\n modelValue: {\n type: [Number, String, Boolean],\n default: void 0\n },\n label: {\n type: [String, Boolean, Number, Object],\n default: void 0\n },\n value: {\n type: [String, Boolean, Number, Object],\n default: void 0\n },\n indeterminate: Boolean,\n disabled: Boolean,\n checked: Boolean,\n name: {\n type: String,\n default: void 0\n },\n trueValue: {\n type: [String, Number],\n default: void 0\n },\n falseValue: {\n type: [String, Number],\n default: void 0\n },\n trueLabel: {\n type: [String, Number],\n default: void 0\n },\n falseLabel: {\n type: [String, Number],\n default: void 0\n },\n id: {\n type: String,\n default: void 0\n },\n border: Boolean,\n size: useSizeProp,\n tabindex: [String, Number],\n validateEvent: {\n type: Boolean,\n default: true\n },\n ...useAriaProps([\"ariaControls\"])\n};\nconst checkboxEmits = {\n [UPDATE_MODEL_EVENT]: (val) => isString(val) || isNumber(val) || isBoolean(val),\n change: (val) => isString(val) || isNumber(val) || isBoolean(val)\n};\n\nexport { checkboxEmits, checkboxProps };\n//# sourceMappingURL=checkbox.mjs.map\n","const checkboxGroupContextKey = Symbol(\"checkboxGroupContextKey\");\n\nexport { checkboxGroupContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import { inject, computed } from 'vue';\nimport '../../../form/index.mjs';\nimport '../../../../utils/index.mjs';\nimport { checkboxGroupContextKey } from '../constants.mjs';\nimport { isUndefined } from '../../../../utils/types.mjs';\nimport { useFormDisabled } from '../../../form/src/hooks/use-form-common-props.mjs';\n\nconst useCheckboxDisabled = ({\n model,\n isChecked\n}) => {\n const checkboxGroup = inject(checkboxGroupContextKey, void 0);\n const isLimitDisabled = computed(() => {\n var _a, _b;\n const max = (_a = checkboxGroup == null ? void 0 : checkboxGroup.max) == null ? void 0 : _a.value;\n const min = (_b = checkboxGroup == null ? void 0 : checkboxGroup.min) == null ? void 0 : _b.value;\n return !isUndefined(max) && model.value.length >= max && !isChecked.value || !isUndefined(min) && model.value.length <= min && isChecked.value;\n });\n const isDisabled = useFormDisabled(computed(() => (checkboxGroup == null ? void 0 : checkboxGroup.disabled.value) || isLimitDisabled.value));\n return {\n isDisabled,\n isLimitDisabled\n };\n};\n\nexport { useCheckboxDisabled };\n//# sourceMappingURL=use-checkbox-disabled.mjs.map\n","import { inject, getCurrentInstance, nextTick, computed, watch } from 'vue';\nimport '../../../form/index.mjs';\nimport '../../../../utils/index.mjs';\nimport { checkboxGroupContextKey } from '../constants.mjs';\nimport { useFormItem } from '../../../form/src/hooks/use-form-item.mjs';\nimport { debugWarn } from '../../../../utils/error.mjs';\n\nconst useCheckboxEvent = (props, {\n model,\n isLimitExceeded,\n hasOwnLabel,\n isDisabled,\n isLabeledByFormItem\n}) => {\n const checkboxGroup = inject(checkboxGroupContextKey, void 0);\n const { formItem } = useFormItem();\n const { emit } = getCurrentInstance();\n function getLabeledValue(value) {\n var _a, _b, _c, _d;\n return [true, props.trueValue, props.trueLabel].includes(value) ? (_b = (_a = props.trueValue) != null ? _a : props.trueLabel) != null ? _b : true : (_d = (_c = props.falseValue) != null ? _c : props.falseLabel) != null ? _d : false;\n }\n function emitChangeEvent(checked, e) {\n emit(\"change\", getLabeledValue(checked), e);\n }\n function handleChange(e) {\n if (isLimitExceeded.value)\n return;\n const target = e.target;\n emit(\"change\", getLabeledValue(target.checked), e);\n }\n async function onClickRoot(e) {\n if (isLimitExceeded.value)\n return;\n if (!hasOwnLabel.value && !isDisabled.value && isLabeledByFormItem.value) {\n const eventTargets = e.composedPath();\n const hasLabel = eventTargets.some((item) => item.tagName === \"LABEL\");\n if (!hasLabel) {\n model.value = getLabeledValue([false, props.falseValue, props.falseLabel].includes(model.value));\n await nextTick();\n emitChangeEvent(model.value, e);\n }\n }\n }\n const validateEvent = computed(() => (checkboxGroup == null ? void 0 : checkboxGroup.validateEvent) || props.validateEvent);\n watch(() => props.modelValue, () => {\n if (validateEvent.value) {\n formItem == null ? void 0 : formItem.validate(\"change\").catch((err) => debugWarn(err));\n }\n });\n return {\n handleChange,\n onClickRoot\n };\n};\n\nexport { useCheckboxEvent };\n//# sourceMappingURL=use-checkbox-event.mjs.map\n","import { ref, getCurrentInstance, inject, computed } from 'vue';\nimport '../../../../utils/index.mjs';\nimport '../../../../constants/index.mjs';\nimport { checkboxGroupContextKey } from '../constants.mjs';\nimport { isUndefined } from '../../../../utils/types.mjs';\nimport { isArray } from '@vue/shared';\nimport { UPDATE_MODEL_EVENT } from '../../../../constants/event.mjs';\n\nconst useCheckboxModel = (props) => {\n const selfModel = ref(false);\n const { emit } = getCurrentInstance();\n const checkboxGroup = inject(checkboxGroupContextKey, void 0);\n const isGroup = computed(() => isUndefined(checkboxGroup) === false);\n const isLimitExceeded = ref(false);\n const model = computed({\n get() {\n var _a, _b;\n return isGroup.value ? (_a = checkboxGroup == null ? void 0 : checkboxGroup.modelValue) == null ? void 0 : _a.value : (_b = props.modelValue) != null ? _b : selfModel.value;\n },\n set(val) {\n var _a, _b;\n if (isGroup.value && isArray(val)) {\n isLimitExceeded.value = ((_a = checkboxGroup == null ? void 0 : checkboxGroup.max) == null ? void 0 : _a.value) !== void 0 && val.length > (checkboxGroup == null ? void 0 : checkboxGroup.max.value) && val.length > model.value.length;\n isLimitExceeded.value === false && ((_b = checkboxGroup == null ? void 0 : checkboxGroup.changeEvent) == null ? void 0 : _b.call(checkboxGroup, val));\n } else {\n emit(UPDATE_MODEL_EVENT, val);\n selfModel.value = val;\n }\n }\n });\n return {\n model,\n isGroup,\n isLimitExceeded\n };\n};\n\nexport { useCheckboxModel };\n//# sourceMappingURL=use-checkbox-model.mjs.map\n","import { inject, ref, computed, toRaw } from 'vue';\nimport { isEqual } from 'lodash-unified';\nimport '../../../form/index.mjs';\nimport '../../../../utils/index.mjs';\nimport { checkboxGroupContextKey } from '../constants.mjs';\nimport { isPropAbsent, isBoolean } from '../../../../utils/types.mjs';\nimport { isArray, isObject } from '@vue/shared';\nimport { useFormSize } from '../../../form/src/hooks/use-form-common-props.mjs';\n\nconst useCheckboxStatus = (props, slots, { model }) => {\n const checkboxGroup = inject(checkboxGroupContextKey, void 0);\n const isFocused = ref(false);\n const actualValue = computed(() => {\n if (!isPropAbsent(props.value)) {\n return props.value;\n }\n return props.label;\n });\n const isChecked = computed(() => {\n const value = model.value;\n if (isBoolean(value)) {\n return value;\n } else if (isArray(value)) {\n if (isObject(actualValue.value)) {\n return value.map(toRaw).some((o) => isEqual(o, actualValue.value));\n } else {\n return value.map(toRaw).includes(actualValue.value);\n }\n } else if (value !== null && value !== void 0) {\n return value === props.trueValue || value === props.trueLabel;\n } else {\n return !!value;\n }\n });\n const checkboxButtonSize = useFormSize(computed(() => {\n var _a;\n return (_a = checkboxGroup == null ? void 0 : checkboxGroup.size) == null ? void 0 : _a.value;\n }), {\n prop: true\n });\n const checkboxSize = useFormSize(computed(() => {\n var _a;\n return (_a = checkboxGroup == null ? void 0 : checkboxGroup.size) == null ? void 0 : _a.value;\n }));\n const hasOwnLabel = computed(() => {\n return !!slots.default || !isPropAbsent(actualValue.value);\n });\n return {\n checkboxButtonSize,\n isChecked,\n isFocused,\n checkboxSize,\n hasOwnLabel,\n actualValue\n };\n};\n\nexport { useCheckboxStatus };\n//# sourceMappingURL=use-checkbox-status.mjs.map\n","import { computed } from 'vue';\nimport '../../../form/index.mjs';\nimport '../../../../utils/index.mjs';\nimport '../../../../hooks/index.mjs';\nimport { useCheckboxDisabled } from './use-checkbox-disabled.mjs';\nimport { useCheckboxEvent } from './use-checkbox-event.mjs';\nimport { useCheckboxModel } from './use-checkbox-model.mjs';\nimport { useCheckboxStatus } from './use-checkbox-status.mjs';\nimport { useFormItem, useFormItemInputId } from '../../../form/src/hooks/use-form-item.mjs';\nimport { isArray } from '@vue/shared';\nimport { useDeprecated } from '../../../../hooks/use-deprecated/index.mjs';\nimport { isPropAbsent } from '../../../../utils/types.mjs';\n\nconst useCheckbox = (props, slots) => {\n const { formItem: elFormItem } = useFormItem();\n const { model, isGroup, isLimitExceeded } = useCheckboxModel(props);\n const {\n isFocused,\n isChecked,\n checkboxButtonSize,\n checkboxSize,\n hasOwnLabel,\n actualValue\n } = useCheckboxStatus(props, slots, { model });\n const { isDisabled } = useCheckboxDisabled({ model, isChecked });\n const { inputId, isLabeledByFormItem } = useFormItemInputId(props, {\n formItemContext: elFormItem,\n disableIdGeneration: hasOwnLabel,\n disableIdManagement: isGroup\n });\n const { handleChange, onClickRoot } = useCheckboxEvent(props, {\n model,\n isLimitExceeded,\n hasOwnLabel,\n isDisabled,\n isLabeledByFormItem\n });\n const setStoreValue = () => {\n function addToStore() {\n var _a, _b;\n if (isArray(model.value) && !model.value.includes(actualValue.value)) {\n model.value.push(actualValue.value);\n } else {\n model.value = (_b = (_a = props.trueValue) != null ? _a : props.trueLabel) != null ? _b : true;\n }\n }\n props.checked && addToStore();\n };\n setStoreValue();\n useDeprecated({\n from: \"label act as value\",\n replacement: \"value\",\n version: \"3.0.0\",\n scope: \"el-checkbox\",\n ref: \"https://element-plus.org/en-US/component/checkbox.html\"\n }, computed(() => isGroup.value && isPropAbsent(props.value)));\n useDeprecated({\n from: \"true-label\",\n replacement: \"true-value\",\n version: \"3.0.0\",\n scope: \"el-checkbox\",\n ref: \"https://element-plus.org/en-US/component/checkbox.html\"\n }, computed(() => !!props.trueLabel));\n useDeprecated({\n from: \"false-label\",\n replacement: \"false-value\",\n version: \"3.0.0\",\n scope: \"el-checkbox\",\n ref: \"https://element-plus.org/en-US/component/checkbox.html\"\n }, computed(() => !!props.falseLabel));\n return {\n inputId,\n isLabeledByFormItem,\n isChecked,\n isDisabled,\n isFocused,\n checkboxButtonSize,\n checkboxSize,\n hasOwnLabel,\n model,\n actualValue,\n handleChange,\n onClickRoot\n };\n};\n\nexport { useCheckbox };\n//# sourceMappingURL=use-checkbox.mjs.map\n","import { defineComponent, useSlots, computed, openBlock, createBlock, resolveDynamicComponent, unref, normalizeClass, withCtx, createElementVNode, withDirectives, createElementBlock, isRef, withModifiers, vModelCheckbox, renderSlot, Fragment, createTextVNode, toDisplayString, createCommentVNode } from 'vue';\nimport '../../../hooks/index.mjs';\nimport { checkboxProps, checkboxEmits } from './checkbox.mjs';\nimport './composables/index.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useCheckbox } from './composables/use-checkbox.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElCheckbox\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: checkboxProps,\n emits: checkboxEmits,\n setup(__props) {\n const props = __props;\n const slots = useSlots();\n const {\n inputId,\n isLabeledByFormItem,\n isChecked,\n isDisabled,\n isFocused,\n checkboxSize,\n hasOwnLabel,\n model,\n actualValue,\n handleChange,\n onClickRoot\n } = useCheckbox(props, slots);\n const ns = useNamespace(\"checkbox\");\n const compKls = computed(() => {\n return [\n ns.b(),\n ns.m(checkboxSize.value),\n ns.is(\"disabled\", isDisabled.value),\n ns.is(\"bordered\", props.border),\n ns.is(\"checked\", isChecked.value)\n ];\n });\n const spanKls = computed(() => {\n return [\n ns.e(\"input\"),\n ns.is(\"disabled\", isDisabled.value),\n ns.is(\"checked\", isChecked.value),\n ns.is(\"indeterminate\", props.indeterminate),\n ns.is(\"focus\", isFocused.value)\n ];\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(resolveDynamicComponent(!unref(hasOwnLabel) && unref(isLabeledByFormItem) ? \"span\" : \"label\"), {\n class: normalizeClass(unref(compKls)),\n \"aria-controls\": _ctx.indeterminate ? _ctx.ariaControls : null,\n onClick: unref(onClickRoot)\n }, {\n default: withCtx(() => {\n var _a, _b;\n return [\n createElementVNode(\"span\", {\n class: normalizeClass(unref(spanKls))\n }, [\n _ctx.trueValue || _ctx.falseValue || _ctx.trueLabel || _ctx.falseLabel ? withDirectives((openBlock(), createElementBlock(\"input\", {\n key: 0,\n id: unref(inputId),\n \"onUpdate:modelValue\": ($event) => isRef(model) ? model.value = $event : null,\n class: normalizeClass(unref(ns).e(\"original\")),\n type: \"checkbox\",\n indeterminate: _ctx.indeterminate,\n name: _ctx.name,\n tabindex: _ctx.tabindex,\n disabled: unref(isDisabled),\n \"true-value\": (_a = _ctx.trueValue) != null ? _a : _ctx.trueLabel,\n \"false-value\": (_b = _ctx.falseValue) != null ? _b : _ctx.falseLabel,\n onChange: unref(handleChange),\n onFocus: ($event) => isFocused.value = true,\n onBlur: ($event) => isFocused.value = false,\n onClick: withModifiers(() => {\n }, [\"stop\"])\n }, null, 42, [\"id\", \"onUpdate:modelValue\", \"indeterminate\", \"name\", \"tabindex\", \"disabled\", \"true-value\", \"false-value\", \"onChange\", \"onFocus\", \"onBlur\", \"onClick\"])), [\n [vModelCheckbox, unref(model)]\n ]) : withDirectives((openBlock(), createElementBlock(\"input\", {\n key: 1,\n id: unref(inputId),\n \"onUpdate:modelValue\": ($event) => isRef(model) ? model.value = $event : null,\n class: normalizeClass(unref(ns).e(\"original\")),\n type: \"checkbox\",\n indeterminate: _ctx.indeterminate,\n disabled: unref(isDisabled),\n value: unref(actualValue),\n name: _ctx.name,\n tabindex: _ctx.tabindex,\n onChange: unref(handleChange),\n onFocus: ($event) => isFocused.value = true,\n onBlur: ($event) => isFocused.value = false,\n onClick: withModifiers(() => {\n }, [\"stop\"])\n }, null, 42, [\"id\", \"onUpdate:modelValue\", \"indeterminate\", \"disabled\", \"value\", \"name\", \"tabindex\", \"onChange\", \"onFocus\", \"onBlur\", \"onClick\"])), [\n [vModelCheckbox, unref(model)]\n ]),\n createElementVNode(\"span\", {\n class: normalizeClass(unref(ns).e(\"inner\"))\n }, null, 2)\n ], 2),\n unref(hasOwnLabel) ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n class: normalizeClass(unref(ns).e(\"label\"))\n }, [\n renderSlot(_ctx.$slots, \"default\"),\n !_ctx.$slots.default ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [\n createTextVNode(toDisplayString(_ctx.label), 1)\n ], 64)) : createCommentVNode(\"v-if\", true)\n ], 2)) : createCommentVNode(\"v-if\", true)\n ];\n }),\n _: 3\n }, 8, [\"class\", \"aria-controls\", \"onClick\"]);\n };\n }\n});\nvar Checkbox = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"checkbox.vue\"]]);\n\nexport { Checkbox as default };\n//# sourceMappingURL=checkbox2.mjs.map\n","import { defineComponent, useSlots, inject, computed, openBlock, createElementBlock, normalizeClass, unref, withDirectives, isRef, withModifiers, vModelCheckbox, normalizeStyle, renderSlot, createTextVNode, toDisplayString, createCommentVNode } from 'vue';\nimport '../../../hooks/index.mjs';\nimport { checkboxGroupContextKey } from './constants.mjs';\nimport './composables/index.mjs';\nimport { checkboxProps, checkboxEmits } from './checkbox.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useCheckbox } from './composables/use-checkbox.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElCheckboxButton\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: checkboxProps,\n emits: checkboxEmits,\n setup(__props) {\n const props = __props;\n const slots = useSlots();\n const {\n isFocused,\n isChecked,\n isDisabled,\n checkboxButtonSize,\n model,\n actualValue,\n handleChange\n } = useCheckbox(props, slots);\n const checkboxGroup = inject(checkboxGroupContextKey, void 0);\n const ns = useNamespace(\"checkbox\");\n const activeStyle = computed(() => {\n var _a, _b, _c, _d;\n const fillValue = (_b = (_a = checkboxGroup == null ? void 0 : checkboxGroup.fill) == null ? void 0 : _a.value) != null ? _b : \"\";\n return {\n backgroundColor: fillValue,\n borderColor: fillValue,\n color: (_d = (_c = checkboxGroup == null ? void 0 : checkboxGroup.textColor) == null ? void 0 : _c.value) != null ? _d : \"\",\n boxShadow: fillValue ? `-1px 0 0 0 ${fillValue}` : void 0\n };\n });\n const labelKls = computed(() => {\n return [\n ns.b(\"button\"),\n ns.bm(\"button\", checkboxButtonSize.value),\n ns.is(\"disabled\", isDisabled.value),\n ns.is(\"checked\", isChecked.value),\n ns.is(\"focus\", isFocused.value)\n ];\n });\n return (_ctx, _cache) => {\n var _a, _b;\n return openBlock(), createElementBlock(\"label\", {\n class: normalizeClass(unref(labelKls))\n }, [\n _ctx.trueValue || _ctx.falseValue || _ctx.trueLabel || _ctx.falseLabel ? withDirectives((openBlock(), createElementBlock(\"input\", {\n key: 0,\n \"onUpdate:modelValue\": ($event) => isRef(model) ? model.value = $event : null,\n class: normalizeClass(unref(ns).be(\"button\", \"original\")),\n type: \"checkbox\",\n name: _ctx.name,\n tabindex: _ctx.tabindex,\n disabled: unref(isDisabled),\n \"true-value\": (_a = _ctx.trueValue) != null ? _a : _ctx.trueLabel,\n \"false-value\": (_b = _ctx.falseValue) != null ? _b : _ctx.falseLabel,\n onChange: unref(handleChange),\n onFocus: ($event) => isFocused.value = true,\n onBlur: ($event) => isFocused.value = false,\n onClick: withModifiers(() => {\n }, [\"stop\"])\n }, null, 42, [\"onUpdate:modelValue\", \"name\", \"tabindex\", \"disabled\", \"true-value\", \"false-value\", \"onChange\", \"onFocus\", \"onBlur\", \"onClick\"])), [\n [vModelCheckbox, unref(model)]\n ]) : withDirectives((openBlock(), createElementBlock(\"input\", {\n key: 1,\n \"onUpdate:modelValue\": ($event) => isRef(model) ? model.value = $event : null,\n class: normalizeClass(unref(ns).be(\"button\", \"original\")),\n type: \"checkbox\",\n name: _ctx.name,\n tabindex: _ctx.tabindex,\n disabled: unref(isDisabled),\n value: unref(actualValue),\n onChange: unref(handleChange),\n onFocus: ($event) => isFocused.value = true,\n onBlur: ($event) => isFocused.value = false,\n onClick: withModifiers(() => {\n }, [\"stop\"])\n }, null, 42, [\"onUpdate:modelValue\", \"name\", \"tabindex\", \"disabled\", \"value\", \"onChange\", \"onFocus\", \"onBlur\", \"onClick\"])), [\n [vModelCheckbox, unref(model)]\n ]),\n _ctx.$slots.default || _ctx.label ? (openBlock(), createElementBlock(\"span\", {\n key: 2,\n class: normalizeClass(unref(ns).be(\"button\", \"inner\")),\n style: normalizeStyle(unref(isChecked) ? unref(activeStyle) : void 0)\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n createTextVNode(toDisplayString(_ctx.label), 1)\n ])\n ], 6)) : createCommentVNode(\"v-if\", true)\n ], 2);\n };\n }\n});\nvar CheckboxButton = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"checkbox-button.vue\"]]);\n\nexport { CheckboxButton as default };\n//# sourceMappingURL=checkbox-button.mjs.map\n","import '../../../constants/index.mjs';\nimport '../../../hooks/index.mjs';\nimport '../../../utils/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useSizeProp } from '../../../hooks/use-size/index.mjs';\nimport { useAriaProps } from '../../../hooks/use-aria/index.mjs';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { isArray } from '@vue/shared';\n\nconst checkboxGroupProps = buildProps({\n modelValue: {\n type: definePropType(Array),\n default: () => []\n },\n disabled: Boolean,\n min: Number,\n max: Number,\n size: useSizeProp,\n fill: String,\n textColor: String,\n tag: {\n type: String,\n default: \"div\"\n },\n validateEvent: {\n type: Boolean,\n default: true\n },\n ...useAriaProps([\"ariaLabel\"])\n});\nconst checkboxGroupEmits = {\n [UPDATE_MODEL_EVENT]: (val) => isArray(val),\n change: (val) => isArray(val)\n};\n\nexport { checkboxGroupEmits, checkboxGroupProps };\n//# sourceMappingURL=checkbox-group.mjs.map\n","import { defineComponent, nextTick, computed, provide, toRefs, watch, openBlock, createBlock, resolveDynamicComponent, unref, normalizeClass, withCtx, renderSlot } from 'vue';\nimport { pick } from 'lodash-unified';\nimport '../../../constants/index.mjs';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport '../../form/index.mjs';\nimport { checkboxGroupProps, checkboxGroupEmits } from './checkbox-group.mjs';\nimport { checkboxGroupContextKey } from './constants.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useFormItem, useFormItemInputId } from '../../form/src/hooks/use-form-item.mjs';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { debugWarn } from '../../../utils/error.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElCheckboxGroup\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: checkboxGroupProps,\n emits: checkboxGroupEmits,\n setup(__props, { emit }) {\n const props = __props;\n const ns = useNamespace(\"checkbox\");\n const { formItem } = useFormItem();\n const { inputId: groupId, isLabeledByFormItem } = useFormItemInputId(props, {\n formItemContext: formItem\n });\n const changeEvent = async (value) => {\n emit(UPDATE_MODEL_EVENT, value);\n await nextTick();\n emit(\"change\", value);\n };\n const modelValue = computed({\n get() {\n return props.modelValue;\n },\n set(val) {\n changeEvent(val);\n }\n });\n provide(checkboxGroupContextKey, {\n ...pick(toRefs(props), [\n \"size\",\n \"min\",\n \"max\",\n \"disabled\",\n \"validateEvent\",\n \"fill\",\n \"textColor\"\n ]),\n modelValue,\n changeEvent\n });\n watch(() => props.modelValue, () => {\n if (props.validateEvent) {\n formItem == null ? void 0 : formItem.validate(\"change\").catch((err) => debugWarn(err));\n }\n });\n return (_ctx, _cache) => {\n var _a;\n return openBlock(), createBlock(resolveDynamicComponent(_ctx.tag), {\n id: unref(groupId),\n class: normalizeClass(unref(ns).b(\"group\")),\n role: \"group\",\n \"aria-label\": !unref(isLabeledByFormItem) ? _ctx.ariaLabel || \"checkbox-group\" : void 0,\n \"aria-labelledby\": unref(isLabeledByFormItem) ? (_a = unref(formItem)) == null ? void 0 : _a.labelId : void 0\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"id\", \"class\", \"aria-label\", \"aria-labelledby\"]);\n };\n }\n});\nvar CheckboxGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"checkbox-group.vue\"]]);\n\nexport { CheckboxGroup as default };\n//# sourceMappingURL=checkbox-group2.mjs.map\n","import '../../utils/index.mjs';\nimport Checkbox from './src/checkbox2.mjs';\nimport CheckboxButton from './src/checkbox-button.mjs';\nimport CheckboxGroup from './src/checkbox-group2.mjs';\nexport { checkboxGroupEmits, checkboxGroupProps } from './src/checkbox-group.mjs';\nexport { checkboxEmits, checkboxProps } from './src/checkbox.mjs';\nexport { checkboxGroupContextKey } from './src/constants.mjs';\nimport { withInstall, withNoopInstall } from '../../utils/vue/install.mjs';\n\nconst ElCheckbox = withInstall(Checkbox, {\n CheckboxButton,\n CheckboxGroup\n});\nconst ElCheckboxButton = withNoopInstall(CheckboxButton);\nconst ElCheckboxGroup = withNoopInstall(CheckboxGroup);\n\nexport { ElCheckbox, ElCheckboxButton, ElCheckboxGroup, ElCheckbox as default };\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, createVNode, renderSlot, h } from 'vue';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useSameTarget } from '../../../hooks/use-same-target/index.mjs';\nimport { PatchFlags } from '../../../utils/vue/vnode.mjs';\n\nconst overlayProps = buildProps({\n mask: {\n type: Boolean,\n default: true\n },\n customMaskEvent: Boolean,\n overlayClass: {\n type: definePropType([\n String,\n Array,\n Object\n ])\n },\n zIndex: {\n type: definePropType([String, Number])\n }\n});\nconst overlayEmits = {\n click: (evt) => evt instanceof MouseEvent\n};\nconst BLOCK = \"overlay\";\nvar Overlay = defineComponent({\n name: \"ElOverlay\",\n props: overlayProps,\n emits: overlayEmits,\n setup(props, { slots, emit }) {\n const ns = useNamespace(BLOCK);\n const onMaskClick = (e) => {\n emit(\"click\", e);\n };\n const { onClick, onMousedown, onMouseup } = useSameTarget(props.customMaskEvent ? void 0 : onMaskClick);\n return () => {\n return props.mask ? createVNode(\"div\", {\n class: [ns.b(), props.overlayClass],\n style: {\n zIndex: props.zIndex\n },\n onClick,\n onMousedown,\n onMouseup\n }, [renderSlot(slots, \"default\")], PatchFlags.STYLE | PatchFlags.CLASS | PatchFlags.PROPS, [\"onClick\", \"onMouseup\", \"onMousedown\"]) : h(\"div\", {\n class: props.overlayClass,\n style: {\n zIndex: props.zIndex,\n position: \"fixed\",\n top: \"0px\",\n right: \"0px\",\n bottom: \"0px\",\n left: \"0px\"\n }\n }, [renderSlot(slots, \"default\")]);\n };\n }\n});\n\nexport { Overlay as default, overlayEmits, overlayProps };\n//# sourceMappingURL=overlay.mjs.map\n","import Overlay from './src/overlay.mjs';\nexport { overlayEmits, overlayProps } from './src/overlay.mjs';\n\nconst ElOverlay = Overlay;\n\nexport { ElOverlay, ElOverlay as default };\n//# sourceMappingURL=index.mjs.map\n","const dialogInjectionKey = Symbol(\"dialogInjectionKey\");\n\nexport { dialogInjectionKey };\n//# sourceMappingURL=constants.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\nimport { iconPropType } from '../../../utils/vue/icon.mjs';\n\nconst dialogContentProps = buildProps({\n center: Boolean,\n alignCenter: Boolean,\n closeIcon: {\n type: iconPropType\n },\n draggable: Boolean,\n overflow: Boolean,\n fullscreen: Boolean,\n showClose: {\n type: Boolean,\n default: true\n },\n title: {\n type: String,\n default: \"\"\n },\n ariaLevel: {\n type: String,\n default: \"2\"\n }\n});\nconst dialogContentEmits = {\n close: () => true\n};\n\nexport { dialogContentEmits, dialogContentProps };\n//# sourceMappingURL=dialog-content.mjs.map\n","import { defineComponent, inject, computed, openBlock, createElementBlock, unref, normalizeClass, normalizeStyle, createElementVNode, renderSlot, toDisplayString, createVNode, withCtx, createBlock, resolveDynamicComponent, createCommentVNode } from 'vue';\nimport { ElIcon } from '../../icon/index.mjs';\nimport '../../focus-trap/index.mjs';\nimport '../../../hooks/index.mjs';\nimport '../../../utils/index.mjs';\nimport { dialogInjectionKey } from './constants.mjs';\nimport { dialogContentProps, dialogContentEmits } from './dialog-content.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useLocale } from '../../../hooks/use-locale/index.mjs';\nimport { CloseComponents } from '../../../utils/vue/icon.mjs';\nimport { FOCUS_TRAP_INJECTION_KEY } from '../../focus-trap/src/tokens.mjs';\nimport { composeRefs } from '../../../utils/vue/refs.mjs';\nimport { useDraggable } from '../../../hooks/use-draggable/index.mjs';\n\nconst __default__ = defineComponent({ name: \"ElDialogContent\" });\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: dialogContentProps,\n emits: dialogContentEmits,\n setup(__props, { expose }) {\n const props = __props;\n const { t } = useLocale();\n const { Close } = CloseComponents;\n const { dialogRef, headerRef, bodyId, ns, style } = inject(dialogInjectionKey);\n const { focusTrapRef } = inject(FOCUS_TRAP_INJECTION_KEY);\n const dialogKls = computed(() => [\n ns.b(),\n ns.is(\"fullscreen\", props.fullscreen),\n ns.is(\"draggable\", props.draggable),\n ns.is(\"align-center\", props.alignCenter),\n { [ns.m(\"center\")]: props.center }\n ]);\n const composedDialogRef = composeRefs(focusTrapRef, dialogRef);\n const draggable = computed(() => props.draggable);\n const overflow = computed(() => props.overflow);\n const { resetPosition } = useDraggable(dialogRef, headerRef, draggable, overflow);\n expose({\n resetPosition\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref: unref(composedDialogRef),\n class: normalizeClass(unref(dialogKls)),\n style: normalizeStyle(unref(style)),\n tabindex: \"-1\"\n }, [\n createElementVNode(\"header\", {\n ref_key: \"headerRef\",\n ref: headerRef,\n class: normalizeClass([unref(ns).e(\"header\"), { \"show-close\": _ctx.showClose }])\n }, [\n renderSlot(_ctx.$slots, \"header\", {}, () => [\n createElementVNode(\"span\", {\n role: \"heading\",\n \"aria-level\": _ctx.ariaLevel,\n class: normalizeClass(unref(ns).e(\"title\"))\n }, toDisplayString(_ctx.title), 11, [\"aria-level\"])\n ]),\n _ctx.showClose ? (openBlock(), createElementBlock(\"button\", {\n key: 0,\n \"aria-label\": unref(t)(\"el.dialog.close\"),\n class: normalizeClass(unref(ns).e(\"headerbtn\")),\n type: \"button\",\n onClick: ($event) => _ctx.$emit(\"close\")\n }, [\n createVNode(unref(ElIcon), {\n class: normalizeClass(unref(ns).e(\"close\"))\n }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent(_ctx.closeIcon || unref(Close))))\n ]),\n _: 1\n }, 8, [\"class\"])\n ], 10, [\"aria-label\", \"onClick\"])) : createCommentVNode(\"v-if\", true)\n ], 2),\n createElementVNode(\"div\", {\n id: unref(bodyId),\n class: normalizeClass(unref(ns).e(\"body\"))\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 10, [\"id\"]),\n _ctx.$slots.footer ? (openBlock(), createElementBlock(\"footer\", {\n key: 0,\n class: normalizeClass(unref(ns).e(\"footer\"))\n }, [\n renderSlot(_ctx.$slots, \"footer\")\n ], 2)) : createCommentVNode(\"v-if\", true)\n ], 6);\n };\n }\n});\nvar ElDialogContent = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"dialog-content.vue\"]]);\n\nexport { ElDialogContent as default };\n//# sourceMappingURL=dialog-content2.mjs.map\n","import '../../../utils/index.mjs';\nimport '../../../constants/index.mjs';\nimport { dialogContentProps } from './dialog-content.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { isBoolean } from '../../../utils/types.mjs';\n\nconst dialogProps = buildProps({\n ...dialogContentProps,\n appendToBody: Boolean,\n appendTo: {\n type: definePropType([String, Object]),\n default: \"body\"\n },\n beforeClose: {\n type: definePropType(Function)\n },\n destroyOnClose: Boolean,\n closeOnClickModal: {\n type: Boolean,\n default: true\n },\n closeOnPressEscape: {\n type: Boolean,\n default: true\n },\n lockScroll: {\n type: Boolean,\n default: true\n },\n modal: {\n type: Boolean,\n default: true\n },\n openDelay: {\n type: Number,\n default: 0\n },\n closeDelay: {\n type: Number,\n default: 0\n },\n top: {\n type: String\n },\n modelValue: Boolean,\n modalClass: String,\n width: {\n type: [String, Number]\n },\n zIndex: {\n type: Number\n },\n trapFocus: Boolean,\n headerAriaLevel: {\n type: String,\n default: \"2\"\n }\n});\nconst dialogEmits = {\n open: () => true,\n opened: () => true,\n close: () => true,\n closed: () => true,\n [UPDATE_MODEL_EVENT]: (value) => isBoolean(value),\n openAutoFocus: () => true,\n closeAutoFocus: () => true\n};\n\nexport { dialogEmits, dialogProps };\n//# sourceMappingURL=dialog.mjs.map\n","import { getCurrentInstance, ref, computed, watch, nextTick, onMounted } from 'vue';\nimport { useTimeoutFn, isClient } from '@vueuse/core';\nimport { isUndefined } from 'lodash-unified';\nimport '../../../hooks/index.mjs';\nimport '../../../constants/index.mjs';\nimport '../../../utils/index.mjs';\nimport '../../config-provider/index.mjs';\nimport { useZIndex } from '../../../hooks/use-z-index/index.mjs';\nimport { useId } from '../../../hooks/use-id/index.mjs';\nimport { useGlobalConfig } from '../../config-provider/src/hooks/use-global-config.mjs';\nimport { defaultNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { addUnit } from '../../../utils/dom/style.mjs';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { useLockscreen } from '../../../hooks/use-lockscreen/index.mjs';\n\nconst useDialog = (props, targetRef) => {\n var _a;\n const instance = getCurrentInstance();\n const emit = instance.emit;\n const { nextZIndex } = useZIndex();\n let lastPosition = \"\";\n const titleId = useId();\n const bodyId = useId();\n const visible = ref(false);\n const closed = ref(false);\n const rendered = ref(false);\n const zIndex = ref((_a = props.zIndex) != null ? _a : nextZIndex());\n let openTimer = void 0;\n let closeTimer = void 0;\n const namespace = useGlobalConfig(\"namespace\", defaultNamespace);\n const style = computed(() => {\n const style2 = {};\n const varPrefix = `--${namespace.value}-dialog`;\n if (!props.fullscreen) {\n if (props.top) {\n style2[`${varPrefix}-margin-top`] = props.top;\n }\n if (props.width) {\n style2[`${varPrefix}-width`] = addUnit(props.width);\n }\n }\n return style2;\n });\n const overlayDialogStyle = computed(() => {\n if (props.alignCenter) {\n return { display: \"flex\" };\n }\n return {};\n });\n function afterEnter() {\n emit(\"opened\");\n }\n function afterLeave() {\n emit(\"closed\");\n emit(UPDATE_MODEL_EVENT, false);\n if (props.destroyOnClose) {\n rendered.value = false;\n }\n }\n function beforeLeave() {\n emit(\"close\");\n }\n function open() {\n closeTimer == null ? void 0 : closeTimer();\n openTimer == null ? void 0 : openTimer();\n if (props.openDelay && props.openDelay > 0) {\n ;\n ({ stop: openTimer } = useTimeoutFn(() => doOpen(), props.openDelay));\n } else {\n doOpen();\n }\n }\n function close() {\n openTimer == null ? void 0 : openTimer();\n closeTimer == null ? void 0 : closeTimer();\n if (props.closeDelay && props.closeDelay > 0) {\n ;\n ({ stop: closeTimer } = useTimeoutFn(() => doClose(), props.closeDelay));\n } else {\n doClose();\n }\n }\n function handleClose() {\n function hide(shouldCancel) {\n if (shouldCancel)\n return;\n closed.value = true;\n visible.value = false;\n }\n if (props.beforeClose) {\n props.beforeClose(hide);\n } else {\n close();\n }\n }\n function onModalClick() {\n if (props.closeOnClickModal) {\n handleClose();\n }\n }\n function doOpen() {\n if (!isClient)\n return;\n visible.value = true;\n }\n function doClose() {\n visible.value = false;\n }\n function onOpenAutoFocus() {\n emit(\"openAutoFocus\");\n }\n function onCloseAutoFocus() {\n emit(\"closeAutoFocus\");\n }\n function onFocusoutPrevented(event) {\n var _a2;\n if (((_a2 = event.detail) == null ? void 0 : _a2.focusReason) === \"pointer\") {\n event.preventDefault();\n }\n }\n if (props.lockScroll) {\n useLockscreen(visible);\n }\n function onCloseRequested() {\n if (props.closeOnPressEscape) {\n handleClose();\n }\n }\n watch(() => props.modelValue, (val) => {\n if (val) {\n closed.value = false;\n open();\n rendered.value = true;\n zIndex.value = isUndefined(props.zIndex) ? nextZIndex() : zIndex.value++;\n nextTick(() => {\n emit(\"open\");\n if (targetRef.value) {\n targetRef.value.scrollTop = 0;\n }\n });\n } else {\n if (visible.value) {\n close();\n }\n }\n });\n watch(() => props.fullscreen, (val) => {\n if (!targetRef.value)\n return;\n if (val) {\n lastPosition = targetRef.value.style.transform;\n targetRef.value.style.transform = \"\";\n } else {\n targetRef.value.style.transform = lastPosition;\n }\n });\n onMounted(() => {\n if (props.modelValue) {\n visible.value = true;\n rendered.value = true;\n open();\n }\n });\n return {\n afterEnter,\n afterLeave,\n beforeLeave,\n handleClose,\n onModalClick,\n close,\n doClose,\n onOpenAutoFocus,\n onCloseAutoFocus,\n onCloseRequested,\n onFocusoutPrevented,\n titleId,\n bodyId,\n closed,\n style,\n overlayDialogStyle,\n rendered,\n visible,\n zIndex\n };\n};\n\nexport { useDialog };\n//# sourceMappingURL=use-dialog.mjs.map\n","import { defineComponent, useSlots, computed, ref, provide, openBlock, createBlock, unref, withCtx, createVNode, Transition, withDirectives, createElementVNode, normalizeClass, normalizeStyle, mergeProps, createSlots, renderSlot, createCommentVNode, vShow } from 'vue';\nimport { ElOverlay } from '../../overlay/index.mjs';\nimport '../../../hooks/index.mjs';\nimport '../../focus-trap/index.mjs';\nimport { ElTeleport } from '../../teleport/index.mjs';\nimport ElDialogContent from './dialog-content2.mjs';\nimport { dialogInjectionKey } from './constants.mjs';\nimport { dialogProps, dialogEmits } from './dialog.mjs';\nimport { useDialog } from './use-dialog.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useDeprecated } from '../../../hooks/use-deprecated/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useSameTarget } from '../../../hooks/use-same-target/index.mjs';\nimport ElFocusTrap from '../../focus-trap/src/focus-trap.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElDialog\",\n inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: dialogProps,\n emits: dialogEmits,\n setup(__props, { expose }) {\n const props = __props;\n const slots = useSlots();\n useDeprecated({\n scope: \"el-dialog\",\n from: \"the title slot\",\n replacement: \"the header slot\",\n version: \"3.0.0\",\n ref: \"https://element-plus.org/en-US/component/dialog.html#slots\"\n }, computed(() => !!slots.title));\n const ns = useNamespace(\"dialog\");\n const dialogRef = ref();\n const headerRef = ref();\n const dialogContentRef = ref();\n const {\n visible,\n titleId,\n bodyId,\n style,\n overlayDialogStyle,\n rendered,\n zIndex,\n afterEnter,\n afterLeave,\n beforeLeave,\n handleClose,\n onModalClick,\n onOpenAutoFocus,\n onCloseAutoFocus,\n onCloseRequested,\n onFocusoutPrevented\n } = useDialog(props, dialogRef);\n provide(dialogInjectionKey, {\n dialogRef,\n headerRef,\n bodyId,\n ns,\n rendered,\n style\n });\n const overlayEvent = useSameTarget(onModalClick);\n const draggable = computed(() => props.draggable && !props.fullscreen);\n const resetPosition = () => {\n var _a;\n (_a = dialogContentRef.value) == null ? void 0 : _a.resetPosition();\n };\n expose({\n visible,\n dialogContentRef,\n resetPosition\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(ElTeleport), {\n to: _ctx.appendTo,\n disabled: _ctx.appendTo !== \"body\" ? false : !_ctx.appendToBody\n }, {\n default: withCtx(() => [\n createVNode(Transition, {\n name: \"dialog-fade\",\n onAfterEnter: unref(afterEnter),\n onAfterLeave: unref(afterLeave),\n onBeforeLeave: unref(beforeLeave),\n persisted: \"\"\n }, {\n default: withCtx(() => [\n withDirectives(createVNode(unref(ElOverlay), {\n \"custom-mask-event\": \"\",\n mask: _ctx.modal,\n \"overlay-class\": _ctx.modalClass,\n \"z-index\": unref(zIndex)\n }, {\n default: withCtx(() => [\n createElementVNode(\"div\", {\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-label\": _ctx.title || void 0,\n \"aria-labelledby\": !_ctx.title ? unref(titleId) : void 0,\n \"aria-describedby\": unref(bodyId),\n class: normalizeClass(`${unref(ns).namespace.value}-overlay-dialog`),\n style: normalizeStyle(unref(overlayDialogStyle)),\n onClick: unref(overlayEvent).onClick,\n onMousedown: unref(overlayEvent).onMousedown,\n onMouseup: unref(overlayEvent).onMouseup\n }, [\n createVNode(unref(ElFocusTrap), {\n loop: \"\",\n trapped: unref(visible),\n \"focus-start-el\": \"container\",\n onFocusAfterTrapped: unref(onOpenAutoFocus),\n onFocusAfterReleased: unref(onCloseAutoFocus),\n onFocusoutPrevented: unref(onFocusoutPrevented),\n onReleaseRequested: unref(onCloseRequested)\n }, {\n default: withCtx(() => [\n unref(rendered) ? (openBlock(), createBlock(ElDialogContent, mergeProps({\n key: 0,\n ref_key: \"dialogContentRef\",\n ref: dialogContentRef\n }, _ctx.$attrs, {\n center: _ctx.center,\n \"align-center\": _ctx.alignCenter,\n \"close-icon\": _ctx.closeIcon,\n draggable: unref(draggable),\n overflow: _ctx.overflow,\n fullscreen: _ctx.fullscreen,\n \"show-close\": _ctx.showClose,\n title: _ctx.title,\n \"aria-level\": _ctx.headerAriaLevel,\n onClose: unref(handleClose)\n }), createSlots({\n header: withCtx(() => [\n !_ctx.$slots.title ? renderSlot(_ctx.$slots, \"header\", {\n key: 0,\n close: unref(handleClose),\n titleId: unref(titleId),\n titleClass: unref(ns).e(\"title\")\n }) : renderSlot(_ctx.$slots, \"title\", { key: 1 })\n ]),\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 2\n }, [\n _ctx.$slots.footer ? {\n name: \"footer\",\n fn: withCtx(() => [\n renderSlot(_ctx.$slots, \"footer\")\n ])\n } : void 0\n ]), 1040, [\"center\", \"align-center\", \"close-icon\", \"draggable\", \"overflow\", \"fullscreen\", \"show-close\", \"title\", \"aria-level\", \"onClose\"])) : createCommentVNode(\"v-if\", true)\n ]),\n _: 3\n }, 8, [\"trapped\", \"onFocusAfterTrapped\", \"onFocusAfterReleased\", \"onFocusoutPrevented\", \"onReleaseRequested\"])\n ], 46, [\"aria-label\", \"aria-labelledby\", \"aria-describedby\", \"onClick\", \"onMousedown\", \"onMouseup\"])\n ]),\n _: 3\n }, 8, [\"mask\", \"overlay-class\", \"z-index\"]), [\n [vShow, unref(visible)]\n ])\n ]),\n _: 3\n }, 8, [\"onAfterEnter\", \"onAfterLeave\", \"onBeforeLeave\"])\n ]),\n _: 3\n }, 8, [\"to\", \"disabled\"]);\n };\n }\n});\nvar Dialog = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"dialog.vue\"]]);\n\nexport { Dialog as default };\n//# sourceMappingURL=dialog2.mjs.map\n","import '../../utils/index.mjs';\nimport Dialog from './src/dialog2.mjs';\nexport { useDialog } from './src/use-dialog.mjs';\nexport { dialogEmits, dialogProps } from './src/dialog.mjs';\nexport { dialogInjectionKey } from './src/constants.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElDialog = withInstall(Dialog);\n\nexport { ElDialog, ElDialog as default };\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, renderSlot } from 'vue';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n inheritAttrs: false\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return renderSlot(_ctx.$slots, \"default\");\n}\nvar Collection = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__file\", \"collection.vue\"]]);\n\nexport { Collection as default };\n//# sourceMappingURL=collection2.mjs.map\n","import { defineComponent, renderSlot } from 'vue';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n name: \"ElCollectionItem\",\n inheritAttrs: false\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return renderSlot(_ctx.$slots, \"default\");\n}\nvar CollectionItem = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__file\", \"collection-item.vue\"]]);\n\nexport { CollectionItem as default };\n//# sourceMappingURL=collection-item.mjs.map\n","import { ref, unref, provide, inject, onMounted, onBeforeUnmount } from 'vue';\nimport Collection from './collection2.mjs';\nimport CollectionItem from './collection-item.mjs';\n\nconst COLLECTION_ITEM_SIGN = `data-el-collection-item`;\nconst createCollectionWithScope = (name) => {\n const COLLECTION_NAME = `El${name}Collection`;\n const COLLECTION_ITEM_NAME = `${COLLECTION_NAME}Item`;\n const COLLECTION_INJECTION_KEY = Symbol(COLLECTION_NAME);\n const COLLECTION_ITEM_INJECTION_KEY = Symbol(COLLECTION_ITEM_NAME);\n const ElCollection = {\n ...Collection,\n name: COLLECTION_NAME,\n setup() {\n const collectionRef = ref(null);\n const itemMap = /* @__PURE__ */ new Map();\n const getItems = () => {\n const collectionEl = unref(collectionRef);\n if (!collectionEl)\n return [];\n const orderedNodes = Array.from(collectionEl.querySelectorAll(`[${COLLECTION_ITEM_SIGN}]`));\n const items = [...itemMap.values()];\n return items.sort((a, b) => orderedNodes.indexOf(a.ref) - orderedNodes.indexOf(b.ref));\n };\n provide(COLLECTION_INJECTION_KEY, {\n itemMap,\n getItems,\n collectionRef\n });\n }\n };\n const ElCollectionItem = {\n ...CollectionItem,\n name: COLLECTION_ITEM_NAME,\n setup(_, { attrs }) {\n const collectionItemRef = ref(null);\n const collectionInjection = inject(COLLECTION_INJECTION_KEY, void 0);\n provide(COLLECTION_ITEM_INJECTION_KEY, {\n collectionItemRef\n });\n onMounted(() => {\n const collectionItemEl = unref(collectionItemRef);\n if (collectionItemEl) {\n collectionInjection.itemMap.set(collectionItemEl, {\n ref: collectionItemEl,\n ...attrs\n });\n }\n });\n onBeforeUnmount(() => {\n const collectionItemEl = unref(collectionItemRef);\n collectionInjection.itemMap.delete(collectionItemEl);\n });\n }\n };\n return {\n COLLECTION_INJECTION_KEY,\n COLLECTION_ITEM_INJECTION_KEY,\n ElCollection,\n ElCollectionItem\n };\n};\n\nexport { COLLECTION_ITEM_SIGN, createCollectionWithScope };\n//# sourceMappingURL=collection.mjs.map\n","import '../../../utils/index.mjs';\nimport '../../../constants/index.mjs';\nimport '../../collection/index.mjs';\nimport '../../tooltip/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { useTooltipTriggerProps } from '../../tooltip/src/trigger.mjs';\nimport { useTooltipContentProps } from '../../tooltip/src/content.mjs';\nimport { iconPropType } from '../../../utils/vue/icon.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\nimport { createCollectionWithScope } from '../../collection/src/collection.mjs';\n\nconst dropdownProps = buildProps({\n trigger: useTooltipTriggerProps.trigger,\n effect: {\n ...useTooltipContentProps.effect,\n default: \"light\"\n },\n type: {\n type: definePropType(String)\n },\n placement: {\n type: definePropType(String),\n default: \"bottom\"\n },\n popperOptions: {\n type: definePropType(Object),\n default: () => ({})\n },\n id: String,\n size: {\n type: String,\n default: \"\"\n },\n splitButton: Boolean,\n hideOnClick: {\n type: Boolean,\n default: true\n },\n loop: {\n type: Boolean,\n default: true\n },\n showTimeout: {\n type: Number,\n default: 150\n },\n hideTimeout: {\n type: Number,\n default: 150\n },\n tabindex: {\n type: definePropType([Number, String]),\n default: 0\n },\n maxHeight: {\n type: definePropType([Number, String]),\n default: \"\"\n },\n popperClass: {\n type: String,\n default: \"\"\n },\n disabled: Boolean,\n role: {\n type: String,\n default: \"menu\"\n },\n buttonProps: {\n type: definePropType(Object)\n },\n teleported: useTooltipContentProps.teleported\n});\nconst dropdownItemProps = buildProps({\n command: {\n type: [Object, String, Number],\n default: () => ({})\n },\n disabled: Boolean,\n divided: Boolean,\n textValue: String,\n icon: {\n type: iconPropType\n }\n});\nconst dropdownMenuProps = buildProps({\n onKeydown: { type: definePropType(Function) }\n});\nconst FIRST_KEYS = [\n EVENT_CODE.down,\n EVENT_CODE.pageDown,\n EVENT_CODE.home\n];\nconst LAST_KEYS = [EVENT_CODE.up, EVENT_CODE.pageUp, EVENT_CODE.end];\nconst FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nconst {\n ElCollection,\n ElCollectionItem,\n COLLECTION_INJECTION_KEY,\n COLLECTION_ITEM_INJECTION_KEY\n} = createCollectionWithScope(\"Dropdown\");\n\nexport { COLLECTION_INJECTION_KEY as DROPDOWN_COLLECTION_INJECTION_KEY, COLLECTION_ITEM_INJECTION_KEY as DROPDOWN_COLLECTION_ITEM_INJECTION_KEY, ElCollection, ElCollectionItem, FIRST_KEYS, FIRST_LAST_KEYS, LAST_KEYS, dropdownItemProps, dropdownMenuProps, dropdownProps };\n//# sourceMappingURL=dropdown.mjs.map\n","import { defineComponent, openBlock, createElementBlock, createElementVNode, unref } from 'vue';\nimport '../../../hooks/index.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useId } from '../../../hooks/use-id/index.mjs';\n\nconst __default__ = defineComponent({\n name: \"ImgEmpty\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n setup(__props) {\n const ns = useNamespace(\"empty\");\n const id = useId();\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"svg\", {\n viewBox: \"0 0 79 86\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\"\n }, [\n createElementVNode(\"defs\", null, [\n createElementVNode(\"linearGradient\", {\n id: `linearGradient-1-${unref(id)}`,\n x1: \"38.8503086%\",\n y1: \"0%\",\n x2: \"61.1496914%\",\n y2: \"100%\"\n }, [\n createElementVNode(\"stop\", {\n \"stop-color\": `var(${unref(ns).cssVarBlockName(\"fill-color-1\")})`,\n offset: \"0%\"\n }, null, 8, [\"stop-color\"]),\n createElementVNode(\"stop\", {\n \"stop-color\": `var(${unref(ns).cssVarBlockName(\"fill-color-4\")})`,\n offset: \"100%\"\n }, null, 8, [\"stop-color\"])\n ], 8, [\"id\"]),\n createElementVNode(\"linearGradient\", {\n id: `linearGradient-2-${unref(id)}`,\n x1: \"0%\",\n y1: \"9.5%\",\n x2: \"100%\",\n y2: \"90.5%\"\n }, [\n createElementVNode(\"stop\", {\n \"stop-color\": `var(${unref(ns).cssVarBlockName(\"fill-color-1\")})`,\n offset: \"0%\"\n }, null, 8, [\"stop-color\"]),\n createElementVNode(\"stop\", {\n \"stop-color\": `var(${unref(ns).cssVarBlockName(\"fill-color-6\")})`,\n offset: \"100%\"\n }, null, 8, [\"stop-color\"])\n ], 8, [\"id\"]),\n createElementVNode(\"rect\", {\n id: `path-3-${unref(id)}`,\n x: \"0\",\n y: \"0\",\n width: \"17\",\n height: \"36\"\n }, null, 8, [\"id\"])\n ]),\n createElementVNode(\"g\", {\n id: \"Illustrations\",\n stroke: \"none\",\n \"stroke-width\": \"1\",\n fill: \"none\",\n \"fill-rule\": \"evenodd\"\n }, [\n createElementVNode(\"g\", {\n id: \"B-type\",\n transform: \"translate(-1268.000000, -535.000000)\"\n }, [\n createElementVNode(\"g\", {\n id: \"Group-2\",\n transform: \"translate(1268.000000, 535.000000)\"\n }, [\n createElementVNode(\"path\", {\n id: \"Oval-Copy-2\",\n d: \"M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z\",\n fill: `var(${unref(ns).cssVarBlockName(\"fill-color-3\")})`\n }, null, 8, [\"fill\"]),\n createElementVNode(\"polygon\", {\n id: \"Rectangle-Copy-14\",\n fill: `var(${unref(ns).cssVarBlockName(\"fill-color-7\")})`,\n transform: \"translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) \",\n points: \"13 58 53 58 42 45 2 45\"\n }, null, 8, [\"fill\"]),\n createElementVNode(\"g\", {\n id: \"Group-Copy\",\n transform: \"translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)\"\n }, [\n createElementVNode(\"polygon\", {\n id: \"Rectangle-Copy-10\",\n fill: `var(${unref(ns).cssVarBlockName(\"fill-color-7\")})`,\n transform: \"translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) \",\n points: \"2.84078316e-14 3 18 3 23 7 5 7\"\n }, null, 8, [\"fill\"]),\n createElementVNode(\"polygon\", {\n id: \"Rectangle-Copy-11\",\n fill: `var(${unref(ns).cssVarBlockName(\"fill-color-5\")})`,\n points: \"-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43\"\n }, null, 8, [\"fill\"]),\n createElementVNode(\"rect\", {\n id: \"Rectangle-Copy-12\",\n fill: `url(#linearGradient-1-${unref(id)})`,\n transform: \"translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) \",\n x: \"38\",\n y: \"7\",\n width: \"17\",\n height: \"36\"\n }, null, 8, [\"fill\"]),\n createElementVNode(\"polygon\", {\n id: \"Rectangle-Copy-13\",\n fill: `var(${unref(ns).cssVarBlockName(\"fill-color-2\")})`,\n transform: \"translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) \",\n points: \"24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12\"\n }, null, 8, [\"fill\"])\n ]),\n createElementVNode(\"rect\", {\n id: \"Rectangle-Copy-15\",\n fill: `url(#linearGradient-2-${unref(id)})`,\n x: \"13\",\n y: \"45\",\n width: \"40\",\n height: \"36\"\n }, null, 8, [\"fill\"]),\n createElementVNode(\"g\", {\n id: \"Rectangle-Copy-17\",\n transform: \"translate(53.000000, 45.000000)\"\n }, [\n createElementVNode(\"use\", {\n id: \"Mask\",\n fill: `var(${unref(ns).cssVarBlockName(\"fill-color-8\")})`,\n transform: \"translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) \",\n \"xlink:href\": `#path-3-${unref(id)}`\n }, null, 8, [\"fill\", \"xlink:href\"]),\n createElementVNode(\"polygon\", {\n id: \"Rectangle-Copy\",\n fill: `var(${unref(ns).cssVarBlockName(\"fill-color-9\")})`,\n mask: `url(#mask-4-${unref(id)})`,\n transform: \"translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) \",\n points: \"7 0 24 0 20 18 7 16.5\"\n }, null, 8, [\"fill\", \"mask\"])\n ]),\n createElementVNode(\"polygon\", {\n id: \"Rectangle-Copy-18\",\n fill: `var(${unref(ns).cssVarBlockName(\"fill-color-2\")})`,\n transform: \"translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) \",\n points: \"62 45 79 45 70 58 53 58\"\n }, null, 8, [\"fill\"])\n ])\n ])\n ])\n ]);\n };\n }\n});\nvar ImgEmpty = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"img-empty.vue\"]]);\n\nexport { ImgEmpty as default };\n//# sourceMappingURL=img-empty.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst emptyProps = buildProps({\n image: {\n type: String,\n default: \"\"\n },\n imageSize: Number,\n description: {\n type: String,\n default: \"\"\n }\n});\n\nexport { emptyProps };\n//# sourceMappingURL=empty.mjs.map\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, unref, createElementVNode, normalizeStyle, renderSlot, createVNode, toDisplayString, createCommentVNode } from 'vue';\nimport '../../../hooks/index.mjs';\nimport '../../../utils/index.mjs';\nimport ImgEmpty from './img-empty.mjs';\nimport { emptyProps } from './empty.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useLocale } from '../../../hooks/use-locale/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { addUnit } from '../../../utils/dom/style.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElEmpty\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: emptyProps,\n setup(__props) {\n const props = __props;\n const { t } = useLocale();\n const ns = useNamespace(\"empty\");\n const emptyDescription = computed(() => props.description || t(\"el.table.emptyText\"));\n const imageStyle = computed(() => ({\n width: addUnit(props.imageSize)\n }));\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass(unref(ns).b())\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass(unref(ns).e(\"image\")),\n style: normalizeStyle(unref(imageStyle))\n }, [\n _ctx.image ? (openBlock(), createElementBlock(\"img\", {\n key: 0,\n src: _ctx.image,\n ondragstart: \"return false\"\n }, null, 8, [\"src\"])) : renderSlot(_ctx.$slots, \"image\", { key: 1 }, () => [\n createVNode(ImgEmpty)\n ])\n ], 6),\n createElementVNode(\"div\", {\n class: normalizeClass(unref(ns).e(\"description\"))\n }, [\n _ctx.$slots.description ? renderSlot(_ctx.$slots, \"description\", { key: 0 }) : (openBlock(), createElementBlock(\"p\", { key: 1 }, toDisplayString(unref(emptyDescription)), 1))\n ], 2),\n _ctx.$slots.default ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass(unref(ns).e(\"bottom\"))\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 2)) : createCommentVNode(\"v-if\", true)\n ], 2);\n };\n }\n});\nvar Empty = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"empty.vue\"]]);\n\nexport { Empty as default };\n//# sourceMappingURL=empty2.mjs.map\n","import '../../utils/index.mjs';\nimport Empty from './src/empty2.mjs';\nexport { emptyProps } from './src/empty.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElEmpty = withInstall(Empty);\n\nexport { ElEmpty, ElEmpty as default };\n//# sourceMappingURL=index.mjs.map\n","import '../../../utils/index.mjs';\nimport '../../tooltip/index.mjs';\nimport '../../dropdown/index.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\nimport { useTooltipTriggerProps } from '../../tooltip/src/trigger.mjs';\nimport { dropdownProps } from '../../dropdown/src/dropdown.mjs';\nimport { useTooltipContentProps } from '../../tooltip/src/content.mjs';\nimport { isBoolean } from '../../../utils/types.mjs';\n\nconst popoverProps = buildProps({\n trigger: useTooltipTriggerProps.trigger,\n placement: dropdownProps.placement,\n disabled: useTooltipTriggerProps.disabled,\n visible: useTooltipContentProps.visible,\n transition: useTooltipContentProps.transition,\n popperOptions: dropdownProps.popperOptions,\n tabindex: dropdownProps.tabindex,\n content: useTooltipContentProps.content,\n popperStyle: useTooltipContentProps.popperStyle,\n popperClass: useTooltipContentProps.popperClass,\n enterable: {\n ...useTooltipContentProps.enterable,\n default: true\n },\n effect: {\n ...useTooltipContentProps.effect,\n default: \"light\"\n },\n teleported: useTooltipContentProps.teleported,\n title: String,\n width: {\n type: [String, Number],\n default: 150\n },\n offset: {\n type: Number,\n default: void 0\n },\n showAfter: {\n type: Number,\n default: 0\n },\n hideAfter: {\n type: Number,\n default: 200\n },\n autoClose: {\n type: Number,\n default: 0\n },\n showArrow: {\n type: Boolean,\n default: true\n },\n persistent: {\n type: Boolean,\n default: true\n },\n \"onUpdate:visible\": {\n type: Function\n }\n});\nconst popoverEmits = {\n \"update:visible\": (value) => isBoolean(value),\n \"before-enter\": () => true,\n \"before-leave\": () => true,\n \"after-enter\": () => true,\n \"after-leave\": () => true\n};\n\nexport { popoverEmits, popoverProps };\n//# sourceMappingURL=popover.mjs.map\n","import { defineComponent, computed, ref, unref, openBlock, createBlock, mergeProps, withCtx, createElementBlock, normalizeClass, toDisplayString, createCommentVNode, renderSlot, createTextVNode } from 'vue';\nimport { ElTooltip } from '../../tooltip/index.mjs';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { popoverProps, popoverEmits } from './popover.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { addUnit } from '../../../utils/dom/style.mjs';\n\nconst updateEventKeyRaw = `onUpdate:visible`;\nconst __default__ = defineComponent({\n name: \"ElPopover\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: popoverProps,\n emits: popoverEmits,\n setup(__props, { expose, emit }) {\n const props = __props;\n const onUpdateVisible = computed(() => {\n return props[updateEventKeyRaw];\n });\n const ns = useNamespace(\"popover\");\n const tooltipRef = ref();\n const popperRef = computed(() => {\n var _a;\n return (_a = unref(tooltipRef)) == null ? void 0 : _a.popperRef;\n });\n const style = computed(() => {\n return [\n {\n width: addUnit(props.width)\n },\n props.popperStyle\n ];\n });\n const kls = computed(() => {\n return [ns.b(), props.popperClass, { [ns.m(\"plain\")]: !!props.content }];\n });\n const gpuAcceleration = computed(() => {\n return props.transition === `${ns.namespace.value}-fade-in-linear`;\n });\n const hide = () => {\n var _a;\n (_a = tooltipRef.value) == null ? void 0 : _a.hide();\n };\n const beforeEnter = () => {\n emit(\"before-enter\");\n };\n const beforeLeave = () => {\n emit(\"before-leave\");\n };\n const afterEnter = () => {\n emit(\"after-enter\");\n };\n const afterLeave = () => {\n emit(\"update:visible\", false);\n emit(\"after-leave\");\n };\n expose({\n popperRef,\n hide\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(ElTooltip), mergeProps({\n ref_key: \"tooltipRef\",\n ref: tooltipRef\n }, _ctx.$attrs, {\n trigger: _ctx.trigger,\n placement: _ctx.placement,\n disabled: _ctx.disabled,\n visible: _ctx.visible,\n transition: _ctx.transition,\n \"popper-options\": _ctx.popperOptions,\n tabindex: _ctx.tabindex,\n content: _ctx.content,\n offset: _ctx.offset,\n \"show-after\": _ctx.showAfter,\n \"hide-after\": _ctx.hideAfter,\n \"auto-close\": _ctx.autoClose,\n \"show-arrow\": _ctx.showArrow,\n \"aria-label\": _ctx.title,\n effect: _ctx.effect,\n enterable: _ctx.enterable,\n \"popper-class\": unref(kls),\n \"popper-style\": unref(style),\n teleported: _ctx.teleported,\n persistent: _ctx.persistent,\n \"gpu-acceleration\": unref(gpuAcceleration),\n \"onUpdate:visible\": unref(onUpdateVisible),\n onBeforeShow: beforeEnter,\n onBeforeHide: beforeLeave,\n onShow: afterEnter,\n onHide: afterLeave\n }), {\n content: withCtx(() => [\n _ctx.title ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass(unref(ns).e(\"title\")),\n role: \"title\"\n }, toDisplayString(_ctx.title), 3)) : createCommentVNode(\"v-if\", true),\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n createTextVNode(toDisplayString(_ctx.content), 1)\n ])\n ]),\n default: withCtx(() => [\n _ctx.$slots.reference ? renderSlot(_ctx.$slots, \"reference\", { key: 0 }) : createCommentVNode(\"v-if\", true)\n ]),\n _: 3\n }, 16, [\"trigger\", \"placement\", \"disabled\", \"visible\", \"transition\", \"popper-options\", \"tabindex\", \"content\", \"offset\", \"show-after\", \"hide-after\", \"auto-close\", \"show-arrow\", \"aria-label\", \"effect\", \"enterable\", \"popper-class\", \"popper-style\", \"teleported\", \"persistent\", \"gpu-acceleration\", \"onUpdate:visible\"]);\n };\n }\n});\nvar Popover = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"popover.vue\"]]);\n\nexport { Popover as default };\n//# sourceMappingURL=popover2.mjs.map\n","const attachEvents = (el, binding) => {\n const popperComponent = binding.arg || binding.value;\n const popover = popperComponent == null ? void 0 : popperComponent.popperRef;\n if (popover) {\n popover.triggerRef = el;\n }\n};\nvar PopoverDirective = {\n mounted(el, binding) {\n attachEvents(el, binding);\n },\n updated(el, binding) {\n attachEvents(el, binding);\n }\n};\nconst VPopover = \"popover\";\n\nexport { VPopover, PopoverDirective as default };\n//# sourceMappingURL=directive.mjs.map\n","import '../../utils/index.mjs';\nimport Popover from './src/popover2.mjs';\nimport PopoverDirective, { VPopover } from './src/directive.mjs';\nexport { popoverEmits, popoverProps } from './src/popover.mjs';\nimport { withInstallDirective, withInstall } from '../../utils/vue/install.mjs';\n\nconst ElPopoverDirective = withInstallDirective(PopoverDirective, VPopover);\nconst ElPopover = withInstall(Popover, {\n directive: ElPopoverDirective\n});\n\nexport { ElPopover, ElPopoverDirective, ElPopover as default };\n//# sourceMappingURL=index.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\n\nconst progressProps = buildProps({\n type: {\n type: String,\n default: \"line\",\n values: [\"line\", \"circle\", \"dashboard\"]\n },\n percentage: {\n type: Number,\n default: 0,\n validator: (val) => val >= 0 && val <= 100\n },\n status: {\n type: String,\n default: \"\",\n values: [\"\", \"success\", \"exception\", \"warning\"]\n },\n indeterminate: Boolean,\n duration: {\n type: Number,\n default: 3\n },\n strokeWidth: {\n type: Number,\n default: 6\n },\n strokeLinecap: {\n type: definePropType(String),\n default: \"round\"\n },\n textInside: Boolean,\n width: {\n type: Number,\n default: 126\n },\n showText: {\n type: Boolean,\n default: true\n },\n color: {\n type: definePropType([\n String,\n Array,\n Function\n ]),\n default: \"\"\n },\n striped: Boolean,\n stripedFlow: Boolean,\n format: {\n type: definePropType(Function),\n default: (percentage) => `${percentage}%`\n }\n});\n\nexport { progressProps };\n//# sourceMappingURL=progress.mjs.map\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, unref, createElementVNode, normalizeStyle, renderSlot, toDisplayString, createCommentVNode, createBlock, withCtx, resolveDynamicComponent } from 'vue';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { WarningFilled, CircleCheck, CircleClose, Check, Close } from '@element-plus/icons-vue';\nimport '../../../hooks/index.mjs';\nimport '../../../utils/index.mjs';\nimport { progressProps } from './progress.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { isString, isFunction } from '@vue/shared';\n\nconst __default__ = defineComponent({\n name: \"ElProgress\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: progressProps,\n setup(__props) {\n const props = __props;\n const STATUS_COLOR_MAP = {\n success: \"#13ce66\",\n exception: \"#ff4949\",\n warning: \"#e6a23c\",\n default: \"#20a0ff\"\n };\n const ns = useNamespace(\"progress\");\n const barStyle = computed(() => {\n const barStyle2 = {\n width: `${props.percentage}%`,\n animationDuration: `${props.duration}s`\n };\n const color = getCurrentColor(props.percentage);\n if (color.includes(\"gradient\")) {\n barStyle2.background = color;\n } else {\n barStyle2.backgroundColor = color;\n }\n return barStyle2;\n });\n const relativeStrokeWidth = computed(() => (props.strokeWidth / props.width * 100).toFixed(1));\n const radius = computed(() => {\n if ([\"circle\", \"dashboard\"].includes(props.type)) {\n return Number.parseInt(`${50 - Number.parseFloat(relativeStrokeWidth.value) / 2}`, 10);\n }\n return 0;\n });\n const trackPath = computed(() => {\n const r = radius.value;\n const isDashboard = props.type === \"dashboard\";\n return `\n M 50 50\n m 0 ${isDashboard ? \"\" : \"-\"}${r}\n a ${r} ${r} 0 1 1 0 ${isDashboard ? \"-\" : \"\"}${r * 2}\n a ${r} ${r} 0 1 1 0 ${isDashboard ? \"\" : \"-\"}${r * 2}\n `;\n });\n const perimeter = computed(() => 2 * Math.PI * radius.value);\n const rate = computed(() => props.type === \"dashboard\" ? 0.75 : 1);\n const strokeDashoffset = computed(() => {\n const offset = -1 * perimeter.value * (1 - rate.value) / 2;\n return `${offset}px`;\n });\n const trailPathStyle = computed(() => ({\n strokeDasharray: `${perimeter.value * rate.value}px, ${perimeter.value}px`,\n strokeDashoffset: strokeDashoffset.value\n }));\n const circlePathStyle = computed(() => ({\n strokeDasharray: `${perimeter.value * rate.value * (props.percentage / 100)}px, ${perimeter.value}px`,\n strokeDashoffset: strokeDashoffset.value,\n transition: \"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s\"\n }));\n const stroke = computed(() => {\n let ret;\n if (props.color) {\n ret = getCurrentColor(props.percentage);\n } else {\n ret = STATUS_COLOR_MAP[props.status] || STATUS_COLOR_MAP.default;\n }\n return ret;\n });\n const statusIcon = computed(() => {\n if (props.status === \"warning\") {\n return WarningFilled;\n }\n if (props.type === \"line\") {\n return props.status === \"success\" ? CircleCheck : CircleClose;\n } else {\n return props.status === \"success\" ? Check : Close;\n }\n });\n const progressTextSize = computed(() => {\n return props.type === \"line\" ? 12 + props.strokeWidth * 0.4 : props.width * 0.111111 + 2;\n });\n const content = computed(() => props.format(props.percentage));\n function getColors(color) {\n const span = 100 / color.length;\n const seriesColors = color.map((seriesColor, index) => {\n if (isString(seriesColor)) {\n return {\n color: seriesColor,\n percentage: (index + 1) * span\n };\n }\n return seriesColor;\n });\n return seriesColors.sort((a, b) => a.percentage - b.percentage);\n }\n const getCurrentColor = (percentage) => {\n var _a;\n const { color } = props;\n if (isFunction(color)) {\n return color(percentage);\n } else if (isString(color)) {\n return color;\n } else {\n const colors = getColors(color);\n for (const color2 of colors) {\n if (color2.percentage > percentage)\n return color2.color;\n }\n return (_a = colors[colors.length - 1]) == null ? void 0 : _a.color;\n }\n };\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\n unref(ns).b(),\n unref(ns).m(_ctx.type),\n unref(ns).is(_ctx.status),\n {\n [unref(ns).m(\"without-text\")]: !_ctx.showText,\n [unref(ns).m(\"text-inside\")]: _ctx.textInside\n }\n ]),\n role: \"progressbar\",\n \"aria-valuenow\": _ctx.percentage,\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": \"100\"\n }, [\n _ctx.type === \"line\" ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass(unref(ns).b(\"bar\"))\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass(unref(ns).be(\"bar\", \"outer\")),\n style: normalizeStyle({ height: `${_ctx.strokeWidth}px` })\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass([\n unref(ns).be(\"bar\", \"inner\"),\n { [unref(ns).bem(\"bar\", \"inner\", \"indeterminate\")]: _ctx.indeterminate },\n { [unref(ns).bem(\"bar\", \"inner\", \"striped\")]: _ctx.striped },\n { [unref(ns).bem(\"bar\", \"inner\", \"striped-flow\")]: _ctx.stripedFlow }\n ]),\n style: normalizeStyle(unref(barStyle))\n }, [\n (_ctx.showText || _ctx.$slots.default) && _ctx.textInside ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n class: normalizeClass(unref(ns).be(\"bar\", \"innerText\"))\n }, [\n renderSlot(_ctx.$slots, \"default\", { percentage: _ctx.percentage }, () => [\n createElementVNode(\"span\", null, toDisplayString(unref(content)), 1)\n ])\n ], 2)) : createCommentVNode(\"v-if\", true)\n ], 6)\n ], 6)\n ], 2)) : (openBlock(), createElementBlock(\"div\", {\n key: 1,\n class: normalizeClass(unref(ns).b(\"circle\")),\n style: normalizeStyle({ height: `${_ctx.width}px`, width: `${_ctx.width}px` })\n }, [\n (openBlock(), createElementBlock(\"svg\", { viewBox: \"0 0 100 100\" }, [\n createElementVNode(\"path\", {\n class: normalizeClass(unref(ns).be(\"circle\", \"track\")),\n d: unref(trackPath),\n stroke: `var(${unref(ns).cssVarName(\"fill-color-light\")}, #e5e9f2)`,\n \"stroke-linecap\": _ctx.strokeLinecap,\n \"stroke-width\": unref(relativeStrokeWidth),\n fill: \"none\",\n style: normalizeStyle(unref(trailPathStyle))\n }, null, 14, [\"d\", \"stroke\", \"stroke-linecap\", \"stroke-width\"]),\n createElementVNode(\"path\", {\n class: normalizeClass(unref(ns).be(\"circle\", \"path\")),\n d: unref(trackPath),\n stroke: unref(stroke),\n fill: \"none\",\n opacity: _ctx.percentage ? 1 : 0,\n \"stroke-linecap\": _ctx.strokeLinecap,\n \"stroke-width\": unref(relativeStrokeWidth),\n style: normalizeStyle(unref(circlePathStyle))\n }, null, 14, [\"d\", \"stroke\", \"opacity\", \"stroke-linecap\", \"stroke-width\"])\n ]))\n ], 6)),\n (_ctx.showText || _ctx.$slots.default) && !_ctx.textInside ? (openBlock(), createElementBlock(\"div\", {\n key: 2,\n class: normalizeClass(unref(ns).e(\"text\")),\n style: normalizeStyle({ fontSize: `${unref(progressTextSize)}px` })\n }, [\n renderSlot(_ctx.$slots, \"default\", { percentage: _ctx.percentage }, () => [\n !_ctx.status ? (openBlock(), createElementBlock(\"span\", { key: 0 }, toDisplayString(unref(content)), 1)) : (openBlock(), createBlock(unref(ElIcon), { key: 1 }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent(unref(statusIcon))))\n ]),\n _: 1\n }))\n ])\n ], 6)) : createCommentVNode(\"v-if\", true)\n ], 10, [\"aria-valuenow\"]);\n };\n }\n});\nvar Progress = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"progress.vue\"]]);\n\nexport { Progress as default };\n//# sourceMappingURL=progress2.mjs.map\n","import '../../utils/index.mjs';\nimport Progress from './src/progress2.mjs';\nexport { progressProps } from './src/progress.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElProgress = withInstall(Progress);\n\nexport { ElProgress, ElProgress as default };\n//# sourceMappingURL=index.mjs.map\n","import { createVNode, render } from 'vue';\nimport { get, flatMap } from 'lodash-unified';\nimport '../../../utils/index.mjs';\nimport { ElTooltip } from '../../tooltip/index.mjs';\nimport { isObject, hasOwn, isArray } from '@vue/shared';\nimport { throwError } from '../../../utils/error.mjs';\nimport { isBoolean } from '../../../utils/types.mjs';\n\nconst getCell = function(event) {\n var _a;\n return (_a = event.target) == null ? void 0 : _a.closest(\"td\");\n};\nconst orderBy = function(array, sortKey, reverse, sortMethod, sortBy) {\n if (!sortKey && !sortMethod && (!sortBy || Array.isArray(sortBy) && !sortBy.length)) {\n return array;\n }\n if (typeof reverse === \"string\") {\n reverse = reverse === \"descending\" ? -1 : 1;\n } else {\n reverse = reverse && reverse < 0 ? -1 : 1;\n }\n const getKey = sortMethod ? null : function(value, index) {\n if (sortBy) {\n if (!Array.isArray(sortBy)) {\n sortBy = [sortBy];\n }\n return sortBy.map((by) => {\n if (typeof by === \"string\") {\n return get(value, by);\n } else {\n return by(value, index, array);\n }\n });\n }\n if (sortKey !== \"$key\") {\n if (isObject(value) && \"$value\" in value)\n value = value.$value;\n }\n return [isObject(value) ? get(value, sortKey) : value];\n };\n const compare = function(a, b) {\n if (sortMethod) {\n return sortMethod(a.value, b.value);\n }\n for (let i = 0, len = a.key.length; i < len; i++) {\n if (a.key[i] < b.key[i]) {\n return -1;\n }\n if (a.key[i] > b.key[i]) {\n return 1;\n }\n }\n return 0;\n };\n return array.map((value, index) => {\n return {\n value,\n index,\n key: getKey ? getKey(value, index) : null\n };\n }).sort((a, b) => {\n let order = compare(a, b);\n if (!order) {\n order = a.index - b.index;\n }\n return order * +reverse;\n }).map((item) => item.value);\n};\nconst getColumnById = function(table, columnId) {\n let column = null;\n table.columns.forEach((item) => {\n if (item.id === columnId) {\n column = item;\n }\n });\n return column;\n};\nconst getColumnByKey = function(table, columnKey) {\n let column = null;\n for (let i = 0; i < table.columns.length; i++) {\n const item = table.columns[i];\n if (item.columnKey === columnKey) {\n column = item;\n break;\n }\n }\n if (!column)\n throwError(\"ElTable\", `No column matching with column-key: ${columnKey}`);\n return column;\n};\nconst getColumnByCell = function(table, cell, namespace) {\n const matches = (cell.className || \"\").match(new RegExp(`${namespace}-table_[^\\\\s]+`, \"gm\"));\n if (matches) {\n return getColumnById(table, matches[0]);\n }\n return null;\n};\nconst getRowIdentity = (row, rowKey) => {\n if (!row)\n throw new Error(\"Row is required when get row identity\");\n if (typeof rowKey === \"string\") {\n if (!rowKey.includes(\".\")) {\n return `${row[rowKey]}`;\n }\n const key = rowKey.split(\".\");\n let current = row;\n for (const element of key) {\n current = current[element];\n }\n return `${current}`;\n } else if (typeof rowKey === \"function\") {\n return rowKey.call(null, row);\n }\n};\nconst getKeysMap = function(array, rowKey) {\n const arrayMap = {};\n (array || []).forEach((row, index) => {\n arrayMap[getRowIdentity(row, rowKey)] = { row, index };\n });\n return arrayMap;\n};\nfunction mergeOptions(defaults, config) {\n const options = {};\n let key;\n for (key in defaults) {\n options[key] = defaults[key];\n }\n for (key in config) {\n if (hasOwn(config, key)) {\n const value = config[key];\n if (typeof value !== \"undefined\") {\n options[key] = value;\n }\n }\n }\n return options;\n}\nfunction parseWidth(width) {\n if (width === \"\")\n return width;\n if (width !== void 0) {\n width = Number.parseInt(width, 10);\n if (Number.isNaN(width)) {\n width = \"\";\n }\n }\n return width;\n}\nfunction parseMinWidth(minWidth) {\n if (minWidth === \"\")\n return minWidth;\n if (minWidth !== void 0) {\n minWidth = parseWidth(minWidth);\n if (Number.isNaN(minWidth)) {\n minWidth = 80;\n }\n }\n return minWidth;\n}\nfunction parseHeight(height) {\n if (typeof height === \"number\") {\n return height;\n }\n if (typeof height === \"string\") {\n if (/^\\d+(?:px)?$/.test(height)) {\n return Number.parseInt(height, 10);\n } else {\n return height;\n }\n }\n return null;\n}\nfunction compose(...funcs) {\n if (funcs.length === 0) {\n return (arg) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\nfunction toggleRowStatus(statusArr, row, newVal, tableTreeProps, selectable, rowIndex) {\n let _rowIndex = rowIndex != null ? rowIndex : 0;\n let changed = false;\n const index = statusArr.indexOf(row);\n const included = index !== -1;\n const isRowSelectable = selectable == null ? void 0 : selectable.call(null, row, rowIndex);\n const toggleStatus = (type) => {\n if (type === \"add\") {\n statusArr.push(row);\n } else {\n statusArr.splice(index, 1);\n }\n changed = true;\n };\n const getChildrenCount = (row2) => {\n let count = 0;\n const children = (tableTreeProps == null ? void 0 : tableTreeProps.children) && row2[tableTreeProps.children];\n if (children && isArray(children)) {\n count += children.length;\n children.forEach((item) => {\n count += getChildrenCount(item);\n });\n }\n return count;\n };\n if (!selectable || isRowSelectable) {\n if (isBoolean(newVal)) {\n if (newVal && !included) {\n toggleStatus(\"add\");\n } else if (!newVal && included) {\n toggleStatus(\"remove\");\n }\n } else {\n included ? toggleStatus(\"remove\") : toggleStatus(\"add\");\n }\n }\n if (!(tableTreeProps == null ? void 0 : tableTreeProps.checkStrictly) && (tableTreeProps == null ? void 0 : tableTreeProps.children) && isArray(row[tableTreeProps.children])) {\n row[tableTreeProps.children].forEach((item) => {\n toggleRowStatus(statusArr, item, newVal != null ? newVal : !included, tableTreeProps, selectable, _rowIndex + 1);\n _rowIndex += getChildrenCount(item) + 1;\n });\n }\n return changed;\n}\nfunction walkTreeNode(root, cb, childrenKey = \"children\", lazyKey = \"hasChildren\") {\n const isNil = (array) => !(Array.isArray(array) && array.length);\n function _walker(parent, children, level) {\n cb(parent, children, level);\n children.forEach((item) => {\n if (item[lazyKey]) {\n cb(item, null, level + 1);\n return;\n }\n const children2 = item[childrenKey];\n if (!isNil(children2)) {\n _walker(item, children2, level + 1);\n }\n });\n }\n root.forEach((item) => {\n if (item[lazyKey]) {\n cb(item, null, 0);\n return;\n }\n const children = item[childrenKey];\n if (!isNil(children)) {\n _walker(item, children, 0);\n }\n });\n}\nlet removePopper = null;\nfunction createTablePopper(props, popperContent, trigger, table) {\n if ((removePopper == null ? void 0 : removePopper.trigger) === trigger) {\n return;\n }\n removePopper == null ? void 0 : removePopper();\n const parentNode = table == null ? void 0 : table.refs.tableWrapper;\n const ns = parentNode == null ? void 0 : parentNode.dataset.prefix;\n const popperOptions = {\n strategy: \"fixed\",\n ...props.popperOptions\n };\n const vm = createVNode(ElTooltip, {\n content: popperContent,\n virtualTriggering: true,\n virtualRef: trigger,\n appendTo: parentNode,\n placement: \"top\",\n transition: \"none\",\n offset: 0,\n hideAfter: 0,\n ...props,\n popperOptions,\n onHide: () => {\n removePopper == null ? void 0 : removePopper();\n }\n });\n vm.appContext = { ...table.appContext, ...table };\n const container = document.createElement(\"div\");\n render(vm, container);\n vm.component.exposed.onOpen();\n const scrollContainer = parentNode == null ? void 0 : parentNode.querySelector(`.${ns}-scrollbar__wrap`);\n removePopper = () => {\n render(null, container);\n scrollContainer == null ? void 0 : scrollContainer.removeEventListener(\"scroll\", removePopper);\n removePopper = null;\n };\n removePopper.trigger = trigger;\n scrollContainer == null ? void 0 : scrollContainer.addEventListener(\"scroll\", removePopper);\n}\nfunction getCurrentColumns(column) {\n if (column.children) {\n return flatMap(column.children, getCurrentColumns);\n } else {\n return [column];\n }\n}\nfunction getColSpan(colSpan, column) {\n return colSpan + column.colSpan;\n}\nconst isFixedColumn = (index, fixed, store, realColumns) => {\n let start = 0;\n let after = index;\n const columns = store.states.columns.value;\n if (realColumns) {\n const curColumns = getCurrentColumns(realColumns[index]);\n const preColumns = columns.slice(0, columns.indexOf(curColumns[0]));\n start = preColumns.reduce(getColSpan, 0);\n after = start + curColumns.reduce(getColSpan, 0) - 1;\n } else {\n start = index;\n }\n let fixedLayout;\n switch (fixed) {\n case \"left\":\n if (after < store.states.fixedLeafColumnsLength.value) {\n fixedLayout = \"left\";\n }\n break;\n case \"right\":\n if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) {\n fixedLayout = \"right\";\n }\n break;\n default:\n if (after < store.states.fixedLeafColumnsLength.value) {\n fixedLayout = \"left\";\n } else if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) {\n fixedLayout = \"right\";\n }\n }\n return fixedLayout ? {\n direction: fixedLayout,\n start,\n after\n } : {};\n};\nconst getFixedColumnsClass = (namespace, index, fixed, store, realColumns, offset = 0) => {\n const classes = [];\n const { direction, start, after } = isFixedColumn(index, fixed, store, realColumns);\n if (direction) {\n const isLeft = direction === \"left\";\n classes.push(`${namespace}-fixed-column--${direction}`);\n if (isLeft && after + offset === store.states.fixedLeafColumnsLength.value - 1) {\n classes.push(\"is-last-column\");\n } else if (!isLeft && start - offset === store.states.columns.value.length - store.states.rightFixedLeafColumnsLength.value) {\n classes.push(\"is-first-column\");\n }\n }\n return classes;\n};\nfunction getOffset(offset, column) {\n return offset + (column.realWidth === null || Number.isNaN(column.realWidth) ? Number(column.width) : column.realWidth);\n}\nconst getFixedColumnOffset = (index, fixed, store, realColumns) => {\n const {\n direction,\n start = 0,\n after = 0\n } = isFixedColumn(index, fixed, store, realColumns);\n if (!direction) {\n return;\n }\n const styles = {};\n const isLeft = direction === \"left\";\n const columns = store.states.columns.value;\n if (isLeft) {\n styles.left = columns.slice(0, start).reduce(getOffset, 0);\n } else {\n styles.right = columns.slice(after + 1).reverse().reduce(getOffset, 0);\n }\n return styles;\n};\nconst ensurePosition = (style, key) => {\n if (!style)\n return;\n if (!Number.isNaN(style[key])) {\n style[key] = `${style[key]}px`;\n }\n};\n\nexport { compose, createTablePopper, ensurePosition, getCell, getColumnByCell, getColumnById, getColumnByKey, getFixedColumnOffset, getFixedColumnsClass, getKeysMap, getRowIdentity, isFixedColumn, mergeOptions, orderBy, parseHeight, parseMinWidth, parseWidth, removePopper, toggleRowStatus, walkTreeNode };\n//# sourceMappingURL=util.mjs.map\n","import { getCurrentInstance, ref } from 'vue';\nimport { getKeysMap, getRowIdentity, toggleRowStatus } from '../util.mjs';\n\nfunction useExpand(watcherData) {\n const instance = getCurrentInstance();\n const defaultExpandAll = ref(false);\n const expandRows = ref([]);\n const updateExpandRows = () => {\n const data = watcherData.data.value || [];\n const rowKey = watcherData.rowKey.value;\n if (defaultExpandAll.value) {\n expandRows.value = data.slice();\n } else if (rowKey) {\n const expandRowsMap = getKeysMap(expandRows.value, rowKey);\n expandRows.value = data.reduce((prev, row) => {\n const rowId = getRowIdentity(row, rowKey);\n const rowInfo = expandRowsMap[rowId];\n if (rowInfo) {\n prev.push(row);\n }\n return prev;\n }, []);\n } else {\n expandRows.value = [];\n }\n };\n const toggleRowExpansion = (row, expanded) => {\n const changed = toggleRowStatus(expandRows.value, row, expanded);\n if (changed) {\n instance.emit(\"expand-change\", row, expandRows.value.slice());\n }\n };\n const setExpandRowKeys = (rowKeys) => {\n instance.store.assertRowKey();\n const data = watcherData.data.value || [];\n const rowKey = watcherData.rowKey.value;\n const keysMap = getKeysMap(data, rowKey);\n expandRows.value = rowKeys.reduce((prev, cur) => {\n const info = keysMap[cur];\n if (info) {\n prev.push(info.row);\n }\n return prev;\n }, []);\n };\n const isRowExpanded = (row) => {\n const rowKey = watcherData.rowKey.value;\n if (rowKey) {\n const expandMap = getKeysMap(expandRows.value, rowKey);\n return !!expandMap[getRowIdentity(row, rowKey)];\n }\n return expandRows.value.includes(row);\n };\n return {\n updateExpandRows,\n toggleRowExpansion,\n setExpandRowKeys,\n isRowExpanded,\n states: {\n expandRows,\n defaultExpandAll\n }\n };\n}\n\nexport { useExpand as default };\n//# sourceMappingURL=expand.mjs.map\n","import { getCurrentInstance, ref, unref } from 'vue';\nimport { getRowIdentity } from '../util.mjs';\n\nfunction useCurrent(watcherData) {\n const instance = getCurrentInstance();\n const _currentRowKey = ref(null);\n const currentRow = ref(null);\n const setCurrentRowKey = (key) => {\n instance.store.assertRowKey();\n _currentRowKey.value = key;\n setCurrentRowByKey(key);\n };\n const restoreCurrentRowKey = () => {\n _currentRowKey.value = null;\n };\n const setCurrentRowByKey = (key) => {\n const { data, rowKey } = watcherData;\n let _currentRow = null;\n if (rowKey.value) {\n _currentRow = (unref(data) || []).find((item) => getRowIdentity(item, rowKey.value) === key);\n }\n currentRow.value = _currentRow;\n instance.emit(\"current-change\", currentRow.value, null);\n };\n const updateCurrentRow = (_currentRow) => {\n const oldCurrentRow = currentRow.value;\n if (_currentRow && _currentRow !== oldCurrentRow) {\n currentRow.value = _currentRow;\n instance.emit(\"current-change\", currentRow.value, oldCurrentRow);\n return;\n }\n if (!_currentRow && oldCurrentRow) {\n currentRow.value = null;\n instance.emit(\"current-change\", null, oldCurrentRow);\n }\n };\n const updateCurrentRowData = () => {\n const rowKey = watcherData.rowKey.value;\n const data = watcherData.data.value || [];\n const oldCurrentRow = currentRow.value;\n if (!data.includes(oldCurrentRow) && oldCurrentRow) {\n if (rowKey) {\n const currentRowKey = getRowIdentity(oldCurrentRow, rowKey);\n setCurrentRowByKey(currentRowKey);\n } else {\n currentRow.value = null;\n }\n if (currentRow.value === null) {\n instance.emit(\"current-change\", null, oldCurrentRow);\n }\n } else if (_currentRowKey.value) {\n setCurrentRowByKey(_currentRowKey.value);\n restoreCurrentRowKey();\n }\n };\n return {\n setCurrentRowKey,\n restoreCurrentRowKey,\n setCurrentRowByKey,\n updateCurrentRow,\n updateCurrentRowData,\n states: {\n _currentRowKey,\n currentRow\n }\n };\n}\n\nexport { useCurrent as default };\n//# sourceMappingURL=current.mjs.map\n","import { ref, getCurrentInstance, computed, unref, watch } from 'vue';\nimport { getRowIdentity, walkTreeNode } from '../util.mjs';\n\nfunction useTree(watcherData) {\n const expandRowKeys = ref([]);\n const treeData = ref({});\n const indent = ref(16);\n const lazy = ref(false);\n const lazyTreeNodeMap = ref({});\n const lazyColumnIdentifier = ref(\"hasChildren\");\n const childrenColumnName = ref(\"children\");\n const checkStrictly = ref(false);\n const instance = getCurrentInstance();\n const normalizedData = computed(() => {\n if (!watcherData.rowKey.value)\n return {};\n const data = watcherData.data.value || [];\n return normalize(data);\n });\n const normalizedLazyNode = computed(() => {\n const rowKey = watcherData.rowKey.value;\n const keys = Object.keys(lazyTreeNodeMap.value);\n const res = {};\n if (!keys.length)\n return res;\n keys.forEach((key) => {\n if (lazyTreeNodeMap.value[key].length) {\n const item = { children: [] };\n lazyTreeNodeMap.value[key].forEach((row) => {\n const currentRowKey = getRowIdentity(row, rowKey);\n item.children.push(currentRowKey);\n if (row[lazyColumnIdentifier.value] && !res[currentRowKey]) {\n res[currentRowKey] = { children: [] };\n }\n });\n res[key] = item;\n }\n });\n return res;\n });\n const normalize = (data) => {\n const rowKey = watcherData.rowKey.value;\n const res = {};\n walkTreeNode(data, (parent, children, level) => {\n const parentId = getRowIdentity(parent, rowKey);\n if (Array.isArray(children)) {\n res[parentId] = {\n children: children.map((row) => getRowIdentity(row, rowKey)),\n level\n };\n } else if (lazy.value) {\n res[parentId] = {\n children: [],\n lazy: true,\n level\n };\n }\n }, childrenColumnName.value, lazyColumnIdentifier.value);\n return res;\n };\n const updateTreeData = (ifChangeExpandRowKeys = false, ifExpandAll = ((_a) => (_a = instance.store) == null ? void 0 : _a.states.defaultExpandAll.value)()) => {\n var _a2;\n const nested = normalizedData.value;\n const normalizedLazyNode_ = normalizedLazyNode.value;\n const keys = Object.keys(nested);\n const newTreeData = {};\n if (keys.length) {\n const oldTreeData = unref(treeData);\n const rootLazyRowKeys = [];\n const getExpanded = (oldValue, key) => {\n if (ifChangeExpandRowKeys) {\n if (expandRowKeys.value) {\n return ifExpandAll || expandRowKeys.value.includes(key);\n } else {\n return !!(ifExpandAll || (oldValue == null ? void 0 : oldValue.expanded));\n }\n } else {\n const included = ifExpandAll || expandRowKeys.value && expandRowKeys.value.includes(key);\n return !!((oldValue == null ? void 0 : oldValue.expanded) || included);\n }\n };\n keys.forEach((key) => {\n const oldValue = oldTreeData[key];\n const newValue = { ...nested[key] };\n newValue.expanded = getExpanded(oldValue, key);\n if (newValue.lazy) {\n const { loaded = false, loading = false } = oldValue || {};\n newValue.loaded = !!loaded;\n newValue.loading = !!loading;\n rootLazyRowKeys.push(key);\n }\n newTreeData[key] = newValue;\n });\n const lazyKeys = Object.keys(normalizedLazyNode_);\n if (lazy.value && lazyKeys.length && rootLazyRowKeys.length) {\n lazyKeys.forEach((key) => {\n const oldValue = oldTreeData[key];\n const lazyNodeChildren = normalizedLazyNode_[key].children;\n if (rootLazyRowKeys.includes(key)) {\n if (newTreeData[key].children.length !== 0) {\n throw new Error(\"[ElTable]children must be an empty array.\");\n }\n newTreeData[key].children = lazyNodeChildren;\n } else {\n const { loaded = false, loading = false } = oldValue || {};\n newTreeData[key] = {\n lazy: true,\n loaded: !!loaded,\n loading: !!loading,\n expanded: getExpanded(oldValue, key),\n children: lazyNodeChildren,\n level: \"\"\n };\n }\n });\n }\n }\n treeData.value = newTreeData;\n (_a2 = instance.store) == null ? void 0 : _a2.updateTableScrollY();\n };\n watch(() => expandRowKeys.value, () => {\n updateTreeData(true);\n });\n watch(() => normalizedData.value, () => {\n updateTreeData();\n });\n watch(() => normalizedLazyNode.value, () => {\n updateTreeData();\n });\n const updateTreeExpandKeys = (value) => {\n expandRowKeys.value = value;\n updateTreeData();\n };\n const toggleTreeExpansion = (row, expanded) => {\n instance.store.assertRowKey();\n const rowKey = watcherData.rowKey.value;\n const id = getRowIdentity(row, rowKey);\n const data = id && treeData.value[id];\n if (id && data && \"expanded\" in data) {\n const oldExpanded = data.expanded;\n expanded = typeof expanded === \"undefined\" ? !data.expanded : expanded;\n treeData.value[id].expanded = expanded;\n if (oldExpanded !== expanded) {\n instance.emit(\"expand-change\", row, expanded);\n }\n instance.store.updateTableScrollY();\n }\n };\n const loadOrToggle = (row) => {\n instance.store.assertRowKey();\n const rowKey = watcherData.rowKey.value;\n const id = getRowIdentity(row, rowKey);\n const data = treeData.value[id];\n if (lazy.value && data && \"loaded\" in data && !data.loaded) {\n loadData(row, id, data);\n } else {\n toggleTreeExpansion(row, void 0);\n }\n };\n const loadData = (row, key, treeNode) => {\n const { load } = instance.props;\n if (load && !treeData.value[key].loaded) {\n treeData.value[key].loading = true;\n load(row, treeNode, (data) => {\n if (!Array.isArray(data)) {\n throw new TypeError(\"[ElTable] data must be an array\");\n }\n treeData.value[key].loading = false;\n treeData.value[key].loaded = true;\n treeData.value[key].expanded = true;\n if (data.length) {\n lazyTreeNodeMap.value[key] = data;\n }\n instance.emit(\"expand-change\", row, true);\n });\n }\n };\n return {\n loadData,\n loadOrToggle,\n toggleTreeExpansion,\n updateTreeExpandKeys,\n updateTreeData,\n normalize,\n states: {\n expandRowKeys,\n treeData,\n indent,\n lazy,\n lazyTreeNodeMap,\n lazyColumnIdentifier,\n childrenColumnName,\n checkStrictly\n }\n };\n}\n\nexport { useTree as default };\n//# sourceMappingURL=tree.mjs.map\n","import { getCurrentInstance, toRefs, ref, watch, unref } from 'vue';\nimport { isEqual } from 'lodash-unified';\nimport '../../../../utils/index.mjs';\nimport { orderBy, getKeysMap, toggleRowStatus, getRowIdentity, getColumnById, getColumnByKey } from '../util.mjs';\nimport useExpand from './expand.mjs';\nimport useCurrent from './current.mjs';\nimport useTree from './tree.mjs';\nimport { isUndefined } from '../../../../utils/types.mjs';\nimport { hasOwn } from '@vue/shared';\n\nconst sortData = (data, states) => {\n const sortingColumn = states.sortingColumn;\n if (!sortingColumn || typeof sortingColumn.sortable === \"string\") {\n return data;\n }\n return orderBy(data, states.sortProp, states.sortOrder, sortingColumn.sortMethod, sortingColumn.sortBy);\n};\nconst doFlattenColumns = (columns) => {\n const result = [];\n columns.forEach((column) => {\n if (column.children && column.children.length > 0) {\n result.push.apply(result, doFlattenColumns(column.children));\n } else {\n result.push(column);\n }\n });\n return result;\n};\nfunction useWatcher() {\n var _a;\n const instance = getCurrentInstance();\n const { size: tableSize } = toRefs((_a = instance.proxy) == null ? void 0 : _a.$props);\n const rowKey = ref(null);\n const data = ref([]);\n const _data = ref([]);\n const isComplex = ref(false);\n const _columns = ref([]);\n const originColumns = ref([]);\n const columns = ref([]);\n const fixedColumns = ref([]);\n const rightFixedColumns = ref([]);\n const leafColumns = ref([]);\n const fixedLeafColumns = ref([]);\n const rightFixedLeafColumns = ref([]);\n const updateOrderFns = [];\n const leafColumnsLength = ref(0);\n const fixedLeafColumnsLength = ref(0);\n const rightFixedLeafColumnsLength = ref(0);\n const isAllSelected = ref(false);\n const selection = ref([]);\n const reserveSelection = ref(false);\n const selectOnIndeterminate = ref(false);\n const selectable = ref(null);\n const filters = ref({});\n const filteredData = ref(null);\n const sortingColumn = ref(null);\n const sortProp = ref(null);\n const sortOrder = ref(null);\n const hoverRow = ref(null);\n watch(data, () => instance.state && scheduleLayout(false), {\n deep: true\n });\n const assertRowKey = () => {\n if (!rowKey.value)\n throw new Error(\"[ElTable] prop row-key is required\");\n };\n const updateChildFixed = (column) => {\n var _a2;\n (_a2 = column.children) == null ? void 0 : _a2.forEach((childColumn) => {\n childColumn.fixed = column.fixed;\n updateChildFixed(childColumn);\n });\n };\n let selectionInitialFixed = void 0;\n const updateColumns = () => {\n _columns.value.forEach((column) => {\n updateChildFixed(column);\n });\n fixedColumns.value = _columns.value.filter((column) => column.fixed === true || column.fixed === \"left\");\n rightFixedColumns.value = _columns.value.filter((column) => column.fixed === \"right\");\n if (isUndefined(selectionInitialFixed) && _columns.value[0] && _columns.value[0].type === \"selection\") {\n selectionInitialFixed = Boolean(_columns.value[0].fixed);\n }\n if (fixedColumns.value.length > 0 && _columns.value[0] && _columns.value[0].type === \"selection\") {\n if (!_columns.value[0].fixed) {\n _columns.value[0].fixed = true;\n fixedColumns.value.unshift(_columns.value[0]);\n } else {\n const hasNotSelectionColumns = fixedColumns.value.some((column) => column.type !== \"selection\");\n if (!hasNotSelectionColumns) {\n _columns.value[0].fixed = selectionInitialFixed;\n if (!selectionInitialFixed)\n fixedColumns.value.shift();\n } else {\n selectionInitialFixed = void 0;\n }\n }\n }\n const notFixedColumns = _columns.value.filter((column) => !column.fixed);\n originColumns.value = [].concat(fixedColumns.value).concat(notFixedColumns).concat(rightFixedColumns.value);\n const leafColumns2 = doFlattenColumns(notFixedColumns);\n const fixedLeafColumns2 = doFlattenColumns(fixedColumns.value);\n const rightFixedLeafColumns2 = doFlattenColumns(rightFixedColumns.value);\n leafColumnsLength.value = leafColumns2.length;\n fixedLeafColumnsLength.value = fixedLeafColumns2.length;\n rightFixedLeafColumnsLength.value = rightFixedLeafColumns2.length;\n columns.value = [].concat(fixedLeafColumns2).concat(leafColumns2).concat(rightFixedLeafColumns2);\n isComplex.value = fixedColumns.value.length > 0 || rightFixedColumns.value.length > 0;\n };\n const scheduleLayout = (needUpdateColumns, immediate = false) => {\n if (needUpdateColumns) {\n updateColumns();\n }\n if (immediate) {\n instance.state.doLayout();\n } else {\n instance.state.debouncedUpdateLayout();\n }\n };\n const isSelected = (row) => {\n return selection.value.some((item) => isEqual(item, row));\n };\n const clearSelection = () => {\n isAllSelected.value = false;\n const oldSelection = selection.value;\n selection.value = [];\n if (oldSelection.length) {\n instance.emit(\"selection-change\", []);\n }\n };\n const cleanSelection = () => {\n let deleted;\n if (rowKey.value) {\n deleted = [];\n const selectedMap = getKeysMap(selection.value, rowKey.value);\n const dataMap = getKeysMap(data.value, rowKey.value);\n for (const key in selectedMap) {\n if (hasOwn(selectedMap, key) && !dataMap[key]) {\n deleted.push(selectedMap[key].row);\n }\n }\n } else {\n deleted = selection.value.filter((item) => !data.value.includes(item));\n }\n if (deleted.length) {\n const newSelection = selection.value.filter((item) => !deleted.includes(item));\n selection.value = newSelection;\n instance.emit(\"selection-change\", newSelection.slice());\n }\n };\n const getSelectionRows = () => {\n return (selection.value || []).slice();\n };\n const toggleRowSelection = (row, selected, emitChange = true, ignoreSelectable = false) => {\n var _a2, _b, _c, _d;\n const treeProps = {\n children: (_b = (_a2 = instance == null ? void 0 : instance.store) == null ? void 0 : _a2.states) == null ? void 0 : _b.childrenColumnName.value,\n checkStrictly: (_d = (_c = instance == null ? void 0 : instance.store) == null ? void 0 : _c.states) == null ? void 0 : _d.checkStrictly.value\n };\n const changed = toggleRowStatus(selection.value, row, selected, treeProps, ignoreSelectable ? void 0 : selectable.value);\n if (changed) {\n const newSelection = (selection.value || []).slice();\n if (emitChange) {\n instance.emit(\"select\", newSelection, row);\n }\n instance.emit(\"selection-change\", newSelection);\n }\n };\n const _toggleAllSelection = () => {\n var _a2, _b;\n const value = selectOnIndeterminate.value ? !isAllSelected.value : !(isAllSelected.value || selection.value.length);\n isAllSelected.value = value;\n let selectionChanged = false;\n let childrenCount = 0;\n const rowKey2 = (_b = (_a2 = instance == null ? void 0 : instance.store) == null ? void 0 : _a2.states) == null ? void 0 : _b.rowKey.value;\n const { childrenColumnName } = instance.store.states;\n const treeProps = {\n children: childrenColumnName.value,\n checkStrictly: false\n };\n data.value.forEach((row, index) => {\n const rowIndex = index + childrenCount;\n if (toggleRowStatus(selection.value, row, value, treeProps, selectable.value, rowIndex)) {\n selectionChanged = true;\n }\n childrenCount += getChildrenCount(getRowIdentity(row, rowKey2));\n });\n if (selectionChanged) {\n instance.emit(\"selection-change\", selection.value ? selection.value.slice() : []);\n }\n instance.emit(\"select-all\", (selection.value || []).slice());\n };\n const updateSelectionByRowKey = () => {\n const selectedMap = getKeysMap(selection.value, rowKey.value);\n data.value.forEach((row) => {\n const rowId = getRowIdentity(row, rowKey.value);\n const rowInfo = selectedMap[rowId];\n if (rowInfo) {\n selection.value[rowInfo.index] = row;\n }\n });\n };\n const updateAllSelected = () => {\n var _a2;\n if (((_a2 = data.value) == null ? void 0 : _a2.length) === 0) {\n isAllSelected.value = false;\n return;\n }\n const { childrenColumnName } = instance.store.states;\n const selectedMap = rowKey.value ? getKeysMap(selection.value, rowKey.value) : void 0;\n let rowIndex = 0;\n let selectedCount = 0;\n const isSelected2 = (row) => {\n if (selectedMap) {\n return !!selectedMap[getRowIdentity(row, rowKey.value)];\n } else {\n return selection.value.includes(row);\n }\n };\n const checkSelectedStatus = (data2) => {\n var _a3;\n for (const row of data2) {\n const isRowSelectable = selectable.value && selectable.value.call(null, row, rowIndex);\n if (!isSelected2(row)) {\n if (!selectable.value || isRowSelectable) {\n return false;\n }\n } else {\n selectedCount++;\n }\n rowIndex++;\n if (((_a3 = row[childrenColumnName.value]) == null ? void 0 : _a3.length) && !checkSelectedStatus(row[childrenColumnName.value])) {\n return false;\n }\n }\n return true;\n };\n const isAllSelected_ = checkSelectedStatus(data.value || []);\n isAllSelected.value = selectedCount === 0 ? false : isAllSelected_;\n };\n const getChildrenCount = (rowKey2) => {\n var _a2;\n if (!instance || !instance.store)\n return 0;\n const { treeData } = instance.store.states;\n let count = 0;\n const children = (_a2 = treeData.value[rowKey2]) == null ? void 0 : _a2.children;\n if (children) {\n count += children.length;\n children.forEach((childKey) => {\n count += getChildrenCount(childKey);\n });\n }\n return count;\n };\n const updateFilters = (columns2, values) => {\n if (!Array.isArray(columns2)) {\n columns2 = [columns2];\n }\n const filters_ = {};\n columns2.forEach((col) => {\n filters.value[col.id] = values;\n filters_[col.columnKey || col.id] = values;\n });\n return filters_;\n };\n const updateSort = (column, prop, order) => {\n if (sortingColumn.value && sortingColumn.value !== column) {\n sortingColumn.value.order = null;\n }\n sortingColumn.value = column;\n sortProp.value = prop;\n sortOrder.value = order;\n };\n const execFilter = () => {\n let sourceData = unref(_data);\n Object.keys(filters.value).forEach((columnId) => {\n const values = filters.value[columnId];\n if (!values || values.length === 0)\n return;\n const column = getColumnById({\n columns: columns.value\n }, columnId);\n if (column && column.filterMethod) {\n sourceData = sourceData.filter((row) => {\n return values.some((value) => column.filterMethod.call(null, value, row, column));\n });\n }\n });\n filteredData.value = sourceData;\n };\n const execSort = () => {\n data.value = sortData(filteredData.value, {\n sortingColumn: sortingColumn.value,\n sortProp: sortProp.value,\n sortOrder: sortOrder.value\n });\n };\n const execQuery = (ignore = void 0) => {\n if (!(ignore && ignore.filter)) {\n execFilter();\n }\n execSort();\n };\n const clearFilter = (columnKeys) => {\n const { tableHeaderRef } = instance.refs;\n if (!tableHeaderRef)\n return;\n const panels = Object.assign({}, tableHeaderRef.filterPanels);\n const keys = Object.keys(panels);\n if (!keys.length)\n return;\n if (typeof columnKeys === \"string\") {\n columnKeys = [columnKeys];\n }\n if (Array.isArray(columnKeys)) {\n const columns_ = columnKeys.map((key) => getColumnByKey({\n columns: columns.value\n }, key));\n keys.forEach((key) => {\n const column = columns_.find((col) => col.id === key);\n if (column) {\n column.filteredValue = [];\n }\n });\n instance.store.commit(\"filterChange\", {\n column: columns_,\n values: [],\n silent: true,\n multi: true\n });\n } else {\n keys.forEach((key) => {\n const column = columns.value.find((col) => col.id === key);\n if (column) {\n column.filteredValue = [];\n }\n });\n filters.value = {};\n instance.store.commit(\"filterChange\", {\n column: {},\n values: [],\n silent: true\n });\n }\n };\n const clearSort = () => {\n if (!sortingColumn.value)\n return;\n updateSort(null, null, null);\n instance.store.commit(\"changeSortCondition\", {\n silent: true\n });\n };\n const {\n setExpandRowKeys,\n toggleRowExpansion,\n updateExpandRows,\n states: expandStates,\n isRowExpanded\n } = useExpand({\n data,\n rowKey\n });\n const {\n updateTreeExpandKeys,\n toggleTreeExpansion,\n updateTreeData,\n loadOrToggle,\n states: treeStates\n } = useTree({\n data,\n rowKey\n });\n const {\n updateCurrentRowData,\n updateCurrentRow,\n setCurrentRowKey,\n states: currentData\n } = useCurrent({\n data,\n rowKey\n });\n const setExpandRowKeysAdapter = (val) => {\n setExpandRowKeys(val);\n updateTreeExpandKeys(val);\n };\n const toggleRowExpansionAdapter = (row, expanded) => {\n const hasExpandColumn = columns.value.some(({ type }) => type === \"expand\");\n if (hasExpandColumn) {\n toggleRowExpansion(row, expanded);\n } else {\n toggleTreeExpansion(row, expanded);\n }\n };\n return {\n assertRowKey,\n updateColumns,\n scheduleLayout,\n isSelected,\n clearSelection,\n cleanSelection,\n getSelectionRows,\n toggleRowSelection,\n _toggleAllSelection,\n toggleAllSelection: null,\n updateSelectionByRowKey,\n updateAllSelected,\n updateFilters,\n updateCurrentRow,\n updateSort,\n execFilter,\n execSort,\n execQuery,\n clearFilter,\n clearSort,\n toggleRowExpansion,\n setExpandRowKeysAdapter,\n setCurrentRowKey,\n toggleRowExpansionAdapter,\n isRowExpanded,\n updateExpandRows,\n updateCurrentRowData,\n loadOrToggle,\n updateTreeData,\n states: {\n tableSize,\n rowKey,\n data,\n _data,\n isComplex,\n _columns,\n originColumns,\n columns,\n fixedColumns,\n rightFixedColumns,\n leafColumns,\n fixedLeafColumns,\n rightFixedLeafColumns,\n updateOrderFns,\n leafColumnsLength,\n fixedLeafColumnsLength,\n rightFixedLeafColumnsLength,\n isAllSelected,\n selection,\n reserveSelection,\n selectOnIndeterminate,\n selectable,\n filters,\n filteredData,\n sortingColumn,\n sortProp,\n sortOrder,\n hoverRow,\n ...expandStates,\n ...treeStates,\n ...currentData\n }\n };\n}\n\nexport { useWatcher as default };\n//# sourceMappingURL=watcher.mjs.map\n","import { getCurrentInstance, unref, nextTick } from 'vue';\nimport '../../../../hooks/index.mjs';\nimport useWatcher from './watcher.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\n\nfunction replaceColumn(array, column) {\n return array.map((item) => {\n var _a;\n if (item.id === column.id) {\n return column;\n } else if ((_a = item.children) == null ? void 0 : _a.length) {\n item.children = replaceColumn(item.children, column);\n }\n return item;\n });\n}\nfunction sortColumn(array) {\n array.forEach((item) => {\n var _a, _b;\n item.no = (_a = item.getColumnIndex) == null ? void 0 : _a.call(item);\n if ((_b = item.children) == null ? void 0 : _b.length) {\n sortColumn(item.children);\n }\n });\n array.sort((cur, pre) => cur.no - pre.no);\n}\nfunction useStore() {\n const instance = getCurrentInstance();\n const watcher = useWatcher();\n const ns = useNamespace(\"table\");\n const mutations = {\n setData(states, data) {\n const dataInstanceChanged = unref(states._data) !== data;\n states.data.value = data;\n states._data.value = data;\n instance.store.execQuery();\n instance.store.updateCurrentRowData();\n instance.store.updateExpandRows();\n instance.store.updateTreeData(instance.store.states.defaultExpandAll.value);\n if (unref(states.reserveSelection)) {\n instance.store.assertRowKey();\n instance.store.updateSelectionByRowKey();\n } else {\n if (dataInstanceChanged) {\n instance.store.clearSelection();\n } else {\n instance.store.cleanSelection();\n }\n }\n instance.store.updateAllSelected();\n if (instance.$ready) {\n instance.store.scheduleLayout();\n }\n },\n insertColumn(states, column, parent, updateColumnOrder) {\n const array = unref(states._columns);\n let newColumns = [];\n if (!parent) {\n array.push(column);\n newColumns = array;\n } else {\n if (parent && !parent.children) {\n parent.children = [];\n }\n parent.children.push(column);\n newColumns = replaceColumn(array, parent);\n }\n sortColumn(newColumns);\n states._columns.value = newColumns;\n states.updateOrderFns.push(updateColumnOrder);\n if (column.type === \"selection\") {\n states.selectable.value = column.selectable;\n states.reserveSelection.value = column.reserveSelection;\n }\n if (instance.$ready) {\n instance.store.updateColumns();\n instance.store.scheduleLayout();\n }\n },\n updateColumnOrder(states, column) {\n var _a;\n const newColumnIndex = (_a = column.getColumnIndex) == null ? void 0 : _a.call(column);\n if (newColumnIndex === column.no)\n return;\n sortColumn(states._columns.value);\n if (instance.$ready) {\n instance.store.updateColumns();\n }\n },\n removeColumn(states, column, parent, updateColumnOrder) {\n const array = unref(states._columns) || [];\n if (parent) {\n parent.children.splice(parent.children.findIndex((item) => item.id === column.id), 1);\n nextTick(() => {\n var _a;\n if (((_a = parent.children) == null ? void 0 : _a.length) === 0) {\n delete parent.children;\n }\n });\n states._columns.value = replaceColumn(array, parent);\n } else {\n const index = array.indexOf(column);\n if (index > -1) {\n array.splice(index, 1);\n states._columns.value = array;\n }\n }\n const updateFnIndex = states.updateOrderFns.indexOf(updateColumnOrder);\n updateFnIndex > -1 && states.updateOrderFns.splice(updateFnIndex, 1);\n if (instance.$ready) {\n instance.store.updateColumns();\n instance.store.scheduleLayout();\n }\n },\n sort(states, options) {\n const { prop, order, init } = options;\n if (prop) {\n const column = unref(states.columns).find((column2) => column2.property === prop);\n if (column) {\n column.order = order;\n instance.store.updateSort(column, prop, order);\n instance.store.commit(\"changeSortCondition\", { init });\n }\n }\n },\n changeSortCondition(states, options) {\n const { sortingColumn, sortProp, sortOrder } = states;\n const columnValue = unref(sortingColumn), propValue = unref(sortProp), orderValue = unref(sortOrder);\n if (orderValue === null) {\n states.sortingColumn.value = null;\n states.sortProp.value = null;\n }\n const ignore = { filter: true };\n instance.store.execQuery(ignore);\n if (!options || !(options.silent || options.init)) {\n instance.emit(\"sort-change\", {\n column: columnValue,\n prop: propValue,\n order: orderValue\n });\n }\n instance.store.updateTableScrollY();\n },\n filterChange(_states, options) {\n const { column, values, silent } = options;\n const newFilters = instance.store.updateFilters(column, values);\n instance.store.execQuery();\n if (!silent) {\n instance.emit(\"filter-change\", newFilters);\n }\n instance.store.updateTableScrollY();\n },\n toggleAllSelection() {\n instance.store.toggleAllSelection();\n },\n rowSelectedChanged(_states, row) {\n instance.store.toggleRowSelection(row);\n instance.store.updateAllSelected();\n },\n setHoverRow(states, row) {\n states.hoverRow.value = row;\n },\n setCurrentRow(_states, row) {\n instance.store.updateCurrentRow(row);\n }\n };\n const commit = function(name, ...args) {\n const mutations2 = instance.store.mutations;\n if (mutations2[name]) {\n mutations2[name].apply(instance, [instance.store.states].concat(args));\n } else {\n throw new Error(`Action not found: ${name}`);\n }\n };\n const updateTableScrollY = function() {\n nextTick(() => instance.layout.updateScrollY.apply(instance.layout));\n };\n return {\n ns,\n ...watcher,\n mutations,\n commit,\n updateTableScrollY\n };\n}\nclass HelperStore {\n constructor() {\n this.Return = useStore();\n }\n}\n\nexport { useStore as default };\n//# sourceMappingURL=index.mjs.map\n","import { watch } from 'vue';\nimport { debounce } from 'lodash-unified';\nimport useStore from './index.mjs';\n\nconst InitialStateMap = {\n rowKey: \"rowKey\",\n defaultExpandAll: \"defaultExpandAll\",\n selectOnIndeterminate: \"selectOnIndeterminate\",\n indent: \"indent\",\n lazy: \"lazy\",\n data: \"data\",\n [\"treeProps.hasChildren\"]: {\n key: \"lazyColumnIdentifier\",\n default: \"hasChildren\"\n },\n [\"treeProps.children\"]: {\n key: \"childrenColumnName\",\n default: \"children\"\n },\n [\"treeProps.checkStrictly\"]: {\n key: \"checkStrictly\",\n default: false\n }\n};\nfunction createStore(table, props) {\n if (!table) {\n throw new Error(\"Table is required.\");\n }\n const store = useStore();\n store.toggleAllSelection = debounce(store._toggleAllSelection, 10);\n Object.keys(InitialStateMap).forEach((key) => {\n handleValue(getArrKeysValue(props, key), key, store);\n });\n proxyTableProps(store, props);\n return store;\n}\nfunction proxyTableProps(store, props) {\n Object.keys(InitialStateMap).forEach((key) => {\n watch(() => getArrKeysValue(props, key), (value) => {\n handleValue(value, key, store);\n });\n });\n}\nfunction handleValue(value, propsKey, store) {\n let newVal = value;\n let storeKey = InitialStateMap[propsKey];\n if (typeof InitialStateMap[propsKey] === \"object\") {\n storeKey = storeKey.key;\n newVal = newVal || InitialStateMap[propsKey].default;\n }\n store.states[storeKey].value = newVal;\n}\nfunction getArrKeysValue(props, keys) {\n if (keys.includes(\".\")) {\n const keyList = keys.split(\".\");\n let value = props;\n keyList.forEach((key) => {\n value = value[key];\n });\n return value;\n } else {\n return props[keys];\n }\n}\n\nexport { createStore };\n//# sourceMappingURL=helper.mjs.map\n","import { ref, isRef, nextTick } from 'vue';\nimport '../../../utils/index.mjs';\nimport { parseHeight } from './util.mjs';\nimport { hasOwn } from '@vue/shared';\nimport { isClient } from '@vueuse/core';\n\nclass TableLayout {\n constructor(options) {\n this.observers = [];\n this.table = null;\n this.store = null;\n this.columns = [];\n this.fit = true;\n this.showHeader = true;\n this.height = ref(null);\n this.scrollX = ref(false);\n this.scrollY = ref(false);\n this.bodyWidth = ref(null);\n this.fixedWidth = ref(null);\n this.rightFixedWidth = ref(null);\n this.gutterWidth = 0;\n for (const name in options) {\n if (hasOwn(options, name)) {\n if (isRef(this[name])) {\n this[name].value = options[name];\n } else {\n this[name] = options[name];\n }\n }\n }\n if (!this.table) {\n throw new Error(\"Table is required for Table Layout\");\n }\n if (!this.store) {\n throw new Error(\"Store is required for Table Layout\");\n }\n }\n updateScrollY() {\n const height = this.height.value;\n if (height === null)\n return false;\n const scrollBarRef = this.table.refs.scrollBarRef;\n if (this.table.vnode.el && (scrollBarRef == null ? void 0 : scrollBarRef.wrapRef)) {\n let scrollY = true;\n const prevScrollY = this.scrollY.value;\n scrollY = scrollBarRef.wrapRef.scrollHeight > scrollBarRef.wrapRef.clientHeight;\n this.scrollY.value = scrollY;\n return prevScrollY !== scrollY;\n }\n return false;\n }\n setHeight(value, prop = \"height\") {\n if (!isClient)\n return;\n const el = this.table.vnode.el;\n value = parseHeight(value);\n this.height.value = Number(value);\n if (!el && (value || value === 0))\n return nextTick(() => this.setHeight(value, prop));\n if (typeof value === \"number\") {\n el.style[prop] = `${value}px`;\n this.updateElsHeight();\n } else if (typeof value === \"string\") {\n el.style[prop] = value;\n this.updateElsHeight();\n }\n }\n setMaxHeight(value) {\n this.setHeight(value, \"max-height\");\n }\n getFlattenColumns() {\n const flattenColumns = [];\n const columns = this.table.store.states.columns.value;\n columns.forEach((column) => {\n if (column.isColumnGroup) {\n flattenColumns.push.apply(flattenColumns, column.columns);\n } else {\n flattenColumns.push(column);\n }\n });\n return flattenColumns;\n }\n updateElsHeight() {\n this.updateScrollY();\n this.notifyObservers(\"scrollable\");\n }\n headerDisplayNone(elm) {\n if (!elm)\n return true;\n let headerChild = elm;\n while (headerChild.tagName !== \"DIV\") {\n if (getComputedStyle(headerChild).display === \"none\") {\n return true;\n }\n headerChild = headerChild.parentElement;\n }\n return false;\n }\n updateColumnsWidth() {\n if (!isClient)\n return;\n const fit = this.fit;\n const bodyWidth = this.table.vnode.el.clientWidth;\n let bodyMinWidth = 0;\n const flattenColumns = this.getFlattenColumns();\n const flexColumns = flattenColumns.filter((column) => typeof column.width !== \"number\");\n flattenColumns.forEach((column) => {\n if (typeof column.width === \"number\" && column.realWidth)\n column.realWidth = null;\n });\n if (flexColumns.length > 0 && fit) {\n flattenColumns.forEach((column) => {\n bodyMinWidth += Number(column.width || column.minWidth || 80);\n });\n if (bodyMinWidth <= bodyWidth) {\n this.scrollX.value = false;\n const totalFlexWidth = bodyWidth - bodyMinWidth;\n if (flexColumns.length === 1) {\n flexColumns[0].realWidth = Number(flexColumns[0].minWidth || 80) + totalFlexWidth;\n } else {\n const allColumnsWidth = flexColumns.reduce((prev, column) => prev + Number(column.minWidth || 80), 0);\n const flexWidthPerPixel = totalFlexWidth / allColumnsWidth;\n let noneFirstWidth = 0;\n flexColumns.forEach((column, index) => {\n if (index === 0)\n return;\n const flexWidth = Math.floor(Number(column.minWidth || 80) * flexWidthPerPixel);\n noneFirstWidth += flexWidth;\n column.realWidth = Number(column.minWidth || 80) + flexWidth;\n });\n flexColumns[0].realWidth = Number(flexColumns[0].minWidth || 80) + totalFlexWidth - noneFirstWidth;\n }\n } else {\n this.scrollX.value = true;\n flexColumns.forEach((column) => {\n column.realWidth = Number(column.minWidth);\n });\n }\n this.bodyWidth.value = Math.max(bodyMinWidth, bodyWidth);\n this.table.state.resizeState.value.width = this.bodyWidth.value;\n } else {\n flattenColumns.forEach((column) => {\n if (!column.width && !column.minWidth) {\n column.realWidth = 80;\n } else {\n column.realWidth = Number(column.width || column.minWidth);\n }\n bodyMinWidth += column.realWidth;\n });\n this.scrollX.value = bodyMinWidth > bodyWidth;\n this.bodyWidth.value = bodyMinWidth;\n }\n const fixedColumns = this.store.states.fixedColumns.value;\n if (fixedColumns.length > 0) {\n let fixedWidth = 0;\n fixedColumns.forEach((column) => {\n fixedWidth += Number(column.realWidth || column.width);\n });\n this.fixedWidth.value = fixedWidth;\n }\n const rightFixedColumns = this.store.states.rightFixedColumns.value;\n if (rightFixedColumns.length > 0) {\n let rightFixedWidth = 0;\n rightFixedColumns.forEach((column) => {\n rightFixedWidth += Number(column.realWidth || column.width);\n });\n this.rightFixedWidth.value = rightFixedWidth;\n }\n this.notifyObservers(\"columns\");\n }\n addObserver(observer) {\n this.observers.push(observer);\n }\n removeObserver(observer) {\n const index = this.observers.indexOf(observer);\n if (index !== -1) {\n this.observers.splice(index, 1);\n }\n }\n notifyObservers(event) {\n const observers = this.observers;\n observers.forEach((observer) => {\n var _a, _b;\n switch (event) {\n case \"columns\":\n (_a = observer.state) == null ? void 0 : _a.onColumnsChange(this);\n break;\n case \"scrollable\":\n (_b = observer.state) == null ? void 0 : _b.onScrollableChange(this);\n break;\n default:\n throw new Error(`Table Layout don't have event ${event}.`);\n }\n });\n }\n}\n\nexport { TableLayout as default };\n//# sourceMappingURL=table-layout.mjs.map\n","import { defineComponent, getCurrentInstance, ref, computed, watch, resolveComponent, resolveDirective, openBlock, createBlock, withCtx, createElementBlock, createElementVNode, normalizeClass, createVNode, Fragment, renderList, createTextVNode, toDisplayString, withDirectives, renderSlot } from 'vue';\nimport { ElCheckbox } from '../../checkbox/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { ArrowDown, ArrowUp } from '@element-plus/icons-vue';\nimport '../../../directives/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { ElTooltip } from '../../tooltip/index.mjs';\nimport { ElScrollbar } from '../../scrollbar/index.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport ClickOutside from '../../../directives/click-outside/index.mjs';\nimport { useLocale } from '../../../hooks/use-locale/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst { CheckboxGroup: ElCheckboxGroup } = ElCheckbox;\nconst _sfc_main = defineComponent({\n name: \"ElTableFilterPanel\",\n components: {\n ElCheckbox,\n ElCheckboxGroup,\n ElScrollbar,\n ElTooltip,\n ElIcon,\n ArrowDown,\n ArrowUp\n },\n directives: { ClickOutside },\n props: {\n placement: {\n type: String,\n default: \"bottom-start\"\n },\n store: {\n type: Object\n },\n column: {\n type: Object\n },\n upDataColumn: {\n type: Function\n }\n },\n setup(props) {\n const instance = getCurrentInstance();\n const { t } = useLocale();\n const ns = useNamespace(\"table-filter\");\n const parent = instance == null ? void 0 : instance.parent;\n if (!parent.filterPanels.value[props.column.id]) {\n parent.filterPanels.value[props.column.id] = instance;\n }\n const tooltipVisible = ref(false);\n const tooltip = ref(null);\n const filters = computed(() => {\n return props.column && props.column.filters;\n });\n const filterClassName = computed(() => {\n if (props.column.filterClassName) {\n return `${ns.b()} ${props.column.filterClassName}`;\n }\n return ns.b();\n });\n const filterValue = computed({\n get: () => {\n var _a;\n return (((_a = props.column) == null ? void 0 : _a.filteredValue) || [])[0];\n },\n set: (value) => {\n if (filteredValue.value) {\n if (typeof value !== \"undefined\" && value !== null) {\n filteredValue.value.splice(0, 1, value);\n } else {\n filteredValue.value.splice(0, 1);\n }\n }\n }\n });\n const filteredValue = computed({\n get() {\n if (props.column) {\n return props.column.filteredValue || [];\n }\n return [];\n },\n set(value) {\n if (props.column) {\n props.upDataColumn(\"filteredValue\", value);\n }\n }\n });\n const multiple = computed(() => {\n if (props.column) {\n return props.column.filterMultiple;\n }\n return true;\n });\n const isActive = (filter) => {\n return filter.value === filterValue.value;\n };\n const hidden = () => {\n tooltipVisible.value = false;\n };\n const showFilterPanel = (e) => {\n e.stopPropagation();\n tooltipVisible.value = !tooltipVisible.value;\n };\n const hideFilterPanel = () => {\n tooltipVisible.value = false;\n };\n const handleConfirm = () => {\n confirmFilter(filteredValue.value);\n hidden();\n };\n const handleReset = () => {\n filteredValue.value = [];\n confirmFilter(filteredValue.value);\n hidden();\n };\n const handleSelect = (_filterValue) => {\n filterValue.value = _filterValue;\n if (typeof _filterValue !== \"undefined\" && _filterValue !== null) {\n confirmFilter(filteredValue.value);\n } else {\n confirmFilter([]);\n }\n hidden();\n };\n const confirmFilter = (filteredValue2) => {\n props.store.commit(\"filterChange\", {\n column: props.column,\n values: filteredValue2\n });\n props.store.updateAllSelected();\n };\n watch(tooltipVisible, (value) => {\n if (props.column) {\n props.upDataColumn(\"filterOpened\", value);\n }\n }, {\n immediate: true\n });\n const popperPaneRef = computed(() => {\n var _a, _b;\n return (_b = (_a = tooltip.value) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.contentRef;\n });\n return {\n tooltipVisible,\n multiple,\n filterClassName,\n filteredValue,\n filterValue,\n filters,\n handleConfirm,\n handleReset,\n handleSelect,\n isActive,\n t,\n ns,\n showFilterPanel,\n hideFilterPanel,\n popperPaneRef,\n tooltip\n };\n }\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_checkbox = resolveComponent(\"el-checkbox\");\n const _component_el_checkbox_group = resolveComponent(\"el-checkbox-group\");\n const _component_el_scrollbar = resolveComponent(\"el-scrollbar\");\n const _component_arrow_up = resolveComponent(\"arrow-up\");\n const _component_arrow_down = resolveComponent(\"arrow-down\");\n const _component_el_icon = resolveComponent(\"el-icon\");\n const _component_el_tooltip = resolveComponent(\"el-tooltip\");\n const _directive_click_outside = resolveDirective(\"click-outside\");\n return openBlock(), createBlock(_component_el_tooltip, {\n ref: \"tooltip\",\n visible: _ctx.tooltipVisible,\n offset: 0,\n placement: _ctx.placement,\n \"show-arrow\": false,\n \"stop-popper-mouse-event\": false,\n teleported: \"\",\n effect: \"light\",\n pure: \"\",\n \"popper-class\": _ctx.filterClassName,\n persistent: \"\"\n }, {\n content: withCtx(() => [\n _ctx.multiple ? (openBlock(), createElementBlock(\"div\", { key: 0 }, [\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.ns.e(\"content\"))\n }, [\n createVNode(_component_el_scrollbar, {\n \"wrap-class\": _ctx.ns.e(\"wrap\")\n }, {\n default: withCtx(() => [\n createVNode(_component_el_checkbox_group, {\n modelValue: _ctx.filteredValue,\n \"onUpdate:modelValue\": ($event) => _ctx.filteredValue = $event,\n class: normalizeClass(_ctx.ns.e(\"checkbox-group\"))\n }, {\n default: withCtx(() => [\n (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.filters, (filter) => {\n return openBlock(), createBlock(_component_el_checkbox, {\n key: filter.value,\n value: filter.value\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString(filter.text), 1)\n ]),\n _: 2\n }, 1032, [\"value\"]);\n }), 128))\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"class\"])\n ]),\n _: 1\n }, 8, [\"wrap-class\"])\n ], 2),\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.ns.e(\"bottom\"))\n }, [\n createElementVNode(\"button\", {\n class: normalizeClass({ [_ctx.ns.is(\"disabled\")]: _ctx.filteredValue.length === 0 }),\n disabled: _ctx.filteredValue.length === 0,\n type: \"button\",\n onClick: _ctx.handleConfirm\n }, toDisplayString(_ctx.t(\"el.table.confirmFilter\")), 11, [\"disabled\", \"onClick\"]),\n createElementVNode(\"button\", {\n type: \"button\",\n onClick: _ctx.handleReset\n }, toDisplayString(_ctx.t(\"el.table.resetFilter\")), 9, [\"onClick\"])\n ], 2)\n ])) : (openBlock(), createElementBlock(\"ul\", {\n key: 1,\n class: normalizeClass(_ctx.ns.e(\"list\"))\n }, [\n createElementVNode(\"li\", {\n class: normalizeClass([\n _ctx.ns.e(\"list-item\"),\n {\n [_ctx.ns.is(\"active\")]: _ctx.filterValue === void 0 || _ctx.filterValue === null\n }\n ]),\n onClick: ($event) => _ctx.handleSelect(null)\n }, toDisplayString(_ctx.t(\"el.table.clearFilter\")), 11, [\"onClick\"]),\n (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.filters, (filter) => {\n return openBlock(), createElementBlock(\"li\", {\n key: filter.value,\n class: normalizeClass([_ctx.ns.e(\"list-item\"), _ctx.ns.is(\"active\", _ctx.isActive(filter))]),\n label: filter.value,\n onClick: ($event) => _ctx.handleSelect(filter.value)\n }, toDisplayString(filter.text), 11, [\"label\", \"onClick\"]);\n }), 128))\n ], 2))\n ]),\n default: withCtx(() => [\n withDirectives((openBlock(), createElementBlock(\"span\", {\n class: normalizeClass([\n `${_ctx.ns.namespace.value}-table__column-filter-trigger`,\n `${_ctx.ns.namespace.value}-none-outline`\n ]),\n onClick: _ctx.showFilterPanel\n }, [\n createVNode(_component_el_icon, null, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"filter-icon\", {}, () => [\n _ctx.column.filterOpened ? (openBlock(), createBlock(_component_arrow_up, { key: 0 })) : (openBlock(), createBlock(_component_arrow_down, { key: 1 }))\n ])\n ]),\n _: 3\n })\n ], 10, [\"onClick\"])), [\n [_directive_click_outside, _ctx.hideFilterPanel, _ctx.popperPaneRef]\n ])\n ]),\n _: 3\n }, 8, [\"visible\", \"placement\", \"popper-class\"]);\n}\nvar FilterPanel = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__file\", \"filter-panel.vue\"]]);\n\nexport { FilterPanel as default };\n//# sourceMappingURL=filter-panel.mjs.map\n","import { getCurrentInstance, onBeforeMount, onMounted, onUpdated, onUnmounted, computed } from 'vue';\n\nfunction useLayoutObserver(root) {\n const instance = getCurrentInstance();\n onBeforeMount(() => {\n tableLayout.value.addObserver(instance);\n });\n onMounted(() => {\n onColumnsChange(tableLayout.value);\n onScrollableChange(tableLayout.value);\n });\n onUpdated(() => {\n onColumnsChange(tableLayout.value);\n onScrollableChange(tableLayout.value);\n });\n onUnmounted(() => {\n tableLayout.value.removeObserver(instance);\n });\n const tableLayout = computed(() => {\n const layout = root.layout;\n if (!layout) {\n throw new Error(\"Can not find table layout.\");\n }\n return layout;\n });\n const onColumnsChange = (layout) => {\n var _a;\n const cols = ((_a = root.vnode.el) == null ? void 0 : _a.querySelectorAll(\"colgroup > col\")) || [];\n if (!cols.length)\n return;\n const flattenColumns = layout.getFlattenColumns();\n const columnsMap = {};\n flattenColumns.forEach((column) => {\n columnsMap[column.id] = column;\n });\n for (let i = 0, j = cols.length; i < j; i++) {\n const col = cols[i];\n const name = col.getAttribute(\"name\");\n const column = columnsMap[name];\n if (column) {\n col.setAttribute(\"width\", column.realWidth || column.width);\n }\n }\n };\n const onScrollableChange = (layout) => {\n var _a, _b;\n const cols = ((_a = root.vnode.el) == null ? void 0 : _a.querySelectorAll(\"colgroup > col[name=gutter]\")) || [];\n for (let i = 0, j = cols.length; i < j; i++) {\n const col = cols[i];\n col.setAttribute(\"width\", layout.scrollY.value ? layout.gutterWidth : \"0\");\n }\n const ths = ((_b = root.vnode.el) == null ? void 0 : _b.querySelectorAll(\"th.gutter\")) || [];\n for (let i = 0, j = ths.length; i < j; i++) {\n const th = ths[i];\n th.style.width = layout.scrollY.value ? `${layout.gutterWidth}px` : \"0\";\n th.style.display = layout.scrollY.value ? \"\" : \"none\";\n }\n };\n return {\n tableLayout: tableLayout.value,\n onColumnsChange,\n onScrollableChange\n };\n}\n\nexport { useLayoutObserver as default };\n//# sourceMappingURL=layout-observer.mjs.map\n","const TABLE_INJECTION_KEY = Symbol(\"ElTable\");\n\nexport { TABLE_INJECTION_KEY };\n//# sourceMappingURL=tokens.mjs.map\n","import { getCurrentInstance, inject, ref } from 'vue';\nimport '../../../../utils/index.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport { isClient } from '@vueuse/core';\nimport { addClass, removeClass, hasClass } from '../../../../utils/dom/style.mjs';\nimport { isElement } from '../../../../utils/types.mjs';\n\nfunction useEvent(props, emit) {\n const instance = getCurrentInstance();\n const parent = inject(TABLE_INJECTION_KEY);\n const handleFilterClick = (event) => {\n event.stopPropagation();\n return;\n };\n const handleHeaderClick = (event, column) => {\n if (!column.filters && column.sortable) {\n handleSortClick(event, column, false);\n } else if (column.filterable && !column.sortable) {\n handleFilterClick(event);\n }\n parent == null ? void 0 : parent.emit(\"header-click\", column, event);\n };\n const handleHeaderContextMenu = (event, column) => {\n parent == null ? void 0 : parent.emit(\"header-contextmenu\", column, event);\n };\n const draggingColumn = ref(null);\n const dragging = ref(false);\n const dragState = ref({});\n const handleMouseDown = (event, column) => {\n if (!isClient)\n return;\n if (column.children && column.children.length > 0)\n return;\n if (draggingColumn.value && props.border) {\n dragging.value = true;\n const table = parent;\n emit(\"set-drag-visible\", true);\n const tableEl = table == null ? void 0 : table.vnode.el;\n const tableLeft = tableEl.getBoundingClientRect().left;\n const columnEl = instance.vnode.el.querySelector(`th.${column.id}`);\n const columnRect = columnEl.getBoundingClientRect();\n const minLeft = columnRect.left - tableLeft + 30;\n addClass(columnEl, \"noclick\");\n dragState.value = {\n startMouseLeft: event.clientX,\n startLeft: columnRect.right - tableLeft,\n startColumnLeft: columnRect.left - tableLeft,\n tableLeft\n };\n const resizeProxy = table == null ? void 0 : table.refs.resizeProxy;\n resizeProxy.style.left = `${dragState.value.startLeft}px`;\n document.onselectstart = function() {\n return false;\n };\n document.ondragstart = function() {\n return false;\n };\n const handleMouseMove2 = (event2) => {\n const deltaLeft = event2.clientX - dragState.value.startMouseLeft;\n const proxyLeft = dragState.value.startLeft + deltaLeft;\n resizeProxy.style.left = `${Math.max(minLeft, proxyLeft)}px`;\n };\n const handleMouseUp = () => {\n if (dragging.value) {\n const { startColumnLeft, startLeft } = dragState.value;\n const finalLeft = Number.parseInt(resizeProxy.style.left, 10);\n const columnWidth = finalLeft - startColumnLeft;\n column.width = column.realWidth = columnWidth;\n table == null ? void 0 : table.emit(\"header-dragend\", column.width, startLeft - startColumnLeft, column, event);\n requestAnimationFrame(() => {\n props.store.scheduleLayout(false, true);\n });\n document.body.style.cursor = \"\";\n dragging.value = false;\n draggingColumn.value = null;\n dragState.value = {};\n emit(\"set-drag-visible\", false);\n }\n document.removeEventListener(\"mousemove\", handleMouseMove2);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.onselectstart = null;\n document.ondragstart = null;\n setTimeout(() => {\n removeClass(columnEl, \"noclick\");\n }, 0);\n };\n document.addEventListener(\"mousemove\", handleMouseMove2);\n document.addEventListener(\"mouseup\", handleMouseUp);\n }\n };\n const handleMouseMove = (event, column) => {\n if (column.children && column.children.length > 0)\n return;\n const el = event.target;\n if (!isElement(el)) {\n return;\n }\n const target = el == null ? void 0 : el.closest(\"th\");\n if (!column || !column.resizable)\n return;\n if (!dragging.value && props.border) {\n const rect = target.getBoundingClientRect();\n const bodyStyle = document.body.style;\n if (rect.width > 12 && rect.right - event.pageX < 8) {\n bodyStyle.cursor = \"col-resize\";\n if (hasClass(target, \"is-sortable\")) {\n target.style.cursor = \"col-resize\";\n }\n draggingColumn.value = column;\n } else if (!dragging.value) {\n bodyStyle.cursor = \"\";\n if (hasClass(target, \"is-sortable\")) {\n target.style.cursor = \"pointer\";\n }\n draggingColumn.value = null;\n }\n }\n };\n const handleMouseOut = () => {\n if (!isClient)\n return;\n document.body.style.cursor = \"\";\n };\n const toggleOrder = ({ order, sortOrders }) => {\n if (order === \"\")\n return sortOrders[0];\n const index = sortOrders.indexOf(order || null);\n return sortOrders[index > sortOrders.length - 2 ? 0 : index + 1];\n };\n const handleSortClick = (event, column, givenOrder) => {\n var _a;\n event.stopPropagation();\n const order = column.order === givenOrder ? null : givenOrder || toggleOrder(column);\n const target = (_a = event.target) == null ? void 0 : _a.closest(\"th\");\n if (target) {\n if (hasClass(target, \"noclick\")) {\n removeClass(target, \"noclick\");\n return;\n }\n }\n if (!column.sortable)\n return;\n const clickTarget = event.currentTarget;\n if ([\"ascending\", \"descending\"].some((str) => hasClass(clickTarget, str) && !column.sortOrders.includes(str))) {\n return;\n }\n const states = props.store.states;\n let sortProp = states.sortProp.value;\n let sortOrder;\n const sortingColumn = states.sortingColumn.value;\n if (sortingColumn !== column || sortingColumn === column && sortingColumn.order === null) {\n if (sortingColumn) {\n sortingColumn.order = null;\n }\n states.sortingColumn.value = column;\n sortProp = column.property;\n }\n if (!order) {\n sortOrder = column.order = null;\n } else {\n sortOrder = column.order = order;\n }\n states.sortProp.value = sortProp;\n states.sortOrder.value = sortOrder;\n parent == null ? void 0 : parent.store.commit(\"changeSortCondition\");\n };\n return {\n handleHeaderClick,\n handleHeaderContextMenu,\n handleMouseDown,\n handleMouseMove,\n handleMouseOut,\n handleSortClick,\n handleFilterClick\n };\n}\n\nexport { useEvent as default };\n//# sourceMappingURL=event-helper.mjs.map\n","import { inject } from 'vue';\nimport '../../../../hooks/index.mjs';\nimport { getFixedColumnOffset, ensurePosition, getFixedColumnsClass } from '../util.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\n\nfunction useStyle(props) {\n const parent = inject(TABLE_INJECTION_KEY);\n const ns = useNamespace(\"table\");\n const getHeaderRowStyle = (rowIndex) => {\n const headerRowStyle = parent == null ? void 0 : parent.props.headerRowStyle;\n if (typeof headerRowStyle === \"function\") {\n return headerRowStyle.call(null, { rowIndex });\n }\n return headerRowStyle;\n };\n const getHeaderRowClass = (rowIndex) => {\n const classes = [];\n const headerRowClassName = parent == null ? void 0 : parent.props.headerRowClassName;\n if (typeof headerRowClassName === \"string\") {\n classes.push(headerRowClassName);\n } else if (typeof headerRowClassName === \"function\") {\n classes.push(headerRowClassName.call(null, { rowIndex }));\n }\n return classes.join(\" \");\n };\n const getHeaderCellStyle = (rowIndex, columnIndex, row, column) => {\n var _a;\n let headerCellStyles = (_a = parent == null ? void 0 : parent.props.headerCellStyle) != null ? _a : {};\n if (typeof headerCellStyles === \"function\") {\n headerCellStyles = headerCellStyles.call(null, {\n rowIndex,\n columnIndex,\n row,\n column\n });\n }\n const fixedStyle = getFixedColumnOffset(columnIndex, column.fixed, props.store, row);\n ensurePosition(fixedStyle, \"left\");\n ensurePosition(fixedStyle, \"right\");\n return Object.assign({}, headerCellStyles, fixedStyle);\n };\n const getHeaderCellClass = (rowIndex, columnIndex, row, column) => {\n const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, column.fixed, props.store, row);\n const classes = [\n column.id,\n column.order,\n column.headerAlign,\n column.className,\n column.labelClassName,\n ...fixedClasses\n ];\n if (!column.children) {\n classes.push(\"is-leaf\");\n }\n if (column.sortable) {\n classes.push(\"is-sortable\");\n }\n const headerCellClassName = parent == null ? void 0 : parent.props.headerCellClassName;\n if (typeof headerCellClassName === \"string\") {\n classes.push(headerCellClassName);\n } else if (typeof headerCellClassName === \"function\") {\n classes.push(headerCellClassName.call(null, {\n rowIndex,\n columnIndex,\n row,\n column\n }));\n }\n classes.push(ns.e(\"cell\"));\n return classes.filter((className) => Boolean(className)).join(\" \");\n };\n return {\n getHeaderRowStyle,\n getHeaderRowClass,\n getHeaderCellStyle,\n getHeaderCellClass\n };\n}\n\nexport { useStyle as default };\n//# sourceMappingURL=style.helper.mjs.map\n","import { inject, computed } from 'vue';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\n\nconst getAllColumns = (columns) => {\n const result = [];\n columns.forEach((column) => {\n if (column.children) {\n result.push(column);\n result.push.apply(result, getAllColumns(column.children));\n } else {\n result.push(column);\n }\n });\n return result;\n};\nconst convertToRows = (originColumns) => {\n let maxLevel = 1;\n const traverse = (column, parent) => {\n if (parent) {\n column.level = parent.level + 1;\n if (maxLevel < column.level) {\n maxLevel = column.level;\n }\n }\n if (column.children) {\n let colSpan = 0;\n column.children.forEach((subColumn) => {\n traverse(subColumn, column);\n colSpan += subColumn.colSpan;\n });\n column.colSpan = colSpan;\n } else {\n column.colSpan = 1;\n }\n };\n originColumns.forEach((column) => {\n column.level = 1;\n traverse(column, void 0);\n });\n const rows = [];\n for (let i = 0; i < maxLevel; i++) {\n rows.push([]);\n }\n const allColumns = getAllColumns(originColumns);\n allColumns.forEach((column) => {\n if (!column.children) {\n column.rowSpan = maxLevel - column.level + 1;\n } else {\n column.rowSpan = 1;\n column.children.forEach((col) => col.isSubColumn = true);\n }\n rows[column.level - 1].push(column);\n });\n return rows;\n};\nfunction useUtils(props) {\n const parent = inject(TABLE_INJECTION_KEY);\n const columnRows = computed(() => {\n return convertToRows(props.store.states.originColumns.value);\n });\n const isGroup = computed(() => {\n const result = columnRows.value.length > 1;\n if (result && parent) {\n parent.state.isGroup.value = true;\n }\n return result;\n });\n const toggleAllSelection = (event) => {\n event.stopPropagation();\n parent == null ? void 0 : parent.store.commit(\"toggleAllSelection\");\n };\n return {\n isGroup,\n toggleAllSelection,\n columnRows\n };\n}\n\nexport { convertToRows, useUtils as default };\n//# sourceMappingURL=utils-helper.mjs.map\n","import { defineComponent, getCurrentInstance, inject, ref, onMounted, nextTick, h } from 'vue';\nimport { ElCheckbox } from '../../../checkbox/index.mjs';\nimport '../../../../hooks/index.mjs';\nimport FilterPanel from '../filter-panel.mjs';\nimport useLayoutObserver from '../layout-observer.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport useEvent from './event-helper.mjs';\nimport useStyle from './style.helper.mjs';\nimport useUtils from './utils-helper.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\n\nvar TableHeader = defineComponent({\n name: \"ElTableHeader\",\n components: {\n ElCheckbox\n },\n props: {\n fixed: {\n type: String,\n default: \"\"\n },\n store: {\n required: true,\n type: Object\n },\n border: Boolean,\n defaultSort: {\n type: Object,\n default: () => {\n return {\n prop: \"\",\n order: \"\"\n };\n }\n }\n },\n setup(props, { emit }) {\n const instance = getCurrentInstance();\n const parent = inject(TABLE_INJECTION_KEY);\n const ns = useNamespace(\"table\");\n const filterPanels = ref({});\n const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent);\n onMounted(async () => {\n await nextTick();\n await nextTick();\n const { prop, order } = props.defaultSort;\n parent == null ? void 0 : parent.store.commit(\"sort\", { prop, order, init: true });\n });\n const {\n handleHeaderClick,\n handleHeaderContextMenu,\n handleMouseDown,\n handleMouseMove,\n handleMouseOut,\n handleSortClick,\n handleFilterClick\n } = useEvent(props, emit);\n const {\n getHeaderRowStyle,\n getHeaderRowClass,\n getHeaderCellStyle,\n getHeaderCellClass\n } = useStyle(props);\n const { isGroup, toggleAllSelection, columnRows } = useUtils(props);\n instance.state = {\n onColumnsChange,\n onScrollableChange\n };\n instance.filterPanels = filterPanels;\n return {\n ns,\n filterPanels,\n onColumnsChange,\n onScrollableChange,\n columnRows,\n getHeaderRowClass,\n getHeaderRowStyle,\n getHeaderCellClass,\n getHeaderCellStyle,\n handleHeaderClick,\n handleHeaderContextMenu,\n handleMouseDown,\n handleMouseMove,\n handleMouseOut,\n handleSortClick,\n handleFilterClick,\n isGroup,\n toggleAllSelection\n };\n },\n render() {\n const {\n ns,\n isGroup,\n columnRows,\n getHeaderCellStyle,\n getHeaderCellClass,\n getHeaderRowClass,\n getHeaderRowStyle,\n handleHeaderClick,\n handleHeaderContextMenu,\n handleMouseDown,\n handleMouseMove,\n handleSortClick,\n handleMouseOut,\n store,\n $parent\n } = this;\n let rowSpan = 1;\n return h(\"thead\", {\n class: { [ns.is(\"group\")]: isGroup }\n }, columnRows.map((subColumns, rowIndex) => h(\"tr\", {\n class: getHeaderRowClass(rowIndex),\n key: rowIndex,\n style: getHeaderRowStyle(rowIndex)\n }, subColumns.map((column, cellIndex) => {\n if (column.rowSpan > rowSpan) {\n rowSpan = column.rowSpan;\n }\n return h(\"th\", {\n class: getHeaderCellClass(rowIndex, cellIndex, subColumns, column),\n colspan: column.colSpan,\n key: `${column.id}-thead`,\n rowspan: column.rowSpan,\n style: getHeaderCellStyle(rowIndex, cellIndex, subColumns, column),\n onClick: ($event) => {\n if ($event.currentTarget.classList.contains(\"noclick\")) {\n return;\n }\n handleHeaderClick($event, column);\n },\n onContextmenu: ($event) => handleHeaderContextMenu($event, column),\n onMousedown: ($event) => handleMouseDown($event, column),\n onMousemove: ($event) => handleMouseMove($event, column),\n onMouseout: handleMouseOut\n }, [\n h(\"div\", {\n class: [\n \"cell\",\n column.filteredValue && column.filteredValue.length > 0 ? \"highlight\" : \"\"\n ]\n }, [\n column.renderHeader ? column.renderHeader({\n column,\n $index: cellIndex,\n store,\n _self: $parent\n }) : column.label,\n column.sortable && h(\"span\", {\n onClick: ($event) => handleSortClick($event, column),\n class: \"caret-wrapper\"\n }, [\n h(\"i\", {\n onClick: ($event) => handleSortClick($event, column, \"ascending\"),\n class: \"sort-caret ascending\"\n }),\n h(\"i\", {\n onClick: ($event) => handleSortClick($event, column, \"descending\"),\n class: \"sort-caret descending\"\n })\n ]),\n column.filterable && h(FilterPanel, {\n store,\n placement: column.filterPlacement || \"bottom-start\",\n column,\n upDataColumn: (key, value) => {\n column[key] = value;\n }\n }, {\n \"filter-icon\": () => column.renderFilterIcon ? column.renderFilterIcon({\n filterOpened: column.filterOpened\n }) : null\n })\n ])\n ]);\n }))));\n }\n});\n\nexport { TableHeader as default };\n//# sourceMappingURL=index.mjs.map\n","import { inject, ref, h } from 'vue';\nimport { debounce } from 'lodash-unified';\nimport '../../../../utils/index.mjs';\nimport { getCell, getColumnByCell, createTablePopper } from '../util.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport { addClass, hasClass, removeClass } from '../../../../utils/dom/style.mjs';\n\nfunction isGreaterThan(a, b, epsilon = 0.03) {\n return a - b > epsilon;\n}\nfunction useEvents(props) {\n const parent = inject(TABLE_INJECTION_KEY);\n const tooltipContent = ref(\"\");\n const tooltipTrigger = ref(h(\"div\"));\n const handleEvent = (event, row, name) => {\n var _a;\n const table = parent;\n const cell = getCell(event);\n let column;\n const namespace = (_a = table == null ? void 0 : table.vnode.el) == null ? void 0 : _a.dataset.prefix;\n if (cell) {\n column = getColumnByCell({\n columns: props.store.states.columns.value\n }, cell, namespace);\n if (column) {\n table == null ? void 0 : table.emit(`cell-${name}`, row, column, cell, event);\n }\n }\n table == null ? void 0 : table.emit(`row-${name}`, row, column, event);\n };\n const handleDoubleClick = (event, row) => {\n handleEvent(event, row, \"dblclick\");\n };\n const handleClick = (event, row) => {\n props.store.commit(\"setCurrentRow\", row);\n handleEvent(event, row, \"click\");\n };\n const handleContextMenu = (event, row) => {\n handleEvent(event, row, \"contextmenu\");\n };\n const handleMouseEnter = debounce((index) => {\n props.store.commit(\"setHoverRow\", index);\n }, 30);\n const handleMouseLeave = debounce(() => {\n props.store.commit(\"setHoverRow\", null);\n }, 30);\n const getPadding = (el) => {\n const style = window.getComputedStyle(el, null);\n const paddingLeft = Number.parseInt(style.paddingLeft, 10) || 0;\n const paddingRight = Number.parseInt(style.paddingRight, 10) || 0;\n const paddingTop = Number.parseInt(style.paddingTop, 10) || 0;\n const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0;\n return {\n left: paddingLeft,\n right: paddingRight,\n top: paddingTop,\n bottom: paddingBottom\n };\n };\n const toggleRowClassByCell = (rowSpan, event, toggle) => {\n let node = event.target.parentNode;\n while (rowSpan > 1) {\n node = node == null ? void 0 : node.nextSibling;\n if (!node || node.nodeName !== \"TR\")\n break;\n toggle(node, \"hover-row hover-fixed-row\");\n rowSpan--;\n }\n };\n const handleCellMouseEnter = (event, row, tooltipOptions) => {\n var _a;\n const table = parent;\n const cell = getCell(event);\n const namespace = (_a = table == null ? void 0 : table.vnode.el) == null ? void 0 : _a.dataset.prefix;\n if (cell) {\n const column = getColumnByCell({\n columns: props.store.states.columns.value\n }, cell, namespace);\n if (cell.rowSpan > 1) {\n toggleRowClassByCell(cell.rowSpan, event, addClass);\n }\n const hoverState = table.hoverState = { cell, column, row };\n table == null ? void 0 : table.emit(\"cell-mouse-enter\", hoverState.row, hoverState.column, hoverState.cell, event);\n }\n if (!tooltipOptions) {\n return;\n }\n const cellChild = event.target.querySelector(\".cell\");\n if (!(hasClass(cellChild, `${namespace}-tooltip`) && cellChild.childNodes.length)) {\n return;\n }\n const range = document.createRange();\n range.setStart(cellChild, 0);\n range.setEnd(cellChild, cellChild.childNodes.length);\n const { width: rangeWidth, height: rangeHeight } = range.getBoundingClientRect();\n const { width: cellChildWidth, height: cellChildHeight } = cellChild.getBoundingClientRect();\n const { top, left, right, bottom } = getPadding(cellChild);\n const horizontalPadding = left + right;\n const verticalPadding = top + bottom;\n if (isGreaterThan(rangeWidth + horizontalPadding, cellChildWidth) || isGreaterThan(rangeHeight + verticalPadding, cellChildHeight) || isGreaterThan(cellChild.scrollWidth, cellChildWidth)) {\n createTablePopper(tooltipOptions, cell.innerText || cell.textContent, cell, table);\n }\n };\n const handleCellMouseLeave = (event) => {\n const cell = getCell(event);\n if (!cell)\n return;\n if (cell.rowSpan > 1) {\n toggleRowClassByCell(cell.rowSpan, event, removeClass);\n }\n const oldHoverState = parent == null ? void 0 : parent.hoverState;\n parent == null ? void 0 : parent.emit(\"cell-mouse-leave\", oldHoverState == null ? void 0 : oldHoverState.row, oldHoverState == null ? void 0 : oldHoverState.column, oldHoverState == null ? void 0 : oldHoverState.cell, event);\n };\n return {\n handleDoubleClick,\n handleClick,\n handleContextMenu,\n handleMouseEnter,\n handleMouseLeave,\n handleCellMouseEnter,\n handleCellMouseLeave,\n tooltipContent,\n tooltipTrigger\n };\n}\n\nexport { useEvents as default };\n//# sourceMappingURL=events-helper.mjs.map\n","import { inject } from 'vue';\nimport '../../../../hooks/index.mjs';\nimport { getFixedColumnOffset, ensurePosition, getFixedColumnsClass } from '../util.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\n\nfunction useStyles(props) {\n const parent = inject(TABLE_INJECTION_KEY);\n const ns = useNamespace(\"table\");\n const getRowStyle = (row, rowIndex) => {\n const rowStyle = parent == null ? void 0 : parent.props.rowStyle;\n if (typeof rowStyle === \"function\") {\n return rowStyle.call(null, {\n row,\n rowIndex\n });\n }\n return rowStyle || null;\n };\n const getRowClass = (row, rowIndex) => {\n const classes = [ns.e(\"row\")];\n if ((parent == null ? void 0 : parent.props.highlightCurrentRow) && row === props.store.states.currentRow.value) {\n classes.push(\"current-row\");\n }\n if (props.stripe && rowIndex % 2 === 1) {\n classes.push(ns.em(\"row\", \"striped\"));\n }\n const rowClassName = parent == null ? void 0 : parent.props.rowClassName;\n if (typeof rowClassName === \"string\") {\n classes.push(rowClassName);\n } else if (typeof rowClassName === \"function\") {\n classes.push(rowClassName.call(null, {\n row,\n rowIndex\n }));\n }\n return classes;\n };\n const getCellStyle = (rowIndex, columnIndex, row, column) => {\n const cellStyle = parent == null ? void 0 : parent.props.cellStyle;\n let cellStyles = cellStyle != null ? cellStyle : {};\n if (typeof cellStyle === \"function\") {\n cellStyles = cellStyle.call(null, {\n rowIndex,\n columnIndex,\n row,\n column\n });\n }\n const fixedStyle = getFixedColumnOffset(columnIndex, props == null ? void 0 : props.fixed, props.store);\n ensurePosition(fixedStyle, \"left\");\n ensurePosition(fixedStyle, \"right\");\n return Object.assign({}, cellStyles, fixedStyle);\n };\n const getCellClass = (rowIndex, columnIndex, row, column, offset) => {\n const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, props == null ? void 0 : props.fixed, props.store, void 0, offset);\n const classes = [column.id, column.align, column.className, ...fixedClasses];\n const cellClassName = parent == null ? void 0 : parent.props.cellClassName;\n if (typeof cellClassName === \"string\") {\n classes.push(cellClassName);\n } else if (typeof cellClassName === \"function\") {\n classes.push(cellClassName.call(null, {\n rowIndex,\n columnIndex,\n row,\n column\n }));\n }\n classes.push(ns.e(\"cell\"));\n return classes.filter((className) => Boolean(className)).join(\" \");\n };\n const getSpan = (row, column, rowIndex, columnIndex) => {\n let rowspan = 1;\n let colspan = 1;\n const fn = parent == null ? void 0 : parent.props.spanMethod;\n if (typeof fn === \"function\") {\n const result = fn({\n row,\n column,\n rowIndex,\n columnIndex\n });\n if (Array.isArray(result)) {\n rowspan = result[0];\n colspan = result[1];\n } else if (typeof result === \"object\") {\n rowspan = result.rowspan;\n colspan = result.colspan;\n }\n }\n return { rowspan, colspan };\n };\n const getColspanRealWidth = (columns, colspan, index) => {\n if (colspan < 1) {\n return columns[index].realWidth;\n }\n const widthArr = columns.map(({ realWidth, width }) => realWidth || width).slice(index, index + colspan);\n return Number(widthArr.reduce((acc, width) => Number(acc) + Number(width), -1));\n };\n return {\n getRowStyle,\n getRowClass,\n getCellStyle,\n getCellClass,\n getSpan,\n getColspanRealWidth\n };\n}\n\nexport { useStyles as default };\n//# sourceMappingURL=styles-helper.mjs.map\n","import { inject, computed, h } from 'vue';\nimport { merge } from 'lodash-unified';\nimport '../../../../hooks/index.mjs';\nimport { getRowIdentity } from '../util.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport useEvents from './events-helper.mjs';\nimport useStyles from './styles-helper.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\n\nfunction useRender(props) {\n const parent = inject(TABLE_INJECTION_KEY);\n const ns = useNamespace(\"table\");\n const {\n handleDoubleClick,\n handleClick,\n handleContextMenu,\n handleMouseEnter,\n handleMouseLeave,\n handleCellMouseEnter,\n handleCellMouseLeave,\n tooltipContent,\n tooltipTrigger\n } = useEvents(props);\n const {\n getRowStyle,\n getRowClass,\n getCellStyle,\n getCellClass,\n getSpan,\n getColspanRealWidth\n } = useStyles(props);\n const firstDefaultColumnIndex = computed(() => {\n return props.store.states.columns.value.findIndex(({ type }) => type === \"default\");\n });\n const getKeyOfRow = (row, index) => {\n const rowKey = parent.props.rowKey;\n if (rowKey) {\n return getRowIdentity(row, rowKey);\n }\n return index;\n };\n const rowRender = (row, $index, treeRowData, expanded = false) => {\n const { tooltipEffect, tooltipOptions, store } = props;\n const { indent, columns } = store.states;\n const rowClasses = getRowClass(row, $index);\n let display = true;\n if (treeRowData) {\n rowClasses.push(ns.em(\"row\", `level-${treeRowData.level}`));\n display = treeRowData.display;\n }\n const displayStyle = display ? null : {\n display: \"none\"\n };\n return h(\"tr\", {\n style: [displayStyle, getRowStyle(row, $index)],\n class: rowClasses,\n key: getKeyOfRow(row, $index),\n onDblclick: ($event) => handleDoubleClick($event, row),\n onClick: ($event) => handleClick($event, row),\n onContextmenu: ($event) => handleContextMenu($event, row),\n onMouseenter: () => handleMouseEnter($index),\n onMouseleave: handleMouseLeave\n }, columns.value.map((column, cellIndex) => {\n const { rowspan, colspan } = getSpan(row, column, $index, cellIndex);\n if (!rowspan || !colspan) {\n return null;\n }\n const columnData = Object.assign({}, column);\n columnData.realWidth = getColspanRealWidth(columns.value, colspan, cellIndex);\n const data = {\n store: props.store,\n _self: props.context || parent,\n column: columnData,\n row,\n $index,\n cellIndex,\n expanded\n };\n if (cellIndex === firstDefaultColumnIndex.value && treeRowData) {\n data.treeNode = {\n indent: treeRowData.level * indent.value,\n level: treeRowData.level\n };\n if (typeof treeRowData.expanded === \"boolean\") {\n data.treeNode.expanded = treeRowData.expanded;\n if (\"loading\" in treeRowData) {\n data.treeNode.loading = treeRowData.loading;\n }\n if (\"noLazyChildren\" in treeRowData) {\n data.treeNode.noLazyChildren = treeRowData.noLazyChildren;\n }\n }\n }\n const baseKey = `${getKeyOfRow(row, $index)},${cellIndex}`;\n const patchKey = columnData.columnKey || columnData.rawColumnKey || \"\";\n const tdChildren = cellChildren(cellIndex, column, data);\n const mergedTooltipOptions = column.showOverflowTooltip && merge({\n effect: tooltipEffect\n }, tooltipOptions, column.showOverflowTooltip);\n return h(\"td\", {\n style: getCellStyle($index, cellIndex, row, column),\n class: getCellClass($index, cellIndex, row, column, colspan - 1),\n key: `${patchKey}${baseKey}`,\n rowspan,\n colspan,\n onMouseenter: ($event) => handleCellMouseEnter($event, row, mergedTooltipOptions),\n onMouseleave: handleCellMouseLeave\n }, [tdChildren]);\n }));\n };\n const cellChildren = (cellIndex, column, data) => {\n return column.renderCell(data);\n };\n const wrappedRowRender = (row, $index) => {\n const store = props.store;\n const { isRowExpanded, assertRowKey } = store;\n const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } = store.states;\n const columns = store.states.columns.value;\n const hasExpandColumn = columns.some(({ type }) => type === \"expand\");\n if (hasExpandColumn) {\n const expanded = isRowExpanded(row);\n const tr = rowRender(row, $index, void 0, expanded);\n const renderExpanded = parent.renderExpanded;\n if (expanded) {\n if (!renderExpanded) {\n console.error(\"[Element Error]renderExpanded is required.\");\n return tr;\n }\n return [\n [\n tr,\n h(\"tr\", {\n key: `expanded-row__${tr.key}`\n }, [\n h(\"td\", {\n colspan: columns.length,\n class: `${ns.e(\"cell\")} ${ns.e(\"expanded-cell\")}`\n }, [renderExpanded({ row, $index, store, expanded })])\n ])\n ]\n ];\n } else {\n return [[tr]];\n }\n } else if (Object.keys(treeData.value).length) {\n assertRowKey();\n const key = getRowIdentity(row, rowKey.value);\n let cur = treeData.value[key];\n let treeRowData = null;\n if (cur) {\n treeRowData = {\n expanded: cur.expanded,\n level: cur.level,\n display: true\n };\n if (typeof cur.lazy === \"boolean\") {\n if (typeof cur.loaded === \"boolean\" && cur.loaded) {\n treeRowData.noLazyChildren = !(cur.children && cur.children.length);\n }\n treeRowData.loading = cur.loading;\n }\n }\n const tmp = [rowRender(row, $index, treeRowData)];\n if (cur) {\n let i = 0;\n const traverse = (children, parent2) => {\n if (!(children && children.length && parent2))\n return;\n children.forEach((node) => {\n const innerTreeRowData = {\n display: parent2.display && parent2.expanded,\n level: parent2.level + 1,\n expanded: false,\n noLazyChildren: false,\n loading: false\n };\n const childKey = getRowIdentity(node, rowKey.value);\n if (childKey === void 0 || childKey === null) {\n throw new Error(\"For nested data item, row-key is required.\");\n }\n cur = { ...treeData.value[childKey] };\n if (cur) {\n innerTreeRowData.expanded = cur.expanded;\n cur.level = cur.level || innerTreeRowData.level;\n cur.display = !!(cur.expanded && innerTreeRowData.display);\n if (typeof cur.lazy === \"boolean\") {\n if (typeof cur.loaded === \"boolean\" && cur.loaded) {\n innerTreeRowData.noLazyChildren = !(cur.children && cur.children.length);\n }\n innerTreeRowData.loading = cur.loading;\n }\n }\n i++;\n tmp.push(rowRender(node, $index + i, innerTreeRowData));\n if (cur) {\n const nodes2 = lazyTreeNodeMap.value[childKey] || node[childrenColumnName.value];\n traverse(nodes2, cur);\n }\n });\n };\n cur.display = true;\n const nodes = lazyTreeNodeMap.value[key] || row[childrenColumnName.value];\n traverse(nodes, cur);\n }\n return tmp;\n } else {\n return rowRender(row, $index, void 0);\n }\n };\n return {\n wrappedRowRender,\n tooltipContent,\n tooltipTrigger\n };\n}\n\nexport { useRender as default };\n//# sourceMappingURL=render-helper.mjs.map\n","const defaultProps = {\n store: {\n required: true,\n type: Object\n },\n stripe: Boolean,\n tooltipEffect: String,\n tooltipOptions: {\n type: Object\n },\n context: {\n default: () => ({}),\n type: Object\n },\n rowClassName: [String, Function],\n rowStyle: [Object, Function],\n fixed: {\n type: String,\n default: \"\"\n },\n highlight: Boolean\n};\n\nexport { defaultProps as default };\n//# sourceMappingURL=defaults.mjs.map\n","import { defineComponent, getCurrentInstance, inject, watch, onUnmounted, h } from 'vue';\nimport '../../../../utils/index.mjs';\nimport '../../../../hooks/index.mjs';\nimport useLayoutObserver from '../layout-observer.mjs';\nimport { removePopper } from '../util.mjs';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\nimport useRender from './render-helper.mjs';\nimport defaultProps from './defaults.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\nimport { addClass, removeClass } from '../../../../utils/dom/style.mjs';\nimport { isClient } from '@vueuse/core';\nimport { rAF } from '../../../../utils/raf.mjs';\n\nvar TableBody = defineComponent({\n name: \"ElTableBody\",\n props: defaultProps,\n setup(props) {\n const instance = getCurrentInstance();\n const parent = inject(TABLE_INJECTION_KEY);\n const ns = useNamespace(\"table\");\n const { wrappedRowRender, tooltipContent, tooltipTrigger } = useRender(props);\n const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent);\n const hoveredCellList = [];\n watch(props.store.states.hoverRow, (newVal, oldVal) => {\n var _a;\n const el = instance == null ? void 0 : instance.vnode.el;\n const rows = Array.from((el == null ? void 0 : el.children) || []).filter((e) => e == null ? void 0 : e.classList.contains(`${ns.e(\"row\")}`));\n let rowNum = newVal;\n const childNodes = (_a = rows[rowNum]) == null ? void 0 : _a.childNodes;\n if (childNodes == null ? void 0 : childNodes.length) {\n let control = 0;\n const indexes = Array.from(childNodes).reduce((acc, item, index) => {\n var _a2, _b;\n if (((_a2 = childNodes[index]) == null ? void 0 : _a2.colSpan) > 1) {\n control = (_b = childNodes[index]) == null ? void 0 : _b.colSpan;\n }\n if (item.nodeName !== \"TD\" && control === 0) {\n acc.push(index);\n }\n control > 0 && control--;\n return acc;\n }, []);\n indexes.forEach((rowIndex) => {\n var _a2;\n rowNum = newVal;\n while (rowNum > 0) {\n const preChildNodes = (_a2 = rows[rowNum - 1]) == null ? void 0 : _a2.childNodes;\n if (preChildNodes[rowIndex] && preChildNodes[rowIndex].nodeName === \"TD\" && preChildNodes[rowIndex].rowSpan > 1) {\n addClass(preChildNodes[rowIndex], \"hover-cell\");\n hoveredCellList.push(preChildNodes[rowIndex]);\n break;\n }\n rowNum--;\n }\n });\n } else {\n hoveredCellList.forEach((item) => removeClass(item, \"hover-cell\"));\n hoveredCellList.length = 0;\n }\n if (!props.store.states.isComplex.value || !isClient)\n return;\n rAF(() => {\n const oldRow = rows[oldVal];\n const newRow = rows[newVal];\n if (oldRow && !oldRow.classList.contains(\"hover-fixed-row\")) {\n removeClass(oldRow, \"hover-row\");\n }\n if (newRow) {\n addClass(newRow, \"hover-row\");\n }\n });\n });\n onUnmounted(() => {\n var _a;\n (_a = removePopper) == null ? void 0 : _a();\n });\n return {\n ns,\n onColumnsChange,\n onScrollableChange,\n wrappedRowRender,\n tooltipContent,\n tooltipTrigger\n };\n },\n render() {\n const { wrappedRowRender, store } = this;\n const data = store.states.data.value || [];\n return h(\"tbody\", { tabIndex: -1 }, [\n data.reduce((acc, row) => {\n return acc.concat(wrappedRowRender(row, acc.length));\n }, [])\n ]);\n }\n});\n\nexport { TableBody as default };\n//# sourceMappingURL=index.mjs.map\n","import { inject, computed } from 'vue';\nimport { TABLE_INJECTION_KEY } from '../tokens.mjs';\n\nfunction useMapState() {\n const table = inject(TABLE_INJECTION_KEY);\n const store = table == null ? void 0 : table.store;\n const leftFixedLeafCount = computed(() => {\n return store.states.fixedLeafColumnsLength.value;\n });\n const rightFixedLeafCount = computed(() => {\n return store.states.rightFixedColumns.value.length;\n });\n const columnsCount = computed(() => {\n return store.states.columns.value.length;\n });\n const leftFixedCount = computed(() => {\n return store.states.fixedColumns.value.length;\n });\n const rightFixedCount = computed(() => {\n return store.states.rightFixedColumns.value.length;\n });\n return {\n leftFixedLeafCount,\n rightFixedLeafCount,\n columnsCount,\n leftFixedCount,\n rightFixedCount,\n columns: store.states.columns\n };\n}\n\nexport { useMapState as default };\n//# sourceMappingURL=mapState-helper.mjs.map\n","import '../../../../hooks/index.mjs';\nimport { getFixedColumnsClass, getFixedColumnOffset, ensurePosition } from '../util.mjs';\nimport useMapState from './mapState-helper.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\n\nfunction useStyle(props) {\n const { columns } = useMapState();\n const ns = useNamespace(\"table\");\n const getCellClasses = (columns2, cellIndex) => {\n const column = columns2[cellIndex];\n const classes = [\n ns.e(\"cell\"),\n column.id,\n column.align,\n column.labelClassName,\n ...getFixedColumnsClass(ns.b(), cellIndex, column.fixed, props.store)\n ];\n if (column.className) {\n classes.push(column.className);\n }\n if (!column.children) {\n classes.push(ns.is(\"leaf\"));\n }\n return classes;\n };\n const getCellStyles = (column, cellIndex) => {\n const fixedStyle = getFixedColumnOffset(cellIndex, column.fixed, props.store);\n ensurePosition(fixedStyle, \"left\");\n ensurePosition(fixedStyle, \"right\");\n return fixedStyle;\n };\n return {\n getCellClasses,\n getCellStyles,\n columns\n };\n}\n\nexport { useStyle as default };\n//# sourceMappingURL=style-helper.mjs.map\n","import { defineComponent, h } from 'vue';\nimport '../../../../hooks/index.mjs';\nimport useStyle from './style-helper.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\n\nvar TableFooter = defineComponent({\n name: \"ElTableFooter\",\n props: {\n fixed: {\n type: String,\n default: \"\"\n },\n store: {\n required: true,\n type: Object\n },\n summaryMethod: Function,\n sumText: String,\n border: Boolean,\n defaultSort: {\n type: Object,\n default: () => {\n return {\n prop: \"\",\n order: \"\"\n };\n }\n }\n },\n setup(props) {\n const { getCellClasses, getCellStyles, columns } = useStyle(props);\n const ns = useNamespace(\"table\");\n return {\n ns,\n getCellClasses,\n getCellStyles,\n columns\n };\n },\n render() {\n const { columns, getCellStyles, getCellClasses, summaryMethod, sumText } = this;\n const data = this.store.states.data.value;\n let sums = [];\n if (summaryMethod) {\n sums = summaryMethod({\n columns,\n data\n });\n } else {\n columns.forEach((column, index) => {\n if (index === 0) {\n sums[index] = sumText;\n return;\n }\n const values = data.map((item) => Number(item[column.property]));\n const precisions = [];\n let notNumber = true;\n values.forEach((value) => {\n if (!Number.isNaN(+value)) {\n notNumber = false;\n const decimal = `${value}`.split(\".\")[1];\n precisions.push(decimal ? decimal.length : 0);\n }\n });\n const precision = Math.max.apply(null, precisions);\n if (!notNumber) {\n sums[index] = values.reduce((prev, curr) => {\n const value = Number(curr);\n if (!Number.isNaN(+value)) {\n return Number.parseFloat((prev + curr).toFixed(Math.min(precision, 20)));\n } else {\n return prev;\n }\n }, 0);\n } else {\n sums[index] = \"\";\n }\n });\n }\n return h(h(\"tfoot\", [\n h(\"tr\", {}, [\n ...columns.map((column, cellIndex) => h(\"td\", {\n key: cellIndex,\n colspan: column.colSpan,\n rowspan: column.rowSpan,\n class: getCellClasses(columns, cellIndex),\n style: getCellStyles(column, cellIndex)\n }, [\n h(\"div\", {\n class: [\"cell\", column.labelClassName]\n }, [sums[cellIndex]])\n ]))\n ])\n ]));\n }\n});\n\nexport { TableFooter as default };\n//# sourceMappingURL=index.mjs.map\n","function useUtils(store) {\n const setCurrentRow = (row) => {\n store.commit(\"setCurrentRow\", row);\n };\n const getSelectionRows = () => {\n return store.getSelectionRows();\n };\n const toggleRowSelection = (row, selected, ignoreSelectable = true) => {\n store.toggleRowSelection(row, selected, false, ignoreSelectable);\n store.updateAllSelected();\n };\n const clearSelection = () => {\n store.clearSelection();\n };\n const clearFilter = (columnKeys) => {\n store.clearFilter(columnKeys);\n };\n const toggleAllSelection = () => {\n store.commit(\"toggleAllSelection\");\n };\n const toggleRowExpansion = (row, expanded) => {\n store.toggleRowExpansionAdapter(row, expanded);\n };\n const clearSort = () => {\n store.clearSort();\n };\n const sort = (prop, order) => {\n store.commit(\"sort\", { prop, order });\n };\n return {\n setCurrentRow,\n getSelectionRows,\n toggleRowSelection,\n clearSelection,\n clearFilter,\n toggleAllSelection,\n toggleRowExpansion,\n clearSort,\n sort\n };\n}\n\nexport { useUtils as default };\n//# sourceMappingURL=utils-helper.mjs.map\n","import { ref, watchEffect, watch, unref, computed, onMounted, nextTick } from 'vue';\nimport { useEventListener, useResizeObserver } from '@vueuse/core';\nimport '../../../form/index.mjs';\nimport { useFormSize } from '../../../form/src/hooks/use-form-common-props.mjs';\n\nfunction useStyle(props, layout, store, table) {\n const isHidden = ref(false);\n const renderExpanded = ref(null);\n const resizeProxyVisible = ref(false);\n const setDragVisible = (visible) => {\n resizeProxyVisible.value = visible;\n };\n const resizeState = ref({\n width: null,\n height: null,\n headerHeight: null\n });\n const isGroup = ref(false);\n const scrollbarViewStyle = {\n display: \"inline-block\",\n verticalAlign: \"middle\"\n };\n const tableWidth = ref();\n const tableScrollHeight = ref(0);\n const bodyScrollHeight = ref(0);\n const headerScrollHeight = ref(0);\n const footerScrollHeight = ref(0);\n const appendScrollHeight = ref(0);\n watchEffect(() => {\n layout.setHeight(props.height);\n });\n watchEffect(() => {\n layout.setMaxHeight(props.maxHeight);\n });\n watch(() => [props.currentRowKey, store.states.rowKey], ([currentRowKey, rowKey]) => {\n if (!unref(rowKey) || !unref(currentRowKey))\n return;\n store.setCurrentRowKey(`${currentRowKey}`);\n }, {\n immediate: true\n });\n watch(() => props.data, (data) => {\n table.store.commit(\"setData\", data);\n }, {\n immediate: true,\n deep: true\n });\n watchEffect(() => {\n if (props.expandRowKeys) {\n store.setExpandRowKeysAdapter(props.expandRowKeys);\n }\n });\n const handleMouseLeave = () => {\n table.store.commit(\"setHoverRow\", null);\n if (table.hoverState)\n table.hoverState = null;\n };\n const handleHeaderFooterMousewheel = (event, data) => {\n const { pixelX, pixelY } = data;\n if (Math.abs(pixelX) >= Math.abs(pixelY)) {\n table.refs.bodyWrapper.scrollLeft += data.pixelX / 5;\n }\n };\n const shouldUpdateHeight = computed(() => {\n return props.height || props.maxHeight || store.states.fixedColumns.value.length > 0 || store.states.rightFixedColumns.value.length > 0;\n });\n const tableBodyStyles = computed(() => {\n return {\n width: layout.bodyWidth.value ? `${layout.bodyWidth.value}px` : \"\"\n };\n });\n const doLayout = () => {\n if (shouldUpdateHeight.value) {\n layout.updateElsHeight();\n }\n layout.updateColumnsWidth();\n requestAnimationFrame(syncPosition);\n };\n onMounted(async () => {\n await nextTick();\n store.updateColumns();\n bindEvents();\n requestAnimationFrame(doLayout);\n const el = table.vnode.el;\n const tableHeader = table.refs.headerWrapper;\n if (props.flexible && el && el.parentElement) {\n el.parentElement.style.minWidth = \"0\";\n }\n resizeState.value = {\n width: tableWidth.value = el.offsetWidth,\n height: el.offsetHeight,\n headerHeight: props.showHeader && tableHeader ? tableHeader.offsetHeight : null\n };\n store.states.columns.value.forEach((column) => {\n if (column.filteredValue && column.filteredValue.length) {\n table.store.commit(\"filterChange\", {\n column,\n values: column.filteredValue,\n silent: true\n });\n }\n });\n table.$ready = true;\n });\n const setScrollClassByEl = (el, className) => {\n if (!el)\n return;\n const classList = Array.from(el.classList).filter((item) => !item.startsWith(\"is-scrolling-\"));\n classList.push(layout.scrollX.value ? className : \"is-scrolling-none\");\n el.className = classList.join(\" \");\n };\n const setScrollClass = (className) => {\n const { tableWrapper } = table.refs;\n setScrollClassByEl(tableWrapper, className);\n };\n const hasScrollClass = (className) => {\n const { tableWrapper } = table.refs;\n return !!(tableWrapper && tableWrapper.classList.contains(className));\n };\n const syncPosition = function() {\n if (!table.refs.scrollBarRef)\n return;\n if (!layout.scrollX.value) {\n const scrollingNoneClass = \"is-scrolling-none\";\n if (!hasScrollClass(scrollingNoneClass)) {\n setScrollClass(scrollingNoneClass);\n }\n return;\n }\n const scrollContainer = table.refs.scrollBarRef.wrapRef;\n if (!scrollContainer)\n return;\n const { scrollLeft, offsetWidth, scrollWidth } = scrollContainer;\n const { headerWrapper, footerWrapper } = table.refs;\n if (headerWrapper)\n headerWrapper.scrollLeft = scrollLeft;\n if (footerWrapper)\n footerWrapper.scrollLeft = scrollLeft;\n const maxScrollLeftPosition = scrollWidth - offsetWidth - 1;\n if (scrollLeft >= maxScrollLeftPosition) {\n setScrollClass(\"is-scrolling-right\");\n } else if (scrollLeft === 0) {\n setScrollClass(\"is-scrolling-left\");\n } else {\n setScrollClass(\"is-scrolling-middle\");\n }\n };\n const bindEvents = () => {\n if (!table.refs.scrollBarRef)\n return;\n if (table.refs.scrollBarRef.wrapRef) {\n useEventListener(table.refs.scrollBarRef.wrapRef, \"scroll\", syncPosition, {\n passive: true\n });\n }\n if (props.fit) {\n useResizeObserver(table.vnode.el, resizeListener);\n } else {\n useEventListener(window, \"resize\", resizeListener);\n }\n useResizeObserver(table.refs.bodyWrapper, () => {\n var _a, _b;\n resizeListener();\n (_b = (_a = table.refs) == null ? void 0 : _a.scrollBarRef) == null ? void 0 : _b.update();\n });\n };\n const resizeListener = () => {\n var _a, _b, _c, _d;\n const el = table.vnode.el;\n if (!table.$ready || !el)\n return;\n let shouldUpdateLayout = false;\n const {\n width: oldWidth,\n height: oldHeight,\n headerHeight: oldHeaderHeight\n } = resizeState.value;\n const width = tableWidth.value = el.offsetWidth;\n if (oldWidth !== width) {\n shouldUpdateLayout = true;\n }\n const height = el.offsetHeight;\n if ((props.height || shouldUpdateHeight.value) && oldHeight !== height) {\n shouldUpdateLayout = true;\n }\n const tableHeader = props.tableLayout === \"fixed\" ? table.refs.headerWrapper : (_a = table.refs.tableHeaderRef) == null ? void 0 : _a.$el;\n if (props.showHeader && (tableHeader == null ? void 0 : tableHeader.offsetHeight) !== oldHeaderHeight) {\n shouldUpdateLayout = true;\n }\n tableScrollHeight.value = ((_b = table.refs.tableWrapper) == null ? void 0 : _b.scrollHeight) || 0;\n headerScrollHeight.value = (tableHeader == null ? void 0 : tableHeader.scrollHeight) || 0;\n footerScrollHeight.value = ((_c = table.refs.footerWrapper) == null ? void 0 : _c.offsetHeight) || 0;\n appendScrollHeight.value = ((_d = table.refs.appendWrapper) == null ? void 0 : _d.offsetHeight) || 0;\n bodyScrollHeight.value = tableScrollHeight.value - headerScrollHeight.value - footerScrollHeight.value - appendScrollHeight.value;\n if (shouldUpdateLayout) {\n resizeState.value = {\n width,\n height,\n headerHeight: props.showHeader && (tableHeader == null ? void 0 : tableHeader.offsetHeight) || 0\n };\n doLayout();\n }\n };\n const tableSize = useFormSize();\n const bodyWidth = computed(() => {\n const { bodyWidth: bodyWidth_, scrollY, gutterWidth } = layout;\n return bodyWidth_.value ? `${bodyWidth_.value - (scrollY.value ? gutterWidth : 0)}px` : \"\";\n });\n const tableLayout = computed(() => {\n if (props.maxHeight)\n return \"fixed\";\n return props.tableLayout;\n });\n const emptyBlockStyle = computed(() => {\n if (props.data && props.data.length)\n return null;\n let height = \"100%\";\n if (props.height && bodyScrollHeight.value) {\n height = `${bodyScrollHeight.value}px`;\n }\n const width = tableWidth.value;\n return {\n width: width ? `${width}px` : \"\",\n height\n };\n });\n const tableInnerStyle = computed(() => {\n if (props.height) {\n return {\n height: !Number.isNaN(Number(props.height)) ? `${props.height}px` : props.height\n };\n }\n if (props.maxHeight) {\n return {\n maxHeight: !Number.isNaN(Number(props.maxHeight)) ? `${props.maxHeight}px` : props.maxHeight\n };\n }\n return {};\n });\n const scrollbarStyle = computed(() => {\n if (props.height) {\n return {\n height: \"100%\"\n };\n }\n if (props.maxHeight) {\n if (!Number.isNaN(Number(props.maxHeight))) {\n return {\n maxHeight: `${props.maxHeight - headerScrollHeight.value - footerScrollHeight.value}px`\n };\n } else {\n return {\n maxHeight: `calc(${props.maxHeight} - ${headerScrollHeight.value + footerScrollHeight.value}px)`\n };\n }\n }\n return {};\n });\n const handleFixedMousewheel = (event, data) => {\n const bodyWrapper = table.refs.bodyWrapper;\n if (Math.abs(data.spinY) > 0) {\n const currentScrollTop = bodyWrapper.scrollTop;\n if (data.pixelY < 0 && currentScrollTop !== 0) {\n event.preventDefault();\n }\n if (data.pixelY > 0 && bodyWrapper.scrollHeight - bodyWrapper.clientHeight > currentScrollTop) {\n event.preventDefault();\n }\n bodyWrapper.scrollTop += Math.ceil(data.pixelY / 5);\n } else {\n bodyWrapper.scrollLeft += Math.ceil(data.pixelX / 5);\n }\n };\n return {\n isHidden,\n renderExpanded,\n setDragVisible,\n isGroup,\n handleMouseLeave,\n handleHeaderFooterMousewheel,\n tableSize,\n emptyBlockStyle,\n handleFixedMousewheel,\n resizeProxyVisible,\n bodyWidth,\n resizeState,\n doLayout,\n tableBodyStyles,\n tableLayout,\n scrollbarViewStyle,\n tableInnerStyle,\n scrollbarStyle\n };\n}\n\nexport { useStyle as default };\n//# sourceMappingURL=style-helper.mjs.map\n","import { ref, onMounted, onUnmounted } from 'vue';\n\nfunction useKeyRender(table) {\n const observer = ref();\n const initWatchDom = () => {\n const el = table.vnode.el;\n const columnsWrapper = el.querySelector(\".hidden-columns\");\n const config = { childList: true, subtree: true };\n const updateOrderFns = table.store.states.updateOrderFns;\n observer.value = new MutationObserver(() => {\n updateOrderFns.forEach((fn) => fn());\n });\n observer.value.observe(columnsWrapper, config);\n };\n onMounted(() => {\n initWatchDom();\n });\n onUnmounted(() => {\n var _a;\n (_a = observer.value) == null ? void 0 : _a.disconnect();\n });\n}\n\nexport { useKeyRender as default };\n//# sourceMappingURL=key-render-helper.mjs.map\n","import '../../../../hooks/index.mjs';\nimport { useSizeProp } from '../../../../hooks/use-size/index.mjs';\n\nvar defaultProps = {\n data: {\n type: Array,\n default: () => []\n },\n size: useSizeProp,\n width: [String, Number],\n height: [String, Number],\n maxHeight: [String, Number],\n fit: {\n type: Boolean,\n default: true\n },\n stripe: Boolean,\n border: Boolean,\n rowKey: [String, Function],\n showHeader: {\n type: Boolean,\n default: true\n },\n showSummary: Boolean,\n sumText: String,\n summaryMethod: Function,\n rowClassName: [String, Function],\n rowStyle: [Object, Function],\n cellClassName: [String, Function],\n cellStyle: [Object, Function],\n headerRowClassName: [String, Function],\n headerRowStyle: [Object, Function],\n headerCellClassName: [String, Function],\n headerCellStyle: [Object, Function],\n highlightCurrentRow: Boolean,\n currentRowKey: [String, Number],\n emptyText: String,\n expandRowKeys: Array,\n defaultExpandAll: Boolean,\n defaultSort: Object,\n tooltipEffect: String,\n tooltipOptions: Object,\n spanMethod: Function,\n selectOnIndeterminate: {\n type: Boolean,\n default: true\n },\n indent: {\n type: Number,\n default: 16\n },\n treeProps: {\n type: Object,\n default: () => {\n return {\n hasChildren: \"hasChildren\",\n children: \"children\",\n checkStrictly: false\n };\n }\n },\n lazy: Boolean,\n load: Function,\n style: {\n type: Object,\n default: () => ({})\n },\n className: {\n type: String,\n default: \"\"\n },\n tableLayout: {\n type: String,\n default: \"fixed\"\n },\n scrollbarAlwaysOn: Boolean,\n flexible: Boolean,\n showOverflowTooltip: [Boolean, Object],\n scrollbarTabindex: {\n type: [Number, String],\n default: void 0\n }\n};\n\nexport { defaultProps as default };\n//# sourceMappingURL=defaults.mjs.map\n","import { h } from 'vue';\n\nfunction hColgroup(props) {\n const isAuto = props.tableLayout === \"auto\";\n let columns = props.columns || [];\n if (isAuto) {\n if (columns.every((column) => column.width === void 0)) {\n columns = [];\n }\n }\n const getPropsData = (column) => {\n const propsData = {\n key: `${props.tableLayout}_${column.id}`,\n style: {},\n name: void 0\n };\n if (isAuto) {\n propsData.style = {\n width: `${column.width}px`\n };\n } else {\n propsData.name = column.id;\n }\n return propsData;\n };\n return h(\"colgroup\", {}, columns.map((column) => h(\"col\", getPropsData(column))));\n}\nhColgroup.props = [\"columns\", \"tableLayout\"];\n\nexport { hColgroup };\n//# sourceMappingURL=h-helper.mjs.map\n","import { ref } from 'vue';\nimport '../../../../utils/index.mjs';\nimport { isNumber } from '../../../../utils/types.mjs';\n\nconst useScrollbar = () => {\n const scrollBarRef = ref();\n const scrollTo = (options, yCoord) => {\n const scrollbar = scrollBarRef.value;\n if (scrollbar) {\n scrollbar.scrollTo(options, yCoord);\n }\n };\n const setScrollPosition = (position, offset) => {\n const scrollbar = scrollBarRef.value;\n if (scrollbar && isNumber(offset) && [\"Top\", \"Left\"].includes(position)) {\n scrollbar[`setScroll${position}`](offset);\n }\n };\n const setScrollTop = (top) => setScrollPosition(\"Top\", top);\n const setScrollLeft = (left) => setScrollPosition(\"Left\", left);\n return {\n scrollBarRef,\n scrollTo,\n setScrollTop,\n setScrollLeft\n };\n};\n\nexport { useScrollbar };\n//# sourceMappingURL=use-scrollbar.mjs.map\n","import { defineComponent, getCurrentInstance, provide, computed, resolveComponent, resolveDirective, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode, renderSlot, withDirectives, createVNode, createCommentVNode, withCtx, createBlock, createTextVNode, toDisplayString, vShow } from 'vue';\nimport { debounce } from 'lodash-unified';\nimport '../../../directives/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { ElScrollbar } from '../../scrollbar/index.mjs';\nimport { createStore } from './store/helper.mjs';\nimport TableLayout from './table-layout.mjs';\nimport TableHeader from './table-header/index.mjs';\nimport TableBody from './table-body/index.mjs';\nimport TableFooter from './table-footer/index.mjs';\nimport useUtils from './table/utils-helper.mjs';\nimport { convertToRows } from './table-header/utils-helper.mjs';\nimport useStyle from './table/style-helper.mjs';\nimport useKeyRender from './table/key-render-helper.mjs';\nimport defaultProps from './table/defaults.mjs';\nimport { TABLE_INJECTION_KEY } from './tokens.mjs';\nimport { hColgroup } from './h-helper.mjs';\nimport { useScrollbar } from './composables/use-scrollbar.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport Mousewheel from '../../../directives/mousewheel/index.mjs';\nimport { useLocale } from '../../../hooks/use-locale/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nlet tableIdSeed = 1;\nconst _sfc_main = defineComponent({\n name: \"ElTable\",\n directives: {\n Mousewheel\n },\n components: {\n TableHeader,\n TableBody,\n TableFooter,\n ElScrollbar,\n hColgroup\n },\n props: defaultProps,\n emits: [\n \"select\",\n \"select-all\",\n \"selection-change\",\n \"cell-mouse-enter\",\n \"cell-mouse-leave\",\n \"cell-contextmenu\",\n \"cell-click\",\n \"cell-dblclick\",\n \"row-click\",\n \"row-contextmenu\",\n \"row-dblclick\",\n \"header-click\",\n \"header-contextmenu\",\n \"sort-change\",\n \"filter-change\",\n \"current-change\",\n \"header-dragend\",\n \"expand-change\"\n ],\n setup(props) {\n const { t } = useLocale();\n const ns = useNamespace(\"table\");\n const table = getCurrentInstance();\n provide(TABLE_INJECTION_KEY, table);\n const store = createStore(table, props);\n table.store = store;\n const layout = new TableLayout({\n store: table.store,\n table,\n fit: props.fit,\n showHeader: props.showHeader\n });\n table.layout = layout;\n const isEmpty = computed(() => (store.states.data.value || []).length === 0);\n const {\n setCurrentRow,\n getSelectionRows,\n toggleRowSelection,\n clearSelection,\n clearFilter,\n toggleAllSelection,\n toggleRowExpansion,\n clearSort,\n sort\n } = useUtils(store);\n const {\n isHidden,\n renderExpanded,\n setDragVisible,\n isGroup,\n handleMouseLeave,\n handleHeaderFooterMousewheel,\n tableSize,\n emptyBlockStyle,\n handleFixedMousewheel,\n resizeProxyVisible,\n bodyWidth,\n resizeState,\n doLayout,\n tableBodyStyles,\n tableLayout,\n scrollbarViewStyle,\n tableInnerStyle,\n scrollbarStyle\n } = useStyle(props, layout, store, table);\n const { scrollBarRef, scrollTo, setScrollLeft, setScrollTop } = useScrollbar();\n const debouncedUpdateLayout = debounce(doLayout, 50);\n const tableId = `${ns.namespace.value}-table_${tableIdSeed++}`;\n table.tableId = tableId;\n table.state = {\n isGroup,\n resizeState,\n doLayout,\n debouncedUpdateLayout\n };\n const computedSumText = computed(() => {\n var _a;\n return (_a = props.sumText) != null ? _a : t(\"el.table.sumText\");\n });\n const computedEmptyText = computed(() => {\n var _a;\n return (_a = props.emptyText) != null ? _a : t(\"el.table.emptyText\");\n });\n const columns = computed(() => {\n return convertToRows(store.states.originColumns.value)[0];\n });\n useKeyRender(table);\n return {\n ns,\n layout,\n store,\n columns,\n handleHeaderFooterMousewheel,\n handleMouseLeave,\n tableId,\n tableSize,\n isHidden,\n isEmpty,\n renderExpanded,\n resizeProxyVisible,\n resizeState,\n isGroup,\n bodyWidth,\n tableBodyStyles,\n emptyBlockStyle,\n debouncedUpdateLayout,\n handleFixedMousewheel,\n setCurrentRow,\n getSelectionRows,\n toggleRowSelection,\n clearSelection,\n clearFilter,\n toggleAllSelection,\n toggleRowExpansion,\n clearSort,\n doLayout,\n sort,\n t,\n setDragVisible,\n context: table,\n computedSumText,\n computedEmptyText,\n tableLayout,\n scrollbarViewStyle,\n tableInnerStyle,\n scrollbarStyle,\n scrollBarRef,\n scrollTo,\n setScrollLeft,\n setScrollTop\n };\n }\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_hColgroup = resolveComponent(\"hColgroup\");\n const _component_table_header = resolveComponent(\"table-header\");\n const _component_table_body = resolveComponent(\"table-body\");\n const _component_table_footer = resolveComponent(\"table-footer\");\n const _component_el_scrollbar = resolveComponent(\"el-scrollbar\");\n const _directive_mousewheel = resolveDirective(\"mousewheel\");\n return openBlock(), createElementBlock(\"div\", {\n ref: \"tableWrapper\",\n class: normalizeClass([\n {\n [_ctx.ns.m(\"fit\")]: _ctx.fit,\n [_ctx.ns.m(\"striped\")]: _ctx.stripe,\n [_ctx.ns.m(\"border\")]: _ctx.border || _ctx.isGroup,\n [_ctx.ns.m(\"hidden\")]: _ctx.isHidden,\n [_ctx.ns.m(\"group\")]: _ctx.isGroup,\n [_ctx.ns.m(\"fluid-height\")]: _ctx.maxHeight,\n [_ctx.ns.m(\"scrollable-x\")]: _ctx.layout.scrollX.value,\n [_ctx.ns.m(\"scrollable-y\")]: _ctx.layout.scrollY.value,\n [_ctx.ns.m(\"enable-row-hover\")]: !_ctx.store.states.isComplex.value,\n [_ctx.ns.m(\"enable-row-transition\")]: (_ctx.store.states.data.value || []).length !== 0 && (_ctx.store.states.data.value || []).length < 100,\n \"has-footer\": _ctx.showSummary\n },\n _ctx.ns.m(_ctx.tableSize),\n _ctx.className,\n _ctx.ns.b(),\n _ctx.ns.m(`layout-${_ctx.tableLayout}`)\n ]),\n style: normalizeStyle(_ctx.style),\n \"data-prefix\": _ctx.ns.namespace.value,\n onMouseleave: _ctx.handleMouseLeave\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.ns.e(\"inner-wrapper\")),\n style: normalizeStyle(_ctx.tableInnerStyle)\n }, [\n createElementVNode(\"div\", {\n ref: \"hiddenColumns\",\n class: \"hidden-columns\"\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 512),\n _ctx.showHeader && _ctx.tableLayout === \"fixed\" ? withDirectives((openBlock(), createElementBlock(\"div\", {\n key: 0,\n ref: \"headerWrapper\",\n class: normalizeClass(_ctx.ns.e(\"header-wrapper\"))\n }, [\n createElementVNode(\"table\", {\n ref: \"tableHeader\",\n class: normalizeClass(_ctx.ns.e(\"header\")),\n style: normalizeStyle(_ctx.tableBodyStyles),\n border: \"0\",\n cellpadding: \"0\",\n cellspacing: \"0\"\n }, [\n createVNode(_component_hColgroup, {\n columns: _ctx.store.states.columns.value,\n \"table-layout\": _ctx.tableLayout\n }, null, 8, [\"columns\", \"table-layout\"]),\n createVNode(_component_table_header, {\n ref: \"tableHeaderRef\",\n border: _ctx.border,\n \"default-sort\": _ctx.defaultSort,\n store: _ctx.store,\n onSetDragVisible: _ctx.setDragVisible\n }, null, 8, [\"border\", \"default-sort\", \"store\", \"onSetDragVisible\"])\n ], 6)\n ], 2)), [\n [_directive_mousewheel, _ctx.handleHeaderFooterMousewheel]\n ]) : createCommentVNode(\"v-if\", true),\n createElementVNode(\"div\", {\n ref: \"bodyWrapper\",\n class: normalizeClass(_ctx.ns.e(\"body-wrapper\"))\n }, [\n createVNode(_component_el_scrollbar, {\n ref: \"scrollBarRef\",\n \"view-style\": _ctx.scrollbarViewStyle,\n \"wrap-style\": _ctx.scrollbarStyle,\n always: _ctx.scrollbarAlwaysOn,\n tabindex: _ctx.scrollbarTabindex\n }, {\n default: withCtx(() => [\n createElementVNode(\"table\", {\n ref: \"tableBody\",\n class: normalizeClass(_ctx.ns.e(\"body\")),\n cellspacing: \"0\",\n cellpadding: \"0\",\n border: \"0\",\n style: normalizeStyle({\n width: _ctx.bodyWidth,\n tableLayout: _ctx.tableLayout\n })\n }, [\n createVNode(_component_hColgroup, {\n columns: _ctx.store.states.columns.value,\n \"table-layout\": _ctx.tableLayout\n }, null, 8, [\"columns\", \"table-layout\"]),\n _ctx.showHeader && _ctx.tableLayout === \"auto\" ? (openBlock(), createBlock(_component_table_header, {\n key: 0,\n ref: \"tableHeaderRef\",\n class: normalizeClass(_ctx.ns.e(\"body-header\")),\n border: _ctx.border,\n \"default-sort\": _ctx.defaultSort,\n store: _ctx.store,\n onSetDragVisible: _ctx.setDragVisible\n }, null, 8, [\"class\", \"border\", \"default-sort\", \"store\", \"onSetDragVisible\"])) : createCommentVNode(\"v-if\", true),\n createVNode(_component_table_body, {\n context: _ctx.context,\n highlight: _ctx.highlightCurrentRow,\n \"row-class-name\": _ctx.rowClassName,\n \"tooltip-effect\": _ctx.tooltipEffect,\n \"tooltip-options\": _ctx.tooltipOptions,\n \"row-style\": _ctx.rowStyle,\n store: _ctx.store,\n stripe: _ctx.stripe\n }, null, 8, [\"context\", \"highlight\", \"row-class-name\", \"tooltip-effect\", \"tooltip-options\", \"row-style\", \"store\", \"stripe\"]),\n _ctx.showSummary && _ctx.tableLayout === \"auto\" ? (openBlock(), createBlock(_component_table_footer, {\n key: 1,\n class: normalizeClass(_ctx.ns.e(\"body-footer\")),\n border: _ctx.border,\n \"default-sort\": _ctx.defaultSort,\n store: _ctx.store,\n \"sum-text\": _ctx.computedSumText,\n \"summary-method\": _ctx.summaryMethod\n }, null, 8, [\"class\", \"border\", \"default-sort\", \"store\", \"sum-text\", \"summary-method\"])) : createCommentVNode(\"v-if\", true)\n ], 6),\n _ctx.isEmpty ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n ref: \"emptyBlock\",\n style: normalizeStyle(_ctx.emptyBlockStyle),\n class: normalizeClass(_ctx.ns.e(\"empty-block\"))\n }, [\n createElementVNode(\"span\", {\n class: normalizeClass(_ctx.ns.e(\"empty-text\"))\n }, [\n renderSlot(_ctx.$slots, \"empty\", {}, () => [\n createTextVNode(toDisplayString(_ctx.computedEmptyText), 1)\n ])\n ], 2)\n ], 6)) : createCommentVNode(\"v-if\", true),\n _ctx.$slots.append ? (openBlock(), createElementBlock(\"div\", {\n key: 1,\n ref: \"appendWrapper\",\n class: normalizeClass(_ctx.ns.e(\"append-wrapper\"))\n }, [\n renderSlot(_ctx.$slots, \"append\")\n ], 2)) : createCommentVNode(\"v-if\", true)\n ]),\n _: 3\n }, 8, [\"view-style\", \"wrap-style\", \"always\", \"tabindex\"])\n ], 2),\n _ctx.showSummary && _ctx.tableLayout === \"fixed\" ? withDirectives((openBlock(), createElementBlock(\"div\", {\n key: 1,\n ref: \"footerWrapper\",\n class: normalizeClass(_ctx.ns.e(\"footer-wrapper\"))\n }, [\n createElementVNode(\"table\", {\n class: normalizeClass(_ctx.ns.e(\"footer\")),\n cellspacing: \"0\",\n cellpadding: \"0\",\n border: \"0\",\n style: normalizeStyle(_ctx.tableBodyStyles)\n }, [\n createVNode(_component_hColgroup, {\n columns: _ctx.store.states.columns.value,\n \"table-layout\": _ctx.tableLayout\n }, null, 8, [\"columns\", \"table-layout\"]),\n createVNode(_component_table_footer, {\n border: _ctx.border,\n \"default-sort\": _ctx.defaultSort,\n store: _ctx.store,\n \"sum-text\": _ctx.computedSumText,\n \"summary-method\": _ctx.summaryMethod\n }, null, 8, [\"border\", \"default-sort\", \"store\", \"sum-text\", \"summary-method\"])\n ], 6)\n ], 2)), [\n [vShow, !_ctx.isEmpty],\n [_directive_mousewheel, _ctx.handleHeaderFooterMousewheel]\n ]) : createCommentVNode(\"v-if\", true),\n _ctx.border || _ctx.isGroup ? (openBlock(), createElementBlock(\"div\", {\n key: 2,\n class: normalizeClass(_ctx.ns.e(\"border-left-patch\"))\n }, null, 2)) : createCommentVNode(\"v-if\", true)\n ], 6),\n withDirectives(createElementVNode(\"div\", {\n ref: \"resizeProxy\",\n class: normalizeClass(_ctx.ns.e(\"column-resize-proxy\"))\n }, null, 2), [\n [vShow, _ctx.resizeProxyVisible]\n ])\n ], 46, [\"data-prefix\", \"onMouseleave\"]);\n}\nvar Table = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__file\", \"table.vue\"]]);\n\nexport { Table as default };\n//# sourceMappingURL=table.mjs.map\n","import { h } from 'vue';\nimport { ElCheckbox } from '../../checkbox/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { ArrowRight, Loading } from '@element-plus/icons-vue';\nimport '../../../utils/index.mjs';\nimport { getProp } from '../../../utils/objects.mjs';\n\nconst defaultClassNames = {\n selection: \"table-column--selection\",\n expand: \"table__expand-column\"\n};\nconst cellStarts = {\n default: {\n order: \"\"\n },\n selection: {\n width: 48,\n minWidth: 48,\n realWidth: 48,\n order: \"\"\n },\n expand: {\n width: 48,\n minWidth: 48,\n realWidth: 48,\n order: \"\"\n },\n index: {\n width: 48,\n minWidth: 48,\n realWidth: 48,\n order: \"\"\n }\n};\nconst getDefaultClassName = (type) => {\n return defaultClassNames[type] || \"\";\n};\nconst cellForced = {\n selection: {\n renderHeader({ store, column }) {\n function isDisabled() {\n return store.states.data.value && store.states.data.value.length === 0;\n }\n return h(ElCheckbox, {\n disabled: isDisabled(),\n size: store.states.tableSize.value,\n indeterminate: store.states.selection.value.length > 0 && !store.states.isAllSelected.value,\n \"onUpdate:modelValue\": store.toggleAllSelection,\n modelValue: store.states.isAllSelected.value,\n ariaLabel: column.label\n });\n },\n renderCell({\n row,\n column,\n store,\n $index\n }) {\n return h(ElCheckbox, {\n disabled: column.selectable ? !column.selectable.call(null, row, $index) : false,\n size: store.states.tableSize.value,\n onChange: () => {\n store.commit(\"rowSelectedChanged\", row);\n },\n onClick: (event) => event.stopPropagation(),\n modelValue: store.isSelected(row),\n ariaLabel: column.label\n });\n },\n sortable: false,\n resizable: false\n },\n index: {\n renderHeader({ column }) {\n return column.label || \"#\";\n },\n renderCell({\n column,\n $index\n }) {\n let i = $index + 1;\n const index = column.index;\n if (typeof index === \"number\") {\n i = $index + index;\n } else if (typeof index === \"function\") {\n i = index($index);\n }\n return h(\"div\", {}, [i]);\n },\n sortable: false\n },\n expand: {\n renderHeader({ column }) {\n return column.label || \"\";\n },\n renderCell({\n row,\n store,\n expanded\n }) {\n const { ns } = store;\n const classes = [ns.e(\"expand-icon\")];\n if (expanded) {\n classes.push(ns.em(\"expand-icon\", \"expanded\"));\n }\n const callback = function(e) {\n e.stopPropagation();\n store.toggleRowExpansion(row);\n };\n return h(\"div\", {\n class: classes,\n onClick: callback\n }, {\n default: () => {\n return [\n h(ElIcon, null, {\n default: () => {\n return [h(ArrowRight)];\n }\n })\n ];\n }\n });\n },\n sortable: false,\n resizable: false\n }\n};\nfunction defaultRenderCell({\n row,\n column,\n $index\n}) {\n var _a;\n const property = column.property;\n const value = property && getProp(row, property).value;\n if (column && column.formatter) {\n return column.formatter(row, column, value, $index);\n }\n return ((_a = value == null ? void 0 : value.toString) == null ? void 0 : _a.call(value)) || \"\";\n}\nfunction treeCellPrefix({\n row,\n treeNode,\n store\n}, createPlaceholder = false) {\n const { ns } = store;\n if (!treeNode) {\n if (createPlaceholder) {\n return [\n h(\"span\", {\n class: ns.e(\"placeholder\")\n })\n ];\n }\n return null;\n }\n const ele = [];\n const callback = function(e) {\n e.stopPropagation();\n if (treeNode.loading) {\n return;\n }\n store.loadOrToggle(row);\n };\n if (treeNode.indent) {\n ele.push(h(\"span\", {\n class: ns.e(\"indent\"),\n style: { \"padding-left\": `${treeNode.indent}px` }\n }));\n }\n if (typeof treeNode.expanded === \"boolean\" && !treeNode.noLazyChildren) {\n const expandClasses = [\n ns.e(\"expand-icon\"),\n treeNode.expanded ? ns.em(\"expand-icon\", \"expanded\") : \"\"\n ];\n let icon = ArrowRight;\n if (treeNode.loading) {\n icon = Loading;\n }\n ele.push(h(\"div\", {\n class: expandClasses,\n onClick: callback\n }, {\n default: () => {\n return [\n h(ElIcon, { class: { [ns.is(\"loading\")]: treeNode.loading } }, {\n default: () => [h(icon)]\n })\n ];\n }\n }));\n } else {\n ele.push(h(\"span\", {\n class: ns.e(\"placeholder\")\n }));\n }\n return ele;\n}\n\nexport { cellForced, cellStarts, defaultRenderCell, getDefaultClassName, treeCellPrefix };\n//# sourceMappingURL=config.mjs.map\n","import { getCurrentInstance, watch } from 'vue';\nimport '../../../../utils/index.mjs';\nimport { parseWidth, parseMinWidth } from '../util.mjs';\nimport { hasOwn } from '@vue/shared';\n\nfunction getAllAliases(props, aliases) {\n return props.reduce((prev, cur) => {\n prev[cur] = cur;\n return prev;\n }, aliases);\n}\nfunction useWatcher(owner, props_) {\n const instance = getCurrentInstance();\n const registerComplexWatchers = () => {\n const props = [\"fixed\"];\n const aliases = {\n realWidth: \"width\",\n realMinWidth: \"minWidth\"\n };\n const allAliases = getAllAliases(props, aliases);\n Object.keys(allAliases).forEach((key) => {\n const columnKey = aliases[key];\n if (hasOwn(props_, columnKey)) {\n watch(() => props_[columnKey], (newVal) => {\n let value = newVal;\n if (columnKey === \"width\" && key === \"realWidth\") {\n value = parseWidth(newVal);\n }\n if (columnKey === \"minWidth\" && key === \"realMinWidth\") {\n value = parseMinWidth(newVal);\n }\n instance.columnConfig.value[columnKey] = value;\n instance.columnConfig.value[key] = value;\n const updateColumns = columnKey === \"fixed\";\n owner.value.store.scheduleLayout(updateColumns);\n });\n }\n });\n };\n const registerNormalWatchers = () => {\n const props = [\n \"label\",\n \"filters\",\n \"filterMultiple\",\n \"filteredValue\",\n \"sortable\",\n \"index\",\n \"formatter\",\n \"className\",\n \"labelClassName\",\n \"filterClassName\",\n \"showOverflowTooltip\"\n ];\n const aliases = {\n property: \"prop\",\n align: \"realAlign\",\n headerAlign: \"realHeaderAlign\"\n };\n const allAliases = getAllAliases(props, aliases);\n Object.keys(allAliases).forEach((key) => {\n const columnKey = aliases[key];\n if (hasOwn(props_, columnKey)) {\n watch(() => props_[columnKey], (newVal) => {\n instance.columnConfig.value[key] = newVal;\n });\n }\n });\n };\n return {\n registerComplexWatchers,\n registerNormalWatchers\n };\n}\n\nexport { useWatcher as default };\n//# sourceMappingURL=watcher-helper.mjs.map\n","import { getCurrentInstance, ref, watchEffect, computed, unref, renderSlot, h, Comment } from 'vue';\nimport '../../../../utils/index.mjs';\nimport '../../../../hooks/index.mjs';\nimport { cellForced, getDefaultClassName, defaultRenderCell, treeCellPrefix } from '../config.mjs';\nimport { parseWidth, parseMinWidth } from '../util.mjs';\nimport { useNamespace } from '../../../../hooks/use-namespace/index.mjs';\nimport { debugWarn } from '../../../../utils/error.mjs';\n\nfunction useRender(props, slots, owner) {\n const instance = getCurrentInstance();\n const columnId = ref(\"\");\n const isSubColumn = ref(false);\n const realAlign = ref();\n const realHeaderAlign = ref();\n const ns = useNamespace(\"table\");\n watchEffect(() => {\n realAlign.value = props.align ? `is-${props.align}` : null;\n realAlign.value;\n });\n watchEffect(() => {\n realHeaderAlign.value = props.headerAlign ? `is-${props.headerAlign}` : realAlign.value;\n realHeaderAlign.value;\n });\n const columnOrTableParent = computed(() => {\n let parent = instance.vnode.vParent || instance.parent;\n while (parent && !parent.tableId && !parent.columnId) {\n parent = parent.vnode.vParent || parent.parent;\n }\n return parent;\n });\n const hasTreeColumn = computed(() => {\n const { store } = instance.parent;\n if (!store)\n return false;\n const { treeData } = store.states;\n const treeDataValue = treeData.value;\n return treeDataValue && Object.keys(treeDataValue).length > 0;\n });\n const realWidth = ref(parseWidth(props.width));\n const realMinWidth = ref(parseMinWidth(props.minWidth));\n const setColumnWidth = (column) => {\n if (realWidth.value)\n column.width = realWidth.value;\n if (realMinWidth.value) {\n column.minWidth = realMinWidth.value;\n }\n if (!realWidth.value && realMinWidth.value) {\n column.width = void 0;\n }\n if (!column.minWidth) {\n column.minWidth = 80;\n }\n column.realWidth = Number(column.width === void 0 ? column.minWidth : column.width);\n return column;\n };\n const setColumnForcedProps = (column) => {\n const type = column.type;\n const source = cellForced[type] || {};\n Object.keys(source).forEach((prop) => {\n const value = source[prop];\n if (prop !== \"className\" && value !== void 0) {\n column[prop] = value;\n }\n });\n const className = getDefaultClassName(type);\n if (className) {\n const forceClass = `${unref(ns.namespace)}-${className}`;\n column.className = column.className ? `${column.className} ${forceClass}` : forceClass;\n }\n return column;\n };\n const checkSubColumn = (children) => {\n if (Array.isArray(children)) {\n children.forEach((child) => check(child));\n } else {\n check(children);\n }\n function check(item) {\n var _a;\n if (((_a = item == null ? void 0 : item.type) == null ? void 0 : _a.name) === \"ElTableColumn\") {\n item.vParent = instance;\n }\n }\n };\n const setColumnRenders = (column) => {\n if (props.renderHeader) {\n debugWarn(\"TableColumn\", \"Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header.\");\n } else if (column.type !== \"selection\") {\n column.renderHeader = (scope) => {\n instance.columnConfig.value[\"label\"];\n return renderSlot(slots, \"header\", scope, () => [column.label]);\n };\n }\n if (slots[\"filter-icon\"]) {\n column.renderFilterIcon = (scope) => {\n return renderSlot(slots, \"filter-icon\", scope);\n };\n }\n let originRenderCell = column.renderCell;\n if (column.type === \"expand\") {\n column.renderCell = (data) => h(\"div\", {\n class: \"cell\"\n }, [originRenderCell(data)]);\n owner.value.renderExpanded = (data) => {\n return slots.default ? slots.default(data) : slots.default;\n };\n } else {\n originRenderCell = originRenderCell || defaultRenderCell;\n column.renderCell = (data) => {\n let children = null;\n if (slots.default) {\n const vnodes = slots.default(data);\n children = vnodes.some((v) => v.type !== Comment) ? vnodes : originRenderCell(data);\n } else {\n children = originRenderCell(data);\n }\n const { columns } = owner.value.store.states;\n const firstUserColumnIndex = columns.value.findIndex((item) => item.type === \"default\");\n const shouldCreatePlaceholder = hasTreeColumn.value && data.cellIndex === firstUserColumnIndex;\n const prefix = treeCellPrefix(data, shouldCreatePlaceholder);\n const props2 = {\n class: \"cell\",\n style: {}\n };\n if (column.showOverflowTooltip) {\n props2.class = `${props2.class} ${unref(ns.namespace)}-tooltip`;\n props2.style = {\n width: `${(data.column.realWidth || Number(data.column.width)) - 1}px`\n };\n }\n checkSubColumn(children);\n return h(\"div\", props2, [prefix, children]);\n };\n }\n return column;\n };\n const getPropsData = (...propsKey) => {\n return propsKey.reduce((prev, cur) => {\n if (Array.isArray(cur)) {\n cur.forEach((key) => {\n prev[key] = props[key];\n });\n }\n return prev;\n }, {});\n };\n const getColumnElIndex = (children, child) => {\n return Array.prototype.indexOf.call(children, child);\n };\n const updateColumnOrder = () => {\n owner.value.store.commit(\"updateColumnOrder\", instance.columnConfig.value);\n };\n return {\n columnId,\n realAlign,\n isSubColumn,\n realHeaderAlign,\n columnOrTableParent,\n setColumnWidth,\n setColumnForcedProps,\n setColumnRenders,\n getPropsData,\n getColumnElIndex,\n updateColumnOrder\n };\n}\n\nexport { useRender as default };\n//# sourceMappingURL=render-helper.mjs.map\n","var defaultProps = {\n type: {\n type: String,\n default: \"default\"\n },\n label: String,\n className: String,\n labelClassName: String,\n property: String,\n prop: String,\n width: {\n type: [String, Number],\n default: \"\"\n },\n minWidth: {\n type: [String, Number],\n default: \"\"\n },\n renderHeader: Function,\n sortable: {\n type: [Boolean, String],\n default: false\n },\n sortMethod: Function,\n sortBy: [String, Function, Array],\n resizable: {\n type: Boolean,\n default: true\n },\n columnKey: String,\n align: String,\n headerAlign: String,\n showOverflowTooltip: {\n type: [Boolean, Object],\n default: void 0\n },\n fixed: [Boolean, String],\n formatter: Function,\n selectable: Function,\n reserveSelection: Boolean,\n filterMethod: Function,\n filteredValue: Array,\n filters: Array,\n filterPlacement: String,\n filterMultiple: {\n type: Boolean,\n default: true\n },\n filterClassName: String,\n index: [Number, Function],\n sortOrders: {\n type: Array,\n default: () => {\n return [\"ascending\", \"descending\", null];\n },\n validator: (val) => {\n return val.every((order) => [\"ascending\", \"descending\", null].includes(order));\n }\n }\n};\n\nexport { defaultProps as default };\n//# sourceMappingURL=defaults.mjs.map\n","import { defineComponent, getCurrentInstance, ref, computed, onBeforeMount, onMounted, onBeforeUnmount, Fragment, h } from 'vue';\nimport { ElCheckbox } from '../../../checkbox/index.mjs';\nimport '../../../../utils/index.mjs';\nimport { cellStarts } from '../config.mjs';\nimport { mergeOptions, compose } from '../util.mjs';\nimport useWatcher from './watcher-helper.mjs';\nimport useRender from './render-helper.mjs';\nimport defaultProps from './defaults.mjs';\nimport { isUndefined } from '../../../../utils/types.mjs';\nimport { isString } from '@vue/shared';\n\nlet columnIdSeed = 1;\nvar ElTableColumn = defineComponent({\n name: \"ElTableColumn\",\n components: {\n ElCheckbox\n },\n props: defaultProps,\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const columnConfig = ref({});\n const owner = computed(() => {\n let parent2 = instance.parent;\n while (parent2 && !parent2.tableId) {\n parent2 = parent2.parent;\n }\n return parent2;\n });\n const { registerNormalWatchers, registerComplexWatchers } = useWatcher(owner, props);\n const {\n columnId,\n isSubColumn,\n realHeaderAlign,\n columnOrTableParent,\n setColumnWidth,\n setColumnForcedProps,\n setColumnRenders,\n getPropsData,\n getColumnElIndex,\n realAlign,\n updateColumnOrder\n } = useRender(props, slots, owner);\n const parent = columnOrTableParent.value;\n columnId.value = `${parent.tableId || parent.columnId}_column_${columnIdSeed++}`;\n onBeforeMount(() => {\n isSubColumn.value = owner.value !== parent;\n const type = props.type || \"default\";\n const sortable = props.sortable === \"\" ? true : props.sortable;\n const showOverflowTooltip = isUndefined(props.showOverflowTooltip) ? parent.props.showOverflowTooltip : props.showOverflowTooltip;\n const defaults = {\n ...cellStarts[type],\n id: columnId.value,\n type,\n property: props.prop || props.property,\n align: realAlign,\n headerAlign: realHeaderAlign,\n showOverflowTooltip,\n filterable: props.filters || props.filterMethod,\n filteredValue: [],\n filterPlacement: \"\",\n filterClassName: \"\",\n isColumnGroup: false,\n isSubColumn: false,\n filterOpened: false,\n sortable,\n index: props.index,\n rawColumnKey: instance.vnode.key\n };\n const basicProps = [\n \"columnKey\",\n \"label\",\n \"className\",\n \"labelClassName\",\n \"type\",\n \"renderHeader\",\n \"formatter\",\n \"fixed\",\n \"resizable\"\n ];\n const sortProps = [\"sortMethod\", \"sortBy\", \"sortOrders\"];\n const selectProps = [\"selectable\", \"reserveSelection\"];\n const filterProps = [\n \"filterMethod\",\n \"filters\",\n \"filterMultiple\",\n \"filterOpened\",\n \"filteredValue\",\n \"filterPlacement\",\n \"filterClassName\"\n ];\n let column = getPropsData(basicProps, sortProps, selectProps, filterProps);\n column = mergeOptions(defaults, column);\n const chains = compose(setColumnRenders, setColumnWidth, setColumnForcedProps);\n column = chains(column);\n columnConfig.value = column;\n registerNormalWatchers();\n registerComplexWatchers();\n });\n onMounted(() => {\n var _a;\n const parent2 = columnOrTableParent.value;\n const children = isSubColumn.value ? parent2.vnode.el.children : (_a = parent2.refs.hiddenColumns) == null ? void 0 : _a.children;\n const getColumnIndex = () => getColumnElIndex(children || [], instance.vnode.el);\n columnConfig.value.getColumnIndex = getColumnIndex;\n const columnIndex = getColumnIndex();\n columnIndex > -1 && owner.value.store.commit(\"insertColumn\", columnConfig.value, isSubColumn.value ? parent2.columnConfig.value : null, updateColumnOrder);\n });\n onBeforeUnmount(() => {\n const getColumnIndex = columnConfig.value.getColumnIndex;\n const columnIndex = getColumnIndex ? getColumnIndex() : -1;\n columnIndex > -1 && owner.value.store.commit(\"removeColumn\", columnConfig.value, isSubColumn.value ? parent.columnConfig.value : null, updateColumnOrder);\n });\n instance.columnId = columnId.value;\n instance.columnConfig = columnConfig;\n return;\n },\n render() {\n var _a, _b, _c;\n try {\n const renderDefault = (_b = (_a = this.$slots).default) == null ? void 0 : _b.call(_a, {\n row: {},\n column: {},\n $index: -1\n });\n const children = [];\n if (Array.isArray(renderDefault)) {\n for (const childNode of renderDefault) {\n if (((_c = childNode.type) == null ? void 0 : _c.name) === \"ElTableColumn\" || childNode.shapeFlag & 2) {\n children.push(childNode);\n } else if (childNode.type === Fragment && Array.isArray(childNode.children)) {\n childNode.children.forEach((vnode2) => {\n if ((vnode2 == null ? void 0 : vnode2.patchFlag) !== 1024 && !isString(vnode2 == null ? void 0 : vnode2.children)) {\n children.push(vnode2);\n }\n });\n }\n }\n }\n const vnode = h(\"div\", children);\n return vnode;\n } catch (e) {\n return h(\"div\", []);\n }\n }\n});\n\nexport { ElTableColumn as default };\n//# sourceMappingURL=index.mjs.map\n","import '../../utils/index.mjs';\nimport Table from './src/table.mjs';\nimport './src/tableColumn.mjs';\nimport { withInstall, withNoopInstall } from '../../utils/vue/install.mjs';\nimport ElTableColumn$1 from './src/table-column/index.mjs';\n\nconst ElTable = withInstall(Table, {\n TableColumn: ElTableColumn$1\n});\nconst ElTableColumn = withNoopInstall(ElTableColumn$1);\n\nexport { ElTable, ElTableColumn, ElTable as default };\n//# sourceMappingURL=index.mjs.map\n","const tabsRootContextKey = Symbol(\"tabsRootContextKey\");\n\nexport { tabsRootContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\n\nconst tabBarProps = buildProps({\n tabs: {\n type: definePropType(Array),\n default: () => mutable([])\n }\n});\n\nexport { tabBarProps };\n//# sourceMappingURL=tab-bar.mjs.map\n","import { defineComponent, getCurrentInstance, inject, ref, watch, nextTick, onBeforeUnmount, openBlock, createElementBlock, normalizeClass, unref, normalizeStyle } from 'vue';\nimport { useResizeObserver } from '@vueuse/core';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { tabsRootContextKey } from './constants.mjs';\nimport { tabBarProps } from './tab-bar.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { throwError } from '../../../utils/error.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { capitalize } from '../../../utils/strings.mjs';\n\nconst COMPONENT_NAME = \"ElTabBar\";\nconst __default__ = defineComponent({\n name: COMPONENT_NAME\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: tabBarProps,\n setup(__props, { expose }) {\n const props = __props;\n const instance = getCurrentInstance();\n const rootTabs = inject(tabsRootContextKey);\n if (!rootTabs)\n throwError(COMPONENT_NAME, \"\");\n const ns = useNamespace(\"tabs\");\n const barRef = ref();\n const barStyle = ref();\n const getBarStyle = () => {\n let offset = 0;\n let tabSize = 0;\n const sizeName = [\"top\", \"bottom\"].includes(rootTabs.props.tabPosition) ? \"width\" : \"height\";\n const sizeDir = sizeName === \"width\" ? \"x\" : \"y\";\n const position = sizeDir === \"x\" ? \"left\" : \"top\";\n props.tabs.every((tab) => {\n var _a, _b;\n const $el = (_b = (_a = instance.parent) == null ? void 0 : _a.refs) == null ? void 0 : _b[`tab-${tab.uid}`];\n if (!$el)\n return false;\n if (!tab.active) {\n return true;\n }\n offset = $el[`offset${capitalize(position)}`];\n tabSize = $el[`client${capitalize(sizeName)}`];\n const tabStyles = window.getComputedStyle($el);\n if (sizeName === \"width\") {\n tabSize -= Number.parseFloat(tabStyles.paddingLeft) + Number.parseFloat(tabStyles.paddingRight);\n offset += Number.parseFloat(tabStyles.paddingLeft);\n }\n return false;\n });\n return {\n [sizeName]: `${tabSize}px`,\n transform: `translate${capitalize(sizeDir)}(${offset}px)`\n };\n };\n const update = () => barStyle.value = getBarStyle();\n const saveObserver = [];\n const observerTabs = () => {\n var _a;\n saveObserver.forEach((observer) => observer.stop());\n saveObserver.length = 0;\n const list = (_a = instance.parent) == null ? void 0 : _a.refs;\n if (!list)\n return;\n for (const key in list) {\n if (key.startsWith(\"tab-\")) {\n const _el = list[key];\n if (_el) {\n saveObserver.push(useResizeObserver(_el, update));\n }\n }\n }\n };\n watch(() => props.tabs, async () => {\n await nextTick();\n update();\n observerTabs();\n }, { immediate: true });\n const barObserever = useResizeObserver(barRef, () => update());\n onBeforeUnmount(() => {\n saveObserver.forEach((observer) => observer.stop());\n saveObserver.length = 0;\n barObserever.stop();\n });\n expose({\n ref: barRef,\n update\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref_key: \"barRef\",\n ref: barRef,\n class: normalizeClass([unref(ns).e(\"active-bar\"), unref(ns).is(unref(rootTabs).props.tabPosition)]),\n style: normalizeStyle(barStyle.value)\n }, null, 6);\n };\n }\n});\nvar TabBar = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"tab-bar.vue\"]]);\n\nexport { TabBar as default };\n//# sourceMappingURL=tab-bar2.mjs.map\n","import { defineComponent, inject, ref, computed, nextTick, watch, onMounted, onUpdated, createVNode } from 'vue';\nimport { useDocumentVisibility, useWindowFocus, useResizeObserver } from '@vueuse/core';\nimport '../../../utils/index.mjs';\nimport '../../../constants/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { ArrowLeft, ArrowRight, Close } from '@element-plus/icons-vue';\nimport '../../../hooks/index.mjs';\nimport TabBar from './tab-bar2.mjs';\nimport { tabsRootContextKey } from './constants.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { throwError } from '../../../utils/error.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { capitalize } from '../../../utils/strings.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\n\nconst tabNavProps = buildProps({\n panes: {\n type: definePropType(Array),\n default: () => mutable([])\n },\n currentName: {\n type: [String, Number],\n default: \"\"\n },\n editable: Boolean,\n type: {\n type: String,\n values: [\"card\", \"border-card\", \"\"],\n default: \"\"\n },\n stretch: Boolean\n});\nconst tabNavEmits = {\n tabClick: (tab, tabName, ev) => ev instanceof Event,\n tabRemove: (tab, ev) => ev instanceof Event\n};\nconst COMPONENT_NAME = \"ElTabNav\";\nconst TabNav = defineComponent({\n name: COMPONENT_NAME,\n props: tabNavProps,\n emits: tabNavEmits,\n setup(props, {\n expose,\n emit\n }) {\n const rootTabs = inject(tabsRootContextKey);\n if (!rootTabs)\n throwError(COMPONENT_NAME, ``);\n const ns = useNamespace(\"tabs\");\n const visibility = useDocumentVisibility();\n const focused = useWindowFocus();\n const navScroll$ = ref();\n const nav$ = ref();\n const el$ = ref();\n const tabBarRef = ref();\n const scrollable = ref(false);\n const navOffset = ref(0);\n const isFocus = ref(false);\n const focusable = ref(true);\n const sizeName = computed(() => [\"top\", \"bottom\"].includes(rootTabs.props.tabPosition) ? \"width\" : \"height\");\n const navStyle = computed(() => {\n const dir = sizeName.value === \"width\" ? \"X\" : \"Y\";\n return {\n transform: `translate${dir}(-${navOffset.value}px)`\n };\n });\n const scrollPrev = () => {\n if (!navScroll$.value)\n return;\n const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];\n const currentOffset = navOffset.value;\n if (!currentOffset)\n return;\n const newOffset = currentOffset > containerSize ? currentOffset - containerSize : 0;\n navOffset.value = newOffset;\n };\n const scrollNext = () => {\n if (!navScroll$.value || !nav$.value)\n return;\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`];\n const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];\n const currentOffset = navOffset.value;\n if (navSize - currentOffset <= containerSize)\n return;\n const newOffset = navSize - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize - containerSize;\n navOffset.value = newOffset;\n };\n const scrollToActiveTab = async () => {\n const nav = nav$.value;\n if (!scrollable.value || !el$.value || !navScroll$.value || !nav)\n return;\n await nextTick();\n const activeTab = el$.value.querySelector(\".is-active\");\n if (!activeTab)\n return;\n const navScroll = navScroll$.value;\n const isHorizontal = [\"top\", \"bottom\"].includes(rootTabs.props.tabPosition);\n const activeTabBounding = activeTab.getBoundingClientRect();\n const navScrollBounding = navScroll.getBoundingClientRect();\n const maxOffset = isHorizontal ? nav.offsetWidth - navScrollBounding.width : nav.offsetHeight - navScrollBounding.height;\n const currentOffset = navOffset.value;\n let newOffset = currentOffset;\n if (isHorizontal) {\n if (activeTabBounding.left < navScrollBounding.left) {\n newOffset = currentOffset - (navScrollBounding.left - activeTabBounding.left);\n }\n if (activeTabBounding.right > navScrollBounding.right) {\n newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right;\n }\n } else {\n if (activeTabBounding.top < navScrollBounding.top) {\n newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top);\n }\n if (activeTabBounding.bottom > navScrollBounding.bottom) {\n newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom);\n }\n }\n newOffset = Math.max(newOffset, 0);\n navOffset.value = Math.min(newOffset, maxOffset);\n };\n const update = () => {\n var _a;\n if (!nav$.value || !navScroll$.value)\n return;\n props.stretch && ((_a = tabBarRef.value) == null ? void 0 : _a.update());\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`];\n const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];\n const currentOffset = navOffset.value;\n if (containerSize < navSize) {\n scrollable.value = scrollable.value || {};\n scrollable.value.prev = currentOffset;\n scrollable.value.next = currentOffset + containerSize < navSize;\n if (navSize - currentOffset < containerSize) {\n navOffset.value = navSize - containerSize;\n }\n } else {\n scrollable.value = false;\n if (currentOffset > 0) {\n navOffset.value = 0;\n }\n }\n };\n const changeTab = (e) => {\n const code = e.code;\n const {\n up,\n down,\n left,\n right\n } = EVENT_CODE;\n if (![up, down, left, right].includes(code))\n return;\n const tabList = Array.from(e.currentTarget.querySelectorAll(\"[role=tab]:not(.is-disabled)\"));\n const currentIndex = tabList.indexOf(e.target);\n let nextIndex;\n if (code === left || code === up) {\n if (currentIndex === 0) {\n nextIndex = tabList.length - 1;\n } else {\n nextIndex = currentIndex - 1;\n }\n } else {\n if (currentIndex < tabList.length - 1) {\n nextIndex = currentIndex + 1;\n } else {\n nextIndex = 0;\n }\n }\n tabList[nextIndex].focus({\n preventScroll: true\n });\n tabList[nextIndex].click();\n setFocus();\n };\n const setFocus = () => {\n if (focusable.value)\n isFocus.value = true;\n };\n const removeFocus = () => isFocus.value = false;\n watch(visibility, (visibility2) => {\n if (visibility2 === \"hidden\") {\n focusable.value = false;\n } else if (visibility2 === \"visible\") {\n setTimeout(() => focusable.value = true, 50);\n }\n });\n watch(focused, (focused2) => {\n if (focused2) {\n setTimeout(() => focusable.value = true, 50);\n } else {\n focusable.value = false;\n }\n });\n useResizeObserver(el$, update);\n onMounted(() => setTimeout(() => scrollToActiveTab(), 0));\n onUpdated(() => update());\n expose({\n scrollToActiveTab,\n removeFocus\n });\n return () => {\n const scrollBtn = scrollable.value ? [createVNode(\"span\", {\n \"class\": [ns.e(\"nav-prev\"), ns.is(\"disabled\", !scrollable.value.prev)],\n \"onClick\": scrollPrev\n }, [createVNode(ElIcon, null, {\n default: () => [createVNode(ArrowLeft, null, null)]\n })]), createVNode(\"span\", {\n \"class\": [ns.e(\"nav-next\"), ns.is(\"disabled\", !scrollable.value.next)],\n \"onClick\": scrollNext\n }, [createVNode(ElIcon, null, {\n default: () => [createVNode(ArrowRight, null, null)]\n })])] : null;\n const tabs = props.panes.map((pane, index) => {\n var _a, _b, _c, _d;\n const uid = pane.uid;\n const disabled = pane.props.disabled;\n const tabName = (_b = (_a = pane.props.name) != null ? _a : pane.index) != null ? _b : `${index}`;\n const closable = !disabled && (pane.isClosable || props.editable);\n pane.index = `${index}`;\n const btnClose = closable ? createVNode(ElIcon, {\n \"class\": \"is-icon-close\",\n \"onClick\": (ev) => emit(\"tabRemove\", pane, ev)\n }, {\n default: () => [createVNode(Close, null, null)]\n }) : null;\n const tabLabelContent = ((_d = (_c = pane.slots).label) == null ? void 0 : _d.call(_c)) || pane.props.label;\n const tabindex = !disabled && pane.active ? 0 : -1;\n return createVNode(\"div\", {\n \"ref\": `tab-${uid}`,\n \"class\": [ns.e(\"item\"), ns.is(rootTabs.props.tabPosition), ns.is(\"active\", pane.active), ns.is(\"disabled\", disabled), ns.is(\"closable\", closable), ns.is(\"focus\", isFocus.value)],\n \"id\": `tab-${tabName}`,\n \"key\": `tab-${uid}`,\n \"aria-controls\": `pane-${tabName}`,\n \"role\": \"tab\",\n \"aria-selected\": pane.active,\n \"tabindex\": tabindex,\n \"onFocus\": () => setFocus(),\n \"onBlur\": () => removeFocus(),\n \"onClick\": (ev) => {\n removeFocus();\n emit(\"tabClick\", pane, tabName, ev);\n },\n \"onKeydown\": (ev) => {\n if (closable && (ev.code === EVENT_CODE.delete || ev.code === EVENT_CODE.backspace)) {\n emit(\"tabRemove\", pane, ev);\n }\n }\n }, [...[tabLabelContent, btnClose]]);\n });\n return createVNode(\"div\", {\n \"ref\": el$,\n \"class\": [ns.e(\"nav-wrap\"), ns.is(\"scrollable\", !!scrollable.value), ns.is(rootTabs.props.tabPosition)]\n }, [scrollBtn, createVNode(\"div\", {\n \"class\": ns.e(\"nav-scroll\"),\n \"ref\": navScroll$\n }, [createVNode(\"div\", {\n \"class\": [ns.e(\"nav\"), ns.is(rootTabs.props.tabPosition), ns.is(\"stretch\", props.stretch && [\"top\", \"bottom\"].includes(rootTabs.props.tabPosition))],\n \"ref\": nav$,\n \"style\": navStyle.value,\n \"role\": \"tablist\",\n \"onKeydown\": changeTab\n }, [...[!props.type ? createVNode(TabBar, {\n \"ref\": tabBarRef,\n \"tabs\": [...props.panes]\n }, null) : null, tabs]])])]);\n };\n }\n});\n\nexport { TabNav as default, tabNavEmits, tabNavProps };\n//# sourceMappingURL=tab-nav.mjs.map\n","import { defineComponent, computed, getCurrentInstance, ref, watch, nextTick, provide, createVNode, renderSlot } from 'vue';\nimport '../../../utils/index.mjs';\nimport '../../../constants/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { Plus } from '@element-plus/icons-vue';\nimport '../../../hooks/index.mjs';\nimport { tabsRootContextKey } from './constants.mjs';\nimport TabNav from './tab-nav.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { isString } from '@vue/shared';\nimport { isNumber, isUndefined } from '../../../utils/types.mjs';\nimport { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useOrderedChildren } from '../../../hooks/use-ordered-children/index.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\n\nconst tabsProps = buildProps({\n type: {\n type: String,\n values: [\"card\", \"border-card\", \"\"],\n default: \"\"\n },\n closable: Boolean,\n addable: Boolean,\n modelValue: {\n type: [String, Number]\n },\n editable: Boolean,\n tabPosition: {\n type: String,\n values: [\"top\", \"right\", \"bottom\", \"left\"],\n default: \"top\"\n },\n beforeLeave: {\n type: definePropType(Function),\n default: () => true\n },\n stretch: Boolean\n});\nconst isPaneName = (value) => isString(value) || isNumber(value);\nconst tabsEmits = {\n [UPDATE_MODEL_EVENT]: (name) => isPaneName(name),\n tabClick: (pane, ev) => ev instanceof Event,\n tabChange: (name) => isPaneName(name),\n edit: (paneName, action) => [\"remove\", \"add\"].includes(action),\n tabRemove: (name) => isPaneName(name),\n tabAdd: () => true\n};\nconst Tabs = defineComponent({\n name: \"ElTabs\",\n props: tabsProps,\n emits: tabsEmits,\n setup(props, {\n emit,\n slots,\n expose\n }) {\n var _a;\n const ns = useNamespace(\"tabs\");\n const isVertical = computed(() => [\"left\", \"right\"].includes(props.tabPosition));\n const {\n children: panes,\n addChild: sortPane,\n removeChild: unregisterPane\n } = useOrderedChildren(getCurrentInstance(), \"ElTabPane\");\n const nav$ = ref();\n const currentName = ref((_a = props.modelValue) != null ? _a : \"0\");\n const setCurrentName = async (value, trigger = false) => {\n var _a2, _b, _c;\n if (currentName.value === value || isUndefined(value))\n return;\n try {\n const canLeave = await ((_a2 = props.beforeLeave) == null ? void 0 : _a2.call(props, value, currentName.value));\n if (canLeave !== false) {\n currentName.value = value;\n if (trigger) {\n emit(UPDATE_MODEL_EVENT, value);\n emit(\"tabChange\", value);\n }\n (_c = (_b = nav$.value) == null ? void 0 : _b.removeFocus) == null ? void 0 : _c.call(_b);\n }\n } catch (e) {\n }\n };\n const handleTabClick = (tab, tabName, event) => {\n if (tab.props.disabled)\n return;\n setCurrentName(tabName, true);\n emit(\"tabClick\", tab, event);\n };\n const handleTabRemove = (pane, ev) => {\n if (pane.props.disabled || isUndefined(pane.props.name))\n return;\n ev.stopPropagation();\n emit(\"edit\", pane.props.name, \"remove\");\n emit(\"tabRemove\", pane.props.name);\n };\n const handleTabAdd = () => {\n emit(\"edit\", void 0, \"add\");\n emit(\"tabAdd\");\n };\n watch(() => props.modelValue, (modelValue) => setCurrentName(modelValue));\n watch(currentName, async () => {\n var _a2;\n await nextTick();\n (_a2 = nav$.value) == null ? void 0 : _a2.scrollToActiveTab();\n });\n provide(tabsRootContextKey, {\n props,\n currentName,\n registerPane: (pane) => {\n panes.value.push(pane);\n },\n sortPane,\n unregisterPane\n });\n expose({\n currentName\n });\n const TabNavRenderer = ({\n render\n }) => {\n return render();\n };\n return () => {\n const addSlot = slots[\"add-icon\"];\n const newButton = props.editable || props.addable ? createVNode(\"div\", {\n \"class\": [ns.e(\"new-tab\"), isVertical.value && ns.e(\"new-tab-vertical\")],\n \"tabindex\": \"0\",\n \"onClick\": handleTabAdd,\n \"onKeydown\": (ev) => {\n if (ev.code === EVENT_CODE.enter)\n handleTabAdd();\n }\n }, [addSlot ? renderSlot(slots, \"add-icon\") : createVNode(ElIcon, {\n \"class\": ns.is(\"icon-plus\")\n }, {\n default: () => [createVNode(Plus, null, null)]\n })]) : null;\n const header = createVNode(\"div\", {\n \"class\": [ns.e(\"header\"), isVertical.value && ns.e(\"header-vertical\"), ns.is(props.tabPosition)]\n }, [createVNode(TabNavRenderer, {\n \"render\": () => {\n const hasLabelSlot = panes.value.some((pane) => pane.slots.label);\n return createVNode(TabNav, {\n ref: nav$,\n currentName: currentName.value,\n editable: props.editable,\n type: props.type,\n panes: panes.value,\n stretch: props.stretch,\n onTabClick: handleTabClick,\n onTabRemove: handleTabRemove\n }, {\n $stable: !hasLabelSlot\n });\n }\n }, null), newButton]);\n const panels = createVNode(\"div\", {\n \"class\": ns.e(\"content\")\n }, [renderSlot(slots, \"default\")]);\n return createVNode(\"div\", {\n \"class\": [ns.b(), ns.m(props.tabPosition), {\n [ns.m(\"card\")]: props.type === \"card\",\n [ns.m(\"border-card\")]: props.type === \"border-card\"\n }]\n }, [panels, header]);\n };\n }\n});\n\nexport { Tabs as default, tabsEmits, tabsProps };\n//# sourceMappingURL=tabs.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\n\nconst tabPaneProps = buildProps({\n label: {\n type: String,\n default: \"\"\n },\n name: {\n type: [String, Number]\n },\n closable: Boolean,\n disabled: Boolean,\n lazy: Boolean\n});\n\nexport { tabPaneProps };\n//# sourceMappingURL=tab-pane.mjs.map\n","import { defineComponent, getCurrentInstance, useSlots, inject, ref, computed, watch, reactive, onMounted, onUnmounted, unref, withDirectives, openBlock, createElementBlock, normalizeClass, renderSlot, vShow, createCommentVNode } from 'vue';\nimport { eagerComputed } from '@vueuse/core';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { tabsRootContextKey } from './constants.mjs';\nimport { tabPaneProps } from './tab-pane.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { throwError } from '../../../utils/error.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\n\nconst COMPONENT_NAME = \"ElTabPane\";\nconst __default__ = defineComponent({\n name: COMPONENT_NAME\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: tabPaneProps,\n setup(__props) {\n const props = __props;\n const instance = getCurrentInstance();\n const slots = useSlots();\n const tabsRoot = inject(tabsRootContextKey);\n if (!tabsRoot)\n throwError(COMPONENT_NAME, \"usage: \");\n const ns = useNamespace(\"tab-pane\");\n const index = ref();\n const isClosable = computed(() => props.closable || tabsRoot.props.closable);\n const active = eagerComputed(() => {\n var _a;\n return tabsRoot.currentName.value === ((_a = props.name) != null ? _a : index.value);\n });\n const loaded = ref(active.value);\n const paneName = computed(() => {\n var _a;\n return (_a = props.name) != null ? _a : index.value;\n });\n const shouldBeRender = eagerComputed(() => !props.lazy || loaded.value || active.value);\n watch(active, (val) => {\n if (val)\n loaded.value = true;\n });\n const pane = reactive({\n uid: instance.uid,\n slots,\n props,\n paneName,\n active,\n index,\n isClosable\n });\n tabsRoot.registerPane(pane);\n onMounted(() => {\n tabsRoot.sortPane(pane);\n });\n onUnmounted(() => {\n tabsRoot.unregisterPane(pane.uid);\n });\n return (_ctx, _cache) => {\n return unref(shouldBeRender) ? withDirectives((openBlock(), createElementBlock(\"div\", {\n key: 0,\n id: `pane-${unref(paneName)}`,\n class: normalizeClass(unref(ns).b()),\n role: \"tabpanel\",\n \"aria-hidden\": !unref(active),\n \"aria-labelledby\": `tab-${unref(paneName)}`\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 10, [\"id\", \"aria-hidden\", \"aria-labelledby\"])), [\n [vShow, unref(active)]\n ]) : createCommentVNode(\"v-if\", true);\n };\n }\n});\nvar TabPane = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"tab-pane.vue\"]]);\n\nexport { TabPane as default };\n//# sourceMappingURL=tab-pane2.mjs.map\n","import '../../utils/index.mjs';\nimport Tabs from './src/tabs.mjs';\nexport { tabsEmits, tabsProps } from './src/tabs.mjs';\nimport TabPane from './src/tab-pane2.mjs';\nexport { tabBarProps } from './src/tab-bar.mjs';\nexport { tabNavEmits, tabNavProps } from './src/tab-nav.mjs';\nexport { tabPaneProps } from './src/tab-pane.mjs';\nexport { tabsRootContextKey } from './src/constants.mjs';\nimport { withInstall, withNoopInstall } from '../../utils/vue/install.mjs';\n\nconst ElTabs = withInstall(Tabs, {\n TabPane\n});\nconst ElTabPane = withNoopInstall(TabPane);\n\nexport { ElTabPane, ElTabs, ElTabs as default };\n//# sourceMappingURL=index.mjs.map\n","const uploadContextKey = Symbol(\"uploadContextKey\");\n\nexport { uploadContextKey };\n//# sourceMappingURL=constants.mjs.map\n","import { isNil } from 'lodash-unified';\nimport '../../../utils/index.mjs';\nimport { throwError } from '../../../utils/error.mjs';\nimport { isArray } from '@vue/shared';\n\nconst SCOPE = \"ElUpload\";\nclass UploadAjaxError extends Error {\n constructor(message, status, method, url) {\n super(message);\n this.name = \"UploadAjaxError\";\n this.status = status;\n this.method = method;\n this.url = url;\n }\n}\nfunction getError(action, option, xhr) {\n let msg;\n if (xhr.response) {\n msg = `${xhr.response.error || xhr.response}`;\n } else if (xhr.responseText) {\n msg = `${xhr.responseText}`;\n } else {\n msg = `fail to ${option.method} ${action} ${xhr.status}`;\n }\n return new UploadAjaxError(msg, xhr.status, option.method, action);\n}\nfunction getBody(xhr) {\n const text = xhr.responseText || xhr.response;\n if (!text) {\n return text;\n }\n try {\n return JSON.parse(text);\n } catch (e) {\n return text;\n }\n}\nconst ajaxUpload = (option) => {\n if (typeof XMLHttpRequest === \"undefined\")\n throwError(SCOPE, \"XMLHttpRequest is undefined\");\n const xhr = new XMLHttpRequest();\n const action = option.action;\n if (xhr.upload) {\n xhr.upload.addEventListener(\"progress\", (evt) => {\n const progressEvt = evt;\n progressEvt.percent = evt.total > 0 ? evt.loaded / evt.total * 100 : 0;\n option.onProgress(progressEvt);\n });\n }\n const formData = new FormData();\n if (option.data) {\n for (const [key, value] of Object.entries(option.data)) {\n if (isArray(value) && value.length)\n formData.append(key, ...value);\n else\n formData.append(key, value);\n }\n }\n formData.append(option.filename, option.file, option.file.name);\n xhr.addEventListener(\"error\", () => {\n option.onError(getError(action, option, xhr));\n });\n xhr.addEventListener(\"load\", () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n return option.onError(getError(action, option, xhr));\n }\n option.onSuccess(getBody(xhr));\n });\n xhr.open(option.method, action, true);\n if (option.withCredentials && \"withCredentials\" in xhr) {\n xhr.withCredentials = true;\n }\n const headers = option.headers || {};\n if (headers instanceof Headers) {\n headers.forEach((value, key) => xhr.setRequestHeader(key, value));\n } else {\n for (const [key, value] of Object.entries(headers)) {\n if (isNil(value))\n continue;\n xhr.setRequestHeader(key, String(value));\n }\n }\n xhr.send(formData);\n return xhr;\n};\n\nexport { UploadAjaxError, ajaxUpload };\n//# sourceMappingURL=ajax.mjs.map\n","import '../../../utils/index.mjs';\nimport { ajaxUpload } from './ajax.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { NOOP } from '@vue/shared';\n\nconst uploadListTypes = [\"text\", \"picture\", \"picture-card\"];\nlet fileId = 1;\nconst genFileId = () => Date.now() + fileId++;\nconst uploadBaseProps = buildProps({\n action: {\n type: String,\n default: \"#\"\n },\n headers: {\n type: definePropType(Object)\n },\n method: {\n type: String,\n default: \"post\"\n },\n data: {\n type: definePropType([Object, Function, Promise]),\n default: () => mutable({})\n },\n multiple: Boolean,\n name: {\n type: String,\n default: \"file\"\n },\n drag: Boolean,\n withCredentials: Boolean,\n showFileList: {\n type: Boolean,\n default: true\n },\n accept: {\n type: String,\n default: \"\"\n },\n fileList: {\n type: definePropType(Array),\n default: () => mutable([])\n },\n autoUpload: {\n type: Boolean,\n default: true\n },\n listType: {\n type: String,\n values: uploadListTypes,\n default: \"text\"\n },\n httpRequest: {\n type: definePropType(Function),\n default: ajaxUpload\n },\n disabled: Boolean,\n limit: Number\n});\nconst uploadProps = buildProps({\n ...uploadBaseProps,\n beforeUpload: {\n type: definePropType(Function),\n default: NOOP\n },\n beforeRemove: {\n type: definePropType(Function)\n },\n onRemove: {\n type: definePropType(Function),\n default: NOOP\n },\n onChange: {\n type: definePropType(Function),\n default: NOOP\n },\n onPreview: {\n type: definePropType(Function),\n default: NOOP\n },\n onSuccess: {\n type: definePropType(Function),\n default: NOOP\n },\n onProgress: {\n type: definePropType(Function),\n default: NOOP\n },\n onError: {\n type: definePropType(Function),\n default: NOOP\n },\n onExceed: {\n type: definePropType(Function),\n default: NOOP\n },\n crossorigin: {\n type: definePropType(String)\n }\n});\n\nexport { genFileId, uploadBaseProps, uploadListTypes, uploadProps };\n//# sourceMappingURL=upload.mjs.map\n","import '../../../utils/index.mjs';\nimport { uploadListTypes } from './upload.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { NOOP } from '@vue/shared';\n\nconst uploadListProps = buildProps({\n files: {\n type: definePropType(Array),\n default: () => mutable([])\n },\n disabled: {\n type: Boolean,\n default: false\n },\n handlePreview: {\n type: definePropType(Function),\n default: NOOP\n },\n listType: {\n type: String,\n values: uploadListTypes,\n default: \"text\"\n },\n crossorigin: {\n type: definePropType(String)\n }\n});\nconst uploadListEmits = {\n remove: (file) => !!file\n};\n\nexport { uploadListEmits, uploadListProps };\n//# sourceMappingURL=upload-list.mjs.map\n","import { defineComponent, ref, computed, openBlock, createBlock, TransitionGroup, normalizeClass, unref, withCtx, createElementBlock, Fragment, renderList, withKeys, renderSlot, createCommentVNode, createElementVNode, withModifiers, createVNode, toDisplayString, normalizeStyle } from 'vue';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { Document, CircleCheck, Check, Close, ZoomIn, Delete } from '@element-plus/icons-vue';\nimport '../../../hooks/index.mjs';\nimport { ElProgress } from '../../progress/index.mjs';\nimport '../../form/index.mjs';\nimport { uploadListProps, uploadListEmits } from './upload-list.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useLocale } from '../../../hooks/use-locale/index.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElUploadList\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: uploadListProps,\n emits: uploadListEmits,\n setup(__props, { emit }) {\n const props = __props;\n const { t } = useLocale();\n const nsUpload = useNamespace(\"upload\");\n const nsIcon = useNamespace(\"icon\");\n const nsList = useNamespace(\"list\");\n const disabled = useFormDisabled();\n const focusing = ref(false);\n const containerKls = computed(() => [\n nsUpload.b(\"list\"),\n nsUpload.bm(\"list\", props.listType),\n nsUpload.is(\"disabled\", props.disabled)\n ]);\n const handleRemove = (file) => {\n emit(\"remove\", file);\n };\n return (_ctx, _cache) => {\n return openBlock(), createBlock(TransitionGroup, {\n tag: \"ul\",\n class: normalizeClass(unref(containerKls)),\n name: unref(nsList).b()\n }, {\n default: withCtx(() => [\n (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.files, (file, index) => {\n return openBlock(), createElementBlock(\"li\", {\n key: file.uid || file.name,\n class: normalizeClass([\n unref(nsUpload).be(\"list\", \"item\"),\n unref(nsUpload).is(file.status),\n { focusing: focusing.value }\n ]),\n tabindex: \"0\",\n onKeydown: withKeys(($event) => !unref(disabled) && handleRemove(file), [\"delete\"]),\n onFocus: ($event) => focusing.value = true,\n onBlur: ($event) => focusing.value = false,\n onClick: ($event) => focusing.value = false\n }, [\n renderSlot(_ctx.$slots, \"default\", {\n file,\n index\n }, () => [\n _ctx.listType === \"picture\" || file.status !== \"uploading\" && _ctx.listType === \"picture-card\" ? (openBlock(), createElementBlock(\"img\", {\n key: 0,\n class: normalizeClass(unref(nsUpload).be(\"list\", \"item-thumbnail\")),\n src: file.url,\n crossorigin: _ctx.crossorigin,\n alt: \"\"\n }, null, 10, [\"src\", \"crossorigin\"])) : createCommentVNode(\"v-if\", true),\n file.status === \"uploading\" || _ctx.listType !== \"picture-card\" ? (openBlock(), createElementBlock(\"div\", {\n key: 1,\n class: normalizeClass(unref(nsUpload).be(\"list\", \"item-info\"))\n }, [\n createElementVNode(\"a\", {\n class: normalizeClass(unref(nsUpload).be(\"list\", \"item-name\")),\n onClick: withModifiers(($event) => _ctx.handlePreview(file), [\"prevent\"])\n }, [\n createVNode(unref(ElIcon), {\n class: normalizeClass(unref(nsIcon).m(\"document\"))\n }, {\n default: withCtx(() => [\n createVNode(unref(Document))\n ]),\n _: 1\n }, 8, [\"class\"]),\n createElementVNode(\"span\", {\n class: normalizeClass(unref(nsUpload).be(\"list\", \"item-file-name\")),\n title: file.name\n }, toDisplayString(file.name), 11, [\"title\"])\n ], 10, [\"onClick\"]),\n file.status === \"uploading\" ? (openBlock(), createBlock(unref(ElProgress), {\n key: 0,\n type: _ctx.listType === \"picture-card\" ? \"circle\" : \"line\",\n \"stroke-width\": _ctx.listType === \"picture-card\" ? 6 : 2,\n percentage: Number(file.percentage),\n style: normalizeStyle(_ctx.listType === \"picture-card\" ? \"\" : \"margin-top: 0.5rem\")\n }, null, 8, [\"type\", \"stroke-width\", \"percentage\", \"style\"])) : createCommentVNode(\"v-if\", true)\n ], 2)) : createCommentVNode(\"v-if\", true),\n createElementVNode(\"label\", {\n class: normalizeClass(unref(nsUpload).be(\"list\", \"item-status-label\"))\n }, [\n _ctx.listType === \"text\" ? (openBlock(), createBlock(unref(ElIcon), {\n key: 0,\n class: normalizeClass([unref(nsIcon).m(\"upload-success\"), unref(nsIcon).m(\"circle-check\")])\n }, {\n default: withCtx(() => [\n createVNode(unref(CircleCheck))\n ]),\n _: 1\n }, 8, [\"class\"])) : [\"picture-card\", \"picture\"].includes(_ctx.listType) ? (openBlock(), createBlock(unref(ElIcon), {\n key: 1,\n class: normalizeClass([unref(nsIcon).m(\"upload-success\"), unref(nsIcon).m(\"check\")])\n }, {\n default: withCtx(() => [\n createVNode(unref(Check))\n ]),\n _: 1\n }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true)\n ], 2),\n !unref(disabled) ? (openBlock(), createBlock(unref(ElIcon), {\n key: 2,\n class: normalizeClass(unref(nsIcon).m(\"close\")),\n onClick: ($event) => handleRemove(file)\n }, {\n default: withCtx(() => [\n createVNode(unref(Close))\n ]),\n _: 2\n }, 1032, [\"class\", \"onClick\"])) : createCommentVNode(\"v-if\", true),\n createCommentVNode(\" Due to close btn only appears when li gets focused disappears after li gets blurred, thus keyboard navigation can never reach close btn\"),\n createCommentVNode(\" This is a bug which needs to be fixed \"),\n createCommentVNode(\" TODO: Fix the incorrect navigation interaction \"),\n !unref(disabled) ? (openBlock(), createElementBlock(\"i\", {\n key: 3,\n class: normalizeClass(unref(nsIcon).m(\"close-tip\"))\n }, toDisplayString(unref(t)(\"el.upload.deleteTip\")), 3)) : createCommentVNode(\"v-if\", true),\n _ctx.listType === \"picture-card\" ? (openBlock(), createElementBlock(\"span\", {\n key: 4,\n class: normalizeClass(unref(nsUpload).be(\"list\", \"item-actions\"))\n }, [\n createElementVNode(\"span\", {\n class: normalizeClass(unref(nsUpload).be(\"list\", \"item-preview\")),\n onClick: ($event) => _ctx.handlePreview(file)\n }, [\n createVNode(unref(ElIcon), {\n class: normalizeClass(unref(nsIcon).m(\"zoom-in\"))\n }, {\n default: withCtx(() => [\n createVNode(unref(ZoomIn))\n ]),\n _: 1\n }, 8, [\"class\"])\n ], 10, [\"onClick\"]),\n !unref(disabled) ? (openBlock(), createElementBlock(\"span\", {\n key: 0,\n class: normalizeClass(unref(nsUpload).be(\"list\", \"item-delete\")),\n onClick: ($event) => handleRemove(file)\n }, [\n createVNode(unref(ElIcon), {\n class: normalizeClass(unref(nsIcon).m(\"delete\"))\n }, {\n default: withCtx(() => [\n createVNode(unref(Delete))\n ]),\n _: 1\n }, 8, [\"class\"])\n ], 10, [\"onClick\"])) : createCommentVNode(\"v-if\", true)\n ], 2)) : createCommentVNode(\"v-if\", true)\n ])\n ], 42, [\"onKeydown\", \"onFocus\", \"onBlur\", \"onClick\"]);\n }), 128)),\n renderSlot(_ctx.$slots, \"append\")\n ]),\n _: 3\n }, 8, [\"class\", \"name\"]);\n };\n }\n});\nvar UploadList = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"upload-list.vue\"]]);\n\nexport { UploadList as default };\n//# sourceMappingURL=upload-list2.mjs.map\n","import '../../../utils/index.mjs';\nimport { buildProps } from '../../../utils/vue/props/runtime.mjs';\nimport { isArray } from '@vue/shared';\n\nconst uploadDraggerProps = buildProps({\n disabled: {\n type: Boolean,\n default: false\n }\n});\nconst uploadDraggerEmits = {\n file: (file) => isArray(file)\n};\n\nexport { uploadDraggerEmits, uploadDraggerProps };\n//# sourceMappingURL=upload-dragger.mjs.map\n","import { defineComponent, inject, ref, openBlock, createElementBlock, normalizeClass, unref, withModifiers, renderSlot } from 'vue';\nimport '../../../hooks/index.mjs';\nimport '../../form/index.mjs';\nimport { throwError } from '../../../utils/error.mjs';\nimport { uploadContextKey } from './constants.mjs';\nimport { uploadDraggerProps, uploadDraggerEmits } from './upload-dragger.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';\n\nconst COMPONENT_NAME = \"ElUploadDrag\";\nconst __default__ = defineComponent({\n name: COMPONENT_NAME\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: uploadDraggerProps,\n emits: uploadDraggerEmits,\n setup(__props, { emit }) {\n const uploaderContext = inject(uploadContextKey);\n if (!uploaderContext) {\n throwError(COMPONENT_NAME, \"usage: \");\n }\n const ns = useNamespace(\"upload\");\n const dragover = ref(false);\n const disabled = useFormDisabled();\n const onDrop = (e) => {\n if (disabled.value)\n return;\n dragover.value = false;\n e.stopPropagation();\n const files = Array.from(e.dataTransfer.files);\n emit(\"file\", files);\n };\n const onDragover = () => {\n if (!disabled.value)\n dragover.value = true;\n };\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([unref(ns).b(\"dragger\"), unref(ns).is(\"dragover\", dragover.value)]),\n onDrop: withModifiers(onDrop, [\"prevent\"]),\n onDragover: withModifiers(onDragover, [\"prevent\"]),\n onDragleave: withModifiers(($event) => dragover.value = false, [\"prevent\"])\n }, [\n renderSlot(_ctx.$slots, \"default\")\n ], 42, [\"onDrop\", \"onDragover\", \"onDragleave\"]);\n };\n }\n});\nvar UploadDragger = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"upload-dragger.vue\"]]);\n\nexport { UploadDragger as default };\n//# sourceMappingURL=upload-dragger2.mjs.map\n","import '../../../utils/index.mjs';\nimport { uploadBaseProps } from './upload.mjs';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { NOOP } from '@vue/shared';\n\nconst uploadContentProps = buildProps({\n ...uploadBaseProps,\n beforeUpload: {\n type: definePropType(Function),\n default: NOOP\n },\n onRemove: {\n type: definePropType(Function),\n default: NOOP\n },\n onStart: {\n type: definePropType(Function),\n default: NOOP\n },\n onSuccess: {\n type: definePropType(Function),\n default: NOOP\n },\n onProgress: {\n type: definePropType(Function),\n default: NOOP\n },\n onError: {\n type: definePropType(Function),\n default: NOOP\n },\n onExceed: {\n type: definePropType(Function),\n default: NOOP\n }\n});\n\nexport { uploadContentProps };\n//# sourceMappingURL=upload-content.mjs.map\n","import { defineComponent, shallowRef, openBlock, createElementBlock, normalizeClass, unref, withKeys, withModifiers, createBlock, withCtx, renderSlot, createElementVNode } from 'vue';\nimport { cloneDeep, isEqual } from 'lodash-unified';\nimport '../../../utils/index.mjs';\nimport '../../../hooks/index.mjs';\nimport '../../form/index.mjs';\nimport UploadDragger from './upload-dragger2.mjs';\nimport { uploadContentProps } from './upload-content.mjs';\nimport { genFileId } from './upload.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';\nimport { isPlainObject, isFunction } from '@vue/shared';\nimport { entriesOf } from '../../../utils/objects.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElUploadContent\",\n inheritAttrs: false\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: uploadContentProps,\n setup(__props, { expose }) {\n const props = __props;\n const ns = useNamespace(\"upload\");\n const disabled = useFormDisabled();\n const requests = shallowRef({});\n const inputRef = shallowRef();\n const uploadFiles = (files) => {\n if (files.length === 0)\n return;\n const { autoUpload, limit, fileList, multiple, onStart, onExceed } = props;\n if (limit && fileList.length + files.length > limit) {\n onExceed(files, fileList);\n return;\n }\n if (!multiple) {\n files = files.slice(0, 1);\n }\n for (const file of files) {\n const rawFile = file;\n rawFile.uid = genFileId();\n onStart(rawFile);\n if (autoUpload)\n upload(rawFile);\n }\n };\n const upload = async (rawFile) => {\n inputRef.value.value = \"\";\n if (!props.beforeUpload) {\n return doUpload(rawFile);\n }\n let hookResult;\n let beforeData = {};\n try {\n const originData = props.data;\n const beforeUploadPromise = props.beforeUpload(rawFile);\n beforeData = isPlainObject(props.data) ? cloneDeep(props.data) : props.data;\n hookResult = await beforeUploadPromise;\n if (isPlainObject(props.data) && isEqual(originData, beforeData)) {\n beforeData = cloneDeep(props.data);\n }\n } catch (e) {\n hookResult = false;\n }\n if (hookResult === false) {\n props.onRemove(rawFile);\n return;\n }\n let file = rawFile;\n if (hookResult instanceof Blob) {\n if (hookResult instanceof File) {\n file = hookResult;\n } else {\n file = new File([hookResult], rawFile.name, {\n type: rawFile.type\n });\n }\n }\n doUpload(Object.assign(file, {\n uid: rawFile.uid\n }), beforeData);\n };\n const resolveData = async (data, rawFile) => {\n if (isFunction(data)) {\n return data(rawFile);\n }\n return data;\n };\n const doUpload = async (rawFile, beforeData) => {\n const {\n headers,\n data,\n method,\n withCredentials,\n name: filename,\n action,\n onProgress,\n onSuccess,\n onError,\n httpRequest\n } = props;\n try {\n beforeData = await resolveData(beforeData != null ? beforeData : data, rawFile);\n } catch (e) {\n props.onRemove(rawFile);\n return;\n }\n const { uid } = rawFile;\n const options = {\n headers: headers || {},\n withCredentials,\n file: rawFile,\n data: beforeData,\n method,\n filename,\n action,\n onProgress: (evt) => {\n onProgress(evt, rawFile);\n },\n onSuccess: (res) => {\n onSuccess(res, rawFile);\n delete requests.value[uid];\n },\n onError: (err) => {\n onError(err, rawFile);\n delete requests.value[uid];\n }\n };\n const request = httpRequest(options);\n requests.value[uid] = request;\n if (request instanceof Promise) {\n request.then(options.onSuccess, options.onError);\n }\n };\n const handleChange = (e) => {\n const files = e.target.files;\n if (!files)\n return;\n uploadFiles(Array.from(files));\n };\n const handleClick = () => {\n if (!disabled.value) {\n inputRef.value.value = \"\";\n inputRef.value.click();\n }\n };\n const handleKeydown = () => {\n handleClick();\n };\n const abort = (file) => {\n const _reqs = entriesOf(requests.value).filter(file ? ([uid]) => String(file.uid) === uid : () => true);\n _reqs.forEach(([uid, req]) => {\n if (req instanceof XMLHttpRequest)\n req.abort();\n delete requests.value[uid];\n });\n };\n expose({\n abort,\n upload\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\n unref(ns).b(),\n unref(ns).m(_ctx.listType),\n unref(ns).is(\"drag\", _ctx.drag),\n unref(ns).is(\"disabled\", unref(disabled))\n ]),\n tabindex: unref(disabled) ? \"-1\" : \"0\",\n onClick: handleClick,\n onKeydown: withKeys(withModifiers(handleKeydown, [\"self\"]), [\"enter\", \"space\"])\n }, [\n _ctx.drag ? (openBlock(), createBlock(UploadDragger, {\n key: 0,\n disabled: unref(disabled),\n onFile: uploadFiles\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"disabled\"])) : renderSlot(_ctx.$slots, \"default\", { key: 1 }),\n createElementVNode(\"input\", {\n ref_key: \"inputRef\",\n ref: inputRef,\n class: normalizeClass(unref(ns).e(\"input\")),\n name: _ctx.name,\n disabled: unref(disabled),\n multiple: _ctx.multiple,\n accept: _ctx.accept,\n type: \"file\",\n onChange: handleChange,\n onClick: withModifiers(() => {\n }, [\"stop\"])\n }, null, 42, [\"name\", \"disabled\", \"multiple\", \"accept\", \"onClick\"])\n ], 42, [\"tabindex\", \"onKeydown\"]);\n };\n }\n});\nvar UploadContent = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"upload-content.vue\"]]);\n\nexport { UploadContent as default };\n//# sourceMappingURL=upload-content2.mjs.map\n","import { watch } from 'vue';\nimport { isNil } from 'lodash-unified';\nimport { useVModel } from '@vueuse/core';\nimport '../../../utils/index.mjs';\nimport { genFileId } from './upload.mjs';\nimport { debugWarn, throwError } from '../../../utils/error.mjs';\n\nconst SCOPE = \"ElUpload\";\nconst revokeFileObjectURL = (file) => {\n var _a;\n if ((_a = file.url) == null ? void 0 : _a.startsWith(\"blob:\")) {\n URL.revokeObjectURL(file.url);\n }\n};\nconst useHandlers = (props, uploadRef) => {\n const uploadFiles = useVModel(props, \"fileList\", void 0, { passive: true });\n const getFile = (rawFile) => uploadFiles.value.find((file) => file.uid === rawFile.uid);\n function abort(file) {\n var _a;\n (_a = uploadRef.value) == null ? void 0 : _a.abort(file);\n }\n function clearFiles(states = [\"ready\", \"uploading\", \"success\", \"fail\"]) {\n uploadFiles.value = uploadFiles.value.filter((row) => !states.includes(row.status));\n }\n function removeFile(file) {\n uploadFiles.value = uploadFiles.value.filter((uploadFile) => uploadFile !== file);\n }\n const handleError = (err, rawFile) => {\n const file = getFile(rawFile);\n if (!file)\n return;\n console.error(err);\n file.status = \"fail\";\n removeFile(file);\n props.onError(err, file, uploadFiles.value);\n props.onChange(file, uploadFiles.value);\n };\n const handleProgress = (evt, rawFile) => {\n const file = getFile(rawFile);\n if (!file)\n return;\n props.onProgress(evt, file, uploadFiles.value);\n file.status = \"uploading\";\n file.percentage = Math.round(evt.percent);\n };\n const handleSuccess = (response, rawFile) => {\n const file = getFile(rawFile);\n if (!file)\n return;\n file.status = \"success\";\n file.response = response;\n props.onSuccess(response, file, uploadFiles.value);\n props.onChange(file, uploadFiles.value);\n };\n const handleStart = (file) => {\n if (isNil(file.uid))\n file.uid = genFileId();\n const uploadFile = {\n name: file.name,\n percentage: 0,\n status: \"ready\",\n size: file.size,\n raw: file,\n uid: file.uid\n };\n if (props.listType === \"picture-card\" || props.listType === \"picture\") {\n try {\n uploadFile.url = URL.createObjectURL(file);\n } catch (err) {\n debugWarn(SCOPE, err.message);\n props.onError(err, uploadFile, uploadFiles.value);\n }\n }\n uploadFiles.value = [...uploadFiles.value, uploadFile];\n props.onChange(uploadFile, uploadFiles.value);\n };\n const handleRemove = async (file) => {\n const uploadFile = file instanceof File ? getFile(file) : file;\n if (!uploadFile)\n throwError(SCOPE, \"file to be removed not found\");\n const doRemove = (file2) => {\n abort(file2);\n removeFile(file2);\n props.onRemove(file2, uploadFiles.value);\n revokeFileObjectURL(file2);\n };\n if (props.beforeRemove) {\n const before = await props.beforeRemove(uploadFile, uploadFiles.value);\n if (before !== false)\n doRemove(uploadFile);\n } else {\n doRemove(uploadFile);\n }\n };\n function submit() {\n uploadFiles.value.filter(({ status }) => status === \"ready\").forEach(({ raw }) => {\n var _a;\n return raw && ((_a = uploadRef.value) == null ? void 0 : _a.upload(raw));\n });\n }\n watch(() => props.listType, (val) => {\n if (val !== \"picture-card\" && val !== \"picture\") {\n return;\n }\n uploadFiles.value = uploadFiles.value.map((file) => {\n const { raw, url } = file;\n if (!url && raw) {\n try {\n file.url = URL.createObjectURL(raw);\n } catch (err) {\n props.onError(err, file, uploadFiles.value);\n }\n }\n return file;\n });\n });\n watch(uploadFiles, (files) => {\n for (const file of files) {\n file.uid || (file.uid = genFileId());\n file.status || (file.status = \"success\");\n }\n }, { immediate: true, deep: true });\n return {\n uploadFiles,\n abort,\n clearFiles,\n handleError,\n handleProgress,\n handleStart,\n handleSuccess,\n handleRemove,\n submit,\n revokeFileObjectURL\n };\n};\n\nexport { useHandlers };\n//# sourceMappingURL=use-handlers.mjs.map\n","import { defineComponent, shallowRef, computed, onBeforeUnmount, provide, toRef, openBlock, createElementBlock, unref, createBlock, createSlots, withCtx, createVNode, mergeProps, renderSlot, createCommentVNode } from 'vue';\nimport '../../form/index.mjs';\nimport { uploadContextKey } from './constants.mjs';\nimport UploadList from './upload-list2.mjs';\nimport UploadContent from './upload-content2.mjs';\nimport { useHandlers } from './use-handlers.mjs';\nimport { uploadProps } from './upload.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElUpload\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: uploadProps,\n setup(__props, { expose }) {\n const props = __props;\n const disabled = useFormDisabled();\n const uploadRef = shallowRef();\n const {\n abort,\n submit,\n clearFiles,\n uploadFiles,\n handleStart,\n handleError,\n handleRemove,\n handleSuccess,\n handleProgress,\n revokeFileObjectURL\n } = useHandlers(props, uploadRef);\n const isPictureCard = computed(() => props.listType === \"picture-card\");\n const uploadContentProps = computed(() => ({\n ...props,\n fileList: uploadFiles.value,\n onStart: handleStart,\n onProgress: handleProgress,\n onSuccess: handleSuccess,\n onError: handleError,\n onRemove: handleRemove\n }));\n onBeforeUnmount(() => {\n uploadFiles.value.forEach(revokeFileObjectURL);\n });\n provide(uploadContextKey, {\n accept: toRef(props, \"accept\")\n });\n expose({\n abort,\n submit,\n clearFiles,\n handleStart,\n handleRemove\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", null, [\n unref(isPictureCard) && _ctx.showFileList ? (openBlock(), createBlock(UploadList, {\n key: 0,\n disabled: unref(disabled),\n \"list-type\": _ctx.listType,\n files: unref(uploadFiles),\n crossorigin: _ctx.crossorigin,\n \"handle-preview\": _ctx.onPreview,\n onRemove: unref(handleRemove)\n }, createSlots({\n append: withCtx(() => [\n createVNode(UploadContent, mergeProps({\n ref_key: \"uploadRef\",\n ref: uploadRef\n }, unref(uploadContentProps)), {\n default: withCtx(() => [\n _ctx.$slots.trigger ? renderSlot(_ctx.$slots, \"trigger\", { key: 0 }) : createCommentVNode(\"v-if\", true),\n !_ctx.$slots.trigger && _ctx.$slots.default ? renderSlot(_ctx.$slots, \"default\", { key: 1 }) : createCommentVNode(\"v-if\", true)\n ]),\n _: 3\n }, 16)\n ]),\n _: 2\n }, [\n _ctx.$slots.file ? {\n name: \"default\",\n fn: withCtx(({ file, index }) => [\n renderSlot(_ctx.$slots, \"file\", {\n file,\n index\n })\n ])\n } : void 0\n ]), 1032, [\"disabled\", \"list-type\", \"files\", \"crossorigin\", \"handle-preview\", \"onRemove\"])) : createCommentVNode(\"v-if\", true),\n !unref(isPictureCard) || unref(isPictureCard) && !_ctx.showFileList ? (openBlock(), createBlock(UploadContent, mergeProps({\n key: 1,\n ref_key: \"uploadRef\",\n ref: uploadRef\n }, unref(uploadContentProps)), {\n default: withCtx(() => [\n _ctx.$slots.trigger ? renderSlot(_ctx.$slots, \"trigger\", { key: 0 }) : createCommentVNode(\"v-if\", true),\n !_ctx.$slots.trigger && _ctx.$slots.default ? renderSlot(_ctx.$slots, \"default\", { key: 1 }) : createCommentVNode(\"v-if\", true)\n ]),\n _: 3\n }, 16)) : createCommentVNode(\"v-if\", true),\n _ctx.$slots.trigger ? renderSlot(_ctx.$slots, \"default\", { key: 2 }) : createCommentVNode(\"v-if\", true),\n renderSlot(_ctx.$slots, \"tip\"),\n !unref(isPictureCard) && _ctx.showFileList ? (openBlock(), createBlock(UploadList, {\n key: 3,\n disabled: unref(disabled),\n \"list-type\": _ctx.listType,\n files: unref(uploadFiles),\n crossorigin: _ctx.crossorigin,\n \"handle-preview\": _ctx.onPreview,\n onRemove: unref(handleRemove)\n }, createSlots({ _: 2 }, [\n _ctx.$slots.file ? {\n name: \"default\",\n fn: withCtx(({ file, index }) => [\n renderSlot(_ctx.$slots, \"file\", {\n file,\n index\n })\n ])\n } : void 0\n ]), 1032, [\"disabled\", \"list-type\", \"files\", \"crossorigin\", \"handle-preview\", \"onRemove\"])) : createCommentVNode(\"v-if\", true)\n ]);\n };\n }\n});\nvar Upload = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"upload.vue\"]]);\n\nexport { Upload as default };\n//# sourceMappingURL=upload2.mjs.map\n","import '../../utils/index.mjs';\nimport Upload from './src/upload2.mjs';\nexport { genFileId, uploadBaseProps, uploadListTypes, uploadProps } from './src/upload.mjs';\nexport { uploadContentProps } from './src/upload-content.mjs';\nexport { uploadListEmits, uploadListProps } from './src/upload-list.mjs';\nexport { uploadDraggerEmits, uploadDraggerProps } from './src/upload-dragger.mjs';\nexport { uploadContextKey } from './src/constants.mjs';\nimport { withInstall } from '../../utils/vue/install.mjs';\n\nconst ElUpload = withInstall(Upload);\n\nexport { ElUpload, ElUpload as default };\n//# sourceMappingURL=index.mjs.map\n","import { ref, reactive, defineComponent, h, Transition, withCtx, withDirectives, createVNode, vShow, createApp, toRefs } from 'vue';\nimport '../../../utils/index.mjs';\nimport '../../config-provider/index.mjs';\nimport { removeClass } from '../../../utils/dom/style.mjs';\nimport { useGlobalComponentSettings } from '../../config-provider/src/hooks/use-global-config.mjs';\n\nfunction createLoadingComponent(options) {\n let afterLeaveTimer;\n const afterLeaveFlag = ref(false);\n const data = reactive({\n ...options,\n originalPosition: \"\",\n originalOverflow: \"\",\n visible: false\n });\n function setText(text) {\n data.text = text;\n }\n function destroySelf() {\n const target = data.parent;\n const ns = vm.ns;\n if (!target.vLoadingAddClassList) {\n let loadingNumber = target.getAttribute(\"loading-number\");\n loadingNumber = Number.parseInt(loadingNumber) - 1;\n if (!loadingNumber) {\n removeClass(target, ns.bm(\"parent\", \"relative\"));\n target.removeAttribute(\"loading-number\");\n } else {\n target.setAttribute(\"loading-number\", loadingNumber.toString());\n }\n removeClass(target, ns.bm(\"parent\", \"hidden\"));\n }\n removeElLoadingChild();\n loadingInstance.unmount();\n }\n function removeElLoadingChild() {\n var _a, _b;\n (_b = (_a = vm.$el) == null ? void 0 : _a.parentNode) == null ? void 0 : _b.removeChild(vm.$el);\n }\n function close() {\n var _a;\n if (options.beforeClose && !options.beforeClose())\n return;\n afterLeaveFlag.value = true;\n clearTimeout(afterLeaveTimer);\n afterLeaveTimer = setTimeout(handleAfterLeave, 400);\n data.visible = false;\n (_a = options.closed) == null ? void 0 : _a.call(options);\n }\n function handleAfterLeave() {\n if (!afterLeaveFlag.value)\n return;\n const target = data.parent;\n afterLeaveFlag.value = false;\n target.vLoadingAddClassList = void 0;\n destroySelf();\n }\n const elLoadingComponent = defineComponent({\n name: \"ElLoading\",\n setup(_, { expose }) {\n const { ns, zIndex } = useGlobalComponentSettings(\"loading\");\n expose({\n ns,\n zIndex\n });\n return () => {\n const svg = data.spinner || data.svg;\n const spinner = h(\"svg\", {\n class: \"circular\",\n viewBox: data.svgViewBox ? data.svgViewBox : \"0 0 50 50\",\n ...svg ? { innerHTML: svg } : {}\n }, [\n h(\"circle\", {\n class: \"path\",\n cx: \"25\",\n cy: \"25\",\n r: \"20\",\n fill: \"none\"\n })\n ]);\n const spinnerText = data.text ? h(\"p\", { class: ns.b(\"text\") }, [data.text]) : void 0;\n return h(Transition, {\n name: ns.b(\"fade\"),\n onAfterLeave: handleAfterLeave\n }, {\n default: withCtx(() => [\n withDirectives(createVNode(\"div\", {\n style: {\n backgroundColor: data.background || \"\"\n },\n class: [\n ns.b(\"mask\"),\n data.customClass,\n data.fullscreen ? \"is-fullscreen\" : \"\"\n ]\n }, [\n h(\"div\", {\n class: ns.b(\"spinner\")\n }, [spinner, spinnerText])\n ]), [[vShow, data.visible]])\n ])\n });\n };\n }\n });\n const loadingInstance = createApp(elLoadingComponent);\n const vm = loadingInstance.mount(document.createElement(\"div\"));\n return {\n ...toRefs(data),\n setText,\n removeElLoadingChild,\n close,\n handleAfterLeave,\n vm,\n get $el() {\n return vm.$el;\n }\n };\n}\n\nexport { createLoadingComponent };\n//# sourceMappingURL=loading.mjs.map\n","import { nextTick } from 'vue';\nimport '../../../utils/index.mjs';\nimport { createLoadingComponent } from './loading.mjs';\nimport { isClient } from '@vueuse/core';\nimport { isString } from '@vue/shared';\nimport { getStyle, addClass, removeClass } from '../../../utils/dom/style.mjs';\n\nlet fullscreenInstance = void 0;\nconst Loading = function(options = {}) {\n if (!isClient)\n return void 0;\n const resolved = resolveOptions(options);\n if (resolved.fullscreen && fullscreenInstance) {\n return fullscreenInstance;\n }\n const instance = createLoadingComponent({\n ...resolved,\n closed: () => {\n var _a;\n (_a = resolved.closed) == null ? void 0 : _a.call(resolved);\n if (resolved.fullscreen)\n fullscreenInstance = void 0;\n }\n });\n addStyle(resolved, resolved.parent, instance);\n addClassList(resolved, resolved.parent, instance);\n resolved.parent.vLoadingAddClassList = () => addClassList(resolved, resolved.parent, instance);\n let loadingNumber = resolved.parent.getAttribute(\"loading-number\");\n if (!loadingNumber) {\n loadingNumber = \"1\";\n } else {\n loadingNumber = `${Number.parseInt(loadingNumber) + 1}`;\n }\n resolved.parent.setAttribute(\"loading-number\", loadingNumber);\n resolved.parent.appendChild(instance.$el);\n nextTick(() => instance.visible.value = resolved.visible);\n if (resolved.fullscreen) {\n fullscreenInstance = instance;\n }\n return instance;\n};\nconst resolveOptions = (options) => {\n var _a, _b, _c, _d;\n let target;\n if (isString(options.target)) {\n target = (_a = document.querySelector(options.target)) != null ? _a : document.body;\n } else {\n target = options.target || document.body;\n }\n return {\n parent: target === document.body || options.body ? document.body : target,\n background: options.background || \"\",\n svg: options.svg || \"\",\n svgViewBox: options.svgViewBox || \"\",\n spinner: options.spinner || false,\n text: options.text || \"\",\n fullscreen: target === document.body && ((_b = options.fullscreen) != null ? _b : true),\n lock: (_c = options.lock) != null ? _c : false,\n customClass: options.customClass || \"\",\n visible: (_d = options.visible) != null ? _d : true,\n beforeClose: options.beforeClose,\n closed: options.closed,\n target\n };\n};\nconst addStyle = async (options, parent, instance) => {\n const { nextZIndex } = instance.vm.zIndex || instance.vm._.exposed.zIndex;\n const maskStyle = {};\n if (options.fullscreen) {\n instance.originalPosition.value = getStyle(document.body, \"position\");\n instance.originalOverflow.value = getStyle(document.body, \"overflow\");\n maskStyle.zIndex = nextZIndex();\n } else if (options.parent === document.body) {\n instance.originalPosition.value = getStyle(document.body, \"position\");\n await nextTick();\n for (const property of [\"top\", \"left\"]) {\n const scroll = property === \"top\" ? \"scrollTop\" : \"scrollLeft\";\n maskStyle[property] = `${options.target.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] - Number.parseInt(getStyle(document.body, `margin-${property}`), 10)}px`;\n }\n for (const property of [\"height\", \"width\"]) {\n maskStyle[property] = `${options.target.getBoundingClientRect()[property]}px`;\n }\n } else {\n instance.originalPosition.value = getStyle(parent, \"position\");\n }\n for (const [key, value] of Object.entries(maskStyle)) {\n instance.$el.style[key] = value;\n }\n};\nconst addClassList = (options, parent, instance) => {\n const ns = instance.vm.ns || instance.vm._.exposed.ns;\n if (![\"absolute\", \"fixed\", \"sticky\"].includes(instance.originalPosition.value)) {\n addClass(parent, ns.bm(\"parent\", \"relative\"));\n } else {\n removeClass(parent, ns.bm(\"parent\", \"relative\"));\n }\n if (options.fullscreen && options.lock) {\n addClass(parent, ns.bm(\"parent\", \"hidden\"));\n } else {\n removeClass(parent, ns.bm(\"parent\", \"hidden\"));\n }\n};\n\nexport { Loading };\n//# sourceMappingURL=service.mjs.map\n","import { ref, isRef } from 'vue';\nimport '../../../utils/index.mjs';\nimport { Loading } from './service.mjs';\nimport { isObject, isString, hyphenate } from '@vue/shared';\n\nconst INSTANCE_KEY = Symbol(\"ElLoading\");\nconst createInstance = (el, binding) => {\n var _a, _b, _c, _d;\n const vm = binding.instance;\n const getBindingProp = (key) => isObject(binding.value) ? binding.value[key] : void 0;\n const resolveExpression = (key) => {\n const data = isString(key) && (vm == null ? void 0 : vm[key]) || key;\n if (data)\n return ref(data);\n else\n return data;\n };\n const getProp = (name) => resolveExpression(getBindingProp(name) || el.getAttribute(`element-loading-${hyphenate(name)}`));\n const fullscreen = (_a = getBindingProp(\"fullscreen\")) != null ? _a : binding.modifiers.fullscreen;\n const options = {\n text: getProp(\"text\"),\n svg: getProp(\"svg\"),\n svgViewBox: getProp(\"svgViewBox\"),\n spinner: getProp(\"spinner\"),\n background: getProp(\"background\"),\n customClass: getProp(\"customClass\"),\n fullscreen,\n target: (_b = getBindingProp(\"target\")) != null ? _b : fullscreen ? void 0 : el,\n body: (_c = getBindingProp(\"body\")) != null ? _c : binding.modifiers.body,\n lock: (_d = getBindingProp(\"lock\")) != null ? _d : binding.modifiers.lock\n };\n el[INSTANCE_KEY] = {\n options,\n instance: Loading(options)\n };\n};\nconst updateOptions = (newOptions, originalOptions) => {\n for (const key of Object.keys(originalOptions)) {\n if (isRef(originalOptions[key]))\n originalOptions[key].value = newOptions[key];\n }\n};\nconst vLoading = {\n mounted(el, binding) {\n if (binding.value) {\n createInstance(el, binding);\n }\n },\n updated(el, binding) {\n const instance = el[INSTANCE_KEY];\n if (binding.oldValue !== binding.value) {\n if (binding.value && !binding.oldValue) {\n createInstance(el, binding);\n } else if (binding.value && binding.oldValue) {\n if (isObject(binding.value))\n updateOptions(binding.value, instance.options);\n } else {\n instance == null ? void 0 : instance.instance.close();\n }\n }\n },\n unmounted(el) {\n var _a;\n (_a = el[INSTANCE_KEY]) == null ? void 0 : _a.instance.close();\n el[INSTANCE_KEY] = null;\n }\n};\n\nexport { vLoading };\n//# sourceMappingURL=directive.mjs.map\n","import { Loading } from './src/service.mjs';\nexport { Loading as ElLoadingService } from './src/service.mjs';\nimport { vLoading } from './src/directive.mjs';\nexport { vLoading as ElLoadingDirective, vLoading } from './src/directive.mjs';\nimport './src/types.mjs';\n\nconst ElLoading = {\n install(app) {\n app.directive(\"loading\", vLoading);\n app.config.globalProperties.$loading = Loading;\n },\n directive: vLoading,\n service: Loading\n};\n\nexport { ElLoading, ElLoading as default };\n//# sourceMappingURL=index.mjs.map\n","import '../../../utils/index.mjs';\nimport { mutable } from '../../../utils/typescript.mjs';\nimport { isClient } from '@vueuse/core';\nimport { buildProps, definePropType } from '../../../utils/vue/props/runtime.mjs';\nimport { iconPropType } from '../../../utils/vue/icon.mjs';\n\nconst messageTypes = [\"success\", \"info\", \"warning\", \"error\"];\nconst messageDefaults = mutable({\n customClass: \"\",\n center: false,\n dangerouslyUseHTMLString: false,\n duration: 3e3,\n icon: void 0,\n id: \"\",\n message: \"\",\n onClose: void 0,\n showClose: false,\n type: \"info\",\n plain: false,\n offset: 16,\n zIndex: 0,\n grouping: false,\n repeatNum: 1,\n appendTo: isClient ? document.body : void 0\n});\nconst messageProps = buildProps({\n customClass: {\n type: String,\n default: messageDefaults.customClass\n },\n center: {\n type: Boolean,\n default: messageDefaults.center\n },\n dangerouslyUseHTMLString: {\n type: Boolean,\n default: messageDefaults.dangerouslyUseHTMLString\n },\n duration: {\n type: Number,\n default: messageDefaults.duration\n },\n icon: {\n type: iconPropType,\n default: messageDefaults.icon\n },\n id: {\n type: String,\n default: messageDefaults.id\n },\n message: {\n type: definePropType([\n String,\n Object,\n Function\n ]),\n default: messageDefaults.message\n },\n onClose: {\n type: definePropType(Function),\n default: messageDefaults.onClose\n },\n showClose: {\n type: Boolean,\n default: messageDefaults.showClose\n },\n type: {\n type: String,\n values: messageTypes,\n default: messageDefaults.type\n },\n plain: {\n type: Boolean,\n default: messageDefaults.plain\n },\n offset: {\n type: Number,\n default: messageDefaults.offset\n },\n zIndex: {\n type: Number,\n default: messageDefaults.zIndex\n },\n grouping: {\n type: Boolean,\n default: messageDefaults.grouping\n },\n repeatNum: {\n type: Number,\n default: messageDefaults.repeatNum\n }\n});\nconst messageEmits = {\n destroy: () => true\n};\n\nexport { messageDefaults, messageEmits, messageProps, messageTypes };\n//# sourceMappingURL=message.mjs.map\n","import { shallowReactive } from 'vue';\n\nconst instances = shallowReactive([]);\nconst getInstance = (id) => {\n const idx = instances.findIndex((instance) => instance.id === id);\n const current = instances[idx];\n let prev;\n if (idx > 0) {\n prev = instances[idx - 1];\n }\n return { current, prev };\n};\nconst getLastOffset = (id) => {\n const { prev } = getInstance(id);\n if (!prev)\n return 0;\n return prev.vm.exposed.bottom.value;\n};\nconst getOffsetOrSpace = (id, offset) => {\n const idx = instances.findIndex((instance) => instance.id === id);\n return idx > 0 ? 16 : offset;\n};\n\nexport { getInstance, getLastOffset, getOffsetOrSpace, instances };\n//# sourceMappingURL=instance.mjs.map\n","import { defineComponent, ref, computed, onMounted, watch, openBlock, createBlock, Transition, unref, withCtx, withDirectives, createElementVNode, normalizeClass, normalizeStyle, createCommentVNode, resolveDynamicComponent, renderSlot, createElementBlock, toDisplayString, Fragment, withModifiers, createVNode, vShow } from 'vue';\nimport { useTimeoutFn, useEventListener, useResizeObserver } from '@vueuse/core';\nimport '../../../utils/index.mjs';\nimport '../../../constants/index.mjs';\nimport { ElBadge } from '../../badge/index.mjs';\nimport '../../config-provider/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { messageProps, messageEmits } from './message.mjs';\nimport { getLastOffset, getOffsetOrSpace } from './instance.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { TypeComponents, TypeComponentsMap } from '../../../utils/vue/icon.mjs';\nimport { useGlobalComponentSettings } from '../../config-provider/src/hooks/use-global-config.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\n\nconst __default__ = defineComponent({\n name: \"ElMessage\"\n});\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n ...__default__,\n props: messageProps,\n emits: messageEmits,\n setup(__props, { expose }) {\n const props = __props;\n const { Close } = TypeComponents;\n const { ns, zIndex } = useGlobalComponentSettings(\"message\");\n const { currentZIndex, nextZIndex } = zIndex;\n const messageRef = ref();\n const visible = ref(false);\n const height = ref(0);\n let stopTimer = void 0;\n const badgeType = computed(() => props.type ? props.type === \"error\" ? \"danger\" : props.type : \"info\");\n const typeClass = computed(() => {\n const type = props.type;\n return { [ns.bm(\"icon\", type)]: type && TypeComponentsMap[type] };\n });\n const iconComponent = computed(() => props.icon || TypeComponentsMap[props.type] || \"\");\n const lastOffset = computed(() => getLastOffset(props.id));\n const offset = computed(() => getOffsetOrSpace(props.id, props.offset) + lastOffset.value);\n const bottom = computed(() => height.value + offset.value);\n const customStyle = computed(() => ({\n top: `${offset.value}px`,\n zIndex: currentZIndex.value\n }));\n function startTimer() {\n if (props.duration === 0)\n return;\n ({ stop: stopTimer } = useTimeoutFn(() => {\n close();\n }, props.duration));\n }\n function clearTimer() {\n stopTimer == null ? void 0 : stopTimer();\n }\n function close() {\n visible.value = false;\n }\n function keydown({ code }) {\n if (code === EVENT_CODE.esc) {\n close();\n }\n }\n onMounted(() => {\n startTimer();\n nextZIndex();\n visible.value = true;\n });\n watch(() => props.repeatNum, () => {\n clearTimer();\n startTimer();\n });\n useEventListener(document, \"keydown\", keydown);\n useResizeObserver(messageRef, () => {\n height.value = messageRef.value.getBoundingClientRect().height;\n });\n expose({\n visible,\n bottom,\n close\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(Transition, {\n name: unref(ns).b(\"fade\"),\n onBeforeLeave: _ctx.onClose,\n onAfterLeave: ($event) => _ctx.$emit(\"destroy\"),\n persisted: \"\"\n }, {\n default: withCtx(() => [\n withDirectives(createElementVNode(\"div\", {\n id: _ctx.id,\n ref_key: \"messageRef\",\n ref: messageRef,\n class: normalizeClass([\n unref(ns).b(),\n { [unref(ns).m(_ctx.type)]: _ctx.type },\n unref(ns).is(\"center\", _ctx.center),\n unref(ns).is(\"closable\", _ctx.showClose),\n unref(ns).is(\"plain\", _ctx.plain),\n _ctx.customClass\n ]),\n style: normalizeStyle(unref(customStyle)),\n role: \"alert\",\n onMouseenter: clearTimer,\n onMouseleave: startTimer\n }, [\n _ctx.repeatNum > 1 ? (openBlock(), createBlock(unref(ElBadge), {\n key: 0,\n value: _ctx.repeatNum,\n type: unref(badgeType),\n class: normalizeClass(unref(ns).e(\"badge\"))\n }, null, 8, [\"value\", \"type\", \"class\"])) : createCommentVNode(\"v-if\", true),\n unref(iconComponent) ? (openBlock(), createBlock(unref(ElIcon), {\n key: 1,\n class: normalizeClass([unref(ns).e(\"icon\"), unref(typeClass)])\n }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent(unref(iconComponent))))\n ]),\n _: 1\n }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true),\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n !_ctx.dangerouslyUseHTMLString ? (openBlock(), createElementBlock(\"p\", {\n key: 0,\n class: normalizeClass(unref(ns).e(\"content\"))\n }, toDisplayString(_ctx.message), 3)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [\n createCommentVNode(\" Caution here, message could've been compromised, never use user's input as message \"),\n createElementVNode(\"p\", {\n class: normalizeClass(unref(ns).e(\"content\")),\n innerHTML: _ctx.message\n }, null, 10, [\"innerHTML\"])\n ], 2112))\n ]),\n _ctx.showClose ? (openBlock(), createBlock(unref(ElIcon), {\n key: 2,\n class: normalizeClass(unref(ns).e(\"closeBtn\")),\n onClick: withModifiers(close, [\"stop\"])\n }, {\n default: withCtx(() => [\n createVNode(unref(Close))\n ]),\n _: 1\n }, 8, [\"class\", \"onClick\"])) : createCommentVNode(\"v-if\", true)\n ], 46, [\"id\"]), [\n [vShow, visible.value]\n ])\n ]),\n _: 3\n }, 8, [\"name\", \"onBeforeLeave\", \"onAfterLeave\"]);\n };\n }\n});\nvar MessageConstructor = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"__file\", \"message.vue\"]]);\n\nexport { MessageConstructor as default };\n//# sourceMappingURL=message2.mjs.map\n","import { isVNode, render, createVNode } from 'vue';\nimport '../../../utils/index.mjs';\nimport '../../config-provider/index.mjs';\nimport MessageConstructor from './message2.mjs';\nimport { messageDefaults, messageTypes } from './message.mjs';\nimport { instances } from './instance.mjs';\nimport { isString, isFunction } from '@vue/shared';\nimport { isElement, isBoolean, isNumber } from '../../../utils/types.mjs';\nimport { debugWarn } from '../../../utils/error.mjs';\nimport { messageConfig } from '../../config-provider/src/config-provider.mjs';\nimport { isClient } from '@vueuse/core';\n\nlet seed = 1;\nconst normalizeOptions = (params) => {\n const options = !params || isString(params) || isVNode(params) || isFunction(params) ? { message: params } : params;\n const normalized = {\n ...messageDefaults,\n ...options\n };\n if (!normalized.appendTo) {\n normalized.appendTo = document.body;\n } else if (isString(normalized.appendTo)) {\n let appendTo = document.querySelector(normalized.appendTo);\n if (!isElement(appendTo)) {\n debugWarn(\"ElMessage\", \"the appendTo option is not an HTMLElement. Falling back to document.body.\");\n appendTo = document.body;\n }\n normalized.appendTo = appendTo;\n }\n if (isBoolean(messageConfig.grouping) && !normalized.grouping) {\n normalized.grouping = messageConfig.grouping;\n }\n if (isNumber(messageConfig.duration) && normalized.duration === 3e3) {\n normalized.duration = messageConfig.duration;\n }\n if (isNumber(messageConfig.offset) && normalized.offset === 16) {\n normalized.offset = messageConfig.offset;\n }\n if (isBoolean(messageConfig.showClose) && !normalized.showClose) {\n normalized.showClose = messageConfig.showClose;\n }\n return normalized;\n};\nconst closeMessage = (instance) => {\n const idx = instances.indexOf(instance);\n if (idx === -1)\n return;\n instances.splice(idx, 1);\n const { handler } = instance;\n handler.close();\n};\nconst createMessage = ({ appendTo, ...options }, context) => {\n const id = `message_${seed++}`;\n const userOnClose = options.onClose;\n const container = document.createElement(\"div\");\n const props = {\n ...options,\n id,\n onClose: () => {\n userOnClose == null ? void 0 : userOnClose();\n closeMessage(instance);\n },\n onDestroy: () => {\n render(null, container);\n }\n };\n const vnode = createVNode(MessageConstructor, props, isFunction(props.message) || isVNode(props.message) ? {\n default: isFunction(props.message) ? props.message : () => props.message\n } : null);\n vnode.appContext = context || message._context;\n render(vnode, container);\n appendTo.appendChild(container.firstElementChild);\n const vm = vnode.component;\n const handler = {\n close: () => {\n vm.exposed.visible.value = false;\n }\n };\n const instance = {\n id,\n vnode,\n vm,\n handler,\n props: vnode.component.props\n };\n return instance;\n};\nconst message = (options = {}, context) => {\n if (!isClient)\n return { close: () => void 0 };\n const normalized = normalizeOptions(options);\n if (normalized.grouping && instances.length) {\n const instance2 = instances.find(({ vnode: vm }) => {\n var _a;\n return ((_a = vm.props) == null ? void 0 : _a.message) === normalized.message;\n });\n if (instance2) {\n instance2.props.repeatNum += 1;\n instance2.props.type = normalized.type;\n return instance2.handler;\n }\n }\n if (isNumber(messageConfig.max) && instances.length >= messageConfig.max) {\n return { close: () => void 0 };\n }\n const instance = createMessage(normalized, context);\n instances.push(instance);\n return instance.handler;\n};\nmessageTypes.forEach((type) => {\n message[type] = (options = {}, appContext) => {\n const normalized = normalizeOptions(options);\n return message({ ...normalized, type }, appContext);\n };\n});\nfunction closeAll(type) {\n for (const instance of instances) {\n if (!type || type === instance.props.type) {\n instance.handler.close();\n }\n }\n}\nmessage.closeAll = closeAll;\nmessage._context = null;\n\nexport { closeAll, message as default };\n//# sourceMappingURL=method.mjs.map\n","import '../../utils/index.mjs';\nimport message from './src/method.mjs';\nexport { messageDefaults, messageEmits, messageProps, messageTypes } from './src/message.mjs';\nimport { withInstallFunction } from '../../utils/vue/install.mjs';\n\nconst ElMessage = withInstallFunction(message, \"$message\");\n\nexport { ElMessage, ElMessage as default };\n//# sourceMappingURL=index.mjs.map\n","import { defineComponent, computed, ref, reactive, markRaw, watch, nextTick, onMounted, onBeforeUnmount, toRefs, resolveComponent, openBlock, createBlock, Transition, withCtx, withDirectives, createVNode, createElementVNode, normalizeClass, normalizeStyle, withModifiers, createElementBlock, resolveDynamicComponent, createCommentVNode, toDisplayString, withKeys, renderSlot, createTextVNode, vShow } from 'vue';\nimport { ElButton } from '../../button/index.mjs';\nimport '../../../directives/index.mjs';\nimport '../../../hooks/index.mjs';\nimport { ElInput } from '../../input/index.mjs';\nimport { ElOverlay } from '../../overlay/index.mjs';\nimport '../../../utils/index.mjs';\nimport { ElIcon } from '../../icon/index.mjs';\nimport { Loading } from '@element-plus/icons-vue';\nimport '../../focus-trap/index.mjs';\nimport '../../config-provider/index.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport TrapFocus from '../../../directives/trap-focus/index.mjs';\nimport ElFocusTrap from '../../focus-trap/src/focus-trap.mjs';\nimport { TypeComponents, TypeComponentsMap } from '../../../utils/vue/icon.mjs';\nimport { isValidComponentSize } from '../../../utils/vue/validator.mjs';\nimport { useGlobalComponentSettings } from '../../config-provider/src/hooks/use-global-config.mjs';\nimport { useId } from '../../../hooks/use-id/index.mjs';\nimport { useDraggable } from '../../../hooks/use-draggable/index.mjs';\nimport { useSameTarget } from '../../../hooks/use-same-target/index.mjs';\nimport { useLockscreen } from '../../../hooks/use-lockscreen/index.mjs';\n\nconst _sfc_main = defineComponent({\n name: \"ElMessageBox\",\n directives: {\n TrapFocus\n },\n components: {\n ElButton,\n ElFocusTrap,\n ElInput,\n ElOverlay,\n ElIcon,\n ...TypeComponents\n },\n inheritAttrs: false,\n props: {\n buttonSize: {\n type: String,\n validator: isValidComponentSize\n },\n modal: {\n type: Boolean,\n default: true\n },\n lockScroll: {\n type: Boolean,\n default: true\n },\n showClose: {\n type: Boolean,\n default: true\n },\n closeOnClickModal: {\n type: Boolean,\n default: true\n },\n closeOnPressEscape: {\n type: Boolean,\n default: true\n },\n closeOnHashChange: {\n type: Boolean,\n default: true\n },\n center: Boolean,\n draggable: Boolean,\n overflow: Boolean,\n roundButton: {\n default: false,\n type: Boolean\n },\n container: {\n type: String,\n default: \"body\"\n },\n boxType: {\n type: String,\n default: \"\"\n }\n },\n emits: [\"vanish\", \"action\"],\n setup(props, { emit }) {\n const {\n locale,\n zIndex,\n ns,\n size: btnSize\n } = useGlobalComponentSettings(\"message-box\", computed(() => props.buttonSize));\n const { t } = locale;\n const { nextZIndex } = zIndex;\n const visible = ref(false);\n const state = reactive({\n autofocus: true,\n beforeClose: null,\n callback: null,\n cancelButtonText: \"\",\n cancelButtonClass: \"\",\n confirmButtonText: \"\",\n confirmButtonClass: \"\",\n customClass: \"\",\n customStyle: {},\n dangerouslyUseHTMLString: false,\n distinguishCancelAndClose: false,\n icon: \"\",\n inputPattern: null,\n inputPlaceholder: \"\",\n inputType: \"text\",\n inputValue: null,\n inputValidator: null,\n inputErrorMessage: \"\",\n message: null,\n modalFade: true,\n modalClass: \"\",\n showCancelButton: false,\n showConfirmButton: true,\n type: \"\",\n title: void 0,\n showInput: false,\n action: \"\",\n confirmButtonLoading: false,\n cancelButtonLoading: false,\n confirmButtonLoadingIcon: markRaw(Loading),\n cancelButtonLoadingIcon: markRaw(Loading),\n confirmButtonDisabled: false,\n editorErrorMessage: \"\",\n validateError: false,\n zIndex: nextZIndex()\n });\n const typeClass = computed(() => {\n const type = state.type;\n return { [ns.bm(\"icon\", type)]: type && TypeComponentsMap[type] };\n });\n const contentId = useId();\n const inputId = useId();\n const iconComponent = computed(() => state.icon || TypeComponentsMap[state.type] || \"\");\n const hasMessage = computed(() => !!state.message);\n const rootRef = ref();\n const headerRef = ref();\n const focusStartRef = ref();\n const inputRef = ref();\n const confirmRef = ref();\n const confirmButtonClasses = computed(() => state.confirmButtonClass);\n watch(() => state.inputValue, async (val) => {\n await nextTick();\n if (props.boxType === \"prompt\" && val !== null) {\n validate();\n }\n }, { immediate: true });\n watch(() => visible.value, (val) => {\n var _a, _b;\n if (val) {\n if (props.boxType !== \"prompt\") {\n if (state.autofocus) {\n focusStartRef.value = (_b = (_a = confirmRef.value) == null ? void 0 : _a.$el) != null ? _b : rootRef.value;\n } else {\n focusStartRef.value = rootRef.value;\n }\n }\n state.zIndex = nextZIndex();\n }\n if (props.boxType !== \"prompt\")\n return;\n if (val) {\n nextTick().then(() => {\n var _a2;\n if (inputRef.value && inputRef.value.$el) {\n if (state.autofocus) {\n focusStartRef.value = (_a2 = getInputElement()) != null ? _a2 : rootRef.value;\n } else {\n focusStartRef.value = rootRef.value;\n }\n }\n });\n } else {\n state.editorErrorMessage = \"\";\n state.validateError = false;\n }\n });\n const draggable = computed(() => props.draggable);\n const overflow = computed(() => props.overflow);\n useDraggable(rootRef, headerRef, draggable, overflow);\n onMounted(async () => {\n await nextTick();\n if (props.closeOnHashChange) {\n window.addEventListener(\"hashchange\", doClose);\n }\n });\n onBeforeUnmount(() => {\n if (props.closeOnHashChange) {\n window.removeEventListener(\"hashchange\", doClose);\n }\n });\n function doClose() {\n if (!visible.value)\n return;\n visible.value = false;\n nextTick(() => {\n if (state.action)\n emit(\"action\", state.action);\n });\n }\n const handleWrapperClick = () => {\n if (props.closeOnClickModal) {\n handleAction(state.distinguishCancelAndClose ? \"close\" : \"cancel\");\n }\n };\n const overlayEvent = useSameTarget(handleWrapperClick);\n const handleInputEnter = (e) => {\n if (state.inputType !== \"textarea\") {\n e.preventDefault();\n return handleAction(\"confirm\");\n }\n };\n const handleAction = (action) => {\n var _a;\n if (props.boxType === \"prompt\" && action === \"confirm\" && !validate()) {\n return;\n }\n state.action = action;\n if (state.beforeClose) {\n (_a = state.beforeClose) == null ? void 0 : _a.call(state, action, state, doClose);\n } else {\n doClose();\n }\n };\n const validate = () => {\n if (props.boxType === \"prompt\") {\n const inputPattern = state.inputPattern;\n if (inputPattern && !inputPattern.test(state.inputValue || \"\")) {\n state.editorErrorMessage = state.inputErrorMessage || t(\"el.messagebox.error\");\n state.validateError = true;\n return false;\n }\n const inputValidator = state.inputValidator;\n if (typeof inputValidator === \"function\") {\n const validateResult = inputValidator(state.inputValue);\n if (validateResult === false) {\n state.editorErrorMessage = state.inputErrorMessage || t(\"el.messagebox.error\");\n state.validateError = true;\n return false;\n }\n if (typeof validateResult === \"string\") {\n state.editorErrorMessage = validateResult;\n state.validateError = true;\n return false;\n }\n }\n }\n state.editorErrorMessage = \"\";\n state.validateError = false;\n return true;\n };\n const getInputElement = () => {\n const inputRefs = inputRef.value.$refs;\n return inputRefs.input || inputRefs.textarea;\n };\n const handleClose = () => {\n handleAction(\"close\");\n };\n const onCloseRequested = () => {\n if (props.closeOnPressEscape) {\n handleClose();\n }\n };\n if (props.lockScroll) {\n useLockscreen(visible);\n }\n return {\n ...toRefs(state),\n ns,\n overlayEvent,\n visible,\n hasMessage,\n typeClass,\n contentId,\n inputId,\n btnSize,\n iconComponent,\n confirmButtonClasses,\n rootRef,\n focusStartRef,\n headerRef,\n inputRef,\n confirmRef,\n doClose,\n handleClose,\n onCloseRequested,\n handleWrapperClick,\n handleInputEnter,\n handleAction,\n t\n };\n }\n});\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_icon = resolveComponent(\"el-icon\");\n const _component_close = resolveComponent(\"close\");\n const _component_el_input = resolveComponent(\"el-input\");\n const _component_el_button = resolveComponent(\"el-button\");\n const _component_el_focus_trap = resolveComponent(\"el-focus-trap\");\n const _component_el_overlay = resolveComponent(\"el-overlay\");\n return openBlock(), createBlock(Transition, {\n name: \"fade-in-linear\",\n onAfterLeave: ($event) => _ctx.$emit(\"vanish\"),\n persisted: \"\"\n }, {\n default: withCtx(() => [\n withDirectives(createVNode(_component_el_overlay, {\n \"z-index\": _ctx.zIndex,\n \"overlay-class\": [_ctx.ns.is(\"message-box\"), _ctx.modalClass],\n mask: _ctx.modal\n }, {\n default: withCtx(() => [\n createElementVNode(\"div\", {\n role: \"dialog\",\n \"aria-label\": _ctx.title,\n \"aria-modal\": \"true\",\n \"aria-describedby\": !_ctx.showInput ? _ctx.contentId : void 0,\n class: normalizeClass(`${_ctx.ns.namespace.value}-overlay-message-box`),\n onClick: _ctx.overlayEvent.onClick,\n onMousedown: _ctx.overlayEvent.onMousedown,\n onMouseup: _ctx.overlayEvent.onMouseup\n }, [\n createVNode(_component_el_focus_trap, {\n loop: \"\",\n trapped: _ctx.visible,\n \"focus-trap-el\": _ctx.rootRef,\n \"focus-start-el\": _ctx.focusStartRef,\n onReleaseRequested: _ctx.onCloseRequested\n }, {\n default: withCtx(() => [\n createElementVNode(\"div\", {\n ref: \"rootRef\",\n class: normalizeClass([\n _ctx.ns.b(),\n _ctx.customClass,\n _ctx.ns.is(\"draggable\", _ctx.draggable),\n { [_ctx.ns.m(\"center\")]: _ctx.center }\n ]),\n style: normalizeStyle(_ctx.customStyle),\n tabindex: \"-1\",\n onClick: withModifiers(() => {\n }, [\"stop\"])\n }, [\n _ctx.title !== null && _ctx.title !== void 0 ? (openBlock(), createElementBlock(\"div\", {\n key: 0,\n ref: \"headerRef\",\n class: normalizeClass([_ctx.ns.e(\"header\"), { \"show-close\": _ctx.showClose }])\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.ns.e(\"title\"))\n }, [\n _ctx.iconComponent && _ctx.center ? (openBlock(), createBlock(_component_el_icon, {\n key: 0,\n class: normalizeClass([_ctx.ns.e(\"status\"), _ctx.typeClass])\n }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent(_ctx.iconComponent)))\n ]),\n _: 1\n }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true),\n createElementVNode(\"span\", null, toDisplayString(_ctx.title), 1)\n ], 2),\n _ctx.showClose ? (openBlock(), createElementBlock(\"button\", {\n key: 0,\n type: \"button\",\n class: normalizeClass(_ctx.ns.e(\"headerbtn\")),\n \"aria-label\": _ctx.t(\"el.messagebox.close\"),\n onClick: ($event) => _ctx.handleAction(_ctx.distinguishCancelAndClose ? \"close\" : \"cancel\"),\n onKeydown: withKeys(withModifiers(($event) => _ctx.handleAction(_ctx.distinguishCancelAndClose ? \"close\" : \"cancel\"), [\"prevent\"]), [\"enter\"])\n }, [\n createVNode(_component_el_icon, {\n class: normalizeClass(_ctx.ns.e(\"close\"))\n }, {\n default: withCtx(() => [\n createVNode(_component_close)\n ]),\n _: 1\n }, 8, [\"class\"])\n ], 42, [\"aria-label\", \"onClick\", \"onKeydown\"])) : createCommentVNode(\"v-if\", true)\n ], 2)) : createCommentVNode(\"v-if\", true),\n createElementVNode(\"div\", {\n id: _ctx.contentId,\n class: normalizeClass(_ctx.ns.e(\"content\"))\n }, [\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.ns.e(\"container\"))\n }, [\n _ctx.iconComponent && !_ctx.center && _ctx.hasMessage ? (openBlock(), createBlock(_component_el_icon, {\n key: 0,\n class: normalizeClass([_ctx.ns.e(\"status\"), _ctx.typeClass])\n }, {\n default: withCtx(() => [\n (openBlock(), createBlock(resolveDynamicComponent(_ctx.iconComponent)))\n ]),\n _: 1\n }, 8, [\"class\"])) : createCommentVNode(\"v-if\", true),\n _ctx.hasMessage ? (openBlock(), createElementBlock(\"div\", {\n key: 1,\n class: normalizeClass(_ctx.ns.e(\"message\"))\n }, [\n renderSlot(_ctx.$slots, \"default\", {}, () => [\n !_ctx.dangerouslyUseHTMLString ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.showInput ? \"label\" : \"p\"), {\n key: 0,\n for: _ctx.showInput ? _ctx.inputId : void 0\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString(!_ctx.dangerouslyUseHTMLString ? _ctx.message : \"\"), 1)\n ]),\n _: 1\n }, 8, [\"for\"])) : (openBlock(), createBlock(resolveDynamicComponent(_ctx.showInput ? \"label\" : \"p\"), {\n key: 1,\n for: _ctx.showInput ? _ctx.inputId : void 0,\n innerHTML: _ctx.message\n }, null, 8, [\"for\", \"innerHTML\"]))\n ])\n ], 2)) : createCommentVNode(\"v-if\", true)\n ], 2),\n withDirectives(createElementVNode(\"div\", {\n class: normalizeClass(_ctx.ns.e(\"input\"))\n }, [\n createVNode(_component_el_input, {\n id: _ctx.inputId,\n ref: \"inputRef\",\n modelValue: _ctx.inputValue,\n \"onUpdate:modelValue\": ($event) => _ctx.inputValue = $event,\n type: _ctx.inputType,\n placeholder: _ctx.inputPlaceholder,\n \"aria-invalid\": _ctx.validateError,\n class: normalizeClass({ invalid: _ctx.validateError }),\n onKeydown: withKeys(_ctx.handleInputEnter, [\"enter\"])\n }, null, 8, [\"id\", \"modelValue\", \"onUpdate:modelValue\", \"type\", \"placeholder\", \"aria-invalid\", \"class\", \"onKeydown\"]),\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.ns.e(\"errormsg\")),\n style: normalizeStyle({\n visibility: !!_ctx.editorErrorMessage ? \"visible\" : \"hidden\"\n })\n }, toDisplayString(_ctx.editorErrorMessage), 7)\n ], 2), [\n [vShow, _ctx.showInput]\n ])\n ], 10, [\"id\"]),\n createElementVNode(\"div\", {\n class: normalizeClass(_ctx.ns.e(\"btns\"))\n }, [\n _ctx.showCancelButton ? (openBlock(), createBlock(_component_el_button, {\n key: 0,\n loading: _ctx.cancelButtonLoading,\n \"loading-icon\": _ctx.cancelButtonLoadingIcon,\n class: normalizeClass([_ctx.cancelButtonClass]),\n round: _ctx.roundButton,\n size: _ctx.btnSize,\n onClick: ($event) => _ctx.handleAction(\"cancel\"),\n onKeydown: withKeys(withModifiers(($event) => _ctx.handleAction(\"cancel\"), [\"prevent\"]), [\"enter\"])\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString(_ctx.cancelButtonText || _ctx.t(\"el.messagebox.cancel\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\", \"loading-icon\", \"class\", \"round\", \"size\", \"onClick\", \"onKeydown\"])) : createCommentVNode(\"v-if\", true),\n withDirectives(createVNode(_component_el_button, {\n ref: \"confirmRef\",\n type: \"primary\",\n loading: _ctx.confirmButtonLoading,\n \"loading-icon\": _ctx.confirmButtonLoadingIcon,\n class: normalizeClass([_ctx.confirmButtonClasses]),\n round: _ctx.roundButton,\n disabled: _ctx.confirmButtonDisabled,\n size: _ctx.btnSize,\n onClick: ($event) => _ctx.handleAction(\"confirm\"),\n onKeydown: withKeys(withModifiers(($event) => _ctx.handleAction(\"confirm\"), [\"prevent\"]), [\"enter\"])\n }, {\n default: withCtx(() => [\n createTextVNode(toDisplayString(_ctx.confirmButtonText || _ctx.t(\"el.messagebox.confirm\")), 1)\n ]),\n _: 1\n }, 8, [\"loading\", \"loading-icon\", \"class\", \"round\", \"disabled\", \"size\", \"onClick\", \"onKeydown\"]), [\n [vShow, _ctx.showConfirmButton]\n ])\n ], 2)\n ], 14, [\"onClick\"])\n ]),\n _: 3\n }, 8, [\"trapped\", \"focus-trap-el\", \"focus-start-el\", \"onReleaseRequested\"])\n ], 42, [\"aria-label\", \"aria-describedby\", \"onClick\", \"onMousedown\", \"onMouseup\"])\n ]),\n _: 3\n }, 8, [\"z-index\", \"overlay-class\", \"mask\"]), [\n [vShow, _ctx.visible]\n ])\n ]),\n _: 3\n }, 8, [\"onAfterLeave\"]);\n}\nvar MessageBoxConstructor = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__file\", \"index.vue\"]]);\n\nexport { MessageBoxConstructor as default };\n//# sourceMappingURL=index.mjs.map\n","import { createVNode, isVNode, render } from 'vue';\nimport '../../../utils/index.mjs';\nimport MessageBoxConstructor from './index.mjs';\nimport { isString, isFunction, hasOwn, isObject } from '@vue/shared';\nimport { isElement, isUndefined } from '../../../utils/types.mjs';\nimport { debugWarn } from '../../../utils/error.mjs';\nimport { isClient } from '@vueuse/core';\n\nconst messageInstance = /* @__PURE__ */ new Map();\nconst getAppendToElement = (props) => {\n let appendTo = document.body;\n if (props.appendTo) {\n if (isString(props.appendTo)) {\n appendTo = document.querySelector(props.appendTo);\n }\n if (isElement(props.appendTo)) {\n appendTo = props.appendTo;\n }\n if (!isElement(appendTo)) {\n debugWarn(\"ElMessageBox\", \"the appendTo option is not an HTMLElement. Falling back to document.body.\");\n appendTo = document.body;\n }\n }\n return appendTo;\n};\nconst initInstance = (props, container, appContext = null) => {\n const vnode = createVNode(MessageBoxConstructor, props, isFunction(props.message) || isVNode(props.message) ? {\n default: isFunction(props.message) ? props.message : () => props.message\n } : null);\n vnode.appContext = appContext;\n render(vnode, container);\n getAppendToElement(props).appendChild(container.firstElementChild);\n return vnode.component;\n};\nconst genContainer = () => {\n return document.createElement(\"div\");\n};\nconst showMessage = (options, appContext) => {\n const container = genContainer();\n options.onVanish = () => {\n render(null, container);\n messageInstance.delete(vm);\n };\n options.onAction = (action) => {\n const currentMsg = messageInstance.get(vm);\n let resolve;\n if (options.showInput) {\n resolve = { value: vm.inputValue, action };\n } else {\n resolve = action;\n }\n if (options.callback) {\n options.callback(resolve, instance.proxy);\n } else {\n if (action === \"cancel\" || action === \"close\") {\n if (options.distinguishCancelAndClose && action !== \"cancel\") {\n currentMsg.reject(\"close\");\n } else {\n currentMsg.reject(\"cancel\");\n }\n } else {\n currentMsg.resolve(resolve);\n }\n }\n };\n const instance = initInstance(options, container, appContext);\n const vm = instance.proxy;\n for (const prop in options) {\n if (hasOwn(options, prop) && !hasOwn(vm.$props, prop)) {\n vm[prop] = options[prop];\n }\n }\n vm.visible = true;\n return vm;\n};\nfunction MessageBox(options, appContext = null) {\n if (!isClient)\n return Promise.reject();\n let callback;\n if (isString(options) || isVNode(options)) {\n options = {\n message: options\n };\n } else {\n callback = options.callback;\n }\n return new Promise((resolve, reject) => {\n const vm = showMessage(options, appContext != null ? appContext : MessageBox._context);\n messageInstance.set(vm, {\n options,\n callback,\n resolve,\n reject\n });\n });\n}\nconst MESSAGE_BOX_VARIANTS = [\"alert\", \"confirm\", \"prompt\"];\nconst MESSAGE_BOX_DEFAULT_OPTS = {\n alert: { closeOnPressEscape: false, closeOnClickModal: false },\n confirm: { showCancelButton: true },\n prompt: { showCancelButton: true, showInput: true }\n};\nMESSAGE_BOX_VARIANTS.forEach((boxType) => {\n ;\n MessageBox[boxType] = messageBoxFactory(boxType);\n});\nfunction messageBoxFactory(boxType) {\n return (message, title, options, appContext) => {\n let titleOrOpts = \"\";\n if (isObject(title)) {\n options = title;\n titleOrOpts = \"\";\n } else if (isUndefined(title)) {\n titleOrOpts = \"\";\n } else {\n titleOrOpts = title;\n }\n return MessageBox(Object.assign({\n title: titleOrOpts,\n message,\n type: \"\",\n ...MESSAGE_BOX_DEFAULT_OPTS[boxType]\n }, options, {\n boxType\n }), appContext);\n };\n}\nMessageBox.close = () => {\n messageInstance.forEach((_, vm) => {\n vm.doClose();\n });\n messageInstance.clear();\n};\nMessageBox._context = null;\n\nexport { MessageBox as default };\n//# sourceMappingURL=messageBox.mjs.map\n","import MessageBox from './src/messageBox.mjs';\nimport './src/message-box.type.mjs';\n\nconst _MessageBox = MessageBox;\n_MessageBox.install = (app) => {\n _MessageBox._context = app._context;\n app.config.globalProperties.$msgbox = _MessageBox;\n app.config.globalProperties.$messageBox = _MessageBox;\n app.config.globalProperties.$alert = _MessageBox.alert;\n app.config.globalProperties.$confirm = _MessageBox.confirm;\n app.config.globalProperties.$prompt = _MessageBox.prompt;\n};\nconst ElMessageBox = _MessageBox;\n\nexport { ElMessageBox, _MessageBox as default };\n//# sourceMappingURL=index.mjs.map\n","//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\n };\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\n };\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n }\n\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // PARSING\n\n addRegexToken('M', match1to2, match1to2NoLeadingZero);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // PARSING\n\n addRegexToken('w', match1to2, match1to2NoLeadingZero);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2, match1to2NoLeadingZero);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2, match1to2HasZero);\n addRegexToken('h', match1to2, match1to2NoLeadingZero);\n addRegexToken('k', match1to2, match1to2NoLeadingZero);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // PARSING\n\n addRegexToken('D', match1to2, match1to2NoLeadingZero);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // PARSING\n\n addRegexToken('m', match1to2, match1to2HasZero);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // PARSING\n\n addRegexToken('s', match1to2, match1to2HasZero);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y'),\n valueOf$1 = asMilliseconds;\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.30.1';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n","\n","import axios from 'axios'\nimport Vueform from \"@vueform/vueform\";\nimport vueformConfig from \"../../../vueform.config.js\";\nimport moment from \"moment/moment.js\";\nimport Item from \"~/components/ui/item.vue\";\nimport ItemGroup from \"~/components/ui/item_group.vue\";\nimport BackButton from \"@/components/ui/back_button.vue\";\nimport Card from \"@/components/ui/card.vue\";\nimport store from \"@/store/index.js\";\n\nexport default {\n install: (app, options) => {\n axios.interceptors.response.use( undefined,\n (error) => {\n if(error.response.status === 401) store.$auth.logout()\n return Promise.reject(error);\n });\n\n app.config.globalProperties.$axios = axios\n app.config.globalProperties.$moment = moment\n app.config.globalProperties.$format = {\n date: (value) => value ? moment(value).format('l') : '',\n }\n app.use(Vueform, vueformConfig)\n .component('Item', Item)\n .component('ItemGroup', ItemGroup)\n .component('BackButton', BackButton)\n .component('Card', Card)\n }\n}\n","import axios from \"axios\";\n\nexport default {\n install: async (app, options) => {\n app.config.globalProperties.$constants = {\n states: [],\n }\n let response = await axios.get('api/constants', {params: {include: options}})\n app.config.globalProperties.$constants = response.data\n }\n}","\n\n","\n\n","\n\n\n","var nb = Object.defineProperty;\nvar UR = (s) => {\n throw TypeError(s);\n};\nvar sb = (s, U, l) => U in s ? nb(s, U, { enumerable: !0, configurable: !0, writable: !0, value: l }) : s[U] = l;\nvar _ = (s, U, l) => sb(s, typeof U != \"symbol\" ? U + \"\" : U, l), GV = (s, U, l) => U.has(s) || UR(\"Cannot \" + l);\nvar n = (s, U, l) => (GV(s, U, \"read from private field\"), l ? l.call(s) : U.get(s)), m = (s, U, l) => U.has(s) ? UR(\"Cannot add the same private member more than once\") : U instanceof WeakSet ? U.add(s) : U.set(s, l), e = (s, U, l, d) => (GV(s, U, \"write to private field\"), d ? d.call(s, l) : U.set(s, l), l), h = (s, U, l) => (GV(s, U, \"access private method\"), l);\nvar VU = (s, U, l, d) => ({\n set _(t) {\n e(s, U, t, l);\n },\n get _() {\n return n(s, U, d);\n }\n});\nimport { shallowRef as Ea, watchEffect as Qb, toValue as dR, watch as CV, onBeforeUnmount as VN, defineComponent as ab, ref as Vb, toRef as Wb, computed as ib, openBlock as $c, createElementBlock as ln, Fragment as Rb, renderList as Nb, renderSlot as tR, createElementVNode as WN, normalizeStyle as hb, createCommentVNode as ZR } from \"vue\";\nvar eb = {\n /***/\n 9306: (\n /***/\n (s, U, l) => {\n var d = l(4901), t = l(6823), Z = TypeError;\n s.exports = function(F) {\n if (d(F)) return F;\n throw new Z(t(F) + \" is not a function\");\n };\n }\n ),\n /***/\n 3506: (\n /***/\n (s, U, l) => {\n var d = l(3925), t = String, Z = TypeError;\n s.exports = function(F) {\n if (d(F)) return F;\n throw new Z(\"Can't set \" + t(F) + \" as a prototype\");\n };\n }\n ),\n /***/\n 7080: (\n /***/\n (s, U, l) => {\n var d = l(4402).has;\n s.exports = function(t) {\n return d(t), t;\n };\n }\n ),\n /***/\n 679: (\n /***/\n (s, U, l) => {\n var d = l(1625), t = TypeError;\n s.exports = function(Z, F) {\n if (d(F, Z)) return Z;\n throw new t(\"Incorrect invocation\");\n };\n }\n ),\n /***/\n 8551: (\n /***/\n (s, U, l) => {\n var d = l(34), t = String, Z = TypeError;\n s.exports = function(F) {\n if (d(F)) return F;\n throw new Z(t(F) + \" is not an object\");\n };\n }\n ),\n /***/\n 7811: (\n /***/\n (s) => {\n s.exports = typeof ArrayBuffer < \"u\" && typeof DataView < \"u\";\n }\n ),\n /***/\n 7394: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(6706), Z = l(2195), F = d.ArrayBuffer, c = d.TypeError;\n s.exports = F && t(F.prototype, \"byteLength\", \"get\") || function(Q) {\n if (Z(Q) !== \"ArrayBuffer\") throw new c(\"ArrayBuffer expected\");\n return Q.byteLength;\n };\n }\n ),\n /***/\n 3238: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(7476), Z = l(7394), F = d.ArrayBuffer, c = F && F.prototype, Q = c && t(c.slice);\n s.exports = function(a) {\n if (Z(a) !== 0 || !Q) return !1;\n try {\n return Q(a, 0, 0), !1;\n } catch {\n return !0;\n }\n };\n }\n ),\n /***/\n 5169: (\n /***/\n (s, U, l) => {\n var d = l(3238), t = TypeError;\n s.exports = function(Z) {\n if (d(Z)) throw new t(\"ArrayBuffer is detached\");\n return Z;\n };\n }\n ),\n /***/\n 5636: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(9504), Z = l(6706), F = l(7696), c = l(5169), Q = l(7394), a = l(4483), V = l(1548), W = d.structuredClone, i = d.ArrayBuffer, R = d.DataView, N = Math.min, b = i.prototype, J = R.prototype, M = t(b.slice), G = Z(b, \"resizable\", \"get\"), T = Z(b, \"maxByteLength\", \"get\"), u = t(J.getInt8), X = t(J.setInt8);\n s.exports = (V || a) && function(Y, o, y) {\n var S = Q(Y), p = o === void 0 ? S : F(o), L = !G || !G(Y), I;\n if (c(Y), V && (Y = W(Y, { transfer: [Y] }), S === p && (y || L)))\n return Y;\n if (S >= p && (!y || L))\n I = M(Y, 0, p);\n else {\n var D = y && !L && T ? { maxByteLength: T(Y) } : void 0;\n I = new i(p, D);\n for (var r = new R(Y), w = new R(I), B = N(p, S), E = 0; E < B; E++) X(w, E, u(r, E));\n }\n return V || a(Y), I;\n };\n }\n ),\n /***/\n 4644: (\n /***/\n (s, U, l) => {\n var d = l(7811), t = l(3724), Z = l(4576), F = l(4901), c = l(34), Q = l(9297), a = l(6955), V = l(6823), W = l(6699), i = l(6840), R = l(2106), N = l(1625), b = l(2787), J = l(2967), M = l(8227), G = l(3392), T = l(1181), u = T.enforce, X = T.get, Y = Z.Int8Array, o = Y && Y.prototype, y = Z.Uint8ClampedArray, S = y && y.prototype, p = Y && b(Y), L = o && b(o), I = Object.prototype, D = Z.TypeError, r = M(\"toStringTag\"), w = G(\"TYPED_ARRAY_TAG\"), B = \"TypedArrayConstructor\", E = d && !!J && a(Z.opera) !== \"Opera\", g = !1, Rl, Nl, gl, bl = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n }, Jl = {\n BigInt64Array: 8,\n BigUint64Array: 8\n }, Td = function(yl) {\n if (!c(yl)) return !1;\n var Ll = a(yl);\n return Ll === \"DataView\" || Q(bl, Ll) || Q(Jl, Ll);\n }, uU = function(A) {\n var yl = b(A);\n if (c(yl)) {\n var Ll = X(yl);\n return Ll && Q(Ll, B) ? Ll[B] : uU(yl);\n }\n }, O = function(A) {\n if (!c(A)) return !1;\n var yl = a(A);\n return Q(bl, yl) || Q(Jl, yl);\n }, k = function(A) {\n if (O(A)) return A;\n throw new D(\"Target is not a typed array\");\n }, j = function(A) {\n if (F(A) && (!J || N(p, A))) return A;\n throw new D(V(A) + \" is not a typed array constructor\");\n }, dl = function(A, yl, Ll, Sd) {\n if (t) {\n if (Ll) for (var MU in bl) {\n var _l = Z[MU];\n if (_l && Q(_l.prototype, A)) try {\n delete _l.prototype[A];\n } catch {\n try {\n _l.prototype[A] = yl;\n } catch {\n }\n }\n }\n (!L[A] || Ll) && i(L, A, Ll ? yl : E && o[A] || yl, Sd);\n }\n }, Xl = function(A, yl, Ll) {\n var Sd, MU;\n if (t) {\n if (J) {\n if (Ll) {\n for (Sd in bl)\n if (MU = Z[Sd], MU && Q(MU, A)) try {\n delete MU[A];\n } catch {\n }\n }\n if (!p[A] || Ll)\n try {\n return i(p, A, Ll ? yl : E && p[A] || yl);\n } catch {\n }\n else return;\n }\n for (Sd in bl)\n MU = Z[Sd], MU && (!MU[A] || Ll) && i(MU, A, yl);\n }\n };\n for (Rl in bl)\n Nl = Z[Rl], gl = Nl && Nl.prototype, gl ? u(gl)[B] = Nl : E = !1;\n for (Rl in Jl)\n Nl = Z[Rl], gl = Nl && Nl.prototype, gl && (u(gl)[B] = Nl);\n if ((!E || !F(p) || p === Function.prototype) && (p = function() {\n throw new D(\"Incorrect invocation\");\n }, E))\n for (Rl in bl)\n Z[Rl] && J(Z[Rl], p);\n if ((!E || !L || L === I) && (L = p.prototype, E))\n for (Rl in bl)\n Z[Rl] && J(Z[Rl].prototype, L);\n if (E && b(S) !== L && J(S, L), t && !Q(L, r)) {\n g = !0, R(L, r, {\n configurable: !0,\n get: function() {\n return c(this) ? this[w] : void 0;\n }\n });\n for (Rl in bl) Z[Rl] && W(Z[Rl], w, Rl);\n }\n s.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: E,\n TYPED_ARRAY_TAG: g && w,\n aTypedArray: k,\n aTypedArrayConstructor: j,\n exportTypedArrayMethod: dl,\n exportTypedArrayStaticMethod: Xl,\n getTypedArrayConstructor: uU,\n isView: Td,\n isTypedArray: O,\n TypedArray: p,\n TypedArrayPrototype: L\n };\n }\n ),\n /***/\n 5370: (\n /***/\n (s, U, l) => {\n var d = l(6198);\n s.exports = function(t, Z, F) {\n for (var c = 0, Q = arguments.length > 2 ? F : d(Z), a = new t(Q); Q > c; ) a[c] = Z[c++];\n return a;\n };\n }\n ),\n /***/\n 9617: (\n /***/\n (s, U, l) => {\n var d = l(5397), t = l(5610), Z = l(6198), F = function(c) {\n return function(Q, a, V) {\n var W = d(Q), i = Z(W);\n if (i === 0) return !c && -1;\n var R = t(V, i), N;\n if (c && a !== a) {\n for (; i > R; )\n if (N = W[R++], N !== N) return !0;\n } else for (; i > R; R++)\n if ((c || R in W) && W[R] === a) return c || R || 0;\n return !c && -1;\n };\n };\n s.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: F(!0),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: F(!1)\n };\n }\n ),\n /***/\n 4527: (\n /***/\n (s, U, l) => {\n var d = l(3724), t = l(4376), Z = TypeError, F = Object.getOwnPropertyDescriptor, c = d && !function() {\n if (this !== void 0) return !0;\n try {\n Object.defineProperty([], \"length\", { writable: !1 }).length = 1;\n } catch (Q) {\n return Q instanceof TypeError;\n }\n }();\n s.exports = c ? function(Q, a) {\n if (t(Q) && !F(Q, \"length\").writable)\n throw new Z(\"Cannot set read only .length\");\n return Q.length = a;\n } : function(Q, a) {\n return Q.length = a;\n };\n }\n ),\n /***/\n 7628: (\n /***/\n (s, U, l) => {\n var d = l(6198);\n s.exports = function(t, Z) {\n for (var F = d(t), c = new Z(F), Q = 0; Q < F; Q++) c[Q] = t[F - Q - 1];\n return c;\n };\n }\n ),\n /***/\n 9928: (\n /***/\n (s, U, l) => {\n var d = l(6198), t = l(1291), Z = RangeError;\n s.exports = function(F, c, Q, a) {\n var V = d(F), W = t(Q), i = W < 0 ? V + W : W;\n if (i >= V || i < 0) throw new Z(\"Incorrect index\");\n for (var R = new c(V), N = 0; N < V; N++) R[N] = N === i ? a : F[N];\n return R;\n };\n }\n ),\n /***/\n 6319: (\n /***/\n (s, U, l) => {\n var d = l(8551), t = l(9539);\n s.exports = function(Z, F, c, Q) {\n try {\n return Q ? F(d(c)[0], c[1]) : F(c);\n } catch (a) {\n t(Z, \"throw\", a);\n }\n };\n }\n ),\n /***/\n 2195: (\n /***/\n (s, U, l) => {\n var d = l(9504), t = d({}.toString), Z = d(\"\".slice);\n s.exports = function(F) {\n return Z(t(F), 8, -1);\n };\n }\n ),\n /***/\n 6955: (\n /***/\n (s, U, l) => {\n var d = l(2140), t = l(4901), Z = l(2195), F = l(8227), c = F(\"toStringTag\"), Q = Object, a = Z(/* @__PURE__ */ function() {\n return arguments;\n }()) === \"Arguments\", V = function(W, i) {\n try {\n return W[i];\n } catch {\n }\n };\n s.exports = d ? Z : function(W) {\n var i, R, N;\n return W === void 0 ? \"Undefined\" : W === null ? \"Null\" : typeof (R = V(i = Q(W), c)) == \"string\" ? R : a ? Z(i) : (N = Z(i)) === \"Object\" && t(i.callee) ? \"Arguments\" : N;\n };\n }\n ),\n /***/\n 7740: (\n /***/\n (s, U, l) => {\n var d = l(9297), t = l(5031), Z = l(7347), F = l(4913);\n s.exports = function(c, Q, a) {\n for (var V = t(Q), W = F.f, i = Z.f, R = 0; R < V.length; R++) {\n var N = V[R];\n !d(c, N) && !(a && d(a, N)) && W(c, N, i(Q, N));\n }\n };\n }\n ),\n /***/\n 2211: (\n /***/\n (s, U, l) => {\n var d = l(9039);\n s.exports = !d(function() {\n function t() {\n }\n return t.prototype.constructor = null, Object.getPrototypeOf(new t()) !== t.prototype;\n });\n }\n ),\n /***/\n 2529: (\n /***/\n (s) => {\n s.exports = function(U, l) {\n return { value: U, done: l };\n };\n }\n ),\n /***/\n 6699: (\n /***/\n (s, U, l) => {\n var d = l(3724), t = l(4913), Z = l(6980);\n s.exports = d ? function(F, c, Q) {\n return t.f(F, c, Z(1, Q));\n } : function(F, c, Q) {\n return F[c] = Q, F;\n };\n }\n ),\n /***/\n 6980: (\n /***/\n (s) => {\n s.exports = function(U, l) {\n return {\n enumerable: !(U & 1),\n configurable: !(U & 2),\n writable: !(U & 4),\n value: l\n };\n };\n }\n ),\n /***/\n 4659: (\n /***/\n (s, U, l) => {\n var d = l(3724), t = l(4913), Z = l(6980);\n s.exports = function(F, c, Q) {\n d ? t.f(F, c, Z(0, Q)) : F[c] = Q;\n };\n }\n ),\n /***/\n 2106: (\n /***/\n (s, U, l) => {\n var d = l(283), t = l(4913);\n s.exports = function(Z, F, c) {\n return c.get && d(c.get, F, { getter: !0 }), c.set && d(c.set, F, { setter: !0 }), t.f(Z, F, c);\n };\n }\n ),\n /***/\n 6840: (\n /***/\n (s, U, l) => {\n var d = l(4901), t = l(4913), Z = l(283), F = l(9433);\n s.exports = function(c, Q, a, V) {\n V || (V = {});\n var W = V.enumerable, i = V.name !== void 0 ? V.name : Q;\n if (d(a) && Z(a, i, V), V.global)\n W ? c[Q] = a : F(Q, a);\n else {\n try {\n V.unsafe ? c[Q] && (W = !0) : delete c[Q];\n } catch {\n }\n W ? c[Q] = a : t.f(c, Q, {\n value: a,\n enumerable: !1,\n configurable: !V.nonConfigurable,\n writable: !V.nonWritable\n });\n }\n return c;\n };\n }\n ),\n /***/\n 6279: (\n /***/\n (s, U, l) => {\n var d = l(6840);\n s.exports = function(t, Z, F) {\n for (var c in Z) d(t, c, Z[c], F);\n return t;\n };\n }\n ),\n /***/\n 9433: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = Object.defineProperty;\n s.exports = function(Z, F) {\n try {\n t(d, Z, { value: F, configurable: !0, writable: !0 });\n } catch {\n d[Z] = F;\n }\n return F;\n };\n }\n ),\n /***/\n 3724: (\n /***/\n (s, U, l) => {\n var d = l(9039);\n s.exports = !d(function() {\n return Object.defineProperty({}, 1, { get: function() {\n return 7;\n } })[1] !== 7;\n });\n }\n ),\n /***/\n 4483: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(9429), Z = l(1548), F = d.structuredClone, c = d.ArrayBuffer, Q = d.MessageChannel, a = !1, V, W, i, R;\n if (Z)\n a = function(N) {\n F(N, { transfer: [N] });\n };\n else if (c) try {\n Q || (V = t(\"worker_threads\"), V && (Q = V.MessageChannel)), Q && (W = new Q(), i = new c(2), R = function(N) {\n W.port1.postMessage(null, [N]);\n }, i.byteLength === 2 && (R(i), i.byteLength === 0 && (a = R)));\n } catch {\n }\n s.exports = a;\n }\n ),\n /***/\n 4055: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(34), Z = d.document, F = t(Z) && t(Z.createElement);\n s.exports = function(c) {\n return F ? Z.createElement(c) : {};\n };\n }\n ),\n /***/\n 6837: (\n /***/\n (s) => {\n var U = TypeError, l = 9007199254740991;\n s.exports = function(d) {\n if (d > l) throw U(\"Maximum allowed index exceeded\");\n return d;\n };\n }\n ),\n /***/\n 5002: (\n /***/\n (s) => {\n s.exports = {\n IndexSizeError: { s: \"INDEX_SIZE_ERR\", c: 1, m: 1 },\n DOMStringSizeError: { s: \"DOMSTRING_SIZE_ERR\", c: 2, m: 0 },\n HierarchyRequestError: { s: \"HIERARCHY_REQUEST_ERR\", c: 3, m: 1 },\n WrongDocumentError: { s: \"WRONG_DOCUMENT_ERR\", c: 4, m: 1 },\n InvalidCharacterError: { s: \"INVALID_CHARACTER_ERR\", c: 5, m: 1 },\n NoDataAllowedError: { s: \"NO_DATA_ALLOWED_ERR\", c: 6, m: 0 },\n NoModificationAllowedError: { s: \"NO_MODIFICATION_ALLOWED_ERR\", c: 7, m: 1 },\n NotFoundError: { s: \"NOT_FOUND_ERR\", c: 8, m: 1 },\n NotSupportedError: { s: \"NOT_SUPPORTED_ERR\", c: 9, m: 1 },\n InUseAttributeError: { s: \"INUSE_ATTRIBUTE_ERR\", c: 10, m: 1 },\n InvalidStateError: { s: \"INVALID_STATE_ERR\", c: 11, m: 1 },\n SyntaxError: { s: \"SYNTAX_ERR\", c: 12, m: 1 },\n InvalidModificationError: { s: \"INVALID_MODIFICATION_ERR\", c: 13, m: 1 },\n NamespaceError: { s: \"NAMESPACE_ERR\", c: 14, m: 1 },\n InvalidAccessError: { s: \"INVALID_ACCESS_ERR\", c: 15, m: 1 },\n ValidationError: { s: \"VALIDATION_ERR\", c: 16, m: 0 },\n TypeMismatchError: { s: \"TYPE_MISMATCH_ERR\", c: 17, m: 1 },\n SecurityError: { s: \"SECURITY_ERR\", c: 18, m: 1 },\n NetworkError: { s: \"NETWORK_ERR\", c: 19, m: 1 },\n AbortError: { s: \"ABORT_ERR\", c: 20, m: 1 },\n URLMismatchError: { s: \"URL_MISMATCH_ERR\", c: 21, m: 1 },\n QuotaExceededError: { s: \"QUOTA_EXCEEDED_ERR\", c: 22, m: 1 },\n TimeoutError: { s: \"TIMEOUT_ERR\", c: 23, m: 1 },\n InvalidNodeTypeError: { s: \"INVALID_NODE_TYPE_ERR\", c: 24, m: 1 },\n DataCloneError: { s: \"DATA_CLONE_ERR\", c: 25, m: 1 }\n };\n }\n ),\n /***/\n 8727: (\n /***/\n (s) => {\n s.exports = [\n \"constructor\",\n \"hasOwnProperty\",\n \"isPrototypeOf\",\n \"propertyIsEnumerable\",\n \"toLocaleString\",\n \"toString\",\n \"valueOf\"\n ];\n }\n ),\n /***/\n 6193: (\n /***/\n (s, U, l) => {\n var d = l(4215);\n s.exports = d === \"NODE\";\n }\n ),\n /***/\n 2839: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = d.navigator, Z = t && t.userAgent;\n s.exports = Z ? String(Z) : \"\";\n }\n ),\n /***/\n 9519: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(2839), Z = d.process, F = d.Deno, c = Z && Z.versions || F && F.version, Q = c && c.v8, a, V;\n Q && (a = Q.split(\".\"), V = a[0] > 0 && a[0] < 4 ? 1 : +(a[0] + a[1])), !V && t && (a = t.match(/Edge\\/(\\d+)/), (!a || a[1] >= 74) && (a = t.match(/Chrome\\/(\\d+)/), a && (V = +a[1]))), s.exports = V;\n }\n ),\n /***/\n 4215: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(2839), Z = l(2195), F = function(c) {\n return t.slice(0, c.length) === c;\n };\n s.exports = function() {\n return F(\"Bun/\") ? \"BUN\" : F(\"Cloudflare-Workers\") ? \"CLOUDFLARE\" : F(\"Deno/\") ? \"DENO\" : F(\"Node.js/\") ? \"NODE\" : d.Bun && typeof Bun.version == \"string\" ? \"BUN\" : d.Deno && typeof Deno.version == \"object\" ? \"DENO\" : Z(d.process) === \"process\" ? \"NODE\" : d.window && d.document ? \"BROWSER\" : \"REST\";\n }();\n }\n ),\n /***/\n 8574: (\n /***/\n (s, U, l) => {\n var d = l(9504), t = Error, Z = d(\"\".replace), F = function(a) {\n return String(new t(a).stack);\n }(\"zxcasd\"), c = /\\n\\s*at [^:]*:[^\\n]*/, Q = c.test(F);\n s.exports = function(a, V) {\n if (Q && typeof a == \"string\" && !t.prepareStackTrace)\n for (; V--; ) a = Z(a, c, \"\");\n return a;\n };\n }\n ),\n /***/\n 6518: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(7347).f, Z = l(6699), F = l(6840), c = l(9433), Q = l(7740), a = l(2796);\n s.exports = function(V, W) {\n var i = V.target, R = V.global, N = V.stat, b, J, M, G, T, u;\n if (R ? J = d : N ? J = d[i] || c(i, {}) : J = d[i] && d[i].prototype, J) for (M in W) {\n if (T = W[M], V.dontCallGetSet ? (u = t(J, M), G = u && u.value) : G = J[M], b = a(R ? M : i + (N ? \".\" : \"#\") + M, V.forced), !b && G !== void 0) {\n if (typeof T == typeof G) continue;\n Q(T, G);\n }\n (V.sham || G && G.sham) && Z(T, \"sham\", !0), F(J, M, T, V);\n }\n };\n }\n ),\n /***/\n 9039: (\n /***/\n (s) => {\n s.exports = function(U) {\n try {\n return !!U();\n } catch {\n return !0;\n }\n };\n }\n ),\n /***/\n 6080: (\n /***/\n (s, U, l) => {\n var d = l(7476), t = l(9306), Z = l(616), F = d(d.bind);\n s.exports = function(c, Q) {\n return t(c), Q === void 0 ? c : Z ? F(c, Q) : function() {\n return c.apply(Q, arguments);\n };\n };\n }\n ),\n /***/\n 616: (\n /***/\n (s, U, l) => {\n var d = l(9039);\n s.exports = !d(function() {\n var t = (function() {\n }).bind();\n return typeof t != \"function\" || t.hasOwnProperty(\"prototype\");\n });\n }\n ),\n /***/\n 9565: (\n /***/\n (s, U, l) => {\n var d = l(616), t = Function.prototype.call;\n s.exports = d ? t.bind(t) : function() {\n return t.apply(t, arguments);\n };\n }\n ),\n /***/\n 350: (\n /***/\n (s, U, l) => {\n var d = l(3724), t = l(9297), Z = Function.prototype, F = d && Object.getOwnPropertyDescriptor, c = t(Z, \"name\"), Q = c && (function() {\n }).name === \"something\", a = c && (!d || d && F(Z, \"name\").configurable);\n s.exports = {\n EXISTS: c,\n PROPER: Q,\n CONFIGURABLE: a\n };\n }\n ),\n /***/\n 6706: (\n /***/\n (s, U, l) => {\n var d = l(9504), t = l(9306);\n s.exports = function(Z, F, c) {\n try {\n return d(t(Object.getOwnPropertyDescriptor(Z, F)[c]));\n } catch {\n }\n };\n }\n ),\n /***/\n 7476: (\n /***/\n (s, U, l) => {\n var d = l(2195), t = l(9504);\n s.exports = function(Z) {\n if (d(Z) === \"Function\") return t(Z);\n };\n }\n ),\n /***/\n 9504: (\n /***/\n (s, U, l) => {\n var d = l(616), t = Function.prototype, Z = t.call, F = d && t.bind.bind(Z, Z);\n s.exports = d ? F : function(c) {\n return function() {\n return Z.apply(c, arguments);\n };\n };\n }\n ),\n /***/\n 9429: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(6193);\n s.exports = function(Z) {\n if (t) {\n try {\n return d.process.getBuiltinModule(Z);\n } catch {\n }\n try {\n return Function('return require(\"' + Z + '\")')();\n } catch {\n }\n }\n };\n }\n ),\n /***/\n 7751: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(4901), Z = function(F) {\n return t(F) ? F : void 0;\n };\n s.exports = function(F, c) {\n return arguments.length < 2 ? Z(d[F]) : d[F] && d[F][c];\n };\n }\n ),\n /***/\n 1767: (\n /***/\n (s) => {\n s.exports = function(U) {\n return {\n iterator: U,\n next: U.next,\n done: !1\n };\n };\n }\n ),\n /***/\n 8646: (\n /***/\n (s, U, l) => {\n var d = l(9565), t = l(8551), Z = l(1767), F = l(851);\n s.exports = function(c, Q) {\n (!Q || typeof c != \"string\") && t(c);\n var a = F(c);\n return Z(t(a !== void 0 ? d(a, c) : c));\n };\n }\n ),\n /***/\n 851: (\n /***/\n (s, U, l) => {\n var d = l(6955), t = l(5966), Z = l(4117), F = l(6269), c = l(8227), Q = c(\"iterator\");\n s.exports = function(a) {\n if (!Z(a)) return t(a, Q) || t(a, \"@@iterator\") || F[d(a)];\n };\n }\n ),\n /***/\n 81: (\n /***/\n (s, U, l) => {\n var d = l(9565), t = l(9306), Z = l(8551), F = l(6823), c = l(851), Q = TypeError;\n s.exports = function(a, V) {\n var W = arguments.length < 2 ? c(a) : V;\n if (t(W)) return Z(d(W, a));\n throw new Q(F(a) + \" is not iterable\");\n };\n }\n ),\n /***/\n 5966: (\n /***/\n (s, U, l) => {\n var d = l(9306), t = l(4117);\n s.exports = function(Z, F) {\n var c = Z[F];\n return t(c) ? void 0 : d(c);\n };\n }\n ),\n /***/\n 3789: (\n /***/\n (s, U, l) => {\n var d = l(9306), t = l(8551), Z = l(9565), F = l(1291), c = l(1767), Q = \"Invalid size\", a = RangeError, V = TypeError, W = Math.max, i = function(R, N) {\n this.set = R, this.size = W(N, 0), this.has = d(R.has), this.keys = d(R.keys);\n };\n i.prototype = {\n getIterator: function() {\n return c(t(Z(this.keys, this.set)));\n },\n includes: function(R) {\n return Z(this.has, this.set, R);\n }\n }, s.exports = function(R) {\n t(R);\n var N = +R.size;\n if (N !== N) throw new V(Q);\n var b = F(N);\n if (b < 0) throw new a(Q);\n return new i(R, b);\n };\n }\n ),\n /***/\n 4576: (\n /***/\n function(s) {\n var U = function(l) {\n return l && l.Math === Math && l;\n };\n s.exports = // eslint-disable-next-line es/no-global-this -- safe\n U(typeof globalThis == \"object\" && globalThis) || U(typeof window == \"object\" && window) || // eslint-disable-next-line no-restricted-globals -- safe\n U(typeof self == \"object\" && self) || U(typeof global == \"object\" && global) || U(typeof this == \"object\" && this) || // eslint-disable-next-line no-new-func -- fallback\n /* @__PURE__ */ function() {\n return this;\n }() || Function(\"return this\")();\n }\n ),\n /***/\n 9297: (\n /***/\n (s, U, l) => {\n var d = l(9504), t = l(8981), Z = d({}.hasOwnProperty);\n s.exports = Object.hasOwn || function(c, Q) {\n return Z(t(c), Q);\n };\n }\n ),\n /***/\n 421: (\n /***/\n (s) => {\n s.exports = {};\n }\n ),\n /***/\n 397: (\n /***/\n (s, U, l) => {\n var d = l(7751);\n s.exports = d(\"document\", \"documentElement\");\n }\n ),\n /***/\n 5917: (\n /***/\n (s, U, l) => {\n var d = l(3724), t = l(9039), Z = l(4055);\n s.exports = !d && !t(function() {\n return Object.defineProperty(Z(\"div\"), \"a\", {\n get: function() {\n return 7;\n }\n }).a !== 7;\n });\n }\n ),\n /***/\n 7055: (\n /***/\n (s, U, l) => {\n var d = l(9504), t = l(9039), Z = l(2195), F = Object, c = d(\"\".split);\n s.exports = t(function() {\n return !F(\"z\").propertyIsEnumerable(0);\n }) ? function(Q) {\n return Z(Q) === \"String\" ? c(Q, \"\") : F(Q);\n } : F;\n }\n ),\n /***/\n 3167: (\n /***/\n (s, U, l) => {\n var d = l(4901), t = l(34), Z = l(2967);\n s.exports = function(F, c, Q) {\n var a, V;\n return (\n // it can work only with native `setPrototypeOf`\n Z && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n d(a = c.constructor) && a !== Q && t(V = a.prototype) && V !== Q.prototype && Z(F, V), F\n );\n };\n }\n ),\n /***/\n 3706: (\n /***/\n (s, U, l) => {\n var d = l(9504), t = l(4901), Z = l(7629), F = d(Function.toString);\n t(Z.inspectSource) || (Z.inspectSource = function(c) {\n return F(c);\n }), s.exports = Z.inspectSource;\n }\n ),\n /***/\n 1181: (\n /***/\n (s, U, l) => {\n var d = l(8622), t = l(4576), Z = l(34), F = l(6699), c = l(9297), Q = l(7629), a = l(6119), V = l(421), W = \"Object already initialized\", i = t.TypeError, R = t.WeakMap, N, b, J, M = function(X) {\n return J(X) ? b(X) : N(X, {});\n }, G = function(X) {\n return function(Y) {\n var o;\n if (!Z(Y) || (o = b(Y)).type !== X)\n throw new i(\"Incompatible receiver, \" + X + \" required\");\n return o;\n };\n };\n if (d || Q.state) {\n var T = Q.state || (Q.state = new R());\n T.get = T.get, T.has = T.has, T.set = T.set, N = function(X, Y) {\n if (T.has(X)) throw new i(W);\n return Y.facade = X, T.set(X, Y), Y;\n }, b = function(X) {\n return T.get(X) || {};\n }, J = function(X) {\n return T.has(X);\n };\n } else {\n var u = a(\"state\");\n V[u] = !0, N = function(X, Y) {\n if (c(X, u)) throw new i(W);\n return Y.facade = X, F(X, u, Y), Y;\n }, b = function(X) {\n return c(X, u) ? X[u] : {};\n }, J = function(X) {\n return c(X, u);\n };\n }\n s.exports = {\n set: N,\n get: b,\n has: J,\n enforce: M,\n getterFor: G\n };\n }\n ),\n /***/\n 4209: (\n /***/\n (s, U, l) => {\n var d = l(8227), t = l(6269), Z = d(\"iterator\"), F = Array.prototype;\n s.exports = function(c) {\n return c !== void 0 && (t.Array === c || F[Z] === c);\n };\n }\n ),\n /***/\n 4376: (\n /***/\n (s, U, l) => {\n var d = l(2195);\n s.exports = Array.isArray || function(Z) {\n return d(Z) === \"Array\";\n };\n }\n ),\n /***/\n 1108: (\n /***/\n (s, U, l) => {\n var d = l(6955);\n s.exports = function(t) {\n var Z = d(t);\n return Z === \"BigInt64Array\" || Z === \"BigUint64Array\";\n };\n }\n ),\n /***/\n 4901: (\n /***/\n (s) => {\n var U = typeof document == \"object\" && document.all;\n s.exports = typeof U > \"u\" && U !== void 0 ? function(l) {\n return typeof l == \"function\" || l === U;\n } : function(l) {\n return typeof l == \"function\";\n };\n }\n ),\n /***/\n 2796: (\n /***/\n (s, U, l) => {\n var d = l(9039), t = l(4901), Z = /#|\\.prototype\\./, F = function(W, i) {\n var R = Q[c(W)];\n return R === V ? !0 : R === a ? !1 : t(i) ? d(i) : !!i;\n }, c = F.normalize = function(W) {\n return String(W).replace(Z, \".\").toLowerCase();\n }, Q = F.data = {}, a = F.NATIVE = \"N\", V = F.POLYFILL = \"P\";\n s.exports = F;\n }\n ),\n /***/\n 4117: (\n /***/\n (s) => {\n s.exports = function(U) {\n return U == null;\n };\n }\n ),\n /***/\n 34: (\n /***/\n (s, U, l) => {\n var d = l(4901);\n s.exports = function(t) {\n return typeof t == \"object\" ? t !== null : d(t);\n };\n }\n ),\n /***/\n 3925: (\n /***/\n (s, U, l) => {\n var d = l(34);\n s.exports = function(t) {\n return d(t) || t === null;\n };\n }\n ),\n /***/\n 6395: (\n /***/\n (s) => {\n s.exports = !1;\n }\n ),\n /***/\n 757: (\n /***/\n (s, U, l) => {\n var d = l(7751), t = l(4901), Z = l(1625), F = l(7040), c = Object;\n s.exports = F ? function(Q) {\n return typeof Q == \"symbol\";\n } : function(Q) {\n var a = d(\"Symbol\");\n return t(a) && Z(a.prototype, c(Q));\n };\n }\n ),\n /***/\n 507: (\n /***/\n (s, U, l) => {\n var d = l(9565);\n s.exports = function(t, Z, F) {\n for (var c = F ? t : t.iterator, Q = t.next, a, V; !(a = d(Q, c)).done; )\n if (V = Z(a.value), V !== void 0) return V;\n };\n }\n ),\n /***/\n 2652: (\n /***/\n (s, U, l) => {\n var d = l(6080), t = l(9565), Z = l(8551), F = l(6823), c = l(4209), Q = l(6198), a = l(1625), V = l(81), W = l(851), i = l(9539), R = TypeError, N = function(J, M) {\n this.stopped = J, this.result = M;\n }, b = N.prototype;\n s.exports = function(J, M, G) {\n var T = G && G.that, u = !!(G && G.AS_ENTRIES), X = !!(G && G.IS_RECORD), Y = !!(G && G.IS_ITERATOR), o = !!(G && G.INTERRUPTED), y = d(M, T), S, p, L, I, D, r, w, B = function(g) {\n return S && i(S, \"normal\", g), new N(!0, g);\n }, E = function(g) {\n return u ? (Z(g), o ? y(g[0], g[1], B) : y(g[0], g[1])) : o ? y(g, B) : y(g);\n };\n if (X)\n S = J.iterator;\n else if (Y)\n S = J;\n else {\n if (p = W(J), !p) throw new R(F(J) + \" is not iterable\");\n if (c(p)) {\n for (L = 0, I = Q(J); I > L; L++)\n if (D = E(J[L]), D && a(b, D)) return D;\n return new N(!1);\n }\n S = V(J, p);\n }\n for (r = X ? J.next : S.next; !(w = t(r, S)).done; ) {\n try {\n D = E(w.value);\n } catch (g) {\n i(S, \"throw\", g);\n }\n if (typeof D == \"object\" && D && a(b, D)) return D;\n }\n return new N(!1);\n };\n }\n ),\n /***/\n 9539: (\n /***/\n (s, U, l) => {\n var d = l(9565), t = l(8551), Z = l(5966);\n s.exports = function(F, c, Q) {\n var a, V;\n t(F);\n try {\n if (a = Z(F, \"return\"), !a) {\n if (c === \"throw\") throw Q;\n return Q;\n }\n a = d(a, F);\n } catch (W) {\n V = !0, a = W;\n }\n if (c === \"throw\") throw Q;\n if (V) throw a;\n return t(a), Q;\n };\n }\n ),\n /***/\n 9462: (\n /***/\n (s, U, l) => {\n var d = l(9565), t = l(2360), Z = l(6699), F = l(6279), c = l(8227), Q = l(1181), a = l(5966), V = l(7657).IteratorPrototype, W = l(2529), i = l(9539), R = c(\"toStringTag\"), N = \"IteratorHelper\", b = \"WrapForValidIterator\", J = Q.set, M = function(u) {\n var X = Q.getterFor(u ? b : N);\n return F(t(V), {\n next: function() {\n var o = X(this);\n if (u) return o.nextHandler();\n try {\n var y = o.done ? void 0 : o.nextHandler();\n return W(y, o.done);\n } catch (S) {\n throw o.done = !0, S;\n }\n },\n return: function() {\n var Y = X(this), o = Y.iterator;\n if (Y.done = !0, u) {\n var y = a(o, \"return\");\n return y ? d(y, o) : W(void 0, !0);\n }\n if (Y.inner) try {\n i(Y.inner.iterator, \"normal\");\n } catch (S) {\n return i(o, \"throw\", S);\n }\n return i(o, \"normal\"), W(void 0, !0);\n }\n });\n }, G = M(!0), T = M(!1);\n Z(T, R, \"Iterator Helper\"), s.exports = function(u, X) {\n var Y = function(y, S) {\n S ? (S.iterator = y.iterator, S.next = y.next) : S = y, S.type = X ? b : N, S.nextHandler = u, S.counter = 0, S.done = !1, J(this, S);\n };\n return Y.prototype = X ? G : T, Y;\n };\n }\n ),\n /***/\n 713: (\n /***/\n (s, U, l) => {\n var d = l(9565), t = l(9306), Z = l(8551), F = l(1767), c = l(9462), Q = l(6319), a = c(function() {\n var V = this.iterator, W = Z(d(this.next, V)), i = this.done = !!W.done;\n if (!i) return Q(V, this.mapper, [W.value, this.counter++], !0);\n });\n s.exports = function(W) {\n return Z(this), t(W), new a(F(this), {\n mapper: W\n });\n };\n }\n ),\n /***/\n 7657: (\n /***/\n (s, U, l) => {\n var d = l(9039), t = l(4901), Z = l(34), F = l(2360), c = l(2787), Q = l(6840), a = l(8227), V = l(6395), W = a(\"iterator\"), i = !1, R, N, b;\n [].keys && (b = [].keys(), \"next\" in b ? (N = c(c(b)), N !== Object.prototype && (R = N)) : i = !0);\n var J = !Z(R) || d(function() {\n var M = {};\n return R[W].call(M) !== M;\n });\n J ? R = {} : V && (R = F(R)), t(R[W]) || Q(R, W, function() {\n return this;\n }), s.exports = {\n IteratorPrototype: R,\n BUGGY_SAFARI_ITERATORS: i\n };\n }\n ),\n /***/\n 6269: (\n /***/\n (s) => {\n s.exports = {};\n }\n ),\n /***/\n 6198: (\n /***/\n (s, U, l) => {\n var d = l(8014);\n s.exports = function(t) {\n return d(t.length);\n };\n }\n ),\n /***/\n 283: (\n /***/\n (s, U, l) => {\n var d = l(9504), t = l(9039), Z = l(4901), F = l(9297), c = l(3724), Q = l(350).CONFIGURABLE, a = l(3706), V = l(1181), W = V.enforce, i = V.get, R = String, N = Object.defineProperty, b = d(\"\".slice), J = d(\"\".replace), M = d([].join), G = c && !t(function() {\n return N(function() {\n }, \"length\", { value: 8 }).length !== 8;\n }), T = String(String).split(\"String\"), u = s.exports = function(X, Y, o) {\n b(R(Y), 0, 7) === \"Symbol(\" && (Y = \"[\" + J(R(Y), /^Symbol\\(([^)]*)\\).*$/, \"$1\") + \"]\"), o && o.getter && (Y = \"get \" + Y), o && o.setter && (Y = \"set \" + Y), (!F(X, \"name\") || Q && X.name !== Y) && (c ? N(X, \"name\", { value: Y, configurable: !0 }) : X.name = Y), G && o && F(o, \"arity\") && X.length !== o.arity && N(X, \"length\", { value: o.arity });\n try {\n o && F(o, \"constructor\") && o.constructor ? c && N(X, \"prototype\", { writable: !1 }) : X.prototype && (X.prototype = void 0);\n } catch {\n }\n var y = W(X);\n return F(y, \"source\") || (y.source = M(T, typeof Y == \"string\" ? Y : \"\")), X;\n };\n Function.prototype.toString = u(function() {\n return Z(this) && i(this).source || a(this);\n }, \"toString\");\n }\n ),\n /***/\n 741: (\n /***/\n (s) => {\n var U = Math.ceil, l = Math.floor;\n s.exports = Math.trunc || function(t) {\n var Z = +t;\n return (Z > 0 ? l : U)(Z);\n };\n }\n ),\n /***/\n 6043: (\n /***/\n (s, U, l) => {\n var d = l(9306), t = TypeError, Z = function(F) {\n var c, Q;\n this.promise = new F(function(a, V) {\n if (c !== void 0 || Q !== void 0) throw new t(\"Bad Promise constructor\");\n c = a, Q = V;\n }), this.resolve = d(c), this.reject = d(Q);\n };\n s.exports.f = function(F) {\n return new Z(F);\n };\n }\n ),\n /***/\n 2603: (\n /***/\n (s, U, l) => {\n var d = l(655);\n s.exports = function(t, Z) {\n return t === void 0 ? arguments.length < 2 ? \"\" : Z : d(t);\n };\n }\n ),\n /***/\n 4149: (\n /***/\n (s) => {\n var U = RangeError;\n s.exports = function(l) {\n if (l === l) return l;\n throw new U(\"NaN is not allowed\");\n };\n }\n ),\n /***/\n 2360: (\n /***/\n (s, U, l) => {\n var d = l(8551), t = l(6801), Z = l(8727), F = l(421), c = l(397), Q = l(4055), a = l(6119), V = \">\", W = \"<\", i = \"prototype\", R = \"script\", N = a(\"IE_PROTO\"), b = function() {\n }, J = function(X) {\n return W + R + V + X + W + \"/\" + R + V;\n }, M = function(X) {\n X.write(J(\"\")), X.close();\n var Y = X.parentWindow.Object;\n return X = null, Y;\n }, G = function() {\n var X = Q(\"iframe\"), Y = \"java\" + R + \":\", o;\n return X.style.display = \"none\", c.appendChild(X), X.src = String(Y), o = X.contentWindow.document, o.open(), o.write(J(\"document.F=Object\")), o.close(), o.F;\n }, T, u = function() {\n try {\n T = new ActiveXObject(\"htmlfile\");\n } catch {\n }\n u = typeof document < \"u\" ? document.domain && T ? M(T) : G() : M(T);\n for (var X = Z.length; X--; ) delete u[i][Z[X]];\n return u();\n };\n F[N] = !0, s.exports = Object.create || function(Y, o) {\n var y;\n return Y !== null ? (b[i] = d(Y), y = new b(), b[i] = null, y[N] = Y) : y = u(), o === void 0 ? y : t.f(y, o);\n };\n }\n ),\n /***/\n 6801: (\n /***/\n (s, U, l) => {\n var d = l(3724), t = l(8686), Z = l(4913), F = l(8551), c = l(5397), Q = l(1072);\n U.f = d && !t ? Object.defineProperties : function(V, W) {\n F(V);\n for (var i = c(W), R = Q(W), N = R.length, b = 0, J; N > b; ) Z.f(V, J = R[b++], i[J]);\n return V;\n };\n }\n ),\n /***/\n 4913: (\n /***/\n (s, U, l) => {\n var d = l(3724), t = l(5917), Z = l(8686), F = l(8551), c = l(6969), Q = TypeError, a = Object.defineProperty, V = Object.getOwnPropertyDescriptor, W = \"enumerable\", i = \"configurable\", R = \"writable\";\n U.f = d ? Z ? function(b, J, M) {\n if (F(b), J = c(J), F(M), typeof b == \"function\" && J === \"prototype\" && \"value\" in M && R in M && !M[R]) {\n var G = V(b, J);\n G && G[R] && (b[J] = M.value, M = {\n configurable: i in M ? M[i] : G[i],\n enumerable: W in M ? M[W] : G[W],\n writable: !1\n });\n }\n return a(b, J, M);\n } : a : function(b, J, M) {\n if (F(b), J = c(J), F(M), t) try {\n return a(b, J, M);\n } catch {\n }\n if (\"get\" in M || \"set\" in M) throw new Q(\"Accessors not supported\");\n return \"value\" in M && (b[J] = M.value), b;\n };\n }\n ),\n /***/\n 7347: (\n /***/\n (s, U, l) => {\n var d = l(3724), t = l(9565), Z = l(8773), F = l(6980), c = l(5397), Q = l(6969), a = l(9297), V = l(5917), W = Object.getOwnPropertyDescriptor;\n U.f = d ? W : function(R, N) {\n if (R = c(R), N = Q(N), V) try {\n return W(R, N);\n } catch {\n }\n if (a(R, N)) return F(!t(Z.f, R, N), R[N]);\n };\n }\n ),\n /***/\n 8480: (\n /***/\n (s, U, l) => {\n var d = l(1828), t = l(8727), Z = t.concat(\"length\", \"prototype\");\n U.f = Object.getOwnPropertyNames || function(c) {\n return d(c, Z);\n };\n }\n ),\n /***/\n 3717: (\n /***/\n (s, U) => {\n U.f = Object.getOwnPropertySymbols;\n }\n ),\n /***/\n 2787: (\n /***/\n (s, U, l) => {\n var d = l(9297), t = l(4901), Z = l(8981), F = l(6119), c = l(2211), Q = F(\"IE_PROTO\"), a = Object, V = a.prototype;\n s.exports = c ? a.getPrototypeOf : function(W) {\n var i = Z(W);\n if (d(i, Q)) return i[Q];\n var R = i.constructor;\n return t(R) && i instanceof R ? R.prototype : i instanceof a ? V : null;\n };\n }\n ),\n /***/\n 1625: (\n /***/\n (s, U, l) => {\n var d = l(9504);\n s.exports = d({}.isPrototypeOf);\n }\n ),\n /***/\n 1828: (\n /***/\n (s, U, l) => {\n var d = l(9504), t = l(9297), Z = l(5397), F = l(9617).indexOf, c = l(421), Q = d([].push);\n s.exports = function(a, V) {\n var W = Z(a), i = 0, R = [], N;\n for (N in W) !t(c, N) && t(W, N) && Q(R, N);\n for (; V.length > i; ) t(W, N = V[i++]) && (~F(R, N) || Q(R, N));\n return R;\n };\n }\n ),\n /***/\n 1072: (\n /***/\n (s, U, l) => {\n var d = l(1828), t = l(8727);\n s.exports = Object.keys || function(F) {\n return d(F, t);\n };\n }\n ),\n /***/\n 8773: (\n /***/\n (s, U) => {\n var l = {}.propertyIsEnumerable, d = Object.getOwnPropertyDescriptor, t = d && !l.call({ 1: 2 }, 1);\n U.f = t ? function(F) {\n var c = d(this, F);\n return !!c && c.enumerable;\n } : l;\n }\n ),\n /***/\n 2967: (\n /***/\n (s, U, l) => {\n var d = l(6706), t = l(34), Z = l(7750), F = l(3506);\n s.exports = Object.setPrototypeOf || (\"__proto__\" in {} ? function() {\n var c = !1, Q = {}, a;\n try {\n a = d(Object.prototype, \"__proto__\", \"set\"), a(Q, []), c = Q instanceof Array;\n } catch {\n }\n return function(W, i) {\n return Z(W), F(i), t(W) && (c ? a(W, i) : W.__proto__ = i), W;\n };\n }() : void 0);\n }\n ),\n /***/\n 4270: (\n /***/\n (s, U, l) => {\n var d = l(9565), t = l(4901), Z = l(34), F = TypeError;\n s.exports = function(c, Q) {\n var a, V;\n if (Q === \"string\" && t(a = c.toString) && !Z(V = d(a, c)) || t(a = c.valueOf) && !Z(V = d(a, c)) || Q !== \"string\" && t(a = c.toString) && !Z(V = d(a, c))) return V;\n throw new F(\"Can't convert object to primitive value\");\n };\n }\n ),\n /***/\n 5031: (\n /***/\n (s, U, l) => {\n var d = l(7751), t = l(9504), Z = l(8480), F = l(3717), c = l(8551), Q = t([].concat);\n s.exports = d(\"Reflect\", \"ownKeys\") || function(V) {\n var W = Z.f(c(V)), i = F.f;\n return i ? Q(W, i(V)) : W;\n };\n }\n ),\n /***/\n 8235: (\n /***/\n (s, U, l) => {\n var d = l(9504), t = l(9297), Z = SyntaxError, F = parseInt, c = String.fromCharCode, Q = d(\"\".charAt), a = d(\"\".slice), V = d(/./.exec), W = {\n '\\\\\"': '\"',\n \"\\\\\\\\\": \"\\\\\",\n \"\\\\/\": \"/\",\n \"\\\\b\": \"\\b\",\n \"\\\\f\": \"\\f\",\n \"\\\\n\": `\n`,\n \"\\\\r\": \"\\r\",\n \"\\\\t\": \"\t\"\n }, i = /^[\\da-f]{4}$/i, R = /^[\\u0000-\\u001F]$/;\n s.exports = function(N, b) {\n for (var J = !0, M = \"\"; b < N.length; ) {\n var G = Q(N, b);\n if (G === \"\\\\\") {\n var T = a(N, b, b + 2);\n if (t(W, T))\n M += W[T], b += 2;\n else if (T === \"\\\\u\") {\n b += 2;\n var u = a(N, b, b + 4);\n if (!V(i, u)) throw new Z(\"Bad Unicode escape at: \" + b);\n M += c(F(u, 16)), b += 4;\n } else throw new Z('Unknown escape sequence: \"' + T + '\"');\n } else if (G === '\"') {\n J = !1, b++;\n break;\n } else {\n if (V(R, G)) throw new Z(\"Bad control character in string literal at: \" + b);\n M += G, b++;\n }\n }\n if (J) throw new Z(\"Unterminated string at: \" + b);\n return { value: M, end: b };\n };\n }\n ),\n /***/\n 7750: (\n /***/\n (s, U, l) => {\n var d = l(4117), t = TypeError;\n s.exports = function(Z) {\n if (d(Z)) throw new t(\"Can't call method on \" + Z);\n return Z;\n };\n }\n ),\n /***/\n 9286: (\n /***/\n (s, U, l) => {\n var d = l(4402), t = l(8469), Z = d.Set, F = d.add;\n s.exports = function(c) {\n var Q = new Z();\n return t(c, function(a) {\n F(Q, a);\n }), Q;\n };\n }\n ),\n /***/\n 3440: (\n /***/\n (s, U, l) => {\n var d = l(7080), t = l(4402), Z = l(9286), F = l(5170), c = l(3789), Q = l(8469), a = l(507), V = t.has, W = t.remove;\n s.exports = function(R) {\n var N = d(this), b = c(R), J = Z(N);\n return F(N) <= b.size ? Q(N, function(M) {\n b.includes(M) && W(J, M);\n }) : a(b.getIterator(), function(M) {\n V(N, M) && W(J, M);\n }), J;\n };\n }\n ),\n /***/\n 4402: (\n /***/\n (s, U, l) => {\n var d = l(9504), t = Set.prototype;\n s.exports = {\n // eslint-disable-next-line es/no-set -- safe\n Set,\n add: d(t.add),\n has: d(t.has),\n remove: d(t.delete),\n proto: t\n };\n }\n ),\n /***/\n 8750: (\n /***/\n (s, U, l) => {\n var d = l(7080), t = l(4402), Z = l(5170), F = l(3789), c = l(8469), Q = l(507), a = t.Set, V = t.add, W = t.has;\n s.exports = function(R) {\n var N = d(this), b = F(R), J = new a();\n return Z(N) > b.size ? Q(b.getIterator(), function(M) {\n W(N, M) && V(J, M);\n }) : c(N, function(M) {\n b.includes(M) && V(J, M);\n }), J;\n };\n }\n ),\n /***/\n 4449: (\n /***/\n (s, U, l) => {\n var d = l(7080), t = l(4402).has, Z = l(5170), F = l(3789), c = l(8469), Q = l(507), a = l(9539);\n s.exports = function(W) {\n var i = d(this), R = F(W);\n if (Z(i) <= R.size) return c(i, function(b) {\n if (R.includes(b)) return !1;\n }, !0) !== !1;\n var N = R.getIterator();\n return Q(N, function(b) {\n if (t(i, b)) return a(N, \"normal\", !1);\n }) !== !1;\n };\n }\n ),\n /***/\n 3838: (\n /***/\n (s, U, l) => {\n var d = l(7080), t = l(5170), Z = l(8469), F = l(3789);\n s.exports = function(Q) {\n var a = d(this), V = F(Q);\n return t(a) > V.size ? !1 : Z(a, function(W) {\n if (!V.includes(W)) return !1;\n }, !0) !== !1;\n };\n }\n ),\n /***/\n 8527: (\n /***/\n (s, U, l) => {\n var d = l(7080), t = l(4402).has, Z = l(5170), F = l(3789), c = l(507), Q = l(9539);\n s.exports = function(V) {\n var W = d(this), i = F(V);\n if (Z(W) < i.size) return !1;\n var R = i.getIterator();\n return c(R, function(N) {\n if (!t(W, N)) return Q(R, \"normal\", !1);\n }) !== !1;\n };\n }\n ),\n /***/\n 8469: (\n /***/\n (s, U, l) => {\n var d = l(9504), t = l(507), Z = l(4402), F = Z.Set, c = Z.proto, Q = d(c.forEach), a = d(c.keys), V = a(new F()).next;\n s.exports = function(W, i, R) {\n return R ? t({ iterator: a(W), next: V }, i) : Q(W, i);\n };\n }\n ),\n /***/\n 4916: (\n /***/\n (s, U, l) => {\n var d = l(7751), t = function(Z) {\n return {\n size: Z,\n has: function() {\n return !1;\n },\n keys: function() {\n return {\n next: function() {\n return { done: !0 };\n }\n };\n }\n };\n };\n s.exports = function(Z) {\n var F = d(\"Set\");\n try {\n new F()[Z](t(0));\n try {\n return new F()[Z](t(-1)), !1;\n } catch {\n return !0;\n }\n } catch {\n return !1;\n }\n };\n }\n ),\n /***/\n 5170: (\n /***/\n (s, U, l) => {\n var d = l(6706), t = l(4402);\n s.exports = d(t.proto, \"size\", \"get\") || function(Z) {\n return Z.size;\n };\n }\n ),\n /***/\n 3650: (\n /***/\n (s, U, l) => {\n var d = l(7080), t = l(4402), Z = l(9286), F = l(3789), c = l(507), Q = t.add, a = t.has, V = t.remove;\n s.exports = function(i) {\n var R = d(this), N = F(i).getIterator(), b = Z(R);\n return c(N, function(J) {\n a(R, J) ? V(b, J) : Q(b, J);\n }), b;\n };\n }\n ),\n /***/\n 4204: (\n /***/\n (s, U, l) => {\n var d = l(7080), t = l(4402).add, Z = l(9286), F = l(3789), c = l(507);\n s.exports = function(a) {\n var V = d(this), W = F(a).getIterator(), i = Z(V);\n return c(W, function(R) {\n t(i, R);\n }), i;\n };\n }\n ),\n /***/\n 6119: (\n /***/\n (s, U, l) => {\n var d = l(5745), t = l(3392), Z = d(\"keys\");\n s.exports = function(F) {\n return Z[F] || (Z[F] = t(F));\n };\n }\n ),\n /***/\n 7629: (\n /***/\n (s, U, l) => {\n var d = l(6395), t = l(4576), Z = l(9433), F = \"__core-js_shared__\", c = s.exports = t[F] || Z(F, {});\n (c.versions || (c.versions = [])).push({\n version: \"3.38.1\",\n mode: d ? \"pure\" : \"global\",\n copyright: \"© 2014-2024 Denis Pushkarev (zloirock.ru)\",\n license: \"https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE\",\n source: \"https://github.com/zloirock/core-js\"\n });\n }\n ),\n /***/\n 5745: (\n /***/\n (s, U, l) => {\n var d = l(7629);\n s.exports = function(t, Z) {\n return d[t] || (d[t] = Z || {});\n };\n }\n ),\n /***/\n 1548: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(9039), Z = l(9519), F = l(4215), c = d.structuredClone;\n s.exports = !!c && !t(function() {\n if (F === \"DENO\" && Z > 92 || F === \"NODE\" && Z > 94 || F === \"BROWSER\" && Z > 97) return !1;\n var Q = new ArrayBuffer(8), a = c(Q, { transfer: [Q] });\n return Q.byteLength !== 0 || a.byteLength !== 8;\n });\n }\n ),\n /***/\n 4495: (\n /***/\n (s, U, l) => {\n var d = l(9519), t = l(9039), Z = l(4576), F = Z.String;\n s.exports = !!Object.getOwnPropertySymbols && !t(function() {\n var c = Symbol(\"symbol detection\");\n return !F(c) || !(Object(c) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && d && d < 41;\n });\n }\n ),\n /***/\n 5610: (\n /***/\n (s, U, l) => {\n var d = l(1291), t = Math.max, Z = Math.min;\n s.exports = function(F, c) {\n var Q = d(F);\n return Q < 0 ? t(Q + c, 0) : Z(Q, c);\n };\n }\n ),\n /***/\n 5854: (\n /***/\n (s, U, l) => {\n var d = l(2777), t = TypeError;\n s.exports = function(Z) {\n var F = d(Z, \"number\");\n if (typeof F == \"number\") throw new t(\"Can't convert number to bigint\");\n return BigInt(F);\n };\n }\n ),\n /***/\n 7696: (\n /***/\n (s, U, l) => {\n var d = l(1291), t = l(8014), Z = RangeError;\n s.exports = function(F) {\n if (F === void 0) return 0;\n var c = d(F), Q = t(c);\n if (c !== Q) throw new Z(\"Wrong length or index\");\n return Q;\n };\n }\n ),\n /***/\n 5397: (\n /***/\n (s, U, l) => {\n var d = l(7055), t = l(7750);\n s.exports = function(Z) {\n return d(t(Z));\n };\n }\n ),\n /***/\n 1291: (\n /***/\n (s, U, l) => {\n var d = l(741);\n s.exports = function(t) {\n var Z = +t;\n return Z !== Z || Z === 0 ? 0 : d(Z);\n };\n }\n ),\n /***/\n 8014: (\n /***/\n (s, U, l) => {\n var d = l(1291), t = Math.min;\n s.exports = function(Z) {\n var F = d(Z);\n return F > 0 ? t(F, 9007199254740991) : 0;\n };\n }\n ),\n /***/\n 8981: (\n /***/\n (s, U, l) => {\n var d = l(7750), t = Object;\n s.exports = function(Z) {\n return t(d(Z));\n };\n }\n ),\n /***/\n 9590: (\n /***/\n (s, U, l) => {\n var d = l(1291), t = RangeError;\n s.exports = function(Z) {\n var F = d(Z);\n if (F < 0) throw new t(\"The argument can't be less than 0\");\n return F;\n };\n }\n ),\n /***/\n 2777: (\n /***/\n (s, U, l) => {\n var d = l(9565), t = l(34), Z = l(757), F = l(5966), c = l(4270), Q = l(8227), a = TypeError, V = Q(\"toPrimitive\");\n s.exports = function(W, i) {\n if (!t(W) || Z(W)) return W;\n var R = F(W, V), N;\n if (R) {\n if (i === void 0 && (i = \"default\"), N = d(R, W, i), !t(N) || Z(N)) return N;\n throw new a(\"Can't convert object to primitive value\");\n }\n return i === void 0 && (i = \"number\"), c(W, i);\n };\n }\n ),\n /***/\n 6969: (\n /***/\n (s, U, l) => {\n var d = l(2777), t = l(757);\n s.exports = function(Z) {\n var F = d(Z, \"string\");\n return t(F) ? F : F + \"\";\n };\n }\n ),\n /***/\n 2140: (\n /***/\n (s, U, l) => {\n var d = l(8227), t = d(\"toStringTag\"), Z = {};\n Z[t] = \"z\", s.exports = String(Z) === \"[object z]\";\n }\n ),\n /***/\n 655: (\n /***/\n (s, U, l) => {\n var d = l(6955), t = String;\n s.exports = function(Z) {\n if (d(Z) === \"Symbol\") throw new TypeError(\"Cannot convert a Symbol value to a string\");\n return t(Z);\n };\n }\n ),\n /***/\n 6823: (\n /***/\n (s) => {\n var U = String;\n s.exports = function(l) {\n try {\n return U(l);\n } catch {\n return \"Object\";\n }\n };\n }\n ),\n /***/\n 3392: (\n /***/\n (s, U, l) => {\n var d = l(9504), t = 0, Z = Math.random(), F = d(1 .toString);\n s.exports = function(c) {\n return \"Symbol(\" + (c === void 0 ? \"\" : c) + \")_\" + F(++t + Z, 36);\n };\n }\n ),\n /***/\n 7040: (\n /***/\n (s, U, l) => {\n var d = l(4495);\n s.exports = d && !Symbol.sham && typeof Symbol.iterator == \"symbol\";\n }\n ),\n /***/\n 8686: (\n /***/\n (s, U, l) => {\n var d = l(3724), t = l(9039);\n s.exports = d && t(function() {\n return Object.defineProperty(function() {\n }, \"prototype\", {\n value: 42,\n writable: !1\n }).prototype !== 42;\n });\n }\n ),\n /***/\n 2812: (\n /***/\n (s) => {\n var U = TypeError;\n s.exports = function(l, d) {\n if (l < d) throw new U(\"Not enough arguments\");\n return l;\n };\n }\n ),\n /***/\n 8622: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(4901), Z = d.WeakMap;\n s.exports = t(Z) && /native code/.test(String(Z));\n }\n ),\n /***/\n 8227: (\n /***/\n (s, U, l) => {\n var d = l(4576), t = l(5745), Z = l(9297), F = l(3392), c = l(4495), Q = l(7040), a = d.Symbol, V = t(\"wks\"), W = Q ? a.for || a : a && a.withoutSetter || F;\n s.exports = function(i) {\n return Z(V, i) || (V[i] = c && Z(a, i) ? a[i] : W(\"Symbol.\" + i)), V[i];\n };\n }\n ),\n /***/\n 6573: (\n /***/\n (s, U, l) => {\n var d = l(3724), t = l(2106), Z = l(3238), F = ArrayBuffer.prototype;\n d && !(\"detached\" in F) && t(F, \"detached\", {\n configurable: !0,\n get: function() {\n return Z(this);\n }\n });\n }\n ),\n /***/\n 7936: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(5636);\n t && d({ target: \"ArrayBuffer\", proto: !0 }, {\n transferToFixedLength: function() {\n return t(this, arguments.length ? arguments[0] : void 0, !1);\n }\n });\n }\n ),\n /***/\n 8100: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(5636);\n t && d({ target: \"ArrayBuffer\", proto: !0 }, {\n transfer: function() {\n return t(this, arguments.length ? arguments[0] : void 0, !0);\n }\n });\n }\n ),\n /***/\n 4114: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(8981), Z = l(6198), F = l(4527), c = l(6837), Q = l(9039), a = Q(function() {\n return [].push.call({ length: 4294967296 }, 1) !== 4294967297;\n }), V = function() {\n try {\n Object.defineProperty([], \"length\", { writable: !1 }).push();\n } catch (i) {\n return i instanceof TypeError;\n }\n }, W = a || !V();\n d({ target: \"Array\", proto: !0, arity: 1, forced: W }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n push: function(R) {\n var N = t(this), b = Z(N), J = arguments.length;\n c(b + J);\n for (var M = 0; M < J; M++)\n N[b] = arguments[M], b++;\n return F(N, b), b;\n }\n });\n }\n ),\n /***/\n 4628: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(6043);\n d({ target: \"Promise\", stat: !0 }, {\n withResolvers: function() {\n var F = t.f(this);\n return {\n promise: F.promise,\n resolve: F.resolve,\n reject: F.reject\n };\n }\n });\n }\n ),\n /***/\n 7642: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(3440), Z = l(4916);\n d({ target: \"Set\", proto: !0, real: !0, forced: !Z(\"difference\") }, {\n difference: t\n });\n }\n ),\n /***/\n 8004: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(9039), Z = l(8750), F = l(4916), c = !F(\"intersection\") || t(function() {\n return String(Array.from((/* @__PURE__ */ new Set([1, 2, 3])).intersection(/* @__PURE__ */ new Set([3, 2])))) !== \"3,2\";\n });\n d({ target: \"Set\", proto: !0, real: !0, forced: c }, {\n intersection: Z\n });\n }\n ),\n /***/\n 3853: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(4449), Z = l(4916);\n d({ target: \"Set\", proto: !0, real: !0, forced: !Z(\"isDisjointFrom\") }, {\n isDisjointFrom: t\n });\n }\n ),\n /***/\n 5876: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(3838), Z = l(4916);\n d({ target: \"Set\", proto: !0, real: !0, forced: !Z(\"isSubsetOf\") }, {\n isSubsetOf: t\n });\n }\n ),\n /***/\n 2475: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(8527), Z = l(4916);\n d({ target: \"Set\", proto: !0, real: !0, forced: !Z(\"isSupersetOf\") }, {\n isSupersetOf: t\n });\n }\n ),\n /***/\n 5024: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(3650), Z = l(4916);\n d({ target: \"Set\", proto: !0, real: !0, forced: !Z(\"symmetricDifference\") }, {\n symmetricDifference: t\n });\n }\n ),\n /***/\n 1698: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(4204), Z = l(4916);\n d({ target: \"Set\", proto: !0, real: !0, forced: !Z(\"union\") }, {\n union: t\n });\n }\n ),\n /***/\n 7467: (\n /***/\n (s, U, l) => {\n var d = l(7628), t = l(4644), Z = t.aTypedArray, F = t.exportTypedArrayMethod, c = t.getTypedArrayConstructor;\n F(\"toReversed\", function() {\n return d(Z(this), c(this));\n });\n }\n ),\n /***/\n 4732: (\n /***/\n (s, U, l) => {\n var d = l(4644), t = l(9504), Z = l(9306), F = l(5370), c = d.aTypedArray, Q = d.getTypedArrayConstructor, a = d.exportTypedArrayMethod, V = t(d.TypedArrayPrototype.sort);\n a(\"toSorted\", function(i) {\n i !== void 0 && Z(i);\n var R = c(this), N = F(Q(R), R);\n return V(N, i);\n });\n }\n ),\n /***/\n 9577: (\n /***/\n (s, U, l) => {\n var d = l(9928), t = l(4644), Z = l(1108), F = l(1291), c = l(5854), Q = t.aTypedArray, a = t.getTypedArrayConstructor, V = t.exportTypedArrayMethod, W = !!function() {\n try {\n new Int8Array(1).with(2, { valueOf: function() {\n throw 8;\n } });\n } catch (i) {\n return i === 8;\n }\n }();\n V(\"with\", function(i, R) {\n var N = Q(this), b = F(i), J = Z(N) ? c(R) : +R;\n return d(N, a(N), b, J);\n }, !W);\n }\n ),\n /***/\n 8992: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(4576), Z = l(679), F = l(8551), c = l(4901), Q = l(2787), a = l(2106), V = l(4659), W = l(9039), i = l(9297), R = l(8227), N = l(7657).IteratorPrototype, b = l(3724), J = l(6395), M = \"constructor\", G = \"Iterator\", T = R(\"toStringTag\"), u = TypeError, X = t[G], Y = J || !c(X) || X.prototype !== N || !W(function() {\n X({});\n }), o = function() {\n if (Z(this, N), Q(this) === N) throw new u(\"Abstract class Iterator not directly constructable\");\n }, y = function(S, p) {\n b ? a(N, S, {\n configurable: !0,\n get: function() {\n return p;\n },\n set: function(L) {\n if (F(this), this === N) throw new u(\"You can't redefine this property\");\n i(this, S) ? this[S] = L : V(this, S, L);\n }\n }) : N[S] = p;\n };\n i(N, T) || y(T, G), (Y || !i(N, M) || N[M] === Object) && y(M, o), o.prototype = N, d({ global: !0, constructor: !0, forced: Y }, {\n Iterator: o\n });\n }\n ),\n /***/\n 4743: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(9565), Z = l(8551), F = l(1767), c = l(4149), Q = l(9590), a = l(9462), V = l(6395), W = a(function() {\n for (var i = this.iterator, R = this.next, N, b; this.remaining; )\n if (this.remaining--, N = Z(t(R, i)), b = this.done = !!N.done, b) return;\n if (N = Z(t(R, i)), b = this.done = !!N.done, !b) return N.value;\n });\n d({ target: \"Iterator\", proto: !0, real: !0, forced: V }, {\n drop: function(R) {\n Z(this);\n var N = Q(c(+R));\n return new W(F(this), {\n remaining: N\n });\n }\n });\n }\n ),\n /***/\n 3215: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(2652), Z = l(9306), F = l(8551), c = l(1767);\n d({ target: \"Iterator\", proto: !0, real: !0 }, {\n every: function(a) {\n F(this), Z(a);\n var V = c(this), W = 0;\n return !t(V, function(i, R) {\n if (!a(i, W++)) return R();\n }, { IS_RECORD: !0, INTERRUPTED: !0 }).stopped;\n }\n });\n }\n ),\n /***/\n 4520: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(9565), Z = l(9306), F = l(8551), c = l(1767), Q = l(9462), a = l(6319), V = l(6395), W = Q(function() {\n for (var i = this.iterator, R = this.predicate, N = this.next, b, J, M; ; ) {\n if (b = F(t(N, i)), J = this.done = !!b.done, J) return;\n if (M = b.value, a(i, R, [M, this.counter++], !0)) return M;\n }\n });\n d({ target: \"Iterator\", proto: !0, real: !0, forced: V }, {\n filter: function(R) {\n return F(this), Z(R), new W(c(this), {\n predicate: R\n });\n }\n });\n }\n ),\n /***/\n 670: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(9565), Z = l(9306), F = l(8551), c = l(1767), Q = l(8646), a = l(9462), V = l(9539), W = l(6395), i = a(function() {\n for (var R = this.iterator, N = this.mapper, b, J; ; ) {\n if (J = this.inner) try {\n if (b = F(t(J.next, J.iterator)), !b.done) return b.value;\n this.inner = null;\n } catch (M) {\n V(R, \"throw\", M);\n }\n if (b = F(t(this.next, R)), this.done = !!b.done) return;\n try {\n this.inner = Q(N(b.value, this.counter++), !1);\n } catch (M) {\n V(R, \"throw\", M);\n }\n }\n });\n d({ target: \"Iterator\", proto: !0, real: !0, forced: W }, {\n flatMap: function(N) {\n return F(this), Z(N), new i(c(this), {\n mapper: N,\n inner: null\n });\n }\n });\n }\n ),\n /***/\n 1454: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(713), Z = l(6395);\n d({ target: \"Iterator\", proto: !0, real: !0, forced: Z }, {\n map: t\n });\n }\n ),\n /***/\n 7550: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(2652), Z = l(9306), F = l(8551), c = l(1767);\n d({ target: \"Iterator\", proto: !0, real: !0 }, {\n some: function(a) {\n F(this), Z(a);\n var V = c(this), W = 0;\n return t(V, function(i, R) {\n if (a(i, W++)) return R();\n }, { IS_RECORD: !0, INTERRUPTED: !0 }).stopped;\n }\n });\n }\n ),\n /***/\n 8335: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(3724), Z = l(4576), F = l(7751), c = l(9504), Q = l(9565), a = l(4901), V = l(34), W = l(4376), i = l(9297), R = l(655), N = l(6198), b = l(4659), J = l(9039), M = l(8235), G = l(4495), T = Z.JSON, u = Z.Number, X = Z.SyntaxError, Y = T && T.parse, o = F(\"Object\", \"keys\"), y = Object.getOwnPropertyDescriptor, S = c(\"\".charAt), p = c(\"\".slice), L = c(/./.exec), I = c([].push), D = /^\\d$/, r = /^[1-9]$/, w = /^[\\d-]$/, B = /^[\\t\\n\\r ]$/, E = 0, g = 1, Rl = function(O, k) {\n O = R(O);\n var j = new Jl(O, 0), dl = j.parse(), Xl = dl.value, A = j.skip(B, dl.end);\n if (A < O.length)\n throw new X('Unexpected extra character: \"' + S(O, A) + '\" after the parsed data at: ' + A);\n return a(k) ? Nl({ \"\": Xl }, \"\", k, dl) : Xl;\n }, Nl = function(O, k, j, dl) {\n var Xl = O[k], A = dl && Xl === dl.value, yl = A && typeof dl.source == \"string\" ? { source: dl.source } : {}, Ll, Sd, MU, _l, M0;\n if (V(Xl)) {\n var JV = W(Xl), kQ = A ? dl.nodes : JV ? [] : {};\n if (JV)\n for (Ll = kQ.length, MU = N(Xl), _l = 0; _l < MU; _l++)\n gl(Xl, _l, Nl(Xl, \"\" + _l, j, _l < Ll ? kQ[_l] : void 0));\n else\n for (Sd = o(Xl), MU = N(Sd), _l = 0; _l < MU; _l++)\n M0 = Sd[_l], gl(Xl, M0, Nl(Xl, M0, j, i(kQ, M0) ? kQ[M0] : void 0));\n }\n return Q(j, O, k, Xl, yl);\n }, gl = function(O, k, j) {\n if (t) {\n var dl = y(O, k);\n if (dl && !dl.configurable) return;\n }\n j === void 0 ? delete O[k] : b(O, k, j);\n }, bl = function(O, k, j, dl) {\n this.value = O, this.end = k, this.source = j, this.nodes = dl;\n }, Jl = function(O, k) {\n this.source = O, this.index = k;\n };\n Jl.prototype = {\n fork: function(O) {\n return new Jl(this.source, O);\n },\n parse: function() {\n var O = this.source, k = this.skip(B, this.index), j = this.fork(k), dl = S(O, k);\n if (L(w, dl)) return j.number();\n switch (dl) {\n case \"{\":\n return j.object();\n case \"[\":\n return j.array();\n case '\"':\n return j.string();\n case \"t\":\n return j.keyword(!0);\n case \"f\":\n return j.keyword(!1);\n case \"n\":\n return j.keyword(null);\n }\n throw new X('Unexpected character: \"' + dl + '\" at: ' + k);\n },\n node: function(O, k, j, dl, Xl) {\n return new bl(k, dl, O ? null : p(this.source, j, dl), Xl);\n },\n object: function() {\n for (var O = this.source, k = this.index + 1, j = !1, dl = {}, Xl = {}; k < O.length; ) {\n if (k = this.until(['\"', \"}\"], k), S(O, k) === \"}\" && !j) {\n k++;\n break;\n }\n var A = this.fork(k).string(), yl = A.value;\n k = A.end, k = this.until([\":\"], k) + 1, k = this.skip(B, k), A = this.fork(k).parse(), b(Xl, yl, A), b(dl, yl, A.value), k = this.until([\",\", \"}\"], A.end);\n var Ll = S(O, k);\n if (Ll === \",\")\n j = !0, k++;\n else if (Ll === \"}\") {\n k++;\n break;\n }\n }\n return this.node(g, dl, this.index, k, Xl);\n },\n array: function() {\n for (var O = this.source, k = this.index + 1, j = !1, dl = [], Xl = []; k < O.length; ) {\n if (k = this.skip(B, k), S(O, k) === \"]\" && !j) {\n k++;\n break;\n }\n var A = this.fork(k).parse();\n if (I(Xl, A), I(dl, A.value), k = this.until([\",\", \"]\"], A.end), S(O, k) === \",\")\n j = !0, k++;\n else if (S(O, k) === \"]\") {\n k++;\n break;\n }\n }\n return this.node(g, dl, this.index, k, Xl);\n },\n string: function() {\n var O = this.index, k = M(this.source, this.index + 1);\n return this.node(E, k.value, O, k.end);\n },\n number: function() {\n var O = this.source, k = this.index, j = k;\n if (S(O, j) === \"-\" && j++, S(O, j) === \"0\") j++;\n else if (L(r, S(O, j))) j = this.skip(D, j + 1);\n else throw new X(\"Failed to parse number at: \" + j);\n if (S(O, j) === \".\" && (j = this.skip(D, j + 1)), S(O, j) === \"e\" || S(O, j) === \"E\") {\n j++, (S(O, j) === \"+\" || S(O, j) === \"-\") && j++;\n var dl = j;\n if (j = this.skip(D, j), dl === j) throw new X(\"Failed to parse number's exponent value at: \" + j);\n }\n return this.node(E, u(p(O, k, j)), k, j);\n },\n keyword: function(O) {\n var k = \"\" + O, j = this.index, dl = j + k.length;\n if (p(this.source, j, dl) !== k) throw new X(\"Failed to parse value at: \" + j);\n return this.node(E, O, j, dl);\n },\n skip: function(O, k) {\n for (var j = this.source; k < j.length && L(O, S(j, k)); k++) ;\n return k;\n },\n until: function(O, k) {\n k = this.skip(B, k);\n for (var j = S(this.source, k), dl = 0; dl < O.length; dl++) if (O[dl] === j) return k;\n throw new X('Unexpected character: \"' + j + '\" at: ' + k);\n }\n };\n var Td = J(function() {\n var O = \"9007199254740993\", k;\n return Y(O, function(j, dl, Xl) {\n k = Xl.source;\n }), k !== O;\n }), uU = G && !J(function() {\n return 1 / Y(\"-0 \t\") !== -1 / 0;\n });\n d({ target: \"JSON\", stat: !0, forced: Td }, {\n parse: function(k, j) {\n return uU && !a(j) ? Y(k) : Rl(k, j);\n }\n });\n }\n ),\n /***/\n 4979: (\n /***/\n (s, U, l) => {\n var d = l(6518), t = l(4576), Z = l(7751), F = l(6980), c = l(4913).f, Q = l(9297), a = l(679), V = l(3167), W = l(2603), i = l(5002), R = l(8574), N = l(3724), b = l(6395), J = \"DOMException\", M = Z(\"Error\"), G = Z(J), T = function() {\n a(this, u);\n var B = arguments.length, E = W(B < 1 ? void 0 : arguments[0]), g = W(B < 2 ? void 0 : arguments[1], \"Error\"), Rl = new G(E, g), Nl = new M(E);\n return Nl.name = J, c(Rl, \"stack\", F(1, R(Nl.stack, 1))), V(Rl, this, T), Rl;\n }, u = T.prototype = G.prototype, X = \"stack\" in new M(J), Y = \"stack\" in new G(1, 2), o = G && N && Object.getOwnPropertyDescriptor(t, J), y = !!o && !(o.writable && o.configurable), S = X && !y && !Y;\n d({ global: !0, constructor: !0, forced: b || S }, {\n // TODO: fix export logic\n DOMException: S ? T : G\n });\n var p = Z(J), L = p.prototype;\n if (L.constructor !== p) {\n b || c(L, \"constructor\", F(1, p));\n for (var I in i) if (Q(i, I)) {\n var D = i[I], r = D.s;\n Q(p, r) || c(p, r, F(6, D.c));\n }\n }\n }\n ),\n /***/\n 4603: (\n /***/\n (s, U, l) => {\n var d = l(6840), t = l(9504), Z = l(655), F = l(2812), c = URLSearchParams, Q = c.prototype, a = t(Q.append), V = t(Q.delete), W = t(Q.forEach), i = t([].push), R = new c(\"a=1&a=2&b=3\");\n R.delete(\"a\", 1), R.delete(\"b\", void 0), R + \"\" != \"a=2\" && d(Q, \"delete\", function(N) {\n var b = arguments.length, J = b < 2 ? void 0 : arguments[1];\n if (b && J === void 0) return V(this, N);\n var M = [];\n W(this, function(S, p) {\n i(M, { key: p, value: S });\n }), F(b, 1);\n for (var G = Z(N), T = Z(J), u = 0, X = 0, Y = !1, o = M.length, y; u < o; )\n y = M[u++], Y || y.key === G ? (Y = !0, V(this, y.key)) : X++;\n for (; X < o; )\n y = M[X++], y.key === G && y.value === T || a(this, y.key, y.value);\n }, { enumerable: !0, unsafe: !0 });\n }\n ),\n /***/\n 7566: (\n /***/\n (s, U, l) => {\n var d = l(6840), t = l(9504), Z = l(655), F = l(2812), c = URLSearchParams, Q = c.prototype, a = t(Q.getAll), V = t(Q.has), W = new c(\"a=1\");\n (W.has(\"a\", 2) || !W.has(\"a\", void 0)) && d(Q, \"has\", function(R) {\n var N = arguments.length, b = N < 2 ? void 0 : arguments[1];\n if (N && b === void 0) return V(this, R);\n var J = a(this, R);\n F(N, 1);\n for (var M = Z(b), G = 0; G < J.length; )\n if (J[G++] === M) return !0;\n return !1;\n }, { enumerable: !0, unsafe: !0 });\n }\n ),\n /***/\n 8721: (\n /***/\n (s, U, l) => {\n var d = l(3724), t = l(9504), Z = l(2106), F = URLSearchParams.prototype, c = t(F.forEach);\n d && !(\"size\" in F) && Z(F, \"size\", {\n get: function() {\n var a = 0;\n return c(this, function() {\n a++;\n }), a;\n },\n configurable: !0,\n enumerable: !0\n });\n }\n )\n /******/\n}, FR = {};\nfunction Vl(s) {\n var U = FR[s];\n if (U !== void 0)\n return U.exports;\n var l = FR[s] = {\n /******/\n // no module.id needed\n /******/\n // no module.loaded needed\n /******/\n exports: {}\n /******/\n };\n return eb[s].call(l.exports, l, l.exports, Vl), l.exports;\n}\nVl.d = (s, U) => {\n for (var l in U)\n Vl.o(U, l) && !Vl.o(s, l) && Object.defineProperty(s, l, { enumerable: !0, get: U[l] });\n};\nVl.o = (s, U) => Object.prototype.hasOwnProperty.call(s, U);\nvar $ = globalThis.pdfjsLib = {};\nVl.d($, {\n AbortException: () => (\n /* reexport */\n b0\n ),\n AnnotationEditorLayer: () => (\n /* reexport */\n h2\n ),\n AnnotationEditorParamsType: () => (\n /* reexport */\n q\n ),\n AnnotationEditorType: () => (\n /* reexport */\n tl\n ),\n AnnotationEditorUIManager: () => (\n /* reexport */\n In\n ),\n AnnotationLayer: () => (\n /* reexport */\n R2\n ),\n AnnotationMode: () => (\n /* reexport */\n _t\n ),\n CMapCompressionType: () => (\n /* reexport */\n xV\n ),\n ColorPicker: () => (\n /* reexport */\n Dh\n ),\n DOMSVGFactory: () => (\n /* reexport */\n wi\n ),\n DrawLayer: () => (\n /* reexport */\n e2\n ),\n FeatureTest: () => (\n /* reexport */\n DU\n ),\n GlobalWorkerOptions: () => (\n /* reexport */\n AZ\n ),\n ImageKind: () => (\n /* reexport */\n PQ\n ),\n InvalidPDFException: () => (\n /* reexport */\n RN\n ),\n MissingPDFException: () => (\n /* reexport */\n e0\n ),\n OPS: () => (\n /* reexport */\n Qd\n ),\n OutputScale: () => (\n /* reexport */\n HV\n ),\n PDFDataRangeTransport: () => (\n /* reexport */\n ah\n ),\n PDFDateString: () => (\n /* reexport */\n TN\n ),\n PDFWorker: () => (\n /* reexport */\n ca\n ),\n PasswordResponses: () => (\n /* reexport */\n Jb\n ),\n PermissionFlag: () => (\n /* reexport */\n Mb\n ),\n PixelsPerInch: () => (\n /* reexport */\n Pc\n ),\n RenderingCancelledException: () => (\n /* reexport */\n xi\n ),\n TextLayer: () => (\n /* reexport */\n mW\n ),\n UnexpectedResponseException: () => (\n /* reexport */\n RV\n ),\n Util: () => (\n /* reexport */\n H\n ),\n VerbosityLevel: () => (\n /* reexport */\n VV\n ),\n XfaLayer: () => (\n /* reexport */\n Wh\n ),\n build: () => (\n /* reexport */\n fm\n ),\n createValidAbsoluteUrl: () => (\n /* reexport */\n Xb\n ),\n fetchData: () => (\n /* reexport */\n hV\n ),\n getDocument: () => (\n /* reexport */\n wm\n ),\n getFilenameFromUrl: () => (\n /* reexport */\n Db\n ),\n getPdfFilenameFromUrl: () => (\n /* reexport */\n Eb\n ),\n getXfaPageViewport: () => (\n /* reexport */\n rb\n ),\n isDataScheme: () => (\n /* reexport */\n eV\n ),\n isPdfFile: () => (\n /* reexport */\n ji\n ),\n noContextMenu: () => (\n /* reexport */\n nd\n ),\n normalizeUnicode: () => (\n /* reexport */\n yb\n ),\n setLayerDimensions: () => (\n /* reexport */\n i0\n ),\n shadow: () => (\n /* reexport */\n Ql\n ),\n version: () => (\n /* reexport */\n Pm\n )\n});\nVl(4114);\nVl(6573);\nVl(8100);\nVl(7936);\nVl(7467);\nVl(4732);\nVl(9577);\nVl(4603);\nVl(7566);\nVl(8721);\nconst mU = typeof process == \"object\" && process + \"\" == \"[object process]\" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== \"browser\"), iN = [1, 0, 0, 1, 0, 0], wV = [1e-3, 0, 0, 1e-3, 0, 0], bb = 1e7, TV = 1.35, HU = {\n ANY: 1,\n DISPLAY: 2,\n PRINT: 4,\n SAVE: 8,\n ANNOTATIONS_FORMS: 16,\n ANNOTATIONS_STORAGE: 32,\n ANNOTATIONS_DISABLE: 64,\n IS_EDITING: 128,\n OPLIST: 256\n}, _t = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_FORMS: 2,\n ENABLE_STORAGE: 3\n}, mb = \"pdfjs_internal_editor_\", tl = {\n DISABLE: -1,\n NONE: 0,\n FREETEXT: 3,\n HIGHLIGHT: 9,\n STAMP: 13,\n INK: 15\n}, q = {\n RESIZE: 1,\n CREATE: 2,\n FREETEXT_SIZE: 11,\n FREETEXT_COLOR: 12,\n FREETEXT_OPACITY: 13,\n INK_COLOR: 21,\n INK_THICKNESS: 22,\n INK_OPACITY: 23,\n HIGHLIGHT_COLOR: 31,\n HIGHLIGHT_DEFAULT_COLOR: 32,\n HIGHLIGHT_THICKNESS: 33,\n HIGHLIGHT_FREE: 34,\n HIGHLIGHT_SHOW_ALL: 35\n}, Mb = {\n PRINT: 4,\n MODIFY_CONTENTS: 8,\n COPY: 16,\n MODIFY_ANNOTATIONS: 32,\n FILL_INTERACTIVE_FORMS: 256,\n COPY_FOR_ACCESSIBILITY: 512,\n ASSEMBLE: 1024,\n PRINT_HIGH_QUALITY: 2048\n}, WU = {\n FILL: 0,\n STROKE: 1,\n FILL_STROKE: 2,\n INVISIBLE: 3,\n FILL_ADD_TO_PATH: 4,\n STROKE_ADD_TO_PATH: 5,\n FILL_STROKE_ADD_TO_PATH: 6,\n ADD_TO_PATH: 7,\n FILL_STROKE_MASK: 3,\n ADD_TO_PATH_FLAG: 4\n}, PQ = {\n GRAYSCALE_1BPP: 1,\n RGB_24BPP: 2,\n RGBA_32BPP: 3\n}, Kl = {\n TEXT: 1,\n LINK: 2,\n FREETEXT: 3,\n LINE: 4,\n SQUARE: 5,\n CIRCLE: 6,\n POLYGON: 7,\n POLYLINE: 8,\n HIGHLIGHT: 9,\n UNDERLINE: 10,\n SQUIGGLY: 11,\n STRIKEOUT: 12,\n STAMP: 13,\n CARET: 14,\n INK: 15,\n POPUP: 16,\n FILEATTACHMENT: 17,\n SOUND: 18,\n MOVIE: 19,\n WIDGET: 20,\n SCREEN: 21,\n PRINTERMARK: 22,\n TRAPNET: 23,\n WATERMARK: 24,\n THREED: 25,\n REDACT: 26\n}, Un = {\n SOLID: 1,\n DASHED: 2,\n BEVELED: 3,\n INSET: 4,\n UNDERLINE: 5\n}, VV = {\n ERRORS: 0,\n WARNINGS: 1,\n INFOS: 5\n}, xV = {\n NONE: 0,\n BINARY: 1\n}, Qd = {\n dependency: 1,\n setLineWidth: 2,\n setLineCap: 3,\n setLineJoin: 4,\n setMiterLimit: 5,\n setDash: 6,\n setRenderingIntent: 7,\n setFlatness: 8,\n setGState: 9,\n save: 10,\n restore: 11,\n transform: 12,\n moveTo: 13,\n lineTo: 14,\n curveTo: 15,\n curveTo2: 16,\n curveTo3: 17,\n closePath: 18,\n rectangle: 19,\n stroke: 20,\n closeStroke: 21,\n fill: 22,\n eoFill: 23,\n fillStroke: 24,\n eoFillStroke: 25,\n closeFillStroke: 26,\n closeEOFillStroke: 27,\n endPath: 28,\n clip: 29,\n eoClip: 30,\n beginText: 31,\n endText: 32,\n setCharSpacing: 33,\n setWordSpacing: 34,\n setHScale: 35,\n setLeading: 36,\n setFont: 37,\n setTextRenderingMode: 38,\n setTextRise: 39,\n moveText: 40,\n setLeadingMoveText: 41,\n setTextMatrix: 42,\n nextLine: 43,\n showText: 44,\n showSpacedText: 45,\n nextLineShowText: 46,\n nextLineSetSpacingShowText: 47,\n setCharWidth: 48,\n setCharWidthAndBounds: 49,\n setStrokeColorSpace: 50,\n setFillColorSpace: 51,\n setStrokeColor: 52,\n setStrokeColorN: 53,\n setFillColor: 54,\n setFillColorN: 55,\n setStrokeGray: 56,\n setFillGray: 57,\n setStrokeRGBColor: 58,\n setFillRGBColor: 59,\n setStrokeCMYKColor: 60,\n setFillCMYKColor: 61,\n shadingFill: 62,\n beginInlineImage: 63,\n beginImageData: 64,\n endInlineImage: 65,\n paintXObject: 66,\n markPoint: 67,\n markPointProps: 68,\n beginMarkedContent: 69,\n beginMarkedContentProps: 70,\n endMarkedContent: 71,\n beginCompat: 72,\n endCompat: 73,\n paintFormXObjectBegin: 74,\n paintFormXObjectEnd: 75,\n beginGroup: 76,\n endGroup: 77,\n beginAnnotation: 80,\n endAnnotation: 81,\n paintImageMaskXObject: 83,\n paintImageMaskXObjectGroup: 84,\n paintImageXObject: 85,\n paintInlineImageXObject: 86,\n paintInlineImageXObjectGroup: 87,\n paintImageXObjectRepeat: 88,\n paintImageMaskXObjectRepeat: 89,\n paintSolidColorImageMask: 90,\n constructPath: 91,\n setStrokeTransparent: 92,\n setFillTransparent: 93\n}, Jb = {\n NEED_PASSWORD: 1,\n INCORRECT_PASSWORD: 2\n};\nlet WV = VV.WARNINGS;\nfunction Gb(s) {\n Number.isInteger(s) && (WV = s);\n}\nfunction Tb() {\n return WV;\n}\nfunction iV(s) {\n WV >= VV.INFOS && console.log(`Info: ${s}`);\n}\nfunction Zl(s) {\n WV >= VV.WARNINGS && console.log(`Warning: ${s}`);\n}\nfunction Ol(s) {\n throw new Error(s);\n}\nfunction Al(s, U) {\n s || Ol(U);\n}\nfunction Sb(s) {\n switch (s == null ? void 0 : s.protocol) {\n case \"http:\":\n case \"https:\":\n case \"ftp:\":\n case \"mailto:\":\n case \"tel:\":\n return !0;\n default:\n return !1;\n }\n}\nfunction Xb(s, U = null, l = null) {\n if (!s)\n return null;\n try {\n if (l && typeof s == \"string\") {\n if (l.addDefaultProtocol && s.startsWith(\"www.\")) {\n const t = s.match(/\\./g);\n (t == null ? void 0 : t.length) >= 2 && (s = `http://${s}`);\n }\n if (l.tryConvertEncoding)\n try {\n s = Bb(s);\n } catch {\n }\n }\n const d = U ? new URL(s, U) : new URL(s);\n if (Sb(d))\n return d;\n } catch {\n }\n return null;\n}\nfunction Ql(s, U, l, d = !1) {\n return Object.defineProperty(s, U, {\n value: l,\n enumerable: !d,\n configurable: !0,\n writable: !1\n }), l;\n}\nconst OZ = function() {\n function U(l, d) {\n this.message = l, this.name = d;\n }\n return U.prototype = new Error(), U.constructor = U, U;\n}();\nclass jV extends OZ {\n constructor(U, l) {\n super(U, \"PasswordException\"), this.code = l;\n }\n}\nclass OV extends OZ {\n constructor(U, l) {\n super(U, \"UnknownErrorException\"), this.details = l;\n }\n}\nlet RN = class extends OZ {\n constructor(U) {\n super(U, \"InvalidPDFException\");\n }\n}, e0 = class extends OZ {\n constructor(U) {\n super(U, \"MissingPDFException\");\n }\n}, RV = class extends OZ {\n constructor(U, l) {\n super(U, \"UnexpectedResponseException\"), this.status = l;\n }\n};\nclass ub extends OZ {\n constructor(U) {\n super(U, \"FormatError\");\n }\n}\nlet b0 = class extends OZ {\n constructor(U) {\n super(U, \"AbortException\");\n }\n};\nfunction NN(s) {\n (typeof s != \"object\" || (s == null ? void 0 : s.length) === void 0) && Ol(\"Invalid argument for bytesToString\");\n const U = s.length, l = 8192;\n if (U < l)\n return String.fromCharCode.apply(null, s);\n const d = [];\n for (let t = 0; t < U; t += l) {\n const Z = Math.min(t + l, U), F = s.subarray(t, Z);\n d.push(String.fromCharCode.apply(null, F));\n }\n return d.join(\"\");\n}\nfunction NV(s) {\n typeof s != \"string\" && Ol(\"Invalid argument for stringToBytes\");\n const U = s.length, l = new Uint8Array(U);\n for (let d = 0; d < U; ++d)\n l[d] = s.charCodeAt(d) & 255;\n return l;\n}\nfunction Yb(s) {\n return String.fromCharCode(s >> 24 & 255, s >> 16 & 255, s >> 8 & 255, s & 255);\n}\nfunction ri(s) {\n const U = /* @__PURE__ */ Object.create(null);\n for (const [l, d] of s)\n U[l] = d;\n return U;\n}\nfunction ob() {\n const s = new Uint8Array(4);\n return s[0] = 1, new Uint32Array(s.buffer, 0, 1)[0] === 1;\n}\nfunction pb() {\n try {\n return new Function(\"\"), !0;\n } catch {\n return !1;\n }\n}\nclass DU {\n static get isLittleEndian() {\n return Ql(this, \"isLittleEndian\", ob());\n }\n static get isEvalSupported() {\n return Ql(this, \"isEvalSupported\", pb());\n }\n static get isOffscreenCanvasSupported() {\n return Ql(this, \"isOffscreenCanvasSupported\", typeof OffscreenCanvas < \"u\");\n }\n static get platform() {\n return typeof navigator < \"u\" && typeof (navigator == null ? void 0 : navigator.platform) == \"string\" ? Ql(this, \"platform\", {\n isMac: navigator.platform.includes(\"Mac\"),\n isWindows: navigator.platform.includes(\"Win\"),\n isFirefox: typeof (navigator == null ? void 0 : navigator.userAgent) == \"string\" && navigator.userAgent.includes(\"Firefox\")\n }) : Ql(this, \"platform\", {\n isMac: !1,\n isWindows: !1,\n isFirefox: !1\n });\n }\n static get isCSSRoundSupported() {\n var U, l;\n return Ql(this, \"isCSSRoundSupported\", (l = (U = globalThis.CSS) == null ? void 0 : U.supports) == null ? void 0 : l.call(U, \"width: round(1.5px, 1px)\"));\n }\n}\nconst SV = Array.from(Array(256).keys(), (s) => s.toString(16).padStart(2, \"0\"));\nvar xt, rV, fQ, gV;\nlet H = (rV = class {\n static makeHexColor(U, l, d) {\n return `#${SV[U]}${SV[l]}${SV[d]}`;\n }\n static scaleMinMax(U, l) {\n let d;\n U[0] ? (U[0] < 0 && (d = l[0], l[0] = l[2], l[2] = d), l[0] *= U[0], l[2] *= U[0], U[3] < 0 && (d = l[1], l[1] = l[3], l[3] = d), l[1] *= U[3], l[3] *= U[3]) : (d = l[0], l[0] = l[1], l[1] = d, d = l[2], l[2] = l[3], l[3] = d, U[1] < 0 && (d = l[1], l[1] = l[3], l[3] = d), l[1] *= U[1], l[3] *= U[1], U[2] < 0 && (d = l[0], l[0] = l[2], l[2] = d), l[0] *= U[2], l[2] *= U[2]), l[0] += U[4], l[1] += U[5], l[2] += U[4], l[3] += U[5];\n }\n static transform(U, l) {\n return [U[0] * l[0] + U[2] * l[1], U[1] * l[0] + U[3] * l[1], U[0] * l[2] + U[2] * l[3], U[1] * l[2] + U[3] * l[3], U[0] * l[4] + U[2] * l[5] + U[4], U[1] * l[4] + U[3] * l[5] + U[5]];\n }\n static applyTransform(U, l) {\n const d = U[0] * l[0] + U[1] * l[2] + l[4], t = U[0] * l[1] + U[1] * l[3] + l[5];\n return [d, t];\n }\n static applyInverseTransform(U, l) {\n const d = l[0] * l[3] - l[1] * l[2], t = (U[0] * l[3] - U[1] * l[2] + l[2] * l[5] - l[4] * l[3]) / d, Z = (-U[0] * l[1] + U[1] * l[0] + l[4] * l[1] - l[5] * l[0]) / d;\n return [t, Z];\n }\n static getAxialAlignedBoundingBox(U, l) {\n const d = this.applyTransform(U, l), t = this.applyTransform(U.slice(2, 4), l), Z = this.applyTransform([U[0], U[3]], l), F = this.applyTransform([U[2], U[1]], l);\n return [Math.min(d[0], t[0], Z[0], F[0]), Math.min(d[1], t[1], Z[1], F[1]), Math.max(d[0], t[0], Z[0], F[0]), Math.max(d[1], t[1], Z[1], F[1])];\n }\n static inverseTransform(U) {\n const l = U[0] * U[3] - U[1] * U[2];\n return [U[3] / l, -U[1] / l, -U[2] / l, U[0] / l, (U[2] * U[5] - U[4] * U[3]) / l, (U[4] * U[1] - U[5] * U[0]) / l];\n }\n static singularValueDecompose2dScale(U) {\n const l = [U[0], U[2], U[1], U[3]], d = U[0] * l[0] + U[1] * l[2], t = U[0] * l[1] + U[1] * l[3], Z = U[2] * l[0] + U[3] * l[2], F = U[2] * l[1] + U[3] * l[3], c = (d + F) / 2, Q = Math.sqrt((d + F) ** 2 - 4 * (d * F - Z * t)) / 2, a = c + Q || 1, V = c - Q || 1;\n return [Math.sqrt(a), Math.sqrt(V)];\n }\n static normalizeRect(U) {\n const l = U.slice(0);\n return U[0] > U[2] && (l[0] = U[2], l[2] = U[0]), U[1] > U[3] && (l[1] = U[3], l[3] = U[1]), l;\n }\n static intersect(U, l) {\n const d = Math.max(Math.min(U[0], U[2]), Math.min(l[0], l[2])), t = Math.min(Math.max(U[0], U[2]), Math.max(l[0], l[2]));\n if (d > t)\n return null;\n const Z = Math.max(Math.min(U[1], U[3]), Math.min(l[1], l[3])), F = Math.min(Math.max(U[1], U[3]), Math.max(l[1], l[3]));\n return Z > F ? null : [d, Z, t, F];\n }\n static bezierBoundingBox(U, l, d, t, Z, F, c, Q, a) {\n return a ? (a[0] = Math.min(a[0], U, c), a[1] = Math.min(a[1], l, Q), a[2] = Math.max(a[2], U, c), a[3] = Math.max(a[3], l, Q)) : a = [Math.min(U, c), Math.min(l, Q), Math.max(U, c), Math.max(l, Q)], h(this, xt, gV).call(this, U, d, Z, c, l, t, F, Q, 3 * (-U + 3 * (d - Z) + c), 6 * (U - 2 * d + Z), 3 * (d - U), a), h(this, xt, gV).call(this, U, d, Z, c, l, t, F, Q, 3 * (-l + 3 * (t - F) + Q), 6 * (l - 2 * t + F), 3 * (t - l), a), a;\n }\n}, xt = new WeakSet(), fQ = function(U, l, d, t, Z, F, c, Q, a, V) {\n if (a <= 0 || a >= 1)\n return;\n const W = 1 - a, i = a * a, R = i * a, N = W * (W * (W * U + 3 * a * l) + 3 * i * d) + R * t, b = W * (W * (W * Z + 3 * a * F) + 3 * i * c) + R * Q;\n V[0] = Math.min(V[0], N), V[1] = Math.min(V[1], b), V[2] = Math.max(V[2], N), V[3] = Math.max(V[3], b);\n}, gV = function(U, l, d, t, Z, F, c, Q, a, V, W, i) {\n if (Math.abs(a) < 1e-12) {\n Math.abs(V) >= 1e-12 && h(this, xt, fQ).call(this, U, l, d, t, Z, F, c, Q, -W / V, i);\n return;\n }\n const R = V ** 2 - 4 * W * a;\n if (R < 0)\n return;\n const N = Math.sqrt(R), b = 2 * a;\n h(this, xt, fQ).call(this, U, l, d, t, Z, F, c, Q, (-V + N) / b, i), h(this, xt, fQ).call(this, U, l, d, t, Z, F, c, Q, (-V - N) / b, i);\n}, m(rV, xt), rV);\nfunction Bb(s) {\n return decodeURIComponent(escape(s));\n}\nlet XV = null, cR = null;\nfunction yb(s) {\n return XV || (XV = /([\\u00a0\\u00b5\\u037e\\u0eb3\\u2000-\\u200a\\u202f\\u2126\\ufb00-\\ufb04\\ufb06\\ufb20-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufba1\\ufba4-\\ufba9\\ufbae-\\ufbb1\\ufbd3-\\ufbdc\\ufbde-\\ufbe7\\ufbea-\\ufbf8\\ufbfc-\\ufbfd\\ufc00-\\ufc5d\\ufc64-\\ufcf1\\ufcf5-\\ufd3d\\ufd88\\ufdf4\\ufdfa-\\ufdfb\\ufe71\\ufe77\\ufe79\\ufe7b\\ufe7d]+)|(\\ufb05+)/gu, cR = /* @__PURE__ */ new Map([[\"ſt\", \"ſt\"]])), s.replaceAll(XV, (U, l, d) => l ? l.normalize(\"NFKC\") : cR.get(d));\n}\nfunction Lb() {\n if (typeof crypto < \"u\" && typeof (crypto == null ? void 0 : crypto.randomUUID) == \"function\")\n return crypto.randomUUID();\n const s = new Uint8Array(32);\n if (typeof crypto < \"u\" && typeof (crypto == null ? void 0 : crypto.getRandomValues) == \"function\")\n crypto.getRandomValues(s);\n else\n for (let U = 0; U < 32; U++)\n s[U] = Math.floor(Math.random() * 255);\n return NN(s);\n}\nconst Ci = \"pdfjs_internal_id_\", dt = {\n BEZIER_CURVE_TO: 0,\n MOVE_TO: 1,\n LINE_TO: 2,\n QUADRATIC_CURVE_TO: 3,\n RESTORE: 4,\n SAVE: 5,\n SCALE: 6,\n TRANSFORM: 7,\n TRANSLATE: 8\n};\nVl(4628);\nVl(7642);\nVl(8004);\nVl(3853);\nVl(5876);\nVl(2475);\nVl(5024);\nVl(1698);\nVl(1454);\nVl(4979);\nVl(8992);\nVl(4743);\nVl(3215);\nVl(7550);\nVl(8335);\nVl(4520);\nclass hN {\n addFilter(U) {\n return \"none\";\n }\n addHCMFilter(U, l) {\n return \"none\";\n }\n addAlphaFilter(U) {\n return \"none\";\n }\n addLuminosityFilter(U) {\n return \"none\";\n }\n addHighlightHCMFilter(U, l, d, t, Z) {\n return \"none\";\n }\n destroy(U = !1) {\n }\n}\nvar wn;\nclass eN {\n constructor({\n enableHWA: U = !1\n }) {\n m(this, wn, !1);\n e(this, wn, U);\n }\n create(U, l) {\n if (U <= 0 || l <= 0)\n throw new Error(\"Invalid canvas size\");\n const d = this._createCanvas(U, l);\n return {\n canvas: d,\n context: d.getContext(\"2d\", {\n willReadFrequently: !n(this, wn)\n })\n };\n }\n reset(U, l, d) {\n if (!U.canvas)\n throw new Error(\"Canvas is not specified\");\n if (l <= 0 || d <= 0)\n throw new Error(\"Invalid canvas size\");\n U.canvas.width = l, U.canvas.height = d;\n }\n destroy(U) {\n if (!U.canvas)\n throw new Error(\"Canvas is not specified\");\n U.canvas.width = 0, U.canvas.height = 0, U.canvas = null, U.context = null;\n }\n _createCanvas(U, l) {\n Ol(\"Abstract method `_createCanvas` called.\");\n }\n}\nwn = new WeakMap();\nclass bN {\n constructor({\n baseUrl: U = null,\n isCompressed: l = !0\n }) {\n this.baseUrl = U, this.isCompressed = l;\n }\n async fetch({\n name: U\n }) {\n if (!this.baseUrl)\n throw new Error(\"Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided.\");\n if (!U)\n throw new Error(\"CMap name must be specified.\");\n const l = this.baseUrl + U + (this.isCompressed ? \".bcmap\" : \"\"), d = this.isCompressed ? xV.BINARY : xV.NONE;\n return this._fetchData(l, d).catch((t) => {\n throw new Error(`Unable to load ${this.isCompressed ? \"binary \" : \"\"}CMap at: ${l}`);\n });\n }\n _fetchData(U, l) {\n Ol(\"Abstract method `_fetchData` called.\");\n }\n}\nclass mN {\n constructor({\n baseUrl: U = null\n }) {\n this.baseUrl = U;\n }\n async fetch({\n filename: U\n }) {\n if (!this.baseUrl)\n throw new Error(\"Ensure that the `standardFontDataUrl` API parameter is provided.\");\n if (!U)\n throw new Error(\"Font filename must be specified.\");\n const l = `${this.baseUrl}${U}`;\n return this._fetchData(l).catch((d) => {\n throw new Error(`Unable to load font data at: ${l}`);\n });\n }\n _fetchData(U) {\n Ol(\"Abstract method `_fetchData` called.\");\n }\n}\nclass zb {\n create(U, l, d = !1) {\n if (U <= 0 || l <= 0)\n throw new Error(\"Invalid SVG dimensions\");\n const t = this._createSVG(\"svg:svg\");\n return t.setAttribute(\"version\", \"1.1\"), d || (t.setAttribute(\"width\", `${U}px`), t.setAttribute(\"height\", `${l}px`)), t.setAttribute(\"preserveAspectRatio\", \"none\"), t.setAttribute(\"viewBox\", `0 0 ${U} ${l}`), t;\n }\n createElement(U) {\n if (typeof U != \"string\")\n throw new Error(\"Invalid SVG element type\");\n return this._createSVG(U);\n }\n _createSVG(U) {\n Ol(\"Abstract method `_createSVG` called.\");\n }\n}\nconst Zt = \"http://www.w3.org/2000/svg\";\nvar _d;\nlet Pc = (_d = class {\n}, _(_d, \"CSS\", 96), _(_d, \"PDF\", 72), _(_d, \"PDF_TO_CSS_UNITS\", _d.CSS / _d.PDF), _d);\nvar $Z, lF, Yd, Qt, RU, Ka, UF, K, iU, J0, G0, AQ, T0, MN, KV, S0, nn, sn, vV, Qn;\nclass kb extends hN {\n constructor({\n docId: l,\n ownerDocument: d = globalThis.document\n }) {\n super();\n m(this, K);\n m(this, $Z);\n m(this, lF);\n m(this, Yd);\n m(this, Qt);\n m(this, RU);\n m(this, Ka);\n m(this, UF, 0);\n e(this, Qt, l), e(this, RU, d);\n }\n addFilter(l) {\n if (!l)\n return \"none\";\n let d = n(this, K, iU).get(l);\n if (d)\n return d;\n const [t, Z, F] = h(this, K, AQ).call(this, l), c = l.length === 1 ? t : `${t}${Z}${F}`;\n if (d = n(this, K, iU).get(c), d)\n return n(this, K, iU).set(l, d), d;\n const Q = `g_${n(this, Qt)}_transfer_map_${VU(this, UF)._++}`, a = h(this, K, T0).call(this, Q);\n n(this, K, iU).set(l, a), n(this, K, iU).set(c, a);\n const V = h(this, K, S0).call(this, Q);\n return h(this, K, sn).call(this, t, Z, F, V), a;\n }\n addHCMFilter(l, d) {\n var N;\n const t = `${l}-${d}`, Z = \"base\";\n let F = n(this, K, J0).get(Z);\n if ((F == null ? void 0 : F.key) === t || (F ? ((N = F.filter) == null || N.remove(), F.key = t, F.url = \"none\", F.filter = null) : (F = {\n key: t,\n url: \"none\",\n filter: null\n }, n(this, K, J0).set(Z, F)), !l || !d))\n return F.url;\n const c = h(this, K, Qn).call(this, l);\n l = H.makeHexColor(...c);\n const Q = h(this, K, Qn).call(this, d);\n if (d = H.makeHexColor(...Q), n(this, K, G0).style.color = \"\", l === \"#000000\" && d === \"#ffffff\" || l === d)\n return F.url;\n const a = new Array(256);\n for (let b = 0; b <= 255; b++) {\n const J = b / 255;\n a[b] = J <= 0.03928 ? J / 12.92 : ((J + 0.055) / 1.055) ** 2.4;\n }\n const V = a.join(\",\"), W = `g_${n(this, Qt)}_hcm_filter`, i = F.filter = h(this, K, S0).call(this, W);\n h(this, K, sn).call(this, V, V, V, i), h(this, K, KV).call(this, i);\n const R = (b, J) => {\n const M = c[b] / 255, G = Q[b] / 255, T = new Array(J + 1);\n for (let u = 0; u <= J; u++)\n T[u] = M + u / J * (G - M);\n return T.join(\",\");\n };\n return h(this, K, sn).call(this, R(0, 5), R(1, 5), R(2, 5), i), F.url = h(this, K, T0).call(this, W), F.url;\n }\n addAlphaFilter(l) {\n let d = n(this, K, iU).get(l);\n if (d)\n return d;\n const [t] = h(this, K, AQ).call(this, [l]), Z = `alpha_${t}`;\n if (d = n(this, K, iU).get(Z), d)\n return n(this, K, iU).set(l, d), d;\n const F = `g_${n(this, Qt)}_alpha_map_${VU(this, UF)._++}`, c = h(this, K, T0).call(this, F);\n n(this, K, iU).set(l, c), n(this, K, iU).set(Z, c);\n const Q = h(this, K, S0).call(this, F);\n return h(this, K, vV).call(this, t, Q), c;\n }\n addLuminosityFilter(l) {\n let d = n(this, K, iU).get(l || \"luminosity\");\n if (d)\n return d;\n let t, Z;\n if (l ? ([t] = h(this, K, AQ).call(this, [l]), Z = `luminosity_${t}`) : Z = \"luminosity\", d = n(this, K, iU).get(Z), d)\n return n(this, K, iU).set(l, d), d;\n const F = `g_${n(this, Qt)}_luminosity_map_${VU(this, UF)._++}`, c = h(this, K, T0).call(this, F);\n n(this, K, iU).set(l, c), n(this, K, iU).set(Z, c);\n const Q = h(this, K, S0).call(this, F);\n return h(this, K, MN).call(this, Q), l && h(this, K, vV).call(this, t, Q), c;\n }\n addHighlightHCMFilter(l, d, t, Z, F) {\n var G;\n const c = `${d}-${t}-${Z}-${F}`;\n let Q = n(this, K, J0).get(l);\n if ((Q == null ? void 0 : Q.key) === c || (Q ? ((G = Q.filter) == null || G.remove(), Q.key = c, Q.url = \"none\", Q.filter = null) : (Q = {\n key: c,\n url: \"none\",\n filter: null\n }, n(this, K, J0).set(l, Q)), !d || !t))\n return Q.url;\n const [a, V] = [d, t].map(h(this, K, Qn).bind(this));\n let W = Math.round(0.2126 * a[0] + 0.7152 * a[1] + 0.0722 * a[2]), i = Math.round(0.2126 * V[0] + 0.7152 * V[1] + 0.0722 * V[2]), [R, N] = [Z, F].map(h(this, K, Qn).bind(this));\n i < W && ([W, i, R, N] = [i, W, N, R]), n(this, K, G0).style.color = \"\";\n const b = (T, u, X) => {\n const Y = new Array(256), o = (i - W) / X, y = T / 255, S = (u - T) / (255 * X);\n let p = 0;\n for (let L = 0; L <= X; L++) {\n const I = Math.round(W + L * o), D = y + L * S;\n for (let r = p; r <= I; r++)\n Y[r] = D;\n p = I + 1;\n }\n for (let L = p; L < 256; L++)\n Y[L] = Y[p - 1];\n return Y.join(\",\");\n }, J = `g_${n(this, Qt)}_hcm_${l}_filter`, M = Q.filter = h(this, K, S0).call(this, J);\n return h(this, K, KV).call(this, M), h(this, K, sn).call(this, b(R[0], N[0], 5), b(R[1], N[1], 5), b(R[2], N[2], 5), M), Q.url = h(this, K, T0).call(this, J), Q.url;\n }\n destroy(l = !1) {\n l && n(this, K, J0).size !== 0 || (n(this, Yd) && (n(this, Yd).parentNode.parentNode.remove(), e(this, Yd, null)), n(this, lF) && (n(this, lF).clear(), e(this, lF, null)), e(this, UF, 0));\n }\n}\n$Z = new WeakMap(), lF = new WeakMap(), Yd = new WeakMap(), Qt = new WeakMap(), RU = new WeakMap(), Ka = new WeakMap(), UF = new WeakMap(), K = new WeakSet(), iU = function() {\n return n(this, lF) || e(this, lF, /* @__PURE__ */ new Map());\n}, J0 = function() {\n return n(this, Ka) || e(this, Ka, /* @__PURE__ */ new Map());\n}, G0 = function() {\n if (!n(this, Yd)) {\n const l = n(this, RU).createElement(\"div\"), {\n style: d\n } = l;\n d.visibility = \"hidden\", d.contain = \"strict\", d.width = d.height = 0, d.position = \"absolute\", d.top = d.left = 0, d.zIndex = -1;\n const t = n(this, RU).createElementNS(Zt, \"svg\");\n t.setAttribute(\"width\", 0), t.setAttribute(\"height\", 0), e(this, Yd, n(this, RU).createElementNS(Zt, \"defs\")), l.append(t), t.append(n(this, Yd)), n(this, RU).body.append(l);\n }\n return n(this, Yd);\n}, AQ = function(l) {\n if (l.length === 1) {\n const a = l[0], V = new Array(256);\n for (let i = 0; i < 256; i++)\n V[i] = a[i] / 255;\n const W = V.join(\",\");\n return [W, W, W];\n }\n const [d, t, Z] = l, F = new Array(256), c = new Array(256), Q = new Array(256);\n for (let a = 0; a < 256; a++)\n F[a] = d[a] / 255, c[a] = t[a] / 255, Q[a] = Z[a] / 255;\n return [F.join(\",\"), c.join(\",\"), Q.join(\",\")];\n}, T0 = function(l) {\n if (n(this, $Z) === void 0) {\n e(this, $Z, \"\");\n const d = n(this, RU).URL;\n d !== n(this, RU).baseURI && (eV(d) ? Zl('#createUrl: ignore \"data:\"-URL for performance reasons.') : e(this, $Z, d.split(\"#\", 1)[0]));\n }\n return `url(${n(this, $Z)}#${l})`;\n}, MN = function(l) {\n const d = n(this, RU).createElementNS(Zt, \"feColorMatrix\");\n d.setAttribute(\"type\", \"matrix\"), d.setAttribute(\"values\", \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0\"), l.append(d);\n}, KV = function(l) {\n const d = n(this, RU).createElementNS(Zt, \"feColorMatrix\");\n d.setAttribute(\"type\", \"matrix\"), d.setAttribute(\"values\", \"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\"), l.append(d);\n}, S0 = function(l) {\n const d = n(this, RU).createElementNS(Zt, \"filter\");\n return d.setAttribute(\"color-interpolation-filters\", \"sRGB\"), d.setAttribute(\"id\", l), n(this, K, G0).append(d), d;\n}, nn = function(l, d, t) {\n const Z = n(this, RU).createElementNS(Zt, d);\n Z.setAttribute(\"type\", \"discrete\"), Z.setAttribute(\"tableValues\", t), l.append(Z);\n}, sn = function(l, d, t, Z) {\n const F = n(this, RU).createElementNS(Zt, \"feComponentTransfer\");\n Z.append(F), h(this, K, nn).call(this, F, \"feFuncR\", l), h(this, K, nn).call(this, F, \"feFuncG\", d), h(this, K, nn).call(this, F, \"feFuncB\", t);\n}, vV = function(l, d) {\n const t = n(this, RU).createElementNS(Zt, \"feComponentTransfer\");\n d.append(t), h(this, K, nn).call(this, t, \"feFuncA\", l);\n}, Qn = function(l) {\n return n(this, K, G0).style.color = l, Oi(getComputedStyle(n(this, K, G0)).getPropertyValue(\"color\"));\n};\nclass Ib extends eN {\n constructor({\n ownerDocument: U = globalThis.document,\n enableHWA: l = !1\n }) {\n super({\n enableHWA: l\n }), this._document = U;\n }\n _createCanvas(U, l) {\n const d = this._document.createElement(\"canvas\");\n return d.width = U, d.height = l, d;\n }\n}\nasync function hV(s, U = \"text\") {\n if (an(s, document.baseURI)) {\n const l = await fetch(s);\n if (!l.ok)\n throw new Error(l.statusText);\n switch (U) {\n case \"arraybuffer\":\n return l.arrayBuffer();\n case \"blob\":\n return l.blob();\n case \"json\":\n return l.json();\n }\n return l.text();\n }\n return new Promise((l, d) => {\n const t = new XMLHttpRequest();\n t.open(\"GET\", s, !0), t.responseType = U, t.onreadystatechange = () => {\n if (t.readyState === XMLHttpRequest.DONE) {\n if (t.status === 200 || t.status === 0) {\n switch (U) {\n case \"arraybuffer\":\n case \"blob\":\n case \"json\":\n l(t.response);\n return;\n }\n l(t.responseText);\n return;\n }\n d(new Error(t.statusText));\n }\n }, t.send(null);\n });\n}\nclass JN extends bN {\n _fetchData(U, l) {\n return hV(U, this.isCompressed ? \"arraybuffer\" : \"text\").then((d) => ({\n cMapData: d instanceof ArrayBuffer ? new Uint8Array(d) : NV(d),\n compressionType: l\n }));\n }\n}\nclass GN extends mN {\n _fetchData(U) {\n return hV(U, \"arraybuffer\").then((l) => new Uint8Array(l));\n }\n}\nlet wi = class extends zb {\n _createSVG(U) {\n return document.createElementNS(Zt, U);\n }\n};\nclass yQ {\n constructor({\n viewBox: U,\n scale: l,\n rotation: d,\n offsetX: t = 0,\n offsetY: Z = 0,\n dontFlip: F = !1\n }) {\n this.viewBox = U, this.scale = l, this.rotation = d, this.offsetX = t, this.offsetY = Z;\n const c = (U[2] + U[0]) / 2, Q = (U[3] + U[1]) / 2;\n let a, V, W, i;\n switch (d %= 360, d < 0 && (d += 360), d) {\n case 180:\n a = -1, V = 0, W = 0, i = 1;\n break;\n case 90:\n a = 0, V = 1, W = 1, i = 0;\n break;\n case 270:\n a = 0, V = -1, W = -1, i = 0;\n break;\n case 0:\n a = 1, V = 0, W = 0, i = -1;\n break;\n default:\n throw new Error(\"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\");\n }\n F && (W = -W, i = -i);\n let R, N, b, J;\n a === 0 ? (R = Math.abs(Q - U[1]) * l + t, N = Math.abs(c - U[0]) * l + Z, b = (U[3] - U[1]) * l, J = (U[2] - U[0]) * l) : (R = Math.abs(c - U[0]) * l + t, N = Math.abs(Q - U[1]) * l + Z, b = (U[2] - U[0]) * l, J = (U[3] - U[1]) * l), this.transform = [a * l, V * l, W * l, i * l, R - a * l * c - W * l * Q, N - V * l * c - i * l * Q], this.width = b, this.height = J;\n }\n get rawDims() {\n const {\n viewBox: U\n } = this;\n return Ql(this, \"rawDims\", {\n pageWidth: U[2] - U[0],\n pageHeight: U[3] - U[1],\n pageX: U[0],\n pageY: U[1]\n });\n }\n clone({\n scale: U = this.scale,\n rotation: l = this.rotation,\n offsetX: d = this.offsetX,\n offsetY: t = this.offsetY,\n dontFlip: Z = !1\n } = {}) {\n return new yQ({\n viewBox: this.viewBox.slice(),\n scale: U,\n rotation: l,\n offsetX: d,\n offsetY: t,\n dontFlip: Z\n });\n }\n convertToViewportPoint(U, l) {\n return H.applyTransform([U, l], this.transform);\n }\n convertToViewportRectangle(U) {\n const l = H.applyTransform([U[0], U[1]], this.transform), d = H.applyTransform([U[2], U[3]], this.transform);\n return [l[0], l[1], d[0], d[1]];\n }\n convertToPdfPoint(U, l) {\n return H.applyInverseTransform([U, l], this.transform);\n }\n}\nlet xi = class extends OZ {\n constructor(U, l = 0) {\n super(U, \"RenderingCancelledException\"), this.extraDelay = l;\n }\n};\nfunction eV(s) {\n const U = s.length;\n let l = 0;\n for (; l < U && s[l].trim() === \"\"; )\n l++;\n return s.substring(l, l + 5).toLowerCase() === \"data:\";\n}\nfunction ji(s) {\n return typeof s == \"string\" && /\\.pdf$/i.test(s);\n}\nfunction Db(s) {\n return [s] = s.split(/[#?]/, 1), s.substring(s.lastIndexOf(\"/\") + 1);\n}\nfunction Eb(s, U = \"document.pdf\") {\n if (typeof s != \"string\")\n return U;\n if (eV(s))\n return Zl('getPdfFilenameFromUrl: ignore \"data:\"-URL for performance reasons.'), U;\n const l = /^(?:(?:[^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/, d = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i, t = l.exec(s);\n let Z = d.exec(t[1]) || d.exec(t[2]) || d.exec(t[3]);\n if (Z && (Z = Z[0], Z.includes(\"%\")))\n try {\n Z = d.exec(decodeURIComponent(Z))[0];\n } catch {\n }\n return Z || U;\n}\nclass nR {\n constructor() {\n _(this, \"started\", /* @__PURE__ */ Object.create(null));\n _(this, \"times\", []);\n }\n time(U) {\n U in this.started && Zl(`Timer is already running for ${U}`), this.started[U] = Date.now();\n }\n timeEnd(U) {\n U in this.started || Zl(`Timer has not been started for ${U}`), this.times.push({\n name: U,\n start: this.started[U],\n end: Date.now()\n }), delete this.started[U];\n }\n toString() {\n const U = [];\n let l = 0;\n for (const {\n name: d\n } of this.times)\n l = Math.max(d.length, l);\n for (const {\n name: d,\n start: t,\n end: Z\n } of this.times)\n U.push(`${d.padEnd(l)} ${Z - t}ms\n`);\n return U.join(\"\");\n }\n}\nfunction an(s, U) {\n try {\n const {\n protocol: l\n } = U ? new URL(s, U) : new URL(s);\n return l === \"http:\" || l === \"https:\";\n } catch {\n return !1;\n }\n}\nfunction nd(s) {\n s.preventDefault();\n}\nfunction sR(s) {\n console.log(\"Deprecated API usage: \" + s);\n}\nlet QR, TN = class {\n static toDateObject(U) {\n if (!U || typeof U != \"string\")\n return null;\n QR || (QR = new RegExp(\"^D:(\\\\d{4})(\\\\d{2})?(\\\\d{2})?(\\\\d{2})?(\\\\d{2})?(\\\\d{2})?([Z|+|-])?(\\\\d{2})?'?(\\\\d{2})?'?\"));\n const l = QR.exec(U);\n if (!l)\n return null;\n const d = parseInt(l[1], 10);\n let t = parseInt(l[2], 10);\n t = t >= 1 && t <= 12 ? t - 1 : 0;\n let Z = parseInt(l[3], 10);\n Z = Z >= 1 && Z <= 31 ? Z : 1;\n let F = parseInt(l[4], 10);\n F = F >= 0 && F <= 23 ? F : 0;\n let c = parseInt(l[5], 10);\n c = c >= 0 && c <= 59 ? c : 0;\n let Q = parseInt(l[6], 10);\n Q = Q >= 0 && Q <= 59 ? Q : 0;\n const a = l[7] || \"Z\";\n let V = parseInt(l[8], 10);\n V = V >= 0 && V <= 23 ? V : 0;\n let W = parseInt(l[9], 10) || 0;\n return W = W >= 0 && W <= 59 ? W : 0, a === \"-\" ? (F += V, c += W) : a === \"+\" && (F -= V, c -= W), new Date(Date.UTC(d, t, Z, F, c, Q));\n }\n};\nfunction rb(s, {\n scale: U = 1,\n rotation: l = 0\n}) {\n const {\n width: d,\n height: t\n } = s.attributes.style, Z = [0, 0, parseInt(d), parseInt(t)];\n return new yQ({\n viewBox: Z,\n scale: U,\n rotation: l\n });\n}\nfunction Oi(s) {\n if (s.startsWith(\"#\")) {\n const U = parseInt(s.slice(1), 16);\n return [(U & 16711680) >> 16, (U & 65280) >> 8, U & 255];\n }\n return s.startsWith(\"rgb(\") ? s.slice(4, -1).split(\",\").map((U) => parseInt(U)) : s.startsWith(\"rgba(\") ? s.slice(5, -1).split(\",\").map((U) => parseInt(U)).slice(0, 3) : (Zl(`Not a valid color format: \"${s}\"`), [0, 0, 0]);\n}\nfunction Cb(s) {\n const U = document.createElement(\"span\");\n U.style.visibility = \"hidden\", document.body.append(U);\n for (const l of s.keys()) {\n U.style.color = l;\n const d = window.getComputedStyle(U).color;\n s.set(l, Oi(d));\n }\n U.remove();\n}\nfunction pl(s) {\n const {\n a: U,\n b: l,\n c: d,\n d: t,\n e: Z,\n f: F\n } = s.getTransform();\n return [U, l, d, t, Z, F];\n}\nfunction tt(s) {\n const {\n a: U,\n b: l,\n c: d,\n d: t,\n e: Z,\n f: F\n } = s.getTransform().invertSelf();\n return [U, l, d, t, Z, F];\n}\nfunction i0(s, U, l = !1, d = !0) {\n if (U instanceof yQ) {\n const {\n pageWidth: t,\n pageHeight: Z\n } = U.rawDims, {\n style: F\n } = s, c = DU.isCSSRoundSupported, Q = `var(--scale-factor) * ${t}px`, a = `var(--scale-factor) * ${Z}px`, V = c ? `round(down, ${Q}, var(--scale-round-x, 1px))` : `calc(${Q})`, W = c ? `round(down, ${a}, var(--scale-round-y, 1px))` : `calc(${a})`;\n !l || U.rotation % 180 === 0 ? (F.width = V, F.height = W) : (F.width = W, F.height = V);\n }\n d && s.setAttribute(\"data-main-rotation\", U.rotation);\n}\nlet HV = class {\n constructor() {\n const U = window.devicePixelRatio || 1;\n this.sx = U, this.sy = U;\n }\n get scaled() {\n return this.sx !== 1 || this.sy !== 1;\n }\n get symmetric() {\n return this.sx === this.sy;\n }\n};\nvar qt, dF, ad, tF, xn, jn, va, SN, SU, XN, uN, _Q, YN, fV;\nconst ct = class ct {\n constructor(U) {\n m(this, SU);\n m(this, qt, null);\n m(this, dF, null);\n m(this, ad);\n m(this, tF, null);\n m(this, xn, null);\n e(this, ad, U), n(ct, jn) || e(ct, jn, Object.freeze({\n freetext: \"pdfjs-editor-remove-freetext-button\",\n highlight: \"pdfjs-editor-remove-highlight-button\",\n ink: \"pdfjs-editor-remove-ink-button\",\n stamp: \"pdfjs-editor-remove-stamp-button\"\n }));\n }\n render() {\n const U = e(this, qt, document.createElement(\"div\"));\n U.classList.add(\"editToolbar\", \"hidden\"), U.setAttribute(\"role\", \"toolbar\");\n const l = n(this, ad)._uiManager._signal;\n U.addEventListener(\"contextmenu\", nd, {\n signal: l\n }), U.addEventListener(\"pointerdown\", h(ct, va, SN), {\n signal: l\n });\n const d = e(this, tF, document.createElement(\"div\"));\n d.className = \"buttons\", U.append(d);\n const t = n(this, ad).toolbarPosition;\n if (t) {\n const {\n style: Z\n } = U, F = n(this, ad)._uiManager.direction === \"ltr\" ? 1 - t[0] : t[0];\n Z.insetInlineEnd = `${100 * F}%`, Z.top = `calc(${100 * t[1]}% + var(--editor-toolbar-vert-offset))`;\n }\n return h(this, SU, YN).call(this), U;\n }\n get div() {\n return n(this, qt);\n }\n hide() {\n var U;\n n(this, qt).classList.add(\"hidden\"), (U = n(this, dF)) == null || U.hideDropdown();\n }\n show() {\n var U;\n n(this, qt).classList.remove(\"hidden\"), (U = n(this, xn)) == null || U.shown();\n }\n async addAltText(U) {\n const l = await U.render();\n h(this, SU, _Q).call(this, l), n(this, tF).prepend(l, n(this, SU, fV)), e(this, xn, U);\n }\n addColorPicker(U) {\n e(this, dF, U);\n const l = U.renderButton();\n h(this, SU, _Q).call(this, l), n(this, tF).prepend(l, n(this, SU, fV));\n }\n remove() {\n var U;\n n(this, qt).remove(), (U = n(this, dF)) == null || U.destroy(), e(this, dF, null);\n }\n};\nqt = new WeakMap(), dF = new WeakMap(), ad = new WeakMap(), tF = new WeakMap(), xn = new WeakMap(), jn = new WeakMap(), va = new WeakSet(), SN = function(U) {\n U.stopPropagation();\n}, SU = new WeakSet(), XN = function(U) {\n n(this, ad)._focusEventsAllowed = !1, U.preventDefault(), U.stopPropagation();\n}, uN = function(U) {\n n(this, ad)._focusEventsAllowed = !0, U.preventDefault(), U.stopPropagation();\n}, _Q = function(U) {\n const l = n(this, ad)._uiManager._signal;\n U.addEventListener(\"focusin\", h(this, SU, XN).bind(this), {\n capture: !0,\n signal: l\n }), U.addEventListener(\"focusout\", h(this, SU, uN).bind(this), {\n capture: !0,\n signal: l\n }), U.addEventListener(\"contextmenu\", nd, {\n signal: l\n });\n}, YN = function() {\n const {\n editorType: U,\n _uiManager: l\n } = n(this, ad), d = document.createElement(\"button\");\n d.className = \"delete\", d.tabIndex = 0, d.setAttribute(\"data-l10n-id\", n(ct, jn)[U]), h(this, SU, _Q).call(this, d), d.addEventListener(\"click\", (t) => {\n l.delete();\n }, {\n signal: l._signal\n }), n(this, tF).append(d);\n}, fV = function() {\n const U = document.createElement(\"div\");\n return U.className = \"divider\", U;\n}, m(ct, va), m(ct, jn, null);\nlet PV = ct;\nvar On, ZF, FF, xZ, oN, pN, BN;\nclass wb {\n constructor(U) {\n m(this, xZ);\n m(this, On, null);\n m(this, ZF, null);\n m(this, FF);\n e(this, FF, U);\n }\n show(U, l, d) {\n const [t, Z] = h(this, xZ, pN).call(this, l, d), {\n style: F\n } = n(this, ZF) || e(this, ZF, h(this, xZ, oN).call(this));\n U.append(n(this, ZF)), F.insetInlineEnd = `${100 * t}%`, F.top = `calc(${100 * Z}% + var(--editor-toolbar-vert-offset))`;\n }\n hide() {\n n(this, ZF).remove();\n }\n}\nOn = new WeakMap(), ZF = new WeakMap(), FF = new WeakMap(), xZ = new WeakSet(), oN = function() {\n const U = e(this, ZF, document.createElement(\"div\"));\n U.className = \"editToolbar\", U.setAttribute(\"role\", \"toolbar\"), U.addEventListener(\"contextmenu\", nd, {\n signal: n(this, FF)._signal\n });\n const l = e(this, On, document.createElement(\"div\"));\n return l.className = \"buttons\", U.append(l), h(this, xZ, BN).call(this), U;\n}, pN = function(U, l) {\n let d = 0, t = 0;\n for (const Z of U) {\n const F = Z.y + Z.height;\n if (F < d)\n continue;\n const c = Z.x + (l ? Z.width : 0);\n if (F > d) {\n t = c, d = F;\n continue;\n }\n l ? c > t && (t = c) : c < t && (t = c);\n }\n return [l ? 1 - t : t, d];\n}, BN = function() {\n const U = document.createElement(\"button\");\n U.className = \"highlightButton\", U.tabIndex = 0, U.setAttribute(\"data-l10n-id\", \"pdfjs-highlight-floating-button1\");\n const l = document.createElement(\"span\");\n U.append(l), l.className = \"visuallyHidden\", l.setAttribute(\"data-l10n-id\", \"pdfjs-highlight-floating-button-label\");\n const d = n(this, FF)._signal;\n U.addEventListener(\"contextmenu\", nd, {\n signal: d\n }), U.addEventListener(\"click\", () => {\n n(this, FF).highlightSelection(\"floating_button\");\n }, {\n signal: d\n }), n(this, On).append(U);\n};\nfunction ra(s, U, l) {\n for (const d of l)\n U.addEventListener(d, s[d].bind(s));\n}\nfunction xb(s) {\n return Math.round(Math.min(255, Math.max(1, 255 * s))).toString(16).padStart(2, \"0\");\n}\nvar Ha;\nclass jb {\n constructor() {\n m(this, Ha, 0);\n }\n get id() {\n return `${mb}${VU(this, Ha)._++}`;\n }\n}\nHa = new WeakMap();\nvar z0, gn, NU, k0, qQ;\nconst qi = class qi {\n constructor() {\n m(this, k0);\n m(this, z0, Lb());\n m(this, gn, 0);\n m(this, NU, null);\n }\n static get _isSVGFittingCanvas() {\n const U = 'data:image/svg+xml;charset=UTF-8,', d = new OffscreenCanvas(1, 3).getContext(\"2d\", {\n willReadFrequently: !0\n }), t = new Image();\n t.src = U;\n const Z = t.decode().then(() => (d.drawImage(t, 0, 0, 1, 1, 0, 0, 1, 3), new Uint32Array(d.getImageData(0, 0, 1, 1).data.buffer)[0] === 0));\n return Ql(this, \"_isSVGFittingCanvas\", Z);\n }\n async getFromFile(U) {\n const {\n lastModified: l,\n name: d,\n size: t,\n type: Z\n } = U;\n return h(this, k0, qQ).call(this, `${l}_${d}_${t}_${Z}`, U);\n }\n async getFromUrl(U) {\n return h(this, k0, qQ).call(this, U, U);\n }\n async getFromBlob(U, l) {\n const d = await l;\n return h(this, k0, qQ).call(this, U, d);\n }\n async getFromId(U) {\n n(this, NU) || e(this, NU, /* @__PURE__ */ new Map());\n const l = n(this, NU).get(U);\n if (!l)\n return null;\n if (l.bitmap)\n return l.refCounter += 1, l;\n if (l.file)\n return this.getFromFile(l.file);\n if (l.blobPromise) {\n const {\n blobPromise: d\n } = l;\n return delete l.blobPromise, this.getFromBlob(l.id, d);\n }\n return this.getFromUrl(l.url);\n }\n getFromCanvas(U, l) {\n n(this, NU) || e(this, NU, /* @__PURE__ */ new Map());\n let d = n(this, NU).get(U);\n if (d != null && d.bitmap)\n return d.refCounter += 1, d;\n const t = new OffscreenCanvas(l.width, l.height);\n return t.getContext(\"2d\").drawImage(l, 0, 0), d = {\n bitmap: t.transferToImageBitmap(),\n id: `image_${n(this, z0)}_${VU(this, gn)._++}`,\n refCounter: 1,\n isSvg: !1\n }, n(this, NU).set(U, d), n(this, NU).set(d.id, d), d;\n }\n getSvgUrl(U) {\n const l = n(this, NU).get(U);\n return l != null && l.isSvg ? l.svgUrl : null;\n }\n deleteId(U) {\n var t;\n n(this, NU) || e(this, NU, /* @__PURE__ */ new Map());\n const l = n(this, NU).get(U);\n if (!l || (l.refCounter -= 1, l.refCounter !== 0))\n return;\n const {\n bitmap: d\n } = l;\n if (!l.url && !l.file) {\n const Z = new OffscreenCanvas(d.width, d.height);\n Z.getContext(\"bitmaprenderer\").transferFromImageBitmap(d), l.blobPromise = Z.convertToBlob();\n }\n (t = d.close) == null || t.call(d), l.bitmap = null;\n }\n isValidId(U) {\n return U.startsWith(`image_${n(this, z0)}_`);\n }\n};\nz0 = new WeakMap(), gn = new WeakMap(), NU = new WeakMap(), k0 = new WeakSet(), qQ = async function(U, l) {\n n(this, NU) || e(this, NU, /* @__PURE__ */ new Map());\n let d = n(this, NU).get(U);\n if (d === null)\n return null;\n if (d != null && d.bitmap)\n return d.refCounter += 1, d;\n try {\n d || (d = {\n bitmap: null,\n id: `image_${n(this, z0)}_${VU(this, gn)._++}`,\n refCounter: 0,\n isSvg: !1\n });\n let t;\n if (typeof l == \"string\" ? (d.url = l, t = await hV(l, \"blob\")) : l instanceof File ? t = d.file = l : l instanceof Blob && (t = l), t.type === \"image/svg+xml\") {\n const Z = qi._isSVGFittingCanvas, F = new FileReader(), c = new Image(), Q = new Promise((a, V) => {\n c.onload = () => {\n d.bitmap = c, d.isSvg = !0, a();\n }, F.onload = async () => {\n const W = d.svgUrl = F.result;\n c.src = await Z ? `${W}#svgView(preserveAspectRatio(none))` : W;\n }, c.onerror = F.onerror = V;\n });\n F.readAsDataURL(t), await Q;\n } else\n d.bitmap = await createImageBitmap(t);\n d.refCounter = 1;\n } catch (t) {\n console.error(t), d = null;\n }\n return n(this, NU).set(U, d), d && n(this, NU).set(d.id, d), d;\n};\nlet AV = qi;\nvar $l, $t, Kn, lU;\nclass Ob {\n constructor(U = 128) {\n m(this, $l, []);\n m(this, $t, !1);\n m(this, Kn);\n m(this, lU, -1);\n e(this, Kn, U);\n }\n add({\n cmd: U,\n undo: l,\n post: d,\n mustExec: t,\n type: Z = NaN,\n overwriteIfSameType: F = !1,\n keepUndo: c = !1\n }) {\n if (t && U(), n(this, $t))\n return;\n const Q = {\n cmd: U,\n undo: l,\n post: d,\n type: Z\n };\n if (n(this, lU) === -1) {\n n(this, $l).length > 0 && (n(this, $l).length = 0), e(this, lU, 0), n(this, $l).push(Q);\n return;\n }\n if (F && n(this, $l)[n(this, lU)].type === Z) {\n c && (Q.undo = n(this, $l)[n(this, lU)].undo), n(this, $l)[n(this, lU)] = Q;\n return;\n }\n const a = n(this, lU) + 1;\n a === n(this, Kn) ? n(this, $l).splice(0, 1) : (e(this, lU, a), a < n(this, $l).length && n(this, $l).splice(a)), n(this, $l).push(Q);\n }\n undo() {\n if (n(this, lU) === -1)\n return;\n e(this, $t, !0);\n const {\n undo: U,\n post: l\n } = n(this, $l)[n(this, lU)];\n U(), l == null || l(), e(this, $t, !1), e(this, lU, n(this, lU) - 1);\n }\n redo() {\n if (n(this, lU) < n(this, $l).length - 1) {\n e(this, lU, n(this, lU) + 1), e(this, $t, !0);\n const {\n cmd: U,\n post: l\n } = n(this, $l)[n(this, lU)];\n U(), l == null || l(), e(this, $t, !1);\n }\n }\n hasSomethingToUndo() {\n return n(this, lU) !== -1;\n }\n hasSomethingToRedo() {\n return n(this, lU) < n(this, $l).length - 1;\n }\n destroy() {\n e(this, $l, null);\n }\n}\n$l = new WeakMap(), $t = new WeakMap(), Kn = new WeakMap(), lU = new WeakMap();\nvar Pa, yN;\nclass LQ {\n constructor(U) {\n m(this, Pa);\n this.buffer = [], this.callbacks = /* @__PURE__ */ new Map(), this.allKeys = /* @__PURE__ */ new Set();\n const {\n isMac: l\n } = DU.platform;\n for (const [d, t, Z = {}] of U)\n for (const F of d) {\n const c = F.startsWith(\"mac+\");\n l && c ? (this.callbacks.set(F.slice(4), {\n callback: t,\n options: Z\n }), this.allKeys.add(F.split(\"+\").at(-1))) : !l && !c && (this.callbacks.set(F, {\n callback: t,\n options: Z\n }), this.allKeys.add(F.split(\"+\").at(-1)));\n }\n }\n exec(U, l) {\n if (!this.allKeys.has(l.key))\n return;\n const d = this.callbacks.get(h(this, Pa, yN).call(this, l));\n if (!d)\n return;\n const {\n callback: t,\n options: {\n bubbles: Z = !1,\n args: F = [],\n checker: c = null\n }\n } = d;\n c && !c(U, l) || (t.bind(U, ...F, l)(), Z || (l.stopPropagation(), l.preventDefault()));\n }\n}\nPa = new WeakSet(), yN = function(U) {\n U.altKey && this.buffer.push(\"alt\"), U.ctrlKey && this.buffer.push(\"ctrl\"), U.metaKey && this.buffer.push(\"meta\"), U.shiftKey && this.buffer.push(\"shift\"), this.buffer.push(U.key);\n const l = this.buffer.join(\"+\");\n return this.buffer.length = 0, l;\n};\nconst fa = class fa {\n get _colors() {\n const U = /* @__PURE__ */ new Map([[\"CanvasText\", null], [\"Canvas\", null]]);\n return Cb(U), Ql(this, \"_colors\", U);\n }\n convert(U) {\n const l = Oi(U);\n if (!window.matchMedia(\"(forced-colors: active)\").matches)\n return l;\n for (const [d, t] of this._colors)\n if (t.every((Z, F) => Z === l[F]))\n return fa._colorsMapping.get(d);\n return l;\n }\n getHexCode(U) {\n const l = this._colors.get(U);\n return l ? H.makeHexColor(...l) : U;\n }\n};\n_(fa, \"_colorsMapping\", /* @__PURE__ */ new Map([[\"CanvasText\", [0, 0, 0]], [\"Canvas\", [255, 255, 255]]]));\nlet _V = fa;\nvar I0, CU, vl, cU, D0, at, E0, Vd, lZ, r0, cF, od, Wd, nF, vn, Hn, C0, Pn, pd, UZ, w0, dZ, Bd, Aa, tZ, fn, ZZ, sF, An, _n, UU, el, Vt, QF, qn, $n, FZ, yd, Wt, ls, qU, rt, x, $Q, qV, LN, zN, la, kN, IN, DN, $V, EN, lW, UW, rN, JU, Kt, CN, wN, dW, xN, Vn, tW;\nlet In = (rt = class {\n constructor(U, l, d, t, Z, F, c, Q, a, V, W) {\n m(this, x);\n m(this, I0, new AbortController());\n m(this, CU, null);\n m(this, vl, /* @__PURE__ */ new Map());\n m(this, cU, /* @__PURE__ */ new Map());\n m(this, D0, null);\n m(this, at, null);\n m(this, E0, null);\n m(this, Vd, new Ob());\n m(this, lZ, null);\n m(this, r0, 0);\n m(this, cF, /* @__PURE__ */ new Set());\n m(this, od, null);\n m(this, Wd, null);\n m(this, nF, /* @__PURE__ */ new Set());\n m(this, vn, !1);\n m(this, Hn, !1);\n m(this, C0, !1);\n m(this, Pn, null);\n m(this, pd, null);\n m(this, UZ, null);\n m(this, w0, null);\n m(this, dZ, !1);\n m(this, Bd, null);\n m(this, Aa, new jb());\n m(this, tZ, !1);\n m(this, fn, !1);\n m(this, ZZ, null);\n m(this, sF, null);\n m(this, An, null);\n m(this, _n, null);\n m(this, UU, tl.NONE);\n m(this, el, /* @__PURE__ */ new Set());\n m(this, Vt, null);\n m(this, QF, null);\n m(this, qn, null);\n m(this, $n, {\n isEditing: !1,\n isEmpty: !0,\n hasSomethingToUndo: !1,\n hasSomethingToRedo: !1,\n hasSelectedEditor: !1,\n hasSelectedText: !1\n });\n m(this, FZ, [0, 0]);\n m(this, yd, null);\n m(this, Wt, null);\n m(this, ls, null);\n m(this, qU, null);\n const i = this._signal = n(this, I0).signal;\n e(this, Wt, U), e(this, ls, l), e(this, D0, d), this._eventBus = t, t._on(\"editingaction\", this.onEditingAction.bind(this), {\n signal: i\n }), t._on(\"pagechanging\", this.onPageChanging.bind(this), {\n signal: i\n }), t._on(\"scalechanging\", this.onScaleChanging.bind(this), {\n signal: i\n }), t._on(\"rotationchanging\", this.onRotationChanging.bind(this), {\n signal: i\n }), t._on(\"setpreference\", this.onSetPreference.bind(this), {\n signal: i\n }), t._on(\"switchannotationeditorparams\", (R) => this.updateParams(R.type, R.value), {\n signal: i\n }), h(this, x, kN).call(this), h(this, x, rN).call(this), h(this, x, $V).call(this), e(this, at, Z.annotationStorage), e(this, Pn, Z.filterFactory), e(this, QF, F), e(this, w0, c || null), e(this, vn, Q), e(this, Hn, a), e(this, C0, V), e(this, _n, W || null), this.viewParameters = {\n realScale: Pc.PDF_TO_CSS_UNITS,\n rotation: 0\n }, this.isShiftKeyDown = !1;\n }\n static get _keyboardManager() {\n const U = rt.prototype, l = (F) => n(F, Wt).contains(document.activeElement) && document.activeElement.tagName !== \"BUTTON\" && F.hasSomethingToControl(), d = (F, {\n target: c\n }) => {\n if (c instanceof HTMLInputElement) {\n const {\n type: Q\n } = c;\n return Q !== \"text\" && Q !== \"number\";\n }\n return !0;\n }, t = this.TRANSLATE_SMALL, Z = this.TRANSLATE_BIG;\n return Ql(this, \"_keyboardManager\", new LQ([[[\"ctrl+a\", \"mac+meta+a\"], U.selectAll, {\n checker: d\n }], [[\"ctrl+z\", \"mac+meta+z\"], U.undo, {\n checker: d\n }], [[\"ctrl+y\", \"ctrl+shift+z\", \"mac+meta+shift+z\", \"ctrl+shift+Z\", \"mac+meta+shift+Z\"], U.redo, {\n checker: d\n }], [[\"Backspace\", \"alt+Backspace\", \"ctrl+Backspace\", \"shift+Backspace\", \"mac+Backspace\", \"mac+alt+Backspace\", \"mac+ctrl+Backspace\", \"Delete\", \"ctrl+Delete\", \"shift+Delete\", \"mac+Delete\"], U.delete, {\n checker: d\n }], [[\"Enter\", \"mac+Enter\"], U.addNewEditorFromKeyboard, {\n checker: (F, {\n target: c\n }) => !(c instanceof HTMLButtonElement) && n(F, Wt).contains(c) && !F.isEnterHandled\n }], [[\" \", \"mac+ \"], U.addNewEditorFromKeyboard, {\n checker: (F, {\n target: c\n }) => !(c instanceof HTMLButtonElement) && n(F, Wt).contains(document.activeElement)\n }], [[\"Escape\", \"mac+Escape\"], U.unselectAll], [[\"ArrowLeft\", \"mac+ArrowLeft\"], U.translateSelectedEditors, {\n args: [-t, 0],\n checker: l\n }], [[\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"], U.translateSelectedEditors, {\n args: [-Z, 0],\n checker: l\n }], [[\"ArrowRight\", \"mac+ArrowRight\"], U.translateSelectedEditors, {\n args: [t, 0],\n checker: l\n }], [[\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"], U.translateSelectedEditors, {\n args: [Z, 0],\n checker: l\n }], [[\"ArrowUp\", \"mac+ArrowUp\"], U.translateSelectedEditors, {\n args: [0, -t],\n checker: l\n }], [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], U.translateSelectedEditors, {\n args: [0, -Z],\n checker: l\n }], [[\"ArrowDown\", \"mac+ArrowDown\"], U.translateSelectedEditors, {\n args: [0, t],\n checker: l\n }], [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], U.translateSelectedEditors, {\n args: [0, Z],\n checker: l\n }]]));\n }\n destroy() {\n var U, l, d, t;\n (U = n(this, qU)) == null || U.resolve(), e(this, qU, null), (l = n(this, I0)) == null || l.abort(), e(this, I0, null), this._signal = null;\n for (const Z of n(this, cU).values())\n Z.destroy();\n n(this, cU).clear(), n(this, vl).clear(), n(this, nF).clear(), e(this, CU, null), n(this, el).clear(), n(this, Vd).destroy(), (d = n(this, D0)) == null || d.destroy(), (t = n(this, Bd)) == null || t.hide(), e(this, Bd, null), n(this, pd) && (clearTimeout(n(this, pd)), e(this, pd, null)), n(this, yd) && (clearTimeout(n(this, yd)), e(this, yd, null));\n }\n combinedSignal(U) {\n return AbortSignal.any([this._signal, U.signal]);\n }\n get mlManager() {\n return n(this, _n);\n }\n get useNewAltTextFlow() {\n return n(this, Hn);\n }\n get useNewAltTextWhenAddingImage() {\n return n(this, C0);\n }\n get hcmFilter() {\n return Ql(this, \"hcmFilter\", n(this, QF) ? n(this, Pn).addHCMFilter(n(this, QF).foreground, n(this, QF).background) : \"none\");\n }\n get direction() {\n return Ql(this, \"direction\", getComputedStyle(n(this, Wt)).direction);\n }\n get highlightColors() {\n return Ql(this, \"highlightColors\", n(this, w0) ? new Map(n(this, w0).split(\",\").map((U) => U.split(\"=\").map((l) => l.trim()))) : null);\n }\n get highlightColorNames() {\n return Ql(this, \"highlightColorNames\", this.highlightColors ? new Map(Array.from(this.highlightColors, (U) => U.reverse())) : null);\n }\n setMainHighlightColorPicker(U) {\n e(this, An, U);\n }\n editAltText(U, l = !1) {\n var d;\n (d = n(this, D0)) == null || d.editAltText(this, U, l);\n }\n switchToMode(U, l) {\n this._eventBus.on(\"annotationeditormodechanged\", l, {\n once: !0,\n signal: this._signal\n }), this._eventBus.dispatch(\"showannotationeditorui\", {\n source: this,\n mode: U\n });\n }\n setPreference(U, l) {\n this._eventBus.dispatch(\"setpreference\", {\n source: this,\n name: U,\n value: l\n });\n }\n onSetPreference({\n name: U,\n value: l\n }) {\n switch (U) {\n case \"enableNewAltTextWhenAddingImage\":\n e(this, C0, l);\n break;\n }\n }\n onPageChanging({\n pageNumber: U\n }) {\n e(this, r0, U - 1);\n }\n focusMainContainer() {\n n(this, Wt).focus();\n }\n findParent(U, l) {\n for (const d of n(this, cU).values()) {\n const {\n x: t,\n y: Z,\n width: F,\n height: c\n } = d.div.getBoundingClientRect();\n if (U >= t && U <= t + F && l >= Z && l <= Z + c)\n return d;\n }\n return null;\n }\n disableUserSelect(U = !1) {\n n(this, ls).classList.toggle(\"noUserSelect\", U);\n }\n addShouldRescale(U) {\n n(this, nF).add(U);\n }\n removeShouldRescale(U) {\n n(this, nF).delete(U);\n }\n onScaleChanging({\n scale: U\n }) {\n this.commitOrRemove(), this.viewParameters.realScale = U * Pc.PDF_TO_CSS_UNITS;\n for (const l of n(this, nF))\n l.onScaleChanging();\n }\n onRotationChanging({\n pagesRotation: U\n }) {\n this.commitOrRemove(), this.viewParameters.rotation = U;\n }\n highlightSelection(U = \"\") {\n const l = document.getSelection();\n if (!l || l.isCollapsed)\n return;\n const {\n anchorNode: d,\n anchorOffset: t,\n focusNode: Z,\n focusOffset: F\n } = l, c = l.toString(), a = h(this, x, $Q).call(this, l).closest(\".textLayer\"), V = this.getSelectionBoxes(a);\n if (!V)\n return;\n l.empty();\n const W = h(this, x, qV).call(this, a), i = n(this, UU) === tl.NONE, R = () => {\n W == null || W.createAndAddNewEditor({\n x: 0,\n y: 0\n }, !1, {\n methodOfCreation: U,\n boxes: V,\n anchorNode: d,\n anchorOffset: t,\n focusNode: Z,\n focusOffset: F,\n text: c\n }), i && this.showAllEditors(\"highlight\", !0, !0);\n };\n if (i) {\n this.switchToMode(tl.HIGHLIGHT, R);\n return;\n }\n R();\n }\n addToAnnotationStorage(U) {\n !U.isEmpty() && n(this, at) && !n(this, at).has(U.id) && n(this, at).setValue(U.id, U);\n }\n blur() {\n if (this.isShiftKeyDown = !1, n(this, dZ) && (e(this, dZ, !1), h(this, x, la).call(this, \"main_toolbar\")), !this.hasSelection)\n return;\n const {\n activeElement: U\n } = document;\n for (const l of n(this, el))\n if (l.div.contains(U)) {\n e(this, sF, [l, U]), l._focusEventsAllowed = !1;\n break;\n }\n }\n focus() {\n if (!n(this, sF))\n return;\n const [U, l] = n(this, sF);\n e(this, sF, null), l.addEventListener(\"focusin\", () => {\n U._focusEventsAllowed = !0;\n }, {\n once: !0,\n signal: this._signal\n }), l.focus();\n }\n addEditListeners() {\n h(this, x, $V).call(this), h(this, x, lW).call(this);\n }\n removeEditListeners() {\n h(this, x, EN).call(this), h(this, x, UW).call(this);\n }\n dragOver(U) {\n for (const {\n type: l\n } of U.dataTransfer.items)\n for (const d of n(this, Wd))\n if (d.isHandlingMimeForPasting(l)) {\n U.dataTransfer.dropEffect = \"copy\", U.preventDefault();\n return;\n }\n }\n drop(U) {\n for (const l of U.dataTransfer.items)\n for (const d of n(this, Wd))\n if (d.isHandlingMimeForPasting(l.type)) {\n d.paste(l, this.currentLayer), U.preventDefault();\n return;\n }\n }\n copy(U) {\n var d;\n if (U.preventDefault(), (d = n(this, CU)) == null || d.commitOrRemove(), !this.hasSelection)\n return;\n const l = [];\n for (const t of n(this, el)) {\n const Z = t.serialize(!0);\n Z && l.push(Z);\n }\n l.length !== 0 && U.clipboardData.setData(\"application/pdfjs\", JSON.stringify(l));\n }\n cut(U) {\n this.copy(U), this.delete();\n }\n async paste(U) {\n U.preventDefault();\n const {\n clipboardData: l\n } = U;\n for (const Z of l.items)\n for (const F of n(this, Wd))\n if (F.isHandlingMimeForPasting(Z.type)) {\n F.paste(Z, this.currentLayer);\n return;\n }\n let d = l.getData(\"application/pdfjs\");\n if (!d)\n return;\n try {\n d = JSON.parse(d);\n } catch (Z) {\n Zl(`paste: \"${Z.message}\".`);\n return;\n }\n if (!Array.isArray(d))\n return;\n this.unselectAll();\n const t = this.currentLayer;\n try {\n const Z = [];\n for (const Q of d) {\n const a = await t.deserialize(Q);\n if (!a)\n return;\n Z.push(a);\n }\n const F = () => {\n for (const Q of Z)\n h(this, x, dW).call(this, Q);\n h(this, x, tW).call(this, Z);\n }, c = () => {\n for (const Q of Z)\n Q.remove();\n };\n this.addCommands({\n cmd: F,\n undo: c,\n mustExec: !0\n });\n } catch (Z) {\n Zl(`paste: \"${Z.message}\".`);\n }\n }\n keydown(U) {\n !this.isShiftKeyDown && U.key === \"Shift\" && (this.isShiftKeyDown = !0), n(this, UU) !== tl.NONE && !this.isEditorHandlingKeyboard && rt._keyboardManager.exec(this, U);\n }\n keyup(U) {\n this.isShiftKeyDown && U.key === \"Shift\" && (this.isShiftKeyDown = !1, n(this, dZ) && (e(this, dZ, !1), h(this, x, la).call(this, \"main_toolbar\")));\n }\n onEditingAction({\n name: U\n }) {\n switch (U) {\n case \"undo\":\n case \"redo\":\n case \"delete\":\n case \"selectAll\":\n this[U]();\n break;\n case \"highlightSelection\":\n this.highlightSelection(\"context_menu\");\n break;\n }\n }\n setEditingState(U) {\n U ? (h(this, x, IN).call(this), h(this, x, lW).call(this), h(this, x, JU).call(this, {\n isEditing: n(this, UU) !== tl.NONE,\n isEmpty: h(this, x, Vn).call(this),\n hasSomethingToUndo: n(this, Vd).hasSomethingToUndo(),\n hasSomethingToRedo: n(this, Vd).hasSomethingToRedo(),\n hasSelectedEditor: !1\n })) : (h(this, x, DN).call(this), h(this, x, UW).call(this), h(this, x, JU).call(this, {\n isEditing: !1\n }), this.disableUserSelect(!1));\n }\n registerEditorTypes(U) {\n if (!n(this, Wd)) {\n e(this, Wd, U);\n for (const l of n(this, Wd))\n h(this, x, Kt).call(this, l.defaultPropertiesToUpdate);\n }\n }\n getId() {\n return n(this, Aa).id;\n }\n get currentLayer() {\n return n(this, cU).get(n(this, r0));\n }\n getLayer(U) {\n return n(this, cU).get(U);\n }\n get currentPageIndex() {\n return n(this, r0);\n }\n addLayer(U) {\n n(this, cU).set(U.pageIndex, U), n(this, tZ) ? U.enable() : U.disable();\n }\n removeLayer(U) {\n n(this, cU).delete(U.pageIndex);\n }\n async updateMode(U, l = null, d = !1) {\n if (n(this, UU) !== U && !(n(this, qU) && (await n(this, qU).promise, !n(this, qU)))) {\n if (e(this, qU, Promise.withResolvers()), e(this, UU, U), U === tl.NONE) {\n this.setEditingState(!1), h(this, x, wN).call(this), n(this, qU).resolve();\n return;\n }\n this.setEditingState(!0), await h(this, x, CN).call(this), this.unselectAll();\n for (const t of n(this, cU).values())\n t.updateMode(U);\n if (!l) {\n d && this.addNewEditorFromKeyboard(), n(this, qU).resolve();\n return;\n }\n for (const t of n(this, vl).values())\n t.annotationElementId === l ? (this.setSelected(t), t.enterInEditMode()) : t.unselect();\n n(this, qU).resolve();\n }\n }\n addNewEditorFromKeyboard() {\n this.currentLayer.canCreateNewEmptyEditor() && this.currentLayer.addNewEditor();\n }\n updateToolbar(U) {\n U !== n(this, UU) && this._eventBus.dispatch(\"switchannotationeditormode\", {\n source: this,\n mode: U\n });\n }\n updateParams(U, l) {\n var d;\n if (n(this, Wd)) {\n switch (U) {\n case q.CREATE:\n this.currentLayer.addNewEditor();\n return;\n case q.HIGHLIGHT_DEFAULT_COLOR:\n (d = n(this, An)) == null || d.updateColor(l);\n break;\n case q.HIGHLIGHT_SHOW_ALL:\n this._eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data: {\n type: \"highlight\",\n action: \"toggle_visibility\"\n }\n }\n }), (n(this, qn) || e(this, qn, /* @__PURE__ */ new Map())).set(U, l), this.showAllEditors(\"highlight\", l);\n break;\n }\n for (const t of n(this, el))\n t.updateParams(U, l);\n for (const t of n(this, Wd))\n t.updateDefaultParams(U, l);\n }\n }\n showAllEditors(U, l, d = !1) {\n var Z;\n for (const F of n(this, vl).values())\n F.editorType === U && F.show(l);\n (((Z = n(this, qn)) == null ? void 0 : Z.get(q.HIGHLIGHT_SHOW_ALL)) ?? !0) !== l && h(this, x, Kt).call(this, [[q.HIGHLIGHT_SHOW_ALL, l]]);\n }\n enableWaiting(U = !1) {\n if (n(this, fn) !== U) {\n e(this, fn, U);\n for (const l of n(this, cU).values())\n U ? l.disableClick() : l.enableClick(), l.div.classList.toggle(\"waiting\", U);\n }\n }\n getEditors(U) {\n const l = [];\n for (const d of n(this, vl).values())\n d.pageIndex === U && l.push(d);\n return l;\n }\n getEditor(U) {\n return n(this, vl).get(U);\n }\n addEditor(U) {\n n(this, vl).set(U.id, U);\n }\n removeEditor(U) {\n var l;\n U.div.contains(document.activeElement) && (n(this, pd) && clearTimeout(n(this, pd)), e(this, pd, setTimeout(() => {\n this.focusMainContainer(), e(this, pd, null);\n }, 0))), n(this, vl).delete(U.id), this.unselect(U), (!U.annotationElementId || !n(this, cF).has(U.annotationElementId)) && ((l = n(this, at)) == null || l.remove(U.id));\n }\n addDeletedAnnotationElement(U) {\n n(this, cF).add(U.annotationElementId), this.addChangedExistingAnnotation(U), U.deleted = !0;\n }\n isDeletedAnnotationElement(U) {\n return n(this, cF).has(U);\n }\n removeDeletedAnnotationElement(U) {\n n(this, cF).delete(U.annotationElementId), this.removeChangedExistingAnnotation(U), U.deleted = !1;\n }\n setActiveEditor(U) {\n n(this, CU) !== U && (e(this, CU, U), U && h(this, x, Kt).call(this, U.propertiesToUpdate));\n }\n updateUI(U) {\n n(this, x, xN) === U && h(this, x, Kt).call(this, U.propertiesToUpdate);\n }\n toggleSelected(U) {\n if (n(this, el).has(U)) {\n n(this, el).delete(U), U.unselect(), h(this, x, JU).call(this, {\n hasSelectedEditor: this.hasSelection\n });\n return;\n }\n n(this, el).add(U), U.select(), h(this, x, Kt).call(this, U.propertiesToUpdate), h(this, x, JU).call(this, {\n hasSelectedEditor: !0\n });\n }\n setSelected(U) {\n for (const l of n(this, el))\n l !== U && l.unselect();\n n(this, el).clear(), n(this, el).add(U), U.select(), h(this, x, Kt).call(this, U.propertiesToUpdate), h(this, x, JU).call(this, {\n hasSelectedEditor: !0\n });\n }\n isSelected(U) {\n return n(this, el).has(U);\n }\n get firstSelectedEditor() {\n return n(this, el).values().next().value;\n }\n unselect(U) {\n U.unselect(), n(this, el).delete(U), h(this, x, JU).call(this, {\n hasSelectedEditor: this.hasSelection\n });\n }\n get hasSelection() {\n return n(this, el).size !== 0;\n }\n get isEnterHandled() {\n return n(this, el).size === 1 && this.firstSelectedEditor.isEnterHandled;\n }\n undo() {\n n(this, Vd).undo(), h(this, x, JU).call(this, {\n hasSomethingToUndo: n(this, Vd).hasSomethingToUndo(),\n hasSomethingToRedo: !0,\n isEmpty: h(this, x, Vn).call(this)\n });\n }\n redo() {\n n(this, Vd).redo(), h(this, x, JU).call(this, {\n hasSomethingToUndo: !0,\n hasSomethingToRedo: n(this, Vd).hasSomethingToRedo(),\n isEmpty: h(this, x, Vn).call(this)\n });\n }\n addCommands(U) {\n n(this, Vd).add(U), h(this, x, JU).call(this, {\n hasSomethingToUndo: !0,\n hasSomethingToRedo: !1,\n isEmpty: h(this, x, Vn).call(this)\n });\n }\n delete() {\n if (this.commitOrRemove(), !this.hasSelection)\n return;\n const U = [...n(this, el)], l = () => {\n for (const t of U)\n t.remove();\n }, d = () => {\n for (const t of U)\n h(this, x, dW).call(this, t);\n };\n this.addCommands({\n cmd: l,\n undo: d,\n mustExec: !0\n });\n }\n commitOrRemove() {\n var U;\n (U = n(this, CU)) == null || U.commitOrRemove();\n }\n hasSomethingToControl() {\n return n(this, CU) || this.hasSelection;\n }\n selectAll() {\n for (const U of n(this, el))\n U.commit();\n h(this, x, tW).call(this, n(this, vl).values());\n }\n unselectAll() {\n if (!(n(this, CU) && (n(this, CU).commitOrRemove(), n(this, UU) !== tl.NONE)) && this.hasSelection) {\n for (const U of n(this, el))\n U.unselect();\n n(this, el).clear(), h(this, x, JU).call(this, {\n hasSelectedEditor: !1\n });\n }\n }\n translateSelectedEditors(U, l, d = !1) {\n if (d || this.commitOrRemove(), !this.hasSelection)\n return;\n n(this, FZ)[0] += U, n(this, FZ)[1] += l;\n const [t, Z] = n(this, FZ), F = [...n(this, el)], c = 1e3;\n n(this, yd) && clearTimeout(n(this, yd)), e(this, yd, setTimeout(() => {\n e(this, yd, null), n(this, FZ)[0] = n(this, FZ)[1] = 0, this.addCommands({\n cmd: () => {\n for (const Q of F)\n n(this, vl).has(Q.id) && Q.translateInPage(t, Z);\n },\n undo: () => {\n for (const Q of F)\n n(this, vl).has(Q.id) && Q.translateInPage(-t, -Z);\n },\n mustExec: !1\n });\n }, c));\n for (const Q of F)\n Q.translateInPage(U, l);\n }\n setUpDragSession() {\n if (this.hasSelection) {\n this.disableUserSelect(!0), e(this, od, /* @__PURE__ */ new Map());\n for (const U of n(this, el))\n n(this, od).set(U, {\n savedX: U.x,\n savedY: U.y,\n savedPageIndex: U.pageIndex,\n newX: 0,\n newY: 0,\n newPageIndex: -1\n });\n }\n }\n endDragSession() {\n if (!n(this, od))\n return !1;\n this.disableUserSelect(!1);\n const U = n(this, od);\n e(this, od, null);\n let l = !1;\n for (const [{\n x: t,\n y: Z,\n pageIndex: F\n }, c] of U)\n c.newX = t, c.newY = Z, c.newPageIndex = F, l || (l = t !== c.savedX || Z !== c.savedY || F !== c.savedPageIndex);\n if (!l)\n return !1;\n const d = (t, Z, F, c) => {\n if (n(this, vl).has(t.id)) {\n const Q = n(this, cU).get(c);\n Q ? t._setParentAndPosition(Q, Z, F) : (t.pageIndex = c, t.x = Z, t.y = F);\n }\n };\n return this.addCommands({\n cmd: () => {\n for (const [t, {\n newX: Z,\n newY: F,\n newPageIndex: c\n }] of U)\n d(t, Z, F, c);\n },\n undo: () => {\n for (const [t, {\n savedX: Z,\n savedY: F,\n savedPageIndex: c\n }] of U)\n d(t, Z, F, c);\n },\n mustExec: !0\n }), !0;\n }\n dragSelectedEditors(U, l) {\n if (n(this, od))\n for (const d of n(this, od).keys())\n d.drag(U, l);\n }\n rebuild(U) {\n if (U.parent === null) {\n const l = this.getLayer(U.pageIndex);\n l ? (l.changeParent(U), l.addOrRebuild(U)) : (this.addEditor(U), this.addToAnnotationStorage(U), U.rebuild());\n } else\n U.parent.addOrRebuild(U);\n }\n get isEditorHandlingKeyboard() {\n var U;\n return ((U = this.getActive()) == null ? void 0 : U.shouldGetKeyboardEvents()) || n(this, el).size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents();\n }\n isActive(U) {\n return n(this, CU) === U;\n }\n getActive() {\n return n(this, CU);\n }\n getMode() {\n return n(this, UU);\n }\n get imageManager() {\n return Ql(this, \"imageManager\", new AV());\n }\n getSelectionBoxes(U) {\n if (!U)\n return null;\n const l = document.getSelection();\n for (let a = 0, V = l.rangeCount; a < V; a++)\n if (!U.contains(l.getRangeAt(a).commonAncestorContainer))\n return null;\n const {\n x: d,\n y: t,\n width: Z,\n height: F\n } = U.getBoundingClientRect();\n let c;\n switch (U.getAttribute(\"data-main-rotation\")) {\n case \"90\":\n c = (a, V, W, i) => ({\n x: (V - t) / F,\n y: 1 - (a + W - d) / Z,\n width: i / F,\n height: W / Z\n });\n break;\n case \"180\":\n c = (a, V, W, i) => ({\n x: 1 - (a + W - d) / Z,\n y: 1 - (V + i - t) / F,\n width: W / Z,\n height: i / F\n });\n break;\n case \"270\":\n c = (a, V, W, i) => ({\n x: 1 - (V + i - t) / F,\n y: (a - d) / Z,\n width: i / F,\n height: W / Z\n });\n break;\n default:\n c = (a, V, W, i) => ({\n x: (a - d) / Z,\n y: (V - t) / F,\n width: W / Z,\n height: i / F\n });\n break;\n }\n const Q = [];\n for (let a = 0, V = l.rangeCount; a < V; a++) {\n const W = l.getRangeAt(a);\n if (!W.collapsed)\n for (const {\n x: i,\n y: R,\n width: N,\n height: b\n } of W.getClientRects())\n N === 0 || b === 0 || Q.push(c(i, R, N, b));\n }\n return Q.length === 0 ? null : Q;\n }\n addChangedExistingAnnotation({\n annotationElementId: U,\n id: l\n }) {\n (n(this, E0) || e(this, E0, /* @__PURE__ */ new Map())).set(U, l);\n }\n removeChangedExistingAnnotation({\n annotationElementId: U\n }) {\n var l;\n (l = n(this, E0)) == null || l.delete(U);\n }\n renderAnnotationElement(U) {\n var t;\n const l = (t = n(this, E0)) == null ? void 0 : t.get(U.data.id);\n if (!l)\n return;\n const d = n(this, at).getRawValue(l);\n d && (n(this, UU) === tl.NONE && !d.hasBeenModified || d.renderAnnotationElement(U));\n }\n}, I0 = new WeakMap(), CU = new WeakMap(), vl = new WeakMap(), cU = new WeakMap(), D0 = new WeakMap(), at = new WeakMap(), E0 = new WeakMap(), Vd = new WeakMap(), lZ = new WeakMap(), r0 = new WeakMap(), cF = new WeakMap(), od = new WeakMap(), Wd = new WeakMap(), nF = new WeakMap(), vn = new WeakMap(), Hn = new WeakMap(), C0 = new WeakMap(), Pn = new WeakMap(), pd = new WeakMap(), UZ = new WeakMap(), w0 = new WeakMap(), dZ = new WeakMap(), Bd = new WeakMap(), Aa = new WeakMap(), tZ = new WeakMap(), fn = new WeakMap(), ZZ = new WeakMap(), sF = new WeakMap(), An = new WeakMap(), _n = new WeakMap(), UU = new WeakMap(), el = new WeakMap(), Vt = new WeakMap(), QF = new WeakMap(), qn = new WeakMap(), $n = new WeakMap(), FZ = new WeakMap(), yd = new WeakMap(), Wt = new WeakMap(), ls = new WeakMap(), qU = new WeakMap(), x = new WeakSet(), $Q = function({\n anchorNode: U\n}) {\n return U.nodeType === Node.TEXT_NODE ? U.parentElement : U;\n}, qV = function(U) {\n const {\n currentLayer: l\n } = this;\n if (l.hasTextLayer(U))\n return l;\n for (const d of n(this, cU).values())\n if (d.hasTextLayer(U))\n return d;\n return null;\n}, LN = function() {\n const U = document.getSelection();\n if (!U || U.isCollapsed)\n return;\n const d = h(this, x, $Q).call(this, U).closest(\".textLayer\"), t = this.getSelectionBoxes(d);\n t && (n(this, Bd) || e(this, Bd, new wb(this)), n(this, Bd).show(d, t, this.direction === \"ltr\"));\n}, zN = function() {\n var Z, F, c;\n const U = document.getSelection();\n if (!U || U.isCollapsed) {\n n(this, Vt) && ((Z = n(this, Bd)) == null || Z.hide(), e(this, Vt, null), h(this, x, JU).call(this, {\n hasSelectedText: !1\n }));\n return;\n }\n const {\n anchorNode: l\n } = U;\n if (l === n(this, Vt))\n return;\n const t = h(this, x, $Q).call(this, U).closest(\".textLayer\");\n if (!t) {\n n(this, Vt) && ((F = n(this, Bd)) == null || F.hide(), e(this, Vt, null), h(this, x, JU).call(this, {\n hasSelectedText: !1\n }));\n return;\n }\n if ((c = n(this, Bd)) == null || c.hide(), e(this, Vt, l), h(this, x, JU).call(this, {\n hasSelectedText: !0\n }), !(n(this, UU) !== tl.HIGHLIGHT && n(this, UU) !== tl.NONE) && (n(this, UU) === tl.HIGHLIGHT && this.showAllEditors(\"highlight\", !0, !0), e(this, dZ, this.isShiftKeyDown), !this.isShiftKeyDown)) {\n const Q = n(this, UU) === tl.HIGHLIGHT ? h(this, x, qV).call(this, t) : null;\n Q == null || Q.toggleDrawing();\n const a = new AbortController(), V = this.combinedSignal(a), W = (i) => {\n i.type === \"pointerup\" && i.button !== 0 || (a.abort(), Q == null || Q.toggleDrawing(!0), i.type === \"pointerup\" && h(this, x, la).call(this, \"main_toolbar\"));\n };\n window.addEventListener(\"pointerup\", W, {\n signal: V\n }), window.addEventListener(\"blur\", W, {\n signal: V\n });\n }\n}, la = function(U = \"\") {\n n(this, UU) === tl.HIGHLIGHT ? this.highlightSelection(U) : n(this, vn) && h(this, x, LN).call(this);\n}, kN = function() {\n document.addEventListener(\"selectionchange\", h(this, x, zN).bind(this), {\n signal: this._signal\n });\n}, IN = function() {\n if (n(this, UZ))\n return;\n e(this, UZ, new AbortController());\n const U = this.combinedSignal(n(this, UZ));\n window.addEventListener(\"focus\", this.focus.bind(this), {\n signal: U\n }), window.addEventListener(\"blur\", this.blur.bind(this), {\n signal: U\n });\n}, DN = function() {\n var U;\n (U = n(this, UZ)) == null || U.abort(), e(this, UZ, null);\n}, $V = function() {\n if (n(this, ZZ))\n return;\n e(this, ZZ, new AbortController());\n const U = this.combinedSignal(n(this, ZZ));\n window.addEventListener(\"keydown\", this.keydown.bind(this), {\n signal: U\n }), window.addEventListener(\"keyup\", this.keyup.bind(this), {\n signal: U\n });\n}, EN = function() {\n var U;\n (U = n(this, ZZ)) == null || U.abort(), e(this, ZZ, null);\n}, lW = function() {\n if (n(this, lZ))\n return;\n e(this, lZ, new AbortController());\n const U = this.combinedSignal(n(this, lZ));\n document.addEventListener(\"copy\", this.copy.bind(this), {\n signal: U\n }), document.addEventListener(\"cut\", this.cut.bind(this), {\n signal: U\n }), document.addEventListener(\"paste\", this.paste.bind(this), {\n signal: U\n });\n}, UW = function() {\n var U;\n (U = n(this, lZ)) == null || U.abort(), e(this, lZ, null);\n}, rN = function() {\n const U = this._signal;\n document.addEventListener(\"dragover\", this.dragOver.bind(this), {\n signal: U\n }), document.addEventListener(\"drop\", this.drop.bind(this), {\n signal: U\n });\n}, JU = function(U) {\n Object.entries(U).some(([d, t]) => n(this, $n)[d] !== t) && (this._eventBus.dispatch(\"annotationeditorstateschanged\", {\n source: this,\n details: Object.assign(n(this, $n), U)\n }), n(this, UU) === tl.HIGHLIGHT && U.hasSelectedEditor === !1 && h(this, x, Kt).call(this, [[q.HIGHLIGHT_FREE, !0]]));\n}, Kt = function(U) {\n this._eventBus.dispatch(\"annotationeditorparamschanged\", {\n source: this,\n details: U\n });\n}, CN = async function() {\n if (!n(this, tZ)) {\n e(this, tZ, !0);\n const U = [];\n for (const l of n(this, cU).values())\n U.push(l.enable());\n await Promise.all(U);\n for (const l of n(this, vl).values())\n l.enable();\n }\n}, wN = function() {\n if (this.unselectAll(), n(this, tZ)) {\n e(this, tZ, !1);\n for (const U of n(this, cU).values())\n U.disable();\n for (const U of n(this, vl).values())\n U.disable();\n }\n}, dW = function(U) {\n const l = n(this, cU).get(U.pageIndex);\n l ? l.addOrRebuild(U) : (this.addEditor(U), this.addToAnnotationStorage(U));\n}, xN = function() {\n let U = null;\n for (U of n(this, el))\n ;\n return U;\n}, Vn = function() {\n if (n(this, vl).size === 0)\n return !0;\n if (n(this, vl).size === 1)\n for (const U of n(this, vl).values())\n return U.isEmpty();\n return !1;\n}, tW = function(U) {\n for (const l of n(this, el))\n l.unselect();\n n(this, el).clear();\n for (const l of U)\n l.isEmpty() || (n(this, el).add(l), l.select());\n h(this, x, JU).call(this, {\n hasSelectedEditor: this.hasSelection\n });\n}, _(rt, \"TRANSLATE_SMALL\", 1), _(rt, \"TRANSLATE_BIG\", 10), rt);\nvar dU, Ld, id, zd, wU, x0, kd, oU, it, aF, Id, j0, $d, Ua, da;\nconst ql = class ql {\n constructor(U) {\n m(this, $d);\n m(this, dU, null);\n m(this, Ld, !1);\n m(this, id, null);\n m(this, zd, null);\n m(this, wU, null);\n m(this, x0, !1);\n m(this, kd, null);\n m(this, oU, null);\n m(this, it, null);\n m(this, aF, null);\n m(this, Id, !1);\n e(this, oU, U), e(this, Id, U._uiManager.useNewAltTextFlow), n(ql, j0) || e(ql, j0, Object.freeze({\n added: \"pdfjs-editor-new-alt-text-added-button-label\",\n missing: \"pdfjs-editor-new-alt-text-missing-button-label\",\n review: \"pdfjs-editor-new-alt-text-to-review-button-label\"\n }));\n }\n static initialize(U) {\n ql._l10nPromise || (ql._l10nPromise = U);\n }\n async render() {\n const U = e(this, id, document.createElement(\"button\"));\n U.className = \"altText\";\n let l;\n n(this, Id) ? (U.classList.add(\"new\"), l = await ql._l10nPromise.get(n(ql, j0).missing)) : l = await ql._l10nPromise.get(\"pdfjs-editor-alt-text-button-label\"), U.textContent = l, U.setAttribute(\"aria-label\", l), U.tabIndex = \"0\";\n const d = n(this, oU)._uiManager._signal;\n U.addEventListener(\"contextmenu\", nd, {\n signal: d\n }), U.addEventListener(\"pointerdown\", (Z) => Z.stopPropagation(), {\n signal: d\n });\n const t = (Z) => {\n Z.preventDefault(), n(this, oU)._uiManager.editAltText(n(this, oU)), n(this, Id) && n(this, oU)._reportTelemetry({\n action: \"pdfjs.image.alt_text.image_status_label_clicked\",\n data: {\n label: n(this, $d, Ua)\n }\n });\n };\n return U.addEventListener(\"click\", t, {\n capture: !0,\n signal: d\n }), U.addEventListener(\"keydown\", (Z) => {\n Z.target === U && Z.key === \"Enter\" && (e(this, x0, !0), t(Z));\n }, {\n signal: d\n }), await h(this, $d, da).call(this), U;\n }\n finish() {\n n(this, id) && (n(this, id).focus({\n focusVisible: n(this, x0)\n }), e(this, x0, !1));\n }\n isEmpty() {\n return n(this, Id) ? n(this, dU) === null : !n(this, dU) && !n(this, Ld);\n }\n hasData() {\n return n(this, Id) ? n(this, dU) !== null || !!n(this, it) : this.isEmpty();\n }\n get guessedText() {\n return n(this, it);\n }\n async setGuessedText(U) {\n n(this, dU) === null && (e(this, it, U), e(this, aF, await ql._l10nPromise.get(\"pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer\")({\n generatedAltText: U\n })), h(this, $d, da).call(this));\n }\n toggleAltTextBadge(U = !1) {\n var l;\n if (!n(this, Id) || n(this, dU)) {\n (l = n(this, kd)) == null || l.remove(), e(this, kd, null);\n return;\n }\n if (!n(this, kd)) {\n const d = e(this, kd, document.createElement(\"div\"));\n d.className = \"noAltTextBadge\", n(this, oU).div.append(d);\n }\n n(this, kd).classList.toggle(\"hidden\", !U);\n }\n serialize(U) {\n let l = n(this, dU);\n return !U && n(this, it) === l && (l = n(this, aF)), {\n altText: l,\n decorative: n(this, Ld),\n guessedText: n(this, it),\n textWithDisclaimer: n(this, aF)\n };\n }\n get data() {\n return {\n altText: n(this, dU),\n decorative: n(this, Ld)\n };\n }\n set data({\n altText: U,\n decorative: l,\n guessedText: d,\n textWithDisclaimer: t,\n cancel: Z = !1\n }) {\n d && (e(this, it, d), e(this, aF, t)), !(n(this, dU) === U && n(this, Ld) === l) && (Z || (e(this, dU, U), e(this, Ld, l)), h(this, $d, da).call(this));\n }\n toggle(U = !1) {\n n(this, id) && (!U && n(this, wU) && (clearTimeout(n(this, wU)), e(this, wU, null)), n(this, id).disabled = !U);\n }\n shown() {\n n(this, oU)._reportTelemetry({\n action: \"pdfjs.image.alt_text.image_status_label_displayed\",\n data: {\n label: n(this, $d, Ua)\n }\n });\n }\n destroy() {\n var U, l;\n (U = n(this, id)) == null || U.remove(), e(this, id, null), e(this, zd, null), (l = n(this, kd)) == null || l.remove(), e(this, kd, null);\n }\n};\ndU = new WeakMap(), Ld = new WeakMap(), id = new WeakMap(), zd = new WeakMap(), wU = new WeakMap(), x0 = new WeakMap(), kd = new WeakMap(), oU = new WeakMap(), it = new WeakMap(), aF = new WeakMap(), Id = new WeakMap(), j0 = new WeakMap(), $d = new WeakSet(), Ua = function() {\n return n(this, dU) && \"added\" || n(this, dU) === null && this.guessedText && \"review\" || \"missing\";\n}, da = async function() {\n var t, Z;\n const U = n(this, id);\n if (!U)\n return;\n if (n(this, Id)) {\n if (U.classList.toggle(\"done\", !!n(this, dU)), ql._l10nPromise.get(n(ql, j0)[n(this, $d, Ua)]).then((F) => {\n U.setAttribute(\"aria-label\", F);\n for (const c of U.childNodes)\n if (c.nodeType === Node.TEXT_NODE) {\n c.textContent = F;\n break;\n }\n }), !n(this, dU)) {\n (t = n(this, zd)) == null || t.remove();\n return;\n }\n } else {\n if (!n(this, dU) && !n(this, Ld)) {\n U.classList.remove(\"done\"), (Z = n(this, zd)) == null || Z.remove();\n return;\n }\n U.classList.add(\"done\"), ql._l10nPromise.get(\"pdfjs-editor-alt-text-edit-button-label\").then((F) => {\n U.setAttribute(\"aria-label\", F);\n });\n }\n let l = n(this, zd);\n if (!l) {\n e(this, zd, l = document.createElement(\"span\")), l.className = \"tooltip\", l.setAttribute(\"role\", \"tooltip\"), l.id = `alt-text-tooltip-${n(this, oU).id}`;\n const F = 100, c = n(this, oU)._uiManager._signal;\n c.addEventListener(\"abort\", () => {\n clearTimeout(n(this, wU)), e(this, wU, null);\n }, {\n once: !0\n }), U.addEventListener(\"mouseenter\", () => {\n e(this, wU, setTimeout(() => {\n e(this, wU, null), n(this, zd).classList.add(\"show\"), n(this, oU)._reportTelemetry({\n action: \"alt_text_tooltip\"\n });\n }, F));\n }, {\n signal: c\n }), U.addEventListener(\"mouseleave\", () => {\n var Q;\n n(this, wU) && (clearTimeout(n(this, wU)), e(this, wU, null)), (Q = n(this, zd)) == null || Q.classList.remove(\"show\");\n }, {\n signal: c\n });\n }\n l.innerText = n(this, Ld) ? await ql._l10nPromise.get(\"pdfjs-editor-alt-text-decorative-tooltip\") : n(this, dU), l.parentNode || U.append(l);\n const d = n(this, oU).getImageForAltText();\n d == null || d.setAttribute(\"aria-describedby\", l.id);\n}, m(ql, j0, null), _(ql, \"_l10nPromise\", null);\nlet Ca = ql;\nvar VF, Rd, Yl, O0, WF, nU, iF, cZ, Us, RF, nZ, ds, NF, Rt, Dd, g0, K0, $U, ts, _a, Fl, ZW, Zs, FW, cW, jN, ON, nW, sW, QW, gN, aW, KN, vN, HN, VW, Wn;\nconst Wl = class Wl {\n constructor(U) {\n m(this, Fl);\n m(this, VF, null);\n m(this, Rd, null);\n m(this, Yl, null);\n m(this, O0, !1);\n m(this, WF, !1);\n m(this, nU, null);\n m(this, iF, null);\n m(this, cZ, null);\n m(this, Us, \"\");\n m(this, RF, !1);\n m(this, nZ, null);\n m(this, ds, !1);\n m(this, NF, !1);\n m(this, Rt, !1);\n m(this, Dd, null);\n m(this, g0, 0);\n m(this, K0, 0);\n m(this, $U, null);\n _(this, \"_editToolbar\", null);\n _(this, \"_initialOptions\", /* @__PURE__ */ Object.create(null));\n _(this, \"_initialData\", null);\n _(this, \"_isVisible\", !0);\n _(this, \"_uiManager\", null);\n _(this, \"_focusEventsAllowed\", !0);\n m(this, ts, !1);\n m(this, _a, Wl._zIndex++);\n this.parent = U.parent, this.id = U.id, this.width = this.height = null, this.pageIndex = U.parent.pageIndex, this.name = U.name, this.div = null, this._uiManager = U.uiManager, this.annotationElementId = null, this._willKeepAspectRatio = !1, this._initialOptions.isCentered = U.isCentered, this._structTreeParentId = null;\n const {\n rotation: l,\n rawDims: {\n pageWidth: d,\n pageHeight: t,\n pageX: Z,\n pageY: F\n }\n } = this.parent.viewport;\n this.rotation = l, this.pageRotation = (360 + l - this._uiManager.viewParameters.rotation) % 360, this.pageDimensions = [d, t], this.pageTranslation = [Z, F];\n const [c, Q] = this.parentDimensions;\n this.x = U.x / c, this.y = U.y / Q, this.isAttachedToDOM = !1, this.deleted = !1;\n }\n static get _resizerKeyboardManager() {\n const U = Wl.prototype._resizeWithKeyboard, l = In.TRANSLATE_SMALL, d = In.TRANSLATE_BIG;\n return Ql(this, \"_resizerKeyboardManager\", new LQ([[[\"ArrowLeft\", \"mac+ArrowLeft\"], U, {\n args: [-l, 0]\n }], [[\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"], U, {\n args: [-d, 0]\n }], [[\"ArrowRight\", \"mac+ArrowRight\"], U, {\n args: [l, 0]\n }], [[\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"], U, {\n args: [d, 0]\n }], [[\"ArrowUp\", \"mac+ArrowUp\"], U, {\n args: [0, -l]\n }], [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], U, {\n args: [0, -d]\n }], [[\"ArrowDown\", \"mac+ArrowDown\"], U, {\n args: [0, l]\n }], [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], U, {\n args: [0, d]\n }], [[\"Escape\", \"mac+Escape\"], Wl.prototype._stopResizingWithKeyboard]]));\n }\n get editorType() {\n return Object.getPrototypeOf(this).constructor._type;\n }\n static get _defaultLineColor() {\n return Ql(this, \"_defaultLineColor\", this._colorManager.getHexCode(\"CanvasText\"));\n }\n static deleteAnnotationElement(U) {\n const l = new gb({\n id: U.parent.getNextId(),\n parent: U.parent,\n uiManager: U._uiManager\n });\n l.annotationElementId = U.annotationElementId, l.deleted = !0, l._uiManager.addToAnnotationStorage(l);\n }\n static initialize(U, l, d) {\n if (Wl._l10nResizer || (Wl._l10nResizer = Object.freeze({\n topLeft: \"pdfjs-editor-resizer-top-left\",\n topMiddle: \"pdfjs-editor-resizer-top-middle\",\n topRight: \"pdfjs-editor-resizer-top-right\",\n middleRight: \"pdfjs-editor-resizer-middle-right\",\n bottomRight: \"pdfjs-editor-resizer-bottom-right\",\n bottomMiddle: \"pdfjs-editor-resizer-bottom-middle\",\n bottomLeft: \"pdfjs-editor-resizer-bottom-left\",\n middleLeft: \"pdfjs-editor-resizer-middle-left\"\n })), Wl._l10nPromise || (Wl._l10nPromise = new Map([...[\"pdfjs-editor-alt-text-button-label\", \"pdfjs-editor-alt-text-edit-button-label\", \"pdfjs-editor-alt-text-decorative-tooltip\", \"pdfjs-editor-new-alt-text-added-button-label\", \"pdfjs-editor-new-alt-text-missing-button-label\", \"pdfjs-editor-new-alt-text-to-review-button-label\"].map((Z) => [Z, U.get(Z)]), ...[\"pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer\"].map((Z) => [Z, U.get.bind(U, Z)])])), d != null && d.strings)\n for (const Z of d.strings)\n Wl._l10nPromise.set(Z, U.get(Z));\n if (Wl._borderLineWidth !== -1)\n return;\n const t = getComputedStyle(document.documentElement);\n Wl._borderLineWidth = parseFloat(t.getPropertyValue(\"--outline-width\")) || 0;\n }\n static updateDefaultParams(U, l) {\n }\n static get defaultPropertiesToUpdate() {\n return [];\n }\n static isHandlingMimeForPasting(U) {\n return !1;\n }\n static paste(U, l) {\n Ol(\"Not implemented\");\n }\n get propertiesToUpdate() {\n return [];\n }\n get _isDraggable() {\n return n(this, ts);\n }\n set _isDraggable(U) {\n var l;\n e(this, ts, U), (l = this.div) == null || l.classList.toggle(\"draggable\", U);\n }\n get isEnterHandled() {\n return !0;\n }\n center() {\n const [U, l] = this.pageDimensions;\n switch (this.parentRotation) {\n case 90:\n this.x -= this.height * l / (U * 2), this.y += this.width * U / (l * 2);\n break;\n case 180:\n this.x += this.width / 2, this.y += this.height / 2;\n break;\n case 270:\n this.x += this.height * l / (U * 2), this.y -= this.width * U / (l * 2);\n break;\n default:\n this.x -= this.width / 2, this.y -= this.height / 2;\n break;\n }\n this.fixAndSetPosition();\n }\n addCommands(U) {\n this._uiManager.addCommands(U);\n }\n get currentLayer() {\n return this._uiManager.currentLayer;\n }\n setInBackground() {\n this.div.style.zIndex = 0;\n }\n setInForeground() {\n this.div.style.zIndex = n(this, _a);\n }\n setParent(U) {\n U !== null ? (this.pageIndex = U.pageIndex, this.pageDimensions = U.pageDimensions) : h(this, Fl, Wn).call(this), this.parent = U;\n }\n focusin(U) {\n this._focusEventsAllowed && (n(this, RF) ? e(this, RF, !1) : this.parent.setSelected(this));\n }\n focusout(U) {\n var d;\n if (!this._focusEventsAllowed || !this.isAttachedToDOM)\n return;\n const l = U.relatedTarget;\n l != null && l.closest(`#${this.id}`) || (U.preventDefault(), (d = this.parent) != null && d.isMultipleSelection || this.commitOrRemove());\n }\n commitOrRemove() {\n this.isEmpty() ? this.remove() : this.commit();\n }\n commit() {\n this.addToAnnotationStorage();\n }\n addToAnnotationStorage() {\n this._uiManager.addToAnnotationStorage(this);\n }\n setAt(U, l, d, t) {\n const [Z, F] = this.parentDimensions;\n [d, t] = this.screenToPageTranslation(d, t), this.x = (U + d) / Z, this.y = (l + t) / F, this.fixAndSetPosition();\n }\n translate(U, l) {\n h(this, Fl, ZW).call(this, this.parentDimensions, U, l);\n }\n translateInPage(U, l) {\n n(this, nZ) || e(this, nZ, [this.x, this.y]), h(this, Fl, ZW).call(this, this.pageDimensions, U, l), this.div.scrollIntoView({\n block: \"nearest\"\n });\n }\n drag(U, l) {\n n(this, nZ) || e(this, nZ, [this.x, this.y]);\n const [d, t] = this.parentDimensions;\n if (this.x += U / d, this.y += l / t, this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {\n const {\n x: a,\n y: V\n } = this.div.getBoundingClientRect();\n this.parent.findNewParent(this, a, V) && (this.x -= Math.floor(this.x), this.y -= Math.floor(this.y));\n }\n let {\n x: Z,\n y: F\n } = this;\n const [c, Q] = this.getBaseTranslation();\n Z += c, F += Q, this.div.style.left = `${(100 * Z).toFixed(2)}%`, this.div.style.top = `${(100 * F).toFixed(2)}%`, this.div.scrollIntoView({\n block: \"nearest\"\n });\n }\n get _hasBeenMoved() {\n return !!n(this, nZ) && (n(this, nZ)[0] !== this.x || n(this, nZ)[1] !== this.y);\n }\n getBaseTranslation() {\n const [U, l] = this.parentDimensions, {\n _borderLineWidth: d\n } = Wl, t = d / U, Z = d / l;\n switch (this.rotation) {\n case 90:\n return [-t, Z];\n case 180:\n return [t, Z];\n case 270:\n return [t, -Z];\n default:\n return [-t, -Z];\n }\n }\n get _mustFixPosition() {\n return !0;\n }\n fixAndSetPosition(U = this.rotation) {\n const [l, d] = this.pageDimensions;\n let {\n x: t,\n y: Z,\n width: F,\n height: c\n } = this;\n if (F *= l, c *= d, t *= l, Z *= d, this._mustFixPosition)\n switch (U) {\n case 0:\n t = Math.max(0, Math.min(l - F, t)), Z = Math.max(0, Math.min(d - c, Z));\n break;\n case 90:\n t = Math.max(0, Math.min(l - c, t)), Z = Math.min(d, Math.max(F, Z));\n break;\n case 180:\n t = Math.min(l, Math.max(F, t)), Z = Math.min(d, Math.max(c, Z));\n break;\n case 270:\n t = Math.min(l, Math.max(c, t)), Z = Math.max(0, Math.min(d - F, Z));\n break;\n }\n this.x = t /= l, this.y = Z /= d;\n const [Q, a] = this.getBaseTranslation();\n t += Q, Z += a;\n const {\n style: V\n } = this.div;\n V.left = `${(100 * t).toFixed(2)}%`, V.top = `${(100 * Z).toFixed(2)}%`, this.moveInDOM();\n }\n screenToPageTranslation(U, l) {\n var d;\n return h(d = Wl, Zs, FW).call(d, U, l, this.parentRotation);\n }\n pageTranslationToScreen(U, l) {\n var d;\n return h(d = Wl, Zs, FW).call(d, U, l, 360 - this.parentRotation);\n }\n get parentScale() {\n return this._uiManager.viewParameters.realScale;\n }\n get parentRotation() {\n return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;\n }\n get parentDimensions() {\n const {\n parentScale: U,\n pageDimensions: [l, d]\n } = this;\n return [l * U, d * U];\n }\n setDims(U, l) {\n const [d, t] = this.parentDimensions;\n this.div.style.width = `${(100 * U / d).toFixed(2)}%`, n(this, WF) || (this.div.style.height = `${(100 * l / t).toFixed(2)}%`);\n }\n fixDims() {\n const {\n style: U\n } = this.div, {\n height: l,\n width: d\n } = U, t = d.endsWith(\"%\"), Z = !n(this, WF) && l.endsWith(\"%\");\n if (t && Z)\n return;\n const [F, c] = this.parentDimensions;\n t || (U.width = `${(100 * parseFloat(d) / F).toFixed(2)}%`), !n(this, WF) && !Z && (U.height = `${(100 * parseFloat(l) / c).toFixed(2)}%`);\n }\n getInitialTranslation() {\n return [0, 0];\n }\n altTextFinish() {\n var U;\n (U = n(this, Yl)) == null || U.finish();\n }\n async addEditToolbar() {\n return this._editToolbar || n(this, NF) ? this._editToolbar : (this._editToolbar = new PV(this), this.div.append(this._editToolbar.render()), n(this, Yl) && await this._editToolbar.addAltText(n(this, Yl)), this._editToolbar);\n }\n removeEditToolbar() {\n var U;\n this._editToolbar && (this._editToolbar.remove(), this._editToolbar = null, (U = n(this, Yl)) == null || U.destroy());\n }\n addContainer(U) {\n var d;\n const l = (d = this._editToolbar) == null ? void 0 : d.div;\n l ? l.before(U) : this.div.append(U);\n }\n getClientDimensions() {\n return this.div.getBoundingClientRect();\n }\n async addAltTextButton() {\n n(this, Yl) || (Ca.initialize(Wl._l10nPromise), e(this, Yl, new Ca(this)), n(this, VF) && (n(this, Yl).data = n(this, VF), e(this, VF, null)), await this.addEditToolbar());\n }\n get altTextData() {\n var U;\n return (U = n(this, Yl)) == null ? void 0 : U.data;\n }\n set altTextData(U) {\n n(this, Yl) && (n(this, Yl).data = U);\n }\n get guessedAltText() {\n var U;\n return (U = n(this, Yl)) == null ? void 0 : U.guessedText;\n }\n async setGuessedAltText(U) {\n var l;\n await ((l = n(this, Yl)) == null ? void 0 : l.setGuessedText(U));\n }\n serializeAltText(U) {\n var l;\n return (l = n(this, Yl)) == null ? void 0 : l.serialize(U);\n }\n hasAltText() {\n return !!n(this, Yl) && !n(this, Yl).isEmpty();\n }\n hasAltTextData() {\n var U;\n return ((U = n(this, Yl)) == null ? void 0 : U.hasData()) ?? !1;\n }\n render() {\n this.div = document.createElement(\"div\"), this.div.setAttribute(\"data-editor-rotation\", (360 - this.rotation) % 360), this.div.className = this.name, this.div.setAttribute(\"id\", this.id), this.div.tabIndex = n(this, O0) ? -1 : 0, this._isVisible || this.div.classList.add(\"hidden\"), this.setInForeground(), h(this, Fl, aW).call(this);\n const [U, l] = this.parentDimensions;\n this.parentRotation % 180 !== 0 && (this.div.style.maxWidth = `${(100 * l / U).toFixed(2)}%`, this.div.style.maxHeight = `${(100 * U / l).toFixed(2)}%`);\n const [d, t] = this.getInitialTranslation();\n return this.translate(d, t), ra(this, this.div, [\"pointerdown\"]), this.div;\n }\n pointerdown(U) {\n const {\n isMac: l\n } = DU.platform;\n if (U.button !== 0 || U.ctrlKey && l) {\n U.preventDefault();\n return;\n }\n if (e(this, RF, !0), this._isDraggable) {\n h(this, Fl, gN).call(this, U);\n return;\n }\n h(this, Fl, QW).call(this, U);\n }\n moveInDOM() {\n n(this, Dd) && clearTimeout(n(this, Dd)), e(this, Dd, setTimeout(() => {\n var U;\n e(this, Dd, null), (U = this.parent) == null || U.moveEditorInDOM(this);\n }, 0));\n }\n _setParentAndPosition(U, l, d) {\n U.changeParent(this), this.x = l, this.y = d, this.fixAndSetPosition();\n }\n getRect(U, l, d = this.rotation) {\n const t = this.parentScale, [Z, F] = this.pageDimensions, [c, Q] = this.pageTranslation, a = U / t, V = l / t, W = this.x * Z, i = this.y * F, R = this.width * Z, N = this.height * F;\n switch (d) {\n case 0:\n return [W + a + c, F - i - V - N + Q, W + a + R + c, F - i - V + Q];\n case 90:\n return [W + V + c, F - i + a + Q, W + V + N + c, F - i + a + R + Q];\n case 180:\n return [W - a - R + c, F - i + V + Q, W - a + c, F - i + V + N + Q];\n case 270:\n return [W - V - N + c, F - i - a - R + Q, W - V + c, F - i - a + Q];\n default:\n throw new Error(\"Invalid rotation\");\n }\n }\n getRectInCurrentCoords(U, l) {\n const [d, t, Z, F] = U, c = Z - d, Q = F - t;\n switch (this.rotation) {\n case 0:\n return [d, l - F, c, Q];\n case 90:\n return [d, l - t, Q, c];\n case 180:\n return [Z, l - t, c, Q];\n case 270:\n return [Z, l - F, Q, c];\n default:\n throw new Error(\"Invalid rotation\");\n }\n }\n onceAdded() {\n }\n isEmpty() {\n return !1;\n }\n enableEditMode() {\n e(this, NF, !0);\n }\n disableEditMode() {\n e(this, NF, !1);\n }\n isInEditMode() {\n return n(this, NF);\n }\n shouldGetKeyboardEvents() {\n return n(this, Rt);\n }\n needsToBeRebuilt() {\n return this.div && !this.isAttachedToDOM;\n }\n rebuild() {\n h(this, Fl, aW).call(this);\n }\n rotate(U) {\n }\n serializeDeleted() {\n var U;\n return {\n id: this.annotationElementId,\n deleted: !0,\n pageIndex: this.pageIndex,\n popupRef: ((U = this._initialData) == null ? void 0 : U.popupRef) || \"\"\n };\n }\n serialize(U = !1, l = null) {\n Ol(\"An editor must be serializable\");\n }\n static async deserialize(U, l, d) {\n const t = new this.prototype.constructor({\n parent: l,\n id: l.getNextId(),\n uiManager: d\n });\n t.rotation = U.rotation, e(t, VF, U.accessibilityData);\n const [Z, F] = t.pageDimensions, [c, Q, a, V] = t.getRectInCurrentCoords(U.rect, F);\n return t.x = c / Z, t.y = Q / F, t.width = a / Z, t.height = V / F, t;\n }\n get hasBeenModified() {\n return !!this.annotationElementId && (this.deleted || this.serialize() !== null);\n }\n remove() {\n var U;\n if ((U = n(this, cZ)) == null || U.abort(), e(this, cZ, null), this.isEmpty() || this.commit(), this.parent ? this.parent.remove(this) : this._uiManager.removeEditor(this), n(this, Dd) && (clearTimeout(n(this, Dd)), e(this, Dd, null)), h(this, Fl, Wn).call(this), this.removeEditToolbar(), n(this, $U)) {\n for (const l of n(this, $U).values())\n clearTimeout(l);\n e(this, $U, null);\n }\n this.parent = null;\n }\n get isResizable() {\n return !1;\n }\n makeResizable() {\n this.isResizable && (h(this, Fl, jN).call(this), n(this, nU).classList.remove(\"hidden\"), ra(this, this.div, [\"keydown\"]));\n }\n get toolbarPosition() {\n return null;\n }\n keydown(U) {\n if (!this.isResizable || U.target !== this.div || U.key !== \"Enter\")\n return;\n this._uiManager.setSelected(this), e(this, iF, {\n savedX: this.x,\n savedY: this.y,\n savedWidth: this.width,\n savedHeight: this.height\n });\n const l = n(this, nU).children;\n if (!n(this, Rd)) {\n e(this, Rd, Array.from(l));\n const F = h(this, Fl, KN).bind(this), c = h(this, Fl, vN).bind(this), Q = this._uiManager._signal;\n for (const a of n(this, Rd)) {\n const V = a.getAttribute(\"data-resizer-name\");\n a.setAttribute(\"role\", \"spinbutton\"), a.addEventListener(\"keydown\", F, {\n signal: Q\n }), a.addEventListener(\"blur\", c, {\n signal: Q\n }), a.addEventListener(\"focus\", h(this, Fl, HN).bind(this, V), {\n signal: Q\n }), a.setAttribute(\"data-l10n-id\", Wl._l10nResizer[V]);\n }\n }\n const d = n(this, Rd)[0];\n let t = 0;\n for (const F of l) {\n if (F === d)\n break;\n t++;\n }\n const Z = (360 - this.rotation + this.parentRotation) % 360 / 90 * (n(this, Rd).length / 4);\n if (Z !== t) {\n if (Z < t)\n for (let c = 0; c < t - Z; c++)\n n(this, nU).append(n(this, nU).firstChild);\n else if (Z > t)\n for (let c = 0; c < Z - t; c++)\n n(this, nU).firstChild.before(n(this, nU).lastChild);\n let F = 0;\n for (const c of l) {\n const a = n(this, Rd)[F++].getAttribute(\"data-resizer-name\");\n c.setAttribute(\"data-l10n-id\", Wl._l10nResizer[a]);\n }\n }\n h(this, Fl, VW).call(this, 0), e(this, Rt, !0), n(this, nU).firstChild.focus({\n focusVisible: !0\n }), U.preventDefault(), U.stopImmediatePropagation();\n }\n _resizeWithKeyboard(U, l) {\n n(this, Rt) && h(this, Fl, sW).call(this, n(this, Us), {\n movementX: U,\n movementY: l\n });\n }\n _stopResizingWithKeyboard() {\n h(this, Fl, Wn).call(this), this.div.focus();\n }\n select() {\n var U, l, d;\n if (this.makeResizable(), (U = this.div) == null || U.classList.add(\"selectedEditor\"), !this._editToolbar) {\n this.addEditToolbar().then(() => {\n var t, Z;\n (t = this.div) != null && t.classList.contains(\"selectedEditor\") && ((Z = this._editToolbar) == null || Z.show());\n });\n return;\n }\n (l = this._editToolbar) == null || l.show(), (d = n(this, Yl)) == null || d.toggleAltTextBadge(!1);\n }\n unselect() {\n var U, l, d, t, Z;\n (U = n(this, nU)) == null || U.classList.add(\"hidden\"), (l = this.div) == null || l.classList.remove(\"selectedEditor\"), (d = this.div) != null && d.contains(document.activeElement) && this._uiManager.currentLayer.div.focus({\n preventScroll: !0\n }), (t = this._editToolbar) == null || t.hide(), (Z = n(this, Yl)) == null || Z.toggleAltTextBadge(!0);\n }\n updateParams(U, l) {\n }\n disableEditing() {\n }\n enableEditing() {\n }\n enterInEditMode() {\n }\n getImageForAltText() {\n return null;\n }\n get contentDiv() {\n return this.div;\n }\n get isEditing() {\n return n(this, ds);\n }\n set isEditing(U) {\n e(this, ds, U), this.parent && (U ? (this.parent.setSelected(this), this.parent.setActiveEditor(this)) : this.parent.setActiveEditor(null));\n }\n setAspectRatio(U, l) {\n e(this, WF, !0);\n const d = U / l, {\n style: t\n } = this.div;\n t.aspectRatio = d, t.height = \"auto\";\n }\n static get MIN_SIZE() {\n return 16;\n }\n static canCreateNewEmptyEditor() {\n return !0;\n }\n get telemetryInitialData() {\n return {\n action: \"added\"\n };\n }\n get telemetryFinalData() {\n return null;\n }\n _reportTelemetry(U, l = !1) {\n if (l) {\n n(this, $U) || e(this, $U, /* @__PURE__ */ new Map());\n const {\n action: d\n } = U;\n let t = n(this, $U).get(d);\n t && clearTimeout(t), t = setTimeout(() => {\n this._reportTelemetry(U), n(this, $U).delete(d), n(this, $U).size === 0 && e(this, $U, null);\n }, Wl._telemetryTimeout), n(this, $U).set(d, t);\n return;\n }\n U.type || (U.type = this.editorType), this._uiManager._eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data: U\n }\n });\n }\n show(U = this._isVisible) {\n this.div.classList.toggle(\"hidden\", !U), this._isVisible = U;\n }\n enable() {\n this.div && (this.div.tabIndex = 0), e(this, O0, !1);\n }\n disable() {\n this.div && (this.div.tabIndex = -1), e(this, O0, !0);\n }\n renderAnnotationElement(U) {\n let l = U.container.querySelector(\".annotationContent\");\n if (!l)\n l = document.createElement(\"div\"), l.classList.add(\"annotationContent\", this.editorType), U.container.prepend(l);\n else if (l.nodeName === \"CANVAS\") {\n const d = l;\n l = document.createElement(\"div\"), l.classList.add(\"annotationContent\", this.editorType), d.before(l);\n }\n return l;\n }\n resetAnnotationElement(U) {\n const {\n firstChild: l\n } = U.container;\n (l == null ? void 0 : l.nodeName) === \"DIV\" && l.classList.contains(\"annotationContent\") && l.remove();\n }\n};\nVF = new WeakMap(), Rd = new WeakMap(), Yl = new WeakMap(), O0 = new WeakMap(), WF = new WeakMap(), nU = new WeakMap(), iF = new WeakMap(), cZ = new WeakMap(), Us = new WeakMap(), RF = new WeakMap(), nZ = new WeakMap(), ds = new WeakMap(), NF = new WeakMap(), Rt = new WeakMap(), Dd = new WeakMap(), g0 = new WeakMap(), K0 = new WeakMap(), $U = new WeakMap(), ts = new WeakMap(), _a = new WeakMap(), Fl = new WeakSet(), ZW = function([U, l], d, t) {\n [d, t] = this.screenToPageTranslation(d, t), this.x += d / U, this.y += t / l, this.fixAndSetPosition();\n}, Zs = new WeakSet(), FW = function(U, l, d) {\n switch (d) {\n case 90:\n return [l, -U];\n case 180:\n return [-U, -l];\n case 270:\n return [-l, U];\n default:\n return [U, l];\n }\n}, cW = function(U) {\n switch (U) {\n case 90: {\n const [l, d] = this.pageDimensions;\n return [0, -l / d, d / l, 0];\n }\n case 180:\n return [-1, 0, 0, -1];\n case 270: {\n const [l, d] = this.pageDimensions;\n return [0, l / d, -d / l, 0];\n }\n default:\n return [1, 0, 0, 1];\n }\n}, jN = function() {\n if (n(this, nU))\n return;\n e(this, nU, document.createElement(\"div\")), n(this, nU).classList.add(\"resizers\");\n const U = this._willKeepAspectRatio ? [\"topLeft\", \"topRight\", \"bottomRight\", \"bottomLeft\"] : [\"topLeft\", \"topMiddle\", \"topRight\", \"middleRight\", \"bottomRight\", \"bottomMiddle\", \"bottomLeft\", \"middleLeft\"], l = this._uiManager._signal;\n for (const d of U) {\n const t = document.createElement(\"div\");\n n(this, nU).append(t), t.classList.add(\"resizer\", d), t.setAttribute(\"data-resizer-name\", d), t.addEventListener(\"pointerdown\", h(this, Fl, ON).bind(this, d), {\n signal: l\n }), t.addEventListener(\"contextmenu\", nd, {\n signal: l\n }), t.tabIndex = -1;\n }\n this.div.prepend(n(this, nU));\n}, ON = function(U, l) {\n var N;\n l.preventDefault();\n const {\n isMac: d\n } = DU.platform;\n if (l.button !== 0 || l.ctrlKey && d)\n return;\n (N = n(this, Yl)) == null || N.toggle(!1);\n const t = this._isDraggable;\n this._isDraggable = !1;\n const Z = new AbortController(), F = this._uiManager.combinedSignal(Z);\n this.parent.togglePointerEvents(!1), window.addEventListener(\"pointermove\", h(this, Fl, sW).bind(this, U), {\n passive: !0,\n capture: !0,\n signal: F\n }), window.addEventListener(\"contextmenu\", nd, {\n signal: F\n });\n const c = this.x, Q = this.y, a = this.width, V = this.height, W = this.parent.div.style.cursor, i = this.div.style.cursor;\n this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(l.target).cursor;\n const R = () => {\n var b;\n Z.abort(), this.parent.togglePointerEvents(!0), (b = n(this, Yl)) == null || b.toggle(!0), this._isDraggable = t, this.parent.div.style.cursor = W, this.div.style.cursor = i, h(this, Fl, nW).call(this, c, Q, a, V);\n };\n window.addEventListener(\"pointerup\", R, {\n signal: F\n }), window.addEventListener(\"blur\", R, {\n signal: F\n });\n}, nW = function(U, l, d, t) {\n const Z = this.x, F = this.y, c = this.width, Q = this.height;\n Z === U && F === l && c === d && Q === t || this.addCommands({\n cmd: () => {\n this.width = c, this.height = Q, this.x = Z, this.y = F;\n const [a, V] = this.parentDimensions;\n this.setDims(a * c, V * Q), this.fixAndSetPosition();\n },\n undo: () => {\n this.width = d, this.height = t, this.x = U, this.y = l;\n const [a, V] = this.parentDimensions;\n this.setDims(a * d, V * t), this.fixAndSetPosition();\n },\n mustExec: !0\n });\n}, sW = function(U, l) {\n const [d, t] = this.parentDimensions, Z = this.x, F = this.y, c = this.width, Q = this.height, a = Wl.MIN_SIZE / d, V = Wl.MIN_SIZE / t, W = (E) => Math.round(E * 1e4) / 1e4, i = h(this, Fl, cW).call(this, this.rotation), R = (E, g) => [i[0] * E + i[2] * g, i[1] * E + i[3] * g], N = h(this, Fl, cW).call(this, 360 - this.rotation), b = (E, g) => [N[0] * E + N[2] * g, N[1] * E + N[3] * g];\n let J, M, G = !1, T = !1;\n switch (U) {\n case \"topLeft\":\n G = !0, J = (E, g) => [0, 0], M = (E, g) => [E, g];\n break;\n case \"topMiddle\":\n J = (E, g) => [E / 2, 0], M = (E, g) => [E / 2, g];\n break;\n case \"topRight\":\n G = !0, J = (E, g) => [E, 0], M = (E, g) => [0, g];\n break;\n case \"middleRight\":\n T = !0, J = (E, g) => [E, g / 2], M = (E, g) => [0, g / 2];\n break;\n case \"bottomRight\":\n G = !0, J = (E, g) => [E, g], M = (E, g) => [0, 0];\n break;\n case \"bottomMiddle\":\n J = (E, g) => [E / 2, g], M = (E, g) => [E / 2, 0];\n break;\n case \"bottomLeft\":\n G = !0, J = (E, g) => [0, g], M = (E, g) => [E, 0];\n break;\n case \"middleLeft\":\n T = !0, J = (E, g) => [0, g / 2], M = (E, g) => [E, g / 2];\n break;\n }\n const u = J(c, Q), X = M(c, Q);\n let Y = R(...X);\n const o = W(Z + Y[0]), y = W(F + Y[1]);\n let S = 1, p = 1, [L, I] = this.screenToPageTranslation(l.movementX, l.movementY);\n if ([L, I] = b(L / d, I / t), G) {\n const E = Math.hypot(c, Q);\n S = p = Math.max(Math.min(Math.hypot(X[0] - u[0] - L, X[1] - u[1] - I) / E, 1 / c, 1 / Q), a / c, V / Q);\n } else T ? S = Math.max(a, Math.min(1, Math.abs(X[0] - u[0] - L))) / c : p = Math.max(V, Math.min(1, Math.abs(X[1] - u[1] - I))) / Q;\n const D = W(c * S), r = W(Q * p);\n Y = R(...M(D, r));\n const w = o - Y[0], B = y - Y[1];\n this.width = D, this.height = r, this.x = w, this.y = B, this.setDims(d * D, t * r), this.fixAndSetPosition();\n}, QW = function(U) {\n const {\n isMac: l\n } = DU.platform;\n U.ctrlKey && !l || U.shiftKey || U.metaKey && l ? this.parent.toggleSelected(this) : this.parent.setSelected(this);\n}, gN = function(U) {\n const l = this._uiManager.isSelected(this);\n this._uiManager.setUpDragSession();\n const d = new AbortController(), t = this._uiManager.combinedSignal(d);\n if (l) {\n this.div.classList.add(\"moving\"), e(this, g0, U.clientX), e(this, K0, U.clientY);\n const F = (c) => {\n const {\n clientX: Q,\n clientY: a\n } = c, [V, W] = this.screenToPageTranslation(Q - n(this, g0), a - n(this, K0));\n e(this, g0, Q), e(this, K0, a), this._uiManager.dragSelectedEditors(V, W);\n };\n window.addEventListener(\"pointermove\", F, {\n passive: !0,\n capture: !0,\n signal: t\n });\n }\n const Z = () => {\n d.abort(), l && this.div.classList.remove(\"moving\"), e(this, RF, !1), this._uiManager.endDragSession() || h(this, Fl, QW).call(this, U);\n };\n window.addEventListener(\"pointerup\", Z, {\n signal: t\n }), window.addEventListener(\"blur\", Z, {\n signal: t\n });\n}, aW = function() {\n if (n(this, cZ) || !this.div)\n return;\n e(this, cZ, new AbortController());\n const U = this._uiManager.combinedSignal(n(this, cZ));\n this.div.addEventListener(\"focusin\", this.focusin.bind(this), {\n signal: U\n }), this.div.addEventListener(\"focusout\", this.focusout.bind(this), {\n signal: U\n });\n}, KN = function(U) {\n Wl._resizerKeyboardManager.exec(this, U);\n}, vN = function(U) {\n var l;\n n(this, Rt) && ((l = U.relatedTarget) == null ? void 0 : l.parentNode) !== n(this, nU) && h(this, Fl, Wn).call(this);\n}, HN = function(U) {\n e(this, Us, n(this, Rt) ? U : \"\");\n}, VW = function(U) {\n if (n(this, Rd))\n for (const l of n(this, Rd))\n l.tabIndex = U;\n}, Wn = function() {\n if (e(this, Rt, !1), h(this, Fl, VW).call(this, -1), n(this, iF)) {\n const {\n savedX: U,\n savedY: l,\n savedWidth: d,\n savedHeight: t\n } = n(this, iF);\n h(this, Fl, nW).call(this, U, l, d, t), e(this, iF, null);\n }\n}, m(Wl, Zs), _(Wl, \"_l10nPromise\", null), _(Wl, \"_l10nResizer\", null), _(Wl, \"_borderLineWidth\", -1), _(Wl, \"_colorManager\", new _V()), _(Wl, \"_zIndex\", 1), _(Wl, \"_telemetryTimeout\", 1e3);\nlet hl = Wl;\nclass gb extends hl {\n constructor(U) {\n super(U), this.annotationElementId = U.annotationElementId, this.deleted = !0;\n }\n serialize() {\n return this.serializeDeleted();\n }\n}\nconst aR = 3285377520, _U = 4294901760, Xd = 65535;\nclass PN {\n constructor(U) {\n this.h1 = U ? U & 4294967295 : aR, this.h2 = U ? U & 4294967295 : aR;\n }\n update(U) {\n let l, d;\n if (typeof U == \"string\") {\n l = new Uint8Array(U.length * 2), d = 0;\n for (let b = 0, J = U.length; b < J; b++) {\n const M = U.charCodeAt(b);\n M <= 255 ? l[d++] = M : (l[d++] = M >>> 8, l[d++] = M & 255);\n }\n } else if (ArrayBuffer.isView(U))\n l = U.slice(), d = l.byteLength;\n else\n throw new Error(\"Invalid data format, must be a string or TypedArray.\");\n const t = d >> 2, Z = d - t * 4, F = new Uint32Array(l.buffer, 0, t);\n let c = 0, Q = 0, a = this.h1, V = this.h2;\n const W = 3432918353, i = 461845907, R = W & Xd, N = i & Xd;\n for (let b = 0; b < t; b++)\n b & 1 ? (c = F[b], c = c * W & _U | c * R & Xd, c = c << 15 | c >>> 17, c = c * i & _U | c * N & Xd, a ^= c, a = a << 13 | a >>> 19, a = a * 5 + 3864292196) : (Q = F[b], Q = Q * W & _U | Q * R & Xd, Q = Q << 15 | Q >>> 17, Q = Q * i & _U | Q * N & Xd, V ^= Q, V = V << 13 | V >>> 19, V = V * 5 + 3864292196);\n switch (c = 0, Z) {\n case 3:\n c ^= l[t * 4 + 2] << 16;\n case 2:\n c ^= l[t * 4 + 1] << 8;\n case 1:\n c ^= l[t * 4], c = c * W & _U | c * R & Xd, c = c << 15 | c >>> 17, c = c * i & _U | c * N & Xd, t & 1 ? a ^= c : V ^= c;\n }\n this.h1 = a, this.h2 = V;\n }\n hexdigest() {\n let U = this.h1, l = this.h2;\n return U ^= l >>> 1, U = U * 3981806797 & _U | U * 36045 & Xd, l = l * 4283543511 & _U | ((l << 16 | U >>> 16) * 2950163797 & _U) >>> 16, U ^= l >>> 1, U = U * 444984403 & _U | U * 60499 & Xd, l = l * 3301882366 & _U | ((l << 16 | U >>> 16) * 3120437893 & _U) >>> 16, U ^= l >>> 1, (U >>> 0).toString(16).padStart(8, \"0\") + (l >>> 0).toString(16).padStart(8, \"0\");\n }\n}\nconst WW = Object.freeze({\n map: null,\n hash: \"\",\n transfer: void 0\n});\nvar hF, eF, tU, qa, fN;\nclass gi {\n constructor() {\n m(this, qa);\n m(this, hF, !1);\n m(this, eF, null);\n m(this, tU, /* @__PURE__ */ new Map());\n this.onSetModified = null, this.onResetModified = null, this.onAnnotationEditor = null;\n }\n getValue(U, l) {\n const d = n(this, tU).get(U);\n return d === void 0 ? l : Object.assign(l, d);\n }\n getRawValue(U) {\n return n(this, tU).get(U);\n }\n remove(U) {\n if (n(this, tU).delete(U), n(this, tU).size === 0 && this.resetModified(), typeof this.onAnnotationEditor == \"function\") {\n for (const l of n(this, tU).values())\n if (l instanceof hl)\n return;\n this.onAnnotationEditor(null);\n }\n }\n setValue(U, l) {\n const d = n(this, tU).get(U);\n let t = !1;\n if (d !== void 0)\n for (const [Z, F] of Object.entries(l))\n d[Z] !== F && (t = !0, d[Z] = F);\n else\n t = !0, n(this, tU).set(U, l);\n t && h(this, qa, fN).call(this), l instanceof hl && typeof this.onAnnotationEditor == \"function\" && this.onAnnotationEditor(l.constructor._type);\n }\n has(U) {\n return n(this, tU).has(U);\n }\n getAll() {\n return n(this, tU).size > 0 ? ri(n(this, tU)) : null;\n }\n setAll(U) {\n for (const [l, d] of Object.entries(U))\n this.setValue(l, d);\n }\n get size() {\n return n(this, tU).size;\n }\n resetModified() {\n n(this, hF) && (e(this, hF, !1), typeof this.onResetModified == \"function\" && this.onResetModified());\n }\n get print() {\n return new AN(this);\n }\n get serializable() {\n if (n(this, tU).size === 0)\n return WW;\n const U = /* @__PURE__ */ new Map(), l = new PN(), d = [], t = /* @__PURE__ */ Object.create(null);\n let Z = !1;\n for (const [F, c] of n(this, tU)) {\n const Q = c instanceof hl ? c.serialize(!1, t) : c;\n Q && (U.set(F, Q), l.update(`${F}:${JSON.stringify(Q)}`), Z || (Z = !!Q.bitmap));\n }\n if (Z)\n for (const F of U.values())\n F.bitmap && d.push(F.bitmap);\n return U.size > 0 ? {\n map: U,\n hash: l.hexdigest(),\n transfer: d\n } : WW;\n }\n get editorStats() {\n let U = null;\n const l = /* @__PURE__ */ new Map();\n for (const d of n(this, tU).values()) {\n if (!(d instanceof hl))\n continue;\n const t = d.telemetryFinalData;\n if (!t)\n continue;\n const {\n type: Z\n } = t;\n l.has(Z) || l.set(Z, Object.getPrototypeOf(d).constructor), U || (U = /* @__PURE__ */ Object.create(null));\n const F = U[Z] || (U[Z] = /* @__PURE__ */ new Map());\n for (const [c, Q] of Object.entries(t)) {\n if (c === \"type\")\n continue;\n let a = F.get(c);\n a || (a = /* @__PURE__ */ new Map(), F.set(c, a));\n const V = a.get(Q) ?? 0;\n a.set(Q, V + 1);\n }\n }\n for (const [d, t] of l)\n U[d] = t.computeTelemetryFinalData(U[d]);\n return U;\n }\n resetModifiedIds() {\n e(this, eF, null);\n }\n get modifiedIds() {\n if (n(this, eF))\n return n(this, eF);\n const U = [];\n for (const l of n(this, tU).values())\n !(l instanceof hl) || !l.annotationElementId || !l.serialize() || U.push(l.annotationElementId);\n return e(this, eF, {\n ids: new Set(U),\n hash: U.join(\",\")\n });\n }\n}\nhF = new WeakMap(), eF = new WeakMap(), tU = new WeakMap(), qa = new WeakSet(), fN = function() {\n n(this, hF) || (e(this, hF, !0), typeof this.onSetModified == \"function\" && this.onSetModified());\n};\nvar Fs;\nclass AN extends gi {\n constructor(l) {\n super();\n m(this, Fs);\n const {\n map: d,\n hash: t,\n transfer: Z\n } = l.serializable, F = structuredClone(d, Z ? {\n transfer: Z\n } : null);\n e(this, Fs, {\n map: F,\n hash: t,\n transfer: Z\n });\n }\n get print() {\n Ol(\"Should not call PrintAnnotationStorage.print\");\n }\n get serializable() {\n return n(this, Fs);\n }\n get modifiedIds() {\n return Ql(this, \"modifiedIds\", {\n ids: /* @__PURE__ */ new Set(),\n hash: \"\"\n });\n }\n}\nFs = new WeakMap();\nvar v0;\nclass Kb {\n constructor({\n ownerDocument: U = globalThis.document,\n styleElement: l = null\n }) {\n m(this, v0, /* @__PURE__ */ new Set());\n this._document = U, this.nativeFontFaces = /* @__PURE__ */ new Set(), this.styleElement = null, this.loadingRequests = [], this.loadTestFontId = 0;\n }\n addNativeFontFace(U) {\n this.nativeFontFaces.add(U), this._document.fonts.add(U);\n }\n removeNativeFontFace(U) {\n this.nativeFontFaces.delete(U), this._document.fonts.delete(U);\n }\n insertRule(U) {\n this.styleElement || (this.styleElement = this._document.createElement(\"style\"), this._document.documentElement.getElementsByTagName(\"head\")[0].append(this.styleElement));\n const l = this.styleElement.sheet;\n l.insertRule(U, l.cssRules.length);\n }\n clear() {\n for (const U of this.nativeFontFaces)\n this._document.fonts.delete(U);\n this.nativeFontFaces.clear(), n(this, v0).clear(), this.styleElement && (this.styleElement.remove(), this.styleElement = null);\n }\n async loadSystemFont({\n systemFontInfo: U,\n _inspectFont: l\n }) {\n if (!(!U || n(this, v0).has(U.loadedName))) {\n if (Al(!this.disableFontFace, \"loadSystemFont shouldn't be called when `disableFontFace` is set.\"), this.isFontLoadingAPISupported) {\n const {\n loadedName: d,\n src: t,\n style: Z\n } = U, F = new FontFace(d, t, Z);\n this.addNativeFontFace(F);\n try {\n await F.load(), n(this, v0).add(d), l == null || l(U);\n } catch {\n Zl(`Cannot load system font: ${U.baseFontName}, installing it could help to improve PDF rendering.`), this.removeNativeFontFace(F);\n }\n return;\n }\n Ol(\"Not implemented: loadSystemFont without the Font Loading API.\");\n }\n }\n async bind(U) {\n if (U.attached || U.missingFile && !U.systemFontInfo)\n return;\n if (U.attached = !0, U.systemFontInfo) {\n await this.loadSystemFont(U);\n return;\n }\n if (this.isFontLoadingAPISupported) {\n const d = U.createNativeFontFace();\n if (d) {\n this.addNativeFontFace(d);\n try {\n await d.loaded;\n } catch (t) {\n throw Zl(`Failed to load font '${d.family}': '${t}'.`), U.disableFontFace = !0, t;\n }\n }\n return;\n }\n const l = U.createFontFaceRule();\n if (l) {\n if (this.insertRule(l), this.isSyncFontLoadingSupported)\n return;\n await new Promise((d) => {\n const t = this._queueLoadingCallback(d);\n this._prepareFontLoadEvent(U, t);\n });\n }\n }\n get isFontLoadingAPISupported() {\n var l;\n const U = !!((l = this._document) != null && l.fonts);\n return Ql(this, \"isFontLoadingAPISupported\", U);\n }\n get isSyncFontLoadingSupported() {\n let U = !1;\n return (mU || typeof navigator < \"u\" && typeof (navigator == null ? void 0 : navigator.userAgent) == \"string\" && /Mozilla\\/5.0.*?rv:\\d+.*? Gecko/.test(navigator.userAgent)) && (U = !0), Ql(this, \"isSyncFontLoadingSupported\", U);\n }\n _queueLoadingCallback(U) {\n function l() {\n for (Al(!t.done, \"completeRequest() cannot be called twice.\"), t.done = !0; d.length > 0 && d[0].done; ) {\n const Z = d.shift();\n setTimeout(Z.callback, 0);\n }\n }\n const {\n loadingRequests: d\n } = this, t = {\n done: !1,\n complete: l,\n callback: U\n };\n return d.push(t), t;\n }\n get _loadTestFont() {\n const U = atob(\"T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==\");\n return Ql(this, \"_loadTestFont\", U);\n }\n _prepareFontLoadEvent(U, l) {\n function d(u, X) {\n return u.charCodeAt(X) << 24 | u.charCodeAt(X + 1) << 16 | u.charCodeAt(X + 2) << 8 | u.charCodeAt(X + 3) & 255;\n }\n function t(u, X, Y, o) {\n const y = u.substring(0, X), S = u.substring(X + Y);\n return y + o + S;\n }\n let Z, F;\n const c = this._document.createElement(\"canvas\");\n c.width = 1, c.height = 1;\n const Q = c.getContext(\"2d\");\n let a = 0;\n function V(u, X) {\n if (++a > 30) {\n Zl(\"Load test font never loaded.\"), X();\n return;\n }\n if (Q.font = \"30px \" + u, Q.fillText(\".\", 0, 20), Q.getImageData(0, 0, 1, 1).data[3] > 0) {\n X();\n return;\n }\n setTimeout(V.bind(null, u, X));\n }\n const W = `lt${Date.now()}${this.loadTestFontId++}`;\n let i = this._loadTestFont;\n i = t(i, 976, W.length, W);\n const N = 16, b = 1482184792;\n let J = d(i, N);\n for (Z = 0, F = W.length - 3; Z < F; Z += 4)\n J = J - b + d(W, Z) | 0;\n Z < W.length && (J = J - b + d(W + \"XXX\", Z) | 0), i = t(i, N, 4, Yb(J));\n const M = `url(data:font/opentype;base64,${btoa(i)});`, G = `@font-face {font-family:\"${W}\";src:${M}}`;\n this.insertRule(G);\n const T = this._document.createElement(\"div\");\n T.style.visibility = \"hidden\", T.style.width = T.style.height = \"10px\", T.style.position = \"absolute\", T.style.top = T.style.left = \"0px\";\n for (const u of [U.loadedName, W]) {\n const X = this._document.createElement(\"span\");\n X.textContent = \"Hi\", X.style.fontFamily = u, T.append(X);\n }\n this._document.body.append(T), V(W, () => {\n T.remove(), l.complete();\n });\n }\n}\nv0 = new WeakMap();\nclass vb {\n constructor(U, {\n disableFontFace: l = !1,\n inspectFont: d = null\n }) {\n this.compiledGlyphs = /* @__PURE__ */ Object.create(null);\n for (const t in U)\n this[t] = U[t];\n this.disableFontFace = l === !0, this._inspectFont = d;\n }\n createNativeFontFace() {\n var l;\n if (!this.data || this.disableFontFace)\n return null;\n let U;\n if (!this.cssFontInfo)\n U = new FontFace(this.loadedName, this.data, {});\n else {\n const d = {\n weight: this.cssFontInfo.fontWeight\n };\n this.cssFontInfo.italicAngle && (d.style = `oblique ${this.cssFontInfo.italicAngle}deg`), U = new FontFace(this.cssFontInfo.fontFamily, this.data, d);\n }\n return (l = this._inspectFont) == null || l.call(this, this), U;\n }\n createFontFaceRule() {\n var t;\n if (!this.data || this.disableFontFace)\n return null;\n const U = NN(this.data), l = `url(data:${this.mimetype};base64,${btoa(U)});`;\n let d;\n if (!this.cssFontInfo)\n d = `@font-face {font-family:\"${this.loadedName}\";src:${l}}`;\n else {\n let Z = `font-weight: ${this.cssFontInfo.fontWeight};`;\n this.cssFontInfo.italicAngle && (Z += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`), d = `@font-face {font-family:\"${this.cssFontInfo.fontFamily}\";${Z}src:${l}}`;\n }\n return (t = this._inspectFont) == null || t.call(this, this, l), d;\n }\n getPathGenerator(U, l) {\n if (this.compiledGlyphs[l] !== void 0)\n return this.compiledGlyphs[l];\n let d;\n try {\n d = U.get(this.loadedName + \"_path_\" + l);\n } catch (Z) {\n Zl(`getPathGenerator - ignoring character: \"${Z}\".`);\n }\n if (!Array.isArray(d) || d.length === 0)\n return this.compiledGlyphs[l] = function(Z, F) {\n };\n const t = [];\n for (let Z = 0, F = d.length; Z < F; )\n switch (d[Z++]) {\n case dt.BEZIER_CURVE_TO:\n {\n const [c, Q, a, V, W, i] = d.slice(Z, Z + 6);\n t.push((R) => R.bezierCurveTo(c, Q, a, V, W, i)), Z += 6;\n }\n break;\n case dt.MOVE_TO:\n {\n const [c, Q] = d.slice(Z, Z + 2);\n t.push((a) => a.moveTo(c, Q)), Z += 2;\n }\n break;\n case dt.LINE_TO:\n {\n const [c, Q] = d.slice(Z, Z + 2);\n t.push((a) => a.lineTo(c, Q)), Z += 2;\n }\n break;\n case dt.QUADRATIC_CURVE_TO:\n {\n const [c, Q, a, V] = d.slice(Z, Z + 4);\n t.push((W) => W.quadraticCurveTo(c, Q, a, V)), Z += 4;\n }\n break;\n case dt.RESTORE:\n t.push((c) => c.restore());\n break;\n case dt.SAVE:\n t.push((c) => c.save());\n break;\n case dt.SCALE:\n Al(t.length === 2, \"Scale command is only valid at the third position.\");\n break;\n case dt.TRANSFORM:\n {\n const [c, Q, a, V, W, i] = d.slice(Z, Z + 6);\n t.push((R) => R.transform(c, Q, a, V, W, i)), Z += 6;\n }\n break;\n case dt.TRANSLATE:\n {\n const [c, Q] = d.slice(Z, Z + 2);\n t.push((a) => a.translate(c, Q)), Z += 2;\n }\n break;\n }\n return this.compiledGlyphs[l] = function(F, c) {\n t[0](F), t[1](F), F.scale(c, -c);\n for (let Q = 2, a = t.length; Q < a; Q++)\n t[Q](F);\n };\n }\n}\nif (mU) {\n var iW = Promise.withResolvers(), pn = null;\n (async () => {\n const U = await Promise.resolve().then(() => Fn), l = await Promise.resolve().then(() => Fn), d = await Promise.resolve().then(() => Fn), t = await Promise.resolve().then(() => Fn);\n let Z, F;\n try {\n Z = await Promise.resolve().then(() => Fn);\n } catch {\n }\n try {\n F = await Promise.resolve().then(() => fJ);\n } catch {\n }\n return new Map(Object.entries({\n fs: U,\n http: l,\n https: d,\n url: t,\n canvas: Z,\n path2d: F\n }));\n })().then((U) => {\n var l, d, t, Z;\n if (pn = U, iW.resolve(), !globalThis.DOMMatrix) {\n const F = (l = U.get(\"canvas\")) == null ? void 0 : l.DOMMatrix;\n F ? globalThis.DOMMatrix = F : Zl(\"Cannot polyfill `DOMMatrix`, rendering may be broken.\");\n }\n if (!globalThis.Path2D) {\n const F = (d = U.get(\"canvas\")) == null ? void 0 : d.CanvasRenderingContext2D, c = (t = U.get(\"path2d\")) == null ? void 0 : t.applyPath2DToCanvasRenderingContext, Q = (Z = U.get(\"path2d\")) == null ? void 0 : Z.Path2D;\n F && c && Q ? (c(F), globalThis.Path2D = Q) : Zl(\"Cannot polyfill `Path2D`, rendering may be broken.\");\n }\n }, (U) => {\n Zl(`loadPackages: ${U}`), pn = /* @__PURE__ */ new Map(), iW.resolve();\n });\n}\nclass wZ {\n static get promise() {\n return iW.promise;\n }\n static get(U) {\n return pn == null ? void 0 : pn.get(U);\n }\n}\nconst _N = function(s) {\n return wZ.get(\"fs\").promises.readFile(s).then((l) => new Uint8Array(l));\n};\nclass Hb extends hN {\n}\nclass Pb extends eN {\n _createCanvas(U, l) {\n return wZ.get(\"canvas\").createCanvas(U, l);\n }\n}\nclass fb extends bN {\n _fetchData(U, l) {\n return _N(U).then((d) => ({\n cMapData: d,\n compressionType: l\n }));\n }\n}\nclass Ab extends mN {\n _fetchData(U) {\n return _N(U);\n }\n}\nconst TU = {\n FILL: \"Fill\",\n STROKE: \"Stroke\",\n SHADING: \"Shading\"\n};\nfunction RW(s, U) {\n if (!U)\n return;\n const l = U[2] - U[0], d = U[3] - U[1], t = new Path2D();\n t.rect(U[0], U[1], l, d), s.clip(t);\n}\nclass Ki {\n getPattern() {\n Ol(\"Abstract method `getPattern` called.\");\n }\n}\nclass _b extends Ki {\n constructor(U) {\n super(), this._type = U[1], this._bbox = U[2], this._colorStops = U[3], this._p0 = U[4], this._p1 = U[5], this._r0 = U[6], this._r1 = U[7], this.matrix = null;\n }\n _createGradient(U) {\n let l;\n this._type === \"axial\" ? l = U.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]) : this._type === \"radial\" && (l = U.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1));\n for (const d of this._colorStops)\n l.addColorStop(d[0], d[1]);\n return l;\n }\n getPattern(U, l, d, t) {\n let Z;\n if (t === TU.STROKE || t === TU.FILL) {\n const F = l.current.getClippedPathBoundingBox(t, pl(U)) || [0, 0, 0, 0], c = Math.ceil(F[2] - F[0]) || 1, Q = Math.ceil(F[3] - F[1]) || 1, a = l.cachedCanvases.getCanvas(\"pattern\", c, Q), V = a.context;\n V.clearRect(0, 0, V.canvas.width, V.canvas.height), V.beginPath(), V.rect(0, 0, V.canvas.width, V.canvas.height), V.translate(-F[0], -F[1]), d = H.transform(d, [1, 0, 0, 1, F[0], F[1]]), V.transform(...l.baseTransform), this.matrix && V.transform(...this.matrix), RW(V, this._bbox), V.fillStyle = this._createGradient(V), V.fill(), Z = U.createPattern(a.canvas, \"no-repeat\");\n const W = new DOMMatrix(d);\n Z.setTransform(W);\n } else\n RW(U, this._bbox), Z = this._createGradient(U);\n return Z;\n }\n}\nfunction uV(s, U, l, d, t, Z, F, c) {\n const Q = U.coords, a = U.colors, V = s.data, W = s.width * 4;\n let i;\n Q[l + 1] > Q[d + 1] && (i = l, l = d, d = i, i = Z, Z = F, F = i), Q[d + 1] > Q[t + 1] && (i = d, d = t, t = i, i = F, F = c, c = i), Q[l + 1] > Q[d + 1] && (i = l, l = d, d = i, i = Z, Z = F, F = i);\n const R = (Q[l] + U.offsetX) * U.scaleX, N = (Q[l + 1] + U.offsetY) * U.scaleY, b = (Q[d] + U.offsetX) * U.scaleX, J = (Q[d + 1] + U.offsetY) * U.scaleY, M = (Q[t] + U.offsetX) * U.scaleX, G = (Q[t + 1] + U.offsetY) * U.scaleY;\n if (N >= G)\n return;\n const T = a[Z], u = a[Z + 1], X = a[Z + 2], Y = a[F], o = a[F + 1], y = a[F + 2], S = a[c], p = a[c + 1], L = a[c + 2], I = Math.round(N), D = Math.round(G);\n let r, w, B, E, g, Rl, Nl, gl;\n for (let bl = I; bl <= D; bl++) {\n if (bl < J) {\n const k = bl < N ? 0 : (N - bl) / (N - J);\n r = R - (R - b) * k, w = T - (T - Y) * k, B = u - (u - o) * k, E = X - (X - y) * k;\n } else {\n let k;\n bl > G ? k = 1 : J === G ? k = 0 : k = (J - bl) / (J - G), r = b - (b - M) * k, w = Y - (Y - S) * k, B = o - (o - p) * k, E = y - (y - L) * k;\n }\n let Jl;\n bl < N ? Jl = 0 : bl > G ? Jl = 1 : Jl = (N - bl) / (N - G), g = R - (R - M) * Jl, Rl = T - (T - S) * Jl, Nl = u - (u - p) * Jl, gl = X - (X - L) * Jl;\n const Td = Math.round(Math.min(r, g)), uU = Math.round(Math.max(r, g));\n let O = W * bl + Td * 4;\n for (let k = Td; k <= uU; k++)\n Jl = (r - k) / (r - g), Jl < 0 ? Jl = 0 : Jl > 1 && (Jl = 1), V[O++] = w - (w - Rl) * Jl | 0, V[O++] = B - (B - Nl) * Jl | 0, V[O++] = E - (E - gl) * Jl | 0, V[O++] = 255;\n }\n}\nfunction qb(s, U, l) {\n const d = U.coords, t = U.colors;\n let Z, F;\n switch (U.type) {\n case \"lattice\":\n const c = U.verticesPerRow, Q = Math.floor(d.length / c) - 1, a = c - 1;\n for (Z = 0; Z < Q; Z++) {\n let V = Z * c;\n for (let W = 0; W < a; W++, V++)\n uV(s, l, d[V], d[V + 1], d[V + c], t[V], t[V + 1], t[V + c]), uV(s, l, d[V + c + 1], d[V + 1], d[V + c], t[V + c + 1], t[V + 1], t[V + c]);\n }\n break;\n case \"triangles\":\n for (Z = 0, F = d.length; Z < F; Z += 3)\n uV(s, l, d[Z], d[Z + 1], d[Z + 2], t[Z], t[Z + 1], t[Z + 2]);\n break;\n default:\n throw new Error(\"illegal figure\");\n }\n}\nclass $b extends Ki {\n constructor(U) {\n super(), this._coords = U[2], this._colors = U[3], this._figures = U[4], this._bounds = U[5], this._bbox = U[7], this._background = U[8], this.matrix = null;\n }\n _createMeshCanvas(U, l, d) {\n const c = Math.floor(this._bounds[0]), Q = Math.floor(this._bounds[1]), a = Math.ceil(this._bounds[2]) - c, V = Math.ceil(this._bounds[3]) - Q, W = Math.min(Math.ceil(Math.abs(a * U[0] * 1.1)), 3e3), i = Math.min(Math.ceil(Math.abs(V * U[1] * 1.1)), 3e3), R = a / W, N = V / i, b = {\n coords: this._coords,\n colors: this._colors,\n offsetX: -c,\n offsetY: -Q,\n scaleX: 1 / R,\n scaleY: 1 / N\n }, J = W + 2 * 2, M = i + 2 * 2, G = d.getCanvas(\"mesh\", J, M), T = G.context, u = T.createImageData(W, i);\n if (l) {\n const Y = u.data;\n for (let o = 0, y = Y.length; o < y; o += 4)\n Y[o] = l[0], Y[o + 1] = l[1], Y[o + 2] = l[2], Y[o + 3] = 255;\n }\n for (const Y of this._figures)\n qb(u, Y, b);\n return T.putImageData(u, 2, 2), {\n canvas: G.canvas,\n offsetX: c - 2 * R,\n offsetY: Q - 2 * N,\n scaleX: R,\n scaleY: N\n };\n }\n getPattern(U, l, d, t) {\n RW(U, this._bbox);\n let Z;\n if (t === TU.SHADING)\n Z = H.singularValueDecompose2dScale(pl(U));\n else if (Z = H.singularValueDecompose2dScale(l.baseTransform), this.matrix) {\n const c = H.singularValueDecompose2dScale(this.matrix);\n Z = [Z[0] * c[0], Z[1] * c[1]];\n }\n const F = this._createMeshCanvas(Z, t === TU.SHADING ? null : this._background, l.cachedCanvases);\n return t !== TU.SHADING && (U.setTransform(...l.baseTransform), this.matrix && U.transform(...this.matrix)), U.translate(F.offsetX, F.offsetY), U.scale(F.scaleX, F.scaleY), U.createPattern(F.canvas, \"no-repeat\");\n }\n}\nclass lm extends Ki {\n getPattern() {\n return \"hotpink\";\n }\n}\nfunction Um(s) {\n switch (s[0]) {\n case \"RadialAxial\":\n return new _b(s);\n case \"Mesh\":\n return new $b(s);\n case \"Dummy\":\n return new lm();\n }\n throw new Error(`Unknown IR type: ${s[0]}`);\n}\nconst VR = {\n COLORED: 1,\n UNCOLORED: 2\n}, $a = class $a {\n constructor(U, l, d, t, Z) {\n this.operatorList = U[2], this.matrix = U[3], this.bbox = U[4], this.xstep = U[5], this.ystep = U[6], this.paintType = U[7], this.tilingType = U[8], this.color = l, this.ctx = d, this.canvasGraphicsFactory = t, this.baseTransform = Z;\n }\n createPatternCanvas(U) {\n const {\n bbox: l,\n operatorList: d,\n paintType: t,\n tilingType: Z,\n color: F,\n canvasGraphicsFactory: c\n } = this;\n let {\n xstep: Q,\n ystep: a\n } = this;\n Q = Math.abs(Q), a = Math.abs(a), iV(\"TilingType: \" + Z);\n const V = l[0], W = l[1], i = l[2], R = l[3], N = i - V, b = R - W, J = H.singularValueDecompose2dScale(this.matrix), M = H.singularValueDecompose2dScale(this.baseTransform), G = J[0] * M[0], T = J[1] * M[1];\n let u = N, X = b, Y = !1, o = !1;\n const y = Math.ceil(Q * G), S = Math.ceil(a * T), p = Math.ceil(N * G), L = Math.ceil(b * T);\n y >= p ? u = Q : Y = !0, S >= L ? X = a : o = !0;\n const I = this.getSizeAndScale(u, this.ctx.canvas.width, G), D = this.getSizeAndScale(X, this.ctx.canvas.height, T), r = U.cachedCanvases.getCanvas(\"pattern\", I.size, D.size), w = r.context, B = c.createCanvasGraphics(w);\n if (B.groupLevel = U.groupLevel, this.setFillAndStrokeStyleToContext(B, t, F), w.translate(-I.scale * V, -D.scale * W), B.transform(I.scale, 0, 0, D.scale, 0, 0), w.save(), this.clipBbox(B, V, W, i, R), B.baseTransform = pl(B.ctx), B.executeOperatorList(d), B.endDrawing(), w.restore(), Y || o) {\n const E = r.canvas;\n Y && (u = Q), o && (X = a);\n const g = this.getSizeAndScale(u, this.ctx.canvas.width, G), Rl = this.getSizeAndScale(X, this.ctx.canvas.height, T), Nl = g.size, gl = Rl.size, bl = U.cachedCanvases.getCanvas(\"pattern-workaround\", Nl, gl), Jl = bl.context, Td = Y ? Math.floor(N / Q) : 0, uU = o ? Math.floor(b / a) : 0;\n for (let O = 0; O <= Td; O++)\n for (let k = 0; k <= uU; k++)\n Jl.drawImage(E, Nl * O, gl * k, Nl, gl, 0, 0, Nl, gl);\n return {\n canvas: bl.canvas,\n scaleX: g.scale,\n scaleY: Rl.scale,\n offsetX: V,\n offsetY: W\n };\n }\n return {\n canvas: r.canvas,\n scaleX: I.scale,\n scaleY: D.scale,\n offsetX: V,\n offsetY: W\n };\n }\n getSizeAndScale(U, l, d) {\n const t = Math.max($a.MAX_PATTERN_SIZE, l);\n let Z = Math.ceil(U * d);\n return Z >= t ? Z = t : d = Z / U, {\n scale: d,\n size: Z\n };\n }\n clipBbox(U, l, d, t, Z) {\n const F = t - l, c = Z - d;\n U.ctx.rect(l, d, F, c), U.current.updateRectMinMax(pl(U.ctx), [l, d, t, Z]), U.clip(), U.endPath();\n }\n setFillAndStrokeStyleToContext(U, l, d) {\n const t = U.ctx, Z = U.current;\n switch (l) {\n case VR.COLORED:\n const F = this.ctx;\n t.fillStyle = F.fillStyle, t.strokeStyle = F.strokeStyle, Z.fillColor = F.fillStyle, Z.strokeColor = F.strokeStyle;\n break;\n case VR.UNCOLORED:\n const c = H.makeHexColor(d[0], d[1], d[2]);\n t.fillStyle = c, t.strokeStyle = c, Z.fillColor = c, Z.strokeColor = c;\n break;\n default:\n throw new ub(`Unsupported paint type: ${l}`);\n }\n }\n getPattern(U, l, d, t) {\n let Z = d;\n t !== TU.SHADING && (Z = H.transform(Z, l.baseTransform), this.matrix && (Z = H.transform(Z, this.matrix)));\n const F = this.createPatternCanvas(l);\n let c = new DOMMatrix(Z);\n c = c.translate(F.offsetX, F.offsetY), c = c.scale(1 / F.scaleX, 1 / F.scaleY);\n const Q = U.createPattern(F.canvas, \"repeat\");\n return Q.setTransform(c), Q;\n }\n};\n_($a, \"MAX_PATTERN_SIZE\", 3e3);\nlet NW = $a;\nfunction dm({\n src: s,\n srcPos: U = 0,\n dest: l,\n width: d,\n height: t,\n nonBlackColor: Z = 4294967295,\n inverseDecode: F = !1\n}) {\n const c = DU.isLittleEndian ? 4278190080 : 255, [Q, a] = F ? [Z, c] : [c, Z], V = d >> 3, W = d & 7, i = s.length;\n l = new Uint32Array(l.buffer);\n let R = 0;\n for (let N = 0; N < t; N++) {\n for (const J = U + V; U < J; U++) {\n const M = U < i ? s[U] : 255;\n l[R++] = M & 128 ? a : Q, l[R++] = M & 64 ? a : Q, l[R++] = M & 32 ? a : Q, l[R++] = M & 16 ? a : Q, l[R++] = M & 8 ? a : Q, l[R++] = M & 4 ? a : Q, l[R++] = M & 2 ? a : Q, l[R++] = M & 1 ? a : Q;\n }\n if (W === 0)\n continue;\n const b = U < i ? s[U++] : 255;\n for (let J = 0; J < W; J++)\n l[R++] = b & 1 << 7 - J ? a : Q;\n }\n return {\n srcPos: U,\n destPos: R\n };\n}\nconst WR = 16, iR = 100, tm = 15, RR = 10, NR = 1e3, zU = 16;\nfunction Zm(s, U) {\n if (s._removeMirroring)\n throw new Error(\"Context is already forwarding operations.\");\n s.__originalSave = s.save, s.__originalRestore = s.restore, s.__originalRotate = s.rotate, s.__originalScale = s.scale, s.__originalTranslate = s.translate, s.__originalTransform = s.transform, s.__originalSetTransform = s.setTransform, s.__originalResetTransform = s.resetTransform, s.__originalClip = s.clip, s.__originalMoveTo = s.moveTo, s.__originalLineTo = s.lineTo, s.__originalBezierCurveTo = s.bezierCurveTo, s.__originalRect = s.rect, s.__originalClosePath = s.closePath, s.__originalBeginPath = s.beginPath, s._removeMirroring = () => {\n s.save = s.__originalSave, s.restore = s.__originalRestore, s.rotate = s.__originalRotate, s.scale = s.__originalScale, s.translate = s.__originalTranslate, s.transform = s.__originalTransform, s.setTransform = s.__originalSetTransform, s.resetTransform = s.__originalResetTransform, s.clip = s.__originalClip, s.moveTo = s.__originalMoveTo, s.lineTo = s.__originalLineTo, s.bezierCurveTo = s.__originalBezierCurveTo, s.rect = s.__originalRect, s.closePath = s.__originalClosePath, s.beginPath = s.__originalBeginPath, delete s._removeMirroring;\n }, s.save = function() {\n U.save(), this.__originalSave();\n }, s.restore = function() {\n U.restore(), this.__originalRestore();\n }, s.translate = function(d, t) {\n U.translate(d, t), this.__originalTranslate(d, t);\n }, s.scale = function(d, t) {\n U.scale(d, t), this.__originalScale(d, t);\n }, s.transform = function(d, t, Z, F, c, Q) {\n U.transform(d, t, Z, F, c, Q), this.__originalTransform(d, t, Z, F, c, Q);\n }, s.setTransform = function(d, t, Z, F, c, Q) {\n U.setTransform(d, t, Z, F, c, Q), this.__originalSetTransform(d, t, Z, F, c, Q);\n }, s.resetTransform = function() {\n U.resetTransform(), this.__originalResetTransform();\n }, s.rotate = function(d) {\n U.rotate(d), this.__originalRotate(d);\n }, s.clip = function(d) {\n U.clip(d), this.__originalClip(d);\n }, s.moveTo = function(l, d) {\n U.moveTo(l, d), this.__originalMoveTo(l, d);\n }, s.lineTo = function(l, d) {\n U.lineTo(l, d), this.__originalLineTo(l, d);\n }, s.bezierCurveTo = function(l, d, t, Z, F, c) {\n U.bezierCurveTo(l, d, t, Z, F, c), this.__originalBezierCurveTo(l, d, t, Z, F, c);\n }, s.rect = function(l, d, t, Z) {\n U.rect(l, d, t, Z), this.__originalRect(l, d, t, Z);\n }, s.closePath = function() {\n U.closePath(), this.__originalClosePath();\n }, s.beginPath = function() {\n U.beginPath(), this.__originalBeginPath();\n };\n}\nclass Fm {\n constructor(U) {\n this.canvasFactory = U, this.cache = /* @__PURE__ */ Object.create(null);\n }\n getCanvas(U, l, d) {\n let t;\n return this.cache[U] !== void 0 ? (t = this.cache[U], this.canvasFactory.reset(t, l, d)) : (t = this.canvasFactory.create(l, d), this.cache[U] = t), t;\n }\n delete(U) {\n delete this.cache[U];\n }\n clear() {\n for (const U in this.cache) {\n const l = this.cache[U];\n this.canvasFactory.destroy(l), delete this.cache[U];\n }\n }\n}\nfunction IQ(s, U, l, d, t, Z, F, c, Q, a) {\n const [V, W, i, R, N, b] = pl(s);\n if (W === 0 && i === 0) {\n const G = F * V + N, T = Math.round(G), u = c * R + b, X = Math.round(u), Y = (F + Q) * V + N, o = Math.abs(Math.round(Y) - T) || 1, y = (c + a) * R + b, S = Math.abs(Math.round(y) - X) || 1;\n return s.setTransform(Math.sign(V), 0, 0, Math.sign(R), T, X), s.drawImage(U, l, d, t, Z, 0, 0, o, S), s.setTransform(V, W, i, R, N, b), [o, S];\n }\n if (V === 0 && R === 0) {\n const G = c * i + N, T = Math.round(G), u = F * W + b, X = Math.round(u), Y = (c + a) * i + N, o = Math.abs(Math.round(Y) - T) || 1, y = (F + Q) * W + b, S = Math.abs(Math.round(y) - X) || 1;\n return s.setTransform(0, Math.sign(W), Math.sign(i), 0, T, X), s.drawImage(U, l, d, t, Z, 0, 0, S, o), s.setTransform(V, W, i, R, N, b), [S, o];\n }\n s.drawImage(U, l, d, t, Z, F, c, Q, a);\n const J = Math.hypot(V, W), M = Math.hypot(i, R);\n return [J * Q, M * a];\n}\nfunction cm(s) {\n const {\n width: U,\n height: l\n } = s;\n if (U > NR || l > NR)\n return null;\n const d = 1e3, t = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]), Z = U + 1;\n let F = new Uint8Array(Z * (l + 1)), c, Q, a;\n const V = U + 7 & -8;\n let W = new Uint8Array(V * l), i = 0;\n for (const M of s.data) {\n let G = 128;\n for (; G > 0; )\n W[i++] = M & G ? 0 : 255, G >>= 1;\n }\n let R = 0;\n for (i = 0, W[i] !== 0 && (F[0] = 1, ++R), Q = 1; Q < U; Q++)\n W[i] !== W[i + 1] && (F[Q] = W[i] ? 2 : 1, ++R), i++;\n for (W[i] !== 0 && (F[Q] = 2, ++R), c = 1; c < l; c++) {\n i = c * V, a = c * Z, W[i - V] !== W[i] && (F[a] = W[i] ? 1 : 8, ++R);\n let M = (W[i] ? 4 : 0) + (W[i - V] ? 8 : 0);\n for (Q = 1; Q < U; Q++)\n M = (M >> 2) + (W[i + 1] ? 4 : 0) + (W[i - V + 1] ? 8 : 0), t[M] && (F[a + Q] = t[M], ++R), i++;\n if (W[i - V] !== W[i] && (F[a + Q] = W[i] ? 2 : 4, ++R), R > d)\n return null;\n }\n for (i = V * (l - 1), a = c * Z, W[i] !== 0 && (F[a] = 8, ++R), Q = 1; Q < U; Q++)\n W[i] !== W[i + 1] && (F[a + Q] = W[i] ? 4 : 8, ++R), i++;\n if (W[i] !== 0 && (F[a + Q] = 4, ++R), R > d)\n return null;\n const N = new Int32Array([0, Z, -1, 0, -Z, 0, 0, 0, 1]), b = new Path2D();\n for (c = 0; R && c <= l; c++) {\n let M = c * Z;\n const G = M + U;\n for (; M < G && !F[M]; )\n M++;\n if (M === G)\n continue;\n b.moveTo(M % Z, c);\n const T = M;\n let u = F[M];\n do {\n const X = N[u];\n do\n M += X;\n while (!F[M]);\n const Y = F[M];\n Y !== 5 && Y !== 10 ? (u = Y, F[M] = 0) : (u = Y & 51 * u >> 4, F[M] &= u >> 2 | u << 2), b.lineTo(M % Z, M / Z | 0), F[M] || --R;\n } while (T !== M);\n --c;\n }\n return W = null, F = null, function(M) {\n M.save(), M.scale(1 / U, -1 / l), M.translate(0, -l), M.fill(b), M.beginPath(), M.restore();\n };\n}\nclass hR {\n constructor(U, l) {\n this.alphaIsShape = !1, this.fontSize = 0, this.fontSizeScale = 1, this.textMatrix = iN, this.textMatrixScale = 1, this.fontMatrix = wV, this.leading = 0, this.x = 0, this.y = 0, this.lineX = 0, this.lineY = 0, this.charSpacing = 0, this.wordSpacing = 0, this.textHScale = 1, this.textRenderingMode = WU.FILL, this.textRise = 0, this.fillColor = \"#000000\", this.strokeColor = \"#000000\", this.patternFill = !1, this.fillAlpha = 1, this.strokeAlpha = 1, this.lineWidth = 1, this.activeSMask = null, this.transferMaps = \"none\", this.startNewPathAndClipBox([0, 0, U, l]);\n }\n clone() {\n const U = Object.create(this);\n return U.clipBox = this.clipBox.slice(), U;\n }\n setCurrentPoint(U, l) {\n this.x = U, this.y = l;\n }\n updatePathMinMax(U, l, d) {\n [l, d] = H.applyTransform([l, d], U), this.minX = Math.min(this.minX, l), this.minY = Math.min(this.minY, d), this.maxX = Math.max(this.maxX, l), this.maxY = Math.max(this.maxY, d);\n }\n updateRectMinMax(U, l) {\n const d = H.applyTransform(l, U), t = H.applyTransform(l.slice(2), U), Z = H.applyTransform([l[0], l[3]], U), F = H.applyTransform([l[2], l[1]], U);\n this.minX = Math.min(this.minX, d[0], t[0], Z[0], F[0]), this.minY = Math.min(this.minY, d[1], t[1], Z[1], F[1]), this.maxX = Math.max(this.maxX, d[0], t[0], Z[0], F[0]), this.maxY = Math.max(this.maxY, d[1], t[1], Z[1], F[1]);\n }\n updateScalingPathMinMax(U, l) {\n H.scaleMinMax(U, l), this.minX = Math.min(this.minX, l[0]), this.minY = Math.min(this.minY, l[1]), this.maxX = Math.max(this.maxX, l[2]), this.maxY = Math.max(this.maxY, l[3]);\n }\n updateCurvePathMinMax(U, l, d, t, Z, F, c, Q, a, V) {\n const W = H.bezierBoundingBox(l, d, t, Z, F, c, Q, a, V);\n V || this.updateRectMinMax(U, W);\n }\n getPathBoundingBox(U = TU.FILL, l = null) {\n const d = [this.minX, this.minY, this.maxX, this.maxY];\n if (U === TU.STROKE) {\n l || Ol(\"Stroke bounding box must include transform.\");\n const t = H.singularValueDecompose2dScale(l), Z = t[0] * this.lineWidth / 2, F = t[1] * this.lineWidth / 2;\n d[0] -= Z, d[1] -= F, d[2] += Z, d[3] += F;\n }\n return d;\n }\n updateClipFromPath() {\n const U = H.intersect(this.clipBox, this.getPathBoundingBox());\n this.startNewPathAndClipBox(U || [0, 0, 0, 0]);\n }\n isEmptyClip() {\n return this.minX === 1 / 0;\n }\n startNewPathAndClipBox(U) {\n this.clipBox = U, this.minX = 1 / 0, this.minY = 1 / 0, this.maxX = 0, this.maxY = 0;\n }\n getClippedPathBoundingBox(U = TU.FILL, l = null) {\n return H.intersect(this.clipBox, this.getPathBoundingBox(U, l));\n }\n}\nfunction eR(s, U) {\n if (typeof ImageData < \"u\" && U instanceof ImageData) {\n s.putImageData(U, 0, 0);\n return;\n }\n const l = U.height, d = U.width, t = l % zU, Z = (l - t) / zU, F = t === 0 ? Z : Z + 1, c = s.createImageData(d, zU);\n let Q = 0, a;\n const V = U.data, W = c.data;\n let i, R, N, b;\n if (U.kind === PQ.GRAYSCALE_1BPP) {\n const J = V.byteLength, M = new Uint32Array(W.buffer, 0, W.byteLength >> 2), G = M.length, T = d + 7 >> 3, u = 4294967295, X = DU.isLittleEndian ? 4278190080 : 255;\n for (i = 0; i < F; i++) {\n for (N = i < Z ? zU : t, a = 0, R = 0; R < N; R++) {\n const Y = J - Q;\n let o = 0;\n const y = Y > T ? d : Y * 8 - 7, S = y & -8;\n let p = 0, L = 0;\n for (; o < S; o += 8)\n L = V[Q++], M[a++] = L & 128 ? u : X, M[a++] = L & 64 ? u : X, M[a++] = L & 32 ? u : X, M[a++] = L & 16 ? u : X, M[a++] = L & 8 ? u : X, M[a++] = L & 4 ? u : X, M[a++] = L & 2 ? u : X, M[a++] = L & 1 ? u : X;\n for (; o < y; o++)\n p === 0 && (L = V[Q++], p = 128), M[a++] = L & p ? u : X, p >>= 1;\n }\n for (; a < G; )\n M[a++] = 0;\n s.putImageData(c, 0, i * zU);\n }\n } else if (U.kind === PQ.RGBA_32BPP) {\n for (R = 0, b = d * zU * 4, i = 0; i < Z; i++)\n W.set(V.subarray(Q, Q + b)), Q += b, s.putImageData(c, 0, R), R += zU;\n i < F && (b = d * t * 4, W.set(V.subarray(Q, Q + b)), s.putImageData(c, 0, R));\n } else if (U.kind === PQ.RGB_24BPP)\n for (N = zU, b = d * N, i = 0; i < F; i++) {\n for (i >= Z && (N = t, b = d * N), a = 0, R = b; R--; )\n W[a++] = V[Q++], W[a++] = V[Q++], W[a++] = V[Q++], W[a++] = 255;\n s.putImageData(c, 0, i * zU);\n }\n else\n throw new Error(`bad image kind: ${U.kind}`);\n}\nfunction bR(s, U) {\n if (U.bitmap) {\n s.drawImage(U.bitmap, 0, 0);\n return;\n }\n const l = U.height, d = U.width, t = l % zU, Z = (l - t) / zU, F = t === 0 ? Z : Z + 1, c = s.createImageData(d, zU);\n let Q = 0;\n const a = U.data, V = c.data;\n for (let W = 0; W < F; W++) {\n const i = W < Z ? zU : t;\n ({\n srcPos: Q\n } = dm({\n src: a,\n srcPos: Q,\n dest: V,\n width: d,\n height: i,\n nonBlackColor: 0\n })), s.putImageData(c, 0, W * zU);\n }\n}\nfunction dn(s, U) {\n const l = [\"strokeStyle\", \"fillStyle\", \"fillRule\", \"globalAlpha\", \"lineWidth\", \"lineCap\", \"lineJoin\", \"miterLimit\", \"globalCompositeOperation\", \"font\", \"filter\"];\n for (const d of l)\n s[d] !== void 0 && (U[d] = s[d]);\n s.setLineDash !== void 0 && (U.setLineDash(s.getLineDash()), U.lineDashOffset = s.lineDashOffset);\n}\nfunction DQ(s) {\n if (s.strokeStyle = s.fillStyle = \"#000000\", s.fillRule = \"nonzero\", s.globalAlpha = 1, s.lineWidth = 1, s.lineCap = \"butt\", s.lineJoin = \"miter\", s.miterLimit = 10, s.globalCompositeOperation = \"source-over\", s.font = \"10px sans-serif\", s.setLineDash !== void 0 && (s.setLineDash([]), s.lineDashOffset = 0), !mU) {\n const {\n filter: U\n } = s;\n U !== \"none\" && U !== \"\" && (s.filter = \"none\");\n }\n}\nfunction mR(s, U) {\n if (U)\n return !0;\n const l = H.singularValueDecompose2dScale(s);\n l[0] = Math.fround(l[0]), l[1] = Math.fround(l[1]);\n const d = Math.fround((globalThis.devicePixelRatio || 1) * Pc.PDF_TO_CSS_UNITS);\n return l[0] <= d && l[1] <= d;\n}\nconst nm = [\"butt\", \"round\", \"square\"], sm = [\"miter\", \"round\", \"bevel\"], Qm = {}, MR = {};\nvar jZ, hW, eW;\nconst $i = class $i {\n constructor(U, l, d, t, Z, {\n optionalContentConfig: F,\n markedContentStack: c = null\n }, Q, a) {\n m(this, jZ);\n this.ctx = U, this.current = new hR(this.ctx.canvas.width, this.ctx.canvas.height), this.stateStack = [], this.pendingClip = null, this.pendingEOFill = !1, this.res = null, this.xobjs = null, this.commonObjs = l, this.objs = d, this.canvasFactory = t, this.filterFactory = Z, this.groupStack = [], this.processingType3 = null, this.baseTransform = null, this.baseTransformStack = [], this.groupLevel = 0, this.smaskStack = [], this.smaskCounter = 0, this.tempSMask = null, this.suspendedCtx = null, this.contentVisible = !0, this.markedContentStack = c || [], this.optionalContentConfig = F, this.cachedCanvases = new Fm(this.canvasFactory), this.cachedPatterns = /* @__PURE__ */ new Map(), this.annotationCanvasMap = Q, this.viewportScale = 1, this.outputScaleX = 1, this.outputScaleY = 1, this.pageColors = a, this._cachedScaleForStroking = [-1, 0], this._cachedGetSinglePixelWidth = null, this._cachedBitmapsMap = /* @__PURE__ */ new Map();\n }\n getObject(U, l = null) {\n return typeof U == \"string\" ? U.startsWith(\"g_\") ? this.commonObjs.get(U) : this.objs.get(U) : l;\n }\n beginDrawing({\n transform: U,\n viewport: l,\n transparency: d = !1,\n background: t = null\n }) {\n const Z = this.ctx.canvas.width, F = this.ctx.canvas.height, c = this.ctx.fillStyle;\n if (this.ctx.fillStyle = t || \"#ffffff\", this.ctx.fillRect(0, 0, Z, F), this.ctx.fillStyle = c, d) {\n const Q = this.cachedCanvases.getCanvas(\"transparent\", Z, F);\n this.compositeCtx = this.ctx, this.transparentCanvas = Q.canvas, this.ctx = Q.context, this.ctx.save(), this.ctx.transform(...pl(this.compositeCtx));\n }\n this.ctx.save(), DQ(this.ctx), U && (this.ctx.transform(...U), this.outputScaleX = U[0], this.outputScaleY = U[0]), this.ctx.transform(...l.transform), this.viewportScale = l.scale, this.baseTransform = pl(this.ctx);\n }\n executeOperatorList(U, l, d, t) {\n const Z = U.argsArray, F = U.fnArray;\n let c = l || 0;\n const Q = Z.length;\n if (Q === c)\n return c;\n const a = Q - c > RR && typeof d == \"function\", V = a ? Date.now() + tm : 0;\n let W = 0;\n const i = this.commonObjs, R = this.objs;\n let N;\n for (; ; ) {\n if (t !== void 0 && c === t.nextBreakPoint)\n return t.breakIt(c, d), c;\n if (N = F[c], N !== Qd.dependency)\n this[N].apply(this, Z[c]);\n else\n for (const b of Z[c]) {\n const J = b.startsWith(\"g_\") ? i : R;\n if (!J.has(b))\n return J.get(b, d), c;\n }\n if (c++, c === Q)\n return c;\n if (a && ++W > RR) {\n if (Date.now() > V)\n return d(), c;\n W = 0;\n }\n }\n }\n endDrawing() {\n h(this, jZ, hW).call(this), this.cachedCanvases.clear(), this.cachedPatterns.clear();\n for (const U of this._cachedBitmapsMap.values()) {\n for (const l of U.values())\n typeof HTMLCanvasElement < \"u\" && l instanceof HTMLCanvasElement && (l.width = l.height = 0);\n U.clear();\n }\n this._cachedBitmapsMap.clear(), h(this, jZ, eW).call(this);\n }\n _scaleImage(U, l) {\n const d = U.width, t = U.height;\n let Z = Math.max(Math.hypot(l[0], l[1]), 1), F = Math.max(Math.hypot(l[2], l[3]), 1), c = d, Q = t, a = \"prescale1\", V, W;\n for (; Z > 2 && c > 1 || F > 2 && Q > 1; ) {\n let i = c, R = Q;\n Z > 2 && c > 1 && (i = c >= 16384 ? Math.floor(c / 2) - 1 || 1 : Math.ceil(c / 2), Z /= c / i), F > 2 && Q > 1 && (R = Q >= 16384 ? Math.floor(Q / 2) - 1 || 1 : Math.ceil(Q) / 2, F /= Q / R), V = this.cachedCanvases.getCanvas(a, i, R), W = V.context, W.clearRect(0, 0, i, R), W.drawImage(U, 0, 0, c, Q, 0, 0, i, R), U = V.canvas, c = i, Q = R, a = a === \"prescale1\" ? \"prescale2\" : \"prescale1\";\n }\n return {\n img: U,\n paintWidth: c,\n paintHeight: Q\n };\n }\n _createMaskCanvas(U) {\n const l = this.ctx, {\n width: d,\n height: t\n } = U, Z = this.current.fillColor, F = this.current.patternFill, c = pl(l);\n let Q, a, V, W;\n if ((U.bitmap || U.data) && U.count > 1) {\n const y = U.bitmap || U.data.buffer;\n a = JSON.stringify(F ? c : [c.slice(0, 4), Z]), Q = this._cachedBitmapsMap.get(y), Q || (Q = /* @__PURE__ */ new Map(), this._cachedBitmapsMap.set(y, Q));\n const S = Q.get(a);\n if (S && !F) {\n const p = Math.round(Math.min(c[0], c[2]) + c[4]), L = Math.round(Math.min(c[1], c[3]) + c[5]);\n return {\n canvas: S,\n offsetX: p,\n offsetY: L\n };\n }\n V = S;\n }\n V || (W = this.cachedCanvases.getCanvas(\"maskCanvas\", d, t), bR(W.context, U));\n let i = H.transform(c, [1 / d, 0, 0, -1 / t, 0, 0]);\n i = H.transform(i, [1, 0, 0, 1, 0, -t]);\n const [R, N, b, J] = H.getAxialAlignedBoundingBox([0, 0, d, t], i), M = Math.round(b - R) || 1, G = Math.round(J - N) || 1, T = this.cachedCanvases.getCanvas(\"fillCanvas\", M, G), u = T.context, X = R, Y = N;\n u.translate(-X, -Y), u.transform(...i), V || (V = this._scaleImage(W.canvas, tt(u)), V = V.img, Q && F && Q.set(a, V)), u.imageSmoothingEnabled = mR(pl(u), U.interpolate), IQ(u, V, 0, 0, V.width, V.height, 0, 0, d, t), u.globalCompositeOperation = \"source-in\";\n const o = H.transform(tt(u), [1, 0, 0, 1, -X, -Y]);\n return u.fillStyle = F ? Z.getPattern(l, this, o, TU.FILL) : Z, u.fillRect(0, 0, d, t), Q && !F && (this.cachedCanvases.delete(\"fillCanvas\"), Q.set(a, T.canvas)), {\n canvas: T.canvas,\n offsetX: Math.round(X),\n offsetY: Math.round(Y)\n };\n }\n setLineWidth(U) {\n U !== this.current.lineWidth && (this._cachedScaleForStroking[0] = -1), this.current.lineWidth = U, this.ctx.lineWidth = U;\n }\n setLineCap(U) {\n this.ctx.lineCap = nm[U];\n }\n setLineJoin(U) {\n this.ctx.lineJoin = sm[U];\n }\n setMiterLimit(U) {\n this.ctx.miterLimit = U;\n }\n setDash(U, l) {\n const d = this.ctx;\n d.setLineDash !== void 0 && (d.setLineDash(U), d.lineDashOffset = l);\n }\n setRenderingIntent(U) {\n }\n setFlatness(U) {\n }\n setGState(U) {\n for (const [l, d] of U)\n switch (l) {\n case \"LW\":\n this.setLineWidth(d);\n break;\n case \"LC\":\n this.setLineCap(d);\n break;\n case \"LJ\":\n this.setLineJoin(d);\n break;\n case \"ML\":\n this.setMiterLimit(d);\n break;\n case \"D\":\n this.setDash(d[0], d[1]);\n break;\n case \"RI\":\n this.setRenderingIntent(d);\n break;\n case \"FL\":\n this.setFlatness(d);\n break;\n case \"Font\":\n this.setFont(d[0], d[1]);\n break;\n case \"CA\":\n this.current.strokeAlpha = d;\n break;\n case \"ca\":\n this.current.fillAlpha = d, this.ctx.globalAlpha = d;\n break;\n case \"BM\":\n this.ctx.globalCompositeOperation = d;\n break;\n case \"SMask\":\n this.current.activeSMask = d ? this.tempSMask : null, this.tempSMask = null, this.checkSMaskState();\n break;\n case \"TR\":\n this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(d);\n break;\n }\n }\n get inSMaskMode() {\n return !!this.suspendedCtx;\n }\n checkSMaskState() {\n const U = this.inSMaskMode;\n this.current.activeSMask && !U ? this.beginSMaskMode() : !this.current.activeSMask && U && this.endSMaskMode();\n }\n beginSMaskMode() {\n if (this.inSMaskMode)\n throw new Error(\"beginSMaskMode called while already in smask mode\");\n const U = this.ctx.canvas.width, l = this.ctx.canvas.height, d = \"smaskGroupAt\" + this.groupLevel, t = this.cachedCanvases.getCanvas(d, U, l);\n this.suspendedCtx = this.ctx, this.ctx = t.context;\n const Z = this.ctx;\n Z.setTransform(...pl(this.suspendedCtx)), dn(this.suspendedCtx, Z), Zm(Z, this.suspendedCtx), this.setGState([[\"BM\", \"source-over\"], [\"ca\", 1], [\"CA\", 1]]);\n }\n endSMaskMode() {\n if (!this.inSMaskMode)\n throw new Error(\"endSMaskMode called while not in smask mode\");\n this.ctx._removeMirroring(), dn(this.ctx, this.suspendedCtx), this.ctx = this.suspendedCtx, this.suspendedCtx = null;\n }\n compose(U) {\n if (!this.current.activeSMask)\n return;\n U ? (U[0] = Math.floor(U[0]), U[1] = Math.floor(U[1]), U[2] = Math.ceil(U[2]), U[3] = Math.ceil(U[3])) : U = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];\n const l = this.current.activeSMask, d = this.suspendedCtx;\n this.composeSMask(d, l, this.ctx, U), this.ctx.save(), this.ctx.setTransform(1, 0, 0, 1, 0, 0), this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height), this.ctx.restore();\n }\n composeSMask(U, l, d, t) {\n const Z = t[0], F = t[1], c = t[2] - Z, Q = t[3] - F;\n c === 0 || Q === 0 || (this.genericComposeSMask(l.context, d, c, Q, l.subtype, l.backdrop, l.transferMap, Z, F, l.offsetX, l.offsetY), U.save(), U.globalAlpha = 1, U.globalCompositeOperation = \"source-over\", U.setTransform(1, 0, 0, 1, 0, 0), U.drawImage(d.canvas, 0, 0), U.restore());\n }\n genericComposeSMask(U, l, d, t, Z, F, c, Q, a, V, W) {\n let i = U.canvas, R = Q - V, N = a - W;\n if (F) {\n if (R < 0 || N < 0 || R + d > i.width || N + t > i.height) {\n const J = this.cachedCanvases.getCanvas(\"maskExtension\", d, t), M = J.context;\n M.drawImage(i, -R, -N), F.some((G) => G !== 0) && (M.globalCompositeOperation = \"destination-atop\", M.fillStyle = H.makeHexColor(...F), M.fillRect(0, 0, d, t), M.globalCompositeOperation = \"source-over\"), i = J.canvas, R = N = 0;\n } else if (F.some((J) => J !== 0)) {\n U.save(), U.globalAlpha = 1, U.setTransform(1, 0, 0, 1, 0, 0);\n const J = new Path2D();\n J.rect(R, N, d, t), U.clip(J), U.globalCompositeOperation = \"destination-atop\", U.fillStyle = H.makeHexColor(...F), U.fillRect(R, N, d, t), U.restore();\n }\n }\n l.save(), l.globalAlpha = 1, l.setTransform(1, 0, 0, 1, 0, 0), Z === \"Alpha\" && c ? l.filter = this.filterFactory.addAlphaFilter(c) : Z === \"Luminosity\" && (l.filter = this.filterFactory.addLuminosityFilter(c));\n const b = new Path2D();\n b.rect(Q, a, d, t), l.clip(b), l.globalCompositeOperation = \"destination-in\", l.drawImage(i, R, N, d, t, Q, a, d, t), l.restore();\n }\n save() {\n this.inSMaskMode ? (dn(this.ctx, this.suspendedCtx), this.suspendedCtx.save()) : this.ctx.save();\n const U = this.current;\n this.stateStack.push(U), this.current = U.clone();\n }\n restore() {\n this.stateStack.length === 0 && this.inSMaskMode && this.endSMaskMode(), this.stateStack.length !== 0 && (this.current = this.stateStack.pop(), this.inSMaskMode ? (this.suspendedCtx.restore(), dn(this.suspendedCtx, this.ctx)) : this.ctx.restore(), this.checkSMaskState(), this.pendingClip = null, this._cachedScaleForStroking[0] = -1, this._cachedGetSinglePixelWidth = null);\n }\n transform(U, l, d, t, Z, F) {\n this.ctx.transform(U, l, d, t, Z, F), this._cachedScaleForStroking[0] = -1, this._cachedGetSinglePixelWidth = null;\n }\n constructPath(U, l, d) {\n const t = this.ctx, Z = this.current;\n let F = Z.x, c = Z.y, Q, a;\n const V = pl(t), W = V[0] === 0 && V[3] === 0 || V[1] === 0 && V[2] === 0, i = W ? d.slice(0) : null;\n for (let R = 0, N = 0, b = U.length; R < b; R++)\n switch (U[R] | 0) {\n case Qd.rectangle:\n F = l[N++], c = l[N++];\n const J = l[N++], M = l[N++], G = F + J, T = c + M;\n t.moveTo(F, c), J === 0 || M === 0 ? t.lineTo(G, T) : (t.lineTo(G, c), t.lineTo(G, T), t.lineTo(F, T)), W || Z.updateRectMinMax(V, [F, c, G, T]), t.closePath();\n break;\n case Qd.moveTo:\n F = l[N++], c = l[N++], t.moveTo(F, c), W || Z.updatePathMinMax(V, F, c);\n break;\n case Qd.lineTo:\n F = l[N++], c = l[N++], t.lineTo(F, c), W || Z.updatePathMinMax(V, F, c);\n break;\n case Qd.curveTo:\n Q = F, a = c, F = l[N + 4], c = l[N + 5], t.bezierCurveTo(l[N], l[N + 1], l[N + 2], l[N + 3], F, c), Z.updateCurvePathMinMax(V, Q, a, l[N], l[N + 1], l[N + 2], l[N + 3], F, c, i), N += 6;\n break;\n case Qd.curveTo2:\n Q = F, a = c, t.bezierCurveTo(F, c, l[N], l[N + 1], l[N + 2], l[N + 3]), Z.updateCurvePathMinMax(V, Q, a, F, c, l[N], l[N + 1], l[N + 2], l[N + 3], i), F = l[N + 2], c = l[N + 3], N += 4;\n break;\n case Qd.curveTo3:\n Q = F, a = c, F = l[N + 2], c = l[N + 3], t.bezierCurveTo(l[N], l[N + 1], F, c, F, c), Z.updateCurvePathMinMax(V, Q, a, l[N], l[N + 1], F, c, F, c, i), N += 4;\n break;\n case Qd.closePath:\n t.closePath();\n break;\n }\n W && Z.updateScalingPathMinMax(V, i), Z.setCurrentPoint(F, c);\n }\n closePath() {\n this.ctx.closePath();\n }\n stroke(U = !0) {\n const l = this.ctx, d = this.current.strokeColor;\n l.globalAlpha = this.current.strokeAlpha, this.contentVisible && (typeof d == \"object\" && (d != null && d.getPattern) ? (l.save(), l.strokeStyle = d.getPattern(l, this, tt(l), TU.STROKE), this.rescaleAndStroke(!1), l.restore()) : this.rescaleAndStroke(!0)), U && this.consumePath(this.current.getClippedPathBoundingBox()), l.globalAlpha = this.current.fillAlpha;\n }\n closeStroke() {\n this.closePath(), this.stroke();\n }\n fill(U = !0) {\n const l = this.ctx, d = this.current.fillColor, t = this.current.patternFill;\n let Z = !1;\n t && (l.save(), l.fillStyle = d.getPattern(l, this, tt(l), TU.FILL), Z = !0);\n const F = this.current.getClippedPathBoundingBox();\n this.contentVisible && F !== null && (this.pendingEOFill ? (l.fill(\"evenodd\"), this.pendingEOFill = !1) : l.fill()), Z && l.restore(), U && this.consumePath(F);\n }\n eoFill() {\n this.pendingEOFill = !0, this.fill();\n }\n fillStroke() {\n this.fill(!1), this.stroke(!1), this.consumePath();\n }\n eoFillStroke() {\n this.pendingEOFill = !0, this.fillStroke();\n }\n closeFillStroke() {\n this.closePath(), this.fillStroke();\n }\n closeEOFillStroke() {\n this.pendingEOFill = !0, this.closePath(), this.fillStroke();\n }\n endPath() {\n this.consumePath();\n }\n clip() {\n this.pendingClip = Qm;\n }\n eoClip() {\n this.pendingClip = MR;\n }\n beginText() {\n this.current.textMatrix = iN, this.current.textMatrixScale = 1, this.current.x = this.current.lineX = 0, this.current.y = this.current.lineY = 0;\n }\n endText() {\n const U = this.pendingTextPaths, l = this.ctx;\n if (U === void 0) {\n l.beginPath();\n return;\n }\n l.save(), l.beginPath();\n for (const d of U)\n l.setTransform(...d.transform), l.translate(d.x, d.y), d.addToPath(l, d.fontSize);\n l.restore(), l.clip(), l.beginPath(), delete this.pendingTextPaths;\n }\n setCharSpacing(U) {\n this.current.charSpacing = U;\n }\n setWordSpacing(U) {\n this.current.wordSpacing = U;\n }\n setHScale(U) {\n this.current.textHScale = U / 100;\n }\n setLeading(U) {\n this.current.leading = -U;\n }\n setFont(U, l) {\n var V;\n const d = this.commonObjs.get(U), t = this.current;\n if (!d)\n throw new Error(`Can't find font for ${U}`);\n if (t.fontMatrix = d.fontMatrix || wV, (t.fontMatrix[0] === 0 || t.fontMatrix[3] === 0) && Zl(\"Invalid font matrix for font \" + U), l < 0 ? (l = -l, t.fontDirection = -1) : t.fontDirection = 1, this.current.font = d, this.current.fontSize = l, d.isType3Font)\n return;\n const Z = d.loadedName || \"sans-serif\", F = ((V = d.systemFontInfo) == null ? void 0 : V.css) || `\"${Z}\", ${d.fallbackName}`;\n let c = \"normal\";\n d.black ? c = \"900\" : d.bold && (c = \"bold\");\n const Q = d.italic ? \"italic\" : \"normal\";\n let a = l;\n l < WR ? a = WR : l > iR && (a = iR), this.current.fontSizeScale = l / a, this.ctx.font = `${Q} ${c} ${a}px ${F}`;\n }\n setTextRenderingMode(U) {\n this.current.textRenderingMode = U;\n }\n setTextRise(U) {\n this.current.textRise = U;\n }\n moveText(U, l) {\n this.current.x = this.current.lineX += U, this.current.y = this.current.lineY += l;\n }\n setLeadingMoveText(U, l) {\n this.setLeading(-l), this.moveText(U, l);\n }\n setTextMatrix(U, l, d, t, Z, F) {\n this.current.textMatrix = [U, l, d, t, Z, F], this.current.textMatrixScale = Math.hypot(U, l), this.current.x = this.current.lineX = 0, this.current.y = this.current.lineY = 0;\n }\n nextLine() {\n this.moveText(0, this.current.leading);\n }\n paintChar(U, l, d, t) {\n const Z = this.ctx, F = this.current, c = F.font, Q = F.textRenderingMode, a = F.fontSize / F.fontSizeScale, V = Q & WU.FILL_STROKE_MASK, W = !!(Q & WU.ADD_TO_PATH_FLAG), i = F.patternFill && !c.missingFile;\n let R;\n (c.disableFontFace || W || i) && (R = c.getPathGenerator(this.commonObjs, U)), c.disableFontFace || i ? (Z.save(), Z.translate(l, d), Z.beginPath(), R(Z, a), t && Z.setTransform(...t), (V === WU.FILL || V === WU.FILL_STROKE) && Z.fill(), (V === WU.STROKE || V === WU.FILL_STROKE) && Z.stroke(), Z.restore()) : ((V === WU.FILL || V === WU.FILL_STROKE) && Z.fillText(U, l, d), (V === WU.STROKE || V === WU.FILL_STROKE) && Z.strokeText(U, l, d)), W && (this.pendingTextPaths || (this.pendingTextPaths = [])).push({\n transform: pl(Z),\n x: l,\n y: d,\n fontSize: a,\n addToPath: R\n });\n }\n get isFontSubpixelAAEnabled() {\n const {\n context: U\n } = this.cachedCanvases.getCanvas(\"isFontSubpixelAAEnabled\", 10, 10);\n U.scale(1.5, 1), U.fillText(\"I\", 0, 10);\n const l = U.getImageData(0, 0, 10, 10).data;\n let d = !1;\n for (let t = 3; t < l.length; t += 4)\n if (l[t] > 0 && l[t] < 255) {\n d = !0;\n break;\n }\n return Ql(this, \"isFontSubpixelAAEnabled\", d);\n }\n showText(U) {\n const l = this.current, d = l.font;\n if (d.isType3Font)\n return this.showType3Text(U);\n const t = l.fontSize;\n if (t === 0)\n return;\n const Z = this.ctx, F = l.fontSizeScale, c = l.charSpacing, Q = l.wordSpacing, a = l.fontDirection, V = l.textHScale * a, W = U.length, i = d.vertical, R = i ? 1 : -1, N = d.defaultVMetrics, b = t * l.fontMatrix[0], J = l.textRenderingMode === WU.FILL && !d.disableFontFace && !l.patternFill;\n Z.save(), Z.transform(...l.textMatrix), Z.translate(l.x, l.y + l.textRise), a > 0 ? Z.scale(V, -1) : Z.scale(V, 1);\n let M;\n if (l.patternFill) {\n Z.save();\n const Y = l.fillColor.getPattern(Z, this, tt(Z), TU.FILL);\n M = pl(Z), Z.restore(), Z.fillStyle = Y;\n }\n let G = l.lineWidth;\n const T = l.textMatrixScale;\n if (T === 0 || G === 0) {\n const Y = l.textRenderingMode & WU.FILL_STROKE_MASK;\n (Y === WU.STROKE || Y === WU.FILL_STROKE) && (G = this.getSinglePixelWidth());\n } else\n G /= T;\n if (F !== 1 && (Z.scale(F, F), G /= F), Z.lineWidth = G, d.isInvalidPDFjsFont) {\n const Y = [];\n let o = 0;\n for (const y of U)\n Y.push(y.unicode), o += y.width;\n Z.fillText(Y.join(\"\"), 0, 0), l.x += o * b * V, Z.restore(), this.compose();\n return;\n }\n let u = 0, X;\n for (X = 0; X < W; ++X) {\n const Y = U[X];\n if (typeof Y == \"number\") {\n u += R * Y * t / 1e3;\n continue;\n }\n let o = !1;\n const y = (Y.isSpace ? Q : 0) + c, S = Y.fontChar, p = Y.accent;\n let L, I, D = Y.width;\n if (i) {\n const w = Y.vmetric || N, B = -(Y.vmetric ? w[1] : D * 0.5) * b, E = w[2] * b;\n D = w ? -w[0] : D, L = B / F, I = (u + E) / F;\n } else\n L = u / F, I = 0;\n if (d.remeasure && D > 0) {\n const w = Z.measureText(S).width * 1e3 / t * F;\n if (D < w && this.isFontSubpixelAAEnabled) {\n const B = D / w;\n o = !0, Z.save(), Z.scale(B, 1), L /= B;\n } else D !== w && (L += (D - w) / 2e3 * t / F);\n }\n if (this.contentVisible && (Y.isInFont || d.missingFile)) {\n if (J && !p)\n Z.fillText(S, L, I);\n else if (this.paintChar(S, L, I, M), p) {\n const w = L + t * p.offset.x / F, B = I - t * p.offset.y / F;\n this.paintChar(p.fontChar, w, B, M);\n }\n }\n const r = i ? D * b - y * a : D * b + y * a;\n u += r, o && Z.restore();\n }\n i ? l.y -= u : l.x += u * V, Z.restore(), this.compose();\n }\n showType3Text(U) {\n const l = this.ctx, d = this.current, t = d.font, Z = d.fontSize, F = d.fontDirection, c = t.vertical ? 1 : -1, Q = d.charSpacing, a = d.wordSpacing, V = d.textHScale * F, W = d.fontMatrix || wV, i = U.length, R = d.textRenderingMode === WU.INVISIBLE;\n let N, b, J, M;\n if (!(R || Z === 0)) {\n for (this._cachedScaleForStroking[0] = -1, this._cachedGetSinglePixelWidth = null, l.save(), l.transform(...d.textMatrix), l.translate(d.x, d.y), l.scale(V, F), N = 0; N < i; ++N) {\n if (b = U[N], typeof b == \"number\") {\n M = c * b * Z / 1e3, this.ctx.translate(M, 0), d.x += M * V;\n continue;\n }\n const G = (b.isSpace ? a : 0) + Q, T = t.charProcOperatorList[b.operatorListId];\n if (!T) {\n Zl(`Type3 character \"${b.operatorListId}\" is not available.`);\n continue;\n }\n this.contentVisible && (this.processingType3 = b, this.save(), l.scale(Z, Z), l.transform(...W), this.executeOperatorList(T), this.restore()), J = H.applyTransform([b.width, 0], W)[0] * Z + G, l.translate(J, 0), d.x += J * V;\n }\n l.restore(), this.processingType3 = null;\n }\n }\n setCharWidth(U, l) {\n }\n setCharWidthAndBounds(U, l, d, t, Z, F) {\n this.ctx.rect(d, t, Z - d, F - t), this.ctx.clip(), this.endPath();\n }\n getColorN_Pattern(U) {\n let l;\n if (U[0] === \"TilingPattern\") {\n const d = U[1], t = this.baseTransform || pl(this.ctx), Z = {\n createCanvasGraphics: (F) => new $i(F, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {\n optionalContentConfig: this.optionalContentConfig,\n markedContentStack: this.markedContentStack\n })\n };\n l = new NW(U, d, this.ctx, Z, t);\n } else\n l = this._getPattern(U[1], U[2]);\n return l;\n }\n setStrokeColorN() {\n this.current.strokeColor = this.getColorN_Pattern(arguments);\n }\n setFillColorN() {\n this.current.fillColor = this.getColorN_Pattern(arguments), this.current.patternFill = !0;\n }\n setStrokeRGBColor(U, l, d) {\n this.ctx.strokeStyle = this.current.strokeColor = H.makeHexColor(U, l, d);\n }\n setStrokeTransparent() {\n this.ctx.strokeStyle = this.current.strokeColor = \"transparent\";\n }\n setFillRGBColor(U, l, d) {\n this.ctx.fillStyle = this.current.fillColor = H.makeHexColor(U, l, d), this.current.patternFill = !1;\n }\n setFillTransparent() {\n this.ctx.fillStyle = this.current.fillColor = \"transparent\", this.current.patternFill = !1;\n }\n _getPattern(U, l = null) {\n let d;\n return this.cachedPatterns.has(U) ? d = this.cachedPatterns.get(U) : (d = Um(this.getObject(U)), this.cachedPatterns.set(U, d)), l && (d.matrix = l), d;\n }\n shadingFill(U) {\n if (!this.contentVisible)\n return;\n const l = this.ctx;\n this.save();\n const d = this._getPattern(U);\n l.fillStyle = d.getPattern(l, this, tt(l), TU.SHADING);\n const t = tt(l);\n if (t) {\n const {\n width: Z,\n height: F\n } = l.canvas, [c, Q, a, V] = H.getAxialAlignedBoundingBox([0, 0, Z, F], t);\n this.ctx.fillRect(c, Q, a - c, V - Q);\n } else\n this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n this.compose(this.current.getClippedPathBoundingBox()), this.restore();\n }\n beginInlineImage() {\n Ol(\"Should not call beginInlineImage\");\n }\n beginImageData() {\n Ol(\"Should not call beginImageData\");\n }\n paintFormXObjectBegin(U, l) {\n if (this.contentVisible && (this.save(), this.baseTransformStack.push(this.baseTransform), U && this.transform(...U), this.baseTransform = pl(this.ctx), l)) {\n const d = l[2] - l[0], t = l[3] - l[1];\n this.ctx.rect(l[0], l[1], d, t), this.current.updateRectMinMax(pl(this.ctx), l), this.clip(), this.endPath();\n }\n }\n paintFormXObjectEnd() {\n this.contentVisible && (this.restore(), this.baseTransform = this.baseTransformStack.pop());\n }\n beginGroup(U) {\n if (!this.contentVisible)\n return;\n this.save(), this.inSMaskMode && (this.endSMaskMode(), this.current.activeSMask = null);\n const l = this.ctx;\n U.isolated || iV(\"TODO: Support non-isolated groups.\"), U.knockout && Zl(\"Knockout groups not supported.\");\n const d = pl(l);\n if (U.matrix && l.transform(...U.matrix), !U.bbox)\n throw new Error(\"Bounding box is required.\");\n let t = H.getAxialAlignedBoundingBox(U.bbox, pl(l));\n const Z = [0, 0, l.canvas.width, l.canvas.height];\n t = H.intersect(t, Z) || [0, 0, 0, 0];\n const F = Math.floor(t[0]), c = Math.floor(t[1]), Q = Math.max(Math.ceil(t[2]) - F, 1), a = Math.max(Math.ceil(t[3]) - c, 1);\n this.current.startNewPathAndClipBox([0, 0, Q, a]);\n let V = \"groupAt\" + this.groupLevel;\n U.smask && (V += \"_smask_\" + this.smaskCounter++ % 2);\n const W = this.cachedCanvases.getCanvas(V, Q, a), i = W.context;\n i.translate(-F, -c), i.transform(...d), U.smask ? this.smaskStack.push({\n canvas: W.canvas,\n context: i,\n offsetX: F,\n offsetY: c,\n subtype: U.smask.subtype,\n backdrop: U.smask.backdrop,\n transferMap: U.smask.transferMap || null,\n startTransformInverse: null\n }) : (l.setTransform(1, 0, 0, 1, 0, 0), l.translate(F, c), l.save()), dn(l, i), this.ctx = i, this.setGState([[\"BM\", \"source-over\"], [\"ca\", 1], [\"CA\", 1]]), this.groupStack.push(l), this.groupLevel++;\n }\n endGroup(U) {\n if (!this.contentVisible)\n return;\n this.groupLevel--;\n const l = this.ctx, d = this.groupStack.pop();\n if (this.ctx = d, this.ctx.imageSmoothingEnabled = !1, U.smask)\n this.tempSMask = this.smaskStack.pop(), this.restore();\n else {\n this.ctx.restore();\n const t = pl(this.ctx);\n this.restore(), this.ctx.save(), this.ctx.setTransform(...t);\n const Z = H.getAxialAlignedBoundingBox([0, 0, l.canvas.width, l.canvas.height], t);\n this.ctx.drawImage(l.canvas, 0, 0), this.ctx.restore(), this.compose(Z);\n }\n }\n beginAnnotation(U, l, d, t, Z) {\n if (h(this, jZ, hW).call(this), DQ(this.ctx), this.ctx.save(), this.save(), this.baseTransform && this.ctx.setTransform(...this.baseTransform), l) {\n const F = l[2] - l[0], c = l[3] - l[1];\n if (Z && this.annotationCanvasMap) {\n d = d.slice(), d[4] -= l[0], d[5] -= l[1], l = l.slice(), l[0] = l[1] = 0, l[2] = F, l[3] = c;\n const [Q, a] = H.singularValueDecompose2dScale(pl(this.ctx)), {\n viewportScale: V\n } = this, W = Math.ceil(F * this.outputScaleX * V), i = Math.ceil(c * this.outputScaleY * V);\n this.annotationCanvas = this.canvasFactory.create(W, i);\n const {\n canvas: R,\n context: N\n } = this.annotationCanvas;\n this.annotationCanvasMap.set(U, R), this.annotationCanvas.savedCtx = this.ctx, this.ctx = N, this.ctx.save(), this.ctx.setTransform(Q, 0, 0, -a, 0, c * a), DQ(this.ctx);\n } else\n DQ(this.ctx), this.endPath(), this.ctx.rect(l[0], l[1], F, c), this.ctx.clip(), this.ctx.beginPath();\n }\n this.current = new hR(this.ctx.canvas.width, this.ctx.canvas.height), this.transform(...d), this.transform(...t);\n }\n endAnnotation() {\n this.annotationCanvas && (this.ctx.restore(), h(this, jZ, eW).call(this), this.ctx = this.annotationCanvas.savedCtx, delete this.annotationCanvas.savedCtx, delete this.annotationCanvas);\n }\n paintImageMaskXObject(U) {\n if (!this.contentVisible)\n return;\n const l = U.count;\n U = this.getObject(U.data, U), U.count = l;\n const d = this.ctx, t = this.processingType3;\n if (t && (t.compiled === void 0 && (t.compiled = cm(U)), t.compiled)) {\n t.compiled(d);\n return;\n }\n const Z = this._createMaskCanvas(U), F = Z.canvas;\n d.save(), d.setTransform(1, 0, 0, 1, 0, 0), d.drawImage(F, Z.offsetX, Z.offsetY), d.restore(), this.compose();\n }\n paintImageMaskXObjectRepeat(U, l, d = 0, t = 0, Z, F) {\n if (!this.contentVisible)\n return;\n U = this.getObject(U.data, U);\n const c = this.ctx;\n c.save();\n const Q = pl(c);\n c.transform(l, d, t, Z, 0, 0);\n const a = this._createMaskCanvas(U);\n c.setTransform(1, 0, 0, 1, a.offsetX - Q[4], a.offsetY - Q[5]);\n for (let V = 0, W = F.length; V < W; V += 2) {\n const i = H.transform(Q, [l, d, t, Z, F[V], F[V + 1]]), [R, N] = H.applyTransform([0, 0], i);\n c.drawImage(a.canvas, R, N);\n }\n c.restore(), this.compose();\n }\n paintImageMaskXObjectGroup(U) {\n if (!this.contentVisible)\n return;\n const l = this.ctx, d = this.current.fillColor, t = this.current.patternFill;\n for (const Z of U) {\n const {\n data: F,\n width: c,\n height: Q,\n transform: a\n } = Z, V = this.cachedCanvases.getCanvas(\"maskCanvas\", c, Q), W = V.context;\n W.save();\n const i = this.getObject(F, Z);\n bR(W, i), W.globalCompositeOperation = \"source-in\", W.fillStyle = t ? d.getPattern(W, this, tt(l), TU.FILL) : d, W.fillRect(0, 0, c, Q), W.restore(), l.save(), l.transform(...a), l.scale(1, -1), IQ(l, V.canvas, 0, 0, c, Q, 0, -1, 1, 1), l.restore();\n }\n this.compose();\n }\n paintImageXObject(U) {\n if (!this.contentVisible)\n return;\n const l = this.getObject(U);\n if (!l) {\n Zl(\"Dependent image isn't ready yet\");\n return;\n }\n this.paintInlineImageXObject(l);\n }\n paintImageXObjectRepeat(U, l, d, t) {\n if (!this.contentVisible)\n return;\n const Z = this.getObject(U);\n if (!Z) {\n Zl(\"Dependent image isn't ready yet\");\n return;\n }\n const F = Z.width, c = Z.height, Q = [];\n for (let a = 0, V = t.length; a < V; a += 2)\n Q.push({\n transform: [l, 0, 0, d, t[a], t[a + 1]],\n x: 0,\n y: 0,\n w: F,\n h: c\n });\n this.paintInlineImageXObjectGroup(Z, Q);\n }\n applyTransferMapsToCanvas(U) {\n return this.current.transferMaps !== \"none\" && (U.filter = this.current.transferMaps, U.drawImage(U.canvas, 0, 0), U.filter = \"none\"), U.canvas;\n }\n applyTransferMapsToBitmap(U) {\n if (this.current.transferMaps === \"none\")\n return U.bitmap;\n const {\n bitmap: l,\n width: d,\n height: t\n } = U, Z = this.cachedCanvases.getCanvas(\"inlineImage\", d, t), F = Z.context;\n return F.filter = this.current.transferMaps, F.drawImage(l, 0, 0), F.filter = \"none\", Z.canvas;\n }\n paintInlineImageXObject(U) {\n if (!this.contentVisible)\n return;\n const l = U.width, d = U.height, t = this.ctx;\n if (this.save(), !mU) {\n const {\n filter: c\n } = t;\n c !== \"none\" && c !== \"\" && (t.filter = \"none\");\n }\n t.scale(1 / l, -1 / d);\n let Z;\n if (U.bitmap)\n Z = this.applyTransferMapsToBitmap(U);\n else if (typeof HTMLElement == \"function\" && U instanceof HTMLElement || !U.data)\n Z = U;\n else {\n const Q = this.cachedCanvases.getCanvas(\"inlineImage\", l, d).context;\n eR(Q, U), Z = this.applyTransferMapsToCanvas(Q);\n }\n const F = this._scaleImage(Z, tt(t));\n t.imageSmoothingEnabled = mR(pl(t), U.interpolate), IQ(t, F.img, 0, 0, F.paintWidth, F.paintHeight, 0, -d, l, d), this.compose(), this.restore();\n }\n paintInlineImageXObjectGroup(U, l) {\n if (!this.contentVisible)\n return;\n const d = this.ctx;\n let t;\n if (U.bitmap)\n t = U.bitmap;\n else {\n const Z = U.width, F = U.height, Q = this.cachedCanvases.getCanvas(\"inlineImage\", Z, F).context;\n eR(Q, U), t = this.applyTransferMapsToCanvas(Q);\n }\n for (const Z of l)\n d.save(), d.transform(...Z.transform), d.scale(1, -1), IQ(d, t, Z.x, Z.y, Z.w, Z.h, 0, -1, 1, 1), d.restore();\n this.compose();\n }\n paintSolidColorImageMask() {\n this.contentVisible && (this.ctx.fillRect(0, 0, 1, 1), this.compose());\n }\n markPoint(U) {\n }\n markPointProps(U, l) {\n }\n beginMarkedContent(U) {\n this.markedContentStack.push({\n visible: !0\n });\n }\n beginMarkedContentProps(U, l) {\n U === \"OC\" ? this.markedContentStack.push({\n visible: this.optionalContentConfig.isVisible(l)\n }) : this.markedContentStack.push({\n visible: !0\n }), this.contentVisible = this.isContentVisible();\n }\n endMarkedContent() {\n this.markedContentStack.pop(), this.contentVisible = this.isContentVisible();\n }\n beginCompat() {\n }\n endCompat() {\n }\n consumePath(U) {\n const l = this.current.isEmptyClip();\n this.pendingClip && this.current.updateClipFromPath(), this.pendingClip || this.compose(U);\n const d = this.ctx;\n this.pendingClip && (l || (this.pendingClip === MR ? d.clip(\"evenodd\") : d.clip()), this.pendingClip = null), this.current.startNewPathAndClipBox(this.current.clipBox), d.beginPath();\n }\n getSinglePixelWidth() {\n if (!this._cachedGetSinglePixelWidth) {\n const U = pl(this.ctx);\n if (U[1] === 0 && U[2] === 0)\n this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(U[0]), Math.abs(U[3]));\n else {\n const l = Math.abs(U[0] * U[3] - U[2] * U[1]), d = Math.hypot(U[0], U[2]), t = Math.hypot(U[1], U[3]);\n this._cachedGetSinglePixelWidth = Math.max(d, t) / l;\n }\n }\n return this._cachedGetSinglePixelWidth;\n }\n getScaleForStroking() {\n if (this._cachedScaleForStroking[0] === -1) {\n const {\n lineWidth: U\n } = this.current, {\n a: l,\n b: d,\n c: t,\n d: Z\n } = this.ctx.getTransform();\n let F, c;\n if (d === 0 && t === 0) {\n const Q = Math.abs(l), a = Math.abs(Z);\n if (Q === a)\n if (U === 0)\n F = c = 1 / Q;\n else {\n const V = Q * U;\n F = c = V < 1 ? 1 / V : 1;\n }\n else if (U === 0)\n F = 1 / Q, c = 1 / a;\n else {\n const V = Q * U, W = a * U;\n F = V < 1 ? 1 / V : 1, c = W < 1 ? 1 / W : 1;\n }\n } else {\n const Q = Math.abs(l * Z - d * t), a = Math.hypot(l, d), V = Math.hypot(t, Z);\n if (U === 0)\n F = V / Q, c = a / Q;\n else {\n const W = U * Q;\n F = V > W ? V / W : 1, c = a > W ? a / W : 1;\n }\n }\n this._cachedScaleForStroking[0] = F, this._cachedScaleForStroking[1] = c;\n }\n return this._cachedScaleForStroking;\n }\n rescaleAndStroke(U) {\n const {\n ctx: l\n } = this, {\n lineWidth: d\n } = this.current, [t, Z] = this.getScaleForStroking();\n if (l.lineWidth = d || 1, t === 1 && Z === 1) {\n l.stroke();\n return;\n }\n const F = l.getLineDash();\n if (U && l.save(), l.scale(t, Z), F.length > 0) {\n const c = Math.max(t, Z);\n l.setLineDash(F.map((Q) => Q / c)), l.lineDashOffset /= c;\n }\n l.stroke(), U && l.restore();\n }\n isContentVisible() {\n for (let U = this.markedContentStack.length - 1; U >= 0; U--)\n if (!this.markedContentStack[U].visible)\n return !1;\n return !0;\n }\n};\njZ = new WeakSet(), hW = function() {\n for (; this.stateStack.length || this.inSMaskMode; )\n this.restore();\n this.current.activeSMask = null, this.ctx.restore(), this.transparentCanvas && (this.ctx = this.compositeCtx, this.ctx.save(), this.ctx.setTransform(1, 0, 0, 1, 0, 0), this.ctx.drawImage(this.transparentCanvas, 0, 0), this.ctx.restore(), this.transparentCanvas = null);\n}, eW = function() {\n if (this.pageColors) {\n const U = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background);\n if (U !== \"none\") {\n const l = this.ctx.filter;\n this.ctx.filter = U, this.ctx.drawImage(this.ctx.canvas, 0, 0), this.ctx.filter = l;\n }\n }\n};\nlet y0 = $i;\nfor (const s in Qd)\n y0.prototype[s] !== void 0 && (y0.prototype[Qd[s]] = y0.prototype[s]);\nvar HQ, cs, ns;\nlet AZ = (HQ = class {\n static get workerPort() {\n return n(this, cs);\n }\n static set workerPort(U) {\n if (!(typeof Worker < \"u\" && U instanceof Worker) && U !== null)\n throw new Error(\"Invalid `workerPort` type.\");\n e(this, cs, U);\n }\n static get workerSrc() {\n return n(this, ns);\n }\n static set workerSrc(U) {\n if (typeof U != \"string\")\n throw new Error(\"Invalid `workerSrc` type.\");\n e(this, ns, U);\n }\n}, cs = new WeakMap(), ns = new WeakMap(), m(HQ, cs, null), m(HQ, ns, \"\"), HQ);\nconst EQ = {\n UNKNOWN: 0,\n DATA: 1,\n ERROR: 2\n}, rl = {\n UNKNOWN: 0,\n CANCEL: 1,\n CANCEL_COMPLETE: 2,\n CLOSE: 3,\n ENQUEUE: 4,\n ERROR: 5,\n PULL: 6,\n PULL_COMPLETE: 7,\n START_COMPLETE: 8\n};\nfunction EU(s) {\n switch (s instanceof Error || typeof s == \"object\" && s !== null || Ol('wrapReason: Expected \"reason\" to be a (possibly cloned) Error.'), s.name) {\n case \"AbortException\":\n return new b0(s.message);\n case \"MissingPDFException\":\n return new e0(s.message);\n case \"PasswordException\":\n return new jV(s.message, s.code);\n case \"UnexpectedResponseException\":\n return new RV(s.message, s.status);\n case \"UnknownErrorException\":\n return new OV(s.message, s.details);\n default:\n return new OV(s.message, s.toString());\n }\n}\nvar lt, qN, $N, ta;\nclass Rn {\n constructor(U, l, d) {\n m(this, lt);\n this.sourceName = U, this.targetName = l, this.comObj = d, this.callbackId = 1, this.streamId = 1, this.streamSinks = /* @__PURE__ */ Object.create(null), this.streamControllers = /* @__PURE__ */ Object.create(null), this.callbackCapabilities = /* @__PURE__ */ Object.create(null), this.actionHandler = /* @__PURE__ */ Object.create(null), this._onComObjOnMessage = (t) => {\n const Z = t.data;\n if (Z.targetName !== this.sourceName)\n return;\n if (Z.stream) {\n h(this, lt, $N).call(this, Z);\n return;\n }\n if (Z.callback) {\n const c = Z.callbackId, Q = this.callbackCapabilities[c];\n if (!Q)\n throw new Error(`Cannot resolve callback ${c}`);\n if (delete this.callbackCapabilities[c], Z.callback === EQ.DATA)\n Q.resolve(Z.data);\n else if (Z.callback === EQ.ERROR)\n Q.reject(EU(Z.reason));\n else\n throw new Error(\"Unexpected callback case\");\n return;\n }\n const F = this.actionHandler[Z.action];\n if (!F)\n throw new Error(`Unknown action from worker: ${Z.action}`);\n if (Z.callbackId) {\n const c = this.sourceName, Q = Z.sourceName;\n new Promise(function(a) {\n a(F(Z.data));\n }).then(function(a) {\n d.postMessage({\n sourceName: c,\n targetName: Q,\n callback: EQ.DATA,\n callbackId: Z.callbackId,\n data: a\n });\n }, function(a) {\n d.postMessage({\n sourceName: c,\n targetName: Q,\n callback: EQ.ERROR,\n callbackId: Z.callbackId,\n reason: EU(a)\n });\n });\n return;\n }\n if (Z.streamId) {\n h(this, lt, qN).call(this, Z);\n return;\n }\n F(Z.data);\n }, d.addEventListener(\"message\", this._onComObjOnMessage);\n }\n on(U, l) {\n const d = this.actionHandler;\n if (d[U])\n throw new Error(`There is already an actionName called \"${U}\"`);\n d[U] = l;\n }\n send(U, l, d) {\n this.comObj.postMessage({\n sourceName: this.sourceName,\n targetName: this.targetName,\n action: U,\n data: l\n }, d);\n }\n sendWithPromise(U, l, d) {\n const t = this.callbackId++, Z = Promise.withResolvers();\n this.callbackCapabilities[t] = Z;\n try {\n this.comObj.postMessage({\n sourceName: this.sourceName,\n targetName: this.targetName,\n action: U,\n callbackId: t,\n data: l\n }, d);\n } catch (F) {\n Z.reject(F);\n }\n return Z.promise;\n }\n sendWithStream(U, l, d, t) {\n const Z = this.streamId++, F = this.sourceName, c = this.targetName, Q = this.comObj;\n return new ReadableStream({\n start: (a) => {\n const V = Promise.withResolvers();\n return this.streamControllers[Z] = {\n controller: a,\n startCall: V,\n pullCall: null,\n cancelCall: null,\n isClosed: !1\n }, Q.postMessage({\n sourceName: F,\n targetName: c,\n action: U,\n streamId: Z,\n data: l,\n desiredSize: a.desiredSize\n }, t), V.promise;\n },\n pull: (a) => {\n const V = Promise.withResolvers();\n return this.streamControllers[Z].pullCall = V, Q.postMessage({\n sourceName: F,\n targetName: c,\n stream: rl.PULL,\n streamId: Z,\n desiredSize: a.desiredSize\n }), V.promise;\n },\n cancel: (a) => {\n Al(a instanceof Error, \"cancel must have a valid reason\");\n const V = Promise.withResolvers();\n return this.streamControllers[Z].cancelCall = V, this.streamControllers[Z].isClosed = !0, Q.postMessage({\n sourceName: F,\n targetName: c,\n stream: rl.CANCEL,\n streamId: Z,\n reason: EU(a)\n }), V.promise;\n }\n }, d);\n }\n destroy() {\n this.comObj.removeEventListener(\"message\", this._onComObjOnMessage);\n }\n}\nlt = new WeakSet(), qN = function(U) {\n const l = U.streamId, d = this.sourceName, t = U.sourceName, Z = this.comObj, F = this, c = this.actionHandler[U.action], Q = {\n enqueue(a, V = 1, W) {\n if (this.isCancelled)\n return;\n const i = this.desiredSize;\n this.desiredSize -= V, i > 0 && this.desiredSize <= 0 && (this.sinkCapability = Promise.withResolvers(), this.ready = this.sinkCapability.promise), Z.postMessage({\n sourceName: d,\n targetName: t,\n stream: rl.ENQUEUE,\n streamId: l,\n chunk: a\n }, W);\n },\n close() {\n this.isCancelled || (this.isCancelled = !0, Z.postMessage({\n sourceName: d,\n targetName: t,\n stream: rl.CLOSE,\n streamId: l\n }), delete F.streamSinks[l]);\n },\n error(a) {\n Al(a instanceof Error, \"error must have a valid reason\"), !this.isCancelled && (this.isCancelled = !0, Z.postMessage({\n sourceName: d,\n targetName: t,\n stream: rl.ERROR,\n streamId: l,\n reason: EU(a)\n }));\n },\n sinkCapability: Promise.withResolvers(),\n onPull: null,\n onCancel: null,\n isCancelled: !1,\n desiredSize: U.desiredSize,\n ready: null\n };\n Q.sinkCapability.resolve(), Q.ready = Q.sinkCapability.promise, this.streamSinks[l] = Q, new Promise(function(a) {\n a(c(U.data, Q));\n }).then(function() {\n Z.postMessage({\n sourceName: d,\n targetName: t,\n stream: rl.START_COMPLETE,\n streamId: l,\n success: !0\n });\n }, function(a) {\n Z.postMessage({\n sourceName: d,\n targetName: t,\n stream: rl.START_COMPLETE,\n streamId: l,\n reason: EU(a)\n });\n });\n}, $N = function(U) {\n const l = U.streamId, d = this.sourceName, t = U.sourceName, Z = this.comObj, F = this.streamControllers[l], c = this.streamSinks[l];\n switch (U.stream) {\n case rl.START_COMPLETE:\n U.success ? F.startCall.resolve() : F.startCall.reject(EU(U.reason));\n break;\n case rl.PULL_COMPLETE:\n U.success ? F.pullCall.resolve() : F.pullCall.reject(EU(U.reason));\n break;\n case rl.PULL:\n if (!c) {\n Z.postMessage({\n sourceName: d,\n targetName: t,\n stream: rl.PULL_COMPLETE,\n streamId: l,\n success: !0\n });\n break;\n }\n c.desiredSize <= 0 && U.desiredSize > 0 && c.sinkCapability.resolve(), c.desiredSize = U.desiredSize, new Promise(function(Q) {\n var a;\n Q((a = c.onPull) == null ? void 0 : a.call(c));\n }).then(function() {\n Z.postMessage({\n sourceName: d,\n targetName: t,\n stream: rl.PULL_COMPLETE,\n streamId: l,\n success: !0\n });\n }, function(Q) {\n Z.postMessage({\n sourceName: d,\n targetName: t,\n stream: rl.PULL_COMPLETE,\n streamId: l,\n reason: EU(Q)\n });\n });\n break;\n case rl.ENQUEUE:\n if (Al(F, \"enqueue should have stream controller\"), F.isClosed)\n break;\n F.controller.enqueue(U.chunk);\n break;\n case rl.CLOSE:\n if (Al(F, \"close should have stream controller\"), F.isClosed)\n break;\n F.isClosed = !0, F.controller.close(), h(this, lt, ta).call(this, F, l);\n break;\n case rl.ERROR:\n Al(F, \"error should have stream controller\"), F.controller.error(EU(U.reason)), h(this, lt, ta).call(this, F, l);\n break;\n case rl.CANCEL_COMPLETE:\n U.success ? F.cancelCall.resolve() : F.cancelCall.reject(EU(U.reason)), h(this, lt, ta).call(this, F, l);\n break;\n case rl.CANCEL:\n if (!c)\n break;\n new Promise(function(Q) {\n var a;\n Q((a = c.onCancel) == null ? void 0 : a.call(c, EU(U.reason)));\n }).then(function() {\n Z.postMessage({\n sourceName: d,\n targetName: t,\n stream: rl.CANCEL_COMPLETE,\n streamId: l,\n success: !0\n });\n }, function(Q) {\n Z.postMessage({\n sourceName: d,\n targetName: t,\n stream: rl.CANCEL_COMPLETE,\n streamId: l,\n reason: EU(Q)\n });\n }), c.sinkCapability.reject(EU(U.reason)), c.isCancelled = !0, delete this.streamSinks[l];\n break;\n default:\n throw new Error(\"Unexpected stream case\");\n }\n}, ta = async function(U, l) {\n var d, t, Z;\n await Promise.allSettled([(d = U.startCall) == null ? void 0 : d.promise, (t = U.pullCall) == null ? void 0 : t.promise, (Z = U.cancelCall) == null ? void 0 : Z.promise]), delete this.streamControllers[l];\n};\nvar bF, ss;\nclass am {\n constructor({\n parsedData: U,\n rawData: l\n }) {\n m(this, bF);\n m(this, ss);\n e(this, bF, U), e(this, ss, l);\n }\n getRaw() {\n return n(this, ss);\n }\n get(U) {\n return n(this, bF).get(U) ?? null;\n }\n getAll() {\n return ri(n(this, bF));\n }\n has(U) {\n return n(this, bF).has(U);\n }\n}\nbF = new WeakMap(), ss = new WeakMap();\nconst vt = Symbol(\"INTERNAL\");\nvar Qs, as, Vs, H0;\nclass Vm {\n constructor(U, {\n name: l,\n intent: d,\n usage: t\n }) {\n m(this, Qs, !1);\n m(this, as, !1);\n m(this, Vs, !1);\n m(this, H0, !0);\n e(this, Qs, !!(U & HU.DISPLAY)), e(this, as, !!(U & HU.PRINT)), this.name = l, this.intent = d, this.usage = t;\n }\n get visible() {\n if (n(this, Vs))\n return n(this, H0);\n if (!n(this, H0))\n return !1;\n const {\n print: U,\n view: l\n } = this.usage;\n return n(this, Qs) ? (l == null ? void 0 : l.viewState) !== \"OFF\" : n(this, as) ? (U == null ? void 0 : U.printState) !== \"OFF\" : !0;\n }\n _setVisible(U, l, d = !1) {\n U !== vt && Ol(\"Internal method `_setVisible` called.\"), e(this, Vs, d), e(this, H0, l);\n }\n}\nQs = new WeakMap(), as = new WeakMap(), Vs = new WeakMap(), H0 = new WeakMap();\nvar sZ, ml, P0, f0, Ws, bW;\nclass Wm {\n constructor(U, l = HU.DISPLAY) {\n m(this, Ws);\n m(this, sZ, null);\n m(this, ml, /* @__PURE__ */ new Map());\n m(this, P0, null);\n m(this, f0, null);\n if (this.renderingIntent = l, this.name = null, this.creator = null, U !== null) {\n this.name = U.name, this.creator = U.creator, e(this, f0, U.order);\n for (const d of U.groups)\n n(this, ml).set(d.id, new Vm(l, d));\n if (U.baseState === \"OFF\")\n for (const d of n(this, ml).values())\n d._setVisible(vt, !1);\n for (const d of U.on)\n n(this, ml).get(d)._setVisible(vt, !0);\n for (const d of U.off)\n n(this, ml).get(d)._setVisible(vt, !1);\n e(this, P0, this.getHash());\n }\n }\n isVisible(U) {\n if (n(this, ml).size === 0)\n return !0;\n if (!U)\n return iV(\"Optional content group not defined.\"), !0;\n if (U.type === \"OCG\")\n return n(this, ml).has(U.id) ? n(this, ml).get(U.id).visible : (Zl(`Optional content group not found: ${U.id}`), !0);\n if (U.type === \"OCMD\") {\n if (U.expression)\n return h(this, Ws, bW).call(this, U.expression);\n if (!U.policy || U.policy === \"AnyOn\") {\n for (const l of U.ids) {\n if (!n(this, ml).has(l))\n return Zl(`Optional content group not found: ${l}`), !0;\n if (n(this, ml).get(l).visible)\n return !0;\n }\n return !1;\n } else if (U.policy === \"AllOn\") {\n for (const l of U.ids) {\n if (!n(this, ml).has(l))\n return Zl(`Optional content group not found: ${l}`), !0;\n if (!n(this, ml).get(l).visible)\n return !1;\n }\n return !0;\n } else if (U.policy === \"AnyOff\") {\n for (const l of U.ids) {\n if (!n(this, ml).has(l))\n return Zl(`Optional content group not found: ${l}`), !0;\n if (!n(this, ml).get(l).visible)\n return !0;\n }\n return !1;\n } else if (U.policy === \"AllOff\") {\n for (const l of U.ids) {\n if (!n(this, ml).has(l))\n return Zl(`Optional content group not found: ${l}`), !0;\n if (n(this, ml).get(l).visible)\n return !1;\n }\n return !0;\n }\n return Zl(`Unknown optional content policy ${U.policy}.`), !0;\n }\n return Zl(`Unknown group type ${U.type}.`), !0;\n }\n setVisibility(U, l = !0) {\n const d = n(this, ml).get(U);\n if (!d) {\n Zl(`Optional content group not found: ${U}`);\n return;\n }\n d._setVisible(vt, !!l, !0), e(this, sZ, null);\n }\n setOCGState({\n state: U,\n preserveRB: l\n }) {\n let d;\n for (const t of U) {\n switch (t) {\n case \"ON\":\n case \"OFF\":\n case \"Toggle\":\n d = t;\n continue;\n }\n const Z = n(this, ml).get(t);\n if (Z)\n switch (d) {\n case \"ON\":\n Z._setVisible(vt, !0);\n break;\n case \"OFF\":\n Z._setVisible(vt, !1);\n break;\n case \"Toggle\":\n Z._setVisible(vt, !Z.visible);\n break;\n }\n }\n e(this, sZ, null);\n }\n get hasInitialVisibility() {\n return n(this, P0) === null || this.getHash() === n(this, P0);\n }\n getOrder() {\n return n(this, ml).size ? n(this, f0) ? n(this, f0).slice() : [...n(this, ml).keys()] : null;\n }\n getGroups() {\n return n(this, ml).size > 0 ? ri(n(this, ml)) : null;\n }\n getGroup(U) {\n return n(this, ml).get(U) || null;\n }\n getHash() {\n if (n(this, sZ) !== null)\n return n(this, sZ);\n const U = new PN();\n for (const [l, d] of n(this, ml))\n U.update(`${l}:${d.visible}`);\n return e(this, sZ, U.hexdigest());\n }\n}\nsZ = new WeakMap(), ml = new WeakMap(), P0 = new WeakMap(), f0 = new WeakMap(), Ws = new WeakSet(), bW = function(U) {\n const l = U.length;\n if (l < 2)\n return !0;\n const d = U[0];\n for (let t = 1; t < l; t++) {\n const Z = U[t];\n let F;\n if (Array.isArray(Z))\n F = h(this, Ws, bW).call(this, Z);\n else if (n(this, ml).has(Z))\n F = n(this, ml).get(Z).visible;\n else\n return Zl(`Optional content group not found: ${Z}`), !0;\n switch (d) {\n case \"And\":\n if (!F)\n return !1;\n break;\n case \"Or\":\n if (F)\n return !0;\n break;\n case \"Not\":\n return !F;\n default:\n return !0;\n }\n }\n return d === \"And\";\n};\nclass im {\n constructor(U, {\n disableRange: l = !1,\n disableStream: d = !1\n }) {\n Al(U, 'PDFDataTransportStream - missing required \"pdfDataRangeTransport\" argument.');\n const {\n length: t,\n initialData: Z,\n progressiveDone: F,\n contentDispositionFilename: c\n } = U;\n if (this._queuedChunks = [], this._progressiveDone = F, this._contentDispositionFilename = c, (Z == null ? void 0 : Z.length) > 0) {\n const Q = Z instanceof Uint8Array && Z.byteLength === Z.buffer.byteLength ? Z.buffer : new Uint8Array(Z).buffer;\n this._queuedChunks.push(Q);\n }\n this._pdfDataRangeTransport = U, this._isStreamingSupported = !d, this._isRangeSupported = !l, this._contentLength = t, this._fullRequestReader = null, this._rangeReaders = [], U.addRangeListener((Q, a) => {\n this._onReceiveData({\n begin: Q,\n chunk: a\n });\n }), U.addProgressListener((Q, a) => {\n this._onProgress({\n loaded: Q,\n total: a\n });\n }), U.addProgressiveReadListener((Q) => {\n this._onReceiveData({\n chunk: Q\n });\n }), U.addProgressiveDoneListener(() => {\n this._onProgressiveDone();\n }), U.transportReady();\n }\n _onReceiveData({\n begin: U,\n chunk: l\n }) {\n const d = l instanceof Uint8Array && l.byteLength === l.buffer.byteLength ? l.buffer : new Uint8Array(l).buffer;\n if (U === void 0)\n this._fullRequestReader ? this._fullRequestReader._enqueue(d) : this._queuedChunks.push(d);\n else {\n const t = this._rangeReaders.some(function(Z) {\n return Z._begin !== U ? !1 : (Z._enqueue(d), !0);\n });\n Al(t, \"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.\");\n }\n }\n get _progressiveDataLength() {\n var U;\n return ((U = this._fullRequestReader) == null ? void 0 : U._loaded) ?? 0;\n }\n _onProgress(U) {\n var l, d, t, Z;\n U.total === void 0 ? (d = (l = this._rangeReaders[0]) == null ? void 0 : l.onProgress) == null || d.call(l, {\n loaded: U.loaded\n }) : (Z = (t = this._fullRequestReader) == null ? void 0 : t.onProgress) == null || Z.call(t, {\n loaded: U.loaded,\n total: U.total\n });\n }\n _onProgressiveDone() {\n var U;\n (U = this._fullRequestReader) == null || U.progressiveDone(), this._progressiveDone = !0;\n }\n _removeRangeReader(U) {\n const l = this._rangeReaders.indexOf(U);\n l >= 0 && this._rangeReaders.splice(l, 1);\n }\n getFullReader() {\n Al(!this._fullRequestReader, \"PDFDataTransportStream.getFullReader can only be called once.\");\n const U = this._queuedChunks;\n return this._queuedChunks = null, new Rm(this, U, this._progressiveDone, this._contentDispositionFilename);\n }\n getRangeReader(U, l) {\n if (l <= this._progressiveDataLength)\n return null;\n const d = new Nm(this, U, l);\n return this._pdfDataRangeTransport.requestDataRange(U, l), this._rangeReaders.push(d), d;\n }\n cancelAllRequests(U) {\n var l;\n (l = this._fullRequestReader) == null || l.cancel(U);\n for (const d of this._rangeReaders.slice(0))\n d.cancel(U);\n this._pdfDataRangeTransport.abort();\n }\n}\nclass Rm {\n constructor(U, l, d = !1, t = null) {\n this._stream = U, this._done = d || !1, this._filename = ji(t) ? t : null, this._queuedChunks = l || [], this._loaded = 0;\n for (const Z of this._queuedChunks)\n this._loaded += Z.byteLength;\n this._requests = [], this._headersReady = Promise.resolve(), U._fullRequestReader = this, this.onProgress = null;\n }\n _enqueue(U) {\n this._done || (this._requests.length > 0 ? this._requests.shift().resolve({\n value: U,\n done: !1\n }) : this._queuedChunks.push(U), this._loaded += U.byteLength);\n }\n get headersReady() {\n return this._headersReady;\n }\n get filename() {\n return this._filename;\n }\n get isRangeSupported() {\n return this._stream._isRangeSupported;\n }\n get isStreamingSupported() {\n return this._stream._isStreamingSupported;\n }\n get contentLength() {\n return this._stream._contentLength;\n }\n async read() {\n if (this._queuedChunks.length > 0)\n return {\n value: this._queuedChunks.shift(),\n done: !1\n };\n if (this._done)\n return {\n value: void 0,\n done: !0\n };\n const U = Promise.withResolvers();\n return this._requests.push(U), U.promise;\n }\n cancel(U) {\n this._done = !0;\n for (const l of this._requests)\n l.resolve({\n value: void 0,\n done: !0\n });\n this._requests.length = 0;\n }\n progressiveDone() {\n this._done || (this._done = !0);\n }\n}\nclass Nm {\n constructor(U, l, d) {\n this._stream = U, this._begin = l, this._end = d, this._queuedChunk = null, this._requests = [], this._done = !1, this.onProgress = null;\n }\n _enqueue(U) {\n if (!this._done) {\n if (this._requests.length === 0)\n this._queuedChunk = U;\n else {\n this._requests.shift().resolve({\n value: U,\n done: !1\n });\n for (const d of this._requests)\n d.resolve({\n value: void 0,\n done: !0\n });\n this._requests.length = 0;\n }\n this._done = !0, this._stream._removeRangeReader(this);\n }\n }\n get isStreamingSupported() {\n return !1;\n }\n async read() {\n if (this._queuedChunk) {\n const l = this._queuedChunk;\n return this._queuedChunk = null, {\n value: l,\n done: !1\n };\n }\n if (this._done)\n return {\n value: void 0,\n done: !0\n };\n const U = Promise.withResolvers();\n return this._requests.push(U), U.promise;\n }\n cancel(U) {\n this._done = !0;\n for (const l of this._requests)\n l.resolve({\n value: void 0,\n done: !0\n });\n this._requests.length = 0, this._stream._removeRangeReader(this);\n }\n}\nfunction hm(s) {\n let U = !0, l = d(\"filename\\\\*\", \"i\").exec(s);\n if (l) {\n l = l[1];\n let V = c(l);\n return V = unescape(V), V = Q(V), V = a(V), Z(V);\n }\n if (l = F(s), l) {\n const V = a(l);\n return Z(V);\n }\n if (l = d(\"filename\", \"i\").exec(s), l) {\n l = l[1];\n let V = c(l);\n return V = a(V), Z(V);\n }\n function d(V, W) {\n return new RegExp(\"(?:^|;)\\\\s*\" + V + '\\\\s*=\\\\s*([^\";\\\\s][^;\\\\s]*|\"(?:[^\"\\\\\\\\]|\\\\\\\\\"?)+\"?)', W);\n }\n function t(V, W) {\n if (V) {\n if (!/^[\\x00-\\xFF]+$/.test(W))\n return W;\n try {\n const i = new TextDecoder(V, {\n fatal: !0\n }), R = NV(W);\n W = i.decode(R), U = !1;\n } catch {\n }\n }\n return W;\n }\n function Z(V) {\n return U && /[\\x80-\\xff]/.test(V) && (V = t(\"utf-8\", V), U && (V = t(\"iso-8859-1\", V))), V;\n }\n function F(V) {\n const W = [];\n let i;\n const R = d(\"filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)\", \"ig\");\n for (; (i = R.exec(V)) !== null; ) {\n let [, b, J, M] = i;\n if (b = parseInt(b, 10), b in W) {\n if (b === 0)\n break;\n continue;\n }\n W[b] = [J, M];\n }\n const N = [];\n for (let b = 0; b < W.length && b in W; ++b) {\n let [J, M] = W[b];\n M = c(M), J && (M = unescape(M), b === 0 && (M = Q(M))), N.push(M);\n }\n return N.join(\"\");\n }\n function c(V) {\n if (V.startsWith('\"')) {\n const W = V.slice(1).split('\\\\\"');\n for (let i = 0; i < W.length; ++i) {\n const R = W[i].indexOf('\"');\n R !== -1 && (W[i] = W[i].slice(0, R), W.length = i + 1), W[i] = W[i].replaceAll(/\\\\(.)/g, \"$1\");\n }\n V = W.join('\"');\n }\n return V;\n }\n function Q(V) {\n const W = V.indexOf(\"'\");\n if (W === -1)\n return V;\n const i = V.slice(0, W), N = V.slice(W + 1).replace(/^[^']*'/, \"\");\n return t(i, N);\n }\n function a(V) {\n return !V.startsWith(\"=?\") || /[\\x00-\\x19\\x80-\\xff]/.test(V) ? V : V.replaceAll(/=\\?([\\w-]*)\\?([QqBb])\\?((?:[^?]|\\?(?!=))*)\\?=/g, function(W, i, R, N) {\n if (R === \"q\" || R === \"Q\")\n return N = N.replaceAll(\"_\", \" \"), N = N.replaceAll(/=([0-9a-fA-F]{2})/g, function(b, J) {\n return String.fromCharCode(parseInt(J, 16));\n }), t(i, N);\n try {\n N = atob(N);\n } catch {\n }\n return t(i, N);\n });\n }\n return \"\";\n}\nfunction vi(s, U) {\n const l = new Headers();\n if (!s || !U || typeof U != \"object\")\n return l;\n for (const d in U) {\n const t = U[d];\n t !== void 0 && l.append(d, t);\n }\n return l;\n}\nfunction Hi({\n responseHeaders: s,\n isHttp: U,\n rangeChunkSize: l,\n disableRange: d\n}) {\n const t = {\n allowRangeRequests: !1,\n suggestedLength: void 0\n }, Z = parseInt(s.get(\"Content-Length\"), 10);\n return !Number.isInteger(Z) || (t.suggestedLength = Z, Z <= 2 * l) || d || !U || s.get(\"Accept-Ranges\") !== \"bytes\" || (s.get(\"Content-Encoding\") || \"identity\") !== \"identity\" || (t.allowRangeRequests = !0), t;\n}\nfunction Pi(s) {\n const U = s.get(\"Content-Disposition\");\n if (U) {\n let l = hm(U);\n if (l.includes(\"%\"))\n try {\n l = decodeURIComponent(l);\n } catch {\n }\n if (ji(l))\n return l;\n }\n return null;\n}\nfunction bV(s, U) {\n return s === 404 || s === 0 && U.startsWith(\"file:\") ? new e0('Missing PDF \"' + U + '\".') : new RV(`Unexpected server response (${s}) while retrieving PDF \"${U}\".`, s);\n}\nfunction lh(s) {\n return s === 200 || s === 206;\n}\nfunction Uh(s, U, l) {\n return {\n method: \"GET\",\n headers: s,\n signal: l.signal,\n mode: \"cors\",\n credentials: U ? \"include\" : \"same-origin\",\n redirect: \"follow\"\n };\n}\nfunction dh(s) {\n return s instanceof Uint8Array ? s.buffer : s instanceof ArrayBuffer ? s : (Zl(`getArrayBuffer - unexpected data format: ${s}`), new Uint8Array(s).buffer);\n}\nclass JR {\n constructor(U) {\n this.source = U, this.isHttp = /^https?:/i.test(U.url), this.headers = vi(this.isHttp, U.httpHeaders), this._fullRequestReader = null, this._rangeRequestReaders = [];\n }\n get _progressiveDataLength() {\n var U;\n return ((U = this._fullRequestReader) == null ? void 0 : U._loaded) ?? 0;\n }\n getFullReader() {\n return Al(!this._fullRequestReader, \"PDFFetchStream.getFullReader can only be called once.\"), this._fullRequestReader = new em(this), this._fullRequestReader;\n }\n getRangeReader(U, l) {\n if (l <= this._progressiveDataLength)\n return null;\n const d = new bm(this, U, l);\n return this._rangeRequestReaders.push(d), d;\n }\n cancelAllRequests(U) {\n var l;\n (l = this._fullRequestReader) == null || l.cancel(U);\n for (const d of this._rangeRequestReaders.slice(0))\n d.cancel(U);\n }\n}\nclass em {\n constructor(U) {\n this._stream = U, this._reader = null, this._loaded = 0, this._filename = null;\n const l = U.source;\n this._withCredentials = l.withCredentials || !1, this._contentLength = l.length, this._headersCapability = Promise.withResolvers(), this._disableRange = l.disableRange || !1, this._rangeChunkSize = l.rangeChunkSize, !this._rangeChunkSize && !this._disableRange && (this._disableRange = !0), this._abortController = new AbortController(), this._isStreamingSupported = !l.disableStream, this._isRangeSupported = !l.disableRange;\n const d = new Headers(U.headers), t = l.url;\n fetch(t, Uh(d, this._withCredentials, this._abortController)).then((Z) => {\n if (!lh(Z.status))\n throw bV(Z.status, t);\n this._reader = Z.body.getReader(), this._headersCapability.resolve();\n const F = Z.headers, {\n allowRangeRequests: c,\n suggestedLength: Q\n } = Hi({\n responseHeaders: F,\n isHttp: U.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange\n });\n this._isRangeSupported = c, this._contentLength = Q || this._contentLength, this._filename = Pi(F), !this._isStreamingSupported && this._isRangeSupported && this.cancel(new b0(\"Streaming is disabled.\"));\n }).catch(this._headersCapability.reject), this.onProgress = null;\n }\n get headersReady() {\n return this._headersCapability.promise;\n }\n get filename() {\n return this._filename;\n }\n get contentLength() {\n return this._contentLength;\n }\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n async read() {\n var d;\n await this._headersCapability.promise;\n const {\n value: U,\n done: l\n } = await this._reader.read();\n return l ? {\n value: U,\n done: l\n } : (this._loaded += U.byteLength, (d = this.onProgress) == null || d.call(this, {\n loaded: this._loaded,\n total: this._contentLength\n }), {\n value: dh(U),\n done: !1\n });\n }\n cancel(U) {\n var l;\n (l = this._reader) == null || l.cancel(U), this._abortController.abort();\n }\n}\nclass bm {\n constructor(U, l, d) {\n this._stream = U, this._reader = null, this._loaded = 0;\n const t = U.source;\n this._withCredentials = t.withCredentials || !1, this._readCapability = Promise.withResolvers(), this._isStreamingSupported = !t.disableStream, this._abortController = new AbortController();\n const Z = new Headers(U.headers);\n Z.append(\"Range\", `bytes=${l}-${d - 1}`);\n const F = t.url;\n fetch(F, Uh(Z, this._withCredentials, this._abortController)).then((c) => {\n if (!lh(c.status))\n throw bV(c.status, F);\n this._readCapability.resolve(), this._reader = c.body.getReader();\n }).catch(this._readCapability.reject), this.onProgress = null;\n }\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n async read() {\n var d;\n await this._readCapability.promise;\n const {\n value: U,\n done: l\n } = await this._reader.read();\n return l ? {\n value: U,\n done: l\n } : (this._loaded += U.byteLength, (d = this.onProgress) == null || d.call(this, {\n loaded: this._loaded\n }), {\n value: dh(U),\n done: !1\n });\n }\n cancel(U) {\n var l;\n (l = this._reader) == null || l.cancel(U), this._abortController.abort();\n }\n}\nconst YV = 200, oV = 206;\nfunction mm(s) {\n const U = s.response;\n return typeof U != \"string\" ? U : NV(U).buffer;\n}\nclass Mm {\n constructor({\n url: U,\n httpHeaders: l,\n withCredentials: d\n }) {\n this.url = U, this.isHttp = /^https?:/i.test(U), this.headers = vi(this.isHttp, l), this.withCredentials = d || !1, this.currXhrId = 0, this.pendingRequests = /* @__PURE__ */ Object.create(null);\n }\n requestRange(U, l, d) {\n const t = {\n begin: U,\n end: l\n };\n for (const Z in d)\n t[Z] = d[Z];\n return this.request(t);\n }\n requestFull(U) {\n return this.request(U);\n }\n request(U) {\n const l = new XMLHttpRequest(), d = this.currXhrId++, t = this.pendingRequests[d] = {\n xhr: l\n };\n l.open(\"GET\", this.url), l.withCredentials = this.withCredentials;\n for (const [Z, F] of this.headers)\n l.setRequestHeader(Z, F);\n return this.isHttp && \"begin\" in U && \"end\" in U ? (l.setRequestHeader(\"Range\", `bytes=${U.begin}-${U.end - 1}`), t.expectedStatus = oV) : t.expectedStatus = YV, l.responseType = \"arraybuffer\", U.onError && (l.onerror = function(Z) {\n U.onError(l.status);\n }), l.onreadystatechange = this.onStateChange.bind(this, d), l.onprogress = this.onProgress.bind(this, d), t.onHeadersReceived = U.onHeadersReceived, t.onDone = U.onDone, t.onError = U.onError, t.onProgress = U.onProgress, l.send(null), d;\n }\n onProgress(U, l) {\n var t;\n const d = this.pendingRequests[U];\n d && ((t = d.onProgress) == null || t.call(d, l));\n }\n onStateChange(U, l) {\n var Q, a, V;\n const d = this.pendingRequests[U];\n if (!d)\n return;\n const t = d.xhr;\n if (t.readyState >= 2 && d.onHeadersReceived && (d.onHeadersReceived(), delete d.onHeadersReceived), t.readyState !== 4 || !(U in this.pendingRequests))\n return;\n if (delete this.pendingRequests[U], t.status === 0 && this.isHttp) {\n (Q = d.onError) == null || Q.call(d, t.status);\n return;\n }\n const Z = t.status || YV;\n if (!(Z === YV && d.expectedStatus === oV) && Z !== d.expectedStatus) {\n (a = d.onError) == null || a.call(d, t.status);\n return;\n }\n const c = mm(t);\n if (Z === oV) {\n const W = t.getResponseHeader(\"Content-Range\"), i = /bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(W);\n d.onDone({\n begin: parseInt(i[1], 10),\n chunk: c\n });\n } else c ? d.onDone({\n begin: 0,\n chunk: c\n }) : (V = d.onError) == null || V.call(d, t.status);\n }\n getRequestXhr(U) {\n return this.pendingRequests[U].xhr;\n }\n isPendingRequest(U) {\n return U in this.pendingRequests;\n }\n abortRequest(U) {\n const l = this.pendingRequests[U].xhr;\n delete this.pendingRequests[U], l.abort();\n }\n}\nclass Jm {\n constructor(U) {\n this._source = U, this._manager = new Mm(U), this._rangeChunkSize = U.rangeChunkSize, this._fullRequestReader = null, this._rangeRequestReaders = [];\n }\n _onRangeRequestReaderClosed(U) {\n const l = this._rangeRequestReaders.indexOf(U);\n l >= 0 && this._rangeRequestReaders.splice(l, 1);\n }\n getFullReader() {\n return Al(!this._fullRequestReader, \"PDFNetworkStream.getFullReader can only be called once.\"), this._fullRequestReader = new Gm(this._manager, this._source), this._fullRequestReader;\n }\n getRangeReader(U, l) {\n const d = new Tm(this._manager, U, l);\n return d.onClosed = this._onRangeRequestReaderClosed.bind(this), this._rangeRequestReaders.push(d), d;\n }\n cancelAllRequests(U) {\n var l;\n (l = this._fullRequestReader) == null || l.cancel(U);\n for (const d of this._rangeRequestReaders.slice(0))\n d.cancel(U);\n }\n}\nclass Gm {\n constructor(U, l) {\n this._manager = U;\n const d = {\n onHeadersReceived: this._onHeadersReceived.bind(this),\n onDone: this._onDone.bind(this),\n onError: this._onError.bind(this),\n onProgress: this._onProgress.bind(this)\n };\n this._url = l.url, this._fullRequestId = U.requestFull(d), this._headersCapability = Promise.withResolvers(), this._disableRange = l.disableRange || !1, this._contentLength = l.length, this._rangeChunkSize = l.rangeChunkSize, !this._rangeChunkSize && !this._disableRange && (this._disableRange = !0), this._isStreamingSupported = !1, this._isRangeSupported = !1, this._cachedChunks = [], this._requests = [], this._done = !1, this._storedError = void 0, this._filename = null, this.onProgress = null;\n }\n _onHeadersReceived() {\n const U = this._fullRequestId, l = this._manager.getRequestXhr(U), d = new Headers(l.getAllResponseHeaders().trim().split(/[\\r\\n]+/).map((F) => {\n const [c, ...Q] = F.split(\": \");\n return [c, Q.join(\": \")];\n })), {\n allowRangeRequests: t,\n suggestedLength: Z\n } = Hi({\n responseHeaders: d,\n isHttp: this._manager.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange\n });\n t && (this._isRangeSupported = !0), this._contentLength = Z || this._contentLength, this._filename = Pi(d), this._isRangeSupported && this._manager.abortRequest(U), this._headersCapability.resolve();\n }\n _onDone(U) {\n if (U && (this._requests.length > 0 ? this._requests.shift().resolve({\n value: U.chunk,\n done: !1\n }) : this._cachedChunks.push(U.chunk)), this._done = !0, !(this._cachedChunks.length > 0)) {\n for (const l of this._requests)\n l.resolve({\n value: void 0,\n done: !0\n });\n this._requests.length = 0;\n }\n }\n _onError(U) {\n this._storedError = bV(U, this._url), this._headersCapability.reject(this._storedError);\n for (const l of this._requests)\n l.reject(this._storedError);\n this._requests.length = 0, this._cachedChunks.length = 0;\n }\n _onProgress(U) {\n var l;\n (l = this.onProgress) == null || l.call(this, {\n loaded: U.loaded,\n total: U.lengthComputable ? U.total : this._contentLength\n });\n }\n get filename() {\n return this._filename;\n }\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n get contentLength() {\n return this._contentLength;\n }\n get headersReady() {\n return this._headersCapability.promise;\n }\n async read() {\n if (this._storedError)\n throw this._storedError;\n if (this._cachedChunks.length > 0)\n return {\n value: this._cachedChunks.shift(),\n done: !1\n };\n if (this._done)\n return {\n value: void 0,\n done: !0\n };\n const U = Promise.withResolvers();\n return this._requests.push(U), U.promise;\n }\n cancel(U) {\n this._done = !0, this._headersCapability.reject(U);\n for (const l of this._requests)\n l.resolve({\n value: void 0,\n done: !0\n });\n this._requests.length = 0, this._manager.isPendingRequest(this._fullRequestId) && this._manager.abortRequest(this._fullRequestId), this._fullRequestReader = null;\n }\n}\nclass Tm {\n constructor(U, l, d) {\n this._manager = U;\n const t = {\n onDone: this._onDone.bind(this),\n onError: this._onError.bind(this),\n onProgress: this._onProgress.bind(this)\n };\n this._url = U.url, this._requestId = U.requestRange(l, d, t), this._requests = [], this._queuedChunk = null, this._done = !1, this._storedError = void 0, this.onProgress = null, this.onClosed = null;\n }\n _close() {\n var U;\n (U = this.onClosed) == null || U.call(this, this);\n }\n _onDone(U) {\n const l = U.chunk;\n this._requests.length > 0 ? this._requests.shift().resolve({\n value: l,\n done: !1\n }) : this._queuedChunk = l, this._done = !0;\n for (const d of this._requests)\n d.resolve({\n value: void 0,\n done: !0\n });\n this._requests.length = 0, this._close();\n }\n _onError(U) {\n this._storedError = bV(U, this._url);\n for (const l of this._requests)\n l.reject(this._storedError);\n this._requests.length = 0, this._queuedChunk = null;\n }\n _onProgress(U) {\n var l;\n this.isStreamingSupported || (l = this.onProgress) == null || l.call(this, {\n loaded: U.loaded\n });\n }\n get isStreamingSupported() {\n return !1;\n }\n async read() {\n if (this._storedError)\n throw this._storedError;\n if (this._queuedChunk !== null) {\n const l = this._queuedChunk;\n return this._queuedChunk = null, {\n value: l,\n done: !1\n };\n }\n if (this._done)\n return {\n value: void 0,\n done: !0\n };\n const U = Promise.withResolvers();\n return this._requests.push(U), U.promise;\n }\n cancel(U) {\n this._done = !0;\n for (const l of this._requests)\n l.resolve({\n value: void 0,\n done: !0\n });\n this._requests.length = 0, this._manager.isPendingRequest(this._requestId) && this._manager.abortRequest(this._requestId), this._close();\n }\n}\nconst Sm = /^[a-z][a-z0-9\\-+.]+:/i;\nfunction Xm(s) {\n if (Sm.test(s))\n return new URL(s);\n const U = wZ.get(\"url\");\n return new URL(U.pathToFileURL(s));\n}\nfunction th(s, U, l) {\n return s.protocol === \"http:\" ? wZ.get(\"http\").request(s, {\n headers: U\n }, l) : wZ.get(\"https\").request(s, {\n headers: U\n }, l);\n}\nclass um {\n constructor(U) {\n this.source = U, this.url = Xm(U.url), this.isHttp = this.url.protocol === \"http:\" || this.url.protocol === \"https:\", this.isFsUrl = this.url.protocol === \"file:\", this.headers = vi(this.isHttp, U.httpHeaders), this._fullRequestReader = null, this._rangeRequestReaders = [];\n }\n get _progressiveDataLength() {\n var U;\n return ((U = this._fullRequestReader) == null ? void 0 : U._loaded) ?? 0;\n }\n getFullReader() {\n return Al(!this._fullRequestReader, \"PDFNodeStream.getFullReader can only be called once.\"), this._fullRequestReader = this.isFsUrl ? new pm(this) : new Ym(this), this._fullRequestReader;\n }\n getRangeReader(U, l) {\n if (l <= this._progressiveDataLength)\n return null;\n const d = this.isFsUrl ? new Bm(this, U, l) : new om(this, U, l);\n return this._rangeRequestReaders.push(d), d;\n }\n cancelAllRequests(U) {\n var l;\n (l = this._fullRequestReader) == null || l.cancel(U);\n for (const d of this._rangeRequestReaders.slice(0))\n d.cancel(U);\n }\n}\nclass Zh {\n constructor(U) {\n this._url = U.url, this._done = !1, this._storedError = null, this.onProgress = null;\n const l = U.source;\n this._contentLength = l.length, this._loaded = 0, this._filename = null, this._disableRange = l.disableRange || !1, this._rangeChunkSize = l.rangeChunkSize, !this._rangeChunkSize && !this._disableRange && (this._disableRange = !0), this._isStreamingSupported = !l.disableStream, this._isRangeSupported = !l.disableRange, this._readableStream = null, this._readCapability = Promise.withResolvers(), this._headersCapability = Promise.withResolvers();\n }\n get headersReady() {\n return this._headersCapability.promise;\n }\n get filename() {\n return this._filename;\n }\n get contentLength() {\n return this._contentLength;\n }\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n async read() {\n var d;\n if (await this._readCapability.promise, this._done)\n return {\n value: void 0,\n done: !0\n };\n if (this._storedError)\n throw this._storedError;\n const U = this._readableStream.read();\n return U === null ? (this._readCapability = Promise.withResolvers(), this.read()) : (this._loaded += U.length, (d = this.onProgress) == null || d.call(this, {\n loaded: this._loaded,\n total: this._contentLength\n }), {\n value: new Uint8Array(U).buffer,\n done: !1\n });\n }\n cancel(U) {\n if (!this._readableStream) {\n this._error(U);\n return;\n }\n this._readableStream.destroy(U);\n }\n _error(U) {\n this._storedError = U, this._readCapability.resolve();\n }\n _setReadableStream(U) {\n this._readableStream = U, U.on(\"readable\", () => {\n this._readCapability.resolve();\n }), U.on(\"end\", () => {\n U.destroy(), this._done = !0, this._readCapability.resolve();\n }), U.on(\"error\", (l) => {\n this._error(l);\n }), !this._isStreamingSupported && this._isRangeSupported && this._error(new b0(\"streaming is disabled\")), this._storedError && this._readableStream.destroy(this._storedError);\n }\n}\nclass Fh {\n constructor(U) {\n this._url = U.url, this._done = !1, this._storedError = null, this.onProgress = null, this._loaded = 0, this._readableStream = null, this._readCapability = Promise.withResolvers();\n const l = U.source;\n this._isStreamingSupported = !l.disableStream;\n }\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n async read() {\n var d;\n if (await this._readCapability.promise, this._done)\n return {\n value: void 0,\n done: !0\n };\n if (this._storedError)\n throw this._storedError;\n const U = this._readableStream.read();\n return U === null ? (this._readCapability = Promise.withResolvers(), this.read()) : (this._loaded += U.length, (d = this.onProgress) == null || d.call(this, {\n loaded: this._loaded\n }), {\n value: new Uint8Array(U).buffer,\n done: !1\n });\n }\n cancel(U) {\n if (!this._readableStream) {\n this._error(U);\n return;\n }\n this._readableStream.destroy(U);\n }\n _error(U) {\n this._storedError = U, this._readCapability.resolve();\n }\n _setReadableStream(U) {\n this._readableStream = U, U.on(\"readable\", () => {\n this._readCapability.resolve();\n }), U.on(\"end\", () => {\n U.destroy(), this._done = !0, this._readCapability.resolve();\n }), U.on(\"error\", (l) => {\n this._error(l);\n }), this._storedError && this._readableStream.destroy(this._storedError);\n }\n}\nclass Ym extends Zh {\n constructor(U) {\n super(U);\n const l = Object.fromEntries(U.headers), d = (t) => {\n if (t.statusCode === 404) {\n const Q = new e0(`Missing PDF \"${this._url}\".`);\n this._storedError = Q, this._headersCapability.reject(Q);\n return;\n }\n this._headersCapability.resolve(), this._setReadableStream(t);\n const Z = new Headers(this._readableStream.headers), {\n allowRangeRequests: F,\n suggestedLength: c\n } = Hi({\n responseHeaders: Z,\n isHttp: U.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange\n });\n this._isRangeSupported = F, this._contentLength = c || this._contentLength, this._filename = Pi(Z);\n };\n this._request = th(this._url, l, d), this._request.on(\"error\", (t) => {\n this._storedError = t, this._headersCapability.reject(t);\n }), this._request.end();\n }\n}\nclass om extends Fh {\n constructor(U, l, d) {\n super(U);\n const t = Object.fromEntries(U.headers);\n t.Range = `bytes=${l}-${d - 1}`;\n const Z = (F) => {\n if (F.statusCode === 404) {\n const c = new e0(`Missing PDF \"${this._url}\".`);\n this._storedError = c;\n return;\n }\n this._setReadableStream(F);\n };\n this._request = th(this._url, t, Z), this._request.on(\"error\", (F) => {\n this._storedError = F;\n }), this._request.end();\n }\n}\nclass pm extends Zh {\n constructor(U) {\n super(U);\n const l = wZ.get(\"fs\");\n l.promises.lstat(this._url).then((d) => {\n this._contentLength = d.size, this._setReadableStream(l.createReadStream(this._url)), this._headersCapability.resolve();\n }, (d) => {\n d.code === \"ENOENT\" && (d = new e0(`Missing PDF \"${this._url}\".`)), this._storedError = d, this._headersCapability.reject(d);\n });\n }\n}\nclass Bm extends Fh {\n constructor(U, l, d) {\n super(U);\n const t = wZ.get(\"fs\");\n this._setReadableStream(t.createReadStream(this._url, {\n start: l,\n end: d - 1\n }));\n }\n}\nconst ym = 1e5, YU = 30, Lm = 0.8;\nvar QN, QZ, pU, is, Rs, mF, Nt, Ns, hs, MF, A0, _0, aZ, q0, es, $0, JF, bs, ms, Il, GF, TF, Ms, VZ, lc, Ot, ch, nh, MW, fU, Za, JW, sh, Qh;\nlet mW = (Il = class {\n constructor({\n textContentSource: U,\n container: l,\n viewport: d\n }) {\n m(this, Ot);\n m(this, QZ, Promise.withResolvers());\n m(this, pU, null);\n m(this, is, !1);\n m(this, Rs, !!((QN = globalThis.FontInspector) != null && QN.enabled));\n m(this, mF, null);\n m(this, Nt, null);\n m(this, Ns, 0);\n m(this, hs, 0);\n m(this, MF, null);\n m(this, A0, null);\n m(this, _0, 0);\n m(this, aZ, 0);\n m(this, q0, /* @__PURE__ */ Object.create(null));\n m(this, es, []);\n m(this, $0, null);\n m(this, JF, []);\n m(this, bs, /* @__PURE__ */ new WeakMap());\n m(this, ms, null);\n var Q;\n if (U instanceof ReadableStream)\n e(this, $0, U);\n else if (typeof U == \"object\")\n e(this, $0, new ReadableStream({\n start(a) {\n a.enqueue(U), a.close();\n }\n }));\n else\n throw new Error('No \"textContentSource\" parameter specified.');\n e(this, pU, e(this, A0, l)), e(this, aZ, d.scale * (globalThis.devicePixelRatio || 1)), e(this, _0, d.rotation), e(this, Nt, {\n div: null,\n properties: null,\n ctx: null\n });\n const {\n pageWidth: t,\n pageHeight: Z,\n pageX: F,\n pageY: c\n } = d.rawDims;\n e(this, ms, [1, 0, 0, -1, -F, c + Z]), e(this, hs, t), e(this, Ns, Z), h(Q = Il, fU, sh).call(Q), i0(l, d), n(this, QZ).promise.finally(() => {\n n(Il, lc).delete(this), e(this, Nt, null), e(this, q0, null);\n }).catch(() => {\n });\n }\n static get fontFamilyMap() {\n const {\n isWindows: U,\n isFirefox: l\n } = DU.platform;\n return Ql(this, \"fontFamilyMap\", /* @__PURE__ */ new Map([[\"sans-serif\", `${U && l ? \"Calibri, \" : \"\"}sans-serif`], [\"monospace\", `${U && l ? \"Lucida Console, \" : \"\"}monospace`]]));\n }\n render() {\n const U = () => {\n n(this, MF).read().then(({\n value: l,\n done: d\n }) => {\n if (d) {\n n(this, QZ).resolve();\n return;\n }\n n(this, mF) ?? e(this, mF, l.lang), Object.assign(n(this, q0), l.styles), h(this, Ot, ch).call(this, l.items), U();\n }, n(this, QZ).reject);\n };\n return e(this, MF, n(this, $0).getReader()), n(Il, lc).add(this), U(), n(this, QZ).promise;\n }\n update({\n viewport: U,\n onBefore: l = null\n }) {\n var Z;\n const d = U.scale * (globalThis.devicePixelRatio || 1), t = U.rotation;\n if (t !== n(this, _0) && (l == null || l(), e(this, _0, t), i0(n(this, A0), {\n rotation: t\n })), d !== n(this, aZ)) {\n l == null || l(), e(this, aZ, d);\n const F = {\n div: null,\n properties: null,\n ctx: h(Z = Il, fU, Za).call(Z, n(this, mF))\n };\n for (const c of n(this, JF))\n F.properties = n(this, bs).get(c), F.div = c, h(this, Ot, MW).call(this, F);\n }\n }\n cancel() {\n var l;\n const U = new b0(\"TextLayer task cancelled.\");\n (l = n(this, MF)) == null || l.cancel(U).catch(() => {\n }), e(this, MF, null), n(this, QZ).reject(U);\n }\n get textDivs() {\n return n(this, JF);\n }\n get textContentItemsStr() {\n return n(this, es);\n }\n static cleanup() {\n if (!(n(this, lc).size > 0)) {\n n(this, GF).clear();\n for (const {\n canvas: U\n } of n(this, TF).values())\n U.remove();\n n(this, TF).clear();\n }\n }\n}, QZ = new WeakMap(), pU = new WeakMap(), is = new WeakMap(), Rs = new WeakMap(), mF = new WeakMap(), Nt = new WeakMap(), Ns = new WeakMap(), hs = new WeakMap(), MF = new WeakMap(), A0 = new WeakMap(), _0 = new WeakMap(), aZ = new WeakMap(), q0 = new WeakMap(), es = new WeakMap(), $0 = new WeakMap(), JF = new WeakMap(), bs = new WeakMap(), ms = new WeakMap(), GF = new WeakMap(), TF = new WeakMap(), Ms = new WeakMap(), VZ = new WeakMap(), lc = new WeakMap(), Ot = new WeakSet(), ch = function(U) {\n var t, Z;\n if (n(this, is))\n return;\n (Z = n(this, Nt)).ctx ?? (Z.ctx = h(t = Il, fU, Za).call(t, n(this, mF)));\n const l = n(this, JF), d = n(this, es);\n for (const F of U) {\n if (l.length > ym) {\n Zl(\"Ignoring additional textDivs for performance reasons.\"), e(this, is, !0);\n return;\n }\n if (F.str === void 0) {\n if (F.type === \"beginMarkedContentProps\" || F.type === \"beginMarkedContent\") {\n const c = n(this, pU);\n e(this, pU, document.createElement(\"span\")), n(this, pU).classList.add(\"markedContent\"), F.id !== null && n(this, pU).setAttribute(\"id\", `${F.id}`), c.append(n(this, pU));\n } else F.type === \"endMarkedContent\" && e(this, pU, n(this, pU).parentNode);\n continue;\n }\n d.push(F.str), h(this, Ot, nh).call(this, F);\n }\n}, nh = function(U) {\n var b;\n const l = document.createElement(\"span\"), d = {\n angle: 0,\n canvasWidth: 0,\n hasText: U.str !== \"\",\n hasEOL: U.hasEOL,\n fontSize: 0\n };\n n(this, JF).push(l);\n const t = H.transform(n(this, ms), U.transform);\n let Z = Math.atan2(t[1], t[0]);\n const F = n(this, q0)[U.fontName];\n F.vertical && (Z += Math.PI / 2);\n let c = n(this, Rs) && F.fontSubstitution || F.fontFamily;\n c = Il.fontFamilyMap.get(c) || c;\n const Q = Math.hypot(t[2], t[3]), a = Q * h(b = Il, fU, Qh).call(b, c, n(this, mF));\n let V, W;\n Z === 0 ? (V = t[4], W = t[5] - a) : (V = t[4] + a * Math.sin(Z), W = t[5] - a * Math.cos(Z));\n const i = \"calc(var(--scale-factor)*\", R = l.style;\n n(this, pU) === n(this, A0) ? (R.left = `${(100 * V / n(this, hs)).toFixed(2)}%`, R.top = `${(100 * W / n(this, Ns)).toFixed(2)}%`) : (R.left = `${i}${V.toFixed(2)}px)`, R.top = `${i}${W.toFixed(2)}px)`), R.fontSize = `${i}${(n(Il, VZ) * Q).toFixed(2)}px)`, R.fontFamily = c, d.fontSize = Q, l.setAttribute(\"role\", \"presentation\"), l.textContent = U.str, l.dir = U.dir, n(this, Rs) && (l.dataset.fontName = F.fontSubstitutionLoadedName || U.fontName), Z !== 0 && (d.angle = Z * (180 / Math.PI));\n let N = !1;\n if (U.str.length > 1)\n N = !0;\n else if (U.str !== \" \" && U.transform[0] !== U.transform[3]) {\n const J = Math.abs(U.transform[0]), M = Math.abs(U.transform[3]);\n J !== M && Math.max(J, M) / Math.min(J, M) > 1.5 && (N = !0);\n }\n if (N && (d.canvasWidth = F.vertical ? U.height : U.width), n(this, bs).set(l, d), n(this, Nt).div = l, n(this, Nt).properties = d, h(this, Ot, MW).call(this, n(this, Nt)), d.hasText && n(this, pU).append(l), d.hasEOL) {\n const J = document.createElement(\"br\");\n J.setAttribute(\"role\", \"presentation\"), n(this, pU).append(J);\n }\n}, MW = function(U) {\n var c;\n const {\n div: l,\n properties: d,\n ctx: t\n } = U, {\n style: Z\n } = l;\n let F = \"\";\n if (n(Il, VZ) > 1 && (F = `scale(${1 / n(Il, VZ)})`), d.canvasWidth !== 0 && d.hasText) {\n const {\n fontFamily: Q\n } = Z, {\n canvasWidth: a,\n fontSize: V\n } = d;\n h(c = Il, fU, JW).call(c, t, V * n(this, aZ), Q);\n const {\n width: W\n } = t.measureText(l.textContent);\n W > 0 && (F = `scaleX(${a * n(this, aZ) / W}) ${F}`);\n }\n d.angle !== 0 && (F = `rotate(${d.angle}deg) ${F}`), F.length > 0 && (Z.transform = F);\n}, fU = new WeakSet(), Za = function(U = null) {\n let l = n(this, TF).get(U || (U = \"\"));\n if (!l) {\n const d = document.createElement(\"canvas\");\n d.className = \"hiddenCanvasElement\", d.lang = U, document.body.append(d), l = d.getContext(\"2d\", {\n alpha: !1,\n willReadFrequently: !0\n }), n(this, TF).set(U, l), n(this, Ms).set(l, {\n size: 0,\n family: \"\"\n });\n }\n return l;\n}, JW = function(U, l, d) {\n const t = n(this, Ms).get(U);\n l === t.size && d === t.family || (U.font = `${l}px ${d}`, t.size = l, t.family = d);\n}, sh = function() {\n if (n(this, VZ) !== null)\n return;\n const U = document.createElement(\"div\");\n U.style.opacity = 0, U.style.lineHeight = 1, U.style.fontSize = \"1px\", U.style.position = \"absolute\", U.textContent = \"X\", document.body.append(U), e(this, VZ, U.getBoundingClientRect().height), U.remove();\n}, Qh = function(U, l) {\n const d = n(this, GF).get(U);\n if (d)\n return d;\n const t = h(this, fU, Za).call(this, l);\n t.canvas.width = t.canvas.height = YU, h(this, fU, JW).call(this, t, YU, U);\n const Z = t.measureText(\"\");\n let F = Z.fontBoundingBoxAscent, c = Math.abs(Z.fontBoundingBoxDescent);\n if (F) {\n const V = F / (F + c);\n return n(this, GF).set(U, V), t.canvas.width = t.canvas.height = 0, V;\n }\n t.strokeStyle = \"red\", t.clearRect(0, 0, YU, YU), t.strokeText(\"g\", 0, 0);\n let Q = t.getImageData(0, 0, YU, YU).data;\n c = 0;\n for (let V = Q.length - 1 - 3; V >= 0; V -= 4)\n if (Q[V] > 0) {\n c = Math.ceil(V / 4 / YU);\n break;\n }\n t.clearRect(0, 0, YU, YU), t.strokeText(\"A\", 0, YU), Q = t.getImageData(0, 0, YU, YU).data, F = 0;\n for (let V = 0, W = Q.length; V < W; V += 4)\n if (Q[V] > 0) {\n F = YU - Math.floor(V / 4 / YU);\n break;\n }\n t.canvas.width = t.canvas.height = 0;\n const a = F ? F / (F + c) : Lm;\n return n(this, GF).set(U, a), a;\n}, m(Il, fU), m(Il, GF, /* @__PURE__ */ new Map()), m(Il, TF, /* @__PURE__ */ new Map()), m(Il, Ms, /* @__PURE__ */ new WeakMap()), m(Il, VZ, null), m(Il, lc, /* @__PURE__ */ new Set()), Il);\nclass Dn {\n static textContent(U) {\n const l = [], d = {\n items: l,\n styles: /* @__PURE__ */ Object.create(null)\n };\n function t(Z) {\n var Q;\n if (!Z)\n return;\n let F = null;\n const c = Z.name;\n if (c === \"#text\")\n F = Z.value;\n else if (Dn.shouldBuildText(c))\n (Q = Z == null ? void 0 : Z.attributes) != null && Q.textContent ? F = Z.attributes.textContent : Z.value && (F = Z.value);\n else return;\n if (F !== null && l.push({\n str: F\n }), !!Z.children)\n for (const a of Z.children)\n t(a);\n }\n return t(U), d;\n }\n static shouldBuildText(U) {\n return !(U === \"textarea\" || U === \"input\" || U === \"option\" || U === \"select\");\n }\n}\nconst zm = 65536, km = 100, Im = 5e3, Dm = mU ? Pb : Ib, Em = mU ? fb : JN, rm = mU ? Hb : kb, Cm = mU ? Ab : GN;\nfunction wm(s = {}) {\n typeof s == \"string\" || s instanceof URL ? s = {\n url: s\n } : (s instanceof ArrayBuffer || ArrayBuffer.isView(s)) && (s = {\n data: s\n });\n const U = new GW(), {\n docId: l\n } = U, d = s.url ? xm(s.url) : null, t = s.data ? jm(s.data) : null, Z = s.httpHeaders || null, F = s.withCredentials === !0, c = s.password ?? null, Q = s.range instanceof ah ? s.range : null, a = Number.isInteger(s.rangeChunkSize) && s.rangeChunkSize > 0 ? s.rangeChunkSize : zm;\n let V = s.worker instanceof ca ? s.worker : null;\n const W = s.verbosity, i = typeof s.docBaseUrl == \"string\" && !eV(s.docBaseUrl) ? s.docBaseUrl : null, R = typeof s.cMapUrl == \"string\" ? s.cMapUrl : null, N = s.cMapPacked !== !1, b = s.CMapReaderFactory || Em, J = typeof s.standardFontDataUrl == \"string\" ? s.standardFontDataUrl : null, M = s.StandardFontDataFactory || Cm, G = s.stopAtErrors !== !0, T = Number.isInteger(s.maxImageSize) && s.maxImageSize > -1 ? s.maxImageSize : -1, u = s.isEvalSupported !== !1, X = typeof s.isOffscreenCanvasSupported == \"boolean\" ? s.isOffscreenCanvasSupported : !mU, Y = Number.isInteger(s.canvasMaxAreaInBytes) ? s.canvasMaxAreaInBytes : -1, o = typeof s.disableFontFace == \"boolean\" ? s.disableFontFace : mU, y = s.fontExtraProperties === !0, S = s.enableXfa === !0, p = s.ownerDocument || globalThis.document, L = s.disableRange === !0, I = s.disableStream === !0, D = s.disableAutoFetch === !0, r = s.pdfBug === !0, w = s.CanvasFactory || Dm, B = s.FilterFactory || rm, E = s.enableHWA === !0, g = Q ? Q.length : s.length ?? NaN, Rl = typeof s.useSystemFonts == \"boolean\" ? s.useSystemFonts : !mU && !o, Nl = typeof s.useWorkerFetch == \"boolean\" ? s.useWorkerFetch : b === JN && M === GN && R && J && an(R, document.baseURI) && an(J, document.baseURI);\n s.canvasFactory && sR(\"`canvasFactory`-instance option, please use `CanvasFactory` instead.\"), s.filterFactory && sR(\"`filterFactory`-instance option, please use `FilterFactory` instead.\");\n const gl = null;\n Gb(W);\n const bl = {\n canvasFactory: new w({\n ownerDocument: p,\n enableHWA: E\n }),\n filterFactory: new B({\n docId: l,\n ownerDocument: p\n }),\n cMapReaderFactory: Nl ? null : new b({\n baseUrl: R,\n isCompressed: N\n }),\n standardFontDataFactory: Nl ? null : new M({\n baseUrl: J\n })\n };\n if (!V) {\n const uU = {\n verbosity: W,\n port: AZ.workerPort\n };\n V = uU.port ? ca.fromPort(uU) : new ca(uU), U._worker = V;\n }\n const Jl = {\n docId: l,\n apiVersion: \"4.7.76\",\n data: t,\n password: c,\n disableAutoFetch: D,\n rangeChunkSize: a,\n length: g,\n docBaseUrl: i,\n enableXfa: S,\n evaluatorOptions: {\n maxImageSize: T,\n disableFontFace: o,\n ignoreErrors: G,\n isEvalSupported: u,\n isOffscreenCanvasSupported: X,\n canvasMaxAreaInBytes: Y,\n fontExtraProperties: y,\n useSystemFonts: Rl,\n cMapUrl: Nl ? R : null,\n standardFontDataUrl: Nl ? J : null\n }\n }, Td = {\n disableFontFace: o,\n fontExtraProperties: y,\n ownerDocument: p,\n pdfBug: r,\n styleElement: gl,\n loadingParams: {\n disableAutoFetch: D,\n enableXfa: S\n }\n };\n return V.promise.then(function() {\n if (U.destroyed)\n throw new Error(\"Loading aborted\");\n if (V.destroyed)\n throw new Error(\"Worker was destroyed\");\n const uU = V.messageHandler.sendWithPromise(\"GetDocRequest\", Jl, t ? [t.buffer] : null);\n let O;\n if (Q)\n O = new im(Q, {\n disableRange: L,\n disableStream: I\n });\n else if (!t) {\n if (!d)\n throw new Error(\"getDocument - no `url` parameter provided.\");\n let k;\n mU ? k = typeof fetch < \"u\" && typeof Response < \"u\" && \"body\" in Response.prototype && an(d) ? JR : um : k = an(d) ? JR : Jm, O = new k({\n url: d,\n length: g,\n httpHeaders: Z,\n withCredentials: F,\n rangeChunkSize: a,\n disableRange: L,\n disableStream: I\n });\n }\n return uU.then((k) => {\n if (U.destroyed)\n throw new Error(\"Loading aborted\");\n if (V.destroyed)\n throw new Error(\"Worker was destroyed\");\n const j = new Rn(l, k, V.port), dl = new vm(j, U, O, Td, bl);\n U._transport = dl, j.send(\"Ready\", null);\n });\n }).catch(U._capability.reject), U;\n}\nfunction xm(s) {\n if (s instanceof URL)\n return s.href;\n try {\n return new URL(s, window.location).href;\n } catch {\n if (mU && typeof s == \"string\")\n return s;\n }\n throw new Error(\"Invalid PDF url data: either string or URL-object is expected in the url property.\");\n}\nfunction jm(s) {\n if (mU && typeof Buffer < \"u\" && s instanceof Buffer)\n throw new Error(\"Please provide binary data as `Uint8Array`, rather than `Buffer`.\");\n if (s instanceof Uint8Array && s.byteLength === s.buffer.byteLength)\n return s;\n if (typeof s == \"string\")\n return NV(s);\n if (s instanceof ArrayBuffer || ArrayBuffer.isView(s) || typeof s == \"object\" && !isNaN(s == null ? void 0 : s.length))\n return new Uint8Array(s);\n throw new Error(\"Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property.\");\n}\nfunction GR(s) {\n return typeof s == \"object\" && Number.isInteger(s == null ? void 0 : s.num) && s.num >= 0 && Number.isInteger(s == null ? void 0 : s.gen) && s.gen >= 0;\n}\nvar lV;\nconst UV = class UV {\n constructor() {\n this._capability = Promise.withResolvers(), this._transport = null, this._worker = null, this.docId = `d${VU(UV, lV)._++}`, this.destroyed = !1, this.onPassword = null, this.onProgress = null;\n }\n get promise() {\n return this._capability.promise;\n }\n async destroy() {\n var U, l, d;\n this.destroyed = !0;\n try {\n (U = this._worker) != null && U.port && (this._worker._pendingDestroy = !0), await ((l = this._transport) == null ? void 0 : l.destroy());\n } catch (t) {\n throw (d = this._worker) != null && d.port && delete this._worker._pendingDestroy, t;\n }\n this._transport = null, this._worker && (this._worker.destroy(), this._worker = null);\n }\n};\nlV = new WeakMap(), m(UV, lV, 0);\nlet GW = UV, ah = class {\n constructor(U, l, d = !1, t = null) {\n this.length = U, this.initialData = l, this.progressiveDone = d, this.contentDispositionFilename = t, this._rangeListeners = [], this._progressListeners = [], this._progressiveReadListeners = [], this._progressiveDoneListeners = [], this._readyCapability = Promise.withResolvers();\n }\n addRangeListener(U) {\n this._rangeListeners.push(U);\n }\n addProgressListener(U) {\n this._progressListeners.push(U);\n }\n addProgressiveReadListener(U) {\n this._progressiveReadListeners.push(U);\n }\n addProgressiveDoneListener(U) {\n this._progressiveDoneListeners.push(U);\n }\n onDataRange(U, l) {\n for (const d of this._rangeListeners)\n d(U, l);\n }\n onDataProgress(U, l) {\n this._readyCapability.promise.then(() => {\n for (const d of this._progressListeners)\n d(U, l);\n });\n }\n onDataProgressiveRead(U) {\n this._readyCapability.promise.then(() => {\n for (const l of this._progressiveReadListeners)\n l(U);\n });\n }\n onDataProgressiveDone() {\n this._readyCapability.promise.then(() => {\n for (const U of this._progressiveDoneListeners)\n U();\n });\n }\n transportReady() {\n this._readyCapability.resolve();\n }\n requestDataRange(U, l) {\n Ol(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n }\n abort() {\n }\n};\nclass Om {\n constructor(U, l) {\n this._pdfInfo = U, this._transport = l;\n }\n get annotationStorage() {\n return this._transport.annotationStorage;\n }\n get canvasFactory() {\n return this._transport.canvasFactory;\n }\n get filterFactory() {\n return this._transport.filterFactory;\n }\n get numPages() {\n return this._pdfInfo.numPages;\n }\n get fingerprints() {\n return this._pdfInfo.fingerprints;\n }\n get isPureXfa() {\n return Ql(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n }\n get allXfaHtml() {\n return this._transport._htmlForXfa;\n }\n getPage(U) {\n return this._transport.getPage(U);\n }\n getPageIndex(U) {\n return this._transport.getPageIndex(U);\n }\n getDestinations() {\n return this._transport.getDestinations();\n }\n getDestination(U) {\n return this._transport.getDestination(U);\n }\n getPageLabels() {\n return this._transport.getPageLabels();\n }\n getPageLayout() {\n return this._transport.getPageLayout();\n }\n getPageMode() {\n return this._transport.getPageMode();\n }\n getViewerPreferences() {\n return this._transport.getViewerPreferences();\n }\n getOpenAction() {\n return this._transport.getOpenAction();\n }\n getAttachments() {\n return this._transport.getAttachments();\n }\n getJSActions() {\n return this._transport.getDocJSActions();\n }\n getOutline() {\n return this._transport.getOutline();\n }\n getOptionalContentConfig({\n intent: U = \"display\"\n } = {}) {\n const {\n renderingIntent: l\n } = this._transport.getRenderingIntent(U);\n return this._transport.getOptionalContentConfig(l);\n }\n getPermissions() {\n return this._transport.getPermissions();\n }\n getMetadata() {\n return this._transport.getMetadata();\n }\n getMarkInfo() {\n return this._transport.getMarkInfo();\n }\n getData() {\n return this._transport.getData();\n }\n saveDocument() {\n return this._transport.saveDocument();\n }\n getDownloadInfo() {\n return this._transport.downloadInfoCapability.promise;\n }\n cleanup(U = !1) {\n return this._transport.startCleanup(U || this.isPureXfa);\n }\n destroy() {\n return this.loadingTask.destroy();\n }\n cachedPageNumber(U) {\n return this._transport.cachedPageNumber(U);\n }\n get loadingParams() {\n return this._transport.loadingParams;\n }\n get loadingTask() {\n return this._transport.loadingTask;\n }\n getFieldObjects() {\n return this._transport.getFieldObjects();\n }\n hasJSActions() {\n return this._transport.hasJSActions();\n }\n getCalculationOrderIds() {\n return this._transport.getCalculationOrderIds();\n }\n}\nvar WZ, ht, Fd, X0, Fa;\nclass gm {\n constructor(U, l, d, t = !1) {\n m(this, Fd);\n m(this, WZ, null);\n m(this, ht, !1);\n this._pageIndex = U, this._pageInfo = l, this._transport = d, this._stats = t ? new nR() : null, this._pdfBug = t, this.commonObjs = d.commonObjs, this.objs = new Vh(), this._maybeCleanupAfterRender = !1, this._intentStates = /* @__PURE__ */ new Map(), this.destroyed = !1;\n }\n get pageNumber() {\n return this._pageIndex + 1;\n }\n get rotate() {\n return this._pageInfo.rotate;\n }\n get ref() {\n return this._pageInfo.ref;\n }\n get userUnit() {\n return this._pageInfo.userUnit;\n }\n get view() {\n return this._pageInfo.view;\n }\n getViewport({\n scale: U,\n rotation: l = this.rotate,\n offsetX: d = 0,\n offsetY: t = 0,\n dontFlip: Z = !1\n } = {}) {\n return new yQ({\n viewBox: this.view,\n scale: U,\n rotation: l,\n offsetX: d,\n offsetY: t,\n dontFlip: Z\n });\n }\n getAnnotations({\n intent: U = \"display\"\n } = {}) {\n const {\n renderingIntent: l\n } = this._transport.getRenderingIntent(U);\n return this._transport.getAnnotations(this._pageIndex, l);\n }\n getJSActions() {\n return this._transport.getPageJSActions(this._pageIndex);\n }\n get filterFactory() {\n return this._transport.filterFactory;\n }\n get isPureXfa() {\n return Ql(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n }\n async getXfa() {\n var U;\n return ((U = this._transport._htmlForXfa) == null ? void 0 : U.children[this._pageIndex]) || null;\n }\n render({\n canvasContext: U,\n viewport: l,\n intent: d = \"display\",\n annotationMode: t = _t.ENABLE,\n transform: Z = null,\n background: F = null,\n optionalContentConfigPromise: c = null,\n annotationCanvasMap: Q = null,\n pageColors: a = null,\n printAnnotationStorage: V = null,\n isEditing: W = !1\n }) {\n var u, X;\n (u = this._stats) == null || u.time(\"Overall\");\n const i = this._transport.getRenderingIntent(d, t, V, W), {\n renderingIntent: R,\n cacheKey: N\n } = i;\n e(this, ht, !1), h(this, Fd, Fa).call(this), c || (c = this._transport.getOptionalContentConfig(R));\n let b = this._intentStates.get(N);\n b || (b = /* @__PURE__ */ Object.create(null), this._intentStates.set(N, b)), b.streamReaderCancelTimeout && (clearTimeout(b.streamReaderCancelTimeout), b.streamReaderCancelTimeout = null);\n const J = !!(R & HU.PRINT);\n b.displayReadyCapability || (b.displayReadyCapability = Promise.withResolvers(), b.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: !1,\n separateAnnots: null\n }, (X = this._stats) == null || X.time(\"Page Request\"), this._pumpOperatorList(i));\n const M = (Y) => {\n var o;\n b.renderTasks.delete(G), (this._maybeCleanupAfterRender || J) && e(this, ht, !0), h(this, Fd, X0).call(this, !J), Y ? (G.capability.reject(Y), this._abortOperatorList({\n intentState: b,\n reason: Y instanceof Error ? Y : new Error(Y)\n })) : G.capability.resolve(), this._stats && (this._stats.timeEnd(\"Rendering\"), this._stats.timeEnd(\"Overall\"), (o = globalThis.Stats) != null && o.enabled && globalThis.Stats.add(this.pageNumber, this._stats));\n }, G = new SW({\n callback: M,\n params: {\n canvasContext: U,\n viewport: l,\n transform: Z,\n background: F\n },\n objs: this.objs,\n commonObjs: this.commonObjs,\n annotationCanvasMap: Q,\n operatorList: b.operatorList,\n pageIndex: this._pageIndex,\n canvasFactory: this._transport.canvasFactory,\n filterFactory: this._transport.filterFactory,\n useRequestAnimationFrame: !J,\n pdfBug: this._pdfBug,\n pageColors: a\n });\n (b.renderTasks || (b.renderTasks = /* @__PURE__ */ new Set())).add(G);\n const T = G.task;\n return Promise.all([b.displayReadyCapability.promise, c]).then(([Y, o]) => {\n var y;\n if (this.destroyed) {\n M();\n return;\n }\n if ((y = this._stats) == null || y.time(\"Rendering\"), !(o.renderingIntent & R))\n throw new Error(\"Must use the same `intent`-argument when calling the `PDFPageProxy.render` and `PDFDocumentProxy.getOptionalContentConfig` methods.\");\n G.initializeGraphics({\n transparency: Y,\n optionalContentConfig: o\n }), G.operatorListChanged();\n }).catch(M), T;\n }\n getOperatorList({\n intent: U = \"display\",\n annotationMode: l = _t.ENABLE,\n printAnnotationStorage: d = null,\n isEditing: t = !1\n } = {}) {\n var a;\n function Z() {\n c.operatorList.lastChunk && (c.opListReadCapability.resolve(c.operatorList), c.renderTasks.delete(Q));\n }\n const F = this._transport.getRenderingIntent(U, l, d, t, !0);\n let c = this._intentStates.get(F.cacheKey);\n c || (c = /* @__PURE__ */ Object.create(null), this._intentStates.set(F.cacheKey, c));\n let Q;\n return c.opListReadCapability || (Q = /* @__PURE__ */ Object.create(null), Q.operatorListChanged = Z, c.opListReadCapability = Promise.withResolvers(), (c.renderTasks || (c.renderTasks = /* @__PURE__ */ new Set())).add(Q), c.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: !1,\n separateAnnots: null\n }, (a = this._stats) == null || a.time(\"Page Request\"), this._pumpOperatorList(F)), c.opListReadCapability.promise;\n }\n streamTextContent({\n includeMarkedContent: U = !1,\n disableNormalization: l = !1\n } = {}) {\n return this._transport.messageHandler.sendWithStream(\"GetTextContent\", {\n pageIndex: this._pageIndex,\n includeMarkedContent: U === !0,\n disableNormalization: l === !0\n }, {\n highWaterMark: 100,\n size(t) {\n return t.items.length;\n }\n });\n }\n getTextContent(U = {}) {\n if (this._transport._htmlForXfa)\n return this.getXfa().then((d) => Dn.textContent(d));\n const l = this.streamTextContent(U);\n return new Promise(function(d, t) {\n function Z() {\n F.read().then(function({\n value: Q,\n done: a\n }) {\n if (a) {\n d(c);\n return;\n }\n c.lang ?? (c.lang = Q.lang), Object.assign(c.styles, Q.styles), c.items.push(...Q.items), Z();\n }, t);\n }\n const F = l.getReader(), c = {\n items: [],\n styles: /* @__PURE__ */ Object.create(null),\n lang: null\n };\n Z();\n });\n }\n getStructTree() {\n return this._transport.getStructTree(this._pageIndex);\n }\n _destroy() {\n this.destroyed = !0;\n const U = [];\n for (const l of this._intentStates.values())\n if (this._abortOperatorList({\n intentState: l,\n reason: new Error(\"Page was destroyed.\"),\n force: !0\n }), !l.opListReadCapability)\n for (const d of l.renderTasks)\n U.push(d.completed), d.cancel();\n return this.objs.clear(), e(this, ht, !1), h(this, Fd, Fa).call(this), Promise.all(U);\n }\n cleanup(U = !1) {\n e(this, ht, !0);\n const l = h(this, Fd, X0).call(this, !1);\n return U && l && this._stats && (this._stats = new nR()), l;\n }\n _startRenderPage(U, l) {\n var t, Z;\n const d = this._intentStates.get(l);\n d && ((t = this._stats) == null || t.timeEnd(\"Page Request\"), (Z = d.displayReadyCapability) == null || Z.resolve(U));\n }\n _renderPageChunk(U, l) {\n for (let d = 0, t = U.length; d < t; d++)\n l.operatorList.fnArray.push(U.fnArray[d]), l.operatorList.argsArray.push(U.argsArray[d]);\n l.operatorList.lastChunk = U.lastChunk, l.operatorList.separateAnnots = U.separateAnnots;\n for (const d of l.renderTasks)\n d.operatorListChanged();\n U.lastChunk && h(this, Fd, X0).call(this, !0);\n }\n _pumpOperatorList({\n renderingIntent: U,\n cacheKey: l,\n annotationStorageSerializable: d,\n modifiedIds: t\n }) {\n const {\n map: Z,\n transfer: F\n } = d, Q = this._transport.messageHandler.sendWithStream(\"GetOperatorList\", {\n pageIndex: this._pageIndex,\n intent: U,\n cacheKey: l,\n annotationStorage: Z,\n modifiedIds: t\n }, F).getReader(), a = this._intentStates.get(l);\n a.streamReader = Q;\n const V = () => {\n Q.read().then(({\n value: W,\n done: i\n }) => {\n if (i) {\n a.streamReader = null;\n return;\n }\n this._transport.destroyed || (this._renderPageChunk(W, a), V());\n }, (W) => {\n if (a.streamReader = null, !this._transport.destroyed) {\n if (a.operatorList) {\n a.operatorList.lastChunk = !0;\n for (const i of a.renderTasks)\n i.operatorListChanged();\n h(this, Fd, X0).call(this, !0);\n }\n if (a.displayReadyCapability)\n a.displayReadyCapability.reject(W);\n else if (a.opListReadCapability)\n a.opListReadCapability.reject(W);\n else\n throw W;\n }\n });\n };\n V();\n }\n _abortOperatorList({\n intentState: U,\n reason: l,\n force: d = !1\n }) {\n if (U.streamReader) {\n if (U.streamReaderCancelTimeout && (clearTimeout(U.streamReaderCancelTimeout), U.streamReaderCancelTimeout = null), !d) {\n if (U.renderTasks.size > 0)\n return;\n if (l instanceof xi) {\n let t = km;\n l.extraDelay > 0 && l.extraDelay < 1e3 && (t += l.extraDelay), U.streamReaderCancelTimeout = setTimeout(() => {\n U.streamReaderCancelTimeout = null, this._abortOperatorList({\n intentState: U,\n reason: l,\n force: !0\n });\n }, t);\n return;\n }\n }\n if (U.streamReader.cancel(new b0(l.message)).catch(() => {\n }), U.streamReader = null, !this._transport.destroyed) {\n for (const [t, Z] of this._intentStates)\n if (Z === U) {\n this._intentStates.delete(t);\n break;\n }\n this.cleanup();\n }\n }\n }\n get stats() {\n return this._stats;\n }\n}\nWZ = new WeakMap(), ht = new WeakMap(), Fd = new WeakSet(), X0 = function(U = !1) {\n if (h(this, Fd, Fa).call(this), !n(this, ht) || this.destroyed)\n return !1;\n if (U)\n return e(this, WZ, setTimeout(() => {\n e(this, WZ, null), h(this, Fd, X0).call(this, !1);\n }, Im)), !1;\n for (const {\n renderTasks: l,\n operatorList: d\n } of this._intentStates.values())\n if (l.size > 0 || !d.lastChunk)\n return !1;\n return this._intentStates.clear(), this.objs.clear(), e(this, ht, !1), !0;\n}, Fa = function() {\n n(this, WZ) && (clearTimeout(n(this, WZ)), e(this, WZ, null));\n};\nvar SF, dV;\nclass Km {\n constructor() {\n m(this, SF, /* @__PURE__ */ new Set());\n m(this, dV, Promise.resolve());\n }\n postMessage(U, l) {\n const d = {\n data: structuredClone(U, l ? {\n transfer: l\n } : null)\n };\n n(this, dV).then(() => {\n for (const t of n(this, SF))\n t.call(this, d);\n });\n }\n addEventListener(U, l) {\n n(this, SF).add(l);\n }\n removeEventListener(U, l) {\n n(this, SF).delete(l);\n }\n terminate() {\n n(this, SF).clear();\n }\n}\nSF = new WeakMap(), dV = new WeakMap();\nvar Gl, tV, XF, uF, Uc, na, dc, sa;\nlet ca = (Gl = class {\n constructor({\n name: U = null,\n port: l = null,\n verbosity: d = Tb()\n } = {}) {\n m(this, Uc);\n var t;\n if (this.name = U, this.destroyed = !1, this.verbosity = d, this._readyCapability = Promise.withResolvers(), this._port = null, this._webWorker = null, this._messageHandler = null, l) {\n if ((t = n(Gl, uF)) != null && t.has(l))\n throw new Error(\"Cannot use more than one PDFWorker per port.\");\n (n(Gl, uF) || e(Gl, uF, /* @__PURE__ */ new WeakMap())).set(l, this), this._initializeFromPort(l);\n return;\n }\n this._initialize();\n }\n get promise() {\n return mU ? Promise.all([wZ.promise, this._readyCapability.promise]) : this._readyCapability.promise;\n }\n get port() {\n return this._port;\n }\n get messageHandler() {\n return this._messageHandler;\n }\n _initializeFromPort(U) {\n this._port = U, this._messageHandler = new Rn(\"main\", \"worker\", U), this._messageHandler.on(\"ready\", function() {\n }), h(this, Uc, na).call(this);\n }\n _initialize() {\n if (n(Gl, XF) || n(Gl, dc, sa)) {\n this._setupFakeWorker();\n return;\n }\n let {\n workerSrc: U\n } = Gl;\n try {\n Gl._isSameOrigin(window.location.href, U) || (U = Gl._createCDNWrapper(new URL(U, window.location).href));\n const l = new Worker(U, {\n type: \"module\"\n }), d = new Rn(\"main\", \"worker\", l), t = () => {\n Z.abort(), d.destroy(), l.terminate(), this.destroyed ? this._readyCapability.reject(new Error(\"Worker was destroyed\")) : this._setupFakeWorker();\n }, Z = new AbortController();\n l.addEventListener(\"error\", () => {\n this._webWorker || t();\n }, {\n signal: Z.signal\n }), d.on(\"test\", (c) => {\n if (Z.abort(), this.destroyed || !c) {\n t();\n return;\n }\n this._messageHandler = d, this._port = l, this._webWorker = l, h(this, Uc, na).call(this);\n }), d.on(\"ready\", (c) => {\n if (Z.abort(), this.destroyed) {\n t();\n return;\n }\n try {\n F();\n } catch {\n this._setupFakeWorker();\n }\n });\n const F = () => {\n const c = new Uint8Array();\n d.send(\"test\", c, [c.buffer]);\n };\n F();\n return;\n } catch {\n iV(\"The worker has been disabled.\");\n }\n this._setupFakeWorker();\n }\n _setupFakeWorker() {\n n(Gl, XF) || (Zl(\"Setting up fake worker.\"), e(Gl, XF, !0)), Gl._setupFakeWorkerGlobal.then((U) => {\n if (this.destroyed) {\n this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n return;\n }\n const l = new Km();\n this._port = l;\n const d = `fake${VU(Gl, tV)._++}`, t = new Rn(d + \"_worker\", d, l);\n U.setup(t, l), this._messageHandler = new Rn(d, d + \"_worker\", l), h(this, Uc, na).call(this);\n }).catch((U) => {\n this._readyCapability.reject(new Error(`Setting up fake worker failed: \"${U.message}\".`));\n });\n }\n destroy() {\n var U;\n this.destroyed = !0, this._webWorker && (this._webWorker.terminate(), this._webWorker = null), (U = n(Gl, uF)) == null || U.delete(this._port), this._port = null, this._messageHandler && (this._messageHandler.destroy(), this._messageHandler = null);\n }\n static fromPort(U) {\n var d;\n if (!(U != null && U.port))\n throw new Error(\"PDFWorker.fromPort - invalid method signature.\");\n const l = (d = n(this, uF)) == null ? void 0 : d.get(U.port);\n if (l) {\n if (l._pendingDestroy)\n throw new Error(\"PDFWorker.fromPort - the worker is being destroyed.\\nPlease remember to await `PDFDocumentLoadingTask.destroy()`-calls.\");\n return l;\n }\n return new Gl(U);\n }\n static get workerSrc() {\n if (AZ.workerSrc)\n return AZ.workerSrc;\n throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n }\n static get _setupFakeWorkerGlobal() {\n return Ql(this, \"_setupFakeWorkerGlobal\", (async () => n(this, dc, sa) ? n(this, dc, sa) : (await import(\n /*webpackIgnore: true*/\n this.workerSrc\n )).WorkerMessageHandler)());\n }\n}, tV = new WeakMap(), XF = new WeakMap(), uF = new WeakMap(), Uc = new WeakSet(), na = function() {\n this._readyCapability.resolve(), this._messageHandler.send(\"configure\", {\n verbosity: this.verbosity\n });\n}, dc = new WeakSet(), sa = function() {\n var U;\n try {\n return ((U = globalThis.pdfjsWorker) == null ? void 0 : U.WorkerMessageHandler) || null;\n } catch {\n return null;\n }\n}, m(Gl, dc), m(Gl, tV, 0), m(Gl, XF, !1), m(Gl, uF), mU && (e(Gl, XF, !0), AZ.workerSrc || (AZ.workerSrc = \"./pdf.worker.mjs\")), Gl._isSameOrigin = (U, l) => {\n let d;\n try {\n if (d = new URL(U), !d.origin || d.origin === \"null\")\n return !1;\n } catch {\n return !1;\n }\n const t = new URL(l, d);\n return d.origin === t.origin;\n}, Gl._createCDNWrapper = (U) => {\n const l = `await import(\"${U}\");`;\n return URL.createObjectURL(new Blob([l], {\n type: \"text/javascript\"\n }));\n}, Gl);\nvar et, Ed, tc, Zc, rd, YF, Nn;\nclass vm {\n constructor(U, l, d, t, Z) {\n m(this, YF);\n m(this, et, /* @__PURE__ */ new Map());\n m(this, Ed, /* @__PURE__ */ new Map());\n m(this, tc, /* @__PURE__ */ new Map());\n m(this, Zc, /* @__PURE__ */ new Map());\n m(this, rd, null);\n this.messageHandler = U, this.loadingTask = l, this.commonObjs = new Vh(), this.fontLoader = new Kb({\n ownerDocument: t.ownerDocument,\n styleElement: t.styleElement\n }), this.loadingParams = t.loadingParams, this._params = t, this.canvasFactory = Z.canvasFactory, this.filterFactory = Z.filterFactory, this.cMapReaderFactory = Z.cMapReaderFactory, this.standardFontDataFactory = Z.standardFontDataFactory, this.destroyed = !1, this.destroyCapability = null, this._networkStream = d, this._fullReader = null, this._lastProgress = null, this.downloadInfoCapability = Promise.withResolvers(), this.setupMessageHandler();\n }\n get annotationStorage() {\n return Ql(this, \"annotationStorage\", new gi());\n }\n getRenderingIntent(U, l = _t.ENABLE, d = null, t = !1, Z = !1) {\n let F = HU.DISPLAY, c = WW;\n switch (U) {\n case \"any\":\n F = HU.ANY;\n break;\n case \"display\":\n break;\n case \"print\":\n F = HU.PRINT;\n break;\n default:\n Zl(`getRenderingIntent - invalid intent: ${U}`);\n }\n const Q = F & HU.PRINT && d instanceof AN ? d : this.annotationStorage;\n switch (l) {\n case _t.DISABLE:\n F += HU.ANNOTATIONS_DISABLE;\n break;\n case _t.ENABLE:\n break;\n case _t.ENABLE_FORMS:\n F += HU.ANNOTATIONS_FORMS;\n break;\n case _t.ENABLE_STORAGE:\n F += HU.ANNOTATIONS_STORAGE, c = Q.serializable;\n break;\n default:\n Zl(`getRenderingIntent - invalid annotationMode: ${l}`);\n }\n t && (F += HU.IS_EDITING), Z && (F += HU.OPLIST);\n const {\n ids: a,\n hash: V\n } = Q.modifiedIds, W = [F, c.hash, V];\n return {\n renderingIntent: F,\n cacheKey: W.join(\"_\"),\n annotationStorageSerializable: c,\n modifiedIds: a\n };\n }\n destroy() {\n var d;\n if (this.destroyCapability)\n return this.destroyCapability.promise;\n this.destroyed = !0, this.destroyCapability = Promise.withResolvers(), (d = n(this, rd)) == null || d.reject(new Error(\"Worker was destroyed during onPassword callback\"));\n const U = [];\n for (const t of n(this, Ed).values())\n U.push(t._destroy());\n n(this, Ed).clear(), n(this, tc).clear(), n(this, Zc).clear(), this.hasOwnProperty(\"annotationStorage\") && this.annotationStorage.resetModified();\n const l = this.messageHandler.sendWithPromise(\"Terminate\", null);\n return U.push(l), Promise.all(U).then(() => {\n var t;\n this.commonObjs.clear(), this.fontLoader.clear(), n(this, et).clear(), this.filterFactory.destroy(), mW.cleanup(), (t = this._networkStream) == null || t.cancelAllRequests(new b0(\"Worker was terminated.\")), this.messageHandler && (this.messageHandler.destroy(), this.messageHandler = null), this.destroyCapability.resolve();\n }, this.destroyCapability.reject), this.destroyCapability.promise;\n }\n setupMessageHandler() {\n const {\n messageHandler: U,\n loadingTask: l\n } = this;\n U.on(\"GetReader\", (d, t) => {\n Al(this._networkStream, \"GetReader - no `IPDFStream` instance available.\"), this._fullReader = this._networkStream.getFullReader(), this._fullReader.onProgress = (Z) => {\n this._lastProgress = {\n loaded: Z.loaded,\n total: Z.total\n };\n }, t.onPull = () => {\n this._fullReader.read().then(function({\n value: Z,\n done: F\n }) {\n if (F) {\n t.close();\n return;\n }\n Al(Z instanceof ArrayBuffer, \"GetReader - expected an ArrayBuffer.\"), t.enqueue(new Uint8Array(Z), 1, [Z]);\n }).catch((Z) => {\n t.error(Z);\n });\n }, t.onCancel = (Z) => {\n this._fullReader.cancel(Z), t.ready.catch((F) => {\n if (!this.destroyed)\n throw F;\n });\n };\n }), U.on(\"ReaderHeadersReady\", (d) => {\n const t = Promise.withResolvers(), Z = this._fullReader;\n return Z.headersReady.then(() => {\n var F;\n (!Z.isStreamingSupported || !Z.isRangeSupported) && (this._lastProgress && ((F = l.onProgress) == null || F.call(l, this._lastProgress)), Z.onProgress = (c) => {\n var Q;\n (Q = l.onProgress) == null || Q.call(l, {\n loaded: c.loaded,\n total: c.total\n });\n }), t.resolve({\n isStreamingSupported: Z.isStreamingSupported,\n isRangeSupported: Z.isRangeSupported,\n contentLength: Z.contentLength\n });\n }, t.reject), t.promise;\n }), U.on(\"GetRangeReader\", (d, t) => {\n Al(this._networkStream, \"GetRangeReader - no `IPDFStream` instance available.\");\n const Z = this._networkStream.getRangeReader(d.begin, d.end);\n if (!Z) {\n t.close();\n return;\n }\n t.onPull = () => {\n Z.read().then(function({\n value: F,\n done: c\n }) {\n if (c) {\n t.close();\n return;\n }\n Al(F instanceof ArrayBuffer, \"GetRangeReader - expected an ArrayBuffer.\"), t.enqueue(new Uint8Array(F), 1, [F]);\n }).catch((F) => {\n t.error(F);\n });\n }, t.onCancel = (F) => {\n Z.cancel(F), t.ready.catch((c) => {\n if (!this.destroyed)\n throw c;\n });\n };\n }), U.on(\"GetDoc\", ({\n pdfInfo: d\n }) => {\n this._numPages = d.numPages, this._htmlForXfa = d.htmlForXfa, delete d.htmlForXfa, l._capability.resolve(new Om(d, this));\n }), U.on(\"DocException\", function(d) {\n let t;\n switch (d.name) {\n case \"PasswordException\":\n t = new jV(d.message, d.code);\n break;\n case \"InvalidPDFException\":\n t = new RN(d.message);\n break;\n case \"MissingPDFException\":\n t = new e0(d.message);\n break;\n case \"UnexpectedResponseException\":\n t = new RV(d.message, d.status);\n break;\n case \"UnknownErrorException\":\n t = new OV(d.message, d.details);\n break;\n default:\n Ol(\"DocException - expected a valid Error.\");\n }\n l._capability.reject(t);\n }), U.on(\"PasswordRequest\", (d) => {\n if (e(this, rd, Promise.withResolvers()), l.onPassword) {\n const t = (Z) => {\n Z instanceof Error ? n(this, rd).reject(Z) : n(this, rd).resolve({\n password: Z\n });\n };\n try {\n l.onPassword(t, d.code);\n } catch (Z) {\n n(this, rd).reject(Z);\n }\n } else\n n(this, rd).reject(new jV(d.message, d.code));\n return n(this, rd).promise;\n }), U.on(\"DataLoaded\", (d) => {\n var t;\n (t = l.onProgress) == null || t.call(l, {\n loaded: d.length,\n total: d.length\n }), this.downloadInfoCapability.resolve(d);\n }), U.on(\"StartRenderPage\", (d) => {\n if (this.destroyed)\n return;\n n(this, Ed).get(d.pageIndex)._startRenderPage(d.transparency, d.cacheKey);\n }), U.on(\"commonobj\", ([d, t, Z]) => {\n var F;\n if (this.destroyed || this.commonObjs.has(d))\n return null;\n switch (t) {\n case \"Font\":\n const {\n disableFontFace: c,\n fontExtraProperties: Q,\n pdfBug: a\n } = this._params;\n if (\"error\" in Z) {\n const R = Z.error;\n Zl(`Error during font loading: ${R}`), this.commonObjs.resolve(d, R);\n break;\n }\n const V = a && ((F = globalThis.FontInspector) != null && F.enabled) ? (R, N) => globalThis.FontInspector.fontAdded(R, N) : null, W = new vb(Z, {\n disableFontFace: c,\n inspectFont: V\n });\n this.fontLoader.bind(W).catch(() => U.sendWithPromise(\"FontFallback\", {\n id: d\n })).finally(() => {\n !Q && W.data && (W.data = null), this.commonObjs.resolve(d, W);\n });\n break;\n case \"CopyLocalImage\":\n const {\n imageRef: i\n } = Z;\n Al(i, \"The imageRef must be defined.\");\n for (const R of n(this, Ed).values())\n for (const [, N] of R.objs)\n if ((N == null ? void 0 : N.ref) === i)\n return N.dataLen ? (this.commonObjs.resolve(d, structuredClone(N)), N.dataLen) : null;\n break;\n case \"FontPath\":\n case \"Image\":\n case \"Pattern\":\n this.commonObjs.resolve(d, Z);\n break;\n default:\n throw new Error(`Got unknown common object type ${t}`);\n }\n return null;\n }), U.on(\"obj\", ([d, t, Z, F]) => {\n var Q;\n if (this.destroyed)\n return;\n const c = n(this, Ed).get(t);\n if (!c.objs.has(d)) {\n if (c._intentStates.size === 0) {\n (Q = F == null ? void 0 : F.bitmap) == null || Q.close();\n return;\n }\n switch (Z) {\n case \"Image\":\n c.objs.resolve(d, F), (F == null ? void 0 : F.dataLen) > bb && (c._maybeCleanupAfterRender = !0);\n break;\n case \"Pattern\":\n c.objs.resolve(d, F);\n break;\n default:\n throw new Error(`Got unknown object type ${Z}`);\n }\n }\n }), U.on(\"DocProgress\", (d) => {\n var t;\n this.destroyed || (t = l.onProgress) == null || t.call(l, {\n loaded: d.loaded,\n total: d.total\n });\n }), U.on(\"FetchBuiltInCMap\", (d) => this.destroyed ? Promise.reject(new Error(\"Worker was destroyed.\")) : this.cMapReaderFactory ? this.cMapReaderFactory.fetch(d) : Promise.reject(new Error(\"CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.\"))), U.on(\"FetchStandardFontData\", (d) => this.destroyed ? Promise.reject(new Error(\"Worker was destroyed.\")) : this.standardFontDataFactory ? this.standardFontDataFactory.fetch(d) : Promise.reject(new Error(\"StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.\")));\n }\n getData() {\n return this.messageHandler.sendWithPromise(\"GetData\", null);\n }\n saveDocument() {\n var d;\n this.annotationStorage.size <= 0 && Zl(\"saveDocument called while `annotationStorage` is empty, please use the getData-method instead.\");\n const {\n map: U,\n transfer: l\n } = this.annotationStorage.serializable;\n return this.messageHandler.sendWithPromise(\"SaveDocument\", {\n isPureXfa: !!this._htmlForXfa,\n numPages: this._numPages,\n annotationStorage: U,\n filename: ((d = this._fullReader) == null ? void 0 : d.filename) ?? null\n }, l).finally(() => {\n this.annotationStorage.resetModified();\n });\n }\n getPage(U) {\n if (!Number.isInteger(U) || U <= 0 || U > this._numPages)\n return Promise.reject(new Error(\"Invalid page request.\"));\n const l = U - 1, d = n(this, tc).get(l);\n if (d)\n return d;\n const t = this.messageHandler.sendWithPromise(\"GetPage\", {\n pageIndex: l\n }).then((Z) => {\n if (this.destroyed)\n throw new Error(\"Transport destroyed\");\n Z.refStr && n(this, Zc).set(Z.refStr, U);\n const F = new gm(l, Z, this, this._params.pdfBug);\n return n(this, Ed).set(l, F), F;\n });\n return n(this, tc).set(l, t), t;\n }\n getPageIndex(U) {\n return GR(U) ? this.messageHandler.sendWithPromise(\"GetPageIndex\", {\n num: U.num,\n gen: U.gen\n }) : Promise.reject(new Error(\"Invalid pageIndex request.\"));\n }\n getAnnotations(U, l) {\n return this.messageHandler.sendWithPromise(\"GetAnnotations\", {\n pageIndex: U,\n intent: l\n });\n }\n getFieldObjects() {\n return h(this, YF, Nn).call(this, \"GetFieldObjects\");\n }\n hasJSActions() {\n return h(this, YF, Nn).call(this, \"HasJSActions\");\n }\n getCalculationOrderIds() {\n return this.messageHandler.sendWithPromise(\"GetCalculationOrderIds\", null);\n }\n getDestinations() {\n return this.messageHandler.sendWithPromise(\"GetDestinations\", null);\n }\n getDestination(U) {\n return typeof U != \"string\" ? Promise.reject(new Error(\"Invalid destination request.\")) : this.messageHandler.sendWithPromise(\"GetDestination\", {\n id: U\n });\n }\n getPageLabels() {\n return this.messageHandler.sendWithPromise(\"GetPageLabels\", null);\n }\n getPageLayout() {\n return this.messageHandler.sendWithPromise(\"GetPageLayout\", null);\n }\n getPageMode() {\n return this.messageHandler.sendWithPromise(\"GetPageMode\", null);\n }\n getViewerPreferences() {\n return this.messageHandler.sendWithPromise(\"GetViewerPreferences\", null);\n }\n getOpenAction() {\n return this.messageHandler.sendWithPromise(\"GetOpenAction\", null);\n }\n getAttachments() {\n return this.messageHandler.sendWithPromise(\"GetAttachments\", null);\n }\n getDocJSActions() {\n return h(this, YF, Nn).call(this, \"GetDocJSActions\");\n }\n getPageJSActions(U) {\n return this.messageHandler.sendWithPromise(\"GetPageJSActions\", {\n pageIndex: U\n });\n }\n getStructTree(U) {\n return this.messageHandler.sendWithPromise(\"GetStructTree\", {\n pageIndex: U\n });\n }\n getOutline() {\n return this.messageHandler.sendWithPromise(\"GetOutline\", null);\n }\n getOptionalContentConfig(U) {\n return h(this, YF, Nn).call(this, \"GetOptionalContentConfig\").then((l) => new Wm(l, U));\n }\n getPermissions() {\n return this.messageHandler.sendWithPromise(\"GetPermissions\", null);\n }\n getMetadata() {\n const U = \"GetMetadata\", l = n(this, et).get(U);\n if (l)\n return l;\n const d = this.messageHandler.sendWithPromise(U, null).then((t) => {\n var Z, F;\n return {\n info: t[0],\n metadata: t[1] ? new am(t[1]) : null,\n contentDispositionFilename: ((Z = this._fullReader) == null ? void 0 : Z.filename) ?? null,\n contentLength: ((F = this._fullReader) == null ? void 0 : F.contentLength) ?? null\n };\n });\n return n(this, et).set(U, d), d;\n }\n getMarkInfo() {\n return this.messageHandler.sendWithPromise(\"GetMarkInfo\", null);\n }\n async startCleanup(U = !1) {\n if (!this.destroyed) {\n await this.messageHandler.sendWithPromise(\"Cleanup\", null);\n for (const l of n(this, Ed).values())\n if (!l.cleanup())\n throw new Error(`startCleanup: Page ${l.pageNumber} is currently rendering.`);\n this.commonObjs.clear(), U || this.fontLoader.clear(), n(this, et).clear(), this.filterFactory.destroy(!0), mW.cleanup();\n }\n }\n cachedPageNumber(U) {\n if (!GR(U))\n return null;\n const l = U.gen === 0 ? `${U.num}R` : `${U.num}R${U.gen}`;\n return n(this, Zc).get(l) ?? null;\n }\n}\net = new WeakMap(), Ed = new WeakMap(), tc = new WeakMap(), Zc = new WeakMap(), rd = new WeakMap(), YF = new WeakSet(), Nn = function(U, l = null) {\n const d = n(this, et).get(U);\n if (d)\n return d;\n const t = this.messageHandler.sendWithPromise(U, l);\n return n(this, et).set(U, t), t;\n};\nconst rQ = Symbol(\"INITIAL_DATA\");\nvar Nd, Js, TW;\nclass Vh {\n constructor() {\n m(this, Js);\n m(this, Nd, /* @__PURE__ */ Object.create(null));\n }\n get(U, l = null) {\n if (l) {\n const t = h(this, Js, TW).call(this, U);\n return t.promise.then(() => l(t.data)), null;\n }\n const d = n(this, Nd)[U];\n if (!d || d.data === rQ)\n throw new Error(`Requesting object that isn't resolved yet ${U}.`);\n return d.data;\n }\n has(U) {\n const l = n(this, Nd)[U];\n return !!l && l.data !== rQ;\n }\n resolve(U, l = null) {\n const d = h(this, Js, TW).call(this, U);\n d.data = l, d.resolve();\n }\n clear() {\n var U;\n for (const l in n(this, Nd)) {\n const {\n data: d\n } = n(this, Nd)[l];\n (U = d == null ? void 0 : d.bitmap) == null || U.close();\n }\n e(this, Nd, /* @__PURE__ */ Object.create(null));\n }\n *[Symbol.iterator]() {\n for (const U in n(this, Nd)) {\n const {\n data: l\n } = n(this, Nd)[U];\n l !== rQ && (yield [U, l]);\n }\n }\n}\nNd = new WeakMap(), Js = new WeakSet(), TW = function(U) {\n var l;\n return (l = n(this, Nd))[U] || (l[U] = {\n ...Promise.withResolvers(),\n data: rQ\n });\n};\nvar iZ;\nclass Hm {\n constructor(U) {\n m(this, iZ, null);\n e(this, iZ, U), this.onContinue = null;\n }\n get promise() {\n return n(this, iZ).capability.promise;\n }\n cancel(U = 0) {\n n(this, iZ).cancel(null, U);\n }\n get separateAnnots() {\n const {\n separateAnnots: U\n } = n(this, iZ).operatorList;\n if (!U)\n return !1;\n const {\n annotationCanvasMap: l\n } = n(this, iZ);\n return U.form || U.canvas && (l == null ? void 0 : l.size) > 0;\n }\n}\niZ = new WeakMap();\nvar RZ, oF;\nconst _Z = class _Z {\n constructor({\n callback: U,\n params: l,\n objs: d,\n commonObjs: t,\n annotationCanvasMap: Z,\n operatorList: F,\n pageIndex: c,\n canvasFactory: Q,\n filterFactory: a,\n useRequestAnimationFrame: V = !1,\n pdfBug: W = !1,\n pageColors: i = null\n }) {\n m(this, RZ, null);\n this.callback = U, this.params = l, this.objs = d, this.commonObjs = t, this.annotationCanvasMap = Z, this.operatorListIdx = null, this.operatorList = F, this._pageIndex = c, this.canvasFactory = Q, this.filterFactory = a, this._pdfBug = W, this.pageColors = i, this.running = !1, this.graphicsReadyCallback = null, this.graphicsReady = !1, this._useRequestAnimationFrame = V === !0 && typeof window < \"u\", this.cancelled = !1, this.capability = Promise.withResolvers(), this.task = new Hm(this), this._cancelBound = this.cancel.bind(this), this._continueBound = this._continue.bind(this), this._scheduleNextBound = this._scheduleNext.bind(this), this._nextBound = this._next.bind(this), this._canvas = l.canvasContext.canvas;\n }\n get completed() {\n return this.capability.promise.catch(function() {\n });\n }\n initializeGraphics({\n transparency: U = !1,\n optionalContentConfig: l\n }) {\n var c, Q;\n if (this.cancelled)\n return;\n if (this._canvas) {\n if (n(_Z, oF).has(this._canvas))\n throw new Error(\"Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed.\");\n n(_Z, oF).add(this._canvas);\n }\n this._pdfBug && ((c = globalThis.StepperManager) != null && c.enabled) && (this.stepper = globalThis.StepperManager.create(this._pageIndex), this.stepper.init(this.operatorList), this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint());\n const {\n canvasContext: d,\n viewport: t,\n transform: Z,\n background: F\n } = this.params;\n this.gfx = new y0(d, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {\n optionalContentConfig: l\n }, this.annotationCanvasMap, this.pageColors), this.gfx.beginDrawing({\n transform: Z,\n viewport: t,\n transparency: U,\n background: F\n }), this.operatorListIdx = 0, this.graphicsReady = !0, (Q = this.graphicsReadyCallback) == null || Q.call(this);\n }\n cancel(U = null, l = 0) {\n var d;\n this.running = !1, this.cancelled = !0, (d = this.gfx) == null || d.endDrawing(), n(this, RZ) && (window.cancelAnimationFrame(n(this, RZ)), e(this, RZ, null)), n(_Z, oF).delete(this._canvas), this.callback(U || new xi(`Rendering cancelled, page ${this._pageIndex + 1}`, l));\n }\n operatorListChanged() {\n var U;\n if (!this.graphicsReady) {\n this.graphicsReadyCallback || (this.graphicsReadyCallback = this._continueBound);\n return;\n }\n (U = this.stepper) == null || U.updateOperatorList(this.operatorList), !this.running && this._continue();\n }\n _continue() {\n this.running = !0, !this.cancelled && (this.task.onContinue ? this.task.onContinue(this._scheduleNextBound) : this._scheduleNext());\n }\n _scheduleNext() {\n this._useRequestAnimationFrame ? e(this, RZ, window.requestAnimationFrame(() => {\n e(this, RZ, null), this._nextBound().catch(this._cancelBound);\n })) : Promise.resolve().then(this._nextBound).catch(this._cancelBound);\n }\n async _next() {\n this.cancelled || (this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper), this.operatorListIdx === this.operatorList.argsArray.length && (this.running = !1, this.operatorList.lastChunk && (this.gfx.endDrawing(), n(_Z, oF).delete(this._canvas), this.callback())));\n }\n};\nRZ = new WeakMap(), oF = new WeakMap(), m(_Z, oF, /* @__PURE__ */ new WeakSet());\nlet SW = _Z;\nconst Pm = \"4.7.76\", fm = \"8b73b828b\";\nVl(670);\nfunction TR(s) {\n return Math.floor(Math.max(0, Math.min(1, s)) * 255).toString(16).padStart(2, \"0\");\n}\nfunction tn(s) {\n return Math.max(0, Math.min(255, 255 * s));\n}\nclass SR {\n static CMYK_G([U, l, d, t]) {\n return [\"G\", 1 - Math.min(1, 0.3 * U + 0.59 * d + 0.11 * l + t)];\n }\n static G_CMYK([U]) {\n return [\"CMYK\", 0, 0, 0, 1 - U];\n }\n static G_RGB([U]) {\n return [\"RGB\", U, U, U];\n }\n static G_rgb([U]) {\n return U = tn(U), [U, U, U];\n }\n static G_HTML([U]) {\n const l = TR(U);\n return `#${l}${l}${l}`;\n }\n static RGB_G([U, l, d]) {\n return [\"G\", 0.3 * U + 0.59 * l + 0.11 * d];\n }\n static RGB_rgb(U) {\n return U.map(tn);\n }\n static RGB_HTML(U) {\n return `#${U.map(TR).join(\"\")}`;\n }\n static T_HTML() {\n return \"#00000000\";\n }\n static T_rgb() {\n return [null];\n }\n static CMYK_RGB([U, l, d, t]) {\n return [\"RGB\", 1 - Math.min(1, U + t), 1 - Math.min(1, d + t), 1 - Math.min(1, l + t)];\n }\n static CMYK_rgb([U, l, d, t]) {\n return [tn(1 - Math.min(1, U + t)), tn(1 - Math.min(1, d + t)), tn(1 - Math.min(1, l + t))];\n }\n static CMYK_HTML(U) {\n const l = this.CMYK_RGB(U).slice(1);\n return this.RGB_HTML(l);\n }\n static RGB_CMYK([U, l, d]) {\n const t = 1 - U, Z = 1 - l, F = 1 - d, c = Math.min(t, Z, F);\n return [\"CMYK\", t, Z, F, c];\n }\n}\nlet Wh = class {\n static setupStorage(U, l, d, t, Z) {\n const F = t.getValue(l, {\n value: null\n });\n switch (d.name) {\n case \"textarea\":\n if (F.value !== null && (U.textContent = F.value), Z === \"print\")\n break;\n U.addEventListener(\"input\", (c) => {\n t.setValue(l, {\n value: c.target.value\n });\n });\n break;\n case \"input\":\n if (d.attributes.type === \"radio\" || d.attributes.type === \"checkbox\") {\n if (F.value === d.attributes.xfaOn ? U.setAttribute(\"checked\", !0) : F.value === d.attributes.xfaOff && U.removeAttribute(\"checked\"), Z === \"print\")\n break;\n U.addEventListener(\"change\", (c) => {\n t.setValue(l, {\n value: c.target.checked ? c.target.getAttribute(\"xfaOn\") : c.target.getAttribute(\"xfaOff\")\n });\n });\n } else {\n if (F.value !== null && U.setAttribute(\"value\", F.value), Z === \"print\")\n break;\n U.addEventListener(\"input\", (c) => {\n t.setValue(l, {\n value: c.target.value\n });\n });\n }\n break;\n case \"select\":\n if (F.value !== null) {\n U.setAttribute(\"value\", F.value);\n for (const c of d.children)\n c.attributes.value === F.value ? c.attributes.selected = !0 : c.attributes.hasOwnProperty(\"selected\") && delete c.attributes.selected;\n }\n U.addEventListener(\"input\", (c) => {\n const Q = c.target.options, a = Q.selectedIndex === -1 ? \"\" : Q[Q.selectedIndex].value;\n t.setValue(l, {\n value: a\n });\n });\n break;\n }\n }\n static setAttributes({\n html: U,\n element: l,\n storage: d = null,\n intent: t,\n linkService: Z\n }) {\n const {\n attributes: F\n } = l, c = U instanceof HTMLAnchorElement;\n F.type === \"radio\" && (F.name = `${F.name}-${t}`);\n for (const [Q, a] of Object.entries(F))\n if (a != null)\n switch (Q) {\n case \"class\":\n a.length && U.setAttribute(Q, a.join(\" \"));\n break;\n case \"dataId\":\n break;\n case \"id\":\n U.setAttribute(\"data-element-id\", a);\n break;\n case \"style\":\n Object.assign(U.style, a);\n break;\n case \"textContent\":\n U.textContent = a;\n break;\n default:\n (!c || Q !== \"href\" && Q !== \"newWindow\") && U.setAttribute(Q, a);\n }\n c && Z.addLinkAttributes(U, F.href, F.newWindow), d && F.dataId && this.setupStorage(U, F.dataId, l, d);\n }\n static render(U) {\n var W, i;\n const l = U.annotationStorage, d = U.linkService, t = U.xfaHtml, Z = U.intent || \"display\", F = document.createElement(t.name);\n t.attributes && this.setAttributes({\n html: F,\n element: t,\n intent: Z,\n linkService: d\n });\n const c = Z !== \"richText\", Q = U.div;\n if (Q.append(F), U.viewport) {\n const R = `matrix(${U.viewport.transform.join(\",\")})`;\n Q.style.transform = R;\n }\n c && Q.setAttribute(\"class\", \"xfaLayer xfaFont\");\n const a = [];\n if (t.children.length === 0) {\n if (t.value) {\n const R = document.createTextNode(t.value);\n F.append(R), c && Dn.shouldBuildText(t.name) && a.push(R);\n }\n return {\n textDivs: a\n };\n }\n const V = [[t, -1, F]];\n for (; V.length > 0; ) {\n const [R, N, b] = V.at(-1);\n if (N + 1 === R.children.length) {\n V.pop();\n continue;\n }\n const J = R.children[++V.at(-1)[1]];\n if (J === null)\n continue;\n const {\n name: M\n } = J;\n if (M === \"#text\") {\n const T = document.createTextNode(J.value);\n a.push(T), b.append(T);\n continue;\n }\n const G = (W = J == null ? void 0 : J.attributes) != null && W.xmlns ? document.createElementNS(J.attributes.xmlns, M) : document.createElement(M);\n if (b.append(G), J.attributes && this.setAttributes({\n html: G,\n element: J,\n storage: l,\n intent: Z,\n linkService: d\n }), ((i = J.children) == null ? void 0 : i.length) > 0)\n V.push([J, -1, G]);\n else if (J.value) {\n const T = document.createTextNode(J.value);\n c && Dn.shouldBuildText(M) && a.push(T), G.append(T);\n }\n }\n for (const R of Q.querySelectorAll(\".xfaNonInteractive input, .xfaNonInteractive textarea\"))\n R.setAttribute(\"readOnly\", !0);\n return {\n textDivs: a\n };\n }\n static update(U) {\n const l = `matrix(${U.viewport.transform.join(\",\")})`;\n U.div.style.transform = l, U.div.hidden = !1;\n }\n};\nconst zQ = 1e3, Am = 9, R0 = /* @__PURE__ */ new WeakSet();\nfunction Ct(s) {\n return {\n width: s[2] - s[0],\n height: s[3] - s[1]\n };\n}\nclass _m {\n static create(U) {\n switch (U.data.annotationType) {\n case Kl.LINK:\n return new ih(U);\n case Kl.TEXT:\n return new qm(U);\n case Kl.WIDGET:\n switch (U.data.fieldType) {\n case \"Tx\":\n return new $m(U);\n case \"Btn\":\n return U.data.radioButton ? new hh(U) : U.data.checkBox ? new U2(U) : new d2(U);\n case \"Ch\":\n return new t2(U);\n case \"Sig\":\n return new l2(U);\n }\n return new m0(U);\n case Kl.POPUP:\n return new uW(U);\n case Kl.FREETEXT:\n return new Jh(U);\n case Kl.LINE:\n return new F2(U);\n case Kl.SQUARE:\n return new c2(U);\n case Kl.CIRCLE:\n return new n2(U);\n case Kl.POLYLINE:\n return new Gh(U);\n case Kl.CARET:\n return new Q2(U);\n case Kl.INK:\n return new fi(U);\n case Kl.POLYGON:\n return new s2(U);\n case Kl.HIGHLIGHT:\n return new Th(U);\n case Kl.UNDERLINE:\n return new a2(U);\n case Kl.SQUIGGLY:\n return new V2(U);\n case Kl.STRIKEOUT:\n return new W2(U);\n case Kl.STAMP:\n return new Sh(U);\n case Kl.FILEATTACHMENT:\n return new i2(U);\n default:\n return new El(U);\n }\n }\n}\nvar pF, Fc, cc, Gs, XW;\nconst lR = class lR {\n constructor(U, {\n isRenderable: l = !1,\n ignoreBorder: d = !1,\n createQuadrilaterals: t = !1\n } = {}) {\n m(this, Gs);\n m(this, pF, null);\n m(this, Fc, !1);\n m(this, cc, null);\n this.isRenderable = l, this.data = U.data, this.layer = U.layer, this.linkService = U.linkService, this.downloadManager = U.downloadManager, this.imageResourcesPath = U.imageResourcesPath, this.renderForms = U.renderForms, this.svgFactory = U.svgFactory, this.annotationStorage = U.annotationStorage, this.enableScripting = U.enableScripting, this.hasJSActions = U.hasJSActions, this._fieldObjects = U.fieldObjects, this.parent = U.parent, l && (this.container = this._createContainer(d)), t && this._createQuadrilaterals();\n }\n static _hasPopupData({\n titleObj: U,\n contentsObj: l,\n richText: d\n }) {\n return !!(U != null && U.str || l != null && l.str || d != null && d.str);\n }\n get _isEditable() {\n return this.data.isEditable;\n }\n get hasPopupData() {\n return lR._hasPopupData(this.data);\n }\n updateEdited(U) {\n var d;\n if (!this.container)\n return;\n n(this, pF) || e(this, pF, {\n rect: this.data.rect.slice(0)\n });\n const {\n rect: l\n } = U;\n l && h(this, Gs, XW).call(this, l), (d = n(this, cc)) == null || d.popup.updateEdited(U);\n }\n resetEdited() {\n var U;\n n(this, pF) && (h(this, Gs, XW).call(this, n(this, pF).rect), (U = n(this, cc)) == null || U.popup.resetEdited(), e(this, pF, null));\n }\n _createContainer(U) {\n const {\n data: l,\n parent: {\n page: d,\n viewport: t\n }\n } = this, Z = document.createElement(\"section\");\n Z.setAttribute(\"data-annotation-id\", l.id), this instanceof m0 || (Z.tabIndex = zQ);\n const {\n style: F\n } = Z;\n if (F.zIndex = this.parent.zIndex++, l.popupRef && Z.setAttribute(\"aria-haspopup\", \"dialog\"), l.alternativeText && (Z.title = l.alternativeText), l.noRotate && Z.classList.add(\"norotate\"), !l.rect || this instanceof uW) {\n const {\n rotation: b\n } = l;\n return !l.hasOwnCanvas && b !== 0 && this.setRotation(b, Z), Z;\n }\n const {\n width: c,\n height: Q\n } = Ct(l.rect);\n if (!U && l.borderStyle.width > 0) {\n F.borderWidth = `${l.borderStyle.width}px`;\n const b = l.borderStyle.horizontalCornerRadius, J = l.borderStyle.verticalCornerRadius;\n if (b > 0 || J > 0) {\n const G = `calc(${b}px * var(--scale-factor)) / calc(${J}px * var(--scale-factor))`;\n F.borderRadius = G;\n } else if (this instanceof hh) {\n const G = `calc(${c}px * var(--scale-factor)) / calc(${Q}px * var(--scale-factor))`;\n F.borderRadius = G;\n }\n switch (l.borderStyle.style) {\n case Un.SOLID:\n F.borderStyle = \"solid\";\n break;\n case Un.DASHED:\n F.borderStyle = \"dashed\";\n break;\n case Un.BEVELED:\n Zl(\"Unimplemented border style: beveled\");\n break;\n case Un.INSET:\n Zl(\"Unimplemented border style: inset\");\n break;\n case Un.UNDERLINE:\n F.borderBottomStyle = \"solid\";\n break;\n }\n const M = l.borderColor || null;\n M ? (e(this, Fc, !0), F.borderColor = H.makeHexColor(M[0] | 0, M[1] | 0, M[2] | 0)) : F.borderWidth = 0;\n }\n const a = H.normalizeRect([l.rect[0], d.view[3] - l.rect[1] + d.view[1], l.rect[2], d.view[3] - l.rect[3] + d.view[1]]), {\n pageWidth: V,\n pageHeight: W,\n pageX: i,\n pageY: R\n } = t.rawDims;\n F.left = `${100 * (a[0] - i) / V}%`, F.top = `${100 * (a[1] - R) / W}%`;\n const {\n rotation: N\n } = l;\n return l.hasOwnCanvas || N === 0 ? (F.width = `${100 * c / V}%`, F.height = `${100 * Q / W}%`) : this.setRotation(N, Z), Z;\n }\n setRotation(U, l = this.container) {\n if (!this.data.rect)\n return;\n const {\n pageWidth: d,\n pageHeight: t\n } = this.parent.viewport.rawDims, {\n width: Z,\n height: F\n } = Ct(this.data.rect);\n let c, Q;\n U % 180 === 0 ? (c = 100 * Z / d, Q = 100 * F / t) : (c = 100 * F / d, Q = 100 * Z / t), l.style.width = `${c}%`, l.style.height = `${Q}%`, l.setAttribute(\"data-main-rotation\", (360 - U) % 360);\n }\n get _commonActions() {\n const U = (l, d, t) => {\n const Z = t.detail[l], F = Z[0], c = Z.slice(1);\n t.target.style[d] = SR[`${F}_HTML`](c), this.annotationStorage.setValue(this.data.id, {\n [d]: SR[`${F}_rgb`](c)\n });\n };\n return Ql(this, \"_commonActions\", {\n display: (l) => {\n const {\n display: d\n } = l.detail, t = d % 2 === 1;\n this.container.style.visibility = t ? \"hidden\" : \"visible\", this.annotationStorage.setValue(this.data.id, {\n noView: t,\n noPrint: d === 1 || d === 2\n });\n },\n print: (l) => {\n this.annotationStorage.setValue(this.data.id, {\n noPrint: !l.detail.print\n });\n },\n hidden: (l) => {\n const {\n hidden: d\n } = l.detail;\n this.container.style.visibility = d ? \"hidden\" : \"visible\", this.annotationStorage.setValue(this.data.id, {\n noPrint: d,\n noView: d\n });\n },\n focus: (l) => {\n setTimeout(() => l.target.focus({\n preventScroll: !1\n }), 0);\n },\n userName: (l) => {\n l.target.title = l.detail.userName;\n },\n readonly: (l) => {\n l.target.disabled = l.detail.readonly;\n },\n required: (l) => {\n this._setRequired(l.target, l.detail.required);\n },\n bgColor: (l) => {\n U(\"bgColor\", \"backgroundColor\", l);\n },\n fillColor: (l) => {\n U(\"fillColor\", \"backgroundColor\", l);\n },\n fgColor: (l) => {\n U(\"fgColor\", \"color\", l);\n },\n textColor: (l) => {\n U(\"textColor\", \"color\", l);\n },\n borderColor: (l) => {\n U(\"borderColor\", \"borderColor\", l);\n },\n strokeColor: (l) => {\n U(\"strokeColor\", \"borderColor\", l);\n },\n rotation: (l) => {\n const d = l.detail.rotation;\n this.setRotation(d), this.annotationStorage.setValue(this.data.id, {\n rotation: d\n });\n }\n });\n }\n _dispatchEventFromSandbox(U, l) {\n const d = this._commonActions;\n for (const t of Object.keys(l.detail)) {\n const Z = U[t] || d[t];\n Z == null || Z(l);\n }\n }\n _setDefaultPropertiesFromJS(U) {\n if (!this.enableScripting)\n return;\n const l = this.annotationStorage.getRawValue(this.data.id);\n if (!l)\n return;\n const d = this._commonActions;\n for (const [t, Z] of Object.entries(l)) {\n const F = d[t];\n if (F) {\n const c = {\n detail: {\n [t]: Z\n },\n target: U\n };\n F(c), delete l[t];\n }\n }\n }\n _createQuadrilaterals() {\n if (!this.container)\n return;\n const {\n quadPoints: U\n } = this.data;\n if (!U)\n return;\n const [l, d, t, Z] = this.data.rect.map((b) => Math.fround(b));\n if (U.length === 8) {\n const [b, J, M, G] = U.subarray(2, 6);\n if (t === b && Z === J && l === M && d === G)\n return;\n }\n const {\n style: F\n } = this.container;\n let c;\n if (n(this, Fc)) {\n const {\n borderColor: b,\n borderWidth: J\n } = F;\n F.borderWidth = 0, c = [\"url('data:image/svg+xml;utf8,\", '', ``], this.container.classList.add(\"hasBorder\");\n }\n const Q = t - l, a = Z - d, {\n svgFactory: V\n } = this, W = V.createElement(\"svg\");\n W.classList.add(\"quadrilateralsContainer\"), W.setAttribute(\"width\", 0), W.setAttribute(\"height\", 0);\n const i = V.createElement(\"defs\");\n W.append(i);\n const R = V.createElement(\"clipPath\"), N = `clippath_${this.data.id}`;\n R.setAttribute(\"id\", N), R.setAttribute(\"clipPathUnits\", \"objectBoundingBox\"), i.append(R);\n for (let b = 2, J = U.length; b < J; b += 8) {\n const M = U[b], G = U[b + 1], T = U[b + 2], u = U[b + 3], X = V.createElement(\"rect\"), Y = (T - l) / Q, o = (Z - G) / a, y = (M - T) / Q, S = (G - u) / a;\n X.setAttribute(\"x\", Y), X.setAttribute(\"y\", o), X.setAttribute(\"width\", y), X.setAttribute(\"height\", S), R.append(X), c == null || c.push(``);\n }\n n(this, Fc) && (c.push(\"')\"), F.backgroundImage = c.join(\"\")), this.container.append(W), this.container.style.clipPath = `url(#${N})`;\n }\n _createPopup() {\n const {\n container: U,\n data: l\n } = this;\n U.setAttribute(\"aria-haspopup\", \"dialog\");\n const d = e(this, cc, new uW({\n data: {\n color: l.color,\n titleObj: l.titleObj,\n modificationDate: l.modificationDate,\n contentsObj: l.contentsObj,\n richText: l.richText,\n parentRect: l.rect,\n borderStyle: 0,\n id: `popup_${l.id}`,\n rotation: l.rotation\n },\n parent: this.parent,\n elements: [this]\n }));\n this.parent.div.append(d.render());\n }\n render() {\n Ol(\"Abstract method `AnnotationElement.render` called\");\n }\n _getElementsByName(U, l = null) {\n const d = [];\n if (this._fieldObjects) {\n const t = this._fieldObjects[U];\n if (t)\n for (const {\n page: Z,\n id: F,\n exportValues: c\n } of t) {\n if (Z === -1 || F === l)\n continue;\n const Q = typeof c == \"string\" ? c : null, a = document.querySelector(`[data-element-id=\"${F}\"]`);\n if (a && !R0.has(a)) {\n Zl(`_getElementsByName - element not allowed: ${F}`);\n continue;\n }\n d.push({\n id: F,\n exportValue: Q,\n domElement: a\n });\n }\n return d;\n }\n for (const t of document.getElementsByName(U)) {\n const {\n exportValue: Z\n } = t, F = t.getAttribute(\"data-element-id\");\n F !== l && R0.has(t) && d.push({\n id: F,\n exportValue: Z,\n domElement: t\n });\n }\n return d;\n }\n show() {\n var U;\n this.container && (this.container.hidden = !1), (U = this.popup) == null || U.maybeShow();\n }\n hide() {\n var U;\n this.container && (this.container.hidden = !0), (U = this.popup) == null || U.forceHide();\n }\n getElementsToTriggerPopup() {\n return this.container;\n }\n addHighlightArea() {\n const U = this.getElementsToTriggerPopup();\n if (Array.isArray(U))\n for (const l of U)\n l.classList.add(\"highlightArea\");\n else\n U.classList.add(\"highlightArea\");\n }\n _editOnDoubleClick() {\n if (!this._isEditable)\n return;\n const {\n annotationEditorType: U,\n data: {\n id: l\n }\n } = this;\n this.container.addEventListener(\"dblclick\", () => {\n var d;\n (d = this.linkService.eventBus) == null || d.dispatch(\"switchannotationeditormode\", {\n source: this,\n mode: U,\n editId: l\n });\n });\n }\n};\npF = new WeakMap(), Fc = new WeakMap(), cc = new WeakMap(), Gs = new WeakSet(), XW = function(U) {\n const {\n container: {\n style: l\n },\n data: {\n rect: d,\n rotation: t\n },\n parent: {\n viewport: {\n rawDims: {\n pageWidth: Z,\n pageHeight: F,\n pageX: c,\n pageY: Q\n }\n }\n }\n } = this;\n d == null || d.splice(0, 4, ...U);\n const {\n width: a,\n height: V\n } = Ct(U);\n l.left = `${100 * (U[0] - c) / Z}%`, l.top = `${100 * (F - U[3] + Q) / F}%`, t === 0 ? (l.width = `${100 * a / Z}%`, l.height = `${100 * V / F}%`) : this.setRotation(t);\n};\nlet El = lR;\nvar PU, gZ, Rh, Nh;\nclass ih extends El {\n constructor(l, d = null) {\n super(l, {\n isRenderable: !0,\n ignoreBorder: !!(d != null && d.ignoreBorder),\n createQuadrilaterals: !0\n });\n m(this, PU);\n this.isTooltipOnly = l.data.isTooltipOnly;\n }\n render() {\n const {\n data: l,\n linkService: d\n } = this, t = document.createElement(\"a\");\n t.setAttribute(\"data-element-id\", l.id);\n let Z = !1;\n return l.url ? (d.addLinkAttributes(t, l.url, l.newWindow), Z = !0) : l.action ? (this._bindNamedAction(t, l.action), Z = !0) : l.attachment ? (h(this, PU, Rh).call(this, t, l.attachment, l.attachmentDest), Z = !0) : l.setOCGState ? (h(this, PU, Nh).call(this, t, l.setOCGState), Z = !0) : l.dest ? (this._bindLink(t, l.dest), Z = !0) : (l.actions && (l.actions.Action || l.actions[\"Mouse Up\"] || l.actions[\"Mouse Down\"]) && this.enableScripting && this.hasJSActions && (this._bindJSAction(t, l), Z = !0), l.resetForm ? (this._bindResetFormAction(t, l.resetForm), Z = !0) : this.isTooltipOnly && !Z && (this._bindLink(t, \"\"), Z = !0)), this.container.classList.add(\"linkAnnotation\"), Z && this.container.append(t), this.container;\n }\n _bindLink(l, d) {\n l.href = this.linkService.getDestinationHash(d), l.onclick = () => (d && this.linkService.goToDestination(d), !1), (d || d === \"\") && h(this, PU, gZ).call(this);\n }\n _bindNamedAction(l, d) {\n l.href = this.linkService.getAnchorUrl(\"\"), l.onclick = () => (this.linkService.executeNamedAction(d), !1), h(this, PU, gZ).call(this);\n }\n _bindJSAction(l, d) {\n l.href = this.linkService.getAnchorUrl(\"\");\n const t = /* @__PURE__ */ new Map([[\"Action\", \"onclick\"], [\"Mouse Up\", \"onmouseup\"], [\"Mouse Down\", \"onmousedown\"]]);\n for (const Z of Object.keys(d.actions)) {\n const F = t.get(Z);\n F && (l[F] = () => {\n var c;\n return (c = this.linkService.eventBus) == null || c.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: d.id,\n name: Z\n }\n }), !1;\n });\n }\n l.onclick || (l.onclick = () => !1), h(this, PU, gZ).call(this);\n }\n _bindResetFormAction(l, d) {\n const t = l.onclick;\n if (t || (l.href = this.linkService.getAnchorUrl(\"\")), h(this, PU, gZ).call(this), !this._fieldObjects) {\n Zl('_bindResetFormAction - \"resetForm\" action not supported, ensure that the `fieldObjects` parameter is provided.'), t || (l.onclick = () => !1);\n return;\n }\n l.onclick = () => {\n var W;\n t == null || t();\n const {\n fields: Z,\n refs: F,\n include: c\n } = d, Q = [];\n if (Z.length !== 0 || F.length !== 0) {\n const i = new Set(F);\n for (const R of Z) {\n const N = this._fieldObjects[R] || [];\n for (const {\n id: b\n } of N)\n i.add(b);\n }\n for (const R of Object.values(this._fieldObjects))\n for (const N of R)\n i.has(N.id) === c && Q.push(N);\n } else\n for (const i of Object.values(this._fieldObjects))\n Q.push(...i);\n const a = this.annotationStorage, V = [];\n for (const i of Q) {\n const {\n id: R\n } = i;\n switch (V.push(R), i.type) {\n case \"text\": {\n const b = i.defaultValue || \"\";\n a.setValue(R, {\n value: b\n });\n break;\n }\n case \"checkbox\":\n case \"radiobutton\": {\n const b = i.defaultValue === i.exportValues;\n a.setValue(R, {\n value: b\n });\n break;\n }\n case \"combobox\":\n case \"listbox\": {\n const b = i.defaultValue || \"\";\n a.setValue(R, {\n value: b\n });\n break;\n }\n default:\n continue;\n }\n const N = document.querySelector(`[data-element-id=\"${R}\"]`);\n if (N) {\n if (!R0.has(N)) {\n Zl(`_bindResetFormAction - element not allowed: ${R}`);\n continue;\n }\n } else continue;\n N.dispatchEvent(new Event(\"resetform\"));\n }\n return this.enableScripting && ((W = this.linkService.eventBus) == null || W.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: \"app\",\n ids: V,\n name: \"ResetForm\"\n }\n })), !1;\n };\n }\n}\nPU = new WeakSet(), gZ = function() {\n this.container.setAttribute(\"data-internal-link\", \"\");\n}, Rh = function(l, d, t = null) {\n l.href = this.linkService.getAnchorUrl(\"\"), d.description && (l.title = d.description), l.onclick = () => {\n var Z;\n return (Z = this.downloadManager) == null || Z.openOrDownloadData(d.content, d.filename, t), !1;\n }, h(this, PU, gZ).call(this);\n}, Nh = function(l, d) {\n l.href = this.linkService.getAnchorUrl(\"\"), l.onclick = () => (this.linkService.executeSetOCGState(d), !1), h(this, PU, gZ).call(this);\n};\nclass qm extends El {\n constructor(U) {\n super(U, {\n isRenderable: !0\n });\n }\n render() {\n this.container.classList.add(\"textAnnotation\");\n const U = document.createElement(\"img\");\n return U.src = this.imageResourcesPath + \"annotation-\" + this.data.name.toLowerCase() + \".svg\", U.setAttribute(\"data-l10n-id\", \"pdfjs-text-annotation-type\"), U.setAttribute(\"data-l10n-args\", JSON.stringify({\n type: this.data.name\n })), !this.data.popupRef && this.hasPopupData && this._createPopup(), this.container.append(U), this.container;\n }\n}\nclass m0 extends El {\n render() {\n return this.container;\n }\n showElementAndHideCanvas(U) {\n var l;\n this.data.hasOwnCanvas && (((l = U.previousSibling) == null ? void 0 : l.nodeName) === \"CANVAS\" && (U.previousSibling.hidden = !0), U.hidden = !1);\n }\n _getKeyModifier(U) {\n return DU.platform.isMac ? U.metaKey : U.ctrlKey;\n }\n _setEventListener(U, l, d, t, Z) {\n d.includes(\"mouse\") ? U.addEventListener(d, (F) => {\n var c;\n (c = this.linkService.eventBus) == null || c.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: this.data.id,\n name: t,\n value: Z(F),\n shift: F.shiftKey,\n modifier: this._getKeyModifier(F)\n }\n });\n }) : U.addEventListener(d, (F) => {\n var c;\n if (d === \"blur\") {\n if (!l.focused || !F.relatedTarget)\n return;\n l.focused = !1;\n } else if (d === \"focus\") {\n if (l.focused)\n return;\n l.focused = !0;\n }\n Z && ((c = this.linkService.eventBus) == null || c.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: this.data.id,\n name: t,\n value: Z(F)\n }\n }));\n });\n }\n _setEventListeners(U, l, d, t) {\n var Z, F, c;\n for (const [Q, a] of d)\n (a === \"Action\" || (Z = this.data.actions) != null && Z[a]) && ((a === \"Focus\" || a === \"Blur\") && (l || (l = {\n focused: !1\n })), this._setEventListener(U, l, Q, a, t), a === \"Focus\" && !((F = this.data.actions) != null && F.Blur) ? this._setEventListener(U, l, \"blur\", \"Blur\", null) : a === \"Blur\" && !((c = this.data.actions) != null && c.Focus) && this._setEventListener(U, l, \"focus\", \"Focus\", null));\n }\n _setBackgroundColor(U) {\n const l = this.data.backgroundColor || null;\n U.style.backgroundColor = l === null ? \"transparent\" : H.makeHexColor(l[0], l[1], l[2]);\n }\n _setTextStyle(U) {\n const l = [\"left\", \"center\", \"right\"], {\n fontColor: d\n } = this.data.defaultAppearanceData, t = this.data.defaultAppearanceData.fontSize || Am, Z = U.style;\n let F;\n const c = 2, Q = (a) => Math.round(10 * a) / 10;\n if (this.data.multiLine) {\n const a = Math.abs(this.data.rect[3] - this.data.rect[1] - c), V = Math.round(a / (TV * t)) || 1, W = a / V;\n F = Math.min(t, Q(W / TV));\n } else {\n const a = Math.abs(this.data.rect[3] - this.data.rect[1] - c);\n F = Math.min(t, Q(a / TV));\n }\n Z.fontSize = `calc(${F}px * var(--scale-factor))`, Z.color = H.makeHexColor(d[0], d[1], d[2]), this.data.textAlignment !== null && (Z.textAlign = l[this.data.textAlignment]);\n }\n _setRequired(U, l) {\n l ? U.setAttribute(\"required\", !0) : U.removeAttribute(\"required\"), U.setAttribute(\"aria-required\", l);\n }\n}\nclass $m extends m0 {\n constructor(U) {\n const l = U.renderForms || U.data.hasOwnCanvas || !U.data.hasAppearance && !!U.data.fieldValue;\n super(U, {\n isRenderable: l\n });\n }\n setPropertyOnSiblings(U, l, d, t) {\n const Z = this.annotationStorage;\n for (const F of this._getElementsByName(U.name, U.id))\n F.domElement && (F.domElement[l] = d), Z.setValue(F.id, {\n [t]: d\n });\n }\n render() {\n var t, Z;\n const U = this.annotationStorage, l = this.data.id;\n this.container.classList.add(\"textWidgetAnnotation\");\n let d = null;\n if (this.renderForms) {\n const F = U.getValue(l, {\n value: this.data.fieldValue\n });\n let c = F.value || \"\";\n const Q = U.getValue(l, {\n charLimit: this.data.maxLen\n }).charLimit;\n Q && c.length > Q && (c = c.slice(0, Q));\n let a = F.formattedValue || ((t = this.data.textContent) == null ? void 0 : t.join(`\n`)) || null;\n a && this.data.comb && (a = a.replaceAll(/\\s+/g, \"\"));\n const V = {\n userValue: c,\n formattedValue: a,\n lastCommittedValue: null,\n commitKey: 1,\n focused: !1\n };\n this.data.multiLine ? (d = document.createElement(\"textarea\"), d.textContent = a ?? c, this.data.doNotScroll && (d.style.overflowY = \"hidden\")) : (d = document.createElement(\"input\"), d.type = \"text\", d.setAttribute(\"value\", a ?? c), this.data.doNotScroll && (d.style.overflowX = \"hidden\")), this.data.hasOwnCanvas && (d.hidden = !0), R0.add(d), d.setAttribute(\"data-element-id\", l), d.disabled = this.data.readOnly, d.name = this.data.fieldName, d.tabIndex = zQ, this._setRequired(d, this.data.required), Q && (d.maxLength = Q), d.addEventListener(\"input\", (i) => {\n U.setValue(l, {\n value: i.target.value\n }), this.setPropertyOnSiblings(d, \"value\", i.target.value, \"value\"), V.formattedValue = null;\n }), d.addEventListener(\"resetform\", (i) => {\n const R = this.data.defaultFieldValue ?? \"\";\n d.value = V.userValue = R, V.formattedValue = null;\n });\n let W = (i) => {\n const {\n formattedValue: R\n } = V;\n R != null && (i.target.value = R), i.target.scrollLeft = 0;\n };\n if (this.enableScripting && this.hasJSActions) {\n d.addEventListener(\"focus\", (R) => {\n var b;\n if (V.focused)\n return;\n const {\n target: N\n } = R;\n V.userValue && (N.value = V.userValue), V.lastCommittedValue = N.value, V.commitKey = 1, (b = this.data.actions) != null && b.Focus || (V.focused = !0);\n }), d.addEventListener(\"updatefromsandbox\", (R) => {\n this.showElementAndHideCanvas(R.target);\n const N = {\n value(b) {\n V.userValue = b.detail.value ?? \"\", U.setValue(l, {\n value: V.userValue.toString()\n }), b.target.value = V.userValue;\n },\n formattedValue(b) {\n const {\n formattedValue: J\n } = b.detail;\n V.formattedValue = J, J != null && b.target !== document.activeElement && (b.target.value = J), U.setValue(l, {\n formattedValue: J\n });\n },\n selRange(b) {\n b.target.setSelectionRange(...b.detail.selRange);\n },\n charLimit: (b) => {\n var T;\n const {\n charLimit: J\n } = b.detail, {\n target: M\n } = b;\n if (J === 0) {\n M.removeAttribute(\"maxLength\");\n return;\n }\n M.setAttribute(\"maxLength\", J);\n let G = V.userValue;\n !G || G.length <= J || (G = G.slice(0, J), M.value = V.userValue = G, U.setValue(l, {\n value: G\n }), (T = this.linkService.eventBus) == null || T.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: l,\n name: \"Keystroke\",\n value: G,\n willCommit: !0,\n commitKey: 1,\n selStart: M.selectionStart,\n selEnd: M.selectionEnd\n }\n }));\n }\n };\n this._dispatchEventFromSandbox(N, R);\n }), d.addEventListener(\"keydown\", (R) => {\n var J;\n V.commitKey = 1;\n let N = -1;\n if (R.key === \"Escape\" ? N = 0 : R.key === \"Enter\" && !this.data.multiLine ? N = 2 : R.key === \"Tab\" && (V.commitKey = 3), N === -1)\n return;\n const {\n value: b\n } = R.target;\n V.lastCommittedValue !== b && (V.lastCommittedValue = b, V.userValue = b, (J = this.linkService.eventBus) == null || J.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: l,\n name: \"Keystroke\",\n value: b,\n willCommit: !0,\n commitKey: N,\n selStart: R.target.selectionStart,\n selEnd: R.target.selectionEnd\n }\n }));\n });\n const i = W;\n W = null, d.addEventListener(\"blur\", (R) => {\n var b, J;\n if (!V.focused || !R.relatedTarget)\n return;\n (b = this.data.actions) != null && b.Blur || (V.focused = !1);\n const {\n value: N\n } = R.target;\n V.userValue = N, V.lastCommittedValue !== N && ((J = this.linkService.eventBus) == null || J.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: l,\n name: \"Keystroke\",\n value: N,\n willCommit: !0,\n commitKey: V.commitKey,\n selStart: R.target.selectionStart,\n selEnd: R.target.selectionEnd\n }\n })), i(R);\n }), (Z = this.data.actions) != null && Z.Keystroke && d.addEventListener(\"beforeinput\", (R) => {\n var X;\n V.lastCommittedValue = null;\n const {\n data: N,\n target: b\n } = R, {\n value: J,\n selectionStart: M,\n selectionEnd: G\n } = b;\n let T = M, u = G;\n switch (R.inputType) {\n case \"deleteWordBackward\": {\n const Y = J.substring(0, M).match(/\\w*[^\\w]*$/);\n Y && (T -= Y[0].length);\n break;\n }\n case \"deleteWordForward\": {\n const Y = J.substring(M).match(/^[^\\w]*\\w*/);\n Y && (u += Y[0].length);\n break;\n }\n case \"deleteContentBackward\":\n M === G && (T -= 1);\n break;\n case \"deleteContentForward\":\n M === G && (u += 1);\n break;\n }\n R.preventDefault(), (X = this.linkService.eventBus) == null || X.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: l,\n name: \"Keystroke\",\n value: J,\n change: N || \"\",\n willCommit: !1,\n selStart: T,\n selEnd: u\n }\n });\n }), this._setEventListeners(d, V, [[\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], (R) => R.target.value);\n }\n if (W && d.addEventListener(\"blur\", W), this.data.comb) {\n const R = (this.data.rect[2] - this.data.rect[0]) / Q;\n d.classList.add(\"comb\"), d.style.letterSpacing = `calc(${R}px * var(--scale-factor) - 1ch)`;\n }\n } else\n d = document.createElement(\"div\"), d.textContent = this.data.fieldValue, d.style.verticalAlign = \"middle\", d.style.display = \"table-cell\", this.data.hasOwnCanvas && (d.hidden = !0);\n return this._setTextStyle(d), this._setBackgroundColor(d), this._setDefaultPropertiesFromJS(d), this.container.append(d), this.container;\n }\n}\nclass l2 extends m0 {\n constructor(U) {\n super(U, {\n isRenderable: !!U.data.hasOwnCanvas\n });\n }\n}\nclass U2 extends m0 {\n constructor(U) {\n super(U, {\n isRenderable: U.renderForms\n });\n }\n render() {\n const U = this.annotationStorage, l = this.data, d = l.id;\n let t = U.getValue(d, {\n value: l.exportValue === l.fieldValue\n }).value;\n typeof t == \"string\" && (t = t !== \"Off\", U.setValue(d, {\n value: t\n })), this.container.classList.add(\"buttonWidgetAnnotation\", \"checkBox\");\n const Z = document.createElement(\"input\");\n return R0.add(Z), Z.setAttribute(\"data-element-id\", d), Z.disabled = l.readOnly, this._setRequired(Z, this.data.required), Z.type = \"checkbox\", Z.name = l.fieldName, t && Z.setAttribute(\"checked\", !0), Z.setAttribute(\"exportValue\", l.exportValue), Z.tabIndex = zQ, Z.addEventListener(\"change\", (F) => {\n const {\n name: c,\n checked: Q\n } = F.target;\n for (const a of this._getElementsByName(c, d)) {\n const V = Q && a.exportValue === l.exportValue;\n a.domElement && (a.domElement.checked = V), U.setValue(a.id, {\n value: V\n });\n }\n U.setValue(d, {\n value: Q\n });\n }), Z.addEventListener(\"resetform\", (F) => {\n const c = l.defaultFieldValue || \"Off\";\n F.target.checked = c === l.exportValue;\n }), this.enableScripting && this.hasJSActions && (Z.addEventListener(\"updatefromsandbox\", (F) => {\n const c = {\n value(Q) {\n Q.target.checked = Q.detail.value !== \"Off\", U.setValue(d, {\n value: Q.target.checked\n });\n }\n };\n this._dispatchEventFromSandbox(c, F);\n }), this._setEventListeners(Z, null, [[\"change\", \"Validate\"], [\"change\", \"Action\"], [\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], (F) => F.target.checked)), this._setBackgroundColor(Z), this._setDefaultPropertiesFromJS(Z), this.container.append(Z), this.container;\n }\n}\nclass hh extends m0 {\n constructor(U) {\n super(U, {\n isRenderable: U.renderForms\n });\n }\n render() {\n this.container.classList.add(\"buttonWidgetAnnotation\", \"radioButton\");\n const U = this.annotationStorage, l = this.data, d = l.id;\n let t = U.getValue(d, {\n value: l.fieldValue === l.buttonValue\n }).value;\n if (typeof t == \"string\" && (t = t !== l.buttonValue, U.setValue(d, {\n value: t\n })), t)\n for (const F of this._getElementsByName(l.fieldName, d))\n U.setValue(F.id, {\n value: !1\n });\n const Z = document.createElement(\"input\");\n if (R0.add(Z), Z.setAttribute(\"data-element-id\", d), Z.disabled = l.readOnly, this._setRequired(Z, this.data.required), Z.type = \"radio\", Z.name = l.fieldName, t && Z.setAttribute(\"checked\", !0), Z.tabIndex = zQ, Z.addEventListener(\"change\", (F) => {\n const {\n name: c,\n checked: Q\n } = F.target;\n for (const a of this._getElementsByName(c, d))\n U.setValue(a.id, {\n value: !1\n });\n U.setValue(d, {\n value: Q\n });\n }), Z.addEventListener(\"resetform\", (F) => {\n const c = l.defaultFieldValue;\n F.target.checked = c != null && c === l.buttonValue;\n }), this.enableScripting && this.hasJSActions) {\n const F = l.buttonValue;\n Z.addEventListener(\"updatefromsandbox\", (c) => {\n const Q = {\n value: (a) => {\n const V = F === a.detail.value;\n for (const W of this._getElementsByName(a.target.name)) {\n const i = V && W.id === d;\n W.domElement && (W.domElement.checked = i), U.setValue(W.id, {\n value: i\n });\n }\n }\n };\n this._dispatchEventFromSandbox(Q, c);\n }), this._setEventListeners(Z, null, [[\"change\", \"Validate\"], [\"change\", \"Action\"], [\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], (c) => c.target.checked);\n }\n return this._setBackgroundColor(Z), this._setDefaultPropertiesFromJS(Z), this.container.append(Z), this.container;\n }\n}\nclass d2 extends ih {\n constructor(U) {\n super(U, {\n ignoreBorder: U.data.hasAppearance\n });\n }\n render() {\n const U = super.render();\n U.classList.add(\"buttonWidgetAnnotation\", \"pushButton\");\n const l = U.lastChild;\n return this.enableScripting && this.hasJSActions && l && (this._setDefaultPropertiesFromJS(l), l.addEventListener(\"updatefromsandbox\", (d) => {\n this._dispatchEventFromSandbox({}, d);\n })), U;\n }\n}\nclass t2 extends m0 {\n constructor(U) {\n super(U, {\n isRenderable: U.renderForms\n });\n }\n render() {\n this.container.classList.add(\"choiceWidgetAnnotation\");\n const U = this.annotationStorage, l = this.data.id, d = U.getValue(l, {\n value: this.data.fieldValue\n }), t = document.createElement(\"select\");\n R0.add(t), t.setAttribute(\"data-element-id\", l), t.disabled = this.data.readOnly, this._setRequired(t, this.data.required), t.name = this.data.fieldName, t.tabIndex = zQ;\n let Z = this.data.combo && this.data.options.length > 0;\n this.data.combo || (t.size = this.data.options.length, this.data.multiSelect && (t.multiple = !0)), t.addEventListener(\"resetform\", (V) => {\n const W = this.data.defaultFieldValue;\n for (const i of t.options)\n i.selected = i.value === W;\n });\n for (const V of this.data.options) {\n const W = document.createElement(\"option\");\n W.textContent = V.displayValue, W.value = V.exportValue, d.value.includes(V.exportValue) && (W.setAttribute(\"selected\", !0), Z = !1), t.append(W);\n }\n let F = null;\n if (Z) {\n const V = document.createElement(\"option\");\n V.value = \" \", V.setAttribute(\"hidden\", !0), V.setAttribute(\"selected\", !0), t.prepend(V), F = () => {\n V.remove(), t.removeEventListener(\"input\", F), F = null;\n }, t.addEventListener(\"input\", F);\n }\n const c = (V) => {\n const W = V ? \"value\" : \"textContent\", {\n options: i,\n multiple: R\n } = t;\n return R ? Array.prototype.filter.call(i, (N) => N.selected).map((N) => N[W]) : i.selectedIndex === -1 ? null : i[i.selectedIndex][W];\n };\n let Q = c(!1);\n const a = (V) => {\n const W = V.target.options;\n return Array.prototype.map.call(W, (i) => ({\n displayValue: i.textContent,\n exportValue: i.value\n }));\n };\n return this.enableScripting && this.hasJSActions ? (t.addEventListener(\"updatefromsandbox\", (V) => {\n const W = {\n value(i) {\n F == null || F();\n const R = i.detail.value, N = new Set(Array.isArray(R) ? R : [R]);\n for (const b of t.options)\n b.selected = N.has(b.value);\n U.setValue(l, {\n value: c(!0)\n }), Q = c(!1);\n },\n multipleSelection(i) {\n t.multiple = !0;\n },\n remove(i) {\n const R = t.options, N = i.detail.remove;\n R[N].selected = !1, t.remove(N), R.length > 0 && Array.prototype.findIndex.call(R, (J) => J.selected) === -1 && (R[0].selected = !0), U.setValue(l, {\n value: c(!0),\n items: a(i)\n }), Q = c(!1);\n },\n clear(i) {\n for (; t.length !== 0; )\n t.remove(0);\n U.setValue(l, {\n value: null,\n items: []\n }), Q = c(!1);\n },\n insert(i) {\n const {\n index: R,\n displayValue: N,\n exportValue: b\n } = i.detail.insert, J = t.children[R], M = document.createElement(\"option\");\n M.textContent = N, M.value = b, J ? J.before(M) : t.append(M), U.setValue(l, {\n value: c(!0),\n items: a(i)\n }), Q = c(!1);\n },\n items(i) {\n const {\n items: R\n } = i.detail;\n for (; t.length !== 0; )\n t.remove(0);\n for (const N of R) {\n const {\n displayValue: b,\n exportValue: J\n } = N, M = document.createElement(\"option\");\n M.textContent = b, M.value = J, t.append(M);\n }\n t.options.length > 0 && (t.options[0].selected = !0), U.setValue(l, {\n value: c(!0),\n items: a(i)\n }), Q = c(!1);\n },\n indices(i) {\n const R = new Set(i.detail.indices);\n for (const N of i.target.options)\n N.selected = R.has(N.index);\n U.setValue(l, {\n value: c(!0)\n }), Q = c(!1);\n },\n editable(i) {\n i.target.disabled = !i.detail.editable;\n }\n };\n this._dispatchEventFromSandbox(W, V);\n }), t.addEventListener(\"input\", (V) => {\n var R;\n const W = c(!0), i = c(!1);\n U.setValue(l, {\n value: W\n }), V.preventDefault(), (R = this.linkService.eventBus) == null || R.dispatch(\"dispatcheventinsandbox\", {\n source: this,\n detail: {\n id: l,\n name: \"Keystroke\",\n value: Q,\n change: i,\n changeEx: W,\n willCommit: !1,\n commitKey: 1,\n keyDown: !1\n }\n });\n }), this._setEventListeners(t, null, [[\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"], [\"input\", \"Action\"], [\"input\", \"Validate\"]], (V) => V.target.value)) : t.addEventListener(\"input\", function(V) {\n U.setValue(l, {\n value: c(!0)\n });\n }), this.data.combo && this._setTextStyle(t), this._setBackgroundColor(t), this._setDefaultPropertiesFromJS(t), this.container.append(t), this.container;\n }\n}\nclass uW extends El {\n constructor(U) {\n const {\n data: l,\n elements: d\n } = U;\n super(U, {\n isRenderable: El._hasPopupData(l)\n }), this.elements = d, this.popup = null;\n }\n render() {\n this.container.classList.add(\"popupAnnotation\");\n const U = this.popup = new Z2({\n container: this.container,\n color: this.data.color,\n titleObj: this.data.titleObj,\n modificationDate: this.data.modificationDate,\n contentsObj: this.data.contentsObj,\n richText: this.data.richText,\n rect: this.data.rect,\n parentRect: this.data.parentRect || null,\n parent: this.parent,\n elements: this.elements,\n open: this.data.open\n }), l = [];\n for (const d of this.elements)\n d.popup = U, l.push(d.data.id), d.addHighlightArea();\n return this.container.setAttribute(\"aria-controls\", l.map((d) => `${Ci}${d}`).join(\",\")), this.container;\n }\n}\nvar nc, ZV, FV, sc, BF, zl, bt, Qc, Ts, Ss, ac, mt, hd, Mt, Xs, Jt, us, yF, LF, Ml, Qa, YW, eh, bh, mh, Mh, aa, Va, oW;\nclass Z2 {\n constructor({\n container: U,\n color: l,\n elements: d,\n titleObj: t,\n modificationDate: Z,\n contentsObj: F,\n richText: c,\n parent: Q,\n rect: a,\n parentRect: V,\n open: W\n }) {\n m(this, Ml);\n m(this, nc, h(this, Ml, mh).bind(this));\n m(this, ZV, h(this, Ml, oW).bind(this));\n m(this, FV, h(this, Ml, Va).bind(this));\n m(this, sc, h(this, Ml, aa).bind(this));\n m(this, BF, null);\n m(this, zl, null);\n m(this, bt, null);\n m(this, Qc, null);\n m(this, Ts, null);\n m(this, Ss, null);\n m(this, ac, null);\n m(this, mt, !1);\n m(this, hd, null);\n m(this, Mt, null);\n m(this, Xs, null);\n m(this, Jt, null);\n m(this, us, null);\n m(this, yF, null);\n m(this, LF, !1);\n var i;\n e(this, zl, U), e(this, us, t), e(this, bt, F), e(this, Jt, c), e(this, Ss, Q), e(this, BF, l), e(this, Xs, a), e(this, ac, V), e(this, Ts, d), e(this, Qc, TN.toDateObject(Z)), this.trigger = d.flatMap((R) => R.getElementsToTriggerPopup());\n for (const R of this.trigger)\n R.addEventListener(\"click\", n(this, sc)), R.addEventListener(\"mouseenter\", n(this, FV)), R.addEventListener(\"mouseleave\", n(this, ZV)), R.classList.add(\"popupTriggerArea\");\n for (const R of d)\n (i = R.container) == null || i.addEventListener(\"keydown\", n(this, nc));\n n(this, zl).hidden = !0, W && h(this, Ml, aa).call(this);\n }\n render() {\n if (n(this, hd))\n return;\n const U = e(this, hd, document.createElement(\"div\"));\n if (U.className = \"popup\", n(this, BF)) {\n const Z = U.style.outlineColor = H.makeHexColor(...n(this, BF));\n CSS.supports(\"background-color\", \"color-mix(in srgb, red 30%, white)\") ? U.style.backgroundColor = `color-mix(in srgb, ${Z} 30%, white)` : U.style.backgroundColor = H.makeHexColor(...n(this, BF).map((c) => Math.floor(0.7 * (255 - c) + c)));\n }\n const l = document.createElement(\"span\");\n l.className = \"header\";\n const d = document.createElement(\"h1\");\n if (l.append(d), {\n dir: d.dir,\n str: d.textContent\n } = n(this, us), U.append(l), n(this, Qc)) {\n const Z = document.createElement(\"span\");\n Z.classList.add(\"popupDate\"), Z.setAttribute(\"data-l10n-id\", \"pdfjs-annotation-date-time-string\"), Z.setAttribute(\"data-l10n-args\", JSON.stringify({\n dateObj: n(this, Qc).valueOf()\n })), l.append(Z);\n }\n const t = n(this, Ml, Qa);\n if (t)\n Wh.render({\n xfaHtml: t,\n intent: \"richText\",\n div: U\n }), U.lastChild.classList.add(\"richText\", \"popupContent\");\n else {\n const Z = this._formatContents(n(this, bt));\n U.append(Z);\n }\n n(this, zl).append(U);\n }\n _formatContents({\n str: U,\n dir: l\n }) {\n const d = document.createElement(\"p\");\n d.classList.add(\"popupContent\"), d.dir = l;\n const t = U.split(/(?:\\r\\n?|\\n)/);\n for (let Z = 0, F = t.length; Z < F; ++Z) {\n const c = t[Z];\n d.append(document.createTextNode(c)), Z < F - 1 && d.append(document.createElement(\"br\"));\n }\n return d;\n }\n updateEdited({\n rect: U,\n popupContent: l\n }) {\n var d;\n n(this, yF) || e(this, yF, {\n contentsObj: n(this, bt),\n richText: n(this, Jt)\n }), U && e(this, Mt, null), l && (e(this, Jt, h(this, Ml, bh).call(this, l)), e(this, bt, null)), (d = n(this, hd)) == null || d.remove(), e(this, hd, null);\n }\n resetEdited() {\n var U;\n n(this, yF) && ({\n contentsObj: VU(this, bt)._,\n richText: VU(this, Jt)._\n } = n(this, yF), e(this, yF, null), (U = n(this, hd)) == null || U.remove(), e(this, hd, null), e(this, Mt, null));\n }\n forceHide() {\n e(this, LF, this.isVisible), n(this, LF) && (n(this, zl).hidden = !0);\n }\n maybeShow() {\n n(this, LF) && (n(this, hd) || h(this, Ml, Va).call(this), e(this, LF, !1), n(this, zl).hidden = !1);\n }\n get isVisible() {\n return n(this, zl).hidden === !1;\n }\n}\nnc = new WeakMap(), ZV = new WeakMap(), FV = new WeakMap(), sc = new WeakMap(), BF = new WeakMap(), zl = new WeakMap(), bt = new WeakMap(), Qc = new WeakMap(), Ts = new WeakMap(), Ss = new WeakMap(), ac = new WeakMap(), mt = new WeakMap(), hd = new WeakMap(), Mt = new WeakMap(), Xs = new WeakMap(), Jt = new WeakMap(), us = new WeakMap(), yF = new WeakMap(), LF = new WeakMap(), Ml = new WeakSet(), Qa = function() {\n const U = n(this, Jt), l = n(this, bt);\n return U != null && U.str && (!(l != null && l.str) || l.str === U.str) && n(this, Jt).html || null;\n}, YW = function() {\n var U, l, d;\n return ((d = (l = (U = n(this, Ml, Qa)) == null ? void 0 : U.attributes) == null ? void 0 : l.style) == null ? void 0 : d.fontSize) || 0;\n}, eh = function() {\n var U, l, d;\n return ((d = (l = (U = n(this, Ml, Qa)) == null ? void 0 : U.attributes) == null ? void 0 : l.style) == null ? void 0 : d.color) || null;\n}, bh = function(U) {\n const l = [], d = {\n str: U,\n html: {\n name: \"div\",\n attributes: {\n dir: \"auto\"\n },\n children: [{\n name: \"p\",\n children: l\n }]\n }\n }, t = {\n style: {\n color: n(this, Ml, eh),\n fontSize: n(this, Ml, YW) ? `calc(${n(this, Ml, YW)}px * var(--scale-factor))` : \"\"\n }\n };\n for (const Z of U.split(`\n`))\n l.push({\n name: \"span\",\n value: Z,\n attributes: t\n });\n return d;\n}, mh = function(U) {\n U.altKey || U.shiftKey || U.ctrlKey || U.metaKey || (U.key === \"Enter\" || U.key === \"Escape\" && n(this, mt)) && h(this, Ml, aa).call(this);\n}, Mh = function() {\n if (n(this, Mt) !== null)\n return;\n const {\n page: {\n view: U\n },\n viewport: {\n rawDims: {\n pageWidth: l,\n pageHeight: d,\n pageX: t,\n pageY: Z\n }\n }\n } = n(this, Ss);\n let F = !!n(this, ac), c = F ? n(this, ac) : n(this, Xs);\n for (const N of n(this, Ts))\n if (!c || H.intersect(N.data.rect, c) !== null) {\n c = N.data.rect, F = !0;\n break;\n }\n const Q = H.normalizeRect([c[0], U[3] - c[1] + U[1], c[2], U[3] - c[3] + U[1]]), V = F ? c[2] - c[0] + 5 : 0, W = Q[0] + V, i = Q[1];\n e(this, Mt, [100 * (W - t) / l, 100 * (i - Z) / d]);\n const {\n style: R\n } = n(this, zl);\n R.left = `${n(this, Mt)[0]}%`, R.top = `${n(this, Mt)[1]}%`;\n}, aa = function() {\n e(this, mt, !n(this, mt)), n(this, mt) ? (h(this, Ml, Va).call(this), n(this, zl).addEventListener(\"click\", n(this, sc)), n(this, zl).addEventListener(\"keydown\", n(this, nc))) : (h(this, Ml, oW).call(this), n(this, zl).removeEventListener(\"click\", n(this, sc)), n(this, zl).removeEventListener(\"keydown\", n(this, nc)));\n}, Va = function() {\n n(this, hd) || this.render(), this.isVisible ? n(this, mt) && n(this, zl).classList.add(\"focused\") : (h(this, Ml, Mh).call(this), n(this, zl).hidden = !1, n(this, zl).style.zIndex = parseInt(n(this, zl).style.zIndex) + 1e3);\n}, oW = function() {\n n(this, zl).classList.remove(\"focused\"), !(n(this, mt) || !this.isVisible) && (n(this, zl).hidden = !0, n(this, zl).style.zIndex = parseInt(n(this, zl).style.zIndex) - 1e3);\n};\nclass Jh extends El {\n constructor(U) {\n super(U, {\n isRenderable: !0,\n ignoreBorder: !0\n }), this.textContent = U.data.textContent, this.textPosition = U.data.textPosition, this.annotationEditorType = tl.FREETEXT;\n }\n render() {\n if (this.container.classList.add(\"freeTextAnnotation\"), this.textContent) {\n const U = document.createElement(\"div\");\n U.classList.add(\"annotationTextContent\"), U.setAttribute(\"role\", \"comment\");\n for (const l of this.textContent) {\n const d = document.createElement(\"span\");\n d.textContent = l, U.append(d);\n }\n this.container.append(U);\n }\n return !this.data.popupRef && this.hasPopupData && this._createPopup(), this._editOnDoubleClick(), this.container;\n }\n}\nvar Ys;\nclass F2 extends El {\n constructor(l) {\n super(l, {\n isRenderable: !0,\n ignoreBorder: !0\n });\n m(this, Ys, null);\n }\n render() {\n this.container.classList.add(\"lineAnnotation\");\n const l = this.data, {\n width: d,\n height: t\n } = Ct(l.rect), Z = this.svgFactory.create(d, t, !0), F = e(this, Ys, this.svgFactory.createElement(\"svg:line\"));\n return F.setAttribute(\"x1\", l.rect[2] - l.lineCoordinates[0]), F.setAttribute(\"y1\", l.rect[3] - l.lineCoordinates[1]), F.setAttribute(\"x2\", l.rect[2] - l.lineCoordinates[2]), F.setAttribute(\"y2\", l.rect[3] - l.lineCoordinates[3]), F.setAttribute(\"stroke-width\", l.borderStyle.width || 1), F.setAttribute(\"stroke\", \"transparent\"), F.setAttribute(\"fill\", \"transparent\"), Z.append(F), this.container.append(Z), !l.popupRef && this.hasPopupData && this._createPopup(), this.container;\n }\n getElementsToTriggerPopup() {\n return n(this, Ys);\n }\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\nYs = new WeakMap();\nvar os;\nclass c2 extends El {\n constructor(l) {\n super(l, {\n isRenderable: !0,\n ignoreBorder: !0\n });\n m(this, os, null);\n }\n render() {\n this.container.classList.add(\"squareAnnotation\");\n const l = this.data, {\n width: d,\n height: t\n } = Ct(l.rect), Z = this.svgFactory.create(d, t, !0), F = l.borderStyle.width, c = e(this, os, this.svgFactory.createElement(\"svg:rect\"));\n return c.setAttribute(\"x\", F / 2), c.setAttribute(\"y\", F / 2), c.setAttribute(\"width\", d - F), c.setAttribute(\"height\", t - F), c.setAttribute(\"stroke-width\", F || 1), c.setAttribute(\"stroke\", \"transparent\"), c.setAttribute(\"fill\", \"transparent\"), Z.append(c), this.container.append(Z), !l.popupRef && this.hasPopupData && this._createPopup(), this.container;\n }\n getElementsToTriggerPopup() {\n return n(this, os);\n }\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\nos = new WeakMap();\nvar ps;\nclass n2 extends El {\n constructor(l) {\n super(l, {\n isRenderable: !0,\n ignoreBorder: !0\n });\n m(this, ps, null);\n }\n render() {\n this.container.classList.add(\"circleAnnotation\");\n const l = this.data, {\n width: d,\n height: t\n } = Ct(l.rect), Z = this.svgFactory.create(d, t, !0), F = l.borderStyle.width, c = e(this, ps, this.svgFactory.createElement(\"svg:ellipse\"));\n return c.setAttribute(\"cx\", d / 2), c.setAttribute(\"cy\", t / 2), c.setAttribute(\"rx\", d / 2 - F / 2), c.setAttribute(\"ry\", t / 2 - F / 2), c.setAttribute(\"stroke-width\", F || 1), c.setAttribute(\"stroke\", \"transparent\"), c.setAttribute(\"fill\", \"transparent\"), Z.append(c), this.container.append(Z), !l.popupRef && this.hasPopupData && this._createPopup(), this.container;\n }\n getElementsToTriggerPopup() {\n return n(this, ps);\n }\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\nps = new WeakMap();\nvar Bs;\nclass Gh extends El {\n constructor(l) {\n super(l, {\n isRenderable: !0,\n ignoreBorder: !0\n });\n m(this, Bs, null);\n this.containerClassName = \"polylineAnnotation\", this.svgElementName = \"svg:polyline\";\n }\n render() {\n this.container.classList.add(this.containerClassName);\n const {\n data: {\n rect: l,\n vertices: d,\n borderStyle: t,\n popupRef: Z\n }\n } = this;\n if (!d)\n return this.container;\n const {\n width: F,\n height: c\n } = Ct(l), Q = this.svgFactory.create(F, c, !0);\n let a = [];\n for (let W = 0, i = d.length; W < i; W += 2) {\n const R = d[W] - l[0], N = l[3] - d[W + 1];\n a.push(`${R},${N}`);\n }\n a = a.join(\" \");\n const V = e(this, Bs, this.svgFactory.createElement(this.svgElementName));\n return V.setAttribute(\"points\", a), V.setAttribute(\"stroke-width\", t.width || 1), V.setAttribute(\"stroke\", \"transparent\"), V.setAttribute(\"fill\", \"transparent\"), Q.append(V), this.container.append(Q), !Z && this.hasPopupData && this._createPopup(), this.container;\n }\n getElementsToTriggerPopup() {\n return n(this, Bs);\n }\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\nBs = new WeakMap();\nclass s2 extends Gh {\n constructor(U) {\n super(U), this.containerClassName = \"polygonAnnotation\", this.svgElementName = \"svg:polygon\";\n }\n}\nclass Q2 extends El {\n constructor(U) {\n super(U, {\n isRenderable: !0,\n ignoreBorder: !0\n });\n }\n render() {\n return this.container.classList.add(\"caretAnnotation\"), !this.data.popupRef && this.hasPopupData && this._createPopup(), this.container;\n }\n}\nvar ys;\nclass fi extends El {\n constructor(l) {\n super(l, {\n isRenderable: !0,\n ignoreBorder: !0\n });\n m(this, ys, []);\n this.containerClassName = \"inkAnnotation\", this.svgElementName = \"svg:polyline\", this.annotationEditorType = this.data.it === \"InkHighlight\" ? tl.HIGHLIGHT : tl.INK;\n }\n render() {\n this.container.classList.add(this.containerClassName);\n const {\n data: {\n rect: l,\n inkLists: d,\n borderStyle: t,\n popupRef: Z\n }\n } = this, {\n width: F,\n height: c\n } = Ct(l), Q = this.svgFactory.create(F, c, !0);\n for (const a of d) {\n let V = [];\n for (let i = 0, R = a.length; i < R; i += 2) {\n const N = a[i] - l[0], b = l[3] - a[i + 1];\n V.push(`${N},${b}`);\n }\n V = V.join(\" \");\n const W = this.svgFactory.createElement(this.svgElementName);\n n(this, ys).push(W), W.setAttribute(\"points\", V), W.setAttribute(\"stroke-width\", t.width || 1), W.setAttribute(\"stroke\", \"transparent\"), W.setAttribute(\"fill\", \"transparent\"), !Z && this.hasPopupData && this._createPopup(), Q.append(W);\n }\n return this.container.append(Q), this._editOnDoubleClick(), this.container;\n }\n getElementsToTriggerPopup() {\n return n(this, ys);\n }\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\nys = new WeakMap();\nclass Th extends El {\n constructor(U) {\n super(U, {\n isRenderable: !0,\n ignoreBorder: !0,\n createQuadrilaterals: !0\n }), this.annotationEditorType = tl.HIGHLIGHT;\n }\n render() {\n return !this.data.popupRef && this.hasPopupData && this._createPopup(), this.container.classList.add(\"highlightAnnotation\"), this._editOnDoubleClick(), this.container;\n }\n}\nclass a2 extends El {\n constructor(U) {\n super(U, {\n isRenderable: !0,\n ignoreBorder: !0,\n createQuadrilaterals: !0\n });\n }\n render() {\n return !this.data.popupRef && this.hasPopupData && this._createPopup(), this.container.classList.add(\"underlineAnnotation\"), this.container;\n }\n}\nclass V2 extends El {\n constructor(U) {\n super(U, {\n isRenderable: !0,\n ignoreBorder: !0,\n createQuadrilaterals: !0\n });\n }\n render() {\n return !this.data.popupRef && this.hasPopupData && this._createPopup(), this.container.classList.add(\"squigglyAnnotation\"), this.container;\n }\n}\nclass W2 extends El {\n constructor(U) {\n super(U, {\n isRenderable: !0,\n ignoreBorder: !0,\n createQuadrilaterals: !0\n });\n }\n render() {\n return !this.data.popupRef && this.hasPopupData && this._createPopup(), this.container.classList.add(\"strikeoutAnnotation\"), this.container;\n }\n}\nclass Sh extends El {\n constructor(U) {\n super(U, {\n isRenderable: !0,\n ignoreBorder: !0\n }), this.annotationEditorType = tl.STAMP;\n }\n render() {\n return this.container.classList.add(\"stampAnnotation\"), this.container.setAttribute(\"role\", \"img\"), !this.data.popupRef && this.hasPopupData && this._createPopup(), this._editOnDoubleClick(), this.container;\n }\n}\nvar Ls, zs, pW;\nclass i2 extends El {\n constructor(l) {\n var t;\n super(l, {\n isRenderable: !0\n });\n m(this, zs);\n m(this, Ls, null);\n const {\n file: d\n } = this.data;\n this.filename = d.filename, this.content = d.content, (t = this.linkService.eventBus) == null || t.dispatch(\"fileattachmentannotation\", {\n source: this,\n ...d\n });\n }\n render() {\n this.container.classList.add(\"fileAttachmentAnnotation\");\n const {\n container: l,\n data: d\n } = this;\n let t;\n d.hasAppearance || d.fillAlpha === 0 ? t = document.createElement(\"div\") : (t = document.createElement(\"img\"), t.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(d.name) ? \"paperclip\" : \"pushpin\"}.svg`, d.fillAlpha && d.fillAlpha < 1 && (t.style = `filter: opacity(${Math.round(d.fillAlpha * 100)}%);`)), t.addEventListener(\"dblclick\", h(this, zs, pW).bind(this)), e(this, Ls, t);\n const {\n isMac: Z\n } = DU.platform;\n return l.addEventListener(\"keydown\", (F) => {\n F.key === \"Enter\" && (Z ? F.metaKey : F.ctrlKey) && h(this, zs, pW).call(this);\n }), !d.popupRef && this.hasPopupData ? this._createPopup() : t.classList.add(\"popupTriggerArea\"), l.append(t), l;\n }\n getElementsToTriggerPopup() {\n return n(this, Ls);\n }\n addHighlightArea() {\n this.container.classList.add(\"highlightArea\");\n }\n}\nLs = new WeakMap(), zs = new WeakSet(), pW = function() {\n var l;\n (l = this.downloadManager) == null || l.openOrDownloadData(this.content, this.filename);\n};\nvar ks, zF, kF, Is, N0, Xh, BW, aN;\nlet R2 = (aN = class {\n constructor({\n div: U,\n accessibilityManager: l,\n annotationCanvasMap: d,\n annotationEditorUIManager: t,\n page: Z,\n viewport: F,\n structTreeLayer: c\n }) {\n m(this, N0);\n m(this, ks, null);\n m(this, zF, null);\n m(this, kF, /* @__PURE__ */ new Map());\n m(this, Is, null);\n this.div = U, e(this, ks, l), e(this, zF, d), e(this, Is, c || null), this.page = Z, this.viewport = F, this.zIndex = 0, this._annotationEditorUIManager = t;\n }\n hasEditableAnnotations() {\n return n(this, kF).size > 0;\n }\n async render(U) {\n var F;\n const {\n annotations: l\n } = U, d = this.div;\n i0(d, this.viewport);\n const t = /* @__PURE__ */ new Map(), Z = {\n data: null,\n layer: d,\n linkService: U.linkService,\n downloadManager: U.downloadManager,\n imageResourcesPath: U.imageResourcesPath || \"\",\n renderForms: U.renderForms !== !1,\n svgFactory: new wi(),\n annotationStorage: U.annotationStorage || new gi(),\n enableScripting: U.enableScripting === !0,\n hasJSActions: U.hasJSActions,\n fieldObjects: U.fieldObjects,\n parent: this,\n elements: null\n };\n for (const c of l) {\n if (c.noHTML)\n continue;\n const Q = c.annotationType === Kl.POPUP;\n if (Q) {\n const W = t.get(c.id);\n if (!W)\n continue;\n Z.elements = W;\n } else {\n const {\n width: W,\n height: i\n } = Ct(c.rect);\n if (W <= 0 || i <= 0)\n continue;\n }\n Z.data = c;\n const a = _m.create(Z);\n if (!a.isRenderable)\n continue;\n if (!Q && c.popupRef) {\n const W = t.get(c.popupRef);\n W ? W.push(a) : t.set(c.popupRef, [a]);\n }\n const V = a.render();\n c.hidden && (V.style.visibility = \"hidden\"), await h(this, N0, Xh).call(this, V, c.id), a._isEditable && (n(this, kF).set(a.data.id, a), (F = this._annotationEditorUIManager) == null || F.renderAnnotationElement(a));\n }\n h(this, N0, BW).call(this);\n }\n update({\n viewport: U\n }) {\n const l = this.div;\n this.viewport = U, i0(l, {\n rotation: U.rotation\n }), h(this, N0, BW).call(this), l.hidden = !1;\n }\n getEditableAnnotations() {\n return Array.from(n(this, kF).values());\n }\n getEditableAnnotation(U) {\n return n(this, kF).get(U);\n }\n}, ks = new WeakMap(), zF = new WeakMap(), kF = new WeakMap(), Is = new WeakMap(), N0 = new WeakSet(), Xh = async function(U, l) {\n var F, c;\n const d = U.firstChild || U, t = d.id = `${Ci}${l}`, Z = await ((F = n(this, Is)) == null ? void 0 : F.getAriaAttributes(t));\n if (Z)\n for (const [Q, a] of Z)\n d.setAttribute(Q, a);\n this.div.append(U), (c = n(this, ks)) == null || c.moveElementInDOM(this.div, U, d, !1);\n}, BW = function() {\n if (!n(this, zF))\n return;\n const U = this.div;\n for (const [l, d] of n(this, zF)) {\n const t = U.querySelector(`[data-annotation-id=\"${l}\"]`);\n if (!t)\n continue;\n d.className = \"annotationContent\";\n const {\n firstChild: Z\n } = t;\n Z ? Z.nodeName === \"CANVAS\" ? Z.replaceWith(d) : Z.classList.contains(\"annotationContent\") ? Z.after(d) : Z.before(d) : t.append(d);\n }\n n(this, zF).clear();\n}, aN);\nconst CQ = /\\r\\n?|\\n/g;\nvar ed, xU, Ds, IF, jU, jl, uh, Yh, oh, Wa, jt, ia, Ra, ph, LW, Bh;\nconst Sl = class Sl extends hl {\n constructor(l) {\n super({\n ...l,\n name: \"freeTextEditor\"\n });\n m(this, jl);\n m(this, ed);\n m(this, xU, \"\");\n m(this, Ds, `${this.id}-editor`);\n m(this, IF, null);\n m(this, jU);\n e(this, ed, l.color || Sl._defaultColor || hl._defaultLineColor), e(this, jU, l.fontSize || Sl._defaultFontSize);\n }\n static get _keyboardManager() {\n const l = Sl.prototype, d = (F) => F.isEmpty(), t = In.TRANSLATE_SMALL, Z = In.TRANSLATE_BIG;\n return Ql(this, \"_keyboardManager\", new LQ([[[\"ctrl+s\", \"mac+meta+s\", \"ctrl+p\", \"mac+meta+p\"], l.commitOrRemove, {\n bubbles: !0\n }], [[\"ctrl+Enter\", \"mac+meta+Enter\", \"Escape\", \"mac+Escape\"], l.commitOrRemove], [[\"ArrowLeft\", \"mac+ArrowLeft\"], l._translateEmpty, {\n args: [-t, 0],\n checker: d\n }], [[\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"], l._translateEmpty, {\n args: [-Z, 0],\n checker: d\n }], [[\"ArrowRight\", \"mac+ArrowRight\"], l._translateEmpty, {\n args: [t, 0],\n checker: d\n }], [[\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"], l._translateEmpty, {\n args: [Z, 0],\n checker: d\n }], [[\"ArrowUp\", \"mac+ArrowUp\"], l._translateEmpty, {\n args: [0, -t],\n checker: d\n }], [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], l._translateEmpty, {\n args: [0, -Z],\n checker: d\n }], [[\"ArrowDown\", \"mac+ArrowDown\"], l._translateEmpty, {\n args: [0, t],\n checker: d\n }], [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], l._translateEmpty, {\n args: [0, Z],\n checker: d\n }]]));\n }\n static initialize(l, d) {\n hl.initialize(l, d, {\n strings: [\"pdfjs-free-text-default-content\"]\n });\n const t = getComputedStyle(document.documentElement);\n this._internalPadding = parseFloat(t.getPropertyValue(\"--freetext-padding\"));\n }\n static updateDefaultParams(l, d) {\n switch (l) {\n case q.FREETEXT_SIZE:\n Sl._defaultFontSize = d;\n break;\n case q.FREETEXT_COLOR:\n Sl._defaultColor = d;\n break;\n }\n }\n updateParams(l, d) {\n switch (l) {\n case q.FREETEXT_SIZE:\n h(this, jl, uh).call(this, d);\n break;\n case q.FREETEXT_COLOR:\n h(this, jl, Yh).call(this, d);\n break;\n }\n }\n static get defaultPropertiesToUpdate() {\n return [[q.FREETEXT_SIZE, Sl._defaultFontSize], [q.FREETEXT_COLOR, Sl._defaultColor || hl._defaultLineColor]];\n }\n get propertiesToUpdate() {\n return [[q.FREETEXT_SIZE, n(this, jU)], [q.FREETEXT_COLOR, n(this, ed)]];\n }\n _translateEmpty(l, d) {\n this._uiManager.translateSelectedEditors(l, d, !0);\n }\n getInitialTranslation() {\n const l = this.parentScale;\n return [-Sl._internalPadding * l, -(Sl._internalPadding + n(this, jU)) * l];\n }\n rebuild() {\n this.parent && (super.rebuild(), this.div !== null && (this.isAttachedToDOM || this.parent.add(this)));\n }\n enableEditMode() {\n if (this.isInEditMode())\n return;\n this.parent.setEditingState(!1), this.parent.updateToolbar(tl.FREETEXT), super.enableEditMode(), this.overlayDiv.classList.remove(\"enabled\"), this.editorDiv.contentEditable = !0, this._isDraggable = !1, this.div.removeAttribute(\"aria-activedescendant\"), e(this, IF, new AbortController());\n const l = this._uiManager.combinedSignal(n(this, IF));\n this.editorDiv.addEventListener(\"keydown\", this.editorDivKeydown.bind(this), {\n signal: l\n }), this.editorDiv.addEventListener(\"focus\", this.editorDivFocus.bind(this), {\n signal: l\n }), this.editorDiv.addEventListener(\"blur\", this.editorDivBlur.bind(this), {\n signal: l\n }), this.editorDiv.addEventListener(\"input\", this.editorDivInput.bind(this), {\n signal: l\n }), this.editorDiv.addEventListener(\"paste\", this.editorDivPaste.bind(this), {\n signal: l\n });\n }\n disableEditMode() {\n var l;\n this.isInEditMode() && (this.parent.setEditingState(!0), super.disableEditMode(), this.overlayDiv.classList.add(\"enabled\"), this.editorDiv.contentEditable = !1, this.div.setAttribute(\"aria-activedescendant\", n(this, Ds)), this._isDraggable = !0, (l = n(this, IF)) == null || l.abort(), e(this, IF, null), this.div.focus({\n preventScroll: !0\n }), this.isEditing = !1, this.parent.div.classList.add(\"freetextEditing\"));\n }\n focusin(l) {\n this._focusEventsAllowed && (super.focusin(l), l.target !== this.editorDiv && this.editorDiv.focus());\n }\n onceAdded() {\n var l;\n this.width || (this.enableEditMode(), this.editorDiv.focus(), (l = this._initialOptions) != null && l.isCentered && this.center(), this._initialOptions = null);\n }\n isEmpty() {\n return !this.editorDiv || this.editorDiv.innerText.trim() === \"\";\n }\n remove() {\n this.isEditing = !1, this.parent && (this.parent.setEditingState(!0), this.parent.div.classList.add(\"freetextEditing\")), super.remove();\n }\n commit() {\n if (!this.isInEditMode())\n return;\n super.commit(), this.disableEditMode();\n const l = n(this, xU), d = e(this, xU, h(this, jl, oh).call(this).trimEnd());\n if (l === d)\n return;\n const t = (Z) => {\n if (e(this, xU, Z), !Z) {\n this.remove();\n return;\n }\n h(this, jl, Ra).call(this), this._uiManager.rebuild(this), h(this, jl, Wa).call(this);\n };\n this.addCommands({\n cmd: () => {\n t(d);\n },\n undo: () => {\n t(l);\n },\n mustExec: !1\n }), h(this, jl, Wa).call(this);\n }\n shouldGetKeyboardEvents() {\n return this.isInEditMode();\n }\n enterInEditMode() {\n this.enableEditMode(), this.editorDiv.focus();\n }\n dblclick(l) {\n this.enterInEditMode();\n }\n keydown(l) {\n l.target === this.div && l.key === \"Enter\" && (this.enterInEditMode(), l.preventDefault());\n }\n editorDivKeydown(l) {\n Sl._keyboardManager.exec(this, l);\n }\n editorDivFocus(l) {\n this.isEditing = !0;\n }\n editorDivBlur(l) {\n this.isEditing = !1;\n }\n editorDivInput(l) {\n this.parent.div.classList.toggle(\"freetextEditing\", this.isEmpty());\n }\n disableEditing() {\n this.editorDiv.setAttribute(\"role\", \"comment\"), this.editorDiv.removeAttribute(\"aria-multiline\");\n }\n enableEditing() {\n this.editorDiv.setAttribute(\"role\", \"textbox\"), this.editorDiv.setAttribute(\"aria-multiline\", !0);\n }\n render() {\n if (this.div)\n return this.div;\n let l, d;\n this.width && (l = this.x, d = this.y), super.render(), this.editorDiv = document.createElement(\"div\"), this.editorDiv.className = \"internal\", this.editorDiv.setAttribute(\"id\", n(this, Ds)), this.editorDiv.setAttribute(\"data-l10n-id\", \"pdfjs-free-text\"), this.enableEditing(), hl._l10nPromise.get(\"pdfjs-free-text-default-content\").then((Z) => {\n var F;\n return (F = this.editorDiv) == null ? void 0 : F.setAttribute(\"default-content\", Z);\n }), this.editorDiv.contentEditable = !0;\n const {\n style: t\n } = this.editorDiv;\n if (t.fontSize = `calc(${n(this, jU)}px * var(--scale-factor))`, t.color = n(this, ed), this.div.append(this.editorDiv), this.overlayDiv = document.createElement(\"div\"), this.overlayDiv.classList.add(\"overlay\", \"enabled\"), this.div.append(this.overlayDiv), ra(this, this.div, [\"dblclick\", \"keydown\"]), this.width) {\n const [Z, F] = this.parentDimensions;\n if (this.annotationElementId) {\n const {\n position: c\n } = this._initialData;\n let [Q, a] = this.getInitialTranslation();\n [Q, a] = this.pageTranslationToScreen(Q, a);\n const [V, W] = this.pageDimensions, [i, R] = this.pageTranslation;\n let N, b;\n switch (this.rotation) {\n case 0:\n N = l + (c[0] - i) / V, b = d + this.height - (c[1] - R) / W;\n break;\n case 90:\n N = l + (c[0] - i) / V, b = d - (c[1] - R) / W, [Q, a] = [a, -Q];\n break;\n case 180:\n N = l - this.width + (c[0] - i) / V, b = d - (c[1] - R) / W, [Q, a] = [-Q, -a];\n break;\n case 270:\n N = l + (c[0] - i - this.height * W) / V, b = d + (c[1] - R - this.width * V) / W, [Q, a] = [-a, Q];\n break;\n }\n this.setAt(N * Z, b * F, Q, a);\n } else\n this.setAt(l * Z, d * F, this.width * Z, this.height * F);\n h(this, jl, Ra).call(this), this._isDraggable = !0, this.editorDiv.contentEditable = !1;\n } else\n this._isDraggable = !1, this.editorDiv.contentEditable = !0;\n return this.div;\n }\n editorDivPaste(l) {\n var N, b, J;\n const d = l.clipboardData || window.clipboardData, {\n types: t\n } = d;\n if (t.length === 1 && t[0] === \"text/plain\")\n return;\n l.preventDefault();\n const Z = h(N = Sl, jt, LW).call(N, d.getData(\"text\") || \"\").replaceAll(CQ, `\n`);\n if (!Z)\n return;\n const F = window.getSelection();\n if (!F.rangeCount)\n return;\n this.editorDiv.normalize(), F.deleteFromDocument();\n const c = F.getRangeAt(0);\n if (!Z.includes(`\n`)) {\n c.insertNode(document.createTextNode(Z)), this.editorDiv.normalize(), F.collapseToStart();\n return;\n }\n const {\n startContainer: Q,\n startOffset: a\n } = c, V = [], W = [];\n if (Q.nodeType === Node.TEXT_NODE) {\n const M = Q.parentElement;\n if (W.push(Q.nodeValue.slice(a).replaceAll(CQ, \"\")), M !== this.editorDiv) {\n let G = V;\n for (const T of this.editorDiv.childNodes) {\n if (T === M) {\n G = W;\n continue;\n }\n G.push(h(b = Sl, jt, ia).call(b, T));\n }\n }\n V.push(Q.nodeValue.slice(0, a).replaceAll(CQ, \"\"));\n } else if (Q === this.editorDiv) {\n let M = V, G = 0;\n for (const T of this.editorDiv.childNodes)\n G++ === a && (M = W), M.push(h(J = Sl, jt, ia).call(J, T));\n }\n e(this, xU, `${V.join(`\n`)}${Z}${W.join(`\n`)}`), h(this, jl, Ra).call(this);\n const i = new Range();\n let R = V.reduce((M, G) => M + G.length, 0);\n for (const {\n firstChild: M\n } of this.editorDiv.childNodes)\n if (M.nodeType === Node.TEXT_NODE) {\n const G = M.nodeValue.length;\n if (R <= G) {\n i.setStart(M, R), i.setEnd(M, R);\n break;\n }\n R -= G;\n }\n F.removeAllRanges(), F.addRange(i);\n }\n get contentDiv() {\n return this.editorDiv;\n }\n static async deserialize(l, d, t) {\n var c;\n let Z = null;\n if (l instanceof Jh) {\n const {\n data: {\n defaultAppearanceData: {\n fontSize: Q,\n fontColor: a\n },\n rect: V,\n rotation: W,\n id: i,\n popupRef: R\n },\n textContent: N,\n textPosition: b,\n parent: {\n page: {\n pageNumber: J\n }\n }\n } = l;\n if (!N || N.length === 0)\n return null;\n Z = l = {\n annotationType: tl.FREETEXT,\n color: Array.from(a),\n fontSize: Q,\n value: N.join(`\n`),\n position: b,\n pageIndex: J - 1,\n rect: V.slice(0),\n rotation: W,\n id: i,\n deleted: !1,\n popupRef: R\n };\n }\n const F = await super.deserialize(l, d, t);\n return e(F, jU, l.fontSize), e(F, ed, H.makeHexColor(...l.color)), e(F, xU, h(c = Sl, jt, LW).call(c, l.value)), F.annotationElementId = l.id || null, F._initialData = Z, F;\n }\n serialize(l = !1) {\n if (this.isEmpty())\n return null;\n if (this.deleted)\n return this.serializeDeleted();\n const d = Sl._internalPadding * this.parentScale, t = this.getRect(d, d), Z = hl._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : n(this, ed)), F = {\n annotationType: tl.FREETEXT,\n color: Z,\n fontSize: n(this, jU),\n value: h(this, jl, ph).call(this),\n pageIndex: this.pageIndex,\n rect: t,\n rotation: this.rotation,\n structTreeParentId: this._structTreeParentId\n };\n return l ? F : this.annotationElementId && !h(this, jl, Bh).call(this, F) ? null : (F.id = this.annotationElementId, F);\n }\n renderAnnotationElement(l) {\n const d = super.renderAnnotationElement(l);\n if (this.deleted)\n return d;\n const {\n style: t\n } = d;\n t.fontSize = `calc(${n(this, jU)}px * var(--scale-factor))`, t.color = n(this, ed), d.replaceChildren();\n for (const F of n(this, xU).split(`\n`)) {\n const c = document.createElement(\"div\");\n c.append(F ? document.createTextNode(F) : document.createElement(\"br\")), d.append(c);\n }\n const Z = Sl._internalPadding * this.parentScale;\n return l.updateEdited({\n rect: this.getRect(Z, Z),\n popupContent: n(this, xU)\n }), d;\n }\n resetAnnotationElement(l) {\n super.resetAnnotationElement(l), l.resetEdited();\n }\n};\ned = new WeakMap(), xU = new WeakMap(), Ds = new WeakMap(), IF = new WeakMap(), jU = new WeakMap(), jl = new WeakSet(), uh = function(l) {\n const d = (Z) => {\n this.editorDiv.style.fontSize = `calc(${Z}px * var(--scale-factor))`, this.translate(0, -(Z - n(this, jU)) * this.parentScale), e(this, jU, Z), h(this, jl, Wa).call(this);\n }, t = n(this, jU);\n this.addCommands({\n cmd: d.bind(this, l),\n undo: d.bind(this, t),\n post: this._uiManager.updateUI.bind(this._uiManager, this),\n mustExec: !0,\n type: q.FREETEXT_SIZE,\n overwriteIfSameType: !0,\n keepUndo: !0\n });\n}, Yh = function(l) {\n const d = (Z) => {\n e(this, ed, this.editorDiv.style.color = Z);\n }, t = n(this, ed);\n this.addCommands({\n cmd: d.bind(this, l),\n undo: d.bind(this, t),\n post: this._uiManager.updateUI.bind(this._uiManager, this),\n mustExec: !0,\n type: q.FREETEXT_COLOR,\n overwriteIfSameType: !0,\n keepUndo: !0\n });\n}, oh = function() {\n var t;\n const l = [];\n this.editorDiv.normalize();\n let d = null;\n for (const Z of this.editorDiv.childNodes)\n (d == null ? void 0 : d.nodeType) === Node.TEXT_NODE && Z.nodeName === \"BR\" || (l.push(h(t = Sl, jt, ia).call(t, Z)), d = Z);\n return l.join(`\n`);\n}, Wa = function() {\n const [l, d] = this.parentDimensions;\n let t;\n if (this.isAttachedToDOM)\n t = this.div.getBoundingClientRect();\n else {\n const {\n currentLayer: Z,\n div: F\n } = this, c = F.style.display, Q = F.classList.contains(\"hidden\");\n F.classList.remove(\"hidden\"), F.style.display = \"hidden\", Z.div.append(this.div), t = F.getBoundingClientRect(), F.remove(), F.style.display = c, F.classList.toggle(\"hidden\", Q);\n }\n this.rotation % 180 === this.parentRotation % 180 ? (this.width = t.width / l, this.height = t.height / d) : (this.width = t.height / l, this.height = t.width / d), this.fixAndSetPosition();\n}, jt = new WeakSet(), ia = function(l) {\n return (l.nodeType === Node.TEXT_NODE ? l.nodeValue : l.innerText).replaceAll(CQ, \"\");\n}, Ra = function() {\n if (this.editorDiv.replaceChildren(), !!n(this, xU))\n for (const l of n(this, xU).split(`\n`)) {\n const d = document.createElement(\"div\");\n d.append(l ? document.createTextNode(l) : document.createElement(\"br\")), this.editorDiv.append(d);\n }\n}, ph = function() {\n return n(this, xU).replaceAll(\" \", \" \");\n}, LW = function(l) {\n return l.replaceAll(\" \", \" \");\n}, Bh = function(l) {\n const {\n value: d,\n fontSize: t,\n color: Z,\n pageIndex: F\n } = this._initialData;\n return this._hasBeenMoved || l.value !== d || l.fontSize !== t || l.color.some((c, Q) => c !== Z[Q]) || l.pageIndex !== F;\n}, m(Sl, jt), _(Sl, \"_freeTextDefaultContent\", \"\"), _(Sl, \"_internalPadding\", 0), _(Sl, \"_defaultColor\", null), _(Sl, \"_defaultFontSize\", 10), _(Sl, \"_type\", \"freetext\"), _(Sl, \"_editorType\", tl.FREETEXT);\nlet yW = Sl;\nvar Es, NZ, bd, XU, yh, Na, Lh, zh, zW;\nclass XR {\n constructor(U, l = 0, d = 0, t = !0) {\n m(this, XU);\n m(this, Es);\n m(this, NZ, []);\n m(this, bd, []);\n let Z = 1 / 0, F = -1 / 0, c = 1 / 0, Q = -1 / 0;\n const V = 10 ** -4;\n for (const {\n x: M,\n y: G,\n width: T,\n height: u\n } of U) {\n const X = Math.floor((M - l) / V) * V, Y = Math.ceil((M + T + l) / V) * V, o = Math.floor((G - l) / V) * V, y = Math.ceil((G + u + l) / V) * V, S = [X, o, y, !0], p = [Y, o, y, !1];\n n(this, NZ).push(S, p), Z = Math.min(Z, X), F = Math.max(F, Y), c = Math.min(c, o), Q = Math.max(Q, y);\n }\n const W = F - Z + 2 * d, i = Q - c + 2 * d, R = Z - d, N = c - d, b = n(this, NZ).at(t ? -1 : -2), J = [b[0], b[2]];\n for (const M of n(this, NZ)) {\n const [G, T, u] = M;\n M[0] = (G - R) / W, M[1] = (T - N) / i, M[2] = (u - N) / i;\n }\n e(this, Es, {\n x: R,\n y: N,\n width: W,\n height: i,\n lastPoint: J\n });\n }\n getOutlines() {\n n(this, NZ).sort((l, d) => l[0] - d[0] || l[1] - d[1] || l[2] - d[2]);\n const U = [];\n for (const l of n(this, NZ))\n l[3] ? (U.push(...h(this, XU, zW).call(this, l)), h(this, XU, Lh).call(this, l)) : (h(this, XU, zh).call(this, l), U.push(...h(this, XU, zW).call(this, l)));\n return h(this, XU, yh).call(this, U);\n }\n}\nEs = new WeakMap(), NZ = new WeakMap(), bd = new WeakMap(), XU = new WeakSet(), yh = function(U) {\n const l = [], d = /* @__PURE__ */ new Set();\n for (const F of U) {\n const [c, Q, a] = F;\n l.push([c, Q, F], [c, a, F]);\n }\n l.sort((F, c) => F[1] - c[1] || F[0] - c[0]);\n for (let F = 0, c = l.length; F < c; F += 2) {\n const Q = l[F][2], a = l[F + 1][2];\n Q.push(a), a.push(Q), d.add(Q), d.add(a);\n }\n const t = [];\n let Z;\n for (; d.size > 0; ) {\n const F = d.values().next().value;\n let [c, Q, a, V, W] = F;\n d.delete(F);\n let i = c, R = Q;\n for (Z = [c, a], t.push(Z); ; ) {\n let N;\n if (d.has(V))\n N = V;\n else if (d.has(W))\n N = W;\n else\n break;\n d.delete(N), [c, Q, a, V, W] = N, i !== c && (Z.push(i, R, c, R === Q ? Q : a), i = c), R = R === Q ? a : Q;\n }\n Z.push(i, R);\n }\n return new N2(t, n(this, Es));\n}, Na = function(U) {\n const l = n(this, bd);\n let d = 0, t = l.length - 1;\n for (; d <= t; ) {\n const Z = d + t >> 1, F = l[Z][0];\n if (F === U)\n return Z;\n F < U ? d = Z + 1 : t = Z - 1;\n }\n return t + 1;\n}, Lh = function([, U, l]) {\n const d = h(this, XU, Na).call(this, U);\n n(this, bd).splice(d, 0, [U, l]);\n}, zh = function([, U, l]) {\n const d = h(this, XU, Na).call(this, U);\n for (let t = d; t < n(this, bd).length; t++) {\n const [Z, F] = n(this, bd)[t];\n if (Z !== U)\n break;\n if (Z === U && F === l) {\n n(this, bd).splice(t, 1);\n return;\n }\n }\n for (let t = d - 1; t >= 0; t--) {\n const [Z, F] = n(this, bd)[t];\n if (Z !== U)\n break;\n if (Z === U && F === l) {\n n(this, bd).splice(t, 1);\n return;\n }\n }\n}, zW = function(U) {\n const [l, d, t] = U, Z = [[l, d, t]], F = h(this, XU, Na).call(this, t);\n for (let c = 0; c < F; c++) {\n const [Q, a] = n(this, bd)[c];\n for (let V = 0, W = Z.length; V < W; V++) {\n const [, i, R] = Z[V];\n if (!(a <= i || R <= Q)) {\n if (i >= Q) {\n if (R > a)\n Z[V][1] = a;\n else {\n if (W === 1)\n return [];\n Z.splice(V, 1), V--, W--;\n }\n continue;\n }\n Z[V][2] = Q, R > a && Z.push([l, a, R]);\n }\n }\n }\n return Z;\n};\nclass kh {\n toSVGPath() {\n throw new Error(\"Abstract method `toSVGPath` must be implemented.\");\n }\n get box() {\n throw new Error(\"Abstract getter `box` must be implemented.\");\n }\n serialize(U, l) {\n throw new Error(\"Abstract method `serialize` must be implemented.\");\n }\n get free() {\n return this instanceof IW;\n }\n}\nvar rs, Vc;\nclass N2 extends kh {\n constructor(l, d) {\n super();\n m(this, rs);\n m(this, Vc);\n e(this, Vc, l), e(this, rs, d);\n }\n toSVGPath() {\n const l = [];\n for (const d of n(this, Vc)) {\n let [t, Z] = d;\n l.push(`M${t} ${Z}`);\n for (let F = 2; F < d.length; F += 2) {\n const c = d[F], Q = d[F + 1];\n c === t ? (l.push(`V${Q}`), Z = Q) : Q === Z && (l.push(`H${c}`), t = c);\n }\n l.push(\"Z\");\n }\n return l.join(\" \");\n }\n serialize([l, d, t, Z], F) {\n const c = [], Q = t - l, a = Z - d;\n for (const V of n(this, Vc)) {\n const W = new Array(V.length);\n for (let i = 0; i < V.length; i += 2)\n W[i] = l + V[i] * Q, W[i + 1] = Z - V[i + 1] * a;\n c.push(W);\n }\n return c;\n }\n get box() {\n return n(this, rs);\n }\n}\nrs = new WeakMap(), Vc = new WeakMap();\nvar Cd, Gt, Wc, ic, wd, sl, DF, EF, Cs, ws, Rc, Nc, hZ, xs, cV, nV, js, kW;\nconst nt = class nt {\n constructor({\n x: U,\n y: l\n }, d, t, Z, F, c = 0) {\n m(this, js);\n m(this, Cd);\n m(this, Gt, []);\n m(this, Wc);\n m(this, ic);\n m(this, wd, []);\n m(this, sl, new Float64Array(18));\n m(this, DF);\n m(this, EF);\n m(this, Cs);\n m(this, ws);\n m(this, Rc);\n m(this, Nc);\n m(this, hZ, []);\n e(this, Cd, d), e(this, Nc, Z * t), e(this, ic, F), n(this, sl).set([NaN, NaN, NaN, NaN, U, l], 6), e(this, Wc, c), e(this, ws, n(nt, xs) * t), e(this, Cs, n(nt, nV) * t), e(this, Rc, t), n(this, hZ).push(U, l);\n }\n get free() {\n return !0;\n }\n isEmpty() {\n return isNaN(n(this, sl)[8]);\n }\n add({\n x: U,\n y: l\n }) {\n var S;\n e(this, DF, U), e(this, EF, l);\n const [d, t, Z, F] = n(this, Cd);\n let [c, Q, a, V] = n(this, sl).subarray(8, 12);\n const W = U - a, i = l - V, R = Math.hypot(W, i);\n if (R < n(this, Cs))\n return !1;\n const N = R - n(this, ws), b = N / R, J = b * W, M = b * i;\n let G = c, T = Q;\n c = a, Q = V, a += J, V += M, (S = n(this, hZ)) == null || S.push(U, l);\n const u = -M / N, X = J / N, Y = u * n(this, Nc), o = X * n(this, Nc);\n return n(this, sl).set(n(this, sl).subarray(2, 8), 0), n(this, sl).set([a + Y, V + o], 4), n(this, sl).set(n(this, sl).subarray(14, 18), 12), n(this, sl).set([a - Y, V - o], 16), isNaN(n(this, sl)[6]) ? (n(this, wd).length === 0 && (n(this, sl).set([c + Y, Q + o], 2), n(this, wd).push(NaN, NaN, NaN, NaN, (c + Y - d) / Z, (Q + o - t) / F), n(this, sl).set([c - Y, Q - o], 14), n(this, Gt).push(NaN, NaN, NaN, NaN, (c - Y - d) / Z, (Q - o - t) / F)), n(this, sl).set([G, T, c, Q, a, V], 6), !this.isEmpty()) : (n(this, sl).set([G, T, c, Q, a, V], 6), Math.abs(Math.atan2(T - Q, G - c) - Math.atan2(M, J)) < Math.PI / 2 ? ([c, Q, a, V] = n(this, sl).subarray(2, 6), n(this, wd).push(NaN, NaN, NaN, NaN, ((c + a) / 2 - d) / Z, ((Q + V) / 2 - t) / F), [c, Q, G, T] = n(this, sl).subarray(14, 18), n(this, Gt).push(NaN, NaN, NaN, NaN, ((G + c) / 2 - d) / Z, ((T + Q) / 2 - t) / F), !0) : ([G, T, c, Q, a, V] = n(this, sl).subarray(0, 6), n(this, wd).push(((G + 5 * c) / 6 - d) / Z, ((T + 5 * Q) / 6 - t) / F, ((5 * c + a) / 6 - d) / Z, ((5 * Q + V) / 6 - t) / F, ((c + a) / 2 - d) / Z, ((Q + V) / 2 - t) / F), [a, V, c, Q, G, T] = n(this, sl).subarray(12, 18), n(this, Gt).push(((G + 5 * c) / 6 - d) / Z, ((T + 5 * Q) / 6 - t) / F, ((5 * c + a) / 6 - d) / Z, ((5 * Q + V) / 6 - t) / F, ((c + a) / 2 - d) / Z, ((Q + V) / 2 - t) / F), !0));\n }\n toSVGPath() {\n if (this.isEmpty())\n return \"\";\n const U = n(this, wd), l = n(this, Gt), d = n(this, sl).subarray(4, 6), t = n(this, sl).subarray(16, 18), [Z, F, c, Q] = n(this, Cd), [a, V, W, i] = h(this, js, kW).call(this);\n if (isNaN(n(this, sl)[6]) && !this.isEmpty())\n return `M${(n(this, sl)[2] - Z) / c} ${(n(this, sl)[3] - F) / Q} L${(n(this, sl)[4] - Z) / c} ${(n(this, sl)[5] - F) / Q} L${a} ${V} L${W} ${i} L${(n(this, sl)[16] - Z) / c} ${(n(this, sl)[17] - F) / Q} L${(n(this, sl)[14] - Z) / c} ${(n(this, sl)[15] - F) / Q} Z`;\n const R = [];\n R.push(`M${U[4]} ${U[5]}`);\n for (let N = 6; N < U.length; N += 6)\n isNaN(U[N]) ? R.push(`L${U[N + 4]} ${U[N + 5]}`) : R.push(`C${U[N]} ${U[N + 1]} ${U[N + 2]} ${U[N + 3]} ${U[N + 4]} ${U[N + 5]}`);\n R.push(`L${(d[0] - Z) / c} ${(d[1] - F) / Q} L${a} ${V} L${W} ${i} L${(t[0] - Z) / c} ${(t[1] - F) / Q}`);\n for (let N = l.length - 6; N >= 6; N -= 6)\n isNaN(l[N]) ? R.push(`L${l[N + 4]} ${l[N + 5]}`) : R.push(`C${l[N]} ${l[N + 1]} ${l[N + 2]} ${l[N + 3]} ${l[N + 4]} ${l[N + 5]}`);\n return R.push(`L${l[4]} ${l[5]} Z`), R.join(\" \");\n }\n getOutlines() {\n var M;\n const U = n(this, wd), l = n(this, Gt), d = n(this, sl), t = d.subarray(4, 6), Z = d.subarray(16, 18), [F, c, Q, a] = n(this, Cd), V = new Float64Array((((M = n(this, hZ)) == null ? void 0 : M.length) ?? 0) + 2);\n for (let G = 0, T = V.length - 2; G < T; G += 2)\n V[G] = (n(this, hZ)[G] - F) / Q, V[G + 1] = (n(this, hZ)[G + 1] - c) / a;\n V[V.length - 2] = (n(this, DF) - F) / Q, V[V.length - 1] = (n(this, EF) - c) / a;\n const [W, i, R, N] = h(this, js, kW).call(this);\n if (isNaN(d[6]) && !this.isEmpty()) {\n const G = new Float64Array(36);\n return G.set([NaN, NaN, NaN, NaN, (d[2] - F) / Q, (d[3] - c) / a, NaN, NaN, NaN, NaN, (d[4] - F) / Q, (d[5] - c) / a, NaN, NaN, NaN, NaN, W, i, NaN, NaN, NaN, NaN, R, N, NaN, NaN, NaN, NaN, (d[16] - F) / Q, (d[17] - c) / a, NaN, NaN, NaN, NaN, (d[14] - F) / Q, (d[15] - c) / a], 0), new IW(G, V, n(this, Cd), n(this, Rc), n(this, Wc), n(this, ic));\n }\n const b = new Float64Array(n(this, wd).length + 24 + n(this, Gt).length);\n let J = U.length;\n for (let G = 0; G < J; G += 2) {\n if (isNaN(U[G])) {\n b[G] = b[G + 1] = NaN;\n continue;\n }\n b[G] = U[G], b[G + 1] = U[G + 1];\n }\n b.set([NaN, NaN, NaN, NaN, (t[0] - F) / Q, (t[1] - c) / a, NaN, NaN, NaN, NaN, W, i, NaN, NaN, NaN, NaN, R, N, NaN, NaN, NaN, NaN, (Z[0] - F) / Q, (Z[1] - c) / a], J), J += 24;\n for (let G = l.length - 6; G >= 6; G -= 6)\n for (let T = 0; T < 6; T += 2) {\n if (isNaN(l[G + T])) {\n b[J] = b[J + 1] = NaN, J += 2;\n continue;\n }\n b[J] = l[G + T], b[J + 1] = l[G + T + 1], J += 2;\n }\n return b.set([NaN, NaN, NaN, NaN, l[4], l[5]], J), new IW(b, V, n(this, Cd), n(this, Rc), n(this, Wc), n(this, ic));\n }\n};\nCd = new WeakMap(), Gt = new WeakMap(), Wc = new WeakMap(), ic = new WeakMap(), wd = new WeakMap(), sl = new WeakMap(), DF = new WeakMap(), EF = new WeakMap(), Cs = new WeakMap(), ws = new WeakMap(), Rc = new WeakMap(), Nc = new WeakMap(), hZ = new WeakMap(), xs = new WeakMap(), cV = new WeakMap(), nV = new WeakMap(), js = new WeakSet(), kW = function() {\n const U = n(this, sl).subarray(4, 6), l = n(this, sl).subarray(16, 18), [d, t, Z, F] = n(this, Cd);\n return [(n(this, DF) + (U[0] - l[0]) / 2 - d) / Z, (n(this, EF) + (U[1] - l[1]) / 2 - t) / F, (n(this, DF) + (l[0] - U[0]) / 2 - d) / Z, (n(this, EF) + (l[1] - U[1]) / 2 - t) / F];\n}, m(nt, xs, 8), m(nt, cV, 2), m(nt, nV, n(nt, xs) + n(nt, cV));\nlet En = nt;\nvar hc, rF, Tt, Os, OU, gs, Dl, IU, hn, en, Ih;\nclass IW extends kh {\n constructor(l, d, t, Z, F, c) {\n super();\n m(this, IU);\n m(this, hc);\n m(this, rF, null);\n m(this, Tt);\n m(this, Os);\n m(this, OU);\n m(this, gs);\n m(this, Dl);\n e(this, Dl, l), e(this, OU, d), e(this, hc, t), e(this, gs, Z), e(this, Tt, F), e(this, Os, c), h(this, IU, Ih).call(this, c);\n const {\n x: Q,\n y: a,\n width: V,\n height: W\n } = n(this, rF);\n for (let i = 0, R = l.length; i < R; i += 2)\n l[i] = (l[i] - Q) / V, l[i + 1] = (l[i + 1] - a) / W;\n for (let i = 0, R = d.length; i < R; i += 2)\n d[i] = (d[i] - Q) / V, d[i + 1] = (d[i + 1] - a) / W;\n }\n toSVGPath() {\n const l = [`M${n(this, Dl)[4]} ${n(this, Dl)[5]}`];\n for (let d = 6, t = n(this, Dl).length; d < t; d += 6) {\n if (isNaN(n(this, Dl)[d])) {\n l.push(`L${n(this, Dl)[d + 4]} ${n(this, Dl)[d + 5]}`);\n continue;\n }\n l.push(`C${n(this, Dl)[d]} ${n(this, Dl)[d + 1]} ${n(this, Dl)[d + 2]} ${n(this, Dl)[d + 3]} ${n(this, Dl)[d + 4]} ${n(this, Dl)[d + 5]}`);\n }\n return l.push(\"Z\"), l.join(\" \");\n }\n serialize([l, d, t, Z], F) {\n const c = t - l, Q = Z - d;\n let a, V;\n switch (F) {\n case 0:\n a = h(this, IU, hn).call(this, n(this, Dl), l, Z, c, -Q), V = h(this, IU, hn).call(this, n(this, OU), l, Z, c, -Q);\n break;\n case 90:\n a = h(this, IU, en).call(this, n(this, Dl), l, d, c, Q), V = h(this, IU, en).call(this, n(this, OU), l, d, c, Q);\n break;\n case 180:\n a = h(this, IU, hn).call(this, n(this, Dl), t, d, -c, Q), V = h(this, IU, hn).call(this, n(this, OU), t, d, -c, Q);\n break;\n case 270:\n a = h(this, IU, en).call(this, n(this, Dl), t, Z, -c, -Q), V = h(this, IU, en).call(this, n(this, OU), t, Z, -c, -Q);\n break;\n }\n return {\n outline: Array.from(a),\n points: [Array.from(V)]\n };\n }\n get box() {\n return n(this, rF);\n }\n getNewOutline(l, d) {\n const {\n x: t,\n y: Z,\n width: F,\n height: c\n } = n(this, rF), [Q, a, V, W] = n(this, hc), i = F * V, R = c * W, N = t * V + Q, b = Z * W + a, J = new En({\n x: n(this, OU)[0] * i + N,\n y: n(this, OU)[1] * R + b\n }, n(this, hc), n(this, gs), l, n(this, Os), d ?? n(this, Tt));\n for (let M = 2; M < n(this, OU).length; M += 2)\n J.add({\n x: n(this, OU)[M] * i + N,\n y: n(this, OU)[M + 1] * R + b\n });\n return J.getOutlines();\n }\n}\nhc = new WeakMap(), rF = new WeakMap(), Tt = new WeakMap(), Os = new WeakMap(), OU = new WeakMap(), gs = new WeakMap(), Dl = new WeakMap(), IU = new WeakSet(), hn = function(l, d, t, Z, F) {\n const c = new Float64Array(l.length);\n for (let Q = 0, a = l.length; Q < a; Q += 2)\n c[Q] = d + l[Q] * Z, c[Q + 1] = t + l[Q + 1] * F;\n return c;\n}, en = function(l, d, t, Z, F) {\n const c = new Float64Array(l.length);\n for (let Q = 0, a = l.length; Q < a; Q += 2)\n c[Q] = d + l[Q + 1] * Z, c[Q + 1] = t + l[Q] * F;\n return c;\n}, Ih = function(l) {\n const d = n(this, Dl);\n let t = d[4], Z = d[5], F = t, c = Z, Q = t, a = Z, V = t, W = Z;\n const i = l ? Math.max : Math.min;\n for (let M = 6, G = d.length; M < G; M += 6) {\n if (isNaN(d[M]))\n F = Math.min(F, d[M + 4]), c = Math.min(c, d[M + 5]), Q = Math.max(Q, d[M + 4]), a = Math.max(a, d[M + 5]), W < d[M + 5] ? (V = d[M + 4], W = d[M + 5]) : W === d[M + 5] && (V = i(V, d[M + 4]));\n else {\n const T = H.bezierBoundingBox(t, Z, ...d.slice(M, M + 6));\n F = Math.min(F, T[0]), c = Math.min(c, T[1]), Q = Math.max(Q, T[2]), a = Math.max(a, T[3]), W < T[3] ? (V = T[2], W = T[3]) : W === T[3] && (V = i(V, T[2]));\n }\n t = d[M + 4], Z = d[M + 5];\n }\n const R = F - n(this, Tt), N = c - n(this, Tt), b = Q - F + 2 * n(this, Tt), J = a - c + 2 * n(this, Tt);\n e(this, rF, {\n x: R,\n y: N,\n width: b,\n height: J,\n lastPoint: [V, W]\n });\n};\nvar Ks, vs, md, CF, ec, Hl, Hs, bc, Ps, fs, Md, mc, QU, As, Tl, DW, EW, Eh, KZ, rh, Ht;\nlet Dh = (QU = class {\n constructor({\n editor: U = null,\n uiManager: l = null\n }) {\n m(this, Tl);\n m(this, Ks, h(this, Tl, Eh).bind(this));\n m(this, vs, h(this, Tl, rh).bind(this));\n m(this, md, null);\n m(this, CF, null);\n m(this, ec);\n m(this, Hl, null);\n m(this, Hs, !1);\n m(this, bc, !1);\n m(this, Ps, null);\n m(this, fs);\n m(this, Md, null);\n m(this, mc);\n var d;\n U ? (e(this, bc, !1), e(this, mc, q.HIGHLIGHT_COLOR), e(this, Ps, U)) : (e(this, bc, !0), e(this, mc, q.HIGHLIGHT_DEFAULT_COLOR)), e(this, Md, (U == null ? void 0 : U._uiManager) || l), e(this, fs, n(this, Md)._eventBus), e(this, ec, (U == null ? void 0 : U.color) || ((d = n(this, Md)) == null ? void 0 : d.highlightColors.values().next().value) || \"#FFFF98\"), n(QU, As) || e(QU, As, Object.freeze({\n blue: \"pdfjs-editor-colorpicker-blue\",\n green: \"pdfjs-editor-colorpicker-green\",\n pink: \"pdfjs-editor-colorpicker-pink\",\n red: \"pdfjs-editor-colorpicker-red\",\n yellow: \"pdfjs-editor-colorpicker-yellow\"\n }));\n }\n static get _keyboardManager() {\n return Ql(this, \"_keyboardManager\", new LQ([[[\"Escape\", \"mac+Escape\"], QU.prototype._hideDropdownFromKeyboard], [[\" \", \"mac+ \"], QU.prototype._colorSelectFromKeyboard], [[\"ArrowDown\", \"ArrowRight\", \"mac+ArrowDown\", \"mac+ArrowRight\"], QU.prototype._moveToNext], [[\"ArrowUp\", \"ArrowLeft\", \"mac+ArrowUp\", \"mac+ArrowLeft\"], QU.prototype._moveToPrevious], [[\"Home\", \"mac+Home\"], QU.prototype._moveToBeginning], [[\"End\", \"mac+End\"], QU.prototype._moveToEnd]]));\n }\n renderButton() {\n const U = e(this, md, document.createElement(\"button\"));\n U.className = \"colorPicker\", U.tabIndex = \"0\", U.setAttribute(\"data-l10n-id\", \"pdfjs-editor-colorpicker-button\"), U.setAttribute(\"aria-haspopup\", !0);\n const l = n(this, Md)._signal;\n U.addEventListener(\"click\", h(this, Tl, KZ).bind(this), {\n signal: l\n }), U.addEventListener(\"keydown\", n(this, Ks), {\n signal: l\n });\n const d = e(this, CF, document.createElement(\"span\"));\n return d.className = \"swatch\", d.setAttribute(\"aria-hidden\", !0), d.style.backgroundColor = n(this, ec), U.append(d), U;\n }\n renderMainDropdown() {\n const U = e(this, Hl, h(this, Tl, DW).call(this));\n return U.setAttribute(\"aria-orientation\", \"horizontal\"), U.setAttribute(\"aria-labelledby\", \"highlightColorPickerLabel\"), U;\n }\n _colorSelectFromKeyboard(U) {\n if (U.target === n(this, md)) {\n h(this, Tl, KZ).call(this, U);\n return;\n }\n const l = U.target.getAttribute(\"data-color\");\n l && h(this, Tl, EW).call(this, l, U);\n }\n _moveToNext(U) {\n var l, d;\n if (!n(this, Tl, Ht)) {\n h(this, Tl, KZ).call(this, U);\n return;\n }\n if (U.target === n(this, md)) {\n (l = n(this, Hl).firstChild) == null || l.focus();\n return;\n }\n (d = U.target.nextSibling) == null || d.focus();\n }\n _moveToPrevious(U) {\n var l, d;\n if (U.target === ((l = n(this, Hl)) == null ? void 0 : l.firstChild) || U.target === n(this, md)) {\n n(this, Tl, Ht) && this._hideDropdownFromKeyboard();\n return;\n }\n n(this, Tl, Ht) || h(this, Tl, KZ).call(this, U), (d = U.target.previousSibling) == null || d.focus();\n }\n _moveToBeginning(U) {\n var l;\n if (!n(this, Tl, Ht)) {\n h(this, Tl, KZ).call(this, U);\n return;\n }\n (l = n(this, Hl).firstChild) == null || l.focus();\n }\n _moveToEnd(U) {\n var l;\n if (!n(this, Tl, Ht)) {\n h(this, Tl, KZ).call(this, U);\n return;\n }\n (l = n(this, Hl).lastChild) == null || l.focus();\n }\n hideDropdown() {\n var U;\n (U = n(this, Hl)) == null || U.classList.add(\"hidden\"), window.removeEventListener(\"pointerdown\", n(this, vs));\n }\n _hideDropdownFromKeyboard() {\n var U;\n if (!n(this, bc)) {\n if (!n(this, Tl, Ht)) {\n (U = n(this, Ps)) == null || U.unselect();\n return;\n }\n this.hideDropdown(), n(this, md).focus({\n preventScroll: !0,\n focusVisible: n(this, Hs)\n });\n }\n }\n updateColor(U) {\n if (n(this, CF) && (n(this, CF).style.backgroundColor = U), !n(this, Hl))\n return;\n const l = n(this, Md).highlightColors.values();\n for (const d of n(this, Hl).children)\n d.setAttribute(\"aria-selected\", l.next().value === U);\n }\n destroy() {\n var U, l;\n (U = n(this, md)) == null || U.remove(), e(this, md, null), e(this, CF, null), (l = n(this, Hl)) == null || l.remove(), e(this, Hl, null);\n }\n}, Ks = new WeakMap(), vs = new WeakMap(), md = new WeakMap(), CF = new WeakMap(), ec = new WeakMap(), Hl = new WeakMap(), Hs = new WeakMap(), bc = new WeakMap(), Ps = new WeakMap(), fs = new WeakMap(), Md = new WeakMap(), mc = new WeakMap(), As = new WeakMap(), Tl = new WeakSet(), DW = function() {\n const U = document.createElement(\"div\"), l = n(this, Md)._signal;\n U.addEventListener(\"contextmenu\", nd, {\n signal: l\n }), U.className = \"dropdown\", U.role = \"listbox\", U.setAttribute(\"aria-multiselectable\", !1), U.setAttribute(\"aria-orientation\", \"vertical\"), U.setAttribute(\"data-l10n-id\", \"pdfjs-editor-colorpicker-dropdown\");\n for (const [d, t] of n(this, Md).highlightColors) {\n const Z = document.createElement(\"button\");\n Z.tabIndex = \"0\", Z.role = \"option\", Z.setAttribute(\"data-color\", t), Z.title = d, Z.setAttribute(\"data-l10n-id\", n(QU, As)[d]);\n const F = document.createElement(\"span\");\n Z.append(F), F.className = \"swatch\", F.style.backgroundColor = t, Z.setAttribute(\"aria-selected\", t === n(this, ec)), Z.addEventListener(\"click\", h(this, Tl, EW).bind(this, t), {\n signal: l\n }), U.append(Z);\n }\n return U.addEventListener(\"keydown\", n(this, Ks), {\n signal: l\n }), U;\n}, EW = function(U, l) {\n l.stopPropagation(), n(this, fs).dispatch(\"switchannotationeditorparams\", {\n source: this,\n type: n(this, mc),\n value: U\n });\n}, Eh = function(U) {\n QU._keyboardManager.exec(this, U);\n}, KZ = function(U) {\n if (n(this, Tl, Ht)) {\n this.hideDropdown();\n return;\n }\n if (e(this, Hs, U.detail === 0), window.addEventListener(\"pointerdown\", n(this, vs), {\n signal: n(this, Md)._signal\n }), n(this, Hl)) {\n n(this, Hl).classList.remove(\"hidden\");\n return;\n }\n const l = e(this, Hl, h(this, Tl, DW).call(this));\n n(this, md).append(l);\n}, rh = function(U) {\n var l;\n (l = n(this, Hl)) != null && l.contains(U.target) || this.hideDropdown();\n}, Ht = function() {\n return n(this, Hl) && !n(this, Hl).classList.contains(\"hidden\");\n}, m(QU, As, null), QU);\nvar Mc, _s, St, wF, Jc, ld, qs, $s, xF, Jd, hU, BU, Gc, Xt, Pl, Tc, Ud, lQ, Ul, rW, ha, Ch, wh, xh, CW, vZ, cd, u0, jh, ea, bn, Oh, gh, Kh, vh, Hh;\nconst il = class il extends hl {\n constructor(l) {\n super({\n ...l,\n name: \"highlightEditor\"\n });\n m(this, Ul);\n m(this, Mc, null);\n m(this, _s, 0);\n m(this, St);\n m(this, wF, null);\n m(this, Jc, null);\n m(this, ld, null);\n m(this, qs, null);\n m(this, $s, 0);\n m(this, xF, null);\n m(this, Jd, null);\n m(this, hU, null);\n m(this, BU, !1);\n m(this, Gc, null);\n m(this, Xt);\n m(this, Pl, null);\n m(this, Tc, \"\");\n m(this, Ud);\n m(this, lQ, \"\");\n this.color = l.color || il._defaultColor, e(this, Ud, l.thickness || il._defaultThickness), e(this, Xt, l.opacity || il._defaultOpacity), e(this, St, l.boxes || null), e(this, lQ, l.methodOfCreation || \"\"), e(this, Tc, l.text || \"\"), this._isDraggable = !1, l.highlightId > -1 ? (e(this, BU, !0), h(this, Ul, ha).call(this, l), h(this, Ul, vZ).call(this)) : n(this, St) && (e(this, Mc, l.anchorNode), e(this, _s, l.anchorOffset), e(this, qs, l.focusNode), e(this, $s, l.focusOffset), h(this, Ul, rW).call(this), h(this, Ul, vZ).call(this), this.rotate(this.rotation));\n }\n static get _keyboardManager() {\n const l = il.prototype;\n return Ql(this, \"_keyboardManager\", new LQ([[[\"ArrowLeft\", \"mac+ArrowLeft\"], l._moveCaret, {\n args: [0]\n }], [[\"ArrowRight\", \"mac+ArrowRight\"], l._moveCaret, {\n args: [1]\n }], [[\"ArrowUp\", \"mac+ArrowUp\"], l._moveCaret, {\n args: [2]\n }], [[\"ArrowDown\", \"mac+ArrowDown\"], l._moveCaret, {\n args: [3]\n }]]));\n }\n get telemetryInitialData() {\n return {\n action: \"added\",\n type: n(this, BU) ? \"free_highlight\" : \"highlight\",\n color: this._uiManager.highlightColorNames.get(this.color),\n thickness: n(this, Ud),\n methodOfCreation: n(this, lQ)\n };\n }\n get telemetryFinalData() {\n return {\n type: \"highlight\",\n color: this._uiManager.highlightColorNames.get(this.color)\n };\n }\n static computeTelemetryFinalData(l) {\n return {\n numberOfColors: l.get(\"color\").size\n };\n }\n static initialize(l, d) {\n var t;\n hl.initialize(l, d), il._defaultColor || (il._defaultColor = ((t = d.highlightColors) == null ? void 0 : t.values().next().value) || \"#fff066\");\n }\n static updateDefaultParams(l, d) {\n switch (l) {\n case q.HIGHLIGHT_DEFAULT_COLOR:\n il._defaultColor = d;\n break;\n case q.HIGHLIGHT_THICKNESS:\n il._defaultThickness = d;\n break;\n }\n }\n translateInPage(l, d) {\n }\n get toolbarPosition() {\n return n(this, Gc);\n }\n updateParams(l, d) {\n switch (l) {\n case q.HIGHLIGHT_COLOR:\n h(this, Ul, Ch).call(this, d);\n break;\n case q.HIGHLIGHT_THICKNESS:\n h(this, Ul, wh).call(this, d);\n break;\n }\n }\n static get defaultPropertiesToUpdate() {\n return [[q.HIGHLIGHT_DEFAULT_COLOR, il._defaultColor], [q.HIGHLIGHT_THICKNESS, il._defaultThickness]];\n }\n get propertiesToUpdate() {\n return [[q.HIGHLIGHT_COLOR, this.color || il._defaultColor], [q.HIGHLIGHT_THICKNESS, n(this, Ud) || il._defaultThickness], [q.HIGHLIGHT_FREE, n(this, BU)]];\n }\n async addEditToolbar() {\n const l = await super.addEditToolbar();\n return l ? (this._uiManager.highlightColors && (e(this, Jc, new Dh({\n editor: this\n })), l.addColorPicker(n(this, Jc))), l) : null;\n }\n disableEditing() {\n super.disableEditing(), this.div.classList.toggle(\"disabled\", !0);\n }\n enableEditing() {\n super.enableEditing(), this.div.classList.toggle(\"disabled\", !1);\n }\n fixAndSetPosition() {\n return super.fixAndSetPosition(h(this, Ul, bn).call(this));\n }\n getBaseTranslation() {\n return [0, 0];\n }\n getRect(l, d) {\n return super.getRect(l, d, h(this, Ul, bn).call(this));\n }\n onceAdded() {\n this.annotationElementId || this.parent.addUndoableEditor(this), this.div.focus();\n }\n remove() {\n h(this, Ul, CW).call(this), this._reportTelemetry({\n action: \"deleted\"\n }), super.remove();\n }\n rebuild() {\n this.parent && (super.rebuild(), this.div !== null && (h(this, Ul, vZ).call(this), this.isAttachedToDOM || this.parent.add(this)));\n }\n setParent(l) {\n var t;\n let d = !1;\n this.parent && !l ? h(this, Ul, CW).call(this) : l && (h(this, Ul, vZ).call(this, l), d = !this.parent && ((t = this.div) == null ? void 0 : t.classList.contains(\"selectedEditor\"))), super.setParent(l), this.show(this._isVisible), d && this.select();\n }\n rotate(l) {\n var Z, F, c;\n const {\n drawLayer: d\n } = this.parent;\n let t;\n n(this, BU) ? (l = (l - this.rotation + 360) % 360, t = h(Z = il, cd, u0).call(Z, n(this, Jd).box, l)) : t = h(F = il, cd, u0).call(F, this, l), d.rotate(n(this, hU), l), d.rotate(n(this, Pl), l), d.updateBox(n(this, hU), t), d.updateBox(n(this, Pl), h(c = il, cd, u0).call(c, n(this, ld).box, l));\n }\n render() {\n if (this.div)\n return this.div;\n const l = super.render();\n n(this, Tc) && (l.setAttribute(\"aria-label\", n(this, Tc)), l.setAttribute(\"role\", \"mark\")), n(this, BU) ? l.classList.add(\"free\") : this.div.addEventListener(\"keydown\", h(this, Ul, jh).bind(this), {\n signal: this._uiManager._signal\n });\n const d = e(this, xF, document.createElement(\"div\"));\n l.append(d), d.setAttribute(\"aria-hidden\", \"true\"), d.className = \"internal\", d.style.clipPath = n(this, wF);\n const [t, Z] = this.parentDimensions;\n return this.setDims(this.width * t, this.height * Z), ra(this, n(this, xF), [\"pointerover\", \"pointerleave\"]), this.enableEditing(), l;\n }\n pointerover() {\n this.parent.drawLayer.addClass(n(this, Pl), \"hovered\");\n }\n pointerleave() {\n this.parent.drawLayer.removeClass(n(this, Pl), \"hovered\");\n }\n _moveCaret(l) {\n switch (this.parent.unselect(this), l) {\n case 0:\n case 2:\n h(this, Ul, ea).call(this, !0);\n break;\n case 1:\n case 3:\n h(this, Ul, ea).call(this, !1);\n break;\n }\n }\n select() {\n var l, d;\n super.select(), n(this, Pl) && ((l = this.parent) == null || l.drawLayer.removeClass(n(this, Pl), \"hovered\"), (d = this.parent) == null || d.drawLayer.addClass(n(this, Pl), \"selected\"));\n }\n unselect() {\n var l;\n super.unselect(), n(this, Pl) && ((l = this.parent) == null || l.drawLayer.removeClass(n(this, Pl), \"selected\"), n(this, BU) || h(this, Ul, ea).call(this, !1));\n }\n get _mustFixPosition() {\n return !n(this, BU);\n }\n show(l = this._isVisible) {\n super.show(l), this.parent && (this.parent.drawLayer.show(n(this, hU), l), this.parent.drawLayer.show(n(this, Pl), l));\n }\n static startHighlighting(l, d, {\n target: t,\n x: Z,\n y: F\n }) {\n const {\n x: c,\n y: Q,\n width: a,\n height: V\n } = t.getBoundingClientRect(), W = new AbortController(), i = l.combinedSignal(W), R = (b) => {\n b.preventDefault(), b.stopPropagation();\n }, N = (b) => {\n W.abort(), h(this, cd, vh).call(this, l, b);\n };\n window.addEventListener(\"blur\", N, {\n signal: i\n }), window.addEventListener(\"pointerup\", N, {\n signal: i\n }), window.addEventListener(\"pointerdown\", R, {\n capture: !0,\n passive: !1,\n signal: i\n }), window.addEventListener(\"contextmenu\", nd, {\n signal: i\n }), t.addEventListener(\"pointermove\", h(this, cd, Kh).bind(this, l), {\n signal: i\n }), this._freeHighlight = new En({\n x: Z,\n y: F\n }, [c, Q, a, V], l.scale, this._defaultThickness / 2, d, 1e-3), {\n id: this._freeHighlightId,\n clipPathId: this._freeHighlightClipId\n } = l.drawLayer.highlight(this._freeHighlight, this._defaultColor, this._defaultOpacity, !0);\n }\n static async deserialize(l, d, t) {\n var b, J, M, G;\n let Z = null;\n if (l instanceof Th) {\n const {\n data: {\n quadPoints: T,\n rect: u,\n rotation: X,\n id: Y,\n color: o,\n opacity: y,\n popupRef: S\n },\n parent: {\n page: {\n pageNumber: p\n }\n }\n } = l;\n Z = l = {\n annotationType: tl.HIGHLIGHT,\n color: Array.from(o),\n opacity: y,\n quadPoints: T,\n boxes: null,\n pageIndex: p - 1,\n rect: u.slice(0),\n rotation: X,\n id: Y,\n deleted: !1,\n popupRef: S\n };\n } else if (l instanceof fi) {\n const {\n data: {\n inkLists: T,\n rect: u,\n rotation: X,\n id: Y,\n color: o,\n borderStyle: {\n rawWidth: y\n },\n popupRef: S\n },\n parent: {\n page: {\n pageNumber: p\n }\n }\n } = l;\n Z = l = {\n annotationType: tl.HIGHLIGHT,\n color: Array.from(o),\n thickness: y,\n inkLists: T,\n boxes: null,\n pageIndex: p - 1,\n rect: u.slice(0),\n rotation: X,\n id: Y,\n deleted: !1,\n popupRef: S\n };\n }\n const {\n color: F,\n quadPoints: c,\n inkLists: Q,\n opacity: a\n } = l, V = await super.deserialize(l, d, t);\n V.color = H.makeHexColor(...F), e(V, Xt, a || 1), Q && e(V, Ud, l.thickness), V.annotationElementId = l.id || null, V._initialData = Z;\n const [W, i] = V.pageDimensions, [R, N] = V.pageTranslation;\n if (c) {\n const T = e(V, St, []);\n for (let u = 0; u < c.length; u += 8)\n T.push({\n x: (c[u] - R) / W,\n y: 1 - (c[u + 1] - N) / i,\n width: (c[u + 2] - c[u]) / W,\n height: (c[u + 1] - c[u + 5]) / i\n });\n h(b = V, Ul, rW).call(b), h(J = V, Ul, vZ).call(J), V.rotate(V.rotation);\n } else if (Q) {\n e(V, BU, !0);\n const T = Q[0], u = {\n x: T[0] - R,\n y: i - (T[1] - N)\n }, X = new En(u, [0, 0, W, i], 1, n(V, Ud) / 2, !0, 1e-3);\n for (let y = 0, S = T.length; y < S; y += 2)\n u.x = T[y] - R, u.y = i - (T[y + 1] - N), X.add(u);\n const {\n id: Y,\n clipPathId: o\n } = d.drawLayer.highlight(X, V.color, V._defaultOpacity, !0);\n h(M = V, Ul, ha).call(M, {\n highlightOutlines: X.getOutlines(),\n highlightId: Y,\n clipPathId: o\n }), h(G = V, Ul, vZ).call(G);\n }\n return V;\n }\n serialize(l = !1) {\n if (this.isEmpty() || l)\n return null;\n if (this.deleted)\n return this.serializeDeleted();\n const d = this.getRect(0, 0), t = hl._colorManager.convert(this.color), Z = {\n annotationType: tl.HIGHLIGHT,\n color: t,\n opacity: n(this, Xt),\n thickness: n(this, Ud),\n quadPoints: h(this, Ul, Oh).call(this),\n outlines: h(this, Ul, gh).call(this, d),\n pageIndex: this.pageIndex,\n rect: d,\n rotation: h(this, Ul, bn).call(this),\n structTreeParentId: this._structTreeParentId\n };\n return this.annotationElementId && !h(this, Ul, Hh).call(this, Z) ? null : (Z.id = this.annotationElementId, Z);\n }\n renderAnnotationElement(l) {\n return l.updateEdited({\n rect: this.getRect(0, 0)\n }), null;\n }\n static canCreateNewEmptyEditor() {\n return !1;\n }\n};\nMc = new WeakMap(), _s = new WeakMap(), St = new WeakMap(), wF = new WeakMap(), Jc = new WeakMap(), ld = new WeakMap(), qs = new WeakMap(), $s = new WeakMap(), xF = new WeakMap(), Jd = new WeakMap(), hU = new WeakMap(), BU = new WeakMap(), Gc = new WeakMap(), Xt = new WeakMap(), Pl = new WeakMap(), Tc = new WeakMap(), Ud = new WeakMap(), lQ = new WeakMap(), Ul = new WeakSet(), rW = function() {\n const l = new XR(n(this, St), 1e-3);\n e(this, Jd, l.getOutlines()), {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height\n } = n(this, Jd).box;\n const d = new XR(n(this, St), 25e-4, 1e-3, this._uiManager.direction === \"ltr\");\n e(this, ld, d.getOutlines());\n const {\n lastPoint: t\n } = n(this, ld).box;\n e(this, Gc, [(t[0] - this.x) / this.width, (t[1] - this.y) / this.height]);\n}, ha = function({\n highlightOutlines: l,\n highlightId: d,\n clipPathId: t\n}) {\n var W, i;\n if (e(this, Jd, l), e(this, ld, l.getNewOutline(n(this, Ud) / 2 + 1.5, 25e-4)), d >= 0)\n e(this, hU, d), e(this, wF, t), this.parent.drawLayer.finalizeLine(d, l), e(this, Pl, this.parent.drawLayer.highlightOutline(n(this, ld)));\n else if (this.parent) {\n const R = this.parent.viewport.rotation;\n this.parent.drawLayer.updateLine(n(this, hU), l), this.parent.drawLayer.updateBox(n(this, hU), h(W = il, cd, u0).call(W, n(this, Jd).box, (R - this.rotation + 360) % 360)), this.parent.drawLayer.updateLine(n(this, Pl), n(this, ld)), this.parent.drawLayer.updateBox(n(this, Pl), h(i = il, cd, u0).call(i, n(this, ld).box, R));\n }\n const {\n x: F,\n y: c,\n width: Q,\n height: a\n } = l.box;\n switch (this.rotation) {\n case 0:\n this.x = F, this.y = c, this.width = Q, this.height = a;\n break;\n case 90: {\n const [R, N] = this.parentDimensions;\n this.x = c, this.y = 1 - F, this.width = Q * N / R, this.height = a * R / N;\n break;\n }\n case 180:\n this.x = 1 - F, this.y = 1 - c, this.width = Q, this.height = a;\n break;\n case 270: {\n const [R, N] = this.parentDimensions;\n this.x = 1 - c, this.y = F, this.width = Q * N / R, this.height = a * R / N;\n break;\n }\n }\n const {\n lastPoint: V\n } = n(this, ld).box;\n e(this, Gc, [(V[0] - F) / Q, (V[1] - c) / a]);\n}, Ch = function(l) {\n const d = (F, c) => {\n var Q, a, V;\n this.color = F, (Q = this.parent) == null || Q.drawLayer.changeColor(n(this, hU), F), (a = n(this, Jc)) == null || a.updateColor(F), e(this, Xt, c), (V = this.parent) == null || V.drawLayer.changeOpacity(n(this, hU), c);\n }, t = this.color, Z = n(this, Xt);\n this.addCommands({\n cmd: d.bind(this, l, il._defaultOpacity),\n undo: d.bind(this, t, Z),\n post: this._uiManager.updateUI.bind(this._uiManager, this),\n mustExec: !0,\n type: q.HIGHLIGHT_COLOR,\n overwriteIfSameType: !0,\n keepUndo: !0\n }), this._reportTelemetry({\n action: \"color_changed\",\n color: this._uiManager.highlightColorNames.get(l)\n }, !0);\n}, wh = function(l) {\n const d = n(this, Ud), t = (Z) => {\n e(this, Ud, Z), h(this, Ul, xh).call(this, Z);\n };\n this.addCommands({\n cmd: t.bind(this, l),\n undo: t.bind(this, d),\n post: this._uiManager.updateUI.bind(this._uiManager, this),\n mustExec: !0,\n type: q.INK_THICKNESS,\n overwriteIfSameType: !0,\n keepUndo: !0\n }), this._reportTelemetry({\n action: \"thickness_changed\",\n thickness: l\n }, !0);\n}, xh = function(l) {\n if (!n(this, BU))\n return;\n h(this, Ul, ha).call(this, {\n highlightOutlines: n(this, Jd).getNewOutline(l / 2)\n }), this.fixAndSetPosition();\n const [d, t] = this.parentDimensions;\n this.setDims(this.width * d, this.height * t);\n}, CW = function() {\n n(this, hU) === null || !this.parent || (this.parent.drawLayer.remove(n(this, hU)), e(this, hU, null), this.parent.drawLayer.remove(n(this, Pl)), e(this, Pl, null));\n}, vZ = function(l = this.parent) {\n n(this, hU) === null && ({\n id: VU(this, hU)._,\n clipPathId: VU(this, wF)._\n } = l.drawLayer.highlight(n(this, Jd), this.color, n(this, Xt)), e(this, Pl, l.drawLayer.highlightOutline(n(this, ld))), n(this, xF) && (n(this, xF).style.clipPath = n(this, wF)));\n}, cd = new WeakSet(), u0 = function({\n x: l,\n y: d,\n width: t,\n height: Z\n}, F) {\n switch (F) {\n case 90:\n return {\n x: 1 - d - Z,\n y: l,\n width: Z,\n height: t\n };\n case 180:\n return {\n x: 1 - l - t,\n y: 1 - d - Z,\n width: t,\n height: Z\n };\n case 270:\n return {\n x: d,\n y: 1 - l - t,\n width: Z,\n height: t\n };\n }\n return {\n x: l,\n y: d,\n width: t,\n height: Z\n };\n}, jh = function(l) {\n il._keyboardManager.exec(this, l);\n}, ea = function(l) {\n if (!n(this, Mc))\n return;\n const d = window.getSelection();\n l ? d.setPosition(n(this, Mc), n(this, _s)) : d.setPosition(n(this, qs), n(this, $s));\n}, bn = function() {\n return n(this, BU) ? this.rotation : 0;\n}, Oh = function() {\n if (n(this, BU))\n return null;\n const [l, d] = this.pageDimensions, [t, Z] = this.pageTranslation, F = n(this, St), c = new Float32Array(F.length * 8);\n let Q = 0;\n for (const {\n x: a,\n y: V,\n width: W,\n height: i\n } of F) {\n const R = a * l + t, N = (1 - V - i) * d + Z;\n c[Q] = c[Q + 4] = R, c[Q + 1] = c[Q + 3] = N, c[Q + 2] = c[Q + 6] = R + W * l, c[Q + 5] = c[Q + 7] = N + i * d, Q += 8;\n }\n return c;\n}, gh = function(l) {\n return n(this, Jd).serialize(l, h(this, Ul, bn).call(this));\n}, Kh = function(l, d) {\n this._freeHighlight.add(d) && l.drawLayer.updatePath(this._freeHighlightId, this._freeHighlight);\n}, vh = function(l, d) {\n this._freeHighlight.isEmpty() ? l.drawLayer.removeFreeHighlight(this._freeHighlightId) : l.createAndAddNewEditor(d, !1, {\n highlightId: this._freeHighlightId,\n highlightOutlines: this._freeHighlight.getOutlines(),\n clipPathId: this._freeHighlightClipId,\n methodOfCreation: \"main_toolbar\"\n }), this._freeHighlightId = -1, this._freeHighlight = null, this._freeHighlightClipId = \"\";\n}, Hh = function(l) {\n const {\n color: d\n } = this._initialData;\n return l.color.some((t, Z) => t !== d[Z]);\n}, m(il, cd), _(il, \"_defaultColor\", null), _(il, \"_defaultOpacity\", 1), _(il, \"_defaultThickness\", 12), _(il, \"_type\", \"highlight\"), _(il, \"_editorType\", tl.HIGHLIGHT), _(il, \"_freeHighlightId\", -1), _(il, \"_freeHighlight\", null), _(il, \"_freeHighlightClipId\", \"\");\nlet wa = il;\nvar jF, OF, xd, ut, dd, gF, KF, vF, Yt, Sc, HF, PF, eZ, C, Ph, fh, Ah, _h, xW, qh, jW, $h, le, Ue, de, te, HZ, OW, gW, KW, ba, ma, Y0, vW, Ma, gt, Ze, HW, Fe, ce, PW, Ja, mn;\nconst ul = class ul extends hl {\n constructor(l) {\n super({\n ...l,\n name: \"inkEditor\"\n });\n m(this, C);\n m(this, jF, 0);\n m(this, OF, 0);\n m(this, xd, null);\n m(this, ut, new Path2D());\n m(this, dd, !1);\n m(this, gF, null);\n m(this, KF, !1);\n m(this, vF, !1);\n m(this, Yt, null);\n m(this, Sc, null);\n m(this, HF, 0);\n m(this, PF, 0);\n m(this, eZ, null);\n this.color = l.color || null, this.thickness = l.thickness || null, this.opacity = l.opacity || null, this.paths = [], this.bezierPath2D = [], this.allRawPaths = [], this.currentPath = [], this.scaleFactor = 1, this.translationX = this.translationY = 0, this.x = 0, this.y = 0, this._willKeepAspectRatio = !0;\n }\n static initialize(l, d) {\n hl.initialize(l, d);\n }\n static updateDefaultParams(l, d) {\n switch (l) {\n case q.INK_THICKNESS:\n ul._defaultThickness = d;\n break;\n case q.INK_COLOR:\n ul._defaultColor = d;\n break;\n case q.INK_OPACITY:\n ul._defaultOpacity = d / 100;\n break;\n }\n }\n updateParams(l, d) {\n switch (l) {\n case q.INK_THICKNESS:\n h(this, C, Ph).call(this, d);\n break;\n case q.INK_COLOR:\n h(this, C, fh).call(this, d);\n break;\n case q.INK_OPACITY:\n h(this, C, Ah).call(this, d);\n break;\n }\n }\n static get defaultPropertiesToUpdate() {\n return [[q.INK_THICKNESS, ul._defaultThickness], [q.INK_COLOR, ul._defaultColor || hl._defaultLineColor], [q.INK_OPACITY, Math.round(ul._defaultOpacity * 100)]];\n }\n get propertiesToUpdate() {\n return [[q.INK_THICKNESS, this.thickness || ul._defaultThickness], [q.INK_COLOR, this.color || ul._defaultColor || hl._defaultLineColor], [q.INK_OPACITY, Math.round(100 * (this.opacity ?? ul._defaultOpacity))]];\n }\n rebuild() {\n this.parent && (super.rebuild(), this.div !== null && (this.canvas || (h(this, C, ba).call(this), h(this, C, ma).call(this)), this.isAttachedToDOM || (this.parent.add(this), h(this, C, Y0).call(this)), h(this, C, mn).call(this)));\n }\n remove() {\n var l;\n this.canvas !== null && (this.isEmpty() || this.commit(), this.canvas.width = this.canvas.height = 0, this.canvas.remove(), this.canvas = null, n(this, xd) && (clearTimeout(n(this, xd)), e(this, xd, null)), (l = n(this, Yt)) == null || l.disconnect(), e(this, Yt, null), super.remove());\n }\n setParent(l) {\n !this.parent && l ? this._uiManager.removeShouldRescale(this) : this.parent && l === null && this._uiManager.addShouldRescale(this), super.setParent(l);\n }\n onScaleChanging() {\n const [l, d] = this.parentDimensions, t = this.width * l, Z = this.height * d;\n this.setDimensions(t, Z);\n }\n enableEditMode() {\n n(this, dd) || this.canvas === null || (super.enableEditMode(), this._isDraggable = !1, h(this, C, OW).call(this));\n }\n disableEditMode() {\n !this.isInEditMode() || this.canvas === null || (super.disableEditMode(), this._isDraggable = !this.isEmpty(), this.div.classList.remove(\"editing\"), h(this, C, gW).call(this));\n }\n onceAdded() {\n this._isDraggable = !this.isEmpty();\n }\n isEmpty() {\n return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0;\n }\n commit() {\n n(this, dd) || (super.commit(), this.isEditing = !1, this.disableEditMode(), this.setInForeground(), e(this, dd, !0), this.div.classList.add(\"disabled\"), h(this, C, mn).call(this, !0), this.select(), this.parent.addInkEditorIfNeeded(!0), this.moveInDOM(), this.div.focus({\n preventScroll: !0\n }));\n }\n focusin(l) {\n this._focusEventsAllowed && (super.focusin(l), this.enableEditMode());\n }\n canvasPointerdown(l) {\n l.button !== 0 || !this.isInEditMode() || n(this, dd) || (this.setInForeground(), l.preventDefault(), this.div.contains(document.activeElement) || this.div.focus({\n preventScroll: !0\n }), h(this, C, qh).call(this, l.offsetX, l.offsetY));\n }\n canvasPointermove(l) {\n l.preventDefault(), h(this, C, jW).call(this, l.offsetX, l.offsetY);\n }\n canvasPointerup(l) {\n l.preventDefault(), h(this, C, KW).call(this, l);\n }\n canvasPointerleave(l) {\n h(this, C, KW).call(this, l);\n }\n get isResizable() {\n return !this.isEmpty() && n(this, dd);\n }\n render() {\n if (this.div)\n return this.div;\n let l, d;\n this.width && (l = this.x, d = this.y), super.render(), this.div.setAttribute(\"data-l10n-id\", \"pdfjs-ink\");\n const [t, Z, F, c] = h(this, C, _h).call(this);\n if (this.setAt(t, Z, 0, 0), this.setDims(F, c), h(this, C, ba).call(this), this.width) {\n const [Q, a] = this.parentDimensions;\n this.setAspectRatio(this.width * Q, this.height * a), this.setAt(l * Q, d * a, this.width * Q, this.height * a), e(this, vF, !0), h(this, C, Y0).call(this), this.setDims(this.width * Q, this.height * a), h(this, C, HZ).call(this), this.div.classList.add(\"disabled\");\n } else\n this.div.classList.add(\"editing\"), this.enableEditMode();\n return h(this, C, ma).call(this), this.div;\n }\n setDimensions(l, d) {\n const t = Math.round(l), Z = Math.round(d);\n if (n(this, HF) === t && n(this, PF) === Z)\n return;\n e(this, HF, t), e(this, PF, Z), this.canvas.style.visibility = \"hidden\";\n const [F, c] = this.parentDimensions;\n this.width = l / F, this.height = d / c, this.fixAndSetPosition(), n(this, dd) && h(this, C, vW).call(this, l, d), h(this, C, Y0).call(this), h(this, C, HZ).call(this), this.canvas.style.visibility = \"visible\", this.fixDims();\n }\n static async deserialize(l, d, t) {\n var J, M, G;\n if (l instanceof fi)\n return null;\n const Z = await super.deserialize(l, d, t);\n Z.thickness = l.thickness, Z.color = H.makeHexColor(...l.color), Z.opacity = l.opacity;\n const [F, c] = Z.pageDimensions, Q = Z.width * F, a = Z.height * c, V = Z.parentScale, W = l.thickness / 2;\n e(Z, dd, !0), e(Z, HF, Math.round(Q)), e(Z, PF, Math.round(a));\n const {\n paths: i,\n rect: R,\n rotation: N\n } = l;\n for (let {\n bezier: T\n } of i) {\n T = h(J = ul, gt, Fe).call(J, T, R, N);\n const u = [];\n Z.paths.push(u);\n let X = V * (T[0] - W), Y = V * (T[1] - W);\n for (let y = 2, S = T.length; y < S; y += 6) {\n const p = V * (T[y] - W), L = V * (T[y + 1] - W), I = V * (T[y + 2] - W), D = V * (T[y + 3] - W), r = V * (T[y + 4] - W), w = V * (T[y + 5] - W);\n u.push([[X, Y], [p, L], [I, D], [r, w]]), X = r, Y = w;\n }\n const o = h(this, gt, Ze).call(this, u);\n Z.bezierPath2D.push(o);\n }\n const b = h(M = Z, C, PW).call(M);\n return e(Z, OF, Math.max(hl.MIN_SIZE, b[2] - b[0])), e(Z, jF, Math.max(hl.MIN_SIZE, b[3] - b[1])), h(G = Z, C, vW).call(G, Q, a), Z;\n }\n serialize() {\n if (this.isEmpty())\n return null;\n const l = this.getRect(0, 0), d = hl._colorManager.convert(this.ctx.strokeStyle);\n return {\n annotationType: tl.INK,\n color: d,\n thickness: this.thickness,\n opacity: this.opacity,\n paths: h(this, C, ce).call(this, this.scaleFactor / this.parentScale, this.translationX, this.translationY, l),\n pageIndex: this.pageIndex,\n rect: l,\n rotation: this.rotation,\n structTreeParentId: this._structTreeParentId\n };\n }\n};\njF = new WeakMap(), OF = new WeakMap(), xd = new WeakMap(), ut = new WeakMap(), dd = new WeakMap(), gF = new WeakMap(), KF = new WeakMap(), vF = new WeakMap(), Yt = new WeakMap(), Sc = new WeakMap(), HF = new WeakMap(), PF = new WeakMap(), eZ = new WeakMap(), C = new WeakSet(), Ph = function(l) {\n const d = (Z) => {\n this.thickness = Z, h(this, C, mn).call(this);\n }, t = this.thickness;\n this.addCommands({\n cmd: d.bind(this, l),\n undo: d.bind(this, t),\n post: this._uiManager.updateUI.bind(this._uiManager, this),\n mustExec: !0,\n type: q.INK_THICKNESS,\n overwriteIfSameType: !0,\n keepUndo: !0\n });\n}, fh = function(l) {\n const d = (Z) => {\n this.color = Z, h(this, C, HZ).call(this);\n }, t = this.color;\n this.addCommands({\n cmd: d.bind(this, l),\n undo: d.bind(this, t),\n post: this._uiManager.updateUI.bind(this._uiManager, this),\n mustExec: !0,\n type: q.INK_COLOR,\n overwriteIfSameType: !0,\n keepUndo: !0\n });\n}, Ah = function(l) {\n const d = (Z) => {\n this.opacity = Z, h(this, C, HZ).call(this);\n };\n l /= 100;\n const t = this.opacity;\n this.addCommands({\n cmd: d.bind(this, l),\n undo: d.bind(this, t),\n post: this._uiManager.updateUI.bind(this._uiManager, this),\n mustExec: !0,\n type: q.INK_OPACITY,\n overwriteIfSameType: !0,\n keepUndo: !0\n });\n}, _h = function() {\n const {\n parentRotation: l,\n parentDimensions: [d, t]\n } = this;\n switch (l) {\n case 90:\n return [0, t, t, d];\n case 180:\n return [d, t, d, t];\n case 270:\n return [d, 0, t, d];\n default:\n return [0, 0, d, t];\n }\n}, xW = function() {\n const {\n ctx: l,\n color: d,\n opacity: t,\n thickness: Z,\n parentScale: F,\n scaleFactor: c\n } = this;\n l.lineWidth = Z * F / c, l.lineCap = \"round\", l.lineJoin = \"round\", l.miterLimit = 10, l.strokeStyle = `${d}${xb(t)}`;\n}, qh = function(l, d) {\n this.canvas.addEventListener(\"contextmenu\", nd, {\n signal: this._uiManager._signal\n }), h(this, C, gW).call(this), e(this, gF, new AbortController());\n const t = this._uiManager.combinedSignal(n(this, gF));\n this.canvas.addEventListener(\"pointerleave\", this.canvasPointerleave.bind(this), {\n signal: t\n }), this.canvas.addEventListener(\"pointermove\", this.canvasPointermove.bind(this), {\n signal: t\n }), this.canvas.addEventListener(\"pointerup\", this.canvasPointerup.bind(this), {\n signal: t\n }), this.isEditing = !0, n(this, vF) || (e(this, vF, !0), h(this, C, Y0).call(this), this.thickness || (this.thickness = ul._defaultThickness), this.color || (this.color = ul._defaultColor || hl._defaultLineColor), this.opacity ?? (this.opacity = ul._defaultOpacity)), this.currentPath.push([l, d]), e(this, KF, !1), h(this, C, xW).call(this), e(this, eZ, () => {\n h(this, C, Ue).call(this), n(this, eZ) && window.requestAnimationFrame(n(this, eZ));\n }), window.requestAnimationFrame(n(this, eZ));\n}, jW = function(l, d) {\n const [t, Z] = this.currentPath.at(-1);\n if (this.currentPath.length > 1 && l === t && d === Z)\n return;\n const F = this.currentPath;\n let c = n(this, ut);\n if (F.push([l, d]), e(this, KF, !0), F.length <= 2) {\n c.moveTo(...F[0]), c.lineTo(l, d);\n return;\n }\n F.length === 3 && (e(this, ut, c = new Path2D()), c.moveTo(...F[0])), h(this, C, de).call(this, c, ...F.at(-3), ...F.at(-2), l, d);\n}, $h = function() {\n if (this.currentPath.length === 0)\n return;\n const l = this.currentPath.at(-1);\n n(this, ut).lineTo(...l);\n}, le = function(l, d) {\n e(this, eZ, null), l = Math.min(Math.max(l, 0), this.canvas.width), d = Math.min(Math.max(d, 0), this.canvas.height), h(this, C, jW).call(this, l, d), h(this, C, $h).call(this);\n let t;\n if (this.currentPath.length !== 1)\n t = h(this, C, te).call(this);\n else {\n const a = [l, d];\n t = [[a, a.slice(), a.slice(), a]];\n }\n const Z = n(this, ut), F = this.currentPath;\n this.currentPath = [], e(this, ut, new Path2D());\n const c = () => {\n this.allRawPaths.push(F), this.paths.push(t), this.bezierPath2D.push(Z), this._uiManager.rebuild(this);\n }, Q = () => {\n this.allRawPaths.pop(), this.paths.pop(), this.bezierPath2D.pop(), this.paths.length === 0 ? this.remove() : (this.canvas || (h(this, C, ba).call(this), h(this, C, ma).call(this)), h(this, C, mn).call(this));\n };\n this.addCommands({\n cmd: c,\n undo: Q,\n mustExec: !0\n });\n}, Ue = function() {\n if (!n(this, KF))\n return;\n e(this, KF, !1);\n const l = Math.ceil(this.thickness * this.parentScale), d = this.currentPath.slice(-3), t = d.map((c) => c[0]), Z = d.map((c) => c[1]);\n Math.min(...t) - l, Math.max(...t) + l, Math.min(...Z) - l, Math.max(...Z) + l;\n const {\n ctx: F\n } = this;\n F.save(), F.clearRect(0, 0, this.canvas.width, this.canvas.height);\n for (const c of this.bezierPath2D)\n F.stroke(c);\n F.stroke(n(this, ut)), F.restore();\n}, de = function(l, d, t, Z, F, c, Q) {\n const a = (d + Z) / 2, V = (t + F) / 2, W = (Z + c) / 2, i = (F + Q) / 2;\n l.bezierCurveTo(a + 2 * (Z - a) / 3, V + 2 * (F - V) / 3, W + 2 * (Z - W) / 3, i + 2 * (F - i) / 3, W, i);\n}, te = function() {\n const l = this.currentPath;\n if (l.length <= 2)\n return [[l[0], l[0], l.at(-1), l.at(-1)]];\n const d = [];\n let t, [Z, F] = l[0];\n for (t = 1; t < l.length - 2; t++) {\n const [R, N] = l[t], [b, J] = l[t + 1], M = (R + b) / 2, G = (N + J) / 2, T = [Z + 2 * (R - Z) / 3, F + 2 * (N - F) / 3], u = [M + 2 * (R - M) / 3, G + 2 * (N - G) / 3];\n d.push([[Z, F], T, u, [M, G]]), [Z, F] = [M, G];\n }\n const [c, Q] = l[t], [a, V] = l[t + 1], W = [Z + 2 * (c - Z) / 3, F + 2 * (Q - F) / 3], i = [a + 2 * (c - a) / 3, V + 2 * (Q - V) / 3];\n return d.push([[Z, F], W, i, [a, V]]), d;\n}, HZ = function() {\n if (this.isEmpty()) {\n h(this, C, Ma).call(this);\n return;\n }\n h(this, C, xW).call(this);\n const {\n canvas: l,\n ctx: d\n } = this;\n d.setTransform(1, 0, 0, 1, 0, 0), d.clearRect(0, 0, l.width, l.height), h(this, C, Ma).call(this);\n for (const t of this.bezierPath2D)\n d.stroke(t);\n}, OW = function() {\n if (n(this, Sc))\n return;\n e(this, Sc, new AbortController());\n const l = this._uiManager.combinedSignal(n(this, Sc));\n this.canvas.addEventListener(\"pointerdown\", this.canvasPointerdown.bind(this), {\n signal: l\n });\n}, gW = function() {\n var l;\n (l = this.pointerdownAC) == null || l.abort(), this.pointerdownAC = null;\n}, KW = function(l) {\n var d;\n (d = n(this, gF)) == null || d.abort(), e(this, gF, null), h(this, C, OW).call(this), n(this, xd) && clearTimeout(n(this, xd)), e(this, xd, setTimeout(() => {\n e(this, xd, null), this.canvas.removeEventListener(\"contextmenu\", nd);\n }, 10)), h(this, C, le).call(this, l.offsetX, l.offsetY), this.addToAnnotationStorage(), this.setInBackground();\n}, ba = function() {\n this.canvas = document.createElement(\"canvas\"), this.canvas.width = this.canvas.height = 0, this.canvas.className = \"inkEditorCanvas\", this.canvas.setAttribute(\"data-l10n-id\", \"pdfjs-ink-canvas\"), this.div.append(this.canvas), this.ctx = this.canvas.getContext(\"2d\");\n}, ma = function() {\n e(this, Yt, new ResizeObserver((l) => {\n const d = l[0].contentRect;\n d.width && d.height && this.setDimensions(d.width, d.height);\n })), n(this, Yt).observe(this.div), this._uiManager._signal.addEventListener(\"abort\", () => {\n var l;\n (l = n(this, Yt)) == null || l.disconnect(), e(this, Yt, null);\n }, {\n once: !0\n });\n}, Y0 = function() {\n if (!n(this, vF))\n return;\n const [l, d] = this.parentDimensions;\n this.canvas.width = Math.ceil(this.width * l), this.canvas.height = Math.ceil(this.height * d), h(this, C, Ma).call(this);\n}, vW = function(l, d) {\n const t = h(this, C, Ja).call(this), Z = (l - t) / n(this, OF), F = (d - t) / n(this, jF);\n this.scaleFactor = Math.min(Z, F);\n}, Ma = function() {\n const l = h(this, C, Ja).call(this) / 2;\n this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + l, this.translationY * this.scaleFactor + l);\n}, gt = new WeakSet(), Ze = function(l) {\n const d = new Path2D();\n for (let t = 0, Z = l.length; t < Z; t++) {\n const [F, c, Q, a] = l[t];\n t === 0 && d.moveTo(...F), d.bezierCurveTo(c[0], c[1], Q[0], Q[1], a[0], a[1]);\n }\n return d;\n}, HW = function(l, d, t) {\n const [Z, F, c, Q] = d;\n switch (t) {\n case 0:\n for (let a = 0, V = l.length; a < V; a += 2)\n l[a] += Z, l[a + 1] = Q - l[a + 1];\n break;\n case 90:\n for (let a = 0, V = l.length; a < V; a += 2) {\n const W = l[a];\n l[a] = l[a + 1] + Z, l[a + 1] = W + F;\n }\n break;\n case 180:\n for (let a = 0, V = l.length; a < V; a += 2)\n l[a] = c - l[a], l[a + 1] += F;\n break;\n case 270:\n for (let a = 0, V = l.length; a < V; a += 2) {\n const W = l[a];\n l[a] = c - l[a + 1], l[a + 1] = Q - W;\n }\n break;\n default:\n throw new Error(\"Invalid rotation\");\n }\n return l;\n}, Fe = function(l, d, t) {\n const [Z, F, c, Q] = d;\n switch (t) {\n case 0:\n for (let a = 0, V = l.length; a < V; a += 2)\n l[a] -= Z, l[a + 1] = Q - l[a + 1];\n break;\n case 90:\n for (let a = 0, V = l.length; a < V; a += 2) {\n const W = l[a];\n l[a] = l[a + 1] - F, l[a + 1] = W - Z;\n }\n break;\n case 180:\n for (let a = 0, V = l.length; a < V; a += 2)\n l[a] = c - l[a], l[a + 1] -= F;\n break;\n case 270:\n for (let a = 0, V = l.length; a < V; a += 2) {\n const W = l[a];\n l[a] = Q - l[a + 1], l[a + 1] = c - W;\n }\n break;\n default:\n throw new Error(\"Invalid rotation\");\n }\n return l;\n}, ce = function(l, d, t, Z) {\n var V, W;\n const F = [], c = this.thickness / 2, Q = l * d + c, a = l * t + c;\n for (const i of this.paths) {\n const R = [], N = [];\n for (let b = 0, J = i.length; b < J; b++) {\n const [M, G, T, u] = i[b];\n if (M[0] === u[0] && M[1] === u[1] && J === 1) {\n const D = l * M[0] + Q, r = l * M[1] + a;\n R.push(D, r), N.push(D, r);\n break;\n }\n const X = l * M[0] + Q, Y = l * M[1] + a, o = l * G[0] + Q, y = l * G[1] + a, S = l * T[0] + Q, p = l * T[1] + a, L = l * u[0] + Q, I = l * u[1] + a;\n b === 0 && (R.push(X, Y), N.push(X, Y)), R.push(o, y, S, p, L, I), N.push(o, y), b === J - 1 && N.push(L, I);\n }\n F.push({\n bezier: h(V = ul, gt, HW).call(V, R, Z, this.rotation),\n points: h(W = ul, gt, HW).call(W, N, Z, this.rotation)\n });\n }\n return F;\n}, PW = function() {\n let l = 1 / 0, d = -1 / 0, t = 1 / 0, Z = -1 / 0;\n for (const F of this.paths)\n for (const [c, Q, a, V] of F) {\n const W = H.bezierBoundingBox(...c, ...Q, ...a, ...V);\n l = Math.min(l, W[0]), t = Math.min(t, W[1]), d = Math.max(d, W[2]), Z = Math.max(Z, W[3]);\n }\n return [l, t, d, Z];\n}, Ja = function() {\n return n(this, dd) ? Math.ceil(this.thickness * this.parentScale) : 0;\n}, mn = function(l = !1) {\n if (this.isEmpty())\n return;\n if (!n(this, dd)) {\n h(this, C, HZ).call(this);\n return;\n }\n const d = h(this, C, PW).call(this), t = h(this, C, Ja).call(this);\n e(this, OF, Math.max(hl.MIN_SIZE, d[2] - d[0])), e(this, jF, Math.max(hl.MIN_SIZE, d[3] - d[1]));\n const Z = Math.ceil(t + n(this, OF) * this.scaleFactor), F = Math.ceil(t + n(this, jF) * this.scaleFactor), [c, Q] = this.parentDimensions;\n this.width = Z / c, this.height = F / Q, this.setAspectRatio(Z, F);\n const a = this.translationX, V = this.translationY;\n this.translationX = -d[0], this.translationY = -d[1], h(this, C, Y0).call(this), h(this, C, HZ).call(this), e(this, HF, Z), e(this, PF, F), this.setDims(Z, F);\n const W = l ? t / this.scaleFactor / 2 : 0;\n this.translate(a - this.translationX - W, V - this.translationY - W);\n}, m(ul, gt), _(ul, \"_defaultColor\", null), _(ul, \"_defaultOpacity\", 1), _(ul, \"_defaultThickness\", 1), _(ul, \"_type\", \"ink\"), _(ul, \"_editorType\", tl.INK);\nlet wW = ul;\nvar ol, sU, bZ, ot, mZ, Xc, jd, pt, Od, gU, uc, nl, Mn, Jn, Ga, AW, ne, Ta, _W, Sa, se, Qe;\nconst zn = class zn extends hl {\n constructor(l) {\n super({\n ...l,\n name: \"stampEditor\"\n });\n m(this, nl);\n m(this, ol, null);\n m(this, sU, null);\n m(this, bZ, null);\n m(this, ot, null);\n m(this, mZ, null);\n m(this, Xc, \"\");\n m(this, jd, null);\n m(this, pt, null);\n m(this, Od, null);\n m(this, gU, !1);\n m(this, uc, !1);\n e(this, ot, l.bitmapUrl), e(this, mZ, l.bitmapFile);\n }\n static initialize(l, d) {\n hl.initialize(l, d);\n }\n static get supportedTypes() {\n return Ql(this, \"supportedTypes\", [\"apng\", \"avif\", \"bmp\", \"gif\", \"jpeg\", \"png\", \"svg+xml\", \"webp\", \"x-icon\"].map((d) => `image/${d}`));\n }\n static get supportedTypesStr() {\n return Ql(this, \"supportedTypesStr\", this.supportedTypes.join(\",\"));\n }\n static isHandlingMimeForPasting(l) {\n return this.supportedTypes.includes(l);\n }\n static paste(l, d) {\n d.pasteEditor(tl.STAMP, {\n bitmapFile: l.getAsFile()\n });\n }\n altTextFinish() {\n this._uiManager.useNewAltTextFlow && (this.div.hidden = !1), super.altTextFinish();\n }\n get telemetryFinalData() {\n var l;\n return {\n type: \"stamp\",\n hasAltText: !!((l = this.altTextData) != null && l.altText)\n };\n }\n static computeTelemetryFinalData(l) {\n const d = l.get(\"hasAltText\");\n return {\n hasAltText: d.get(!0) ?? 0,\n hasNoAltText: d.get(!1) ?? 0\n };\n }\n async mlGuessAltText(l = null, d = !0) {\n if (this.hasAltTextData())\n return null;\n const {\n mlManager: t\n } = this._uiManager;\n if (!t)\n throw new Error(\"No ML.\");\n if (!await t.isEnabledFor(\"altText\"))\n throw new Error(\"ML isn't enabled for alt text.\");\n const {\n data: Z,\n width: F,\n height: c\n } = l || this.copyCanvas(null, null, !0).imageData, Q = await t.guess({\n name: \"altText\",\n request: {\n data: Z,\n width: F,\n height: c,\n channels: Z.length / (F * c)\n }\n });\n if (!Q)\n throw new Error(\"No response from the AI service.\");\n if (Q.error)\n throw new Error(\"Error from the AI service.\");\n if (Q.cancel)\n return null;\n if (!Q.output)\n throw new Error(\"No valid response from the AI service.\");\n const a = Q.output;\n return await this.setGuessedAltText(a), d && !this.hasAltTextData() && (this.altTextData = {\n alt: a,\n decorative: !1\n }), a;\n }\n remove() {\n var l, d;\n n(this, sU) && (e(this, ol, null), this._uiManager.imageManager.deleteId(n(this, sU)), (l = n(this, jd)) == null || l.remove(), e(this, jd, null), (d = n(this, pt)) == null || d.disconnect(), e(this, pt, null), n(this, Od) && (clearTimeout(n(this, Od)), e(this, Od, null))), super.remove();\n }\n rebuild() {\n if (!this.parent) {\n n(this, sU) && h(this, nl, Ga).call(this);\n return;\n }\n super.rebuild(), this.div !== null && (n(this, sU) && n(this, jd) === null && h(this, nl, Ga).call(this), this.isAttachedToDOM || this.parent.add(this));\n }\n onceAdded() {\n this._isDraggable = !0, this.div.focus();\n }\n isEmpty() {\n return !(n(this, bZ) || n(this, ol) || n(this, ot) || n(this, mZ) || n(this, sU));\n }\n get isResizable() {\n return !0;\n }\n render() {\n if (this.div)\n return this.div;\n let l, d;\n if (this.width && (l = this.x, d = this.y), super.render(), this.div.hidden = !0, this.div.setAttribute(\"role\", \"figure\"), this.addAltTextButton(), n(this, ol) ? h(this, nl, AW).call(this) : h(this, nl, Ga).call(this), this.width && !this.annotationElementId) {\n const [t, Z] = this.parentDimensions;\n this.setAt(l * t, d * Z, this.width * t, this.height * Z);\n }\n return this.div;\n }\n copyCanvas(l, d, t = !1) {\n var R;\n l || (l = 224);\n const {\n width: Z,\n height: F\n } = n(this, ol), c = new HV();\n let Q = n(this, ol), a = Z, V = F, W = null;\n if (d) {\n if (Z > d || F > d) {\n const y = Math.min(d / Z, d / F);\n a = Math.floor(Z * y), V = Math.floor(F * y);\n }\n W = document.createElement(\"canvas\");\n const N = W.width = Math.ceil(a * c.sx), b = W.height = Math.ceil(V * c.sy);\n n(this, gU) || (Q = h(this, nl, Ta).call(this, N, b));\n const J = W.getContext(\"2d\");\n J.filter = this._uiManager.hcmFilter;\n let M = \"white\", G = \"#cfcfd8\";\n this._uiManager.hcmFilter !== \"none\" ? G = \"black\" : (R = window.matchMedia) != null && R.call(window, \"(prefers-color-scheme: dark)\").matches && (M = \"#8f8f9d\", G = \"#42414d\");\n const T = 15, u = T * c.sx, X = T * c.sy, Y = new OffscreenCanvas(u * 2, X * 2), o = Y.getContext(\"2d\");\n o.fillStyle = M, o.fillRect(0, 0, u * 2, X * 2), o.fillStyle = G, o.fillRect(0, 0, u, X), o.fillRect(u, X, u, X), J.fillStyle = J.createPattern(Y, \"repeat\"), J.fillRect(0, 0, N, b), J.drawImage(Q, 0, 0, Q.width, Q.height, 0, 0, N, b);\n }\n let i = null;\n if (t) {\n let N, b;\n if (c.symmetric && Q.width < l && Q.height < l)\n N = Q.width, b = Q.height;\n else if (Q = n(this, ol), Z > l || F > l) {\n const G = Math.min(l / Z, l / F);\n N = Math.floor(Z * G), b = Math.floor(F * G), n(this, gU) || (Q = h(this, nl, Ta).call(this, N, b));\n }\n const M = new OffscreenCanvas(N, b).getContext(\"2d\", {\n willReadFrequently: !0\n });\n M.drawImage(Q, 0, 0, Q.width, Q.height, 0, 0, N, b), i = {\n width: N,\n height: b,\n data: M.getImageData(0, 0, N, b).data\n };\n }\n return {\n canvas: W,\n width: a,\n height: V,\n imageData: i\n };\n }\n getImageForAltText() {\n return n(this, jd);\n }\n static async deserialize(l, d, t) {\n var b;\n let Z = null;\n if (l instanceof Sh) {\n const {\n data: {\n rect: J,\n rotation: M,\n id: G,\n structParent: T,\n popupRef: u\n },\n container: X,\n parent: {\n page: {\n pageNumber: Y\n }\n }\n } = l, o = X.querySelector(\"canvas\"), y = t.imageManager.getFromCanvas(X.id, o);\n o.remove();\n const S = ((b = await d._structTree.getAriaAttributes(`${Ci}${G}`)) == null ? void 0 : b.get(\"aria-label\")) || \"\";\n Z = l = {\n annotationType: tl.STAMP,\n bitmapId: y.id,\n bitmap: y.bitmap,\n pageIndex: Y - 1,\n rect: J.slice(0),\n rotation: M,\n id: G,\n deleted: !1,\n accessibilityData: {\n decorative: !1,\n altText: S\n },\n isSvg: !1,\n structParent: T,\n popupRef: u\n };\n }\n const F = await super.deserialize(l, d, t), {\n rect: c,\n bitmap: Q,\n bitmapUrl: a,\n bitmapId: V,\n isSvg: W,\n accessibilityData: i\n } = l;\n V && t.imageManager.isValidId(V) ? (e(F, sU, V), Q && e(F, ol, Q)) : e(F, ot, a), e(F, gU, W);\n const [R, N] = F.pageDimensions;\n return F.width = (c[2] - c[0]) / R, F.height = (c[3] - c[1]) / N, F.annotationElementId = l.id || null, i && (F.altTextData = i), F._initialData = Z, e(F, uc, !!Z), F;\n }\n serialize(l = !1, d = null) {\n if (this.isEmpty())\n return null;\n if (this.deleted)\n return this.serializeDeleted();\n const t = {\n annotationType: tl.STAMP,\n bitmapId: n(this, sU),\n pageIndex: this.pageIndex,\n rect: this.getRect(0, 0),\n rotation: this.rotation,\n isSvg: n(this, gU),\n structTreeParentId: this._structTreeParentId\n };\n if (l)\n return t.bitmapUrl = h(this, nl, Sa).call(this, !0), t.accessibilityData = this.serializeAltText(!0), t;\n const {\n decorative: Z,\n altText: F\n } = this.serializeAltText(!1);\n if (!Z && F && (t.accessibilityData = {\n type: \"Figure\",\n alt: F\n }), this.annotationElementId) {\n const Q = h(this, nl, Qe).call(this, t);\n if (Q.isSame)\n return null;\n Q.isSameAltText ? delete t.accessibilityData : t.accessibilityData.structParent = this._initialData.structParent ?? -1;\n }\n if (t.id = this.annotationElementId, d === null)\n return t;\n d.stamps || (d.stamps = /* @__PURE__ */ new Map());\n const c = n(this, gU) ? (t.rect[2] - t.rect[0]) * (t.rect[3] - t.rect[1]) : null;\n if (!d.stamps.has(n(this, sU)))\n d.stamps.set(n(this, sU), {\n area: c,\n serialized: t\n }), t.bitmap = h(this, nl, Sa).call(this, !1);\n else if (n(this, gU)) {\n const Q = d.stamps.get(n(this, sU));\n c > Q.area && (Q.area = c, Q.serialized.bitmap.close(), Q.serialized.bitmap = h(this, nl, Sa).call(this, !1));\n }\n return t;\n }\n renderAnnotationElement(l) {\n return l.updateEdited({\n rect: this.getRect(0, 0)\n }), null;\n }\n};\nol = new WeakMap(), sU = new WeakMap(), bZ = new WeakMap(), ot = new WeakMap(), mZ = new WeakMap(), Xc = new WeakMap(), jd = new WeakMap(), pt = new WeakMap(), Od = new WeakMap(), gU = new WeakMap(), uc = new WeakMap(), nl = new WeakSet(), Mn = function(l, d = !1) {\n if (!l) {\n this.remove();\n return;\n }\n e(this, ol, l.bitmap), d || (e(this, sU, l.id), e(this, gU, l.isSvg)), l.file && e(this, Xc, l.file.name), h(this, nl, AW).call(this);\n}, Jn = function() {\n if (e(this, bZ, null), this._uiManager.enableWaiting(!1), !!n(this, jd)) {\n if (this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && n(this, ol)) {\n this._editToolbar.hide(), this._uiManager.editAltText(this, !0);\n return;\n }\n if (!this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && n(this, ol)) {\n this._reportTelemetry({\n action: \"pdfjs.image.image_added\",\n data: {\n alt_text_modal: !1,\n alt_text_type: \"empty\"\n }\n });\n try {\n this.mlGuessAltText();\n } catch {\n }\n }\n this.div.focus();\n }\n}, Ga = function() {\n if (n(this, sU)) {\n this._uiManager.enableWaiting(!0), this._uiManager.imageManager.getFromId(n(this, sU)).then((t) => h(this, nl, Mn).call(this, t, !0)).finally(() => h(this, nl, Jn).call(this));\n return;\n }\n if (n(this, ot)) {\n const t = n(this, ot);\n e(this, ot, null), this._uiManager.enableWaiting(!0), e(this, bZ, this._uiManager.imageManager.getFromUrl(t).then((Z) => h(this, nl, Mn).call(this, Z)).finally(() => h(this, nl, Jn).call(this)));\n return;\n }\n if (n(this, mZ)) {\n const t = n(this, mZ);\n e(this, mZ, null), this._uiManager.enableWaiting(!0), e(this, bZ, this._uiManager.imageManager.getFromFile(t).then((Z) => h(this, nl, Mn).call(this, Z)).finally(() => h(this, nl, Jn).call(this)));\n return;\n }\n const l = document.createElement(\"input\");\n l.type = \"file\", l.accept = zn.supportedTypesStr;\n const d = this._uiManager._signal;\n e(this, bZ, new Promise((t) => {\n l.addEventListener(\"change\", async () => {\n if (!l.files || l.files.length === 0)\n this.remove();\n else {\n this._uiManager.enableWaiting(!0);\n const Z = await this._uiManager.imageManager.getFromFile(l.files[0]);\n this._reportTelemetry({\n action: \"pdfjs.image.image_selected\",\n data: {\n alt_text_modal: this._uiManager.useNewAltTextFlow\n }\n }), h(this, nl, Mn).call(this, Z);\n }\n t();\n }, {\n signal: d\n }), l.addEventListener(\"cancel\", () => {\n this.remove(), t();\n }, {\n signal: d\n });\n }).finally(() => h(this, nl, Jn).call(this))), l.click();\n}, AW = function() {\n const {\n div: l\n } = this;\n let {\n width: d,\n height: t\n } = n(this, ol);\n const [Z, F] = this.pageDimensions, c = 0.75;\n if (this.width)\n d = this.width * Z, t = this.height * F;\n else if (d > c * Z || t > c * F) {\n const W = Math.min(c * Z / d, c * F / t);\n d *= W, t *= W;\n }\n const [Q, a] = this.parentDimensions;\n this.setDims(d * Q / Z, t * a / F), this._uiManager.enableWaiting(!1);\n const V = e(this, jd, document.createElement(\"canvas\"));\n V.setAttribute(\"role\", \"img\"), this.addContainer(V), (!this._uiManager.useNewAltTextWhenAddingImage || !this._uiManager.useNewAltTextFlow || this.annotationElementId) && (l.hidden = !1), h(this, nl, _W).call(this, d, t), h(this, nl, se).call(this), n(this, uc) || (this.parent.addUndoableEditor(this), e(this, uc, !0)), this._reportTelemetry({\n action: \"inserted_image\"\n }), n(this, Xc) && V.setAttribute(\"aria-label\", n(this, Xc));\n}, ne = function(l, d) {\n var c;\n const [t, Z] = this.parentDimensions;\n this.width = l / t, this.height = d / Z, (c = this._initialOptions) != null && c.isCentered ? this.center() : this.fixAndSetPosition(), this._initialOptions = null, n(this, Od) !== null && clearTimeout(n(this, Od)), e(this, Od, setTimeout(() => {\n e(this, Od, null), h(this, nl, _W).call(this, l, d);\n }, 200));\n}, Ta = function(l, d) {\n const {\n width: t,\n height: Z\n } = n(this, ol);\n let F = t, c = Z, Q = n(this, ol);\n for (; F > 2 * l || c > 2 * d; ) {\n const a = F, V = c;\n F > 2 * l && (F = F >= 16384 ? Math.floor(F / 2) - 1 : Math.ceil(F / 2)), c > 2 * d && (c = c >= 16384 ? Math.floor(c / 2) - 1 : Math.ceil(c / 2));\n const W = new OffscreenCanvas(F, c);\n W.getContext(\"2d\").drawImage(Q, 0, 0, a, V, 0, 0, F, c), Q = W.transferToImageBitmap();\n }\n return Q;\n}, _W = function(l, d) {\n const t = new HV(), Z = Math.ceil(l * t.sx), F = Math.ceil(d * t.sy), c = n(this, jd);\n if (!c || c.width === Z && c.height === F)\n return;\n c.width = Z, c.height = F;\n const Q = n(this, gU) ? n(this, ol) : h(this, nl, Ta).call(this, Z, F), a = c.getContext(\"2d\");\n a.filter = this._uiManager.hcmFilter, a.drawImage(Q, 0, 0, Q.width, Q.height, 0, 0, Z, F);\n}, Sa = function(l) {\n if (l) {\n if (n(this, gU)) {\n const Z = this._uiManager.imageManager.getSvgUrl(n(this, sU));\n if (Z)\n return Z;\n }\n const d = document.createElement(\"canvas\");\n return {\n width: d.width,\n height: d.height\n } = n(this, ol), d.getContext(\"2d\").drawImage(n(this, ol), 0, 0), d.toDataURL();\n }\n if (n(this, gU)) {\n const [d, t] = this.pageDimensions, Z = Math.round(this.width * d * Pc.PDF_TO_CSS_UNITS), F = Math.round(this.height * t * Pc.PDF_TO_CSS_UNITS), c = new OffscreenCanvas(Z, F);\n return c.getContext(\"2d\").drawImage(n(this, ol), 0, 0, n(this, ol).width, n(this, ol).height, 0, 0, Z, F), c.transferToImageBitmap();\n }\n return structuredClone(n(this, ol));\n}, se = function() {\n this._uiManager._signal && (e(this, pt, new ResizeObserver((l) => {\n const d = l[0].contentRect;\n d.width && d.height && h(this, nl, ne).call(this, d.width, d.height);\n })), n(this, pt).observe(this.div), this._uiManager._signal.addEventListener(\"abort\", () => {\n var l;\n (l = n(this, pt)) == null || l.disconnect(), e(this, pt, null);\n }, {\n once: !0\n }));\n}, Qe = function(l) {\n var a;\n const {\n rect: d,\n pageIndex: t,\n accessibilityData: {\n altText: Z\n }\n } = this._initialData, F = l.rect.every((V, W) => Math.abs(V - d[W]) < 1), c = l.pageIndex === t, Q = (((a = l.accessibilityData) == null ? void 0 : a.alt) || \"\") === Z;\n return {\n isSame: F && c && Q,\n isSameAltText: Q\n };\n}, _(zn, \"_type\", \"stamp\"), _(zn, \"_editorType\", tl.STAMP);\nlet fW = zn;\nvar fF, Yc, gd, MZ, Bt, KU, JZ, oc, pc, eU, yt, P, kU, GZ, aU, ae, qW, $W, li, Xa;\nlet h2 = (kU = class {\n constructor({\n uiManager: U,\n pageIndex: l,\n div: d,\n structTreeLayer: t,\n accessibilityManager: Z,\n annotationLayer: F,\n drawLayer: c,\n textLayer: Q,\n viewport: a,\n l10n: V\n }) {\n m(this, aU);\n m(this, fF);\n m(this, Yc, !1);\n m(this, gd, null);\n m(this, MZ, null);\n m(this, Bt, null);\n m(this, KU, /* @__PURE__ */ new Map());\n m(this, JZ, !1);\n m(this, oc, !1);\n m(this, pc, !1);\n m(this, eU, null);\n m(this, yt, null);\n m(this, P);\n const W = [...n(kU, GZ).values()];\n if (!kU._initialized) {\n kU._initialized = !0;\n for (const i of W)\n i.initialize(V, U);\n }\n U.registerEditorTypes(W), e(this, P, U), this.pageIndex = l, this.div = d, e(this, fF, Z), e(this, gd, F), this.viewport = a, e(this, eU, Q), this.drawLayer = c, this._structTree = t, n(this, P).addLayer(this);\n }\n get isEmpty() {\n return n(this, KU).size === 0;\n }\n get isInvisible() {\n return this.isEmpty && n(this, P).getMode() === tl.NONE;\n }\n updateToolbar(U) {\n n(this, P).updateToolbar(U);\n }\n updateMode(U = n(this, P).getMode()) {\n switch (h(this, aU, Xa).call(this), U) {\n case tl.NONE:\n this.disableTextSelection(), this.togglePointerEvents(!1), this.toggleAnnotationLayerPointerEvents(!0), this.disableClick();\n return;\n case tl.INK:\n this.addInkEditorIfNeeded(!1), this.disableTextSelection(), this.togglePointerEvents(!0), this.disableClick();\n break;\n case tl.HIGHLIGHT:\n this.enableTextSelection(), this.togglePointerEvents(!1), this.disableClick();\n break;\n default:\n this.disableTextSelection(), this.togglePointerEvents(!0), this.enableClick();\n }\n this.toggleAnnotationLayerPointerEvents(!1);\n const {\n classList: l\n } = this.div;\n for (const d of n(kU, GZ).values())\n l.toggle(`${d._type}Editing`, U === d._editorType);\n this.div.hidden = !1;\n }\n hasTextLayer(U) {\n var l;\n return U === ((l = n(this, eU)) == null ? void 0 : l.div);\n }\n addInkEditorIfNeeded(U) {\n if (n(this, P).getMode() !== tl.INK)\n return;\n if (!U) {\n for (const d of n(this, KU).values())\n if (d.isEmpty()) {\n d.setInBackground();\n return;\n }\n }\n this.createAndAddNewEditor({\n offsetX: 0,\n offsetY: 0\n }, !1).setInBackground();\n }\n setEditingState(U) {\n n(this, P).setEditingState(U);\n }\n addCommands(U) {\n n(this, P).addCommands(U);\n }\n toggleDrawing(U = !1) {\n this.div.classList.toggle(\"drawing\", !U);\n }\n togglePointerEvents(U = !1) {\n this.div.classList.toggle(\"disabled\", !U);\n }\n toggleAnnotationLayerPointerEvents(U = !1) {\n var l;\n (l = n(this, gd)) == null || l.div.classList.toggle(\"disabled\", !U);\n }\n async enable() {\n this.div.tabIndex = 0, this.togglePointerEvents(!0);\n const U = /* @__PURE__ */ new Set();\n for (const d of n(this, KU).values())\n d.enableEditing(), d.show(!0), d.annotationElementId && (n(this, P).removeChangedExistingAnnotation(d), U.add(d.annotationElementId));\n if (!n(this, gd))\n return;\n const l = n(this, gd).getEditableAnnotations();\n for (const d of l) {\n if (d.hide(), n(this, P).isDeletedAnnotationElement(d.data.id) || U.has(d.data.id))\n continue;\n const t = await this.deserialize(d);\n t && (this.addOrRebuild(t), t.enableEditing());\n }\n }\n disable() {\n var t;\n e(this, pc, !0), this.div.tabIndex = -1, this.togglePointerEvents(!1);\n const U = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map();\n for (const Z of n(this, KU).values())\n if (Z.disableEditing(), !!Z.annotationElementId) {\n if (Z.serialize() !== null) {\n U.set(Z.annotationElementId, Z);\n continue;\n } else\n l.set(Z.annotationElementId, Z);\n (t = this.getEditableAnnotation(Z.annotationElementId)) == null || t.show(), Z.remove();\n }\n if (n(this, gd)) {\n const Z = n(this, gd).getEditableAnnotations();\n for (const F of Z) {\n const {\n id: c\n } = F.data;\n if (n(this, P).isDeletedAnnotationElement(c))\n continue;\n let Q = l.get(c);\n if (Q) {\n Q.resetAnnotationElement(F), Q.show(!1), F.show();\n continue;\n }\n Q = U.get(c), Q && (n(this, P).addChangedExistingAnnotation(Q), Q.renderAnnotationElement(F) && Q.show(!1)), F.show();\n }\n }\n h(this, aU, Xa).call(this), this.isEmpty && (this.div.hidden = !0);\n const {\n classList: d\n } = this.div;\n for (const Z of n(kU, GZ).values())\n d.remove(`${Z._type}Editing`);\n this.disableTextSelection(), this.toggleAnnotationLayerPointerEvents(!0), e(this, pc, !1);\n }\n getEditableAnnotation(U) {\n var l;\n return ((l = n(this, gd)) == null ? void 0 : l.getEditableAnnotation(U)) || null;\n }\n setActiveEditor(U) {\n n(this, P).getActive() !== U && n(this, P).setActiveEditor(U);\n }\n enableTextSelection() {\n var U;\n if (this.div.tabIndex = -1, (U = n(this, eU)) != null && U.div && !n(this, yt)) {\n e(this, yt, new AbortController());\n const l = n(this, P).combinedSignal(n(this, yt));\n n(this, eU).div.addEventListener(\"pointerdown\", h(this, aU, ae).bind(this), {\n signal: l\n }), n(this, eU).div.classList.add(\"highlighting\");\n }\n }\n disableTextSelection() {\n var U;\n this.div.tabIndex = 0, (U = n(this, eU)) != null && U.div && n(this, yt) && (n(this, yt).abort(), e(this, yt, null), n(this, eU).div.classList.remove(\"highlighting\"));\n }\n enableClick() {\n if (n(this, MZ))\n return;\n e(this, MZ, new AbortController());\n const U = n(this, P).combinedSignal(n(this, MZ));\n this.div.addEventListener(\"pointerdown\", this.pointerdown.bind(this), {\n signal: U\n }), this.div.addEventListener(\"pointerup\", this.pointerup.bind(this), {\n signal: U\n });\n }\n disableClick() {\n var U;\n (U = n(this, MZ)) == null || U.abort(), e(this, MZ, null);\n }\n attach(U) {\n n(this, KU).set(U.id, U);\n const {\n annotationElementId: l\n } = U;\n l && n(this, P).isDeletedAnnotationElement(l) && n(this, P).removeDeletedAnnotationElement(U);\n }\n detach(U) {\n var l;\n n(this, KU).delete(U.id), (l = n(this, fF)) == null || l.removePointerInTextLayer(U.contentDiv), !n(this, pc) && U.annotationElementId && n(this, P).addDeletedAnnotationElement(U);\n }\n remove(U) {\n this.detach(U), n(this, P).removeEditor(U), U.div.remove(), U.isAttachedToDOM = !1, n(this, oc) || this.addInkEditorIfNeeded(!1);\n }\n changeParent(U) {\n var l;\n U.parent !== this && (U.parent && U.annotationElementId && (n(this, P).addDeletedAnnotationElement(U.annotationElementId), hl.deleteAnnotationElement(U), U.annotationElementId = null), this.attach(U), (l = U.parent) == null || l.detach(U), U.setParent(this), U.div && U.isAttachedToDOM && (U.div.remove(), this.div.append(U.div)));\n }\n add(U) {\n if (!(U.parent === this && U.isAttachedToDOM)) {\n if (this.changeParent(U), n(this, P).addEditor(U), this.attach(U), !U.isAttachedToDOM) {\n const l = U.render();\n this.div.append(l), U.isAttachedToDOM = !0;\n }\n U.fixAndSetPosition(), U.onceAdded(), n(this, P).addToAnnotationStorage(U), U._reportTelemetry(U.telemetryInitialData);\n }\n }\n moveEditorInDOM(U) {\n var d;\n if (!U.isAttachedToDOM)\n return;\n const {\n activeElement: l\n } = document;\n U.div.contains(l) && !n(this, Bt) && (U._focusEventsAllowed = !1, e(this, Bt, setTimeout(() => {\n e(this, Bt, null), U.div.contains(document.activeElement) ? U._focusEventsAllowed = !0 : (U.div.addEventListener(\"focusin\", () => {\n U._focusEventsAllowed = !0;\n }, {\n once: !0,\n signal: n(this, P)._signal\n }), l.focus());\n }, 0))), U._structTreeParentId = (d = n(this, fF)) == null ? void 0 : d.moveElementInDOM(this.div, U.div, U.contentDiv, !0);\n }\n addOrRebuild(U) {\n U.needsToBeRebuilt() ? (U.parent || (U.parent = this), U.rebuild(), U.show()) : this.add(U);\n }\n addUndoableEditor(U) {\n const l = () => U._uiManager.rebuild(U), d = () => {\n U.remove();\n };\n this.addCommands({\n cmd: l,\n undo: d,\n mustExec: !1\n });\n }\n getNextId() {\n return n(this, P).getId();\n }\n combinedSignal(U) {\n return n(this, P).combinedSignal(U);\n }\n canCreateNewEmptyEditor() {\n var U;\n return (U = n(this, aU, qW)) == null ? void 0 : U.canCreateNewEmptyEditor();\n }\n pasteEditor(U, l) {\n n(this, P).updateToolbar(U), n(this, P).updateMode(U);\n const {\n offsetX: d,\n offsetY: t\n } = h(this, aU, li).call(this), Z = this.getNextId(), F = h(this, aU, $W).call(this, {\n parent: this,\n id: Z,\n x: d,\n y: t,\n uiManager: n(this, P),\n isCentered: !0,\n ...l\n });\n F && this.add(F);\n }\n async deserialize(U) {\n var l;\n return await ((l = n(kU, GZ).get(U.annotationType ?? U.annotationEditorType)) == null ? void 0 : l.deserialize(U, this, n(this, P))) || null;\n }\n createAndAddNewEditor(U, l, d = {}) {\n const t = this.getNextId(), Z = h(this, aU, $W).call(this, {\n parent: this,\n id: t,\n x: U.offsetX,\n y: U.offsetY,\n uiManager: n(this, P),\n isCentered: l,\n ...d\n });\n return Z && this.add(Z), Z;\n }\n addNewEditor() {\n this.createAndAddNewEditor(h(this, aU, li).call(this), !0);\n }\n setSelected(U) {\n n(this, P).setSelected(U);\n }\n toggleSelected(U) {\n n(this, P).toggleSelected(U);\n }\n isSelected(U) {\n return n(this, P).isSelected(U);\n }\n unselect(U) {\n n(this, P).unselect(U);\n }\n pointerup(U) {\n const {\n isMac: l\n } = DU.platform;\n if (!(U.button !== 0 || U.ctrlKey && l) && U.target === this.div && n(this, JZ)) {\n if (e(this, JZ, !1), !n(this, Yc)) {\n e(this, Yc, !0);\n return;\n }\n if (n(this, P).getMode() === tl.STAMP) {\n n(this, P).unselectAll();\n return;\n }\n this.createAndAddNewEditor(U, !1);\n }\n }\n pointerdown(U) {\n if (n(this, P).getMode() === tl.HIGHLIGHT && this.enableTextSelection(), n(this, JZ)) {\n e(this, JZ, !1);\n return;\n }\n const {\n isMac: l\n } = DU.platform;\n if (U.button !== 0 || U.ctrlKey && l || U.target !== this.div)\n return;\n e(this, JZ, !0);\n const d = n(this, P).getActive();\n e(this, Yc, !d || d.isEmpty());\n }\n findNewParent(U, l, d) {\n const t = n(this, P).findParent(l, d);\n return t === null || t === this ? !1 : (t.changeParent(U), !0);\n }\n destroy() {\n var U, l;\n ((U = n(this, P).getActive()) == null ? void 0 : U.parent) === this && (n(this, P).commitOrRemove(), n(this, P).setActiveEditor(null)), n(this, Bt) && (clearTimeout(n(this, Bt)), e(this, Bt, null));\n for (const d of n(this, KU).values())\n (l = n(this, fF)) == null || l.removePointerInTextLayer(d.contentDiv), d.setParent(null), d.isAttachedToDOM = !1, d.div.remove();\n this.div = null, n(this, KU).clear(), n(this, P).removeLayer(this);\n }\n render({\n viewport: U\n }) {\n this.viewport = U, i0(this.div, U);\n for (const l of n(this, P).getEditors(this.pageIndex))\n this.add(l), l.rebuild();\n this.updateMode();\n }\n update({\n viewport: U\n }) {\n n(this, P).commitOrRemove(), h(this, aU, Xa).call(this);\n const l = this.viewport.rotation, d = U.rotation;\n if (this.viewport = U, i0(this.div, {\n rotation: d\n }), l !== d)\n for (const t of n(this, KU).values())\n t.rotate(d);\n this.addInkEditorIfNeeded(!1);\n }\n get pageDimensions() {\n const {\n pageWidth: U,\n pageHeight: l\n } = this.viewport.rawDims;\n return [U, l];\n }\n get scale() {\n return n(this, P).viewParameters.realScale;\n }\n}, fF = new WeakMap(), Yc = new WeakMap(), gd = new WeakMap(), MZ = new WeakMap(), Bt = new WeakMap(), KU = new WeakMap(), JZ = new WeakMap(), oc = new WeakMap(), pc = new WeakMap(), eU = new WeakMap(), yt = new WeakMap(), P = new WeakMap(), GZ = new WeakMap(), aU = new WeakSet(), ae = function(U) {\n n(this, P).unselectAll();\n const {\n target: l\n } = U;\n if (l === n(this, eU).div || (l.getAttribute(\"role\") === \"img\" || l.classList.contains(\"endOfContent\")) && n(this, eU).div.contains(l)) {\n const {\n isMac: d\n } = DU.platform;\n if (U.button !== 0 || U.ctrlKey && d)\n return;\n n(this, P).showAllEditors(\"highlight\", !0, !0), n(this, eU).div.classList.add(\"free\"), this.toggleDrawing(), wa.startHighlighting(this, n(this, P).direction === \"ltr\", {\n target: n(this, eU).div,\n x: U.x,\n y: U.y\n }), n(this, eU).div.addEventListener(\"pointerup\", () => {\n n(this, eU).div.classList.remove(\"free\"), this.toggleDrawing(!0);\n }, {\n once: !0,\n signal: n(this, P)._signal\n }), U.preventDefault();\n }\n}, qW = function() {\n return n(kU, GZ).get(n(this, P).getMode());\n}, $W = function(U) {\n const l = n(this, aU, qW);\n return l ? new l.prototype.constructor(U) : null;\n}, li = function() {\n const {\n x: U,\n y: l,\n width: d,\n height: t\n } = this.div.getBoundingClientRect(), Z = Math.max(0, U), F = Math.max(0, l), c = Math.min(window.innerWidth, U + d), Q = Math.min(window.innerHeight, l + t), a = (Z + c) / 2 - U, V = (F + Q) / 2 - l, [W, i] = this.viewport.rotation % 180 === 0 ? [a, V] : [V, a];\n return {\n offsetX: W,\n offsetY: i\n };\n}, Xa = function() {\n e(this, oc, !0);\n for (const U of n(this, KU).values())\n U.isEmpty() && U.remove();\n e(this, oc, !1);\n}, _(kU, \"_initialized\", !1), m(kU, GZ, new Map([yW, wW, fW, wa].map((U) => [U._editorType, U]))), kU);\nvar Kd, UQ, Cl, TZ, dQ, wl, Ui, h0, di, Ve;\nlet e2 = (wl = class {\n constructor({\n pageIndex: U\n }) {\n m(this, h0);\n m(this, Kd, null);\n m(this, UQ, 0);\n m(this, Cl, /* @__PURE__ */ new Map());\n m(this, TZ, /* @__PURE__ */ new Map());\n this.pageIndex = U;\n }\n setParent(U) {\n if (!n(this, Kd)) {\n e(this, Kd, U);\n return;\n }\n if (n(this, Kd) !== U) {\n if (n(this, Cl).size > 0)\n for (const l of n(this, Cl).values())\n l.remove(), U.append(l);\n e(this, Kd, U);\n }\n }\n static get _svgFactory() {\n return Ql(this, \"_svgFactory\", new wi());\n }\n highlight(U, l, d, t = !1) {\n const Z = VU(this, UQ)._++, F = h(this, h0, di).call(this, U.box);\n F.classList.add(\"highlight\"), U.free && F.classList.add(\"free\");\n const c = wl._svgFactory.createElement(\"defs\");\n F.append(c);\n const Q = wl._svgFactory.createElement(\"path\");\n c.append(Q);\n const a = `path_p${this.pageIndex}_${Z}`;\n Q.setAttribute(\"id\", a), Q.setAttribute(\"d\", U.toSVGPath()), t && n(this, TZ).set(Z, Q);\n const V = h(this, h0, Ve).call(this, c, a), W = wl._svgFactory.createElement(\"use\");\n return F.append(W), F.setAttribute(\"fill\", l), F.setAttribute(\"fill-opacity\", d), W.setAttribute(\"href\", `#${a}`), n(this, Cl).set(Z, F), {\n id: Z,\n clipPathId: `url(#${V})`\n };\n }\n highlightOutline(U) {\n const l = VU(this, UQ)._++, d = h(this, h0, di).call(this, U.box);\n d.classList.add(\"highlightOutline\");\n const t = wl._svgFactory.createElement(\"defs\");\n d.append(t);\n const Z = wl._svgFactory.createElement(\"path\");\n t.append(Z);\n const F = `path_p${this.pageIndex}_${l}`;\n Z.setAttribute(\"id\", F), Z.setAttribute(\"d\", U.toSVGPath()), Z.setAttribute(\"vector-effect\", \"non-scaling-stroke\");\n let c;\n if (U.free) {\n d.classList.add(\"free\");\n const V = wl._svgFactory.createElement(\"mask\");\n t.append(V), c = `mask_p${this.pageIndex}_${l}`, V.setAttribute(\"id\", c), V.setAttribute(\"maskUnits\", \"objectBoundingBox\");\n const W = wl._svgFactory.createElement(\"rect\");\n V.append(W), W.setAttribute(\"width\", \"1\"), W.setAttribute(\"height\", \"1\"), W.setAttribute(\"fill\", \"white\");\n const i = wl._svgFactory.createElement(\"use\");\n V.append(i), i.setAttribute(\"href\", `#${F}`), i.setAttribute(\"stroke\", \"none\"), i.setAttribute(\"fill\", \"black\"), i.setAttribute(\"fill-rule\", \"nonzero\"), i.classList.add(\"mask\");\n }\n const Q = wl._svgFactory.createElement(\"use\");\n d.append(Q), Q.setAttribute(\"href\", `#${F}`), c && Q.setAttribute(\"mask\", `url(#${c})`);\n const a = Q.cloneNode();\n return d.append(a), Q.classList.add(\"mainOutline\"), a.classList.add(\"secondaryOutline\"), n(this, Cl).set(l, d), l;\n }\n finalizeLine(U, l) {\n const d = n(this, TZ).get(U);\n n(this, TZ).delete(U), this.updateBox(U, l.box), d.setAttribute(\"d\", l.toSVGPath());\n }\n updateLine(U, l) {\n n(this, Cl).get(U).firstChild.firstChild.setAttribute(\"d\", l.toSVGPath());\n }\n removeFreeHighlight(U) {\n this.remove(U), n(this, TZ).delete(U);\n }\n updatePath(U, l) {\n n(this, TZ).get(U).setAttribute(\"d\", l.toSVGPath());\n }\n updateBox(U, l) {\n var d;\n h(d = wl, dQ, Ui).call(d, n(this, Cl).get(U), l);\n }\n show(U, l) {\n n(this, Cl).get(U).classList.toggle(\"hidden\", !l);\n }\n rotate(U, l) {\n n(this, Cl).get(U).setAttribute(\"data-main-rotation\", l);\n }\n changeColor(U, l) {\n n(this, Cl).get(U).setAttribute(\"fill\", l);\n }\n changeOpacity(U, l) {\n n(this, Cl).get(U).setAttribute(\"fill-opacity\", l);\n }\n addClass(U, l) {\n n(this, Cl).get(U).classList.add(l);\n }\n removeClass(U, l) {\n n(this, Cl).get(U).classList.remove(l);\n }\n getSVGRoot(U) {\n return n(this, Cl).get(U);\n }\n remove(U) {\n n(this, Kd) !== null && (n(this, Cl).get(U).remove(), n(this, Cl).delete(U));\n }\n destroy() {\n e(this, Kd, null);\n for (const U of n(this, Cl).values())\n U.remove();\n n(this, Cl).clear();\n }\n}, Kd = new WeakMap(), UQ = new WeakMap(), Cl = new WeakMap(), TZ = new WeakMap(), dQ = new WeakSet(), Ui = function(U, {\n x: l = 0,\n y: d = 0,\n width: t = 1,\n height: Z = 1\n} = {}) {\n const {\n style: F\n } = U;\n F.top = `${100 * d}%`, F.left = `${100 * l}%`, F.width = `${100 * t}%`, F.height = `${100 * Z}%`;\n}, h0 = new WeakSet(), di = function(U) {\n var d;\n const l = wl._svgFactory.create(1, 1, !0);\n return n(this, Kd).append(l), l.setAttribute(\"aria-hidden\", !0), h(d = wl, dQ, Ui).call(d, l, U), l;\n}, Ve = function(U, l) {\n const d = wl._svgFactory.createElement(\"clipPath\");\n U.append(d);\n const t = `clip_${l}`;\n d.setAttribute(\"id\", t), d.setAttribute(\"clipPathUnits\", \"objectBoundingBox\");\n const Z = wl._svgFactory.createElement(\"use\");\n return d.append(Z), Z.setAttribute(\"href\", `#${l}`), Z.classList.add(\"clip\"), t;\n}, m(wl, dQ), wl);\n$.AbortException;\n$.AnnotationEditorLayer;\n$.AnnotationEditorParamsType;\n$.AnnotationEditorType;\n$.AnnotationEditorUIManager;\nvar b2 = $.AnnotationLayer;\n$.AnnotationMode;\n$.CMapCompressionType;\n$.ColorPicker;\n$.DOMSVGFactory;\n$.DrawLayer;\n$.FeatureTest;\nvar wQ = $.GlobalWorkerOptions;\n$.ImageKind;\n$.InvalidPDFException;\n$.MissingPDFException;\n$.OPS;\n$.OutputScale;\n$.PDFDataRangeTransport;\n$.PDFDateString;\n$.PDFWorker;\nvar m2 = $.PasswordResponses;\n$.PermissionFlag;\n$.PixelsPerInch;\n$.RenderingCancelledException;\nvar M2 = $.TextLayer;\n$.UnexpectedResponseException;\n$.Util;\n$.VerbosityLevel;\n$.XfaLayer;\n$.build;\n$.createValidAbsoluteUrl;\n$.fetchData;\nvar J2 = $.getDocument;\n$.getFilenameFromUrl;\n$.getPdfFilenameFromUrl;\n$.getXfaPageViewport;\n$.isDataScheme;\n$.isPdfFile;\n$.noContextMenu;\n$.normalizeUnicode;\n$.setLayerDimensions;\n$.shadow;\n$.version;\nconst G2 = \"data:text/javascript;base64,LyoqCiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZQogKiBKYXZhU2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlCiAqCiAqIENvcHlyaWdodCAyMDI0IE1vemlsbGEgRm91bmRhdGlvbgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGUKICogSmF2YVNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZQogKi92YXIgZT17OTMwNjooZSx0LGkpPT57dmFyIGE9aSg0OTAxKSxyPWkoNjgyMykscz1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKGEoZSkpcmV0dXJuIGU7dGhyb3cgbmV3IHMocihlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9fSwzNTA2OihlLHQsaSk9Pnt2YXIgYT1pKDM5MjUpLHI9U3RyaW5nLHM9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihhKGUpKXJldHVybiBlO3Rocm93IG5ldyBzKCJDYW4ndCBzZXQgIityKGUpKyIgYXMgYSBwcm90b3R5cGUiKX19LDcwODA6KGUsdCxpKT0+e3ZhciBhPWkoNDQwMikuaGFzO2UuZXhwb3J0cz1mdW5jdGlvbihlKXthKGUpO3JldHVybiBlfX0sNjc5OihlLHQsaSk9Pnt2YXIgYT1pKDE2MjUpLHI9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGEodCxlKSlyZXR1cm4gZTt0aHJvdyBuZXcgcigiSW5jb3JyZWN0IGludm9jYXRpb24iKX19LDg1NTE6KGUsdCxpKT0+e3ZhciBhPWkoMzQpLHI9U3RyaW5nLHM9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihhKGUpKXJldHVybiBlO3Rocm93IG5ldyBzKHIoZSkrIiBpcyBub3QgYW4gb2JqZWN0Iil9fSw3ODExOmU9PntlLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmInVuZGVmaW5lZCIhPXR5cGVvZiBEYXRhVmlld30sNzM5NDooZSx0LGkpPT57dmFyIGE9aSg0NTc2KSxyPWkoNjcwNikscz1pKDIxOTUpLG49YS5BcnJheUJ1ZmZlcixvPWEuVHlwZUVycm9yO2UuZXhwb3J0cz1uJiZyKG4ucHJvdG90eXBlLCJieXRlTGVuZ3RoIiwiZ2V0Iil8fGZ1bmN0aW9uKGUpe2lmKCJBcnJheUJ1ZmZlciIhPT1zKGUpKXRocm93IG5ldyBvKCJBcnJheUJ1ZmZlciBleHBlY3RlZCIpO3JldHVybiBlLmJ5dGVMZW5ndGh9fSwzMjM4OihlLHQsaSk9Pnt2YXIgYT1pKDQ1NzYpLHI9aSg3NDc2KSxzPWkoNzM5NCksbj1hLkFycmF5QnVmZmVyLG89biYmbi5wcm90b3R5cGUsZz1vJiZyKG8uc2xpY2UpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigwIT09cyhlKSlyZXR1cm4hMTtpZighZylyZXR1cm4hMTt0cnl7ZyhlLDAsMCk7cmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITB9fX0sNTE2OTooZSx0LGkpPT57dmFyIGE9aSgzMjM4KSxyPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoYShlKSl0aHJvdyBuZXcgcigiQXJyYXlCdWZmZXIgaXMgZGV0YWNoZWQiKTtyZXR1cm4gZX19LDU2MzY6KGUsdCxpKT0+e3ZhciBhPWkoNDU3Nikscj1pKDk1MDQpLHM9aSg2NzA2KSxuPWkoNzY5Niksbz1pKDUxNjkpLGc9aSg3Mzk0KSxjPWkoNDQ4MyksQz1pKDE1NDgpLGg9YS5zdHJ1Y3R1cmVkQ2xvbmUsbD1hLkFycmF5QnVmZmVyLFE9YS5EYXRhVmlldyxFPU1hdGgubWluLHU9bC5wcm90b3R5cGUsZD1RLnByb3RvdHlwZSxmPXIodS5zbGljZSkscD1zKHUsInJlc2l6YWJsZSIsImdldCIpLG09cyh1LCJtYXhCeXRlTGVuZ3RoIiwiZ2V0IikseT1yKGQuZ2V0SW50OCksdz1yKGQuc2V0SW50OCk7ZS5leHBvcnRzPShDfHxjKSYmZnVuY3Rpb24oZSx0LGkpe3ZhciBhLHI9ZyhlKSxzPXZvaWQgMD09PXQ/cjpuKHQpLHU9IXB8fCFwKGUpO28oZSk7aWYoQyl7ZT1oKGUse3RyYW5zZmVyOltlXX0pO2lmKHI9PT1zJiYoaXx8dSkpcmV0dXJuIGV9aWYocj49cyYmKCFpfHx1KSlhPWYoZSwwLHMpO2Vsc2V7dmFyIGQ9aSYmIXUmJm0/e21heEJ5dGVMZW5ndGg6bShlKX06dm9pZCAwO2E9bmV3IGwocyxkKTtmb3IodmFyIGI9bmV3IFEoZSksRD1uZXcgUShhKSxTPUUocyxyKSxrPTA7azxTO2srKyl3KEQsayx5KGIsaykpfUN8fGMoZSk7cmV0dXJuIGF9fSw0NjQ0OihlLHQsaSk9Pnt2YXIgYSxyLHMsbj1pKDc4MTEpLG89aSgzNzI0KSxnPWkoNDU3NiksYz1pKDQ5MDEpLEM9aSgzNCksaD1pKDkyOTcpLGw9aSg2OTU1KSxRPWkoNjgyMyksRT1pKDY2OTkpLHU9aSg2ODQwKSxkPWkoMjEwNiksZj1pKDE2MjUpLHA9aSgyNzg3KSxtPWkoMjk2NykseT1pKDgyMjcpLHc9aSgzMzkyKSxiPWkoMTE4MSksRD1iLmVuZm9yY2UsUz1iLmdldCxrPWcuSW50OEFycmF5LFI9ayYmay5wcm90b3R5cGUsTj1nLlVpbnQ4Q2xhbXBlZEFycmF5LEc9TiYmTi5wcm90b3R5cGUseD1rJiZwKGspLFU9UiYmcChSKSxNPU9iamVjdC5wcm90b3R5cGUsTD1nLlR5cGVFcnJvcixIPXkoInRvU3RyaW5nVGFnIiksSj13KCJUWVBFRF9BUlJBWV9UQUciKSx2PSJUeXBlZEFycmF5Q29uc3RydWN0b3IiLFk9biYmISFtJiYiT3BlcmEiIT09bChnLm9wZXJhKSxUPSExLEs9e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxxPXtCaWdJbnQ2NEFycmF5OjgsQmlnVWludDY0QXJyYXk6OH0sZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yPWZ1bmN0aW9uKGUpe3ZhciB0PXAoZSk7aWYoQyh0KSl7dmFyIGk9Uyh0KTtyZXR1cm4gaSYmaChpLHYpP2lbdl06Z2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yKHQpfX0saXNUeXBlZEFycmF5PWZ1bmN0aW9uKGUpe2lmKCFDKGUpKXJldHVybiExO3ZhciB0PWwoZSk7cmV0dXJuIGgoSyx0KXx8aChxLHQpfTtmb3IoYSBpbiBLKShzPShyPWdbYV0pJiZyLnByb3RvdHlwZSk/RChzKVt2XT1yOlk9ITE7Zm9yKGEgaW4gcSkocz0ocj1nW2FdKSYmci5wcm90b3R5cGUpJiYoRChzKVt2XT1yKTtpZighWXx8IWMoeCl8fHg9PT1GdW5jdGlvbi5wcm90b3R5cGUpe3g9ZnVuY3Rpb24gVHlwZWRBcnJheSgpe3Rocm93IG5ldyBMKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfTtpZihZKWZvcihhIGluIEspZ1thXSYmbShnW2FdLHgpfWlmKCFZfHwhVXx8VT09PU0pe1U9eC5wcm90b3R5cGU7aWYoWSlmb3IoYSBpbiBLKWdbYV0mJm0oZ1thXS5wcm90b3R5cGUsVSl9WSYmcChHKSE9PVUmJm0oRyxVKTtpZihvJiYhaChVLEgpKXtUPSEwO2QoVSxILHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEModGhpcyk/dGhpc1tKXTp2b2lkIDB9fSk7Zm9yKGEgaW4gSylnW2FdJiZFKGdbYV0sSixhKX1lLmV4cG9ydHM9e05BVElWRV9BUlJBWV9CVUZGRVJfVklFV1M6WSxUWVBFRF9BUlJBWV9UQUc6VCYmSixhVHlwZWRBcnJheTpmdW5jdGlvbihlKXtpZihpc1R5cGVkQXJyYXkoZSkpcmV0dXJuIGU7dGhyb3cgbmV3IEwoIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSIpfSxhVHlwZWRBcnJheUNvbnN0cnVjdG9yOmZ1bmN0aW9uKGUpe2lmKGMoZSkmJighbXx8Zih4LGUpKSlyZXR1cm4gZTt0aHJvdyBuZXcgTChRKGUpKyIgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IiKX0sZXhwb3J0VHlwZWRBcnJheU1ldGhvZDpmdW5jdGlvbihlLHQsaSxhKXtpZihvKXtpZihpKWZvcih2YXIgciBpbiBLKXt2YXIgcz1nW3JdO2lmKHMmJmgocy5wcm90b3R5cGUsZSkpdHJ5e2RlbGV0ZSBzLnByb3RvdHlwZVtlXX1jYXRjaChpKXt0cnl7cy5wcm90b3R5cGVbZV09dH1jYXRjaChlKXt9fX1VW2VdJiYhaXx8dShVLGUsaT90OlkmJlJbZV18fHQsYSl9fSxleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kOmZ1bmN0aW9uKGUsdCxpKXt2YXIgYSxyO2lmKG8pe2lmKG0pe2lmKGkpZm9yKGEgaW4gSylpZigocj1nW2FdKSYmaChyLGUpKXRyeXtkZWxldGUgcltlXX1jYXRjaChlKXt9aWYoeFtlXSYmIWkpcmV0dXJuO3RyeXtyZXR1cm4gdSh4LGUsaT90OlkmJnhbZV18fHQpfWNhdGNoKGUpe319Zm9yKGEgaW4gSykhKHI9Z1thXSl8fHJbZV0mJiFpfHx1KHIsZSx0KX19LGdldFR5cGVkQXJyYXlDb25zdHJ1Y3Rvcixpc1ZpZXc6ZnVuY3Rpb24gaXNWaWV3KGUpe2lmKCFDKGUpKXJldHVybiExO3ZhciB0PWwoZSk7cmV0dXJuIkRhdGFWaWV3Ij09PXR8fGgoSyx0KXx8aChxLHQpfSxpc1R5cGVkQXJyYXksVHlwZWRBcnJheTp4LFR5cGVkQXJyYXlQcm90b3R5cGU6VX19LDUzNzA6KGUsdCxpKT0+e3ZhciBhPWkoNjE5OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpKXtmb3IodmFyIHI9MCxzPWFyZ3VtZW50cy5sZW5ndGg+Mj9pOmEodCksbj1uZXcgZShzKTtzPnI7KW5bcl09dFtyKytdO3JldHVybiBufX0sOTYxNzooZSx0LGkpPT57dmFyIGE9aSg1Mzk3KSxyPWkoNTYxMCkscz1pKDYxOTgpLGNyZWF0ZU1ldGhvZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxpLG4pe3ZhciBvPWEodCksZz1zKG8pO2lmKDA9PT1nKXJldHVybiFlJiYtMTt2YXIgYyxDPXIobixnKTtpZihlJiZpIT1pKXtmb3IoO2c+QzspaWYoKGM9b1tDKytdKSE9YylyZXR1cm4hMH1lbHNlIGZvcig7Zz5DO0MrKylpZigoZXx8QyBpbiBvKSYmb1tDXT09PWkpcmV0dXJuIGV8fEN8fDA7cmV0dXJuIWUmJi0xfX07ZS5leHBvcnRzPXtpbmNsdWRlczpjcmVhdGVNZXRob2QoITApLGluZGV4T2Y6Y3JlYXRlTWV0aG9kKCExKX19LDQ1Mjc6KGUsdCxpKT0+e3ZhciBhPWkoMzcyNCkscj1pKDQzNzYpLHM9VHlwZUVycm9yLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixvPWEmJiFmdW5jdGlvbigpe2lmKHZvaWQgMCE9PXRoaXMpcmV0dXJuITA7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5sZW5ndGg9MX1jYXRjaChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCk7ZS5leHBvcnRzPW8/ZnVuY3Rpb24oZSx0KXtpZihyKGUpJiYhbihlLCJsZW5ndGgiKS53cml0YWJsZSl0aHJvdyBuZXcgcygiQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCIpO3JldHVybiBlLmxlbmd0aD10fTpmdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aD10fX0sNzYyODooZSx0LGkpPT57dmFyIGE9aSg2MTk4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9YShlKSxyPW5ldyB0KGkpLHM9MDtzPGk7cysrKXJbc109ZVtpLXMtMV07cmV0dXJuIHJ9fSw5OTI4OihlLHQsaSk9Pnt2YXIgYT1pKDYxOTgpLHI9aSgxMjkxKSxzPVJhbmdlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpLG4pe3ZhciBvPWEoZSksZz1yKGkpLGM9ZzwwP28rZzpnO2lmKGM+PW98fGM8MCl0aHJvdyBuZXcgcygiSW5jb3JyZWN0IGluZGV4Iik7Zm9yKHZhciBDPW5ldyB0KG8pLGg9MDtoPG87aCsrKUNbaF09aD09PWM/bjplW2hdO3JldHVybiBDfX0sNjMxOTooZSx0LGkpPT57dmFyIGE9aSg4NTUxKSxyPWkoOTUzOSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpLHMpe3RyeXtyZXR1cm4gcz90KGEoaSlbMF0saVsxXSk6dChpKX1jYXRjaCh0KXtyKGUsInRocm93Iix0KX19fSwyMTk1OihlLHQsaSk9Pnt2YXIgYT1pKDk1MDQpLHI9YSh7fS50b1N0cmluZykscz1hKCIiLnNsaWNlKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHMocihlKSw4LC0xKX19LDY5NTU6KGUsdCxpKT0+e3ZhciBhPWkoMjE0MCkscj1pKDQ5MDEpLHM9aSgyMTk1KSxuPWkoODIyNykoInRvU3RyaW5nVGFnIiksbz1PYmplY3QsZz0iQXJndW1lbnRzIj09PXMoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtlLmV4cG9ydHM9YT9zOmZ1bmN0aW9uKGUpe3ZhciB0LGksYTtyZXR1cm4gdm9pZCAwPT09ZT8iVW5kZWZpbmVkIjpudWxsPT09ZT8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihpPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9byhlKSxuKSk/aTpnP3ModCk6Ik9iamVjdCI9PT0oYT1zKHQpKSYmcih0LmNhbGxlZSk/IkFyZ3VtZW50cyI6YX19LDc3NDA6KGUsdCxpKT0+e3ZhciBhPWkoOTI5Nykscj1pKDUwMzEpLHM9aSg3MzQ3KSxuPWkoNDkxMyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpKXtmb3IodmFyIG89cih0KSxnPW4uZixjPXMuZixDPTA7QzxvLmxlbmd0aDtDKyspe3ZhciBoPW9bQ107YShlLGgpfHxpJiZhKGksaCl8fGcoZSxoLGModCxoKSl9fX0sMjIxMTooZSx0LGkpPT57dmFyIGE9aSg5MDM5KTtlLmV4cG9ydHM9IWEoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRigpe31GLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYpIT09Ri5wcm90b3R5cGV9KSl9LDI1Mjk6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybnt2YWx1ZTplLGRvbmU6dH19fSw2Njk5OihlLHQsaSk9Pnt2YXIgYT1pKDM3MjQpLHI9aSg0OTEzKSxzPWkoNjk4MCk7ZS5leHBvcnRzPWE/ZnVuY3Rpb24oZSx0LGkpe3JldHVybiByLmYoZSx0LHMoMSxpKSl9OmZ1bmN0aW9uKGUsdCxpKXtlW3RdPWk7cmV0dXJuIGV9fSw2OTgwOmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19fSw0NjU5OihlLHQsaSk9Pnt2YXIgYT1pKDM3MjQpLHI9aSg0OTEzKSxzPWkoNjk4MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpKXthP3IuZihlLHQscygwLGkpKTplW3RdPWl9fSwyMTA2OihlLHQsaSk9Pnt2YXIgYT1pKDI4Mykscj1pKDQ5MTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSl7aS5nZXQmJmEoaS5nZXQsdCx7Z2V0dGVyOiEwfSk7aS5zZXQmJmEoaS5zZXQsdCx7c2V0dGVyOiEwfSk7cmV0dXJuIHIuZihlLHQsaSl9fSw2ODQwOihlLHQsaSk9Pnt2YXIgYT1pKDQ5MDEpLHI9aSg0OTEzKSxzPWkoMjgzKSxuPWkoOTQzMyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpLG8pe298fChvPXt9KTt2YXIgZz1vLmVudW1lcmFibGUsYz12b2lkIDAhPT1vLm5hbWU/by5uYW1lOnQ7YShpKSYmcyhpLGMsbyk7aWYoby5nbG9iYWwpZz9lW3RdPWk6bih0LGkpO2Vsc2V7dHJ5e28udW5zYWZlP2VbdF0mJihnPSEwKTpkZWxldGUgZVt0XX1jYXRjaChlKXt9Zz9lW3RdPWk6ci5mKGUsdCx7dmFsdWU6aSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohby5ub25Db25maWd1cmFibGUsd3JpdGFibGU6IW8ubm9uV3JpdGFibGV9KX1yZXR1cm4gZX19LDYyNzk6KGUsdCxpKT0+e3ZhciBhPWkoNjg0MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpKXtmb3IodmFyIHIgaW4gdClhKGUscix0W3JdLGkpO3JldHVybiBlfX0sOTQzMzooZSx0LGkpPT57dmFyIGE9aSg0NTc2KSxyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0cnl7cihhLGUse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9Y2F0Y2goaSl7YVtlXT10fXJldHVybiB0fX0sMzcyNDooZSx0LGkpPT57dmFyIGE9aSg5MDM5KTtlLmV4cG9ydHM9IWEoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KSl9LDQ0ODM6KGUsdCxpKT0+e3ZhciBhLHIscyxuLG89aSg0NTc2KSxnPWkoOTQyOSksYz1pKDE1NDgpLEM9by5zdHJ1Y3R1cmVkQ2xvbmUsaD1vLkFycmF5QnVmZmVyLGw9by5NZXNzYWdlQ2hhbm5lbCxRPSExO2lmKGMpUT1mdW5jdGlvbihlKXtDKGUse3RyYW5zZmVyOltlXX0pfTtlbHNlIGlmKGgpdHJ5e2x8fChhPWcoIndvcmtlcl90aHJlYWRzIikpJiYobD1hLk1lc3NhZ2VDaGFubmVsKTtpZihsKXtyPW5ldyBsO3M9bmV3IGgoMik7bj1mdW5jdGlvbihlKXtyLnBvcnQxLnBvc3RNZXNzYWdlKG51bGwsW2VdKX07aWYoMj09PXMuYnl0ZUxlbmd0aCl7bihzKTswPT09cy5ieXRlTGVuZ3RoJiYoUT1uKX19fWNhdGNoKGUpe31lLmV4cG9ydHM9UX0sNDA1NTooZSx0LGkpPT57dmFyIGE9aSg0NTc2KSxyPWkoMzQpLHM9YS5kb2N1bWVudCxuPXIocykmJnIocy5jcmVhdGVFbGVtZW50KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4/cy5jcmVhdGVFbGVtZW50KGUpOnt9fX0sNjgzNzplPT57dmFyIHQ9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihlPjkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgdCgiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIGV9fSw1MDAyOmU9PntlLmV4cG9ydHM9e0luZGV4U2l6ZUVycm9yOntzOiJJTkRFWF9TSVpFX0VSUiIsYzoxLG06MX0sRE9NU3RyaW5nU2l6ZUVycm9yOntzOiJET01TVFJJTkdfU0laRV9FUlIiLGM6MixtOjB9LEhpZXJhcmNoeVJlcXVlc3RFcnJvcjp7czoiSElFUkFSQ0hZX1JFUVVFU1RfRVJSIixjOjMsbToxfSxXcm9uZ0RvY3VtZW50RXJyb3I6e3M6IldST05HX0RPQ1VNRU5UX0VSUiIsYzo0LG06MX0sSW52YWxpZENoYXJhY3RlckVycm9yOntzOiJJTlZBTElEX0NIQVJBQ1RFUl9FUlIiLGM6NSxtOjF9LE5vRGF0YUFsbG93ZWRFcnJvcjp7czoiTk9fREFUQV9BTExPV0VEX0VSUiIsYzo2LG06MH0sTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3I6e3M6Ik5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiIsYzo3LG06MX0sTm90Rm91bmRFcnJvcjp7czoiTk9UX0ZPVU5EX0VSUiIsYzo4LG06MX0sTm90U3VwcG9ydGVkRXJyb3I6e3M6Ik5PVF9TVVBQT1JURURfRVJSIixjOjksbToxfSxJblVzZUF0dHJpYnV0ZUVycm9yOntzOiJJTlVTRV9BVFRSSUJVVEVfRVJSIixjOjEwLG06MX0sSW52YWxpZFN0YXRlRXJyb3I6e3M6IklOVkFMSURfU1RBVEVfRVJSIixjOjExLG06MX0sU3ludGF4RXJyb3I6e3M6IlNZTlRBWF9FUlIiLGM6MTIsbToxfSxJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3I6e3M6IklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiIsYzoxMyxtOjF9LE5hbWVzcGFjZUVycm9yOntzOiJOQU1FU1BBQ0VfRVJSIixjOjE0LG06MX0sSW52YWxpZEFjY2Vzc0Vycm9yOntzOiJJTlZBTElEX0FDQ0VTU19FUlIiLGM6MTUsbToxfSxWYWxpZGF0aW9uRXJyb3I6e3M6IlZBTElEQVRJT05fRVJSIixjOjE2LG06MH0sVHlwZU1pc21hdGNoRXJyb3I6e3M6IlRZUEVfTUlTTUFUQ0hfRVJSIixjOjE3LG06MX0sU2VjdXJpdHlFcnJvcjp7czoiU0VDVVJJVFlfRVJSIixjOjE4LG06MX0sTmV0d29ya0Vycm9yOntzOiJORVRXT1JLX0VSUiIsYzoxOSxtOjF9LEFib3J0RXJyb3I6e3M6IkFCT1JUX0VSUiIsYzoyMCxtOjF9LFVSTE1pc21hdGNoRXJyb3I6e3M6IlVSTF9NSVNNQVRDSF9FUlIiLGM6MjEsbToxfSxRdW90YUV4Y2VlZGVkRXJyb3I6e3M6IlFVT1RBX0VYQ0VFREVEX0VSUiIsYzoyMixtOjF9LFRpbWVvdXRFcnJvcjp7czoiVElNRU9VVF9FUlIiLGM6MjMsbToxfSxJbnZhbGlkTm9kZVR5cGVFcnJvcjp7czoiSU5WQUxJRF9OT0RFX1RZUEVfRVJSIixjOjI0LG06MX0sRGF0YUNsb25lRXJyb3I6e3M6IkRBVEFfQ0xPTkVfRVJSIixjOjI1LG06MX19fSw4NzI3OmU9PntlLmV4cG9ydHM9WyJjb25zdHJ1Y3RvciIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1N0cmluZyIsInZhbHVlT2YiXX0sNjE5MzooZSx0LGkpPT57dmFyIGE9aSg0MjE1KTtlLmV4cG9ydHM9Ik5PREUiPT09YX0sMjgzOTooZSx0LGkpPT57dmFyIGE9aSg0NTc2KS5uYXZpZ2F0b3Iscj1hJiZhLnVzZXJBZ2VudDtlLmV4cG9ydHM9cj9TdHJpbmcocik6IiJ9LDk1MTk6KGUsdCxpKT0+e3ZhciBhLHIscz1pKDQ1NzYpLG49aSgyODM5KSxvPXMucHJvY2VzcyxnPXMuRGVubyxjPW8mJm8udmVyc2lvbnN8fGcmJmcudmVyc2lvbixDPWMmJmMudjg7QyYmKHI9KGE9Qy5zcGxpdCgiLiIpKVswXT4wJiZhWzBdPDQ/MTorKGFbMF0rYVsxXSkpOyFyJiZuJiYoIShhPW4ubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxhWzFdPj03NCkmJihhPW4ubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihyPSthWzFdKTtlLmV4cG9ydHM9cn0sNDIxNTooZSx0LGkpPT57dmFyIGE9aSg0NTc2KSxyPWkoMjgzOSkscz1pKDIxOTUpLHVzZXJBZ2VudFN0YXJ0c1dpdGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuc2xpY2UoMCxlLmxlbmd0aCk9PT1lfTtlLmV4cG9ydHM9dXNlckFnZW50U3RhcnRzV2l0aCgiQnVuLyIpPyJCVU4iOnVzZXJBZ2VudFN0YXJ0c1dpdGgoIkNsb3VkZmxhcmUtV29ya2VycyIpPyJDTE9VREZMQVJFIjp1c2VyQWdlbnRTdGFydHNXaXRoKCJEZW5vLyIpPyJERU5PIjp1c2VyQWdlbnRTdGFydHNXaXRoKCJOb2RlLmpzLyIpPyJOT0RFIjphLkJ1biYmInN0cmluZyI9PXR5cGVvZiBCdW4udmVyc2lvbj8iQlVOIjphLkRlbm8mJiJvYmplY3QiPT10eXBlb2YgRGVuby52ZXJzaW9uPyJERU5PIjoicHJvY2VzcyI9PT1zKGEucHJvY2Vzcyk/Ik5PREUiOmEud2luZG93JiZhLmRvY3VtZW50PyJCUk9XU0VSIjoiUkVTVCJ9LDg1NzQ6KGUsdCxpKT0+e3ZhciBhPWkoOTUwNCkscj1FcnJvcixzPWEoIiIucmVwbGFjZSksbj1TdHJpbmcobmV3IHIoInp4Y2FzZCIpLnN0YWNrKSxvPS9cblxzKmF0IFteOl0qOlteXG5dKi8sZz1vLnRlc3Qobik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoZyYmInN0cmluZyI9PXR5cGVvZiBlJiYhci5wcmVwYXJlU3RhY2tUcmFjZSlmb3IoO3QtLTspZT1zKGUsbywiIik7cmV0dXJuIGV9fSw2NTE4OihlLHQsaSk9Pnt2YXIgYT1pKDQ1NzYpLHI9aSg3MzQ3KS5mLHM9aSg2Njk5KSxuPWkoNjg0MCksbz1pKDk0MzMpLGc9aSg3NzQwKSxjPWkoMjc5Nik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGksQyxoLGwsUSxFPWUudGFyZ2V0LHU9ZS5nbG9iYWwsZD1lLnN0YXQ7aWYoaT11P2E6ZD9hW0VdfHxvKEUse30pOmFbRV0mJmFbRV0ucHJvdG90eXBlKWZvcihDIGluIHQpe2w9dFtDXTtoPWUuZG9udENhbGxHZXRTZXQ/KFE9cihpLEMpKSYmUS52YWx1ZTppW0NdO2lmKCFjKHU/QzpFKyhkPyIuIjoiIyIpK0MsZS5mb3JjZWQpJiZ2b2lkIDAhPT1oKXtpZih0eXBlb2YgbD09dHlwZW9mIGgpY29udGludWU7ZyhsLGgpfShlLnNoYW18fGgmJmguc2hhbSkmJnMobCwic2hhbSIsITApO24oaSxDLGwsZSl9fX0sOTAzOTplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSw2MDgwOihlLHQsaSk9Pnt2YXIgYT1pKDc0NzYpLHI9aSg5MzA2KSxzPWkoNjE2KSxuPWEoYS5iaW5kKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyKGUpO3JldHVybiB2b2lkIDA9PT10P2U6cz9uKGUsdCk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fX0sNjE2OihlLHQsaSk9Pnt2YXIgYT1pKDkwMzkpO2UuZXhwb3J0cz0hYSgoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBlfHxlLmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pKX0sOTU2NTooZSx0LGkpPT57dmFyIGE9aSg2MTYpLHI9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7ZS5leHBvcnRzPWE/ci5iaW5kKHIpOmZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkocixhcmd1bWVudHMpfX0sMzUwOihlLHQsaSk9Pnt2YXIgYT1pKDM3MjQpLHI9aSg5Mjk3KSxzPUZ1bmN0aW9uLnByb3RvdHlwZSxuPWEmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1yKHMsIm5hbWUiKSxnPW8mJiJzb21ldGhpbmciPT09ZnVuY3Rpb24gc29tZXRoaW5nKCl7fS5uYW1lLGM9byYmKCFhfHxhJiZuKHMsIm5hbWUiKS5jb25maWd1cmFibGUpO2UuZXhwb3J0cz17RVhJU1RTOm8sUFJPUEVSOmcsQ09ORklHVVJBQkxFOmN9fSw2NzA2OihlLHQsaSk9Pnt2YXIgYT1pKDk1MDQpLHI9aSg5MzA2KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGkpe3RyeXtyZXR1cm4gYShyKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KVtpXSkpfWNhdGNoKGUpe319fSw3NDc2OihlLHQsaSk9Pnt2YXIgYT1pKDIxOTUpLHI9aSg5NTA0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIkZ1bmN0aW9uIj09PWEoZSkpcmV0dXJuIHIoZSl9fSw5NTA0OihlLHQsaSk9Pnt2YXIgYT1pKDYxNikscj1GdW5jdGlvbi5wcm90b3R5cGUscz1yLmNhbGwsbj1hJiZyLmJpbmQuYmluZChzLHMpO2UuZXhwb3J0cz1hP246ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHMuYXBwbHkoZSxhcmd1bWVudHMpfX19LDk0Mjk6KGUsdCxpKT0+e3ZhciBhPWkoNDU3Nikscj1pKDYxOTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihyKXt0cnl7cmV0dXJuIGEucHJvY2Vzcy5nZXRCdWlsdGluTW9kdWxlKGUpfWNhdGNoKGUpe310cnl7cmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gcmVxdWlyZSgiJytlKyciKScpKCl9Y2F0Y2goZSl7fX19fSw3NzUxOihlLHQsaSk9Pnt2YXIgYT1pKDQ1NzYpLHI9aSg0OTAxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyPyhpPWFbZV0scihpKT9pOnZvaWQgMCk6YVtlXSYmYVtlXVt0XTt2YXIgaX19LDE3Njc6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm57aXRlcmF0b3I6ZSxuZXh0OmUubmV4dCxkb25lOiExfX19LDg1MTooZSx0LGkpPT57dmFyIGE9aSg2OTU1KSxyPWkoNTk2Nikscz1pKDQxMTcpLG49aSg2MjY5KSxvPWkoODIyNykoIml0ZXJhdG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFzKGUpKXJldHVybiByKGUsbyl8fHIoZSwiQEBpdGVyYXRvciIpfHxuW2EoZSldfX0sODE6KGUsdCxpKT0+e3ZhciBhPWkoOTU2NSkscj1pKDkzMDYpLHM9aSg4NTUxKSxuPWkoNjgyMyksbz1pKDg1MSksZz1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aDwyP28oZSk6dDtpZihyKGkpKXJldHVybiBzKGEoaSxlKSk7dGhyb3cgbmV3IGcobihlKSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sNTk2NjooZSx0LGkpPT57dmFyIGE9aSg5MzA2KSxyPWkoNDExNyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGk9ZVt0XTtyZXR1cm4gcihpKT92b2lkIDA6YShpKX19LDM3ODk6KGUsdCxpKT0+e3ZhciBhPWkoOTMwNikscj1pKDg1NTEpLHM9aSg5NTY1KSxuPWkoMTI5MSksbz1pKDE3NjcpLGc9IkludmFsaWQgc2l6ZSIsYz1SYW5nZUVycm9yLEM9VHlwZUVycm9yLGg9TWF0aC5tYXgsU2V0UmVjb3JkPWZ1bmN0aW9uKGUsdCl7dGhpcy5zZXQ9ZTt0aGlzLnNpemU9aCh0LDApO3RoaXMuaGFzPWEoZS5oYXMpO3RoaXMua2V5cz1hKGUua2V5cyl9O1NldFJlY29yZC5wcm90b3R5cGU9e2dldEl0ZXJhdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIG8ocihzKHRoaXMua2V5cyx0aGlzLnNldCkpKX0saW5jbHVkZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHModGhpcy5oYXMsdGhpcy5zZXQsZSl9fTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cihlKTt2YXIgdD0rZS5zaXplO2lmKHQhPXQpdGhyb3cgbmV3IEMoZyk7dmFyIGk9bih0KTtpZihpPDApdGhyb3cgbmV3IGMoZyk7cmV0dXJuIG5ldyBTZXRSZWNvcmQoZSxpKX19LDQ1NzY6ZnVuY3Rpb24oZSl7dmFyIGNoZWNrPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLk1hdGg9PT1NYXRoJiZlfTtlLmV4cG9ydHM9Y2hlY2soIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8Y2hlY2soIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fGNoZWNrKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGNoZWNrKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwpfHxjaGVjaygib2JqZWN0Ij09dHlwZW9mIHRoaXMmJnRoaXMpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSw5Mjk3OihlLHQsaSk9Pnt2YXIgYT1pKDk1MDQpLHI9aSg4OTgxKSxzPWEoe30uaGFzT3duUHJvcGVydHkpO2UuZXhwb3J0cz1PYmplY3QuaGFzT3dufHxmdW5jdGlvbiBoYXNPd24oZSx0KXtyZXR1cm4gcyhyKGUpLHQpfX0sNDIxOmU9PntlLmV4cG9ydHM9e319LDM5NzooZSx0LGkpPT57dmFyIGE9aSg3NzUxKTtlLmV4cG9ydHM9YSgiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sNTkxNzooZSx0LGkpPT57dmFyIGE9aSgzNzI0KSxyPWkoOTAzOSkscz1pKDQwNTUpO2UuZXhwb3J0cz0hYSYmIXIoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkocygiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSw3MDU1OihlLHQsaSk9Pnt2YXIgYT1pKDk1MDQpLHI9aSg5MDM5KSxzPWkoMjE5NSksbj1PYmplY3Qsbz1hKCIiLnNwbGl0KTtlLmV4cG9ydHM9cigoZnVuY3Rpb24oKXtyZXR1cm4hbigieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKGUpe3JldHVybiJTdHJpbmciPT09cyhlKT9vKGUsIiIpOm4oZSl9Om59LDMxNjc6KGUsdCxpKT0+e3ZhciBhPWkoNDkwMSkscj1pKDM0KSxzPWkoMjk2Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpKXt2YXIgbixvO3MmJmEobj10LmNvbnN0cnVjdG9yKSYmbiE9PWkmJnIobz1uLnByb3RvdHlwZSkmJm8hPT1pLnByb3RvdHlwZSYmcyhlLG8pO3JldHVybiBlfX0sMzcwNjooZSx0LGkpPT57dmFyIGE9aSg5NTA0KSxyPWkoNDkwMSkscz1pKDc2MjkpLG49YShGdW5jdGlvbi50b1N0cmluZyk7cihzLmluc3BlY3RTb3VyY2UpfHwocy5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBuKGUpfSk7ZS5leHBvcnRzPXMuaW5zcGVjdFNvdXJjZX0sMTE4MTooZSx0LGkpPT57dmFyIGEscixzLG49aSg4NjIyKSxvPWkoNDU3NiksZz1pKDM0KSxjPWkoNjY5OSksQz1pKDkyOTcpLGg9aSg3NjI5KSxsPWkoNjExOSksUT1pKDQyMSksRT0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLHU9by5UeXBlRXJyb3IsZD1vLldlYWtNYXA7aWYobnx8aC5zdGF0ZSl7dmFyIGY9aC5zdGF0ZXx8KGguc3RhdGU9bmV3IGQpO2YuZ2V0PWYuZ2V0O2YuaGFzPWYuaGFzO2Yuc2V0PWYuc2V0O2E9ZnVuY3Rpb24oZSx0KXtpZihmLmhhcyhlKSl0aHJvdyBuZXcgdShFKTt0LmZhY2FkZT1lO2Yuc2V0KGUsdCk7cmV0dXJuIHR9O3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGYuZ2V0KGUpfHx7fX07cz1mdW5jdGlvbihlKXtyZXR1cm4gZi5oYXMoZSl9fWVsc2V7dmFyIHA9bCgic3RhdGUiKTtRW3BdPSEwO2E9ZnVuY3Rpb24oZSx0KXtpZihDKGUscCkpdGhyb3cgbmV3IHUoRSk7dC5mYWNhZGU9ZTtjKGUscCx0KTtyZXR1cm4gdH07cj1mdW5jdGlvbihlKXtyZXR1cm4gQyhlLHApP2VbcF06e319O3M9ZnVuY3Rpb24oZSl7cmV0dXJuIEMoZSxwKX19ZS5leHBvcnRzPXtzZXQ6YSxnZXQ6cixoYXM6cyxlbmZvcmNlOmZ1bmN0aW9uKGUpe3JldHVybiBzKGUpP3IoZSk6YShlLHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgaTtpZighZyh0KXx8KGk9cih0KSkudHlwZSE9PWUpdGhyb3cgbmV3IHUoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIitlKyIgcmVxdWlyZWQiKTtyZXR1cm4gaX19fX0sNDIwOTooZSx0LGkpPT57dmFyIGE9aSg4MjI3KSxyPWkoNjI2OSkscz1hKCJpdGVyYXRvciIpLG49QXJyYXkucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmKHIuQXJyYXk9PT1lfHxuW3NdPT09ZSl9fSw0Mzc2OihlLHQsaSk9Pnt2YXIgYT1pKDIxOTUpO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbiBpc0FycmF5KGUpe3JldHVybiJBcnJheSI9PT1hKGUpfX0sMTEwODooZSx0LGkpPT57dmFyIGE9aSg2OTU1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9YShlKTtyZXR1cm4iQmlnSW50NjRBcnJheSI9PT10fHwiQmlnVWludDY0QXJyYXkiPT09dH19LDQ5MDE6ZT0+e3ZhciB0PSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmFsbDtlLmV4cG9ydHM9dm9pZCAwPT09dCYmdm9pZCAwIT09dD9mdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZXx8ZT09PXR9OmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfX0sMjc5NjooZSx0LGkpPT57dmFyIGE9aSg5MDM5KSxyPWkoNDkwMSkscz0vI3xcLnByb3RvdHlwZVwuLyxpc0ZvcmNlZD1mdW5jdGlvbihlLHQpe3ZhciBpPW9bbihlKV07cmV0dXJuIGk9PT1jfHxpIT09ZyYmKHIodCk/YSh0KTohIXQpfSxuPWlzRm9yY2VkLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UocywiLiIpLnRvTG93ZXJDYXNlKCl9LG89aXNGb3JjZWQuZGF0YT17fSxnPWlzRm9yY2VkLk5BVElWRT0iTiIsYz1pc0ZvcmNlZC5QT0xZRklMTD0iUCI7ZS5leHBvcnRzPWlzRm9yY2VkfSw0MTE3OmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9fSwzNDooZSx0LGkpPT57dmFyIGE9aSg0OTAxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOmEoZSl9fSwzOTI1OihlLHQsaSk9Pnt2YXIgYT1pKDM0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl8fG51bGw9PT1lfX0sNjM5NTplPT57ZS5leHBvcnRzPSExfSw3NTc6KGUsdCxpKT0+e3ZhciBhPWkoNzc1MSkscj1pKDQ5MDEpLHM9aSgxNjI1KSxuPWkoNzA0MCksbz1PYmplY3Q7ZS5leHBvcnRzPW4/ZnVuY3Rpb24oZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlfTpmdW5jdGlvbihlKXt2YXIgdD1hKCJTeW1ib2wiKTtyZXR1cm4gcih0KSYmcyh0LnByb3RvdHlwZSxvKGUpKX19LDUwNzooZSx0LGkpPT57dmFyIGE9aSg5NTY1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGkpe2Zvcih2YXIgcixzLG49aT9lOmUuaXRlcmF0b3Isbz1lLm5leHQ7IShyPWEobyxuKSkuZG9uZTspaWYodm9pZCAwIT09KHM9dChyLnZhbHVlKSkpcmV0dXJuIHN9fSwyNjUyOihlLHQsaSk9Pnt2YXIgYT1pKDYwODApLHI9aSg5NTY1KSxzPWkoODU1MSksbj1pKDY4MjMpLG89aSg0MjA5KSxnPWkoNjE5OCksYz1pKDE2MjUpLEM9aSg4MSksaD1pKDg1MSksbD1pKDk1MzkpLFE9VHlwZUVycm9yLFJlc3VsdD1mdW5jdGlvbihlLHQpe3RoaXMuc3RvcHBlZD1lO3RoaXMucmVzdWx0PXR9LEU9UmVzdWx0LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGkpe3ZhciB1LGQsZixwLG0seSx3LGI9aSYmaS50aGF0LEQ9ISghaXx8IWkuQVNfRU5UUklFUyksUz0hKCFpfHwhaS5JU19SRUNPUkQpLGs9ISghaXx8IWkuSVNfSVRFUkFUT1IpLFI9ISghaXx8IWkuSU5URVJSVVBURUQpLE49YSh0LGIpLHN0b3A9ZnVuY3Rpb24oZSl7dSYmbCh1LCJub3JtYWwiLGUpO3JldHVybiBuZXcgUmVzdWx0KCEwLGUpfSxjYWxsRm49ZnVuY3Rpb24oZSl7aWYoRCl7cyhlKTtyZXR1cm4gUj9OKGVbMF0sZVsxXSxzdG9wKTpOKGVbMF0sZVsxXSl9cmV0dXJuIFI/TihlLHN0b3ApOk4oZSl9O2lmKFMpdT1lLml0ZXJhdG9yO2Vsc2UgaWYoayl1PWU7ZWxzZXtpZighKGQ9aChlKSkpdGhyb3cgbmV3IFEobihlKSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKG8oZCkpe2ZvcihmPTAscD1nKGUpO3A+ZjtmKyspaWYoKG09Y2FsbEZuKGVbZl0pKSYmYyhFLG0pKXJldHVybiBtO3JldHVybiBuZXcgUmVzdWx0KCExKX11PUMoZSxkKX15PVM/ZS5uZXh0OnUubmV4dDtmb3IoOyEodz1yKHksdSkpLmRvbmU7KXt0cnl7bT1jYWxsRm4ody52YWx1ZSl9Y2F0Y2goZSl7bCh1LCJ0aHJvdyIsZSl9aWYoIm9iamVjdCI9PXR5cGVvZiBtJiZtJiZjKEUsbSkpcmV0dXJuIG19cmV0dXJuIG5ldyBSZXN1bHQoITEpfX0sOTUzOTooZSx0LGkpPT57dmFyIGE9aSg5NTY1KSxyPWkoODU1MSkscz1pKDU5NjYpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSl7dmFyIG4sbztyKGUpO3RyeXtpZighKG49cyhlLCJyZXR1cm4iKSkpe2lmKCJ0aHJvdyI9PT10KXRocm93IGk7cmV0dXJuIGl9bj1hKG4sZSl9Y2F0Y2goZSl7bz0hMDtuPWV9aWYoInRocm93Ij09PXQpdGhyb3cgaTtpZihvKXRocm93IG47cihuKTtyZXR1cm4gaX19LDk0NjI6KGUsdCxpKT0+e3ZhciBhPWkoOTU2NSkscj1pKDIzNjApLHM9aSg2Njk5KSxuPWkoNjI3OSksbz1pKDgyMjcpLGc9aSgxMTgxKSxjPWkoNTk2NiksQz1pKDc2NTcpLkl0ZXJhdG9yUHJvdG90eXBlLGg9aSgyNTI5KSxsPWkoOTUzOSksUT1vKCJ0b1N0cmluZ1RhZyIpLEU9Ikl0ZXJhdG9ySGVscGVyIix1PSJXcmFwRm9yVmFsaWRJdGVyYXRvciIsZD1nLnNldCxjcmVhdGVJdGVyYXRvclByb3h5UHJvdG90eXBlPWZ1bmN0aW9uKGUpe3ZhciB0PWcuZ2V0dGVyRm9yKGU/dTpFKTtyZXR1cm4gbihyKEMpLHtuZXh0OmZ1bmN0aW9uIG5leHQoKXt2YXIgaT10KHRoaXMpO2lmKGUpcmV0dXJuIGkubmV4dEhhbmRsZXIoKTt0cnl7dmFyIGE9aS5kb25lP3ZvaWQgMDppLm5leHRIYW5kbGVyKCk7cmV0dXJuIGgoYSxpLmRvbmUpfWNhdGNoKGUpe2kuZG9uZT0hMDt0aHJvdyBlfX0scmV0dXJuOmZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxyPWkuaXRlcmF0b3I7aS5kb25lPSEwO2lmKGUpe3ZhciBzPWMociwicmV0dXJuIik7cmV0dXJuIHM/YShzLHIpOmgodm9pZCAwLCEwKX1pZihpLmlubmVyKXRyeXtsKGkuaW5uZXIuaXRlcmF0b3IsIm5vcm1hbCIpfWNhdGNoKGUpe3JldHVybiBsKHIsInRocm93IixlKX1sKHIsIm5vcm1hbCIpO3JldHVybiBoKHZvaWQgMCwhMCl9fSl9LGY9Y3JlYXRlSXRlcmF0b3JQcm94eVByb3RvdHlwZSghMCkscD1jcmVhdGVJdGVyYXRvclByb3h5UHJvdG90eXBlKCExKTtzKHAsUSwiSXRlcmF0b3IgSGVscGVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGk9ZnVuY3Rpb24gSXRlcmF0b3IoaSxhKXtpZihhKXthLml0ZXJhdG9yPWkuaXRlcmF0b3I7YS5uZXh0PWkubmV4dH1lbHNlIGE9aTthLnR5cGU9dD91OkU7YS5uZXh0SGFuZGxlcj1lO2EuY291bnRlcj0wO2EuZG9uZT0hMTtkKHRoaXMsYSl9O2kucHJvdG90eXBlPXQ/ZjpwO3JldHVybiBpfX0sNzEzOihlLHQsaSk9Pnt2YXIgYT1pKDk1NjUpLHI9aSg5MzA2KSxzPWkoODU1MSksbj1pKDE3NjcpLG89aSg5NDYyKSxnPWkoNjMxOSksYz1vKChmdW5jdGlvbigpe3ZhciBlPXRoaXMuaXRlcmF0b3IsdD1zKGEodGhpcy5uZXh0LGUpKTtpZighKHRoaXMuZG9uZT0hIXQuZG9uZSkpcmV0dXJuIGcoZSx0aGlzLm1hcHBlcixbdC52YWx1ZSx0aGlzLmNvdW50ZXIrK10sITApfSkpO2UuZXhwb3J0cz1mdW5jdGlvbiBtYXAoZSl7cyh0aGlzKTtyKGUpO3JldHVybiBuZXcgYyhuKHRoaXMpLHttYXBwZXI6ZX0pfX0sNzY1NzooZSx0LGkpPT57dmFyIGEscixzLG49aSg5MDM5KSxvPWkoNDkwMSksZz1pKDM0KSxjPWkoMjM2MCksQz1pKDI3ODcpLGg9aSg2ODQwKSxsPWkoODIyNyksUT1pKDYzOTUpLEU9bCgiaXRlcmF0b3IiKSx1PSExO1tdLmtleXMmJigibmV4dCJpbihzPVtdLmtleXMoKSk/KHI9QyhDKHMpKSkhPT1PYmplY3QucHJvdG90eXBlJiYoYT1yKTp1PSEwKTshZyhhKXx8bigoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gYVtFXS5jYWxsKGUpIT09ZX0pKT9hPXt9OlEmJihhPWMoYSkpO28oYVtFXSl8fGgoYSxFLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO2UuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6YSxCVUdHWV9TQUZBUklfSVRFUkFUT1JTOnV9fSw2MjY5OmU9PntlLmV4cG9ydHM9e319LDYxOTg6KGUsdCxpKT0+e3ZhciBhPWkoODAxNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBhKGUubGVuZ3RoKX19LDI4MzooZSx0LGkpPT57dmFyIGE9aSg5NTA0KSxyPWkoOTAzOSkscz1pKDQ5MDEpLG49aSg5Mjk3KSxvPWkoMzcyNCksZz1pKDM1MCkuQ09ORklHVVJBQkxFLGM9aSgzNzA2KSxDPWkoMTE4MSksaD1DLmVuZm9yY2UsbD1DLmdldCxRPVN0cmluZyxFPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx1PWEoIiIuc2xpY2UpLGQ9YSgiIi5yZXBsYWNlKSxmPWEoW10uam9pbikscD1vJiYhcigoZnVuY3Rpb24oKXtyZXR1cm4gOCE9PUUoKGZ1bmN0aW9uKCl7fSksImxlbmd0aCIse3ZhbHVlOjh9KS5sZW5ndGh9KSksbT1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIikseT1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGkpeyJTeW1ib2woIj09PXUoUSh0KSwwLDcpJiYodD0iWyIrZChRKHQpLC9eU3ltYm9sXCgoW14pXSopXCkuKiQvLCIkMSIpKyJdIik7aSYmaS5nZXR0ZXImJih0PSJnZXQgIit0KTtpJiZpLnNldHRlciYmKHQ9InNldCAiK3QpOyghbihlLCJuYW1lIil8fGcmJmUubmFtZSE9PXQpJiYobz9FKGUsIm5hbWUiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pOmUubmFtZT10KTtwJiZpJiZuKGksImFyaXR5IikmJmUubGVuZ3RoIT09aS5hcml0eSYmRShlLCJsZW5ndGgiLHt2YWx1ZTppLmFyaXR5fSk7dHJ5e2kmJm4oaSwiY29uc3RydWN0b3IiKSYmaS5jb25zdHJ1Y3Rvcj9vJiZFKGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSk6ZS5wcm90b3R5cGUmJihlLnByb3RvdHlwZT12b2lkIDApfWNhdGNoKGUpe312YXIgYT1oKGUpO24oYSwic291cmNlIil8fChhLnNvdXJjZT1mKG0sInN0cmluZyI9PXR5cGVvZiB0P3Q6IiIpKTtyZXR1cm4gZX07RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPXkoKGZ1bmN0aW9uIHRvU3RyaW5nKCl7cmV0dXJuIHModGhpcykmJmwodGhpcykuc291cmNlfHxjKHRoaXMpfSksInRvU3RyaW5nIil9LDc0MTplPT57dmFyIHQ9TWF0aC5jZWlsLGk9TWF0aC5mbG9vcjtlLmV4cG9ydHM9TWF0aC50cnVuY3x8ZnVuY3Rpb24gdHJ1bmMoZSl7dmFyIGE9K2U7cmV0dXJuKGE+MD9pOnQpKGEpfX0sNjA0MzooZSx0LGkpPT57dmFyIGE9aSg5MzA2KSxyPVR5cGVFcnJvcixQcm9taXNlQ2FwYWJpbGl0eT1mdW5jdGlvbihlKXt2YXIgdCxpO3RoaXMucHJvbWlzZT1uZXcgZSgoZnVuY3Rpb24oZSxhKXtpZih2b2lkIDAhPT10fHx2b2lkIDAhPT1pKXRocm93IG5ldyByKCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO3Q9ZTtpPWF9KSk7dGhpcy5yZXNvbHZlPWEodCk7dGhpcy5yZWplY3Q9YShpKX07ZS5leHBvcnRzLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShlKX19LDI2MDM6KGUsdCxpKT0+e3ZhciBhPWkoNjU1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09ZT9hcmd1bWVudHMubGVuZ3RoPDI/IiI6dDphKGUpfX0sMjM2MDooZSx0LGkpPT57dmFyIGEscj1pKDg1NTEpLHM9aSg2ODAxKSxuPWkoODcyNyksbz1pKDQyMSksZz1pKDM5NyksYz1pKDQwNTUpLEM9aSg2MTE5KSxoPSJwcm90b3R5cGUiLGw9InNjcmlwdCIsUT1DKCJJRV9QUk9UTyIpLEVtcHR5Q29uc3RydWN0b3I9ZnVuY3Rpb24oKXt9LHNjcmlwdFRhZz1mdW5jdGlvbihlKXtyZXR1cm4iPCIrbCsiPiIrZSsiPC8iK2wrIj4ifSxOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYPWZ1bmN0aW9uKGUpe2Uud3JpdGUoc2NyaXB0VGFnKCIiKSk7ZS5jbG9zZSgpO3ZhciB0PWUucGFyZW50V2luZG93Lk9iamVjdDtlPW51bGw7cmV0dXJuIHR9LE51bGxQcm90b09iamVjdD1mdW5jdGlvbigpe3RyeXthPW5ldyBBY3RpdmVYT2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoKGUpe31OdWxsUHJvdG9PYmplY3Q9InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5kb21haW4mJmE/TnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhKTpmdW5jdGlvbigpe3ZhciBlLHQ9YygiaWZyYW1lIiksaT0iamF2YSIrbCsiOiI7dC5zdHlsZS5kaXNwbGF5PSJub25lIjtnLmFwcGVuZENoaWxkKHQpO3Quc3JjPVN0cmluZyhpKTsoZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKTtlLndyaXRlKHNjcmlwdFRhZygiZG9jdW1lbnQuRj1PYmplY3QiKSk7ZS5jbG9zZSgpO3JldHVybiBlLkZ9KCk6TnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhKTtmb3IodmFyIGU9bi5sZW5ndGg7ZS0tOylkZWxldGUgTnVsbFByb3RvT2JqZWN0W2hdW25bZV1dO3JldHVybiBOdWxsUHJvdG9PYmplY3QoKX07b1tRXT0hMDtlLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24gY3JlYXRlKGUsdCl7dmFyIGk7aWYobnVsbCE9PWUpe0VtcHR5Q29uc3RydWN0b3JbaF09cihlKTtpPW5ldyBFbXB0eUNvbnN0cnVjdG9yO0VtcHR5Q29uc3RydWN0b3JbaF09bnVsbDtpW1FdPWV9ZWxzZSBpPU51bGxQcm90b09iamVjdCgpO3JldHVybiB2b2lkIDA9PT10P2k6cy5mKGksdCl9fSw2ODAxOihlLHQsaSk9Pnt2YXIgYT1pKDM3MjQpLHI9aSg4Njg2KSxzPWkoNDkxMyksbj1pKDg1NTEpLG89aSg1Mzk3KSxnPWkoMTA3Mik7dC5mPWEmJiFyP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoZSx0KXtuKGUpO2Zvcih2YXIgaSxhPW8odCkscj1nKHQpLGM9ci5sZW5ndGgsQz0wO2M+Qzspcy5mKGUsaT1yW0MrK10sYVtpXSk7cmV0dXJuIGV9fSw0OTEzOihlLHQsaSk9Pnt2YXIgYT1pKDM3MjQpLHI9aSg1OTE3KSxzPWkoODY4Niksbj1pKDg1NTEpLG89aSg2OTY5KSxnPVR5cGVFcnJvcixjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxDPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaD0iZW51bWVyYWJsZSIsbD0iY29uZmlndXJhYmxlIixRPSJ3cml0YWJsZSI7dC5mPWE/cz9mdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShlLHQsaSl7bihlKTt0PW8odCk7bihpKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSYmInByb3RvdHlwZSI9PT10JiYidmFsdWUiaW4gaSYmUSBpbiBpJiYhaVtRXSl7dmFyIGE9QyhlLHQpO2lmKGEmJmFbUV0pe2VbdF09aS52YWx1ZTtpPXtjb25maWd1cmFibGU6bCBpbiBpP2lbbF06YVtsXSxlbnVtZXJhYmxlOmggaW4gaT9pW2hdOmFbaF0sd3JpdGFibGU6ITF9fX1yZXR1cm4gYyhlLHQsaSl9OmM6ZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoZSx0LGkpe24oZSk7dD1vKHQpO24oaSk7aWYocil0cnl7cmV0dXJuIGMoZSx0LGkpfWNhdGNoKGUpe31pZigiZ2V0ImluIGl8fCJzZXQiaW4gaSl0aHJvdyBuZXcgZygiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTsidmFsdWUiaW4gaSYmKGVbdF09aS52YWx1ZSk7cmV0dXJuIGV9fSw3MzQ3OihlLHQsaSk9Pnt2YXIgYT1pKDM3MjQpLHI9aSg5NTY1KSxzPWkoODc3Myksbj1pKDY5ODApLG89aSg1Mzk3KSxnPWkoNjk2OSksYz1pKDkyOTcpLEM9aSg1OTE3KSxoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPWE/aDpmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KXtlPW8oZSk7dD1nKHQpO2lmKEMpdHJ5e3JldHVybiBoKGUsdCl9Y2F0Y2goZSl7fWlmKGMoZSx0KSlyZXR1cm4gbighcihzLmYsZSx0KSxlW3RdKX19LDg0ODA6KGUsdCxpKT0+e3ZhciBhPWkoMTgyOCkscj1pKDg3MjcpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGUpe3JldHVybiBhKGUscil9fSwzNzE3OihlLHQpPT57dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDI3ODc6KGUsdCxpKT0+e3ZhciBhPWkoOTI5Nykscj1pKDQ5MDEpLHM9aSg4OTgxKSxuPWkoNjExOSksbz1pKDIyMTEpLGc9bigiSUVfUFJPVE8iKSxjPU9iamVjdCxDPWMucHJvdG90eXBlO2UuZXhwb3J0cz1vP2MuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9cyhlKTtpZihhKHQsZykpcmV0dXJuIHRbZ107dmFyIGk9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gcihpKSYmdCBpbnN0YW5jZW9mIGk/aS5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIGM/QzpudWxsfX0sMTYyNTooZSx0LGkpPT57dmFyIGE9aSg5NTA0KTtlLmV4cG9ydHM9YSh7fS5pc1Byb3RvdHlwZU9mKX0sMTgyODooZSx0LGkpPT57dmFyIGE9aSg5NTA0KSxyPWkoOTI5Nykscz1pKDUzOTcpLG49aSg5NjE3KS5pbmRleE9mLG89aSg0MjEpLGc9YShbXS5wdXNoKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgaSxhPXMoZSksYz0wLEM9W107Zm9yKGkgaW4gYSkhcihvLGkpJiZyKGEsaSkmJmcoQyxpKTtmb3IoO3QubGVuZ3RoPmM7KXIoYSxpPXRbYysrXSkmJih+bihDLGkpfHxnKEMsaSkpO3JldHVybiBDfX0sMTA3MjooZSx0LGkpPT57dmFyIGE9aSgxODI4KSxyPWkoODcyNyk7ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbiBrZXlzKGUpe3JldHVybiBhKGUscil9fSw4NzczOihlLHQpPT57dmFyIGk9e30ucHJvcGVydHlJc0VudW1lcmFibGUsYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHI9YSYmIWkuY2FsbCh7MToyfSwxKTt0LmY9cj9mdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShlKXt2YXIgdD1hKHRoaXMsZSk7cmV0dXJuISF0JiZ0LmVudW1lcmFibGV9Oml9LDI5Njc6KGUsdCxpKT0+e3ZhciBhPWkoNjcwNikscj1pKDM0KSxzPWkoNzc1MCksbj1pKDM1MDYpO2UuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgZSx0PSExLGk9e307dHJ5eyhlPWEoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIiwic2V0IikpKGksW10pO3Q9aSBpbnN0YW5jZW9mIEFycmF5fWNhdGNoKGUpe31yZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoaSxhKXtzKGkpO24oYSk7aWYoIXIoaSkpcmV0dXJuIGk7dD9lKGksYSk6aS5fX3Byb3RvX189YTtyZXR1cm4gaX19KCk6dm9pZCAwKX0sNDI3MDooZSx0LGkpPT57dmFyIGE9aSg5NTY1KSxyPWkoNDkwMSkscz1pKDM0KSxuPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgaSxvO2lmKCJzdHJpbmciPT09dCYmcihpPWUudG9TdHJpbmcpJiYhcyhvPWEoaSxlKSkpcmV0dXJuIG87aWYocihpPWUudmFsdWVPZikmJiFzKG89YShpLGUpKSlyZXR1cm4gbztpZigic3RyaW5nIiE9PXQmJnIoaT1lLnRvU3RyaW5nKSYmIXMobz1hKGksZSkpKXJldHVybiBvO3Rocm93IG5ldyBuKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LDUwMzE6KGUsdCxpKT0+e3ZhciBhPWkoNzc1MSkscj1pKDk1MDQpLHM9aSg4NDgwKSxuPWkoMzcxNyksbz1pKDg1NTEpLGc9cihbXS5jb25jYXQpO2UuZXhwb3J0cz1hKCJSZWZsZWN0Iiwib3duS2V5cyIpfHxmdW5jdGlvbiBvd25LZXlzKGUpe3ZhciB0PXMuZihvKGUpKSxpPW4uZjtyZXR1cm4gaT9nKHQsaShlKSk6dH19LDc5Nzk6KGUsdCxpKT0+e3ZhciBhPWkoODU1MSk7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSx0PSIiO2UuaGFzSW5kaWNlcyYmKHQrPSJkIik7ZS5nbG9iYWwmJih0Kz0iZyIpO2UuaWdub3JlQ2FzZSYmKHQrPSJpIik7ZS5tdWx0aWxpbmUmJih0Kz0ibSIpO2UuZG90QWxsJiYodCs9InMiKTtlLnVuaWNvZGUmJih0Kz0idSIpO2UudW5pY29kZVNldHMmJih0Kz0idiIpO2Uuc3RpY2t5JiYodCs9InkiKTtyZXR1cm4gdH19LDc3NTA6KGUsdCxpKT0+e3ZhciBhPWkoNDExNykscj1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKGEoZSkpdGhyb3cgbmV3IHIoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrZSk7cmV0dXJuIGV9fSw5Mjg2OihlLHQsaSk9Pnt2YXIgYT1pKDQ0MDIpLHI9aSg4NDY5KSxzPWEuU2V0LG49YS5hZGQ7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBzO3IoZSwoZnVuY3Rpb24oZSl7bih0LGUpfSkpO3JldHVybiB0fX0sMzQ0MDooZSx0LGkpPT57dmFyIGE9aSg3MDgwKSxyPWkoNDQwMikscz1pKDkyODYpLG49aSg1MTcwKSxvPWkoMzc4OSksZz1pKDg0NjkpLGM9aSg1MDcpLEM9ci5oYXMsaD1yLnJlbW92ZTtlLmV4cG9ydHM9ZnVuY3Rpb24gZGlmZmVyZW5jZShlKXt2YXIgdD1hKHRoaXMpLGk9byhlKSxyPXModCk7bih0KTw9aS5zaXplP2codCwoZnVuY3Rpb24oZSl7aS5pbmNsdWRlcyhlKSYmaChyLGUpfSkpOmMoaS5nZXRJdGVyYXRvcigpLChmdW5jdGlvbihlKXtDKHQsZSkmJmgocixlKX0pKTtyZXR1cm4gcn19LDQ0MDI6KGUsdCxpKT0+e3ZhciBhPWkoOTUwNCkscj1TZXQucHJvdG90eXBlO2UuZXhwb3J0cz17U2V0LGFkZDphKHIuYWRkKSxoYXM6YShyLmhhcykscmVtb3ZlOmEoci5kZWxldGUpLHByb3RvOnJ9fSw4NzUwOihlLHQsaSk9Pnt2YXIgYT1pKDcwODApLHI9aSg0NDAyKSxzPWkoNTE3MCksbj1pKDM3ODkpLG89aSg4NDY5KSxnPWkoNTA3KSxjPXIuU2V0LEM9ci5hZGQsaD1yLmhhcztlLmV4cG9ydHM9ZnVuY3Rpb24gaW50ZXJzZWN0aW9uKGUpe3ZhciB0PWEodGhpcyksaT1uKGUpLHI9bmV3IGM7cyh0KT5pLnNpemU/ZyhpLmdldEl0ZXJhdG9yKCksKGZ1bmN0aW9uKGUpe2godCxlKSYmQyhyLGUpfSkpOm8odCwoZnVuY3Rpb24oZSl7aS5pbmNsdWRlcyhlKSYmQyhyLGUpfSkpO3JldHVybiByfX0sNDQ0OTooZSx0LGkpPT57dmFyIGE9aSg3MDgwKSxyPWkoNDQwMikuaGFzLHM9aSg1MTcwKSxuPWkoMzc4OSksbz1pKDg0NjkpLGc9aSg1MDcpLGM9aSg5NTM5KTtlLmV4cG9ydHM9ZnVuY3Rpb24gaXNEaXNqb2ludEZyb20oZSl7dmFyIHQ9YSh0aGlzKSxpPW4oZSk7aWYocyh0KTw9aS5zaXplKXJldHVybiExIT09byh0LChmdW5jdGlvbihlKXtpZihpLmluY2x1ZGVzKGUpKXJldHVybiExfSksITApO3ZhciBDPWkuZ2V0SXRlcmF0b3IoKTtyZXR1cm4hMSE9PWcoQywoZnVuY3Rpb24oZSl7aWYocih0LGUpKXJldHVybiBjKEMsIm5vcm1hbCIsITEpfSkpfX0sMzgzODooZSx0LGkpPT57dmFyIGE9aSg3MDgwKSxyPWkoNTE3MCkscz1pKDg0NjkpLG49aSgzNzg5KTtlLmV4cG9ydHM9ZnVuY3Rpb24gaXNTdWJzZXRPZihlKXt2YXIgdD1hKHRoaXMpLGk9bihlKTtyZXR1cm4hKHIodCk+aS5zaXplKSYmITEhPT1zKHQsKGZ1bmN0aW9uKGUpe2lmKCFpLmluY2x1ZGVzKGUpKXJldHVybiExfSksITApfX0sODUyNzooZSx0LGkpPT57dmFyIGE9aSg3MDgwKSxyPWkoNDQwMikuaGFzLHM9aSg1MTcwKSxuPWkoMzc4OSksbz1pKDUwNyksZz1pKDk1MzkpO2UuZXhwb3J0cz1mdW5jdGlvbiBpc1N1cGVyc2V0T2YoZSl7dmFyIHQ9YSh0aGlzKSxpPW4oZSk7aWYocyh0KTxpLnNpemUpcmV0dXJuITE7dmFyIGM9aS5nZXRJdGVyYXRvcigpO3JldHVybiExIT09byhjLChmdW5jdGlvbihlKXtpZighcih0LGUpKXJldHVybiBnKGMsIm5vcm1hbCIsITEpfSkpfX0sODQ2OTooZSx0LGkpPT57dmFyIGE9aSg5NTA0KSxyPWkoNTA3KSxzPWkoNDQwMiksbj1zLlNldCxvPXMucHJvdG8sZz1hKG8uZm9yRWFjaCksYz1hKG8ua2V5cyksQz1jKG5ldyBuKS5uZXh0O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSl7cmV0dXJuIGk/cih7aXRlcmF0b3I6YyhlKSxuZXh0OkN9LHQpOmcoZSx0KX19LDQ5MTY6KGUsdCxpKT0+e3ZhciBhPWkoNzc1MSksY3JlYXRlU2V0TGlrZT1mdW5jdGlvbihlKXtyZXR1cm57c2l6ZTplLGhhczpmdW5jdGlvbigpe3JldHVybiExfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMH19fX19fTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9YSgiU2V0Iik7dHJ5eyhuZXcgdClbZV0oY3JlYXRlU2V0TGlrZSgwKSk7dHJ5eyhuZXcgdClbZV0oY3JlYXRlU2V0TGlrZSgtMSkpO3JldHVybiExfWNhdGNoKGUpe3JldHVybiEwfX1jYXRjaChlKXtyZXR1cm4hMX19fSw1MTcwOihlLHQsaSk9Pnt2YXIgYT1pKDY3MDYpLHI9aSg0NDAyKTtlLmV4cG9ydHM9YShyLnByb3RvLCJzaXplIiwiZ2V0Iil8fGZ1bmN0aW9uKGUpe3JldHVybiBlLnNpemV9fSwzNjUwOihlLHQsaSk9Pnt2YXIgYT1pKDcwODApLHI9aSg0NDAyKSxzPWkoOTI4Niksbj1pKDM3ODkpLG89aSg1MDcpLGc9ci5hZGQsYz1yLmhhcyxDPXIucmVtb3ZlO2UuZXhwb3J0cz1mdW5jdGlvbiBzeW1tZXRyaWNEaWZmZXJlbmNlKGUpe3ZhciB0PWEodGhpcyksaT1uKGUpLmdldEl0ZXJhdG9yKCkscj1zKHQpO28oaSwoZnVuY3Rpb24oZSl7Yyh0LGUpP0MocixlKTpnKHIsZSl9KSk7cmV0dXJuIHJ9fSw0MjA0OihlLHQsaSk9Pnt2YXIgYT1pKDcwODApLHI9aSg0NDAyKS5hZGQscz1pKDkyODYpLG49aSgzNzg5KSxvPWkoNTA3KTtlLmV4cG9ydHM9ZnVuY3Rpb24gdW5pb24oZSl7dmFyIHQ9YSh0aGlzKSxpPW4oZSkuZ2V0SXRlcmF0b3IoKSxnPXModCk7byhpLChmdW5jdGlvbihlKXtyKGcsZSl9KSk7cmV0dXJuIGd9fSw2MTE5OihlLHQsaSk9Pnt2YXIgYT1pKDU3NDUpLHI9aSgzMzkyKSxzPWEoImtleXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHNbZV18fChzW2VdPXIoZSkpfX0sNzYyOTooZSx0LGkpPT57dmFyIGE9aSg2Mzk1KSxyPWkoNDU3Nikscz1pKDk0MzMpLG49Il9fY29yZS1qc19zaGFyZWRfXyIsbz1lLmV4cG9ydHM9cltuXXx8cyhuLHt9KTsoby52ZXJzaW9uc3x8KG8udmVyc2lvbnM9W10pKS5wdXNoKHt2ZXJzaW9uOiIzLjM4LjEiLG1vZGU6YT8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiLCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkiLGxpY2Vuc2U6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzguMS9MSUNFTlNFIixzb3VyY2U6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzIn0pfSw1NzQ1OihlLHQsaSk9Pnt2YXIgYT1pKDc2MjkpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhW2VdfHwoYVtlXT10fHx7fSl9fSwxNTQ4OihlLHQsaSk9Pnt2YXIgYT1pKDQ1NzYpLHI9aSg5MDM5KSxzPWkoOTUxOSksbj1pKDQyMTUpLG89YS5zdHJ1Y3R1cmVkQ2xvbmU7ZS5leHBvcnRzPSEhbyYmIXIoKGZ1bmN0aW9uKCl7aWYoIkRFTk8iPT09biYmcz45Mnx8Ik5PREUiPT09biYmcz45NHx8IkJST1dTRVIiPT09biYmcz45NylyZXR1cm4hMTt2YXIgZT1uZXcgQXJyYXlCdWZmZXIoOCksdD1vKGUse3RyYW5zZmVyOltlXX0pO3JldHVybiAwIT09ZS5ieXRlTGVuZ3RofHw4IT09dC5ieXRlTGVuZ3RofSkpfSw0NDk1OihlLHQsaSk9Pnt2YXIgYT1pKDk1MTkpLHI9aSg5MDM5KSxzPWkoNDU3NikuU3RyaW5nO2UuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFyKChmdW5jdGlvbigpe3ZhciBlPVN5bWJvbCgic3ltYm9sIGRldGVjdGlvbiIpO3JldHVybiFzKGUpfHwhKE9iamVjdChlKWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZhJiZhPDQxfSkpfSw1NjEwOihlLHQsaSk9Pnt2YXIgYT1pKDEyOTEpLHI9TWF0aC5tYXgscz1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgaT1hKGUpO3JldHVybiBpPDA/cihpK3QsMCk6cyhpLHQpfX0sNTg1NDooZSx0LGkpPT57dmFyIGE9aSgyNzc3KSxyPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9YShlLCJudW1iZXIiKTtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IHIoIkNhbid0IGNvbnZlcnQgbnVtYmVyIHRvIGJpZ2ludCIpO3JldHVybiBCaWdJbnQodCl9fSw3Njk2OihlLHQsaSk9Pnt2YXIgYT1pKDEyOTEpLHI9aSg4MDE0KSxzPVJhbmdlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpcmV0dXJuIDA7dmFyIHQ9YShlKSxpPXIodCk7aWYodCE9PWkpdGhyb3cgbmV3IHMoIldyb25nIGxlbmd0aCBvciBpbmRleCIpO3JldHVybiBpfX0sNTM5NzooZSx0LGkpPT57dmFyIGE9aSg3MDU1KSxyPWkoNzc1MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBhKHIoZSkpfX0sMTI5MTooZSx0LGkpPT57dmFyIGE9aSg3NDEpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gdCE9dHx8MD09PXQ/MDphKHQpfX0sODAxNDooZSx0LGkpPT57dmFyIGE9aSgxMjkxKSxyPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1hKGUpO3JldHVybiB0PjA/cih0LDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSw4OTgxOihlLHQsaSk9Pnt2YXIgYT1pKDc3NTApLHI9T2JqZWN0O2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihhKGUpKX19LDI3Nzc6KGUsdCxpKT0+e3ZhciBhPWkoOTU2NSkscj1pKDM0KSxzPWkoNzU3KSxuPWkoNTk2Niksbz1pKDQyNzApLGc9aSg4MjI3KSxjPVR5cGVFcnJvcixDPWcoInRvUHJpbWl0aXZlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSl8fHMoZSkpcmV0dXJuIGU7dmFyIGksZz1uKGUsQyk7aWYoZyl7dm9pZCAwPT09dCYmKHQ9ImRlZmF1bHQiKTtpPWEoZyxlLHQpO2lmKCFyKGkpfHxzKGkpKXJldHVybiBpO3Rocm93IG5ldyBjKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX12b2lkIDA9PT10JiYodD0ibnVtYmVyIik7cmV0dXJuIG8oZSx0KX19LDY5Njk6KGUsdCxpKT0+e3ZhciBhPWkoMjc3Nykscj1pKDc1Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWEoZSwic3RyaW5nIik7cmV0dXJuIHIodCk/dDp0KyIifX0sMjE0MDooZSx0LGkpPT57dmFyIGE9e307YVtpKDgyMjcpKCJ0b1N0cmluZ1RhZyIpXT0ieiI7ZS5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhhKX0sNjU1OihlLHQsaSk9Pnt2YXIgYT1pKDY5NTUpLHI9U3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiU3ltYm9sIj09PWEoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4gcihlKX19LDY4MjM6ZT0+e3ZhciB0PVN0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiB0KGUpfWNhdGNoKGUpe3JldHVybiJPYmplY3QifX19LDMzOTI6KGUsdCxpKT0+e3ZhciBhPWkoOTUwNCkscj0wLHM9TWF0aC5yYW5kb20oKSxuPWEoMS4udG9TdHJpbmcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIrKHZvaWQgMD09PWU/IiI6ZSkrIilfIituKCsrcitzLDM2KX19LDcwNDA6KGUsdCxpKT0+e3ZhciBhPWkoNDQ5NSk7ZS5leHBvcnRzPWEmJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3J9LDg2ODY6KGUsdCxpKT0+e3ZhciBhPWkoMzcyNCkscj1pKDkwMzkpO2UuZXhwb3J0cz1hJiZyKChmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSgoZnVuY3Rpb24oKXt9KSwicHJvdG90eXBlIix7dmFsdWU6NDIsd3JpdGFibGU6ITF9KS5wcm90b3R5cGV9KSl9LDI4MTI6ZT0+e3ZhciB0PVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSxpKXtpZihlPGkpdGhyb3cgbmV3IHQoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7cmV0dXJuIGV9fSw4NjIyOihlLHQsaSk9Pnt2YXIgYT1pKDQ1NzYpLHI9aSg0OTAxKSxzPWEuV2Vha01hcDtlLmV4cG9ydHM9cihzKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhzKSl9LDgyMjc6KGUsdCxpKT0+e3ZhciBhPWkoNDU3Nikscj1pKDU3NDUpLHM9aSg5Mjk3KSxuPWkoMzM5Miksbz1pKDQ0OTUpLGc9aSg3MDQwKSxjPWEuU3ltYm9sLEM9cigid2tzIiksaD1nP2MuZm9yfHxjOmMmJmMud2l0aG91dFNldHRlcnx8bjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cyhDLGUpfHwoQ1tlXT1vJiZzKGMsZSk/Y1tlXTpoKCJTeW1ib2wuIitlKSk7cmV0dXJuIENbZV19fSw2NTczOihlLHQsaSk9Pnt2YXIgYT1pKDM3MjQpLHI9aSgyMTA2KSxzPWkoMzIzOCksbj1BcnJheUJ1ZmZlci5wcm90b3R5cGU7YSYmISgiZGV0YWNoZWQiaW4gbikmJnIobiwiZGV0YWNoZWQiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uIGRldGFjaGVkKCl7cmV0dXJuIHModGhpcyl9fSl9LDc5MzY6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDU2MzYpO3ImJmEoe3RhcmdldDoiQXJyYXlCdWZmZXIiLHByb3RvOiEwfSx7dHJhbnNmZXJUb0ZpeGVkTGVuZ3RoOmZ1bmN0aW9uIHRyYW5zZmVyVG9GaXhlZExlbmd0aCgpe3JldHVybiByKHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwLCExKX19KX0sODEwMDooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoNTYzNik7ciYmYSh7dGFyZ2V0OiJBcnJheUJ1ZmZlciIscHJvdG86ITB9LHt0cmFuc2ZlcjpmdW5jdGlvbiB0cmFuc2Zlcigpe3JldHVybiByKHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwLCEwKX19KX0sNDExNDooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoODk4MSkscz1pKDYxOTgpLG49aSg0NTI3KSxvPWkoNjgzNyk7YSh7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6aSg5MDM5KSgoZnVuY3Rpb24oKXtyZXR1cm4gNDI5NDk2NzI5NyE9PVtdLnB1c2guY2FsbCh7bGVuZ3RoOjQyOTQ5NjcyOTZ9LDEpfSkpfHwhZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLnB1c2goKX1jYXRjaChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCl9LHtwdXNoOmZ1bmN0aW9uIHB1c2goZSl7dmFyIHQ9cih0aGlzKSxpPXModCksYT1hcmd1bWVudHMubGVuZ3RoO28oaSthKTtmb3IodmFyIGc9MDtnPGE7ZysrKXt0W2ldPWFyZ3VtZW50c1tnXTtpKyt9bih0LGkpO3JldHVybiBpfX0pfSw0NjI4OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSg2MDQzKTthKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHt3aXRoUmVzb2x2ZXJzOmZ1bmN0aW9uIHdpdGhSZXNvbHZlcnMoKXt2YXIgZT1yLmYodGhpcyk7cmV0dXJue3Byb21pc2U6ZS5wcm9taXNlLHJlc29sdmU6ZS5yZXNvbHZlLHJlamVjdDplLnJlamVjdH19fSl9LDk0Nzk6KGUsdCxpKT0+e3ZhciBhPWkoNDU3Nikscj1pKDM3MjQpLHM9aSgyMTA2KSxuPWkoNzk3OSksbz1pKDkwMzkpLGc9YS5SZWdFeHAsYz1nLnByb3RvdHlwZTtyJiZvKChmdW5jdGlvbigpe3ZhciBlPSEwO3RyeXtnKCIuIiwiZCIpfWNhdGNoKHQpe2U9ITF9dmFyIHQ9e30saT0iIixhPWU/ImRnaW1zeSI6ImdpbXN5IixhZGRHZXR0ZXI9ZnVuY3Rpb24oZSxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6ZnVuY3Rpb24oKXtpKz1hO3JldHVybiEwfX0pfSxyPXtkb3RBbGw6InMiLGdsb2JhbDoiZyIsaWdub3JlQ2FzZToiaSIsbXVsdGlsaW5lOiJtIixzdGlja3k6InkifTtlJiYoci5oYXNJbmRpY2VzPSJkIik7Zm9yKHZhciBzIGluIHIpYWRkR2V0dGVyKHMscltzXSk7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYywiZmxhZ3MiKS5nZXQuY2FsbCh0KSE9PWF8fGkhPT1hfSkpJiZzKGMsImZsYWdzIix7Y29uZmlndXJhYmxlOiEwLGdldDpufSl9LDc2NDI6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDM0NDApO2Eoe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohaSg0OTE2KSgiZGlmZmVyZW5jZSIpfSx7ZGlmZmVyZW5jZTpyfSl9LDgwMDQ6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDkwMzkpLHM9aSg4NzUwKTthKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWkoNDkxNikoImludGVyc2VjdGlvbiIpfHxyKChmdW5jdGlvbigpe3JldHVybiIzLDIiIT09U3RyaW5nKEFycmF5LmZyb20obmV3IFNldChbMSwyLDNdKS5pbnRlcnNlY3Rpb24obmV3IFNldChbMywyXSkpKSl9KSl9LHtpbnRlcnNlY3Rpb246c30pfSwzODUzOihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSg0NDQ5KTthKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWkoNDkxNikoImlzRGlzam9pbnRGcm9tIil9LHtpc0Rpc2pvaW50RnJvbTpyfSl9LDU4NzY6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDM4MzgpO2Eoe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohaSg0OTE2KSgiaXNTdWJzZXRPZiIpfSx7aXNTdWJzZXRPZjpyfSl9LDI0NzU6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDg1MjcpO2Eoe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohaSg0OTE2KSgiaXNTdXBlcnNldE9mIil9LHtpc1N1cGVyc2V0T2Y6cn0pfSw1MDI0OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSgzNjUwKTthKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWkoNDkxNikoInN5bW1ldHJpY0RpZmZlcmVuY2UiKX0se3N5bW1ldHJpY0RpZmZlcmVuY2U6cn0pfSwxNjk4OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSg0MjA0KTthKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWkoNDkxNikoInVuaW9uIil9LHt1bmlvbjpyfSl9LDc0Njc6KGUsdCxpKT0+e3ZhciBhPWkoNzYyOCkscj1pKDQ2NDQpLHM9ci5hVHlwZWRBcnJheSxuPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxvPXIuZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yO24oInRvUmV2ZXJzZWQiLChmdW5jdGlvbiB0b1JldmVyc2VkKCl7cmV0dXJuIGEocyh0aGlzKSxvKHRoaXMpKX0pKX0sNDczMjooZSx0LGkpPT57dmFyIGE9aSg0NjQ0KSxyPWkoOTUwNCkscz1pKDkzMDYpLG49aSg1MzcwKSxvPWEuYVR5cGVkQXJyYXksZz1hLmdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcixjPWEuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxDPXIoYS5UeXBlZEFycmF5UHJvdG90eXBlLnNvcnQpO2MoInRvU29ydGVkIiwoZnVuY3Rpb24gdG9Tb3J0ZWQoZSl7dm9pZCAwIT09ZSYmcyhlKTt2YXIgdD1vKHRoaXMpLGk9bihnKHQpLHQpO3JldHVybiBDKGksZSl9KSl9LDk1Nzc6KGUsdCxpKT0+e3ZhciBhPWkoOTkyOCkscj1pKDQ2NDQpLHM9aSgxMTA4KSxuPWkoMTI5MSksbz1pKDU4NTQpLGc9ci5hVHlwZWRBcnJheSxjPXIuZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yLEM9ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGg9ISFmdW5jdGlvbigpe3RyeXtuZXcgSW50OEFycmF5KDEpLndpdGgoMix7dmFsdWVPZjpmdW5jdGlvbigpe3Rocm93IDh9fSl9Y2F0Y2goZSl7cmV0dXJuIDg9PT1lfX0oKTtDKCJ3aXRoIix7d2l0aDpmdW5jdGlvbihlLHQpe3ZhciBpPWcodGhpcykscj1uKGUpLEM9cyhpKT9vKHQpOit0O3JldHVybiBhKGksYyhpKSxyLEMpfX0ud2l0aCwhaCl9LDg5OTI6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDQ1NzYpLHM9aSg2NzkpLG49aSg4NTUxKSxvPWkoNDkwMSksZz1pKDI3ODcpLGM9aSgyMTA2KSxDPWkoNDY1OSksaD1pKDkwMzkpLGw9aSg5Mjk3KSxRPWkoODIyNyksRT1pKDc2NTcpLkl0ZXJhdG9yUHJvdG90eXBlLHU9aSgzNzI0KSxkPWkoNjM5NSksZj0iY29uc3RydWN0b3IiLHA9Ikl0ZXJhdG9yIixtPVEoInRvU3RyaW5nVGFnIikseT1UeXBlRXJyb3Isdz1yW3BdLGI9ZHx8IW8odyl8fHcucHJvdG90eXBlIT09RXx8IWgoKGZ1bmN0aW9uKCl7dyh7fSl9KSksRD1mdW5jdGlvbiBJdGVyYXRvcigpe3ModGhpcyxFKTtpZihnKHRoaXMpPT09RSl0aHJvdyBuZXcgeSgiQWJzdHJhY3QgY2xhc3MgSXRlcmF0b3Igbm90IGRpcmVjdGx5IGNvbnN0cnVjdGFibGUiKX0sZGVmaW5lSXRlcmF0b3JQcm90b3R5cGVBY2Nlc3Nvcj1mdW5jdGlvbihlLHQpe3U/YyhFLGUse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sc2V0OmZ1bmN0aW9uKHQpe24odGhpcyk7aWYodGhpcz09PUUpdGhyb3cgbmV3IHkoIllvdSBjYW4ndCByZWRlZmluZSB0aGlzIHByb3BlcnR5Iik7bCh0aGlzLGUpP3RoaXNbZV09dDpDKHRoaXMsZSx0KX19KTpFW2VdPXR9O2woRSxtKXx8ZGVmaW5lSXRlcmF0b3JQcm90b3R5cGVBY2Nlc3NvcihtLHApOyFiJiZsKEUsZikmJkVbZl0hPT1PYmplY3R8fGRlZmluZUl0ZXJhdG9yUHJvdG90eXBlQWNjZXNzb3IoZixEKTtELnByb3RvdHlwZT1FO2Eoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCxmb3JjZWQ6Yn0se0l0ZXJhdG9yOkR9KX0sMzIxNTooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoMjY1Mikscz1pKDkzMDYpLG49aSg4NTUxKSxvPWkoMTc2Nyk7YSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2V2ZXJ5OmZ1bmN0aW9uIGV2ZXJ5KGUpe24odGhpcyk7cyhlKTt2YXIgdD1vKHRoaXMpLGk9MDtyZXR1cm4hcih0LChmdW5jdGlvbih0LGEpe2lmKCFlKHQsaSsrKSlyZXR1cm4gYSgpfSkse0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDQ1MjA6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDk1NjUpLHM9aSg5MzA2KSxuPWkoODU1MSksbz1pKDE3NjcpLGc9aSg5NDYyKSxjPWkoNjMxOSksQz1pKDYzOTUpLGg9ZygoZnVuY3Rpb24oKXtmb3IodmFyIGUsdCxpPXRoaXMuaXRlcmF0b3IsYT10aGlzLnByZWRpY2F0ZSxzPXRoaXMubmV4dDs7KXtlPW4ocihzLGkpKTtpZih0aGlzLmRvbmU9ISFlLmRvbmUpcmV0dXJuO3Q9ZS52YWx1ZTtpZihjKGksYSxbdCx0aGlzLmNvdW50ZXIrK10sITApKXJldHVybiB0fX0pKTthKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpDfSx7ZmlsdGVyOmZ1bmN0aW9uIGZpbHRlcihlKXtuKHRoaXMpO3MoZSk7cmV0dXJuIG5ldyBoKG8odGhpcykse3ByZWRpY2F0ZTplfSl9fSl9LDI1Nzc6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDI2NTIpLHM9aSg5MzA2KSxuPWkoODU1MSksbz1pKDE3NjcpO2Eoe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaW5kOmZ1bmN0aW9uIGZpbmQoZSl7bih0aGlzKTtzKGUpO3ZhciB0PW8odGhpcyksaT0wO3JldHVybiByKHQsKGZ1bmN0aW9uKHQsYSl7aWYoZSh0LGkrKykpcmV0dXJuIGEodCl9KSx7SVNfUkVDT1JEOiEwLElOVEVSUlVQVEVEOiEwfSkucmVzdWx0fX0pfSwzOTQ5OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSgyNjUyKSxzPWkoOTMwNiksbj1pKDg1NTEpLG89aSgxNzY3KTthKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7Zm9yRWFjaDpmdW5jdGlvbiBmb3JFYWNoKGUpe24odGhpcyk7cyhlKTt2YXIgdD1vKHRoaXMpLGk9MDtyKHQsKGZ1bmN0aW9uKHQpe2UodCxpKyspfSkse0lTX1JFQ09SRDohMH0pfX0pfSwxNDU0OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSg3MTMpO2Eoe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOmkoNjM5NSl9LHttYXA6cn0pfSw4ODcyOihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSgyNjUyKSxzPWkoOTMwNiksbj1pKDg1NTEpLG89aSgxNzY3KSxnPVR5cGVFcnJvcjthKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7cmVkdWNlOmZ1bmN0aW9uIHJlZHVjZShlKXtuKHRoaXMpO3MoZSk7dmFyIHQ9byh0aGlzKSxpPWFyZ3VtZW50cy5sZW5ndGg8MixhPWk/dm9pZCAwOmFyZ3VtZW50c1sxXSxjPTA7cih0LChmdW5jdGlvbih0KXtpZihpKXtpPSExO2E9dH1lbHNlIGE9ZShhLHQsYyk7YysrfSkse0lTX1JFQ09SRDohMH0pO2lmKGkpdGhyb3cgbmV3IGcoIlJlZHVjZSBvZiBlbXB0eSBpdGVyYXRvciB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gYX19KX0sNzU1MDooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoMjY1Mikscz1pKDkzMDYpLG49aSg4NTUxKSxvPWkoMTc2Nyk7YSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3NvbWU6ZnVuY3Rpb24gc29tZShlKXtuKHRoaXMpO3MoZSk7dmFyIHQ9byh0aGlzKSxpPTA7cmV0dXJuIHIodCwoZnVuY3Rpb24odCxhKXtpZihlKHQsaSsrKSlyZXR1cm4gYSgpfSkse0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDE3OTU6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDg1NTEpLHM9aSgyNjUyKSxuPWkoMTc2Nyksbz1bXS5wdXNoO2Eoe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0b0FycmF5OmZ1bmN0aW9uIHRvQXJyYXkoKXt2YXIgZT1bXTtzKG4ocih0aGlzKSksbyx7dGhhdDplLElTX1JFQ09SRDohMH0pO3JldHVybiBlfX0pfSw0OTc5OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSg0NTc2KSxzPWkoNzc1MSksbj1pKDY5ODApLG89aSg0OTEzKS5mLGc9aSg5Mjk3KSxjPWkoNjc5KSxDPWkoMzE2NyksaD1pKDI2MDMpLGw9aSg1MDAyKSxRPWkoODU3NCksRT1pKDM3MjQpLHU9aSg2Mzk1KSxkPSJET01FeGNlcHRpb24iLGY9cygiRXJyb3IiKSxwPXMoZCksbT1mdW5jdGlvbiBET01FeGNlcHRpb24oKXtjKHRoaXMseSk7dmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PWgoZTwxP3ZvaWQgMDphcmd1bWVudHNbMF0pLGk9aChlPDI/dm9pZCAwOmFyZ3VtZW50c1sxXSwiRXJyb3IiKSxhPW5ldyBwKHQsaSkscj1uZXcgZih0KTtyLm5hbWU9ZDtvKGEsInN0YWNrIixuKDEsUShyLnN0YWNrLDEpKSk7QyhhLHRoaXMsbSk7cmV0dXJuIGF9LHk9bS5wcm90b3R5cGU9cC5wcm90b3R5cGUsdz0ic3RhY2siaW4gbmV3IGYoZCksYj0ic3RhY2siaW4gbmV3IHAoMSwyKSxEPXAmJkUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixkKSxTPSEoIUR8fEQud3JpdGFibGUmJkQuY29uZmlndXJhYmxlKSxrPXcmJiFTJiYhYjthKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsZm9yY2VkOnV8fGt9LHtET01FeGNlcHRpb246az9tOnB9KTt2YXIgUj1zKGQpLE49Ui5wcm90b3R5cGU7aWYoTi5jb25zdHJ1Y3RvciE9PVIpe3V8fG8oTiwiY29uc3RydWN0b3IiLG4oMSxSKSk7Zm9yKHZhciBHIGluIGwpaWYoZyhsLEcpKXt2YXIgeD1sW0ddLFU9eC5zO2coUixVKXx8byhSLFUsbig2LHguYykpfX19LDM2MTE6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDQ1NzYpLHM9aSgyMTA2KSxuPWkoMzcyNCksbz1UeXBlRXJyb3IsZz1PYmplY3QuZGVmaW5lUHJvcGVydHksYz1yLnNlbGYhPT1yO3RyeXtpZihuKXt2YXIgQz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsInNlbGYiKTshYyYmQyYmQy5nZXQmJkMuZW51bWVyYWJsZXx8cyhyLCJzZWxmIix7Z2V0OmZ1bmN0aW9uIHNlbGYoKXtyZXR1cm4gcn0sc2V0OmZ1bmN0aW9uIHNlbGYoZSl7aWYodGhpcyE9PXIpdGhyb3cgbmV3IG8oIklsbGVnYWwgaW52b2NhdGlvbiIpO2cociwic2VsZiIse3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9KX0sY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9KX1lbHNlIGEoe2dsb2JhbDohMCxzaW1wbGU6ITAsZm9yY2VkOmN9LHtzZWxmOnJ9KX1jYXRjaChlKXt9fSw0NjAzOihlLHQsaSk9Pnt2YXIgYT1pKDY4NDApLHI9aSg5NTA0KSxzPWkoNjU1KSxuPWkoMjgxMiksbz1VUkxTZWFyY2hQYXJhbXMsZz1vLnByb3RvdHlwZSxjPXIoZy5hcHBlbmQpLEM9cihnLmRlbGV0ZSksaD1yKGcuZm9yRWFjaCksbD1yKFtdLnB1c2gpLFE9bmV3IG8oImE9MSZhPTImYj0zIik7US5kZWxldGUoImEiLDEpO1EuZGVsZXRlKCJiIix2b2lkIDApO1ErIiIhPSJhPTIiJiZhKGcsImRlbGV0ZSIsKGZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgsaT10PDI/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZih0JiZ2b2lkIDA9PT1pKXJldHVybiBDKHRoaXMsZSk7dmFyIGE9W107aCh0aGlzLChmdW5jdGlvbihlLHQpe2woYSx7a2V5OnQsdmFsdWU6ZX0pfSkpO24odCwxKTtmb3IodmFyIHIsbz1zKGUpLGc9cyhpKSxRPTAsRT0wLHU9ITEsZD1hLmxlbmd0aDtRPGQ7KXtyPWFbUSsrXTtpZih1fHxyLmtleT09PW8pe3U9ITA7Qyh0aGlzLHIua2V5KX1lbHNlIEUrK31mb3IoO0U8ZDspKHI9YVtFKytdKS5rZXk9PT1vJiZyLnZhbHVlPT09Z3x8Yyh0aGlzLHIua2V5LHIudmFsdWUpfSkse2VudW1lcmFibGU6ITAsdW5zYWZlOiEwfSl9LDc1NjY6KGUsdCxpKT0+e3ZhciBhPWkoNjg0MCkscj1pKDk1MDQpLHM9aSg2NTUpLG49aSgyODEyKSxvPVVSTFNlYXJjaFBhcmFtcyxnPW8ucHJvdG90eXBlLGM9cihnLmdldEFsbCksQz1yKGcuaGFzKSxoPW5ldyBvKCJhPTEiKTshaC5oYXMoImEiLDIpJiZoLmhhcygiYSIsdm9pZCAwKXx8YShnLCJoYXMiLChmdW5jdGlvbiBoYXMoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxpPXQ8Mj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKHQmJnZvaWQgMD09PWkpcmV0dXJuIEModGhpcyxlKTt2YXIgYT1jKHRoaXMsZSk7bih0LDEpO2Zvcih2YXIgcj1zKGkpLG89MDtvPGEubGVuZ3RoOylpZihhW28rK109PT1yKXJldHVybiEwO3JldHVybiExfSkse2VudW1lcmFibGU6ITAsdW5zYWZlOiEwfSl9LDg3MjE6KGUsdCxpKT0+e3ZhciBhPWkoMzcyNCkscj1pKDk1MDQpLHM9aSgyMTA2KSxuPVVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUsbz1yKG4uZm9yRWFjaCk7YSYmISgic2l6ZSJpbiBuKSYmcyhuLCJzaXplIix7Z2V0OmZ1bmN0aW9uIHNpemUoKXt2YXIgZT0wO28odGhpcywoZnVuY3Rpb24oKXtlKyt9KSk7cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSl9fSx0PXt9O2Z1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18oaSl7dmFyIGE9dFtpXTtpZih2b2lkIDAhPT1hKXJldHVybiBhLmV4cG9ydHM7dmFyIHI9dFtpXT17ZXhwb3J0czp7fX07ZVtpXS5jYWxsKHIuZXhwb3J0cyxyLHIuZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKTtyZXR1cm4gci5leHBvcnRzfV9fd2VicGFja19yZXF1aXJlX18uZD0oZSx0KT0+e2Zvcih2YXIgaSBpbiB0KV9fd2VicGFja19yZXF1aXJlX18ubyh0LGkpJiYhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGUsaSkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGkse2VudW1lcmFibGU6ITAsZ2V0OnRbaV19KX07X193ZWJwYWNrX3JlcXVpcmVfXy5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KTt2YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IGdsb2JhbFRoaXMucGRmanNXb3JrZXIgPSB7fTtfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXyx7V29ya2VyTWVzc2FnZUhhbmRsZXI6KCk9Pldvcmtlck1lc3NhZ2VIYW5kbGVyfSk7X193ZWJwYWNrX3JlcXVpcmVfXyg0MTE0KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDY1NzMpLF9fd2VicGFja19yZXF1aXJlX18oODEwMCksX193ZWJwYWNrX3JlcXVpcmVfXyg3OTM2KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2MjgpLF9fd2VicGFja19yZXF1aXJlX18oNzY0MiksX193ZWJwYWNrX3JlcXVpcmVfXyg4MDA0KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDM4NTMpLF9fd2VicGFja19yZXF1aXJlX18oNTg3NiksX193ZWJwYWNrX3JlcXVpcmVfXygyNDc1KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDUwMjQpLF9fd2VicGFja19yZXF1aXJlX18oMTY5OCksX193ZWJwYWNrX3JlcXVpcmVfXyg3NDY3KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3MzIpLF9fd2VicGFja19yZXF1aXJlX18oOTU3NyksX193ZWJwYWNrX3JlcXVpcmVfXyg4OTkyKSxfX3dlYnBhY2tfcmVxdWlyZV9fKDM5NDkpLF9fd2VicGFja19yZXF1aXJlX18oMTQ1NCksX193ZWJwYWNrX3JlcXVpcmVfXyg3NTUwKSxfX3dlYnBhY2tfcmVxdWlyZV9fKDM2MTEpLF9fd2VicGFja19yZXF1aXJlX18oNDYwMyksX193ZWJwYWNrX3JlcXVpcmVfXyg3NTY2KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDg3MjEpO2NvbnN0IGk9ISgib2JqZWN0IiE9dHlwZW9mIHByb2Nlc3N8fHByb2Nlc3MrIiIhPSJbb2JqZWN0IHByb2Nlc3NdInx8cHJvY2Vzcy52ZXJzaW9ucy5ud3x8cHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbiYmcHJvY2Vzcy50eXBlJiYiYnJvd3NlciIhPT1wcm9jZXNzLnR5cGUpLGE9WzEsMCwwLDEsMCwwXSxyPVsuMDAxLDAsMCwuMDAxLDAsMF0scz0xLjM1LG49LjM1LG89LjI1OTI1OTI1OTI1OTI1OTI0LGc9MSxjPTIsQz00LGg9OCxsPTE2LFE9NjQsRT0xMjgsdT0yNTYsZD0icGRmanNfaW50ZXJuYWxfZWRpdG9yXyIsZj0zLHA9OSxtPTEzLHk9MTUsdz17UFJJTlQ6NCxNT0RJRllfQ09OVEVOVFM6OCxDT1BZOjE2LE1PRElGWV9BTk5PVEFUSU9OUzozMixGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOjI1NixDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOjUxMixBU1NFTUJMRToxMDI0LFBSSU5UX0hJR0hfUVVBTElUWToyMDQ4fSxiPTAsRD00LFM9MSxrPTIsUj0zLE49MSxHPTIseD0zLFU9NCxNPTUsTD02LEg9NyxKPTgsdj05LFk9MTAsVD0xMSxLPTEyLHE9MTMsTz0xNCxXPTE1LGo9MTYsWD0xNyxaPTIwLFY9Ikdyb3VwIixfPSJSIix6PTEsJD0yLEFBPTQsZUE9MTYsdEE9MzIsaUE9MTI4LGFBPTUxMixyQT0xLHNBPTIsbkE9NDA5NixvQT04MTkyLGdBPTMyNzY4LElBPTY1NTM2LGNBPTEzMTA3MixDQT0xMDQ4NTc2LGhBPTIwOTcxNTIsbEE9ODM4ODYwOCxCQT0xNjc3NzIxNixRQT0xLEVBPTIsdUE9MyxkQT00LGZBPTUscEE9e0U6Ik1vdXNlIEVudGVyIixYOiJNb3VzZSBFeGl0IixEOiJNb3VzZSBEb3duIixVOiJNb3VzZSBVcCIsRm86IkZvY3VzIixCbDoiQmx1ciIsUE86IlBhZ2VPcGVuIixQQzoiUGFnZUNsb3NlIixQVjoiUGFnZVZpc2libGUiLFBJOiJQYWdlSW52aXNpYmxlIixLOiJLZXlzdHJva2UiLEY6IkZvcm1hdCIsVjoiVmFsaWRhdGUiLEM6IkNhbGN1bGF0ZSJ9LG1BPXtXQzoiV2lsbENsb3NlIixXUzoiV2lsbFNhdmUiLERTOiJEaWRTYXZlIixXUDoiV2lsbFByaW50IixEUDoiRGlkUHJpbnQifSx5QT17TzoiUGFnZU9wZW4iLEM6IlBhZ2VDbG9zZSJ9LHdBPXtFUlJPUlM6MCxXQVJOSU5HUzoxLElORk9TOjV9LGJBPXtOT05FOjAsQklOQVJZOjF9LERBPTEsRkE9MixTQT0zLGtBPTQsUkE9NSxOQT02LEdBPTcseEE9OCxVQT05LE1BPTEwLExBPTExLEhBPTEyLEpBPTEzLHZBPTE0LFlBPTE1LFRBPTE2LEtBPTE3LHFBPTE4LE9BPTE5LFBBPTIwLFdBPTIxLGpBPTIyLFhBPTIzLFpBPTI0LFZBPTI1LF9BPTI2LHpBPTI3LCRBPTI4LEFlPTI5LGVlPTMwLHRlPTMxLGllPTMyLGFlPTMzLHJlPTM0LHNlPTM1LG5lPTM2LG9lPTM3LGdlPTM4LEllPTM5LGNlPTQwLENlPTQxLGhlPTQyLGxlPTQzLEJlPTQ0LFFlPTQ1LEVlPTQ2LHVlPTQ3LGRlPTQ4LGZlPTQ5LHBlPTUwLG1lPTUxLHllPTUyLHdlPTUzLGJlPTU0LERlPTU1LEZlPTU2LFNlPTU3LGtlPTU4LFJlPTU5LE5lPTYwLEdlPTYxLHhlPTYyLFVlPTYzLE1lPTY0LExlPTY1LEhlPTY2LEplPTY3LHZlPTY4LFllPTY5LFRlPTcwLEtlPTcxLHFlPTcyLE9lPTczLFBlPTc0LFdlPTc1LGplPTc2LFhlPTc3LFplPTgwLFZlPTgxLF9lPTgzLHplPTg0LCRlPTg1LEF0PTg2LGV0PTg3LHR0PTg4LGl0PTg5LGF0PTkwLHJ0PTkxLHN0PTkyLG50PTkzLG90PTEsZ3Q9MjtsZXQgSXQ9d0EuV0FSTklOR1M7ZnVuY3Rpb24gZ2V0VmVyYm9zaXR5TGV2ZWwoKXtyZXR1cm4gSXR9ZnVuY3Rpb24gaW5mbyhlKXtJdD49d0EuSU5GT1MmJmNvbnNvbGUubG9nKGBJbmZvOiAke2V9YCl9ZnVuY3Rpb24gd2FybihlKXtJdD49d0EuV0FSTklOR1MmJmNvbnNvbGUubG9nKGBXYXJuaW5nOiAke2V9YCl9ZnVuY3Rpb24gdW5yZWFjaGFibGUoZSl7dGhyb3cgbmV3IEVycm9yKGUpfWZ1bmN0aW9uIGFzc2VydChlLHQpe2V8fHVucmVhY2hhYmxlKHQpfWZ1bmN0aW9uIGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwoZSx0PW51bGwsaT1udWxsKXtpZighZSlyZXR1cm4gbnVsbDt0cnl7aWYoaSYmInN0cmluZyI9PXR5cGVvZiBlKXtpZihpLmFkZERlZmF1bHRQcm90b2NvbCYmZS5zdGFydHNXaXRoKCJ3d3cuIikpe2NvbnN0IHQ9ZS5tYXRjaCgvXC4vZyk7dD8ubGVuZ3RoPj0yJiYoZT1gaHR0cDovLyR7ZX1gKX1pZihpLnRyeUNvbnZlcnRFbmNvZGluZyl0cnl7ZT1zdHJpbmdUb1VURjhTdHJpbmcoZSl9Y2F0Y2h7fX1jb25zdCBhPXQ/bmV3IFVSTChlLHQpOm5ldyBVUkwoZSk7aWYoZnVuY3Rpb24gX2lzVmFsaWRQcm90b2NvbChlKXtzd2l0Y2goZT8ucHJvdG9jb2wpe2Nhc2UiaHR0cDoiOmNhc2UiaHR0cHM6IjpjYXNlImZ0cDoiOmNhc2UibWFpbHRvOiI6Y2FzZSJ0ZWw6IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0oYSkpcmV0dXJuIGF9Y2F0Y2h7fXJldHVybiBudWxsfWZ1bmN0aW9uIHNoYWRvdyhlLHQsaSxhPSExKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTppLGVudW1lcmFibGU6IWEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiExfSk7cmV0dXJuIGl9Y29uc3QgY3Q9ZnVuY3Rpb24gQmFzZUV4Y2VwdGlvbkNsb3N1cmUoKXtmdW5jdGlvbiBCYXNlRXhjZXB0aW9uKGUsdCl7dGhpcy5tZXNzYWdlPWU7dGhpcy5uYW1lPXR9QmFzZUV4Y2VwdGlvbi5wcm90b3R5cGU9bmV3IEVycm9yO0Jhc2VFeGNlcHRpb24uY29uc3RydWN0b3I9QmFzZUV4Y2VwdGlvbjtyZXR1cm4gQmFzZUV4Y2VwdGlvbn0oKTtjbGFzcyBQYXNzd29yZEV4Y2VwdGlvbiBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiUGFzc3dvcmRFeGNlcHRpb24iKTt0aGlzLmNvZGU9dH19Y2xhc3MgVW5rbm93bkVycm9yRXhjZXB0aW9uIGV4dGVuZHMgY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLCJVbmtub3duRXJyb3JFeGNlcHRpb24iKTt0aGlzLmRldGFpbHM9dH19Y2xhc3MgSW52YWxpZFBERkV4Y2VwdGlvbiBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkludmFsaWRQREZFeGNlcHRpb24iKX19Y2xhc3MgTWlzc2luZ1BERkV4Y2VwdGlvbiBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIk1pc3NpbmdQREZFeGNlcHRpb24iKX19Y2xhc3MgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIGV4dGVuZHMgY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iKTt0aGlzLnN0YXR1cz10fX1jbGFzcyBGb3JtYXRFcnJvciBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkZvcm1hdEVycm9yIil9fWNsYXNzIEFib3J0RXhjZXB0aW9uIGV4dGVuZHMgY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiQWJvcnRFeGNlcHRpb24iKX19ZnVuY3Rpb24gYnl0ZXNUb1N0cmluZyhlKXsib2JqZWN0Ij09dHlwZW9mIGUmJnZvaWQgMCE9PWU/Lmxlbmd0aHx8dW5yZWFjaGFibGUoIkludmFsaWQgYXJndW1lbnQgZm9yIGJ5dGVzVG9TdHJpbmciKTtjb25zdCB0PWUubGVuZ3RoLGk9ODE5MjtpZih0PGkpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtjb25zdCBhPVtdO2ZvcihsZXQgcj0wO3I8dDtyKz1pKXtjb25zdCBzPU1hdGgubWluKHIraSx0KSxuPWUuc3ViYXJyYXkocixzKTthLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG4pKX1yZXR1cm4gYS5qb2luKCIiKX1mdW5jdGlvbiBzdHJpbmdUb0J5dGVzKGUpeyJzdHJpbmciIT10eXBlb2YgZSYmdW5yZWFjaGFibGUoIkludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXMiKTtjb25zdCB0PWUubGVuZ3RoLGk9bmV3IFVpbnQ4QXJyYXkodCk7Zm9yKGxldCBhPTA7YTx0OysrYSlpW2FdPTI1NSZlLmNoYXJDb2RlQXQoYSk7cmV0dXJuIGl9ZnVuY3Rpb24gc3RyaW5nMzIoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZSl9ZnVuY3Rpb24gb2JqZWN0U2l6ZShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkubGVuZ3RofWNsYXNzIEZlYXR1cmVUZXN0e3N0YXRpYyBnZXQgaXNMaXR0bGVFbmRpYW4oKXtyZXR1cm4gc2hhZG93KHRoaXMsImlzTGl0dGxlRW5kaWFuIixmdW5jdGlvbiBpc0xpdHRsZUVuZGlhbigpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoNCk7ZVswXT0xO3JldHVybiAxPT09bmV3IFVpbnQzMkFycmF5KGUuYnVmZmVyLDAsMSlbMF19KCkpfXN0YXRpYyBnZXQgaXNFdmFsU3VwcG9ydGVkKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc0V2YWxTdXBwb3J0ZWQiLGZ1bmN0aW9uIGlzRXZhbFN1cHBvcnRlZCgpe3RyeXtuZXcgRnVuY3Rpb24oIiIpO3JldHVybiEwfWNhdGNoe3JldHVybiExfX0oKSl9c3RhdGljIGdldCBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpe3JldHVybiBzaGFkb3codGhpcywiaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQiLCJ1bmRlZmluZWQiIT10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzKX1zdGF0aWMgZ2V0IHBsYXRmb3JtKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJiJzdHJpbmciPT10eXBlb2YgbmF2aWdhdG9yPy5wbGF0Zm9ybT9zaGFkb3codGhpcywicGxhdGZvcm0iLHtpc01hYzpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIk1hYyIpLGlzV2luZG93czpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIldpbiIpLGlzRmlyZWZveDoic3RyaW5nIj09dHlwZW9mIG5hdmlnYXRvcj8udXNlckFnZW50JiZuYXZpZ2F0b3IudXNlckFnZW50LmluY2x1ZGVzKCJGaXJlZm94Iil9KTpzaGFkb3codGhpcywicGxhdGZvcm0iLHtpc01hYzohMSxpc1dpbmRvd3M6ITEsaXNGaXJlZm94OiExfSl9c3RhdGljIGdldCBpc0NTU1JvdW5kU3VwcG9ydGVkKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc0NTU1JvdW5kU3VwcG9ydGVkIixnbG9iYWxUaGlzLkNTUz8uc3VwcG9ydHM/Ligid2lkdGg6IHJvdW5kKDEuNXB4LCAxcHgpIikpfX1jb25zdCBDdD1BcnJheS5mcm9tKEFycmF5KDI1Nikua2V5cygpLChlPT5lLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpKTtjbGFzcyBVdGlse3N0YXRpYyBtYWtlSGV4Q29sb3IoZSx0LGkpe3JldHVybmAjJHtDdFtlXX0ke0N0W3RdfSR7Q3RbaV19YH1zdGF0aWMgc2NhbGVNaW5NYXgoZSx0KXtsZXQgaTtpZihlWzBdKXtpZihlWzBdPDApe2k9dFswXTt0WzBdPXRbMl07dFsyXT1pfXRbMF0qPWVbMF07dFsyXSo9ZVswXTtpZihlWzNdPDApe2k9dFsxXTt0WzFdPXRbM107dFszXT1pfXRbMV0qPWVbM107dFszXSo9ZVszXX1lbHNle2k9dFswXTt0WzBdPXRbMV07dFsxXT1pO2k9dFsyXTt0WzJdPXRbM107dFszXT1pO2lmKGVbMV08MCl7aT10WzFdO3RbMV09dFszXTt0WzNdPWl9dFsxXSo9ZVsxXTt0WzNdKj1lWzFdO2lmKGVbMl08MCl7aT10WzBdO3RbMF09dFsyXTt0WzJdPWl9dFswXSo9ZVsyXTt0WzJdKj1lWzJdfXRbMF0rPWVbNF07dFsxXSs9ZVs1XTt0WzJdKz1lWzRdO3RbM10rPWVbNV19c3RhdGljIHRyYW5zZm9ybShlLHQpe3JldHVybltlWzBdKnRbMF0rZVsyXSp0WzFdLGVbMV0qdFswXStlWzNdKnRbMV0sZVswXSp0WzJdK2VbMl0qdFszXSxlWzFdKnRbMl0rZVszXSp0WzNdLGVbMF0qdFs0XStlWzJdKnRbNV0rZVs0XSxlWzFdKnRbNF0rZVszXSp0WzVdK2VbNV1dfXN0YXRpYyBhcHBseVRyYW5zZm9ybShlLHQpe3JldHVybltlWzBdKnRbMF0rZVsxXSp0WzJdK3RbNF0sZVswXSp0WzFdK2VbMV0qdFszXSt0WzVdXX1zdGF0aWMgYXBwbHlJbnZlcnNlVHJhbnNmb3JtKGUsdCl7Y29uc3QgaT10WzBdKnRbM10tdFsxXSp0WzJdO3JldHVyblsoZVswXSp0WzNdLWVbMV0qdFsyXSt0WzJdKnRbNV0tdFs0XSp0WzNdKS9pLCgtZVswXSp0WzFdK2VbMV0qdFswXSt0WzRdKnRbMV0tdFs1XSp0WzBdKS9pXX1zdGF0aWMgZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3goZSx0KXtjb25zdCBpPXRoaXMuYXBwbHlUcmFuc2Zvcm0oZSx0KSxhPXRoaXMuYXBwbHlUcmFuc2Zvcm0oZS5zbGljZSgyLDQpLHQpLHI9dGhpcy5hcHBseVRyYW5zZm9ybShbZVswXSxlWzNdXSx0KSxzPXRoaXMuYXBwbHlUcmFuc2Zvcm0oW2VbMl0sZVsxXV0sdCk7cmV0dXJuW01hdGgubWluKGlbMF0sYVswXSxyWzBdLHNbMF0pLE1hdGgubWluKGlbMV0sYVsxXSxyWzFdLHNbMV0pLE1hdGgubWF4KGlbMF0sYVswXSxyWzBdLHNbMF0pLE1hdGgubWF4KGlbMV0sYVsxXSxyWzFdLHNbMV0pXX1zdGF0aWMgaW52ZXJzZVRyYW5zZm9ybShlKXtjb25zdCB0PWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuW2VbM10vdCwtZVsxXS90LC1lWzJdL3QsZVswXS90LChlWzJdKmVbNV0tZVs0XSplWzNdKS90LChlWzRdKmVbMV0tZVs1XSplWzBdKS90XX1zdGF0aWMgc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUoZSl7Y29uc3QgdD1bZVswXSxlWzJdLGVbMV0sZVszXV0saT1lWzBdKnRbMF0rZVsxXSp0WzJdLGE9ZVswXSp0WzFdK2VbMV0qdFszXSxyPWVbMl0qdFswXStlWzNdKnRbMl0scz1lWzJdKnRbMV0rZVszXSp0WzNdLG49KGkrcykvMixvPU1hdGguc3FydCgoaStzKSoqMi00KihpKnMtciphKSkvMixnPW4rb3x8MSxjPW4tb3x8MTtyZXR1cm5bTWF0aC5zcXJ0KGcpLE1hdGguc3FydChjKV19c3RhdGljIG5vcm1hbGl6ZVJlY3QoZSl7Y29uc3QgdD1lLnNsaWNlKDApO2lmKGVbMF0+ZVsyXSl7dFswXT1lWzJdO3RbMl09ZVswXX1pZihlWzFdPmVbM10pe3RbMV09ZVszXTt0WzNdPWVbMV19cmV0dXJuIHR9c3RhdGljIGludGVyc2VjdChlLHQpe2NvbnN0IGk9TWF0aC5tYXgoTWF0aC5taW4oZVswXSxlWzJdKSxNYXRoLm1pbih0WzBdLHRbMl0pKSxhPU1hdGgubWluKE1hdGgubWF4KGVbMF0sZVsyXSksTWF0aC5tYXgodFswXSx0WzJdKSk7aWYoaT5hKXJldHVybiBudWxsO2NvbnN0IHI9TWF0aC5tYXgoTWF0aC5taW4oZVsxXSxlWzNdKSxNYXRoLm1pbih0WzFdLHRbM10pKSxzPU1hdGgubWluKE1hdGgubWF4KGVbMV0sZVszXSksTWF0aC5tYXgodFsxXSx0WzNdKSk7cmV0dXJuIHI+cz9udWxsOltpLHIsYSxzXX1zdGF0aWMjQShlLHQsaSxhLHIscyxuLG8sZyxjKXtpZihnPD0wfHxnPj0xKXJldHVybjtjb25zdCBDPTEtZyxoPWcqZyxsPWgqZyxRPUMqKEMqKEMqZSszKmcqdCkrMypoKmkpK2wqYSxFPUMqKEMqKEMqciszKmcqcykrMypoKm4pK2wqbztjWzBdPU1hdGgubWluKGNbMF0sUSk7Y1sxXT1NYXRoLm1pbihjWzFdLEUpO2NbMl09TWF0aC5tYXgoY1syXSxRKTtjWzNdPU1hdGgubWF4KGNbM10sRSl9c3RhdGljI2UoZSx0LGksYSxyLHMsbixvLGcsYyxDLGgpe2lmKE1hdGguYWJzKGcpPDFlLTEyKXtNYXRoLmFicyhjKT49MWUtMTImJnRoaXMuI0EoZSx0LGksYSxyLHMsbixvLC1DL2MsaCk7cmV0dXJufWNvbnN0IGw9YyoqMi00KkMqZztpZihsPDApcmV0dXJuO2NvbnN0IFE9TWF0aC5zcXJ0KGwpLEU9MipnO3RoaXMuI0EoZSx0LGksYSxyLHMsbixvLCgtYytRKS9FLGgpO3RoaXMuI0EoZSx0LGksYSxyLHMsbixvLCgtYy1RKS9FLGgpfXN0YXRpYyBiZXppZXJCb3VuZGluZ0JveChlLHQsaSxhLHIscyxuLG8sZyl7aWYoZyl7Z1swXT1NYXRoLm1pbihnWzBdLGUsbik7Z1sxXT1NYXRoLm1pbihnWzFdLHQsbyk7Z1syXT1NYXRoLm1heChnWzJdLGUsbik7Z1szXT1NYXRoLm1heChnWzNdLHQsbyl9ZWxzZSBnPVtNYXRoLm1pbihlLG4pLE1hdGgubWluKHQsbyksTWF0aC5tYXgoZSxuKSxNYXRoLm1heCh0LG8pXTt0aGlzLiNlKGUsaSxyLG4sdCxhLHMsbywzKigzKihpLXIpLWUrbiksNiooZS0yKmkrciksMyooaS1lKSxnKTt0aGlzLiNlKGUsaSxyLG4sdCxhLHMsbywzKigzKihhLXMpLXQrbyksNioodC0yKmErcyksMyooYS10KSxnKTtyZXR1cm4gZ319Y29uc3QgaHQ9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcyOCw3MTEsNzEwLDcyOSw3MzMsNzMxLDczMCw3MzIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsODIyNiw4MjI0LDgyMjUsODIzMCw4MjEyLDgyMTEsNDAyLDgyNjAsODI0OSw4MjUwLDg3MjIsODI0MCw4MjIyLDgyMjAsODIyMSw4MjE2LDgyMTcsODIxOCw4NDgyLDY0MjU3LDY0MjU4LDMyMSwzMzgsMzUyLDM3NiwzODEsMzA1LDMyMiwzMzksMzUzLDM4MiwwLDgzNjRdO2Z1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKGUpe2lmKGVbMF0+PSLDryIpe2xldCB0O2lmKCLDviI9PT1lWzBdJiYiw78iPT09ZVsxXSl7dD0idXRmLTE2YmUiO2UubGVuZ3RoJTI9PTEmJihlPWUuc2xpY2UoMCwtMSkpfWVsc2UgaWYoIsO/Ij09PWVbMF0mJiLDviI9PT1lWzFdKXt0PSJ1dGYtMTZsZSI7ZS5sZW5ndGglMj09MSYmKGU9ZS5zbGljZSgwLC0xKSl9ZWxzZSLDryI9PT1lWzBdJiYiwrsiPT09ZVsxXSYmIsK/Ij09PWVbMl0mJih0PSJ1dGYtOCIpO2lmKHQpdHJ5e2NvbnN0IGk9bmV3IFRleHREZWNvZGVyKHQse2ZhdGFsOiEwfSksYT1zdHJpbmdUb0J5dGVzKGUpLHI9aS5kZWNvZGUoYSk7cmV0dXJuIHIuaW5jbHVkZXMoIhsiKT9yLnJlcGxhY2VBbGwoL1x4MWJbXlx4MWJdKig/Olx4MWJ8JCkvZywiIik6cn1jYXRjaChlKXt3YXJuKGBzdHJpbmdUb1BERlN0cmluZzogIiR7ZX0iLmApfX1jb25zdCB0PVtdO2ZvcihsZXQgaT0wLGE9ZS5sZW5ndGg7aTxhO2krKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQoaSk7aWYoMjc9PT1yKXtmb3IoOysraTxhJiYyNyE9PWUuY2hhckNvZGVBdChpKTspO2NvbnRpbnVlfWNvbnN0IHM9aHRbcl07dC5wdXNoKHM/U3RyaW5nLmZyb21DaGFyQ29kZShzKTplLmNoYXJBdChpKSl9cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gc3RyaW5nVG9VVEY4U3RyaW5nKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGUpKX1mdW5jdGlvbiB1dGY4U3RyaW5nVG9TdHJpbmcoZSl7cmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlKSl9ZnVuY3Rpb24gaXNBcnJheUVxdWFsKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGk9MCxhPWUubGVuZ3RoO2k8YTtpKyspaWYoZVtpXSE9PXRbaV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZ2V0TW9kaWZpY2F0aW9uRGF0ZShlPW5ldyBEYXRlKXtyZXR1cm5bZS5nZXRVVENGdWxsWWVhcigpLnRvU3RyaW5nKCksKGUuZ2V0VVRDTW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKSxlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIildLmpvaW4oIiIpfWxldCBsdD1udWxsLEJ0PW51bGw7Y29uc3QgUXQ9MCxFdD0xLHV0PTIsZHQ9MyxmdD00LHB0PTUsbXQ9Nix5dD03LHd0PTg7X193ZWJwYWNrX3JlcXVpcmVfXygzMjE1KTtjb25zdCBidD1TeW1ib2woIkNJUkNVTEFSX1JFRiIpLER0PVN5bWJvbCgiRU9GIik7bGV0IEZ0PU9iamVjdC5jcmVhdGUobnVsbCksU3Q9T2JqZWN0LmNyZWF0ZShudWxsKSxrdD1PYmplY3QuY3JlYXRlKG51bGwpO2NsYXNzIE5hbWV7Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lPWV9c3RhdGljIGdldChlKXtyZXR1cm4gU3RbZV18fD1uZXcgTmFtZShlKX19Y2xhc3MgQ21ke2NvbnN0cnVjdG9yKGUpe3RoaXMuY21kPWV9c3RhdGljIGdldChlKXtyZXR1cm4gRnRbZV18fD1uZXcgQ21kKGUpfX1jb25zdCBSdD1mdW5jdGlvbiBub25TZXJpYWxpemFibGVDbG9zdXJlKCl7cmV0dXJuIFJ0fTtjbGFzcyBEaWN0e2NvbnN0cnVjdG9yKGU9bnVsbCl7dGhpcy5fbWFwPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy54cmVmPWU7dGhpcy5vYmpJZD1udWxsO3RoaXMuc3VwcHJlc3NFbmNyeXB0aW9uPSExO3RoaXMuX19ub25TZXJpYWxpemFibGVfXz1SdH1hc3NpZ25YcmVmKGUpe3RoaXMueHJlZj1lfWdldCBzaXplKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21hcCkubGVuZ3RofWdldChlLHQsaSl7bGV0IGE9dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PWEmJnZvaWQgMCE9PXQpe2E9dGhpcy5fbWFwW3RdO3ZvaWQgMD09PWEmJnZvaWQgMCE9PWkmJihhPXRoaXMuX21hcFtpXSl9cmV0dXJuIGEgaW5zdGFuY2VvZiBSZWYmJnRoaXMueHJlZj90aGlzLnhyZWYuZmV0Y2goYSx0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik6YX1hc3luYyBnZXRBc3luYyhlLHQsaSl7bGV0IGE9dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PWEmJnZvaWQgMCE9PXQpe2E9dGhpcy5fbWFwW3RdO3ZvaWQgMD09PWEmJnZvaWQgMCE9PWkmJihhPXRoaXMuX21hcFtpXSl9cmV0dXJuIGEgaW5zdGFuY2VvZiBSZWYmJnRoaXMueHJlZj90aGlzLnhyZWYuZmV0Y2hBc3luYyhhLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTphfWdldEFycmF5KGUsdCxpKXtsZXQgYT10aGlzLl9tYXBbZV07aWYodm9pZCAwPT09YSYmdm9pZCAwIT09dCl7YT10aGlzLl9tYXBbdF07dm9pZCAwPT09YSYmdm9pZCAwIT09aSYmKGE9dGhpcy5fbWFwW2ldKX1hIGluc3RhbmNlb2YgUmVmJiZ0aGlzLnhyZWYmJihhPXRoaXMueHJlZi5mZXRjaChhLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKSk7aWYoQXJyYXkuaXNBcnJheShhKSl7YT1hLnNsaWNlKCk7Zm9yKGxldCBlPTAsdD1hLmxlbmd0aDtlPHQ7ZSsrKWFbZV1pbnN0YW5jZW9mIFJlZiYmdGhpcy54cmVmJiYoYVtlXT10aGlzLnhyZWYuZmV0Y2goYVtlXSx0aGlzLnN1cHByZXNzRW5jcnlwdGlvbikpfXJldHVybiBhfWdldFJhdyhlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfWdldEtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbWFwKX1nZXRSYXdWYWx1ZXMoKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9tYXApfXNldChlLHQpe3RoaXMuX21hcFtlXT10fWhhcyhlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbWFwW2VdfWZvckVhY2goZSl7Zm9yKGNvbnN0IHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLmdldCh0KSl9c3RhdGljIGdldCBlbXB0eSgpe2NvbnN0IGU9bmV3IERpY3QobnVsbCk7ZS5zZXQ9KGUsdCk9Pnt1bnJlYWNoYWJsZSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpfTtyZXR1cm4gc2hhZG93KHRoaXMsImVtcHR5IixlKX1zdGF0aWMgbWVyZ2Uoe3hyZWY6ZSxkaWN0QXJyYXk6dCxtZXJnZVN1YkRpY3RzOmk9ITF9KXtjb25zdCBhPW5ldyBEaWN0KGUpLHI9bmV3IE1hcDtmb3IoY29uc3QgZSBvZiB0KWlmKGUgaW5zdGFuY2VvZiBEaWN0KWZvcihjb25zdFt0LGFdb2YgT2JqZWN0LmVudHJpZXMoZS5fbWFwKSl7bGV0IGU9ci5nZXQodCk7aWYodm9pZCAwPT09ZSl7ZT1bXTtyLnNldCh0LGUpfWVsc2UgaWYoIShpJiZhIGluc3RhbmNlb2YgRGljdCkpY29udGludWU7ZS5wdXNoKGEpfWZvcihjb25zdFt0LGldb2Ygcil7aWYoMT09PWkubGVuZ3RofHwhKGlbMF1pbnN0YW5jZW9mIERpY3QpKXthLl9tYXBbdF09aVswXTtjb250aW51ZX1jb25zdCByPW5ldyBEaWN0KGUpO2Zvcihjb25zdCBlIG9mIGkpZm9yKGNvbnN0W3QsaV1vZiBPYmplY3QuZW50cmllcyhlLl9tYXApKXZvaWQgMD09PXIuX21hcFt0XSYmKHIuX21hcFt0XT1pKTtyLnNpemU+MCYmKGEuX21hcFt0XT1yKX1yLmNsZWFyKCk7cmV0dXJuIGEuc2l6ZT4wP2E6RGljdC5lbXB0eX1jbG9uZSgpe2NvbnN0IGU9bmV3IERpY3QodGhpcy54cmVmKTtmb3IoY29uc3QgdCBvZiB0aGlzLmdldEtleXMoKSllLnNldCh0LHRoaXMuZ2V0UmF3KHQpKTtyZXR1cm4gZX1kZWxldGUoZSl7ZGVsZXRlIHRoaXMuX21hcFtlXX19Y2xhc3MgUmVme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5udW09ZTt0aGlzLmdlbj10fXRvU3RyaW5nKCl7cmV0dXJuIDA9PT10aGlzLmdlbj9gJHt0aGlzLm51bX1SYDpgJHt0aGlzLm51bX1SJHt0aGlzLmdlbn1gfXN0YXRpYyBmcm9tU3RyaW5nKGUpe2NvbnN0IHQ9a3RbZV07aWYodClyZXR1cm4gdDtjb25zdCBpPS9eKFxkKylSKFxkKikkLy5leGVjKGUpO3JldHVybiBpJiYiMCIhPT1pWzFdP2t0W2VdPW5ldyBSZWYocGFyc2VJbnQoaVsxXSksaVsyXT9wYXJzZUludChpWzJdKTowKTpudWxsfXN0YXRpYyBnZXQoZSx0KXtjb25zdCBpPTA9PT10P2Ake2V9UmA6YCR7ZX1SJHt0fWA7cmV0dXJuIGt0W2ldfHw9bmV3IFJlZihlLHQpfX1jbGFzcyBSZWZTZXR7Y29uc3RydWN0b3IoZT1udWxsKXt0aGlzLl9zZXQ9bmV3IFNldChlPy5fc2V0KX1oYXMoZSl7cmV0dXJuIHRoaXMuX3NldC5oYXMoZS50b1N0cmluZygpKX1wdXQoZSl7dGhpcy5fc2V0LmFkZChlLnRvU3RyaW5nKCkpfXJlbW92ZShlKXt0aGlzLl9zZXQuZGVsZXRlKGUudG9TdHJpbmcoKSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5fc2V0LnZhbHVlcygpfWNsZWFyKCl7dGhpcy5fc2V0LmNsZWFyKCl9fWNsYXNzIFJlZlNldENhY2hle2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXB9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fbWFwLnNpemV9Z2V0KGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUudG9TdHJpbmcoKSl9aGFzKGUpe3JldHVybiB0aGlzLl9tYXAuaGFzKGUudG9TdHJpbmcoKSl9cHV0KGUsdCl7dGhpcy5fbWFwLnNldChlLnRvU3RyaW5nKCksdCl9cHV0QWxpYXMoZSx0KXt0aGlzLl9tYXAuc2V0KGUudG9TdHJpbmcoKSx0aGlzLmdldCh0KSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5fbWFwLnZhbHVlcygpfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCl9Kml0ZW1zKCl7Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLl9tYXApeWllbGRbUmVmLmZyb21TdHJpbmcoZSksdF19fWZ1bmN0aW9uIGlzTmFtZShlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgTmFtZSYmKHZvaWQgMD09PXR8fGUubmFtZT09PXQpfWZ1bmN0aW9uIGlzQ21kKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBDbWQmJih2b2lkIDA9PT10fHxlLmNtZD09PXQpfWZ1bmN0aW9uIGlzRGljdChlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgRGljdCYmKHZvaWQgMD09PXR8fGlzTmFtZShlLmdldCgiVHlwZSIpLHQpKX1mdW5jdGlvbiBpc1JlZnNFcXVhbChlLHQpe3JldHVybiBlLm51bT09PXQubnVtJiZlLmdlbj09PXQuZ2VufWNsYXNzIEJhc2VTdHJlYW17Z2V0IGxlbmd0aCgpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBnZXR0ZXIgYGxlbmd0aGAgYWNjZXNzZWQiKX1nZXQgaXNFbXB0eSgpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBnZXR0ZXIgYGlzRW1wdHlgIGFjY2Vzc2VkIil9Z2V0IGlzRGF0YUxvYWRlZCgpe3JldHVybiBzaGFkb3codGhpcywiaXNEYXRhTG9hZGVkIiwhMCl9Z2V0Qnl0ZSgpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVgIGNhbGxlZCIpfWdldEJ5dGVzKGUpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVzYCBjYWxsZWQiKX1hc3luYyBnZXRJbWFnZURhdGEoZSx0KXtyZXR1cm4gdGhpcy5nZXRCeXRlcyhlLHQpfWFzeW5jIGFzeW5jR2V0Qnl0ZXMoKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBhc3luY0dldEJ5dGVzYCBjYWxsZWQiKX1nZXQgaXNBc3luYygpe3JldHVybiExfWdldCBjYW5Bc3luY0RlY29kZUltYWdlRnJvbUJ1ZmZlcigpe3JldHVybiExfXBlZWtCeXRlKCl7Y29uc3QgZT10aGlzLmdldEJ5dGUoKTstMSE9PWUmJnRoaXMucG9zLS07cmV0dXJuIGV9cGVla0J5dGVzKGUpe2NvbnN0IHQ9dGhpcy5nZXRCeXRlcyhlKTt0aGlzLnBvcy09dC5sZW5ndGg7cmV0dXJuIHR9Z2V0VWludDE2KCl7Y29uc3QgZT10aGlzLmdldEJ5dGUoKSx0PXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xPT09ZXx8LTE9PT10Py0xOihlPDw4KSt0fWdldEludDMyKCl7cmV0dXJuKHRoaXMuZ2V0Qnl0ZSgpPDwyNCkrKHRoaXMuZ2V0Qnl0ZSgpPDwxNikrKHRoaXMuZ2V0Qnl0ZSgpPDw4KSt0aGlzLmdldEJ5dGUoKX1nZXRCeXRlUmFuZ2UoZSx0KXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlUmFuZ2VgIGNhbGxlZCIpfWdldFN0cmluZyhlKXtyZXR1cm4gYnl0ZXNUb1N0cmluZyh0aGlzLmdldEJ5dGVzKGUpKX1za2lwKGUpe3RoaXMucG9zKz1lfHwxfXJlc2V0KCl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgcmVzZXRgIGNhbGxlZCIpfW1vdmVTdGFydCgpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYG1vdmVTdGFydGAgY2FsbGVkIil9bWFrZVN1YlN0cmVhbShlLHQsaT1udWxsKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBtYWtlU3ViU3RyZWFtYCBjYWxsZWQiKX1nZXRCYXNlU3RyZWFtcygpe3JldHVybiBudWxsfX1jb25zdCBOdD0vXlsxLTldXC5cZCQvO2Z1bmN0aW9uIGdldExvb2t1cFRhYmxlRmFjdG9yeShlKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oKXtpZihlKXt0PU9iamVjdC5jcmVhdGUobnVsbCk7ZSh0KTtlPW51bGx9cmV0dXJuIHR9fWNsYXNzIE1pc3NpbmdEYXRhRXhjZXB0aW9uIGV4dGVuZHMgY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihgTWlzc2luZyBkYXRhIFske2V9LCAke3R9KWAsIk1pc3NpbmdEYXRhRXhjZXB0aW9uIik7dGhpcy5iZWdpbj1lO3RoaXMuZW5kPXR9fWNsYXNzIFBhcnNlckVPRkV4Y2VwdGlvbiBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIlBhcnNlckVPRkV4Y2VwdGlvbiIpfX1jbGFzcyBYUmVmRW50cnlFeGNlcHRpb24gZXh0ZW5kcyBjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJYUmVmRW50cnlFeGNlcHRpb24iKX19Y2xhc3MgWFJlZlBhcnNlRXhjZXB0aW9uIGV4dGVuZHMgY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiWFJlZlBhcnNlRXhjZXB0aW9uIil9fWZ1bmN0aW9uIGFycmF5QnVmZmVyc1RvQnl0ZXMoZSl7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7aWYoMT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KGVbMF0pO2xldCBpPTA7Zm9yKGxldCBhPTA7YTx0O2ErKylpKz1lW2FdLmJ5dGVMZW5ndGg7Y29uc3QgYT1uZXcgVWludDhBcnJheShpKTtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8dDtpKyspe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoZVtpXSk7YS5zZXQodCxyKTtyKz10LmJ5dGVMZW5ndGh9cmV0dXJuIGF9ZnVuY3Rpb24gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7ZGljdDplLGtleTp0LGdldEFycmF5Omk9ITEsc3RvcFdoZW5Gb3VuZDphPSEwfSl7bGV0IHI7Y29uc3Qgcz1uZXcgUmVmU2V0O2Zvcig7ZSBpbnN0YW5jZW9mIERpY3QmJighZS5vYmpJZHx8IXMuaGFzKGUub2JqSWQpKTspe2Uub2JqSWQmJnMucHV0KGUub2JqSWQpO2NvbnN0IG49aT9lLmdldEFycmF5KHQpOmUuZ2V0KHQpO2lmKHZvaWQgMCE9PW4pe2lmKGEpcmV0dXJuIG47KHJ8fD1bXSkucHVzaChuKX1lPWUuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gcn1jb25zdCBHdD1bIiIsIkMiLCJDQyIsIkNDQyIsIkNEIiwiRCIsIkRDIiwiRENDIiwiRENDQyIsIkNNIiwiIiwiWCIsIlhYIiwiWFhYIiwiWEwiLCJMIiwiTFgiLCJMWFgiLCJMWFhYIiwiWEMiLCIiLCJJIiwiSUkiLCJJSUkiLCJJViIsIlYiLCJWSSIsIlZJSSIsIlZJSUkiLCJJWCJdO2Z1bmN0aW9uIHRvUm9tYW5OdW1lcmFscyhlLHQ9ITEpe2Fzc2VydChOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjAsIlRoZSBudW1iZXIgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4iKTtjb25zdCBpPVtdO2xldCBhO2Zvcig7ZT49MWUzOyl7ZS09MWUzO2kucHVzaCgiTSIpfWE9ZS8xMDB8MDtlJT0xMDA7aS5wdXNoKEd0W2FdKTthPWUvMTB8MDtlJT0xMDtpLnB1c2goR3RbMTArYV0pO2kucHVzaChHdFsyMCtlXSk7Y29uc3Qgcj1pLmpvaW4oIiIpO3JldHVybiB0P3IudG9Mb3dlckNhc2UoKTpyfWZ1bmN0aW9uIGxvZzIoZSl7cmV0dXJuIGU8PTA/MDpNYXRoLmNlaWwoTWF0aC5sb2cyKGUpKX1mdW5jdGlvbiByZWFkSW50OChlLHQpe3JldHVybiBlW3RdPDwyND4+MjR9ZnVuY3Rpb24gcmVhZFVpbnQxNihlLHQpe3JldHVybiBlW3RdPDw4fGVbdCsxXX1mdW5jdGlvbiByZWFkVWludDMyKGUsdCl7cmV0dXJuKGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXSk+Pj4wfWZ1bmN0aW9uIGlzV2hpdGVTcGFjZShlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTM9PT1lfHwxMD09PWV9ZnVuY3Rpb24gaXNOdW1iZXJBcnJheShlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpPyhudWxsPT09dHx8ZS5sZW5ndGg9PT10KSYmZS5ldmVyeSgoZT0+Im51bWJlciI9PXR5cGVvZiBlKSk6QXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYoMD09PWUubGVuZ3RofHwibnVtYmVyIj09dHlwZW9mIGVbMF0pJiYobnVsbD09PXR8fGUubGVuZ3RoPT09dCl9ZnVuY3Rpb24gbG9va3VwTWF0cml4KGUsdCl7cmV0dXJuIGlzTnVtYmVyQXJyYXkoZSw2KT9lOnR9ZnVuY3Rpb24gbG9va3VwUmVjdChlLHQpe3JldHVybiBpc051bWJlckFycmF5KGUsNCk/ZTp0fWZ1bmN0aW9uIGxvb2t1cE5vcm1hbFJlY3QoZSx0KXtyZXR1cm4gaXNOdW1iZXJBcnJheShlLDQpP1V0aWwubm9ybWFsaXplUmVjdChlKTp0fWZ1bmN0aW9uIHBhcnNlWEZBUGF0aChlKXtjb25zdCB0PS8oLispXFsoXGQrKVxdJC87cmV0dXJuIGUuc3BsaXQoIi4iKS5tYXAoKGU9Pntjb25zdCBpPWUubWF0Y2godCk7cmV0dXJuIGk/e25hbWU6aVsxXSxwb3M6cGFyc2VJbnQoaVsyXSwxMCl9OntuYW1lOmUscG9zOjB9fSkpfWZ1bmN0aW9uIGVzY2FwZVBERk5hbWUoZSl7Y29uc3QgdD1bXTtsZXQgaT0wO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQoYSk7aWYocjwzM3x8cj4xMjZ8fDM1PT09cnx8NDA9PT1yfHw0MT09PXJ8fDYwPT09cnx8NjI9PT1yfHw5MT09PXJ8fDkzPT09cnx8MTIzPT09cnx8MTI1PT09cnx8NDc9PT1yfHwzNz09PXIpe2k8YSYmdC5wdXNoKGUuc3Vic3RyaW5nKGksYSkpO3QucHVzaChgIyR7ci50b1N0cmluZygxNil9YCk7aT1hKzF9fWlmKDA9PT10Lmxlbmd0aClyZXR1cm4gZTtpPGUubGVuZ3RoJiZ0LnB1c2goZS5zdWJzdHJpbmcoaSxlLmxlbmd0aCkpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIGVzY2FwZVN0cmluZyhlKXtyZXR1cm4gZS5yZXBsYWNlQWxsKC8oWygpXFxcblxyXSkvZywoZT0+IlxuIj09PWU/IlxcbiI6IlxyIj09PWU/IlxcciI6YFxcJHtlfWApKX1mdW5jdGlvbiBfY29sbGVjdEpTKGUsdCxpLGEpe2lmKCFlKXJldHVybjtsZXQgcj1udWxsO2lmKGUgaW5zdGFuY2VvZiBSZWYpe2lmKGEuaGFzKGUpKXJldHVybjtyPWU7YS5wdXQocik7ZT10LmZldGNoKGUpfWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGNvbnN0IHIgb2YgZSlfY29sbGVjdEpTKHIsdCxpLGEpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIERpY3Qpe2lmKGlzTmFtZShlLmdldCgiUyIpLCJKYXZhU2NyaXB0Iikpe2NvbnN0IHQ9ZS5nZXQoIkpTIik7bGV0IGE7dCBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/YT10LmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgdCYmKGE9dCk7YSYmPXN0cmluZ1RvUERGU3RyaW5nKGEpLnJlcGxhY2VBbGwoIlwwIiwiIik7YSYmaS5wdXNoKGEpfV9jb2xsZWN0SlMoZS5nZXRSYXcoIk5leHQiKSx0LGksYSl9ciYmYS5yZW1vdmUocil9ZnVuY3Rpb24gY29sbGVjdEFjdGlvbnMoZSx0LGkpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKSxyPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6IkFBIixzdG9wV2hlbkZvdW5kOiExfSk7aWYocilmb3IobGV0IHQ9ci5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3Qgcz1yW3RdO2lmKHMgaW5zdGFuY2VvZiBEaWN0KWZvcihjb25zdCB0IG9mIHMuZ2V0S2V5cygpKXtjb25zdCByPWlbdF07aWYoIXIpY29udGludWU7Y29uc3Qgbj1bXTtfY29sbGVjdEpTKHMuZ2V0UmF3KHQpLGUsbixuZXcgUmVmU2V0KTtuLmxlbmd0aD4wJiYoYVtyXT1uKX19aWYodC5oYXMoIkEiKSl7Y29uc3QgaT1bXTtfY29sbGVjdEpTKHQuZ2V0KCJBIiksZSxpLG5ldyBSZWZTZXQpO2kubGVuZ3RoPjAmJihhLkFjdGlvbj1pKX1yZXR1cm4gb2JqZWN0U2l6ZShhKT4wP2E6bnVsbH1jb25zdCB4dD17NjA6IiZsdDsiLDYyOiImZ3Q7IiwzODoiJmFtcDsiLDM0OiImcXVvdDsiLDM5OiImYXBvczsifTtmdW5jdGlvbipjb2RlUG9pbnRJdGVyKGUpe2ZvcihsZXQgdD0wLGk9ZS5sZW5ndGg7dDxpO3QrKyl7Y29uc3QgaT1lLmNvZGVQb2ludEF0KHQpO2k+NTUyOTUmJihpPDU3MzQ0fHxpPjY1NTMzKSYmdCsrO3lpZWxkIGl9fWZ1bmN0aW9uIGVuY29kZVRvWG1sU3RyaW5nKGUpe2NvbnN0IHQ9W107bGV0IGk9MDtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZS5jb2RlUG9pbnRBdChhKTtpZigzMjw9ciYmcjw9MTI2KXtjb25zdCBzPXh0W3JdO2lmKHMpe2k8YSYmdC5wdXNoKGUuc3Vic3RyaW5nKGksYSkpO3QucHVzaChzKTtpPWErMX19ZWxzZXtpPGEmJnQucHVzaChlLnN1YnN0cmluZyhpLGEpKTt0LnB1c2goYCYjeCR7ci50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX07YCk7cj41NTI5NSYmKHI8NTczNDR8fHI+NjU1MzMpJiZhKys7aT1hKzF9fWlmKDA9PT10Lmxlbmd0aClyZXR1cm4gZTtpPGUubGVuZ3RoJiZ0LnB1c2goZS5zdWJzdHJpbmcoaSxlLmxlbmd0aCkpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIHZhbGlkYXRlRm9udE5hbWUoZSx0PSExKXtjb25zdCBpPS9eKCJ8JykuKigifCcpJC8uZXhlYyhlKTtpZihpJiZpWzFdPT09aVsyXSl7aWYobmV3IFJlZ0V4cChgW15cXFxcXSR7aVsxXX1gKS50ZXN0KGUuc2xpY2UoMSwtMSkpKXt0JiZ3YXJuKGBGb250RmFtaWx5IGNvbnRhaW5zIHVuZXNjYXBlZCAke2lbMV19OiAke2V9LmApO3JldHVybiExfX1lbHNlIGZvcihjb25zdCBpIG9mIGUuc3BsaXQoL1sgXHRdKy8pKWlmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QoaSl8fCEvXltcdy1cXF0rJC8udGVzdChpKSl7dCYmd2FybihgRm9udEZhbWlseSBjb250YWlucyBpbnZhbGlkIDxjdXN0b20taWRlbnQ+OiAke2V9LmApO3JldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHZhbGlkYXRlQ1NTRm9udChlKXtjb25zdCB0PW5ldyBTZXQoWyIxMDAiLCIyMDAiLCIzMDAiLCI0MDAiLCI1MDAiLCI2MDAiLCI3MDAiLCI4MDAiLCI5MDAiLCIxMDAwIiwibm9ybWFsIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiXSkse2ZvbnRGYW1pbHk6aSxmb250V2VpZ2h0OmEsaXRhbGljQW5nbGU6cn09ZTtpZighdmFsaWRhdGVGb250TmFtZShpLCEwKSlyZXR1cm4hMTtjb25zdCBzPWE/YS50b1N0cmluZygpOiIiO2UuZm9udFdlaWdodD10LmhhcyhzKT9zOiI0MDAiO2NvbnN0IG49cGFyc2VGbG9hdChyKTtlLml0YWxpY0FuZ2xlPWlzTmFOKG4pfHxuPC05MHx8bj45MD8iMTQiOnIudG9TdHJpbmcoKTtyZXR1cm4hMH1mdW5jdGlvbiByZWNvdmVySnNVUkwoZSl7Y29uc3QgdD1uZXcgUmVnRXhwKCJeXFxzKigiK1siYXBwLmxhdW5jaFVSTCIsIndpbmRvdy5vcGVuIiwieGZhLmhvc3QuZ290b1VSTCJdLmpvaW4oInwiKS5yZXBsYWNlQWxsKCIuIiwiXFwuIikrIilcXCgoPzonfFwiKShbXidcIl0qKSg/Oid8XCIpKD86LFxccyooXFx3KylcXCl8XFwpKSIsImkiKS5leGVjKGUpO2lmKHQ/LlsyXSl7Y29uc3QgZT10WzJdO2xldCBpPSExOyJ0cnVlIj09PXRbM10mJiJhcHAubGF1bmNoVVJMIj09PXRbMV0mJihpPSEwKTtyZXR1cm57dXJsOmUsbmV3V2luZG93Oml9fXJldHVybiBudWxsfWZ1bmN0aW9uIG51bWJlclRvU3RyaW5nKGUpe2lmKE51bWJlci5pc0ludGVnZXIoZSkpcmV0dXJuIGUudG9TdHJpbmcoKTtjb25zdCB0PU1hdGgucm91bmQoMTAwKmUpO3JldHVybiB0JTEwMD09MD8odC8xMDApLnRvU3RyaW5nKCk6dCUxMD09MD9lLnRvRml4ZWQoMSk6ZS50b0ZpeGVkKDIpfWZ1bmN0aW9uIGdldE5ld0Fubm90YXRpb25zTWFwKGUpe2lmKCFlKXJldHVybiBudWxsO2NvbnN0IHQ9bmV3IE1hcDtmb3IoY29uc3RbaSxhXW9mIGUpe2lmKCFpLnN0YXJ0c1dpdGgoZCkpY29udGludWU7bGV0IGU9dC5nZXQoYS5wYWdlSW5kZXgpO2lmKCFlKXtlPVtdO3Quc2V0KGEucGFnZUluZGV4LGUpfWUucHVzaChhKX1yZXR1cm4gdC5zaXplPjA/dDpudWxsfWZ1bmN0aW9uIHN0cmluZ1RvQXNjaWlPclVURjE2QkUoZSl7cmV0dXJuIGZ1bmN0aW9uIGlzQXNjaWkoZSl7cmV0dXJuL15bXHgwMC1ceDdGXSokLy50ZXN0KGUpfShlKT9lOnN0cmluZ1RvVVRGMTZTdHJpbmcoZSwhMCl9ZnVuY3Rpb24gc3RyaW5nVG9VVEYxNkhleFN0cmluZyhlKXtjb25zdCB0PVtdO2ZvcihsZXQgaT0wLGE9ZS5sZW5ndGg7aTxhO2krKyl7Y29uc3QgYT1lLmNoYXJDb2RlQXQoaSk7dC5wdXNoKChhPj44JjI1NSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSwoMjU1JmEpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpfXJldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZTdHJpbmcoZSx0PSExKXtjb25zdCBpPVtdO3QmJmkucHVzaCgiw77DvyIpO2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrKyl7Y29uc3QgYT1lLmNoYXJDb2RlQXQodCk7aS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYT4+OCYyNTUpLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmEpKX1yZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBnZXRSb3RhdGlvbk1hdHJpeChlLHQsaSl7c3dpdGNoKGUpe2Nhc2UgOTA6cmV0dXJuWzAsMSwtMSwwLHQsMF07Y2FzZSAxODA6cmV0dXJuWy0xLDAsMCwtMSx0LGldO2Nhc2UgMjcwOnJldHVyblswLC0xLDEsMCwwLGldO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdGF0aW9uIil9fWZ1bmN0aW9uIGdldFNpemVJbkJ5dGVzKGUpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5jZWlsKE1hdGgubG9nMigxK2UpKS84KX1jbGFzcyBTdHJlYW0gZXh0ZW5kcyBCYXNlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxpLGEpe3N1cGVyKCk7dGhpcy5ieXRlcz1lIGluc3RhbmNlb2YgVWludDhBcnJheT9lOm5ldyBVaW50OEFycmF5KGUpO3RoaXMuc3RhcnQ9dHx8MDt0aGlzLnBvcz10aGlzLnN0YXJ0O3RoaXMuZW5kPXQraXx8dGhpcy5ieXRlcy5sZW5ndGg7dGhpcy5kaWN0PWF9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0fWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmxlbmd0aH1nZXRCeXRlKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ5dGVzW3RoaXMucG9zKytdfWdldEJ5dGVzKGUpe2NvbnN0IHQ9dGhpcy5ieXRlcyxpPXRoaXMucG9zLGE9dGhpcy5lbmQ7aWYoIWUpcmV0dXJuIHQuc3ViYXJyYXkoaSxhKTtsZXQgcj1pK2U7cj5hJiYocj1hKTt0aGlzLnBvcz1yO3JldHVybiB0LnN1YmFycmF5KGkscil9Z2V0Qnl0ZVJhbmdlKGUsdCl7ZTwwJiYoZT0wKTt0PnRoaXMuZW5kJiYodD10aGlzLmVuZCk7cmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkoZSx0KX1yZXNldCgpe3RoaXMucG9zPXRoaXMuc3RhcnR9bW92ZVN0YXJ0KCl7dGhpcy5zdGFydD10aGlzLnBvc31tYWtlU3ViU3RyZWFtKGUsdCxpPW51bGwpe3JldHVybiBuZXcgU3RyZWFtKHRoaXMuYnl0ZXMuYnVmZmVyLGUsdCxpKX19Y2xhc3MgU3RyaW5nU3RyZWFtIGV4dGVuZHMgU3RyZWFte2NvbnN0cnVjdG9yKGUpe3N1cGVyKHN0cmluZ1RvQnl0ZXMoZSkpfX1jbGFzcyBOdWxsU3RyZWFtIGV4dGVuZHMgU3RyZWFte2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpbnQ4QXJyYXkoMCkpfX1jbGFzcyBDaHVua2VkU3RyZWFtIGV4dGVuZHMgU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxpKXtzdXBlcihuZXcgVWludDhBcnJheShlKSwwLGUsbnVsbCk7dGhpcy5jaHVua1NpemU9dDt0aGlzLl9sb2FkZWRDaHVua3M9bmV3IFNldDt0aGlzLm51bUNodW5rcz1NYXRoLmNlaWwoZS90KTt0aGlzLm1hbmFnZXI9aTt0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wO3RoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bms9LTF9Z2V0TWlzc2luZ0NodW5rcygpe2NvbnN0IGU9W107Zm9yKGxldCB0PTAsaT10aGlzLm51bUNodW5rczt0PGk7Kyt0KXRoaXMuX2xvYWRlZENodW5rcy5oYXModCl8fGUucHVzaCh0KTtyZXR1cm4gZX1nZXQgbnVtQ2h1bmtzTG9hZGVkKCl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5zaXplfWdldCBpc0RhdGFMb2FkZWQoKXtyZXR1cm4gdGhpcy5udW1DaHVua3NMb2FkZWQ9PT10aGlzLm51bUNodW5rc31vblJlY2VpdmVEYXRhKGUsdCl7Y29uc3QgaT10aGlzLmNodW5rU2l6ZTtpZihlJWkhPTApdGhyb3cgbmV3IEVycm9yKGBCYWQgYmVnaW4gb2Zmc2V0OiAke2V9YCk7Y29uc3QgYT1lK3QuYnl0ZUxlbmd0aDtpZihhJWkhPTAmJmEhPT10aGlzLmJ5dGVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYEJhZCBlbmQgb2Zmc2V0OiAke2F9YCk7dGhpcy5ieXRlcy5zZXQobmV3IFVpbnQ4QXJyYXkodCksZSk7Y29uc3Qgcj1NYXRoLmZsb29yKGUvaSkscz1NYXRoLmZsb29yKChhLTEpL2kpKzE7Zm9yKGxldCBlPXI7ZTxzOysrZSl0aGlzLl9sb2FkZWRDaHVua3MuYWRkKGUpfW9uUmVjZWl2ZVByb2dyZXNzaXZlRGF0YShlKXtsZXQgdD10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aDtjb25zdCBpPU1hdGguZmxvb3IodC90aGlzLmNodW5rU2l6ZSk7dGhpcy5ieXRlcy5zZXQobmV3IFVpbnQ4QXJyYXkoZSksdCk7dCs9ZS5ieXRlTGVuZ3RoO3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPXQ7Y29uc3QgYT10Pj10aGlzLmVuZD90aGlzLm51bUNodW5rczpNYXRoLmZsb29yKHQvdGhpcy5jaHVua1NpemUpO2ZvcihsZXQgZT1pO2U8YTsrK2UpdGhpcy5fbG9hZGVkQ2h1bmtzLmFkZChlKX1lbnN1cmVCeXRlKGUpe2lmKGU8dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuO2NvbnN0IHQ9TWF0aC5mbG9vcihlL3RoaXMuY2h1bmtTaXplKTtpZighKHQ+dGhpcy5udW1DaHVua3MpJiZ0IT09dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuayl7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXModCkpdGhyb3cgbmV3IE1pc3NpbmdEYXRhRXhjZXB0aW9uKGUsZSsxKTt0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rPXR9fWVuc3VyZVJhbmdlKGUsdCl7aWYoZT49dClyZXR1cm47aWYodDw9dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpcmV0dXJuO2NvbnN0IGk9TWF0aC5mbG9vcihlL3RoaXMuY2h1bmtTaXplKTtpZihpPnRoaXMubnVtQ2h1bmtzKXJldHVybjtjb25zdCBhPU1hdGgubWluKE1hdGguZmxvb3IoKHQtMSkvdGhpcy5jaHVua1NpemUpKzEsdGhpcy5udW1DaHVua3MpO2ZvcihsZXQgcj1pO3I8YTsrK3IpaWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMocikpdGhyb3cgbmV3IE1pc3NpbmdEYXRhRXhjZXB0aW9uKGUsdCl9bmV4dEVtcHR5Q2h1bmsoZSl7Y29uc3QgdD10aGlzLm51bUNodW5rcztmb3IobGV0IGk9MDtpPHQ7KytpKXtjb25zdCBhPShlK2kpJXQ7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMoYSkpcmV0dXJuIGF9cmV0dXJuIG51bGx9aGFzQ2h1bmsoZSl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5oYXMoZSl9Z2V0Qnl0ZSgpe2NvbnN0IGU9dGhpcy5wb3M7aWYoZT49dGhpcy5lbmQpcmV0dXJuLTE7ZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKTtyZXR1cm4gdGhpcy5ieXRlc1t0aGlzLnBvcysrXX1nZXRCeXRlcyhlKXtjb25zdCB0PXRoaXMuYnl0ZXMsaT10aGlzLnBvcyxhPXRoaXMuZW5kO2lmKCFlKXthPnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGksYSk7cmV0dXJuIHQuc3ViYXJyYXkoaSxhKX1sZXQgcj1pK2U7cj5hJiYocj1hKTtyPnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGkscik7dGhpcy5wb3M9cjtyZXR1cm4gdC5zdWJhcnJheShpLHIpfWdldEJ5dGVSYW5nZShlLHQpe2U8MCYmKGU9MCk7dD50aGlzLmVuZCYmKHQ9dGhpcy5lbmQpO3Q+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoZSx0KTtyZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfW1ha2VTdWJTdHJlYW0oZSx0LGk9bnVsbCl7dD9lK3Q+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoZSxlK3QpOmU+PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZUJ5dGUoZSk7ZnVuY3Rpb24gQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbSgpe31DaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHRoaXMpO0NodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlLmdldE1pc3NpbmdDaHVua3M9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuY2h1bmtTaXplLHQ9TWF0aC5mbG9vcih0aGlzLnN0YXJ0L2UpLGk9TWF0aC5mbG9vcigodGhpcy5lbmQtMSkvZSkrMSxhPVtdO2ZvcihsZXQgZT10O2U8aTsrK2UpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhlKXx8YS5wdXNoKGUpO3JldHVybiBhfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbS5wcm90b3R5cGUsImlzRGF0YUxvYWRlZCIse2dldCgpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfHwwPT09dGhpcy5nZXRNaXNzaW5nQ2h1bmtzKCkubGVuZ3RofSxjb25maWd1cmFibGU6ITB9KTtjb25zdCBhPW5ldyBDaHVua2VkU3RyZWFtU3Vic3RyZWFtO2EucG9zPWEuc3RhcnQ9ZTthLmVuZD1lK3R8fHRoaXMuZW5kO2EuZGljdD1pO3JldHVybiBhfWdldEJhc2VTdHJlYW1zKCl7cmV0dXJuW3RoaXNdfX1jbGFzcyBDaHVua2VkU3RyZWFtTWFuYWdlcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMubGVuZ3RoPXQubGVuZ3RoO3RoaXMuY2h1bmtTaXplPXQucmFuZ2VDaHVua1NpemU7dGhpcy5zdHJlYW09bmV3IENodW5rZWRTdHJlYW0odGhpcy5sZW5ndGgsdGhpcy5jaHVua1NpemUsdGhpcyk7dGhpcy5wZGZOZXR3b3JrU3RyZWFtPWU7dGhpcy5kaXNhYmxlQXV0b0ZldGNoPXQuZGlzYWJsZUF1dG9GZXRjaDt0aGlzLm1zZ0hhbmRsZXI9dC5tc2dIYW5kbGVyO3RoaXMuY3VyclJlcXVlc3RJZD0wO3RoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdD1uZXcgTWFwO3RoaXMuX3JlcXVlc3RzQnlDaHVuaz1uZXcgTWFwO3RoaXMuX3Byb21pc2VzQnlSZXF1ZXN0PW5ldyBNYXA7dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9MDt0aGlzLmFib3J0ZWQ9ITE7dGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eT1Qcm9taXNlLndpdGhSZXNvbHZlcnMoKX1zZW5kUmVxdWVzdChlLHQpe2NvbnN0IGk9dGhpcy5wZGZOZXR3b3JrU3RyZWFtLmdldFJhbmdlUmVhZGVyKGUsdCk7aS5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8KGkub25Qcm9ncmVzcz10aGlzLm9uUHJvZ3Jlc3MuYmluZCh0aGlzKSk7bGV0IGE9W10scj0wO3JldHVybiBuZXcgUHJvbWlzZSgoKGUsdCk9Pntjb25zdCByZWFkQ2h1bms9KHt2YWx1ZTpzLGRvbmU6bn0pPT57dHJ5e2lmKG4pe2NvbnN0IHQ9YXJyYXlCdWZmZXJzVG9CeXRlcyhhKTthPW51bGw7ZSh0KTtyZXR1cm59cis9cy5ieXRlTGVuZ3RoO2kuaXNTdHJlYW1pbmdTdXBwb3J0ZWQmJnRoaXMub25Qcm9ncmVzcyh7bG9hZGVkOnJ9KTthLnB1c2gocyk7aS5yZWFkKCkudGhlbihyZWFkQ2h1bmssdCl9Y2F0Y2goZSl7dChlKX19O2kucmVhZCgpLnRoZW4ocmVhZENodW5rLHQpfSkpLnRoZW4oKHQ9Pnt0aGlzLmFib3J0ZWR8fHRoaXMub25SZWNlaXZlRGF0YSh7Y2h1bms6dCxiZWdpbjplfSl9KSl9cmVxdWVzdEFsbENodW5rcyhlPSExKXtpZighZSl7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRNaXNzaW5nQ2h1bmtzKCk7dGhpcy5fcmVxdWVzdENodW5rcyhlKX1yZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eS5wcm9taXNlfV9yZXF1ZXN0Q2h1bmtzKGUpe2NvbnN0IHQ9dGhpcy5jdXJyUmVxdWVzdElkKyssaT1uZXcgU2V0O3RoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5zZXQodCxpKTtmb3IoY29uc3QgdCBvZiBlKXRoaXMuc3RyZWFtLmhhc0NodW5rKHQpfHxpLmFkZCh0KTtpZigwPT09aS5zaXplKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtjb25zdCBhPVByb21pc2Uud2l0aFJlc29sdmVycygpO3RoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LnNldCh0LGEpO2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgb2YgaSl7bGV0IGk9dGhpcy5fcmVxdWVzdHNCeUNodW5rLmdldChlKTtpZighaSl7aT1bXTt0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuc2V0KGUsaSk7ci5wdXNoKGUpfWkucHVzaCh0KX1pZihyLmxlbmd0aD4wKXtjb25zdCBlPXRoaXMuZ3JvdXBDaHVua3Mocik7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT10LmJlZ2luQ2h1bmsqdGhpcy5jaHVua1NpemUsaT1NYXRoLm1pbih0LmVuZENodW5rKnRoaXMuY2h1bmtTaXplLHRoaXMubGVuZ3RoKTt0aGlzLnNlbmRSZXF1ZXN0KGUsaSkuY2F0Y2goYS5yZWplY3QpfX1yZXR1cm4gYS5wcm9taXNlLmNhdGNoKChlPT57aWYoIXRoaXMuYWJvcnRlZCl0aHJvdyBlfSkpfWdldFN0cmVhbSgpe3JldHVybiB0aGlzLnN0cmVhbX1yZXF1ZXN0UmFuZ2UoZSx0KXt0PU1hdGgubWluKHQsdGhpcy5sZW5ndGgpO2NvbnN0IGk9dGhpcy5nZXRCZWdpbkNodW5rKGUpLGE9dGhpcy5nZXRFbmRDaHVuayh0KSxyPVtdO2ZvcihsZXQgZT1pO2U8YTsrK2Upci5wdXNoKGUpO3JldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKHIpfXJlcXVlc3RSYW5nZXMoZT1bXSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgaSBvZiBlKXtjb25zdCBlPXRoaXMuZ2V0QmVnaW5DaHVuayhpLmJlZ2luKSxhPXRoaXMuZ2V0RW5kQ2h1bmsoaS5lbmQpO2ZvcihsZXQgaT1lO2k8YTsrK2kpdC5pbmNsdWRlcyhpKXx8dC5wdXNoKGkpfXQuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSkpO3JldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKHQpfWdyb3VwQ2h1bmtzKGUpe2NvbnN0IHQ9W107bGV0IGk9LTEsYT0tMTtmb3IobGV0IHI9MCxzPWUubGVuZ3RoO3I8czsrK3Ipe2NvbnN0IHM9ZVtyXTtpPDAmJihpPXMpO2lmKGE+PTAmJmErMSE9PXMpe3QucHVzaCh7YmVnaW5DaHVuazppLGVuZENodW5rOmErMX0pO2k9c31yKzE9PT1lLmxlbmd0aCYmdC5wdXNoKHtiZWdpbkNodW5rOmksZW5kQ2h1bms6cysxfSk7YT1zfXJldHVybiB0fW9uUHJvZ3Jlc3MoZSl7dGhpcy5tc2dIYW5kbGVyLnNlbmQoIkRvY1Byb2dyZXNzIix7bG9hZGVkOnRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCp0aGlzLmNodW5rU2l6ZStlLmxvYWRlZCx0b3RhbDp0aGlzLmxlbmd0aH0pfW9uUmVjZWl2ZURhdGEoZSl7Y29uc3QgdD1lLmNodW5rLGk9dm9pZCAwPT09ZS5iZWdpbixhPWk/dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg6ZS5iZWdpbixyPWErdC5ieXRlTGVuZ3RoLHM9TWF0aC5mbG9vcihhL3RoaXMuY2h1bmtTaXplKSxuPXI8dGhpcy5sZW5ndGg/TWF0aC5mbG9vcihyL3RoaXMuY2h1bmtTaXplKTpNYXRoLmNlaWwoci90aGlzLmNodW5rU2l6ZSk7aWYoaSl7dGhpcy5zdHJlYW0ub25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKHQpO3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPXJ9ZWxzZSB0aGlzLnN0cmVhbS5vblJlY2VpdmVEYXRhKGEsdCk7dGhpcy5zdHJlYW0uaXNEYXRhTG9hZGVkJiZ0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlc29sdmUodGhpcy5zdHJlYW0pO2NvbnN0IG89W107Zm9yKGxldCBlPXM7ZTxuOysrZSl7Y29uc3QgdD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGUpO2lmKHQpe3RoaXMuX3JlcXVlc3RzQnlDaHVuay5kZWxldGUoZSk7Zm9yKGNvbnN0IGkgb2YgdCl7Y29uc3QgdD10aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3QuZ2V0KGkpO3QuaGFzKGUpJiZ0LmRlbGV0ZShlKTt0LnNpemU+MHx8by5wdXNoKGkpfX19aWYoIXRoaXMuZGlzYWJsZUF1dG9GZXRjaCYmMD09PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5zaXplKXtsZXQgZTtpZigxPT09dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKXtjb25zdCB0PXRoaXMuc3RyZWFtLm51bUNodW5rcy0xO3RoaXMuc3RyZWFtLmhhc0NodW5rKHQpfHwoZT10KX1lbHNlIGU9dGhpcy5zdHJlYW0ubmV4dEVtcHR5Q2h1bmsobik7TnVtYmVyLmlzSW50ZWdlcihlKSYmdGhpcy5fcmVxdWVzdENodW5rcyhbZV0pfWZvcihjb25zdCBlIG9mIG8pe2NvbnN0IHQ9dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZ2V0KGUpO3RoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LmRlbGV0ZShlKTt0LnJlc29sdmUoKX10aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplLHRvdGFsOnRoaXMubGVuZ3RofSl9b25FcnJvcihlKXt0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlamVjdChlKX1nZXRCZWdpbkNodW5rKGUpe3JldHVybiBNYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpfWdldEVuZENodW5rKGUpe3JldHVybiBNYXRoLmZsb29yKChlLTEpL3RoaXMuY2h1bmtTaXplKSsxfWFib3J0KGUpe3RoaXMuYWJvcnRlZD0hMDt0aGlzLnBkZk5ldHdvcmtTdHJlYW0/LmNhbmNlbEFsbFJlcXVlc3RzKGUpO2Zvcihjb25zdCB0IG9mIHRoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LnZhbHVlcygpKXQucmVqZWN0KGUpfX1fX3dlYnBhY2tfcmVxdWlyZV9fKDQ1MjApLF9fd2VicGFja19yZXF1aXJlX18oOTQ3OSksX193ZWJwYWNrX3JlcXVpcmVfXygyNTc3KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDg4NzIpO2NsYXNzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLm5hbWU9ZTt0aGlzLm51bUNvbXBzPXR9Z2V0UmdiKGUsdCl7Y29uc3QgaT1uZXcgVWludDhDbGFtcGVkQXJyYXkoMyk7dGhpcy5nZXRSZ2JJdGVtKGUsdCxpLDApO3JldHVybiBpfWdldFJnYkl0ZW0oZSx0LGksYSl7dW5yZWFjaGFibGUoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldFJnYkl0ZW0iKX1nZXRSZ2JCdWZmZXIoZSx0LGksYSxyLHMsbil7dW5yZWFjaGFibGUoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldFJnYkJ1ZmZlciIpfWdldE91dHB1dExlbmd0aChlLHQpe3VucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRPdXRwdXRMZW5ndGgiKX1pc1Bhc3N0aHJvdWdoKGUpe3JldHVybiExfWlzRGVmYXVsdERlY29kZShlLHQpe3JldHVybiBDb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZShlLHRoaXMubnVtQ29tcHMpfWZpbGxSZ2IoZSx0LGksYSxyLHMsbixvLGcpe2NvbnN0IGM9dCppO2xldCBDPW51bGw7Y29uc3QgaD0xPDxuLGw9aSE9PXJ8fHQhPT1hO2lmKHRoaXMuaXNQYXNzdGhyb3VnaChuKSlDPW87ZWxzZSBpZigxPT09dGhpcy5udW1Db21wcyYmYz5oJiYiRGV2aWNlR3JheSIhPT10aGlzLm5hbWUmJiJEZXZpY2VSR0IiIT09dGhpcy5uYW1lKXtjb25zdCB0PW48PTg/bmV3IFVpbnQ4QXJyYXkoaCk6bmV3IFVpbnQxNkFycmF5KGgpO2ZvcihsZXQgZT0wO2U8aDtlKyspdFtlXT1lO2NvbnN0IGk9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqaCk7dGhpcy5nZXRSZ2JCdWZmZXIodCwwLGgsaSwwLG4sMCk7aWYobCl7Qz1uZXcgVWludDhBcnJheSgzKmMpO2xldCBlPTA7Zm9yKGxldCB0PTA7dDxjOysrdCl7Y29uc3QgYT0zKm9bdF07Q1tlKytdPWlbYV07Q1tlKytdPWlbYSsxXTtDW2UrK109aVthKzJdfX1lbHNle2xldCB0PTA7Zm9yKGxldCBhPTA7YTxjOysrYSl7Y29uc3Qgcj0zKm9bYV07ZVt0KytdPWlbcl07ZVt0KytdPWlbcisxXTtlW3QrK109aVtyKzJdO3QrPWd9fX1lbHNlIGlmKGwpe0M9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqYyk7dGhpcy5nZXRSZ2JCdWZmZXIobywwLGMsQywwLG4sMCl9ZWxzZSB0aGlzLmdldFJnYkJ1ZmZlcihvLDAsYSpzLGUsMCxuLGcpO2lmKEMpaWYobCkhZnVuY3Rpb24gcmVzaXplUmdiSW1hZ2UoZSx0LGksYSxyLHMsbil7bj0xIT09bj8wOm47Y29uc3Qgbz1pL3IsZz1hL3M7bGV0IGMsQz0wO2NvbnN0IGg9bmV3IFVpbnQxNkFycmF5KHIpLGw9MyppO2ZvcihsZXQgZT0wO2U8cjtlKyspaFtlXT0zKk1hdGguZmxvb3IoZSpvKTtmb3IobGV0IGk9MDtpPHM7aSsrKXtjb25zdCBhPU1hdGguZmxvb3IoaSpnKSpsO2ZvcihsZXQgaT0wO2k8cjtpKyspe2M9YStoW2ldO3RbQysrXT1lW2MrK107dFtDKytdPWVbYysrXTt0W0MrK109ZVtjKytdO0MrPW59fX0oQyxlLHQsaSxhLHIsZyk7ZWxzZXtsZXQgdD0wLGk9MDtmb3IobGV0IHI9MCxuPWEqcztyPG47cisrKXtlW3QrK109Q1tpKytdO2VbdCsrXT1DW2krK107ZVt0KytdPUNbaSsrXTt0Kz1nfX19Z2V0IHVzZXNaZXJvVG9PbmVSYW5nZSgpe3JldHVybiBzaGFkb3codGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMCl9c3RhdGljIF9jYWNoZShlLHQsaSxhKXtpZighaSl0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuX2NhY2hlIC0gZXhwZWN0ZWQgImxvY2FsQ29sb3JTcGFjZUNhY2hlIiBhcmd1bWVudC4nKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuX2NhY2hlIC0gZXhwZWN0ZWQgInBhcnNlZENvbG9yU3BhY2UiIGFyZ3VtZW50LicpO2xldCByLHM7aWYoZSBpbnN0YW5jZW9mIFJlZil7cz1lO2U9dC5mZXRjaChlKX1lIGluc3RhbmNlb2YgTmFtZSYmKHI9ZS5uYW1lKTsocnx8cykmJmkuc2V0KHIscyxhKX1zdGF0aWMgZ2V0Q2FjaGVkKGUsdCxpKXtpZighaSl0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuZ2V0Q2FjaGVkIC0gZXhwZWN0ZWQgImxvY2FsQ29sb3JTcGFjZUNhY2hlIiBhcmd1bWVudC4nKTtpZihlIGluc3RhbmNlb2YgUmVmKXtjb25zdCBhPWkuZ2V0QnlSZWYoZSk7aWYoYSlyZXR1cm4gYTt0cnl7ZT10LmZldGNoKGUpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlfX1pZihlIGluc3RhbmNlb2YgTmFtZSl7Y29uc3QgdD1pLmdldEJ5TmFtZShlLm5hbWUpO2lmKHQpcmV0dXJuIHR9cmV0dXJuIG51bGx9c3RhdGljIGFzeW5jIHBhcnNlQXN5bmMoe2NzOmUseHJlZjp0LHJlc291cmNlczppPW51bGwscGRmRnVuY3Rpb25GYWN0b3J5OmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6cn0pe2NvbnN0IHM9dGhpcy5fcGFyc2UoZSx0LGksYSk7dGhpcy5fY2FjaGUoZSx0LHIscyk7cmV0dXJuIHN9c3RhdGljIHBhcnNlKHtjczplLHhyZWY6dCxyZXNvdXJjZXM6aT1udWxsLHBkZkZ1bmN0aW9uRmFjdG9yeTphLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnJ9KXtjb25zdCBzPXRoaXMuZ2V0Q2FjaGVkKGUsdCxyKTtpZihzKXJldHVybiBzO2NvbnN0IG49dGhpcy5fcGFyc2UoZSx0LGksYSk7dGhpcy5fY2FjaGUoZSx0LHIsbik7cmV0dXJuIG59c3RhdGljIF9wYXJzZShlLHQsaT1udWxsLGEpe2lmKChlPXQuZmV0Y2hJZlJlZihlKSlpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJHIjpjYXNlIkRldmljZUdyYXkiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtjYXNlIlJHQiI6Y2FzZSJEZXZpY2VSR0IiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMucmdiO2Nhc2UiRGV2aWNlUkdCQSI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2JhO2Nhc2UiQ01ZSyI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7Y2FzZSJQYXR0ZXJuIjpyZXR1cm4gbmV3IFBhdHRlcm5DUyhudWxsKTtkZWZhdWx0OmlmKGkgaW5zdGFuY2VvZiBEaWN0KXtjb25zdCByPWkuZ2V0KCJDb2xvclNwYWNlIik7aWYociBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IHM9ci5nZXQoZS5uYW1lKTtpZihzKXtpZihzIGluc3RhbmNlb2YgTmFtZSlyZXR1cm4gdGhpcy5fcGFyc2Uocyx0LGksYSk7ZT1zO2JyZWFrfX19d2FybihgVW5yZWNvZ25pemVkIENvbG9yU3BhY2U6ICR7ZS5uYW1lfWApO3JldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheX1pZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCByPXQuZmV0Y2hJZlJlZihlWzBdKS5uYW1lO2xldCBzLG4sbyxnLGMsQztzd2l0Y2gocil7Y2FzZSJHIjpjYXNlIkRldmljZUdyYXkiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtjYXNlIlJHQiI6Y2FzZSJEZXZpY2VSR0IiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMucmdiO2Nhc2UiQ01ZSyI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7Y2FzZSJDYWxHcmF5IjpzPXQuZmV0Y2hJZlJlZihlWzFdKTtnPXMuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKTtjPXMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKTtDPXMuZ2V0KCJHYW1tYSIpO3JldHVybiBuZXcgQ2FsR3JheUNTKGcsYyxDKTtjYXNlIkNhbFJHQiI6cz10LmZldGNoSWZSZWYoZVsxXSk7Zz1zLmdldEFycmF5KCJXaGl0ZVBvaW50Iik7Yz1zLmdldEFycmF5KCJCbGFja1BvaW50Iik7Qz1zLmdldEFycmF5KCJHYW1tYSIpO2NvbnN0IGg9cy5nZXRBcnJheSgiTWF0cml4Iik7cmV0dXJuIG5ldyBDYWxSR0JDUyhnLGMsQyxoKTtjYXNlIklDQ0Jhc2VkIjpjb25zdCBsPXQuZmV0Y2hJZlJlZihlWzFdKS5kaWN0O249bC5nZXQoIk4iKTtjb25zdCBRPWwuZ2V0KCJBbHRlcm5hdGUiKTtpZihRKXtjb25zdCBlPXRoaXMuX3BhcnNlKFEsdCxpLGEpO2lmKGUubnVtQ29tcHM9PT1uKXJldHVybiBlO3dhcm4oIklDQ0Jhc2VkIGNvbG9yIHNwYWNlOiBJZ25vcmluZyBpbmNvcnJlY3QgL0FsdGVybmF0ZSBlbnRyeS4iKX1pZigxPT09bilyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7aWYoMz09PW4pcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7aWYoND09PW4pcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2JyZWFrO2Nhc2UiUGF0dGVybiI6bz1lWzFdfHxudWxsO28mJihvPXRoaXMuX3BhcnNlKG8sdCxpLGEpKTtyZXR1cm4gbmV3IFBhdHRlcm5DUyhvKTtjYXNlIkkiOmNhc2UiSW5kZXhlZCI6bz10aGlzLl9wYXJzZShlWzFdLHQsaSxhKTtjb25zdCBFPXQuZmV0Y2hJZlJlZihlWzJdKSsxLHU9dC5mZXRjaElmUmVmKGVbM10pO3JldHVybiBuZXcgSW5kZXhlZENTKG8sRSx1KTtjYXNlIlNlcGFyYXRpb24iOmNhc2UiRGV2aWNlTiI6Y29uc3QgZD10LmZldGNoSWZSZWYoZVsxXSk7bj1BcnJheS5pc0FycmF5KGQpP2QubGVuZ3RoOjE7bz10aGlzLl9wYXJzZShlWzJdLHQsaSxhKTtjb25zdCBmPWEuY3JlYXRlKGVbM10pO3JldHVybiBuZXcgQWx0ZXJuYXRlQ1MobixvLGYpO2Nhc2UiTGFiIjpzPXQuZmV0Y2hJZlJlZihlWzFdKTtnPXMuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKTtjPXMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKTtjb25zdCBwPXMuZ2V0QXJyYXkoIlJhbmdlIik7cmV0dXJuIG5ldyBMYWJDUyhnLGMscCk7ZGVmYXVsdDp3YXJuKGBVbmltcGxlbWVudGVkIENvbG9yU3BhY2Ugb2JqZWN0OiAke3J9YCk7cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5fX13YXJuKGBVbnJlY29nbml6ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICR7ZX1gKTtyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXl9c3RhdGljIGlzRGVmYXVsdERlY29kZShlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiEwO2lmKDIqdCE9PWUubGVuZ3RoKXt3YXJuKCJUaGUgZGVjb2RlIG1hcCBpcyBub3QgdGhlIGNvcnJlY3QgbGVuZ3RoIik7cmV0dXJuITB9Zm9yKGxldCB0PTAsaT1lLmxlbmd0aDt0PGk7dCs9MilpZigwIT09ZVt0XXx8MSE9PWVbdCsxXSlyZXR1cm4hMTtyZXR1cm4hMH1zdGF0aWMgZ2V0IHNpbmdsZXRvbnMoKXtyZXR1cm4gc2hhZG93KHRoaXMsInNpbmdsZXRvbnMiLHtnZXQgZ3JheSgpe3JldHVybiBzaGFkb3codGhpcywiZ3JheSIsbmV3IERldmljZUdyYXlDUyl9LGdldCByZ2IoKXtyZXR1cm4gc2hhZG93KHRoaXMsInJnYiIsbmV3IERldmljZVJnYkNTKX0sZ2V0IHJnYmEoKXtyZXR1cm4gc2hhZG93KHRoaXMsInJnYmEiLG5ldyBEZXZpY2VSZ2JhQ1MpfSxnZXQgY215aygpe3JldHVybiBzaGFkb3codGhpcywiY215ayIsbmV3IERldmljZUNteWtDUyl9fSl9fWNsYXNzIEFsdGVybmF0ZUNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoIkFsdGVybmF0ZSIsZSk7dGhpcy5iYXNlPXQ7dGhpcy50aW50Rm49aTt0aGlzLnRtcEJ1Zj1uZXcgRmxvYXQzMkFycmF5KHQubnVtQ29tcHMpfWdldFJnYkl0ZW0oZSx0LGksYSl7Y29uc3Qgcj10aGlzLnRtcEJ1Zjt0aGlzLnRpbnRGbihlLHQsciwwKTt0aGlzLmJhc2UuZ2V0UmdiSXRlbShyLDAsaSxhKX1nZXRSZ2JCdWZmZXIoZSx0LGksYSxyLHMsbil7Y29uc3Qgbz10aGlzLnRpbnRGbixnPXRoaXMuYmFzZSxjPTEvKCgxPDxzKS0xKSxDPWcubnVtQ29tcHMsaD1nLnVzZXNaZXJvVG9PbmVSYW5nZSxsPShnLmlzUGFzc3Rocm91Z2goOCl8fCFoKSYmMD09PW47bGV0IFE9bD9yOjA7Y29uc3QgRT1sP2E6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KEMqaSksdT10aGlzLm51bUNvbXBzLGQ9bmV3IEZsb2F0MzJBcnJheSh1KSxmPW5ldyBGbG9hdDMyQXJyYXkoQyk7bGV0IHAsbTtmb3IocD0wO3A8aTtwKyspe2ZvcihtPTA7bTx1O20rKylkW21dPWVbdCsrXSpjO28oZCwwLGYsMCk7aWYoaClmb3IobT0wO208QzttKyspRVtRKytdPTI1NSpmW21dO2Vsc2V7Zy5nZXRSZ2JJdGVtKGYsMCxFLFEpO1ErPUN9fWx8fGcuZ2V0UmdiQnVmZmVyKEUsMCxpLGEsciw4LG4pfWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzL3RoaXMubnVtQ29tcHMsdCl9fWNsYXNzIFBhdHRlcm5DUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSl7c3VwZXIoIlBhdHRlcm4iLG51bGwpO3RoaXMuYmFzZT1lfWlzRGVmYXVsdERlY29kZShlLHQpe3VucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgUGF0dGVybkNTLmlzRGVmYXVsdERlY29kZSIpfX1jbGFzcyBJbmRleGVkQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCxpKXtzdXBlcigiSW5kZXhlZCIsMSk7dGhpcy5iYXNlPWU7dGhpcy5oaWdoVmFsPXQ7Y29uc3QgYT1lLm51bUNvbXBzKnQ7dGhpcy5sb29rdXA9bmV3IFVpbnQ4QXJyYXkoYSk7aWYoaSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pe2NvbnN0IGU9aS5nZXRCeXRlcyhhKTt0aGlzLmxvb2t1cC5zZXQoZSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbmRleGVkQ1MgLSB1bnJlY29nbml6ZWQgbG9va3VwIHRhYmxlOiAke2l9YCk7Zm9yKGxldCBlPTA7ZTxhOysrZSl0aGlzLmxvb2t1cFtlXT0yNTUmaS5jaGFyQ29kZUF0KGUpfX1nZXRSZ2JJdGVtKGUsdCxpLGEpe2NvbnN0IHI9dGhpcy5iYXNlLm51bUNvbXBzLHM9ZVt0XSpyO3RoaXMuYmFzZS5nZXRSZ2JCdWZmZXIodGhpcy5sb29rdXAscywxLGksYSw4LDApfWdldFJnYkJ1ZmZlcihlLHQsaSxhLHIscyxuKXtjb25zdCBvPXRoaXMuYmFzZSxnPW8ubnVtQ29tcHMsYz1vLmdldE91dHB1dExlbmd0aChnLG4pLEM9dGhpcy5sb29rdXA7Zm9yKGxldCBzPTA7czxpOysrcyl7Y29uc3QgaT1lW3QrK10qZztvLmdldFJnYkJ1ZmZlcihDLGksMSxhLHIsOCxuKTtyKz1jfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gdGhpcy5iYXNlLmdldE91dHB1dExlbmd0aChlKnRoaXMuYmFzZS5udW1Db21wcyx0KX1pc0RlZmF1bHREZWNvZGUoZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMDtpZigyIT09ZS5sZW5ndGgpe3dhcm4oIkRlY29kZSBtYXAgbGVuZ3RoIGlzIG5vdCBjb3JyZWN0Iik7cmV0dXJuITB9aWYoIU51bWJlci5pc0ludGVnZXIodCl8fHQ8MSl7d2FybigiQml0cyBwZXIgY29tcG9uZW50IGlzIG5vdCBjb3JyZWN0Iik7cmV0dXJuITB9cmV0dXJuIDA9PT1lWzBdJiZlWzFdPT09KDE8PHQpLTF9fWNsYXNzIERldmljZUdyYXlDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoKXtzdXBlcigiRGV2aWNlR3JheSIsMSl9Z2V0UmdiSXRlbShlLHQsaSxhKXtjb25zdCByPTI1NSplW3RdO2lbYV09aVthKzFdPWlbYSsyXT1yfWdldFJnYkJ1ZmZlcihlLHQsaSxhLHIscyxuKXtjb25zdCBvPTI1NS8oKDE8PHMpLTEpO2xldCBnPXQsYz1yO2ZvcihsZXQgdD0wO3Q8aTsrK3Qpe2NvbnN0IHQ9byplW2crK107YVtjKytdPXQ7YVtjKytdPXQ7YVtjKytdPXQ7Yys9bn19Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCl9fWNsYXNzIERldmljZVJnYkNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJEZXZpY2VSR0IiLDMpfWdldFJnYkl0ZW0oZSx0LGksYSl7aVthXT0yNTUqZVt0XTtpW2ErMV09MjU1KmVbdCsxXTtpW2ErMl09MjU1KmVbdCsyXX1nZXRSZ2JCdWZmZXIoZSx0LGksYSxyLHMsbil7aWYoOD09PXMmJjA9PT1uKXthLnNldChlLnN1YmFycmF5KHQsdCszKmkpLHIpO3JldHVybn1jb25zdCBvPTI1NS8oKDE8PHMpLTEpO2xldCBnPXQsYz1yO2ZvcihsZXQgdD0wO3Q8aTsrK3Qpe2FbYysrXT1vKmVbZysrXTthW2MrK109byplW2crK107YVtjKytdPW8qZVtnKytdO2MrPW59fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiBlKigzK3QpLzN8MH1pc1Bhc3N0aHJvdWdoKGUpe3JldHVybiA4PT09ZX19Y2xhc3MgRGV2aWNlUmdiYUNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJEZXZpY2VSR0JBIiw0KX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gNCplfWlzUGFzc3Rocm91Z2goZSl7cmV0dXJuIDg9PT1lfX1jbGFzcyBEZXZpY2VDbXlrQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKCl7c3VwZXIoIkRldmljZUNNWUsiLDQpfSN0KGUsdCxpLGEscil7Y29uc3Qgcz1lW3RdKmksbj1lW3QrMV0qaSxvPWVbdCsyXSppLGc9ZVt0KzNdKmk7YVtyXT0yNTUrcyooLTQuMzg3MzMyMzg0NjA5OTg4KnMrNTQuNDg2MTUxOTQxODkxNzYqbisxOC44MjI5MDUwMjE2NTMwMipvKzIxMi4yNTY2MjQ1MTYzOTU4NSpnLTI4NS4yMzMxMDI2MTM3MDA0KStuKigxLjcxNDk3NjM0NzczNjIxMzQqbi01LjYwOTY3MzY5MDQwNDczMTUqbystMTcuODczODcwODYxNDE1NDQ0KmctNS40OTcwMDY0MjcxOTYzNjYpK28qKC0yLjUyMTczNDAxMzE2ODMwMzMqby0yMS4yNDg5MjMzMzczNTMwNzMqZysxNy41MTE5MjcwODQxODEzKStnKigtMjEuODYxMjIxNDc0NjM2MDUqZy0xODkuNDgxODA4MzU5MjI3NDcpO2FbcisxXT0yNTUrcyooOC44NDEwNDE0MjIwMzYxNDkqcys2MC4xMTgwMjcwNDU1OTczNjYqbis2Ljg3MTQyNTU5MjA0OTAwNypvKzMxLjE1OTEwMDEzMDA1NTkyMipnLTc5LjI5NzA4NDQ4MTY1NDgpK24qKC0xNS4zMTAzNjEzMDY5Njc4MTcqbisxNy41NzUyNTEyNjExMDk0ODIqbysxMzEuMzUyNTA5MTI0OTM5NzYqZy0xOTAuOTQ1MzMwMjU4ODk1MSkrbyooNC40NDQzMzkxMDI4NTI3Mzkqbys5Ljg2MzI4NjE0OTM0MDUqZy0yNC44Njc0MTU4MjU1NTg3OCkrZyooLTIwLjczNzMyNTQ3MTE4MTAzNCpnLTE4Ny44MDQ1MzcwOTcxOTU3OCk7YVtyKzJdPTI1NStzKiguODg0MjUyMjQzMDAwMzI5NipzKzguMDc4Njc3NTAzMTEyOTI4Km4rMzAuODk5NzgzMDk3MDM3Mjkqby0uMjM4ODMyMzg2ODkxNzg5MzQqZy0xNC4xODM1NzY3OTk2NzMyODYpK24qKDEwLjQ5NTkzMjczNDMyMDcyKm4rNjMuMDIzNzg0OTQ3NTQwNTIqbys1MC42MDY5NTc2NTYzNjA3MzQqZy0xMTIuMjM4ODQyNTM3MTkyNDgpK28qKC4wMzI5NjA0MTExNDg3MzIxNypvKzExNS42MDM4NDQ0OTY0NjY0MSpnLTE5My41ODIwOTM1Njg2MTUwNSkrZyooLTIyLjMzODE2ODA3MzA5ODg2KmctMTgwLjEyNjEzOTc0NzA4MzY3KX1nZXRSZ2JJdGVtKGUsdCxpLGEpe3RoaXMuI3QoZSx0LDEsaSxhKX1nZXRSZ2JCdWZmZXIoZSx0LGksYSxyLHMsbil7Y29uc3Qgbz0xLygoMTw8cyktMSk7Zm9yKGxldCBzPTA7czxpO3MrKyl7dGhpcy4jdChlLHQsbyxhLHIpO3QrPTQ7cis9MytufX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZS80KigzK3QpfDB9fWNsYXNzIENhbEdyYXlDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKCJDYWxHcmF5IiwxKTtpZighZSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxHcmF5Iik7W3RoaXMuWFcsdGhpcy5ZVyx0aGlzLlpXXT1lO1t0aGlzLlhCLHRoaXMuWUIsdGhpcy5aQl09dHx8WzAsMCwwXTt0aGlzLkc9aXx8MTtpZih0aGlzLlhXPDB8fHRoaXMuWlc8MHx8MSE9PXRoaXMuWVcpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgJHt0aGlzLm5hbWV9LCBubyBmYWxsYmFjayBhdmFpbGFibGVgKTtpZih0aGlzLlhCPDB8fHRoaXMuWUI8MHx8dGhpcy5aQjwwKXtpbmZvKGBJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5YQj10aGlzLllCPXRoaXMuWkI9MH0wPT09dGhpcy5YQiYmMD09PXRoaXMuWUImJjA9PT10aGlzLlpCfHx3YXJuKGAke3RoaXMubmFtZX0sIEJsYWNrUG9pbnQ6IFhCOiAke3RoaXMuWEJ9LCBZQjogJHt0aGlzLllCfSwgWkI6ICR7dGhpcy5aQn0sIG9ubHkgZGVmYXVsdCB2YWx1ZXMgYXJlIHN1cHBvcnRlZC5gKTtpZih0aGlzLkc8MSl7aW5mbyhgSW52YWxpZCBHYW1tYTogJHt0aGlzLkd9IGZvciAke3RoaXMubmFtZX0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApO3RoaXMuRz0xfX0jdChlLHQsaSxhLHIpe2NvbnN0IHM9KGVbdF0qcikqKnRoaXMuRyxuPXRoaXMuWVcqcyxvPU1hdGgubWF4KDI5NS44Km4qKi4zMzMzMzMzMzMzMzMzMzMzLTQwLjgsMCk7aVthXT1vO2lbYSsxXT1vO2lbYSsyXT1vfWdldFJnYkl0ZW0oZSx0LGksYSl7dGhpcy4jdChlLHQsaSxhLDEpfWdldFJnYkJ1ZmZlcihlLHQsaSxhLHIscyxuKXtjb25zdCBvPTEvKCgxPDxzKS0xKTtmb3IobGV0IHM9MDtzPGk7KytzKXt0aGlzLiN0KGUsdCxhLHIsbyk7dCs9MTtyKz0zK259fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiBlKigzK3QpfX1jbGFzcyBDYWxSR0JDUyBleHRlbmRzIENvbG9yU3BhY2V7c3RhdGljI2k9bmV3IEZsb2F0MzJBcnJheShbLjg5NTEsLjI2NjQsLS4xNjE0LC0uNzUwMiwxLjcxMzUsLjAzNjcsLjAzODksLS4wNjg1LDEuMDI5Nl0pO3N0YXRpYyNhPW5ldyBGbG9hdDMyQXJyYXkoWy45ODY5OTI5LC0uMTQ3MDU0MywuMTU5OTYyNywuNDMyMzA1MywuNTE4MzYwMywuMDQ5MjkxMiwtLjAwODUyODcsLjA0MDA0MjgsLjk2ODQ4NjddKTtzdGF0aWMjcj1uZXcgRmxvYXQzMkFycmF5KFszLjI0MDQ1NDIsLTEuNTM3MTM4NSwtLjQ5ODUzMTQsLS45NjkyNjYsMS44NzYwMTA4LC4wNDE1NTYsLjA1NTY0MzQsLS4yMDQwMjU5LDEuMDU3MjI1Ml0pO3N0YXRpYyNzPW5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxXSk7c3RhdGljI249bmV3IEZsb2F0MzJBcnJheSgzKTtzdGF0aWMjbz1uZXcgRmxvYXQzMkFycmF5KDMpO3N0YXRpYyNnPW5ldyBGbG9hdDMyQXJyYXkoMyk7c3RhdGljI0k9KDI0LzExNikqKjMvODtjb25zdHJ1Y3RvcihlLHQsaSxhKXtzdXBlcigiQ2FsUkdCIiwzKTtpZighZSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxSR0IiKTtjb25zdFtyLHMsbl09dGhpcy53aGl0ZVBvaW50PWUsW28sZyxjXT10aGlzLmJsYWNrUG9pbnQ9dHx8bmV3IEZsb2F0MzJBcnJheSgzKTtbdGhpcy5HUix0aGlzLkdHLHRoaXMuR0JdPWl8fG5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxXSk7W3RoaXMuTVhBLHRoaXMuTVlBLHRoaXMuTVpBLHRoaXMuTVhCLHRoaXMuTVlCLHRoaXMuTVpCLHRoaXMuTVhDLHRoaXMuTVlDLHRoaXMuTVpDXT1hfHxuZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDEsMCwwLDAsMV0pO2lmKHI8MHx8bjwwfHwxIT09cyl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAke3RoaXMubmFtZX0sIG5vIGZhbGxiYWNrIGF2YWlsYWJsZWApO2lmKG88MHx8ZzwwfHxjPDApe2luZm8oYEludmFsaWQgQmxhY2tQb2ludCBmb3IgJHt0aGlzLm5hbWV9IFske299LCAke2d9LCAke2N9XSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5ibGFja1BvaW50PW5ldyBGbG9hdDMyQXJyYXkoMyl9aWYodGhpcy5HUjwwfHx0aGlzLkdHPDB8fHRoaXMuR0I8MCl7aW5mbyhgSW52YWxpZCBHYW1tYSBbJHt0aGlzLkdSfSwgJHt0aGlzLkdHfSwgJHt0aGlzLkdCfV0gZm9yICR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5HUj10aGlzLkdHPXRoaXMuR0I9MX19I2MoZSx0LGkpe2lbMF09ZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl07aVsxXT1lWzNdKnRbMF0rZVs0XSp0WzFdK2VbNV0qdFsyXTtpWzJdPWVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdfSNDKGUsdCxpKXtpWzBdPTEqdFswXS9lWzBdO2lbMV09MSp0WzFdL2VbMV07aVsyXT0xKnRbMl0vZVsyXX0jaChlLHQsaSl7aVswXT0uOTUwNDcqdFswXS9lWzBdO2lbMV09MSp0WzFdL2VbMV07aVsyXT0xLjA4ODgzKnRbMl0vZVsyXX0jbChlKXtyZXR1cm4gZTw9LjAwMzEzMDg/dGhpcy4jQigwLDEsMTIuOTIqZSk6ZT49Ljk5NTU0NTI1PzE6dGhpcy4jQigwLDEsMS4wNTUqZSoqKDEvMi40KS0uMDU1KX0jQihlLHQsaSl7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4odCxpKSl9I1EoZSl7cmV0dXJuIGU8MD8tdGhpcy4jUSgtZSk6ZT44PygoZSsxNikvMTE2KSoqMzplKkNhbFJHQkNTLiNJfSNFKGUsdCxpKXtpZigwPT09ZVswXSYmMD09PWVbMV0mJjA9PT1lWzJdKXtpWzBdPXRbMF07aVsxXT10WzFdO2lbMl09dFsyXTtyZXR1cm59Y29uc3QgYT10aGlzLiNRKDApLHI9KDEtYSkvKDEtdGhpcy4jUShlWzBdKSkscz0xLXIsbj0oMS1hKS8oMS10aGlzLiNRKGVbMV0pKSxvPTEtbixnPSgxLWEpLygxLXRoaXMuI1EoZVsyXSkpLGM9MS1nO2lbMF09dFswXSpyK3M7aVsxXT10WzFdKm4rbztpWzJdPXRbMl0qZytjfSN1KGUsdCxpKXtpZigxPT09ZVswXSYmMT09PWVbMl0pe2lbMF09dFswXTtpWzFdPXRbMV07aVsyXT10WzJdO3JldHVybn1jb25zdCBhPWk7dGhpcy4jYyhDYWxSR0JDUy4jaSx0LGEpO2NvbnN0IHI9Q2FsUkdCQ1MuI247dGhpcy4jQyhlLGEscik7dGhpcy4jYyhDYWxSR0JDUy4jYSxyLGkpfSNkKGUsdCxpKXtjb25zdCBhPWk7dGhpcy4jYyhDYWxSR0JDUy4jaSx0LGEpO2NvbnN0IHI9Q2FsUkdCQ1MuI247dGhpcy4jaChlLGEscik7dGhpcy4jYyhDYWxSR0JDUy4jYSxyLGkpfSN0KGUsdCxpLGEscil7Y29uc3Qgcz10aGlzLiNCKDAsMSxlW3RdKnIpLG49dGhpcy4jQigwLDEsZVt0KzFdKnIpLG89dGhpcy4jQigwLDEsZVt0KzJdKnIpLGc9MT09PXM/MTpzKip0aGlzLkdSLGM9MT09PW4/MTpuKip0aGlzLkdHLEM9MT09PW8/MTpvKip0aGlzLkdCLGg9dGhpcy5NWEEqZyt0aGlzLk1YQipjK3RoaXMuTVhDKkMsbD10aGlzLk1ZQSpnK3RoaXMuTVlCKmMrdGhpcy5NWUMqQyxRPXRoaXMuTVpBKmcrdGhpcy5NWkIqYyt0aGlzLk1aQypDLEU9Q2FsUkdCQ1MuI287RVswXT1oO0VbMV09bDtFWzJdPVE7Y29uc3QgdT1DYWxSR0JDUy4jZzt0aGlzLiN1KHRoaXMud2hpdGVQb2ludCxFLHUpO2NvbnN0IGQ9Q2FsUkdCQ1MuI287dGhpcy4jRSh0aGlzLmJsYWNrUG9pbnQsdSxkKTtjb25zdCBmPUNhbFJHQkNTLiNnO3RoaXMuI2QoQ2FsUkdCQ1MuI3MsZCxmKTtjb25zdCBwPUNhbFJHQkNTLiNvO3RoaXMuI2MoQ2FsUkdCQ1MuI3IsZixwKTtpW2FdPTI1NSp0aGlzLiNsKHBbMF0pO2lbYSsxXT0yNTUqdGhpcy4jbChwWzFdKTtpW2ErMl09MjU1KnRoaXMuI2wocFsyXSl9Z2V0UmdiSXRlbShlLHQsaSxhKXt0aGlzLiN0KGUsdCxpLGEsMSl9Z2V0UmdiQnVmZmVyKGUsdCxpLGEscixzLG4pe2NvbnN0IG89MS8oKDE8PHMpLTEpO2ZvcihsZXQgcz0wO3M8aTsrK3Mpe3RoaXMuI3QoZSx0LGEscixvKTt0Kz0zO3IrPTMrbn19Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX1jbGFzcyBMYWJDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKCJMYWIiLDMpO2lmKCFlKXRocm93IG5ldyBGb3JtYXRFcnJvcigiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIExhYiIpO1t0aGlzLlhXLHRoaXMuWVcsdGhpcy5aV109ZTtbdGhpcy5hbWluLHRoaXMuYW1heCx0aGlzLmJtaW4sdGhpcy5ibWF4XT1pfHxbLTEwMCwxMDAsLTEwMCwxMDBdO1t0aGlzLlhCLHRoaXMuWUIsdGhpcy5aQl09dHx8WzAsMCwwXTtpZih0aGlzLlhXPDB8fHRoaXMuWlc8MHx8MSE9PXRoaXMuWVcpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cywgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7aWYodGhpcy5YQjwwfHx0aGlzLllCPDB8fHRoaXMuWkI8MCl7aW5mbygiSW52YWxpZCBCbGFja1BvaW50LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCIpO3RoaXMuWEI9dGhpcy5ZQj10aGlzLlpCPTB9aWYodGhpcy5hbWluPnRoaXMuYW1heHx8dGhpcy5ibWluPnRoaXMuYm1heCl7aW5mbygiSW52YWxpZCBSYW5nZSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRzIik7dGhpcy5hbWluPS0xMDA7dGhpcy5hbWF4PTEwMDt0aGlzLmJtaW49LTEwMDt0aGlzLmJtYXg9MTAwfX0jZihlKXtyZXR1cm4gZT49Ni8yOT9lKiozOjEwOC84NDEqKGUtNC8yOSl9I3AoZSx0LGksYSl7cmV0dXJuIGkrZSooYS1pKS90fSN0KGUsdCxpLGEscil7bGV0IHM9ZVt0XSxuPWVbdCsxXSxvPWVbdCsyXTtpZighMSE9PWkpe3M9dGhpcy4jcChzLGksMCwxMDApO249dGhpcy4jcChuLGksdGhpcy5hbWluLHRoaXMuYW1heCk7bz10aGlzLiNwKG8saSx0aGlzLmJtaW4sdGhpcy5ibWF4KX1uPnRoaXMuYW1heD9uPXRoaXMuYW1heDpuPHRoaXMuYW1pbiYmKG49dGhpcy5hbWluKTtvPnRoaXMuYm1heD9vPXRoaXMuYm1heDpvPHRoaXMuYm1pbiYmKG89dGhpcy5ibWluKTtjb25zdCBnPShzKzE2KS8xMTYsYz1nK24vNTAwLEM9Zy1vLzIwMCxoPXRoaXMuWFcqdGhpcy4jZihjKSxsPXRoaXMuWVcqdGhpcy4jZihnKSxRPXRoaXMuWlcqdGhpcy4jZihDKTtsZXQgRSx1LGQ7aWYodGhpcy5aVzwxKXtFPTMuMTMzOSpoKy0xLjYxNypsKy0uNDkwNipRO3U9LS45Nzg1KmgrMS45MTYqbCsuMDMzMypRO2Q9LjA3MipoKy0uMjI5KmwrMS40MDU3KlF9ZWxzZXtFPTMuMjQwNipoKy0xLjUzNzIqbCstLjQ5ODYqUTt1PS0uOTY4OSpoKzEuODc1OCpsKy4wNDE1KlE7ZD0uMDU1NypoKy0uMjA0KmwrMS4wNTcqUX1hW3JdPTI1NSpNYXRoLnNxcnQoRSk7YVtyKzFdPTI1NSpNYXRoLnNxcnQodSk7YVtyKzJdPTI1NSpNYXRoLnNxcnQoZCl9Z2V0UmdiSXRlbShlLHQsaSxhKXt0aGlzLiN0KGUsdCwhMSxpLGEpfWdldFJnYkJ1ZmZlcihlLHQsaSxhLHIscyxuKXtjb25zdCBvPSgxPDxzKS0xO2ZvcihsZXQgcz0wO3M8aTtzKyspe3RoaXMuI3QoZSx0LG8sYSxyKTt0Kz0zO3IrPTMrbn19Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfWlzRGVmYXVsdERlY29kZShlLHQpe3JldHVybiEwfWdldCB1c2VzWmVyb1RvT25lUmFuZ2UoKXtyZXR1cm4gc2hhZG93KHRoaXMsInVzZXNaZXJvVG9PbmVSYW5nZSIsITEpfX1mdW5jdGlvbiBoZXhUb0ludChlLHQpe2xldCBpPTA7Zm9yKGxldCBhPTA7YTw9dDthKyspaT1pPDw4fGVbYV07cmV0dXJuIGk+Pj4wfWZ1bmN0aW9uIGhleFRvU3RyKGUsdCl7cmV0dXJuIDE9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdKTozPT09dD9TdHJpbmcuZnJvbUNoYXJDb2RlKGVbMF0sZVsxXSxlWzJdLGVbM10pOlN0cmluZy5mcm9tQ2hhckNvZGUoLi4uZS5zdWJhcnJheSgwLHQrMSkpfWZ1bmN0aW9uIGFkZEhleChlLHQsaSl7bGV0IGE9MDtmb3IobGV0IHI9aTtyPj0wO3ItLSl7YSs9ZVtyXSt0W3JdO2Vbcl09MjU1JmE7YT4+PTh9fWZ1bmN0aW9uIGluY0hleChlLHQpe2xldCBpPTE7Zm9yKGxldCBhPXQ7YT49MCYmaT4wO2EtLSl7aSs9ZVthXTtlW2FdPTI1NSZpO2k+Pj04fX1jb25zdCBVdD0xNjtjbGFzcyBCaW5hcnlDTWFwU3RyZWFte2NvbnN0cnVjdG9yKGUpe3RoaXMuYnVmZmVyPWU7dGhpcy5wb3M9MDt0aGlzLmVuZD1lLmxlbmd0aDt0aGlzLnRtcEJ1Zj1uZXcgVWludDhBcnJheSgxOSl9cmVhZEJ5dGUoKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuZW5kPy0xOnRoaXMuYnVmZmVyW3RoaXMucG9zKytdfXJlYWROdW1iZXIoKXtsZXQgZSx0PTA7ZG97Y29uc3QgaT10aGlzLnJlYWRCeXRlKCk7aWYoaTwwKXRocm93IG5ldyBGb3JtYXRFcnJvcigidW5leHBlY3RlZCBFT0YgaW4gYmNtYXAiKTtlPSEoMTI4JmkpO3Q9dDw8N3wxMjcmaX13aGlsZSghZSk7cmV0dXJuIHR9cmVhZFNpZ25lZCgpe2NvbnN0IGU9dGhpcy5yZWFkTnVtYmVyKCk7cmV0dXJuIDEmZT9+KGU+Pj4xKTplPj4+MX1yZWFkSGV4KGUsdCl7ZS5zZXQodGhpcy5idWZmZXIuc3ViYXJyYXkodGhpcy5wb3MsdGhpcy5wb3MrdCsxKSk7dGhpcy5wb3MrPXQrMX1yZWFkSGV4TnVtYmVyKGUsdCl7bGV0IGk7Y29uc3QgYT10aGlzLnRtcEJ1ZjtsZXQgcj0wO2Rve2NvbnN0IGU9dGhpcy5yZWFkQnl0ZSgpO2lmKGU8MCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoInVuZXhwZWN0ZWQgRU9GIGluIGJjbWFwIik7aT0hKDEyOCZlKTthW3IrK109MTI3JmV9d2hpbGUoIWkpO2xldCBzPXQsbj0wLG89MDtmb3IoO3M+PTA7KXtmb3IoO288OCYmYS5sZW5ndGg+MDspe258PWFbLS1yXTw8bztvKz03fWVbc109MjU1Jm47cy0tO24+Pj04O28tPTh9fXJlYWRIZXhTaWduZWQoZSx0KXt0aGlzLnJlYWRIZXhOdW1iZXIoZSx0KTtjb25zdCBpPTEmZVt0XT8yNTU6MDtsZXQgYT0wO2ZvcihsZXQgcj0wO3I8PXQ7cisrKXthPSgxJmEpPDw4fGVbcl07ZVtyXT1hPj4xXml9fXJlYWRTdHJpbmcoKXtjb25zdCBlPXRoaXMucmVhZE51bWJlcigpLHQ9bmV3IEFycmF5KGUpO2ZvcihsZXQgaT0wO2k8ZTtpKyspdFtpXT10aGlzLnJlYWROdW1iZXIoKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSguLi50KX19Y2xhc3MgQmluYXJ5Q01hcFJlYWRlcnthc3luYyBwcm9jZXNzKGUsdCxpKXtjb25zdCBhPW5ldyBCaW5hcnlDTWFwU3RyZWFtKGUpLHI9YS5yZWFkQnl0ZSgpO3QudmVydGljYWw9ISEoMSZyKTtsZXQgcz1udWxsO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoVXQpLG89bmV3IFVpbnQ4QXJyYXkoVXQpLGc9bmV3IFVpbnQ4QXJyYXkoVXQpLGM9bmV3IFVpbnQ4QXJyYXkoVXQpLEM9bmV3IFVpbnQ4QXJyYXkoVXQpO2xldCBoLGw7Zm9yKDsobD1hLnJlYWRCeXRlKCkpPj0wOyl7Y29uc3QgZT1sPj41O2lmKDc9PT1lKXtzd2l0Y2goMzEmbCl7Y2FzZSAwOmEucmVhZFN0cmluZygpO2JyZWFrO2Nhc2UgMTpzPWEucmVhZFN0cmluZygpfWNvbnRpbnVlfWNvbnN0IGk9ISEoMTYmbCkscj0xNSZsO2lmKHIrMT5VdCl0aHJvdyBuZXcgRXJyb3IoIkJpbmFyeUNNYXBSZWFkZXIucHJvY2VzczogSW52YWxpZCBkYXRhU2l6ZS4iKTtjb25zdCBRPTEsRT1hLnJlYWROdW1iZXIoKTtzd2l0Y2goZSl7Y2FzZSAwOmEucmVhZEhleChuLHIpO2EucmVhZEhleE51bWJlcihvLHIpO2FkZEhleChvLG4scik7dC5hZGRDb2Rlc3BhY2VSYW5nZShyKzEsaGV4VG9JbnQobixyKSxoZXhUb0ludChvLHIpKTtmb3IobGV0IGU9MTtlPEU7ZSsrKXtpbmNIZXgobyxyKTthLnJlYWRIZXhOdW1iZXIobixyKTthZGRIZXgobixvLHIpO2EucmVhZEhleE51bWJlcihvLHIpO2FkZEhleChvLG4scik7dC5hZGRDb2Rlc3BhY2VSYW5nZShyKzEsaGV4VG9JbnQobixyKSxoZXhUb0ludChvLHIpKX1icmVhaztjYXNlIDE6YS5yZWFkSGV4KG4scik7YS5yZWFkSGV4TnVtYmVyKG8scik7YWRkSGV4KG8sbixyKTthLnJlYWROdW1iZXIoKTtmb3IobGV0IGU9MTtlPEU7ZSsrKXtpbmNIZXgobyxyKTthLnJlYWRIZXhOdW1iZXIobixyKTthZGRIZXgobixvLHIpO2EucmVhZEhleE51bWJlcihvLHIpO2FkZEhleChvLG4scik7YS5yZWFkTnVtYmVyKCl9YnJlYWs7Y2FzZSAyOmEucmVhZEhleChnLHIpO2g9YS5yZWFkTnVtYmVyKCk7dC5tYXBPbmUoaGV4VG9JbnQoZyxyKSxoKTtmb3IobGV0IGU9MTtlPEU7ZSsrKXtpbmNIZXgoZyxyKTtpZighaSl7YS5yZWFkSGV4TnVtYmVyKEMscik7YWRkSGV4KGcsQyxyKX1oPWEucmVhZFNpZ25lZCgpKyhoKzEpO3QubWFwT25lKGhleFRvSW50KGcsciksaCl9YnJlYWs7Y2FzZSAzOmEucmVhZEhleChuLHIpO2EucmVhZEhleE51bWJlcihvLHIpO2FkZEhleChvLG4scik7aD1hLnJlYWROdW1iZXIoKTt0Lm1hcENpZFJhbmdlKGhleFRvSW50KG4sciksaGV4VG9JbnQobyxyKSxoKTtmb3IobGV0IGU9MTtlPEU7ZSsrKXtpbmNIZXgobyxyKTtpZihpKW4uc2V0KG8pO2Vsc2V7YS5yZWFkSGV4TnVtYmVyKG4scik7YWRkSGV4KG4sbyxyKX1hLnJlYWRIZXhOdW1iZXIobyxyKTthZGRIZXgobyxuLHIpO2g9YS5yZWFkTnVtYmVyKCk7dC5tYXBDaWRSYW5nZShoZXhUb0ludChuLHIpLGhleFRvSW50KG8sciksaCl9YnJlYWs7Y2FzZSA0OmEucmVhZEhleChnLFEpO2EucmVhZEhleChjLHIpO3QubWFwT25lKGhleFRvSW50KGcsUSksaGV4VG9TdHIoYyxyKSk7Zm9yKGxldCBlPTE7ZTxFO2UrKyl7aW5jSGV4KGcsUSk7aWYoIWkpe2EucmVhZEhleE51bWJlcihDLFEpO2FkZEhleChnLEMsUSl9aW5jSGV4KGMscik7YS5yZWFkSGV4U2lnbmVkKEMscik7YWRkSGV4KGMsQyxyKTt0Lm1hcE9uZShoZXhUb0ludChnLFEpLGhleFRvU3RyKGMscikpfWJyZWFrO2Nhc2UgNTphLnJlYWRIZXgobixRKTthLnJlYWRIZXhOdW1iZXIobyxRKTthZGRIZXgobyxuLFEpO2EucmVhZEhleChjLHIpO3QubWFwQmZSYW5nZShoZXhUb0ludChuLFEpLGhleFRvSW50KG8sUSksaGV4VG9TdHIoYyxyKSk7Zm9yKGxldCBlPTE7ZTxFO2UrKyl7aW5jSGV4KG8sUSk7aWYoaSluLnNldChvKTtlbHNle2EucmVhZEhleE51bWJlcihuLFEpO2FkZEhleChuLG8sUSl9YS5yZWFkSGV4TnVtYmVyKG8sUSk7YWRkSGV4KG8sbixRKTthLnJlYWRIZXgoYyxyKTt0Lm1hcEJmUmFuZ2UoaGV4VG9JbnQobixRKSxoZXhUb0ludChvLFEpLGhleFRvU3RyKGMscikpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3MgLSB1bmtub3duIHR5cGU6ICR7ZX1gKX19cmV0dXJuIHM/aShzKTp0fX1jb25zdCBNdD1uZXcgVWludDhBcnJheSgwKTtjbGFzcyBEZWNvZGVTdHJlYW0gZXh0ZW5kcyBCYXNlU3RyZWFte2NvbnN0cnVjdG9yKGUpe3N1cGVyKCk7dGhpcy5fcmF3TWluQnVmZmVyTGVuZ3RoPWV8fDA7dGhpcy5wb3M9MDt0aGlzLmJ1ZmZlckxlbmd0aD0wO3RoaXMuZW9mPSExO3RoaXMuYnVmZmVyPU10O3RoaXMubWluQnVmZmVyTGVuZ3RoPTUxMjtpZihlKWZvcig7dGhpcy5taW5CdWZmZXJMZW5ndGg8ZTspdGhpcy5taW5CdWZmZXJMZW5ndGgqPTJ9Z2V0IGlzRW1wdHkoKXtmb3IoOyF0aGlzLmVvZiYmMD09PXRoaXMuYnVmZmVyTGVuZ3RoOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiAwPT09dGhpcy5idWZmZXJMZW5ndGh9ZW5zdXJlQnVmZmVyKGUpe2NvbnN0IHQ9dGhpcy5idWZmZXI7aWYoZTw9dC5ieXRlTGVuZ3RoKXJldHVybiB0O2xldCBpPXRoaXMubWluQnVmZmVyTGVuZ3RoO2Zvcig7aTxlOylpKj0yO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoaSk7YS5zZXQodCk7cmV0dXJuIHRoaXMuYnVmZmVyPWF9Z2V0Qnl0ZSgpe2NvbnN0IGU9dGhpcy5wb3M7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw9ZTspe2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMucmVhZEJsb2NrKCl9cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdfWdldEJ5dGVzKGUsdD1udWxsKXtjb25zdCBpPXRoaXMucG9zO2xldCBhO2lmKGUpe3RoaXMuZW5zdXJlQnVmZmVyKGkrZSk7YT1pK2U7Zm9yKDshdGhpcy5lb2YmJnRoaXMuYnVmZmVyTGVuZ3RoPGE7KXRoaXMucmVhZEJsb2NrKHQpO2NvbnN0IHI9dGhpcy5idWZmZXJMZW5ndGg7YT5yJiYoYT1yKX1lbHNle2Zvcig7IXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jayh0KTthPXRoaXMuYnVmZmVyTGVuZ3RofXRoaXMucG9zPWE7cmV0dXJuIHRoaXMuYnVmZmVyLnN1YmFycmF5KGksYSl9YXN5bmMgZ2V0SW1hZ2VEYXRhKGUsdD1udWxsKXtpZighdGhpcy5jYW5Bc3luY0RlY29kZUltYWdlRnJvbUJ1ZmZlcilyZXR1cm4gdGhpcy5nZXRCeXRlcyhlLHQpO2NvbnN0IGk9YXdhaXQgdGhpcy5zdHJlYW0uYXN5bmNHZXRCeXRlcygpO3JldHVybiB0aGlzLmRlY29kZUltYWdlKGksdCl9cmVzZXQoKXt0aGlzLnBvcz0wfW1ha2VTdWJTdHJlYW0oZSx0LGk9bnVsbCl7aWYodm9pZCAwPT09dClmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTtlbHNle2NvbnN0IGk9ZSt0O2Zvcig7dGhpcy5idWZmZXJMZW5ndGg8PWkmJiF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKX1yZXR1cm4gbmV3IFN0cmVhbSh0aGlzLmJ1ZmZlcixlLHQsaSl9Z2V0QmFzZVN0cmVhbXMoKXtyZXR1cm4gdGhpcy5zdHI/dGhpcy5zdHIuZ2V0QmFzZVN0cmVhbXMoKTpudWxsfX1jbGFzcyBTdHJlYW1zU2VxdWVuY2VTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0PW51bGwpe2xldCBpPTA7Zm9yKGNvbnN0IHQgb2YgZSlpKz10IGluc3RhbmNlb2YgRGVjb2RlU3RyZWFtP3QuX3Jhd01pbkJ1ZmZlckxlbmd0aDp0Lmxlbmd0aDtzdXBlcihpKTt0aGlzLnN0cmVhbXM9ZTt0aGlzLl9vbkVycm9yPXR9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0cmVhbXM7aWYoMD09PWUubGVuZ3RoKXt0aGlzLmVvZj0hMDtyZXR1cm59Y29uc3QgdD1lLnNoaWZ0KCk7bGV0IGk7dHJ5e2k9dC5nZXRCeXRlcygpfWNhdGNoKGUpe2lmKHRoaXMuX29uRXJyb3Ipe3RoaXMuX29uRXJyb3IoZSx0LmRpY3Q/Lm9iaklkKTtyZXR1cm59dGhyb3cgZX1jb25zdCBhPXRoaXMuYnVmZmVyTGVuZ3RoLHI9YStpLmxlbmd0aDt0aGlzLmVuc3VyZUJ1ZmZlcihyKS5zZXQoaSxhKTt0aGlzLmJ1ZmZlckxlbmd0aD1yfWdldEJhc2VTdHJlYW1zKCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiB0aGlzLnN0cmVhbXMpe2NvbnN0IGk9dC5nZXRCYXNlU3RyZWFtcygpO2kmJmUucHVzaCguLi5pKX1yZXR1cm4gZS5sZW5ndGg+MD9lOm51bGx9fWNsYXNzIEFzY2lpODVTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0KXt0JiYodCo9LjgpO3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmlucHV0PW5ldyBVaW50OEFycmF5KDUpfXJlYWRCbG9jaygpe2NvbnN0IGU9dGhpcy5zdHI7bGV0IHQ9ZS5nZXRCeXRlKCk7Zm9yKDtpc1doaXRlU3BhY2UodCk7KXQ9ZS5nZXRCeXRlKCk7aWYoLTE9PT10fHwxMjY9PT10KXt0aGlzLmVvZj0hMDtyZXR1cm59Y29uc3QgaT10aGlzLmJ1ZmZlckxlbmd0aDtsZXQgYSxyO2lmKDEyMj09PXQpe2E9dGhpcy5lbnN1cmVCdWZmZXIoaSs0KTtmb3Iocj0wO3I8NDsrK3IpYVtpK3JdPTA7dGhpcy5idWZmZXJMZW5ndGgrPTR9ZWxzZXtjb25zdCBzPXRoaXMuaW5wdXQ7c1swXT10O2ZvcihyPTE7cjw1Oysrcil7dD1lLmdldEJ5dGUoKTtmb3IoO2lzV2hpdGVTcGFjZSh0KTspdD1lLmdldEJ5dGUoKTtzW3JdPXQ7aWYoLTE9PT10fHwxMjY9PT10KWJyZWFrfWE9dGhpcy5lbnN1cmVCdWZmZXIoaStyLTEpO3RoaXMuYnVmZmVyTGVuZ3RoKz1yLTE7aWYocjw1KXtmb3IoO3I8NTsrK3Ipc1tyXT0xMTc7dGhpcy5lb2Y9ITB9bGV0IG49MDtmb3Iocj0wO3I8NTsrK3Ipbj04NSpuKyhzW3JdLTMzKTtmb3Iocj0zO3I+PTA7LS1yKXthW2krcl09MjU1Jm47bj4+PTh9fX19Y2xhc3MgQXNjaWlIZXhTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0KXt0JiYodCo9LjUpO3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmZpcnN0RGlnaXQ9LTF9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0ci5nZXRCeXRlcyg4ZTMpO2lmKCFlLmxlbmd0aCl7dGhpcy5lb2Y9ITA7cmV0dXJufWNvbnN0IHQ9ZS5sZW5ndGgrMT4+MSxpPXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK3QpO2xldCBhPXRoaXMuYnVmZmVyTGVuZ3RoLHI9dGhpcy5maXJzdERpZ2l0O2Zvcihjb25zdCB0IG9mIGUpe2xldCBlO2lmKHQ+PTQ4JiZ0PD01NyllPTE1JnQ7ZWxzZXtpZighKHQ+PTY1JiZ0PD03MHx8dD49OTcmJnQ8PTEwMikpe2lmKDYyPT09dCl7dGhpcy5lb2Y9ITA7YnJlYWt9Y29udGludWV9ZT05KygxNSZ0KX1pZihyPDApcj1lO2Vsc2V7aVthKytdPXI8PDR8ZTtyPS0xfX1pZihyPj0wJiZ0aGlzLmVvZil7aVthKytdPXI8PDQ7cj0tMX10aGlzLmZpcnN0RGlnaXQ9cjt0aGlzLmJ1ZmZlckxlbmd0aD1hfX1jb25zdCBMdD0tMSxIdD1bWy0xLC0xXSxbLTEsLTFdLFs3LDhdLFs3LDddLFs2LDZdLFs2LDZdLFs2LDVdLFs2LDVdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdXSxKdD1bWy0xLC0xXSxbMTIsLTJdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDk2XSxbMTIsMjU2MF1dLHZ0PVtbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFs4LDI5XSxbOCwyOV0sWzgsMzBdLFs4LDMwXSxbOCw0NV0sWzgsNDVdLFs4LDQ2XSxbOCw0Nl0sWzcsMjJdLFs3LDIyXSxbNywyMl0sWzcsMjJdLFs3LDIzXSxbNywyM10sWzcsMjNdLFs3LDIzXSxbOCw0N10sWzgsNDddLFs4LDQ4XSxbOCw0OF0sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNywyMF0sWzcsMjBdLFs3LDIwXSxbNywyMF0sWzgsMzNdLFs4LDMzXSxbOCwzNF0sWzgsMzRdLFs4LDM1XSxbOCwzNV0sWzgsMzZdLFs4LDM2XSxbOCwzN10sWzgsMzddLFs4LDM4XSxbOCwzOF0sWzcsMTldLFs3LDE5XSxbNywxOV0sWzcsMTldLFs4LDMxXSxbOCwzMV0sWzgsMzJdLFs4LDMyXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs4LDUzXSxbOCw1M10sWzgsNTRdLFs4LDU0XSxbNywyNl0sWzcsMjZdLFs3LDI2XSxbNywyNl0sWzgsMzldLFs4LDM5XSxbOCw0MF0sWzgsNDBdLFs4LDQxXSxbOCw0MV0sWzgsNDJdLFs4LDQyXSxbOCw0M10sWzgsNDNdLFs4LDQ0XSxbOCw0NF0sWzcsMjFdLFs3LDIxXSxbNywyMV0sWzcsMjFdLFs3LDI4XSxbNywyOF0sWzcsMjhdLFs3LDI4XSxbOCw2MV0sWzgsNjFdLFs4LDYyXSxbOCw2Ml0sWzgsNjNdLFs4LDYzXSxbOCwwXSxbOCwwXSxbOCwzMjBdLFs4LDMyMF0sWzgsMzg0XSxbOCwzODRdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzcsMjddLFs3LDI3XSxbNywyN10sWzcsMjddLFs4LDU5XSxbOCw1OV0sWzgsNjBdLFs4LDYwXSxbOSwxNDcyXSxbOSwxNTM2XSxbOSwxNjAwXSxbOSwxNzI4XSxbNywxOF0sWzcsMThdLFs3LDE4XSxbNywxOF0sWzcsMjRdLFs3LDI0XSxbNywyNF0sWzcsMjRdLFs4LDQ5XSxbOCw0OV0sWzgsNTBdLFs4LDUwXSxbOCw1MV0sWzgsNTFdLFs4LDUyXSxbOCw1Ml0sWzcsMjVdLFs3LDI1XSxbNywyNV0sWzcsMjVdLFs4LDU1XSxbOCw1NV0sWzgsNTZdLFs4LDU2XSxbOCw1N10sWzgsNTddLFs4LDU4XSxbOCw1OF0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs4LDQ0OF0sWzgsNDQ4XSxbOCw1MTJdLFs4LDUxMl0sWzksNzA0XSxbOSw3NjhdLFs4LDY0MF0sWzgsNjQwXSxbOCw1NzZdLFs4LDU3Nl0sWzksODMyXSxbOSw4OTZdLFs5LDk2MF0sWzksMTAyNF0sWzksMTA4OF0sWzksMTE1Ml0sWzksMTIxNl0sWzksMTI4MF0sWzksMTM0NF0sWzksMTQwOF0sWzcsMjU2XSxbNywyNTZdLFs3LDI1Nl0sWzcsMjU2XSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddXSxZdD1bWy0xLC0xXSxbLTEsLTFdLFsxMiwtMl0sWzEyLC0yXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTIsMTk4NF0sWzEyLDE5ODRdLFsxMiwyMDQ4XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTEyXSxbMTIsMjE3Nl0sWzEyLDIxNzZdLFsxMiwyMjQwXSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMiwyMzA0XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMiwyMzY4XSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDMyXSxbMTIsMjQ5Nl0sWzEyLDI0OTZdLFsxMiwyNTYwXSxbMTIsMjU2MF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMiw1Ml0sWzEyLDUyXSxbMTMsNjQwXSxbMTMsNzA0XSxbMTMsNzY4XSxbMTMsODMyXSxbMTIsNTVdLFsxMiw1NV0sWzEyLDU2XSxbMTIsNTZdLFsxMywxMjgwXSxbMTMsMTM0NF0sWzEzLDE0MDhdLFsxMywxNDcyXSxbMTIsNTldLFsxMiw1OV0sWzEyLDYwXSxbMTIsNjBdLFsxMywxNTM2XSxbMTMsMTYwMF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTEsMjVdLFsxMywxNjY0XSxbMTMsMTcyOF0sWzEyLDMyMF0sWzEyLDMyMF0sWzEyLDM4NF0sWzEyLDM4NF0sWzEyLDQ0OF0sWzEyLDQ0OF0sWzEzLDUxMl0sWzEzLDU3Nl0sWzEyLDUzXSxbMTIsNTNdLFsxMiw1NF0sWzEyLDU0XSxbMTMsODk2XSxbMTMsOTYwXSxbMTMsMTAyNF0sWzEzLDEwODhdLFsxMywxMTUyXSxbMTMsMTIxNl0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdXSxUdD1bWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFsxMSwyM10sWzExLDIzXSxbMTIsNTBdLFsxMiw1MV0sWzEyLDQ0XSxbMTIsNDVdLFsxMiw0Nl0sWzEyLDQ3XSxbMTIsNTddLFsxMiw1OF0sWzEyLDYxXSxbMTIsMjU2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxN10sWzEwLDE3XSxbMTAsMTddLFsxMCwxN10sWzEyLDQ4XSxbMTIsNDldLFsxMiw2Ml0sWzEyLDYzXSxbMTIsMzBdLFsxMiwzMV0sWzEyLDMyXSxbMTIsMzNdLFsxMiw0MF0sWzEyLDQxXSxbMTEsMjJdLFsxMSwyMl0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFsxMiwxMjhdLFsxMiwxOTJdLFsxMiwyNl0sWzEyLDI3XSxbMTIsMjhdLFsxMiwyOV0sWzExLDE5XSxbMTEsMTldLFsxMSwyMF0sWzExLDIwXSxbMTIsMzRdLFsxMiwzNV0sWzEyLDM2XSxbMTIsMzddLFsxMiwzOF0sWzEyLDM5XSxbMTEsMjFdLFsxMSwyMV0sWzEyLDQyXSxbMTIsNDNdLFsxMCwwXSxbMTAsMF0sWzEwLDBdLFsxMCwwXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdXSxLdD1bWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbNiw5XSxbNiw4XSxbNSw3XSxbNSw3XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXV07Y2xhc3MgQ0NJVFRGYXhEZWNvZGVye2NvbnN0cnVjdG9yKGUsdD17fSl7aWYoIWV8fCJmdW5jdGlvbiIhPXR5cGVvZiBlLm5leHQpdGhyb3cgbmV3IEVycm9yKCdDQ0lUVEZheERlY29kZXIgLSBpbnZhbGlkICJzb3VyY2UiIHBhcmFtZXRlci4nKTt0aGlzLnNvdXJjZT1lO3RoaXMuZW9mPSExO3RoaXMuZW5jb2Rpbmc9dC5LfHwwO3RoaXMuZW9saW5lPXQuRW5kT2ZMaW5lfHwhMTt0aGlzLmJ5dGVBbGlnbj10LkVuY29kZWRCeXRlQWxpZ258fCExO3RoaXMuY29sdW1ucz10LkNvbHVtbnN8fDE3Mjg7dGhpcy5yb3dzPXQuUm93c3x8MDt0aGlzLmVvYmxvY2s9dC5FbmRPZkJsb2NrPz8hMDt0aGlzLmJsYWNrPXQuQmxhY2tJczF8fCExO3RoaXMuY29kaW5nTGluZT1uZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zKzEpO3RoaXMucmVmTGluZT1uZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zKzIpO3RoaXMuY29kaW5nTGluZVswXT10aGlzLmNvbHVtbnM7dGhpcy5jb2RpbmdQb3M9MDt0aGlzLnJvdz0wO3RoaXMubmV4dExpbmUyRD10aGlzLmVuY29kaW5nPDA7dGhpcy5pbnB1dEJpdHM9MDt0aGlzLmlucHV0QnVmPTA7dGhpcy5vdXRwdXRCaXRzPTA7dGhpcy5yb3dzRG9uZT0hMTtsZXQgaTtmb3IoOzA9PT0oaT10aGlzLl9sb29rQml0cygxMikpOyl0aGlzLl9lYXRCaXRzKDEpOzE9PT1pJiZ0aGlzLl9lYXRCaXRzKDEyKTtpZih0aGlzLmVuY29kaW5nPjApe3RoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSk7dGhpcy5fZWF0Qml0cygxKX19cmVhZE5leHRDaGFyKCl7aWYodGhpcy5lb2YpcmV0dXJuLTE7Y29uc3QgZT10aGlzLnJlZkxpbmUsdD10aGlzLmNvZGluZ0xpbmUsaT10aGlzLmNvbHVtbnM7bGV0IGEscixzLG4sbztpZigwPT09dGhpcy5vdXRwdXRCaXRzKXt0aGlzLnJvd3NEb25lJiYodGhpcy5lb2Y9ITApO2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMuZXJyPSExO2xldCBzLG8sZztpZih0aGlzLm5leHRMaW5lMkQpe2ZvcihuPTA7dFtuXTxpOysrbillW25dPXRbbl07ZVtuKytdPWk7ZVtuXT1pO3RbMF09MDt0aGlzLmNvZGluZ1Bvcz0wO2E9MDtyPTA7Zm9yKDt0W3RoaXMuY29kaW5nUG9zXTxpOyl7cz10aGlzLl9nZXRUd29EaW1Db2RlKCk7c3dpdGNoKHMpe2Nhc2UgMDp0aGlzLl9hZGRQaXhlbHMoZVthKzFdLHIpO2VbYSsxXTxpJiYoYSs9Mik7YnJlYWs7Y2FzZSAxOnM9bz0wO2lmKHIpe2Rve3MrPWc9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoZz49NjQpO2Rve28rPWc9dGhpcy5fZ2V0V2hpdGVDb2RlKCl9d2hpbGUoZz49NjQpfWVsc2V7ZG97cys9Zz10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShnPj02NCk7ZG97bys9Zz10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShnPj02NCl9dGhpcy5fYWRkUGl4ZWxzKHRbdGhpcy5jb2RpbmdQb3NdK3Mscik7dFt0aGlzLmNvZGluZ1Bvc108aSYmdGhpcy5fYWRkUGl4ZWxzKHRbdGhpcy5jb2RpbmdQb3NdK28sMV5yKTtmb3IoO2VbYV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2FdPGk7KWErPTI7YnJlYWs7Y2FzZSA3OnRoaXMuX2FkZFBpeGVscyhlW2FdKzMscik7cl49MTtpZih0W3RoaXMuY29kaW5nUG9zXTxpKXsrK2E7Zm9yKDtlW2FdPD10W3RoaXMuY29kaW5nUG9zXSYmZVthXTxpOylhKz0yfWJyZWFrO2Nhc2UgNTp0aGlzLl9hZGRQaXhlbHMoZVthXSsyLHIpO3JePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108aSl7KythO2Zvcig7ZVthXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbYV08aTspYSs9Mn1icmVhaztjYXNlIDM6dGhpcy5fYWRkUGl4ZWxzKGVbYV0rMSxyKTtyXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGkpeysrYTtmb3IoO2VbYV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2FdPGk7KWErPTJ9YnJlYWs7Y2FzZSAyOnRoaXMuX2FkZFBpeGVscyhlW2FdLHIpO3JePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108aSl7KythO2Zvcig7ZVthXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbYV08aTspYSs9Mn1icmVhaztjYXNlIDg6dGhpcy5fYWRkUGl4ZWxzTmVnKGVbYV0tMyxyKTtyXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGkpe2E+MD8tLWE6KythO2Zvcig7ZVthXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbYV08aTspYSs9Mn1icmVhaztjYXNlIDY6dGhpcy5fYWRkUGl4ZWxzTmVnKGVbYV0tMixyKTtyXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGkpe2E+MD8tLWE6KythO2Zvcig7ZVthXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbYV08aTspYSs9Mn1icmVhaztjYXNlIDQ6dGhpcy5fYWRkUGl4ZWxzTmVnKGVbYV0tMSxyKTtyXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGkpe2E+MD8tLWE6KythO2Zvcig7ZVthXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbYV08aTspYSs9Mn1icmVhaztjYXNlIEx0OnRoaXMuX2FkZFBpeGVscyhpLDApO3RoaXMuZW9mPSEwO2JyZWFrO2RlZmF1bHQ6aW5mbygiYmFkIDJkIGNvZGUiKTt0aGlzLl9hZGRQaXhlbHMoaSwwKTt0aGlzLmVycj0hMH19fWVsc2V7dFswXT0wO3RoaXMuY29kaW5nUG9zPTA7cj0wO2Zvcig7dFt0aGlzLmNvZGluZ1Bvc108aTspe3M9MDtpZihyKWRve3MrPWc9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoZz49NjQpO2Vsc2UgZG97cys9Zz10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShnPj02NCk7dGhpcy5fYWRkUGl4ZWxzKHRbdGhpcy5jb2RpbmdQb3NdK3Mscik7cl49MX19bGV0IGM9ITE7dGhpcy5ieXRlQWxpZ24mJih0aGlzLmlucHV0Qml0cyY9LTgpO2lmKHRoaXMuZW9ibG9ja3x8dGhpcy5yb3chPT10aGlzLnJvd3MtMSl7cz10aGlzLl9sb29rQml0cygxMik7aWYodGhpcy5lb2xpbmUpZm9yKDtzIT09THQmJjEhPT1zOyl7dGhpcy5fZWF0Qml0cygxKTtzPXRoaXMuX2xvb2tCaXRzKDEyKX1lbHNlIGZvcig7MD09PXM7KXt0aGlzLl9lYXRCaXRzKDEpO3M9dGhpcy5fbG9va0JpdHMoMTIpfWlmKDE9PT1zKXt0aGlzLl9lYXRCaXRzKDEyKTtjPSEwfWVsc2Ugcz09PUx0JiYodGhpcy5lb2Y9ITApfWVsc2UgdGhpcy5yb3dzRG9uZT0hMDtpZighdGhpcy5lb2YmJnRoaXMuZW5jb2Rpbmc+MCYmIXRoaXMucm93c0RvbmUpe3RoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSk7dGhpcy5fZWF0Qml0cygxKX1pZih0aGlzLmVvYmxvY2smJmMmJnRoaXMuYnl0ZUFsaWduKXtzPXRoaXMuX2xvb2tCaXRzKDEyKTtpZigxPT09cyl7dGhpcy5fZWF0Qml0cygxMik7aWYodGhpcy5lbmNvZGluZz4wKXt0aGlzLl9sb29rQml0cygxKTt0aGlzLl9lYXRCaXRzKDEpfWlmKHRoaXMuZW5jb2Rpbmc+PTApZm9yKG49MDtuPDQ7KytuKXtzPXRoaXMuX2xvb2tCaXRzKDEyKTsxIT09cyYmaW5mbygiYmFkIHJ0YyBjb2RlOiAiK3MpO3RoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fbG9va0JpdHMoMSk7dGhpcy5fZWF0Qml0cygxKX19dGhpcy5lb2Y9ITB9fWVsc2UgaWYodGhpcy5lcnImJnRoaXMuZW9saW5lKXtmb3IoOzspe3M9dGhpcy5fbG9va0JpdHMoMTMpO2lmKHM9PT1MdCl7dGhpcy5lb2Y9ITA7cmV0dXJuLTF9aWYocz4+MT09MSlicmVhazt0aGlzLl9lYXRCaXRzKDEpfXRoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fZWF0Qml0cygxKTt0aGlzLm5leHRMaW5lMkQ9ISgxJnMpfX10aGlzLm91dHB1dEJpdHM9dFswXT4wP3RbdGhpcy5jb2RpbmdQb3M9MF06dFt0aGlzLmNvZGluZ1Bvcz0xXTt0aGlzLnJvdysrfWlmKHRoaXMub3V0cHV0Qml0cz49OCl7bz0xJnRoaXMuY29kaW5nUG9zPzA6MjU1O3RoaXMub3V0cHV0Qml0cy09ODtpZigwPT09dGhpcy5vdXRwdXRCaXRzJiZ0W3RoaXMuY29kaW5nUG9zXTxpKXt0aGlzLmNvZGluZ1BvcysrO3RoaXMub3V0cHV0Qml0cz10W3RoaXMuY29kaW5nUG9zXS10W3RoaXMuY29kaW5nUG9zLTFdfX1lbHNle3M9ODtvPTA7ZG97aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLm91dHB1dEJpdHMpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCdJbnZhbGlkIC9DQ0lUVEZheERlY29kZSBkYXRhLCAib3V0cHV0Qml0cyIgbXVzdCBiZSBhIG51bWJlci4nKTtpZih0aGlzLm91dHB1dEJpdHM+cyl7bzw8PXM7MSZ0aGlzLmNvZGluZ1Bvc3x8KG98PTI1NT4+OC1zKTt0aGlzLm91dHB1dEJpdHMtPXM7cz0wfWVsc2V7bzw8PXRoaXMub3V0cHV0Qml0czsxJnRoaXMuY29kaW5nUG9zfHwob3w9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyk7cy09dGhpcy5vdXRwdXRCaXRzO3RoaXMub3V0cHV0Qml0cz0wO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGkpe3RoaXMuY29kaW5nUG9zKys7dGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3NdLXRbdGhpcy5jb2RpbmdQb3MtMV19ZWxzZSBpZihzPjApe288PD1zO3M9MH19fXdoaWxlKHMpfXRoaXMuYmxhY2smJihvXj0yNTUpO3JldHVybiBvfV9hZGRQaXhlbHMoZSx0KXtjb25zdCBpPXRoaXMuY29kaW5nTGluZTtsZXQgYT10aGlzLmNvZGluZ1BvcztpZihlPmlbYV0pe2lmKGU+dGhpcy5jb2x1bW5zKXtpbmZvKCJyb3cgaXMgd3JvbmcgbGVuZ3RoIik7dGhpcy5lcnI9ITA7ZT10aGlzLmNvbHVtbnN9MSZhXnQmJisrYTtpW2FdPWV9dGhpcy5jb2RpbmdQb3M9YX1fYWRkUGl4ZWxzTmVnKGUsdCl7Y29uc3QgaT10aGlzLmNvZGluZ0xpbmU7bGV0IGE9dGhpcy5jb2RpbmdQb3M7aWYoZT5pW2FdKXtpZihlPnRoaXMuY29sdW1ucyl7aW5mbygicm93IGlzIHdyb25nIGxlbmd0aCIpO3RoaXMuZXJyPSEwO2U9dGhpcy5jb2x1bW5zfTEmYV50JiYrK2E7aVthXT1lfWVsc2UgaWYoZTxpW2FdKXtpZihlPDApe2luZm8oImludmFsaWQgY29kZSIpO3RoaXMuZXJyPSEwO2U9MH1mb3IoO2E+MCYmZTxpW2EtMV07KS0tYTtpW2FdPWV9dGhpcy5jb2RpbmdQb3M9YX1fZmluZFRhYmxlQ29kZShlLHQsaSxhKXtjb25zdCByPWF8fDA7Zm9yKGxldCBhPWU7YTw9dDsrK2Epe2xldCBlPXRoaXMuX2xvb2tCaXRzKGEpO2lmKGU9PT1MdClyZXR1cm5bITAsMSwhMV07YTx0JiYoZTw8PXQtYSk7aWYoIXJ8fGU+PXIpe2NvbnN0IHQ9aVtlLXJdO2lmKHRbMF09PT1hKXt0aGlzLl9lYXRCaXRzKGEpO3JldHVyblshMCx0WzFdLCEwXX19fXJldHVyblshMSwwLCExXX1fZ2V0VHdvRGltQ29kZSgpe2xldCBlLHQ9MDtpZih0aGlzLmVvYmxvY2spe3Q9dGhpcy5fbG9va0JpdHMoNyk7ZT1IdFt0XTtpZihlPy5bMF0+MCl7dGhpcy5fZWF0Qml0cyhlWzBdKTtyZXR1cm4gZVsxXX19ZWxzZXtjb25zdCBlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMSw3LEh0KTtpZihlWzBdJiZlWzJdKXJldHVybiBlWzFdfWluZm8oIkJhZCB0d28gZGltIGNvZGUiKTtyZXR1cm4gTHR9X2dldFdoaXRlQ29kZSgpe2xldCBlLHQ9MDtpZih0aGlzLmVvYmxvY2spe3Q9dGhpcy5fbG9va0JpdHMoMTIpO2lmKHQ9PT1MdClyZXR1cm4gMTtlPXQ+PjU9PTA/SnRbdF06dnRbdD4+M107aWYoZVswXT4wKXt0aGlzLl9lYXRCaXRzKGVbMF0pO3JldHVybiBlWzFdfX1lbHNle2xldCBlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMSw5LHZ0KTtpZihlWzBdKXJldHVybiBlWzFdO2U9dGhpcy5fZmluZFRhYmxlQ29kZSgxMSwxMixKdCk7aWYoZVswXSlyZXR1cm4gZVsxXX1pbmZvKCJiYWQgd2hpdGUgY29kZSIpO3RoaXMuX2VhdEJpdHMoMSk7cmV0dXJuIDF9X2dldEJsYWNrQ29kZSgpe2xldCBlLHQ7aWYodGhpcy5lb2Jsb2NrKXtlPXRoaXMuX2xvb2tCaXRzKDEzKTtpZihlPT09THQpcmV0dXJuIDE7dD1lPj43PT0wP1l0W2VdOmU+Pjk9PTAmJmU+PjchPTA/VHRbKGU+PjEpLTY0XTpLdFtlPj43XTtpZih0WzBdPjApe3RoaXMuX2VhdEJpdHModFswXSk7cmV0dXJuIHRbMV19fWVsc2V7bGV0IGU9dGhpcy5fZmluZFRhYmxlQ29kZSgyLDYsS3QpO2lmKGVbMF0pcmV0dXJuIGVbMV07ZT10aGlzLl9maW5kVGFibGVDb2RlKDcsMTIsVHQsNjQpO2lmKGVbMF0pcmV0dXJuIGVbMV07ZT10aGlzLl9maW5kVGFibGVDb2RlKDEwLDEzLFl0KTtpZihlWzBdKXJldHVybiBlWzFdfWluZm8oImJhZCBibGFjayBjb2RlIik7dGhpcy5fZWF0Qml0cygxKTtyZXR1cm4gMX1fbG9va0JpdHMoZSl7bGV0IHQ7Zm9yKDt0aGlzLmlucHV0Qml0czxlOyl7aWYoLTE9PT0odD10aGlzLnNvdXJjZS5uZXh0KCkpKXJldHVybiAwPT09dGhpcy5pbnB1dEJpdHM/THQ6dGhpcy5pbnB1dEJ1Zjw8ZS10aGlzLmlucHV0Qml0cyY2NTUzNT4+MTYtZTt0aGlzLmlucHV0QnVmPXRoaXMuaW5wdXRCdWY8PDh8dDt0aGlzLmlucHV0Qml0cys9OH1yZXR1cm4gdGhpcy5pbnB1dEJ1Zj4+dGhpcy5pbnB1dEJpdHMtZSY2NTUzNT4+MTYtZX1fZWF0Qml0cyhlKXsodGhpcy5pbnB1dEJpdHMtPWUpPDAmJih0aGlzLmlucHV0Qml0cz0wKX19Y2xhc3MgQ0NJVFRGYXhTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDtpIGluc3RhbmNlb2YgRGljdHx8KGk9RGljdC5lbXB0eSk7Y29uc3QgYT17bmV4dDooKT0+ZS5nZXRCeXRlKCl9O3RoaXMuY2NpdHRGYXhEZWNvZGVyPW5ldyBDQ0lUVEZheERlY29kZXIoYSx7SzppLmdldCgiSyIpLEVuZE9mTGluZTppLmdldCgiRW5kT2ZMaW5lIiksRW5jb2RlZEJ5dGVBbGlnbjppLmdldCgiRW5jb2RlZEJ5dGVBbGlnbiIpLENvbHVtbnM6aS5nZXQoIkNvbHVtbnMiKSxSb3dzOmkuZ2V0KCJSb3dzIiksRW5kT2ZCbG9jazppLmdldCgiRW5kT2ZCbG9jayIpLEJsYWNrSXMxOmkuZ2V0KCJCbGFja0lzMSIpfSl9cmVhZEJsb2NrKCl7Zm9yKDshdGhpcy5lb2Y7KXtjb25zdCBlPXRoaXMuY2NpdHRGYXhEZWNvZGVyLnJlYWROZXh0Q2hhcigpO2lmKC0xPT09ZSl7dGhpcy5lb2Y9ITA7cmV0dXJufXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoKzEpO3RoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWV9fX1jb25zdCBxdD1uZXcgSW50MzJBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLE90PW5ldyBJbnQzMkFycmF5KFszLDQsNSw2LDcsOCw5LDEwLDY1NTQ3LDY1NTQ5LDY1NTUxLDY1NTUzLDEzMTA5MSwxMzEwOTUsMTMxMDk5LDEzMTEwMywxOTY2NDMsMTk2NjUxLDE5NjY1OSwxOTY2NjcsMjYyMjExLDI2MjIyNywyNjIyNDMsMjYyMjU5LDMyNzgxMSwzMjc4NDMsMzI3ODc1LDMyNzkwNywyNTgsMjU4LDI1OF0pLFB0PW5ldyBJbnQzMkFycmF5KFsxLDIsMyw0LDY1NTQxLDY1NTQzLDEzMTA4MSwxMzEwODUsMTk2NjI1LDE5NjYzMywyNjIxNzcsMjYyMTkzLDMyNzc0NSwzMjc3NzcsMzkzMzQ1LDM5MzQwOSw0NTkwMDksNDU5MTM3LDUyNDgwMSw1MjUwNTcsNTkwODQ5LDU5MTM2MSw2NTc0MDksNjU4NDMzLDcyNDk5Myw3MjcwNDEsNzk0NjI1LDc5ODcyMSw4NjgzNTMsODc2NTQ1XSksV3Q9W25ldyBJbnQzMkFycmF5KFs0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE2LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NCw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDgsNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY4LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMiw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OWU0LDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NCw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI0LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Miw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTYsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc2LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MCw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDgsNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDcyLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjAsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg4LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Miw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzIsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM2LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNCw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjgsNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOCw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTYsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYwLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MCw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDQsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEyLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Niw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE4LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Niw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTAsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcwLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNCw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDIsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY2LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjYsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk0LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OCw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzgsNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQyLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMCw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzQsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMiw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTAsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU0LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NCw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzgsNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA2LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MCw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMwLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OCw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjIsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgyLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Niw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTQsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc4LDQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTcsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg1LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OSw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjksNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMzLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5MDAwMSw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjUsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNSw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTMsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU3LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Nyw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDEsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA5LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Myw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIxLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OSw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTMsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTczLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNyw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDUsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY5LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjksNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk3LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MSw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODEsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ1LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMyw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzcsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOSw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODcsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUxLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MSw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzUsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAzLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Nyw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI3LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NSw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTksNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc5LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Myw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTEsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc1LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjMsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkxLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NSw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzUsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM5LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNyw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzEsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMSw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTksNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYzLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Myw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDcsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE1LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OV0pLDldLGp0PVtuZXcgSW50MzJBcnJheShbMzI3NjgwLDMyNzY5NiwzMjc2ODgsMzI3NzA0LDMyNzY4NCwzMjc3MDAsMzI3NjkyLDMyNzcwOCwzMjc2ODIsMzI3Njk4LDMyNzY5MCwzMjc3MDYsMzI3Njg2LDMyNzcwMiwzMjc2OTQsMCwzMjc2ODEsMzI3Njk3LDMyNzY4OSwzMjc3MDUsMzI3Njg1LDMyNzcwMSwzMjc2OTMsMzI3NzA5LDMyNzY4MywzMjc2OTksMzI3NjkxLDMyNzcwNywzMjc2ODcsMzI3NzAzLDMyNzY5NSwwXSksNV07Y2xhc3MgRmxhdGVTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0KXtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7Y29uc3QgaT1lLmdldEJ5dGUoKSxhPWUuZ2V0Qnl0ZSgpO2lmKC0xPT09aXx8LTE9PT1hKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtOiAke2l9LCAke2F9YCk7aWYoOCE9KDE1JmkpKXRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QgaW4gZmxhdGUgc3RyZWFtOiAke2l9LCAke2F9YCk7aWYoKChpPDw4KSthKSUzMSE9MCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEJhZCBGQ0hFQ0sgaW4gZmxhdGUgc3RyZWFtOiAke2l9LCAke2F9YCk7aWYoMzImYSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEZESUNUIGJpdCBzZXQgaW4gZmxhdGUgc3RyZWFtOiAke2l9LCAke2F9YCk7dGhpcy5jb2RlU2l6ZT0wO3RoaXMuY29kZUJ1Zj0wfWFzeW5jIGdldEltYWdlRGF0YShlLHQpe2NvbnN0IGk9YXdhaXQgdGhpcy5hc3luY0dldEJ5dGVzKCk7cmV0dXJuIGk/LnN1YmFycmF5KDAsZSl8fHRoaXMuZ2V0Qnl0ZXMoZSl9YXN5bmMgYXN5bmNHZXRCeXRlcygpe3RoaXMuc3RyLnJlc2V0KCk7Y29uc3QgZT10aGlzLnN0ci5nZXRCeXRlcygpO3RyeXtjb25zdHtyZWFkYWJsZTp0LHdyaXRhYmxlOml9PW5ldyBEZWNvbXByZXNzaW9uU3RyZWFtKCJkZWZsYXRlIiksYT1pLmdldFdyaXRlcigpO2Eud3JpdGUoZSk7YS5jbG9zZSgpO2NvbnN0IHI9W107bGV0IHM9MDtmb3IgYXdhaXQoY29uc3QgZSBvZiB0KXtyLnB1c2goZSk7cys9ZS5ieXRlTGVuZ3RofWNvbnN0IG49bmV3IFVpbnQ4QXJyYXkocyk7bGV0IG89MDtmb3IoY29uc3QgZSBvZiByKXtuLnNldChlLG8pO28rPWUuYnl0ZUxlbmd0aH1yZXR1cm4gbn1jYXRjaHt0aGlzLnN0cj1uZXcgU3RyZWFtKGUsMixlLmxlbmd0aCx0aGlzLnN0ci5kaWN0KTt0aGlzLnJlc2V0KCk7cmV0dXJuIG51bGx9fWdldCBpc0FzeW5jKCl7cmV0dXJuITB9Z2V0Qml0cyhlKXtjb25zdCB0PXRoaXMuc3RyO2xldCBpLGE9dGhpcy5jb2RlU2l6ZSxyPXRoaXMuY29kZUJ1Zjtmb3IoO2E8ZTspe2lmKC0xPT09KGk9dC5nZXRCeXRlKCkpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO3J8PWk8PGE7YSs9OH1pPXImKDE8PGUpLTE7dGhpcy5jb2RlQnVmPXI+PmU7dGhpcy5jb2RlU2l6ZT1hLT1lO3JldHVybiBpfWdldENvZGUoZSl7Y29uc3QgdD10aGlzLnN0cixpPWVbMF0sYT1lWzFdO2xldCByLHM9dGhpcy5jb2RlU2l6ZSxuPXRoaXMuY29kZUJ1Zjtmb3IoO3M8YSYmLTEhPT0ocj10LmdldEJ5dGUoKSk7KXtufD1yPDxzO3MrPTh9Y29uc3Qgbz1pW24mKDE8PGEpLTFdLGc9bz4+MTYsYz02NTUzNSZvO2lmKGc8MXx8czxnKXRocm93IG5ldyBGb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO3RoaXMuY29kZUJ1Zj1uPj5nO3RoaXMuY29kZVNpemU9cy1nO3JldHVybiBjfWdlbmVyYXRlSHVmZm1hblRhYmxlKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGksYT0wO2ZvcihpPTA7aTx0OysraSllW2ldPmEmJihhPWVbaV0pO2NvbnN0IHI9MTw8YSxzPW5ldyBJbnQzMkFycmF5KHIpO2ZvcihsZXQgbj0xLG89MCxnPTI7bjw9YTsrK24sbzw8PTEsZzw8PTEpZm9yKGxldCBhPTA7YTx0OysrYSlpZihlW2FdPT09bil7bGV0IGU9MCx0PW87Zm9yKGk9MDtpPG47KytpKXtlPWU8PDF8MSZ0O3Q+Pj0xfWZvcihpPWU7aTxyO2krPWcpc1tpXT1uPDwxNnxhOysrb31yZXR1cm5bcyxhXX0jbShlKXtpbmZvKGUpO3RoaXMuZW9mPSEwfXJlYWRCbG9jaygpe2xldCBlLHQsaTtjb25zdCBhPXRoaXMuc3RyO3RyeXt0PXRoaXMuZ2V0Qml0cygzKX1jYXRjaChlKXt0aGlzLiNtKGUubWVzc2FnZSk7cmV0dXJufTEmdCYmKHRoaXMuZW9mPSEwKTt0Pj49MTtpZigwPT09dCl7bGV0IHQ7aWYoLTE9PT0odD1hLmdldEJ5dGUoKSkpe3RoaXMuI20oIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7cmV0dXJufWxldCBpPXQ7aWYoLTE9PT0odD1hLmdldEJ5dGUoKSkpe3RoaXMuI20oIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7cmV0dXJufWl8PXQ8PDg7aWYoLTE9PT0odD1hLmdldEJ5dGUoKSkpe3RoaXMuI20oIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7cmV0dXJufWxldCByPXQ7aWYoLTE9PT0odD1hLmdldEJ5dGUoKSkpe3RoaXMuI20oIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7cmV0dXJufXJ8PXQ8PDg7aWYociE9PSg2NTUzNSZ+aSkmJigwIT09aXx8MCE9PXIpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiQmFkIHVuY29tcHJlc3NlZCBibG9jayBsZW5ndGggaW4gZmxhdGUgc3RyZWFtIik7dGhpcy5jb2RlQnVmPTA7dGhpcy5jb2RlU2l6ZT0wO2NvbnN0IHM9dGhpcy5idWZmZXJMZW5ndGgsbj1zK2k7ZT10aGlzLmVuc3VyZUJ1ZmZlcihuKTt0aGlzLmJ1ZmZlckxlbmd0aD1uO2lmKDA9PT1pKS0xPT09YS5wZWVrQnl0ZSgpJiYodGhpcy5lb2Y9ITApO2Vsc2V7Y29uc3QgdD1hLmdldEJ5dGVzKGkpO2Uuc2V0KHQscyk7dC5sZW5ndGg8aSYmKHRoaXMuZW9mPSEwKX1yZXR1cm59bGV0IHIscztpZigxPT09dCl7cj1XdDtzPWp0fWVsc2V7aWYoMiE9PXQpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIGJsb2NrIHR5cGUgaW4gZmxhdGUgc3RyZWFtIik7e2NvbnN0IGU9dGhpcy5nZXRCaXRzKDUpKzI1Nyx0PXRoaXMuZ2V0Qml0cyg1KSsxLGE9dGhpcy5nZXRCaXRzKDQpKzQsbj1uZXcgVWludDhBcnJheShxdC5sZW5ndGgpO2xldCBvO2ZvcihvPTA7bzxhOysrbyluW3F0W29dXT10aGlzLmdldEJpdHMoMyk7Y29uc3QgZz10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKG4pO2k9MDtvPTA7Y29uc3QgYz1lK3QsQz1uZXcgVWludDhBcnJheShjKTtsZXQgaCxsLFE7Zm9yKDtvPGM7KXtjb25zdCBlPXRoaXMuZ2V0Q29kZShnKTtpZigxNj09PWUpe2g9MjtsPTM7UT1pfWVsc2UgaWYoMTc9PT1lKXtoPTM7bD0zO1E9aT0wfWVsc2V7aWYoMTghPT1lKXtDW28rK109aT1lO2NvbnRpbnVlfWg9NztsPTExO1E9aT0wfWxldCB0PXRoaXMuZ2V0Qml0cyhoKStsO2Zvcig7dC0tID4wOylDW28rK109UX1yPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoQy5zdWJhcnJheSgwLGUpKTtzPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoQy5zdWJhcnJheShlLGMpKX19ZT10aGlzLmJ1ZmZlcjtsZXQgbj1lP2UubGVuZ3RoOjAsbz10aGlzLmJ1ZmZlckxlbmd0aDtmb3IoOzspe2xldCB0PXRoaXMuZ2V0Q29kZShyKTtpZih0PDI1Nil7aWYobysxPj1uKXtlPXRoaXMuZW5zdXJlQnVmZmVyKG8rMSk7bj1lLmxlbmd0aH1lW28rK109dDtjb250aW51ZX1pZigyNTY9PT10KXt0aGlzLmJ1ZmZlckxlbmd0aD1vO3JldHVybn10LT0yNTc7dD1PdFt0XTtsZXQgYT10Pj4xNjthPjAmJihhPXRoaXMuZ2V0Qml0cyhhKSk7aT0oNjU1MzUmdCkrYTt0PXRoaXMuZ2V0Q29kZShzKTt0PVB0W3RdO2E9dD4+MTY7YT4wJiYoYT10aGlzLmdldEJpdHMoYSkpO2NvbnN0IGc9KDY1NTM1JnQpK2E7aWYobytpPj1uKXtlPXRoaXMuZW5zdXJlQnVmZmVyKG8raSk7bj1lLmxlbmd0aH1mb3IobGV0IHQ9MDt0PGk7Kyt0LCsrbyllW29dPWVbby1nXX19fWNvbnN0IFh0PVt7cWU6MjIwMTcsbm1wczoxLG5scHM6MSxzd2l0Y2hGbGFnOjF9LHtxZToxMzMxMyxubXBzOjIsbmxwczo2LHN3aXRjaEZsYWc6MH0se3FlOjYxNDUsbm1wczozLG5scHM6OSxzd2l0Y2hGbGFnOjB9LHtxZToyNzUzLG5tcHM6NCxubHBzOjEyLHN3aXRjaEZsYWc6MH0se3FlOjEzMTMsbm1wczo1LG5scHM6Mjksc3dpdGNoRmxhZzowfSx7cWU6NTQ1LG5tcHM6MzgsbmxwczozMyxzd2l0Y2hGbGFnOjB9LHtxZToyMjAxNyxubXBzOjcsbmxwczo2LHN3aXRjaEZsYWc6MX0se3FlOjIxNTA1LG5tcHM6OCxubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjE4NDMzLG5tcHM6OSxubHBzOjE0LHN3aXRjaEZsYWc6MH0se3FlOjE0MzM3LG5tcHM6MTAsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxMjI4OSxubXBzOjExLG5scHM6MTcsc3dpdGNoRmxhZzowfSx7cWU6OTIxNyxubXBzOjEyLG5scHM6MTgsc3dpdGNoRmxhZzowfSx7cWU6NzE2OSxubXBzOjEzLG5scHM6MjAsc3dpdGNoRmxhZzowfSx7cWU6NTYzMyxubXBzOjI5LG5scHM6MjEsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczoxNSxubHBzOjE0LHN3aXRjaEZsYWc6MX0se3FlOjIxNTA1LG5tcHM6MTYsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToyMDczNyxubXBzOjE3LG5scHM6MTUsc3dpdGNoRmxhZzowfSx7cWU6MTg0MzMsbm1wczoxOCxubHBzOjE2LHN3aXRjaEZsYWc6MH0se3FlOjE0MzM3LG5tcHM6MTksbmxwczoxNyxzd2l0Y2hGbGFnOjB9LHtxZToxMzMxMyxubXBzOjIwLG5scHM6MTgsc3dpdGNoRmxhZzowfSx7cWU6MTIyODksbm1wczoyMSxubHBzOjE5LHN3aXRjaEZsYWc6MH0se3FlOjEwMjQxLG5tcHM6MjIsbmxwczoxOSxzd2l0Y2hGbGFnOjB9LHtxZTo5MjE3LG5tcHM6MjMsbmxwczoyMCxzd2l0Y2hGbGFnOjB9LHtxZTo4NzA1LG5tcHM6MjQsbmxwczoyMSxzd2l0Y2hGbGFnOjB9LHtxZTo3MTY5LG5tcHM6MjUsbmxwczoyMixzd2l0Y2hGbGFnOjB9LHtxZTo2MTQ1LG5tcHM6MjYsbmxwczoyMyxzd2l0Y2hGbGFnOjB9LHtxZTo1NjMzLG5tcHM6MjcsbmxwczoyNCxzd2l0Y2hGbGFnOjB9LHtxZTo1MTIxLG5tcHM6MjgsbmxwczoyNSxzd2l0Y2hGbGFnOjB9LHtxZTo0NjA5LG5tcHM6MjksbmxwczoyNixzd2l0Y2hGbGFnOjB9LHtxZTo0MzUzLG5tcHM6MzAsbmxwczoyNyxzd2l0Y2hGbGFnOjB9LHtxZToyNzUzLG5tcHM6MzEsbmxwczoyOCxzd2l0Y2hGbGFnOjB9LHtxZToyNDk3LG5tcHM6MzIsbmxwczoyOSxzd2l0Y2hGbGFnOjB9LHtxZToyMjA5LG5tcHM6MzMsbmxwczozMCxzd2l0Y2hGbGFnOjB9LHtxZToxMzEzLG5tcHM6MzQsbmxwczozMSxzd2l0Y2hGbGFnOjB9LHtxZToxMDg5LG5tcHM6MzUsbmxwczozMixzd2l0Y2hGbGFnOjB9LHtxZTo2NzMsbm1wczozNixubHBzOjMzLHN3aXRjaEZsYWc6MH0se3FlOjU0NSxubXBzOjM3LG5scHM6MzQsc3dpdGNoRmxhZzowfSx7cWU6MzIxLG5tcHM6MzgsbmxwczozNSxzd2l0Y2hGbGFnOjB9LHtxZToyNzMsbm1wczozOSxubHBzOjM2LHN3aXRjaEZsYWc6MH0se3FlOjEzMyxubXBzOjQwLG5scHM6Mzcsc3dpdGNoRmxhZzowfSx7cWU6NzMsbm1wczo0MSxubHBzOjM4LHN3aXRjaEZsYWc6MH0se3FlOjM3LG5tcHM6NDIsbmxwczozOSxzd2l0Y2hGbGFnOjB9LHtxZToyMSxubXBzOjQzLG5scHM6NDAsc3dpdGNoRmxhZzowfSx7cWU6OSxubXBzOjQ0LG5scHM6NDEsc3dpdGNoRmxhZzowfSx7cWU6NSxubXBzOjQ1LG5scHM6NDIsc3dpdGNoRmxhZzowfSx7cWU6MSxubXBzOjQ1LG5scHM6NDMsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczo0NixubHBzOjQ2LHN3aXRjaEZsYWc6MH1dO2NsYXNzIEFyaXRobWV0aWNEZWNvZGVye2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLmRhdGE9ZTt0aGlzLmJwPXQ7dGhpcy5kYXRhRW5kPWk7dGhpcy5jaGlnaD1lW3RdO3RoaXMuY2xvdz0wO3RoaXMuYnl0ZUluKCk7dGhpcy5jaGlnaD10aGlzLmNoaWdoPDw3JjY1NTM1fHRoaXMuY2xvdz4+OSYxMjc7dGhpcy5jbG93PXRoaXMuY2xvdzw8NyY2NTUzNTt0aGlzLmN0LT03O3RoaXMuYT0zMjc2OH1ieXRlSW4oKXtjb25zdCBlPXRoaXMuZGF0YTtsZXQgdD10aGlzLmJwO2lmKDI1NT09PWVbdF0paWYoZVt0KzFdPjE0Myl7dGhpcy5jbG93Kz02NTI4MDt0aGlzLmN0PTh9ZWxzZXt0Kys7dGhpcy5jbG93Kz1lW3RdPDw5O3RoaXMuY3Q9Nzt0aGlzLmJwPXR9ZWxzZXt0Kys7dGhpcy5jbG93Kz10PHRoaXMuZGF0YUVuZD9lW3RdPDw4OjY1MjgwO3RoaXMuY3Q9ODt0aGlzLmJwPXR9aWYodGhpcy5jbG93PjY1NTM1KXt0aGlzLmNoaWdoKz10aGlzLmNsb3c+PjE2O3RoaXMuY2xvdyY9NjU1MzV9fXJlYWRCaXQoZSx0KXtsZXQgaT1lW3RdPj4xLGE9MSZlW3RdO2NvbnN0IHI9WHRbaV0scz1yLnFlO2xldCBuLG89dGhpcy5hLXM7aWYodGhpcy5jaGlnaDxzKWlmKG88cyl7bz1zO249YTtpPXIubm1wc31lbHNle289cztuPTFeYTsxPT09ci5zd2l0Y2hGbGFnJiYoYT1uKTtpPXIubmxwc31lbHNle3RoaXMuY2hpZ2gtPXM7aWYoMCE9KDMyNzY4Jm8pKXt0aGlzLmE9bztyZXR1cm4gYX1pZihvPHMpe249MV5hOzE9PT1yLnN3aXRjaEZsYWcmJihhPW4pO2k9ci5ubHBzfWVsc2V7bj1hO2k9ci5ubXBzfX1kb3swPT09dGhpcy5jdCYmdGhpcy5ieXRlSW4oKTtvPDw9MTt0aGlzLmNoaWdoPXRoaXMuY2hpZ2g8PDEmNjU1MzV8dGhpcy5jbG93Pj4xNSYxO3RoaXMuY2xvdz10aGlzLmNsb3c8PDEmNjU1MzU7dGhpcy5jdC0tfXdoaWxlKDA9PSgzMjc2OCZvKSk7dGhpcy5hPW87ZVt0XT1pPDwxfGE7cmV0dXJuIG59fWNsYXNzIEpiaWcyRXJyb3IgZXh0ZW5kcyBjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJKYmlnMkVycm9yIil9fWNsYXNzIENvbnRleHRDYWNoZXtnZXRDb250ZXh0cyhlKXtyZXR1cm4gZSBpbiB0aGlzP3RoaXNbZV06dGhpc1tlXT1uZXcgSW50OEFycmF5KDY1NTM2KX19Y2xhc3MgRGVjb2RpbmdDb250ZXh0e2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLmRhdGE9ZTt0aGlzLnN0YXJ0PXQ7dGhpcy5lbmQ9aX1nZXQgZGVjb2Rlcigpe3JldHVybiBzaGFkb3codGhpcywiZGVjb2RlciIsbmV3IEFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSx0aGlzLnN0YXJ0LHRoaXMuZW5kKSl9Z2V0IGNvbnRleHRDYWNoZSgpe3JldHVybiBzaGFkb3codGhpcywiY29udGV4dENhY2hlIixuZXcgQ29udGV4dENhY2hlKX19Y29uc3QgWnQ9MioqMzEtMSxWdD0tKDIqKjMxKTtmdW5jdGlvbiBkZWNvZGVJbnRlZ2VyKGUsdCxpKXtjb25zdCBhPWUuZ2V0Q29udGV4dHModCk7bGV0IHI9MTtmdW5jdGlvbiByZWFkQml0cyhlKXtsZXQgdD0wO2ZvcihsZXQgcz0wO3M8ZTtzKyspe2NvbnN0IGU9aS5yZWFkQml0KGEscik7cj1yPDI1Nj9yPDwxfGU6NTExJihyPDwxfGUpfDI1Njt0PXQ8PDF8ZX1yZXR1cm4gdD4+PjB9Y29uc3Qgcz1yZWFkQml0cygxKSxuPXJlYWRCaXRzKDEpP3JlYWRCaXRzKDEpP3JlYWRCaXRzKDEpP3JlYWRCaXRzKDEpP3JlYWRCaXRzKDEpP3JlYWRCaXRzKDMyKSs0NDM2OnJlYWRCaXRzKDEyKSszNDA6cmVhZEJpdHMoOCkrODQ6cmVhZEJpdHMoNikrMjA6cmVhZEJpdHMoNCkrNDpyZWFkQml0cygyKTtsZXQgbzswPT09cz9vPW46bj4wJiYobz0tbik7cmV0dXJuIG8+PVZ0JiZvPD1adD9vOm51bGx9ZnVuY3Rpb24gZGVjb2RlSUFJRChlLHQsaSl7Y29uc3QgYT1lLmdldENvbnRleHRzKCJJQUlEIik7bGV0IHI9MTtmb3IobGV0IGU9MDtlPGk7ZSsrKXtyPXI8PDF8dC5yZWFkQml0KGEscil9cmV0dXJuIGk8MzE/ciYoMTw8aSktMToyMTQ3NDgzNjQ3JnJ9Y29uc3QgX3Q9WyJTeW1ib2xEaWN0aW9uYXJ5IixudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlVGV4dFJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlVGV4dFJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJQYXR0ZXJuRGljdGlvbmFyeSIsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZUhhbGZ0b25lUmVnaW9uIixudWxsLCJJbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVHZW5lcmljUmVnaW9uIixudWxsLCJJbW1lZGlhdGVHZW5lcmljUmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVnaW9uIiwiSW50ZXJtZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLG51bGwsIkltbWVkaWF0ZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCwiUGFnZUluZm9ybWF0aW9uIiwiRW5kT2ZQYWdlIiwiRW5kT2ZTdHJpcGUiLCJFbmRPZkZpbGUiLCJQcm9maWxlcyIsIlRhYmxlcyIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJFeHRlbnNpb24iXSx6dD1bW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6Mix5Oi0xfSx7eDotNCx5OjB9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4OjIseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4OjIseTotMX0se3g6LTMseTowfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0zLHk6LTF9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotNCx5OjB9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XV0sJHQ9W3tjb2Rpbmc6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6LTEseToxfSx7eDowLHk6MX0se3g6MSx5OjF9XX0se2NvZGluZzpbe3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0xLHk6MH1dLHJlZmVyZW5jZTpbe3g6MCx5Oi0xfSx7eDotMSx5OjB9LHt4OjAseTowfSx7eDoxLHk6MH0se3g6MCx5OjF9LHt4OjEseToxfV19XSxBaT1bMzk3MTcsMTk0MSwyMjksNDA1XSxlaT1bMzIsOF07ZnVuY3Rpb24gZGVjb2RlQml0bWFwKGUsdCxpLGEscixzLG4sbyl7aWYoZSl7cmV0dXJuIGRlY29kZU1NUkJpdG1hcChuZXcgUmVhZGVyKG8uZGF0YSxvLnN0YXJ0LG8uZW5kKSx0LGksITEpfWlmKDA9PT1hJiYhcyYmIXImJjQ9PT1uLmxlbmd0aCYmMz09PW5bMF0ueCYmLTE9PT1uWzBdLnkmJi0zPT09blsxXS54JiYtMT09PW5bMV0ueSYmMj09PW5bMl0ueCYmLTI9PT1uWzJdLnkmJi0yPT09blszXS54JiYtMj09PW5bM10ueSlyZXR1cm4gZnVuY3Rpb24gZGVjb2RlQml0bWFwVGVtcGxhdGUwKGUsdCxpKXtjb25zdCBhPWkuZGVjb2RlcixyPWkuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpLHM9W107bGV0IG4sbyxnLGMsQyxoLGw7Zm9yKG89MDtvPHQ7bysrKXtDPXNbb109bmV3IFVpbnQ4QXJyYXkoZSk7aD1vPDE/QzpzW28tMV07bD1vPDI/QzpzW28tMl07bj1sWzBdPDwxM3xsWzFdPDwxMnxsWzJdPDwxMXxoWzBdPDw3fGhbMV08PDZ8aFsyXTw8NXxoWzNdPDw0O2ZvcihnPTA7ZzxlO2crKyl7Q1tnXT1jPWEucmVhZEJpdChyLG4pO249KDMxNzM1Jm4pPDwxfChnKzM8ZT9sW2crM108PDExOjApfChnKzQ8ZT9oW2crNF08PDQ6MCl8Y319cmV0dXJuIHN9KHQsaSxvKTtjb25zdCBnPSEhcyxjPXp0W2FdLmNvbmNhdChuKTtjLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9KSk7Y29uc3QgQz1jLmxlbmd0aCxoPW5ldyBJbnQ4QXJyYXkoQyksbD1uZXcgSW50OEFycmF5KEMpLFE9W107bGV0IEUsdSxkPTAsZj0wLHA9MCxtPTA7Zm9yKHU9MDt1PEM7dSsrKXtoW3VdPWNbdV0ueDtsW3VdPWNbdV0ueTtmPU1hdGgubWluKGYsY1t1XS54KTtwPU1hdGgubWF4KHAsY1t1XS54KTttPU1hdGgubWluKG0sY1t1XS55KTt1PEMtMSYmY1t1XS55PT09Y1t1KzFdLnkmJmNbdV0ueD09PWNbdSsxXS54LTE/ZHw9MTw8Qy0xLXU6US5wdXNoKHUpfWNvbnN0IHk9US5sZW5ndGgsdz1uZXcgSW50OEFycmF5KHkpLGI9bmV3IEludDhBcnJheSh5KSxEPW5ldyBVaW50MTZBcnJheSh5KTtmb3IoRT0wO0U8eTtFKyspe3U9UVtFXTt3W0VdPWNbdV0ueDtiW0VdPWNbdV0ueTtEW0VdPTE8PEMtMS11fWNvbnN0IFM9LWYsaz0tbSxSPXQtcCxOPUFpW2FdO2xldCBHPW5ldyBVaW50OEFycmF5KHQpO2NvbnN0IHg9W10sVT1vLmRlY29kZXIsTT1vLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR0IiKTtsZXQgTCxILEosdixZLFQ9MCxLPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7aWYocil7VF49VS5yZWFkQml0KE0sTik7aWYoVCl7eC5wdXNoKEcpO2NvbnRpbnVlfX1HPW5ldyBVaW50OEFycmF5KEcpO3gucHVzaChHKTtmb3IoTD0wO0w8dDtMKyspe2lmKGcmJnNbZV1bTF0pe0dbTF09MDtjb250aW51ZX1pZihMPj1TJiZMPFImJmU+PWspe0s9Szw8MSZkO2Zvcih1PTA7dTx5O3UrKyl7SD1lK2JbdV07Sj1MK3dbdV07dj14W0hdW0pdO2lmKHYpe3Y9RFt1XTtLfD12fX19ZWxzZXtLPTA7WT1DLTE7Zm9yKHU9MDt1PEM7dSsrLFktLSl7Sj1MK2hbdV07aWYoSj49MCYmSjx0KXtIPWUrbFt1XTtpZihIPj0wKXt2PXhbSF1bSl07diYmKEt8PXY8PFkpfX19fWNvbnN0IGk9VS5yZWFkQml0KE0sSyk7R1tMXT1pfX1yZXR1cm4geH1mdW5jdGlvbiBkZWNvZGVSZWZpbmVtZW50KGUsdCxpLGEscixzLG4sbyxnKXtsZXQgYz0kdFtpXS5jb2Rpbmc7MD09PWkmJihjPWMuY29uY2F0KFtvWzBdXSkpO2NvbnN0IEM9Yy5sZW5ndGgsaD1uZXcgSW50MzJBcnJheShDKSxsPW5ldyBJbnQzMkFycmF5KEMpO2xldCBRO2ZvcihRPTA7UTxDO1ErKyl7aFtRXT1jW1FdLng7bFtRXT1jW1FdLnl9bGV0IEU9JHRbaV0ucmVmZXJlbmNlOzA9PT1pJiYoRT1FLmNvbmNhdChbb1sxXV0pKTtjb25zdCB1PUUubGVuZ3RoLGQ9bmV3IEludDMyQXJyYXkodSksZj1uZXcgSW50MzJBcnJheSh1KTtmb3IoUT0wO1E8dTtRKyspe2RbUV09RVtRXS54O2ZbUV09RVtRXS55fWNvbnN0IHA9YVswXS5sZW5ndGgsbT1hLmxlbmd0aCx5PWVpW2ldLHc9W10sYj1nLmRlY29kZXIsRD1nLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR1IiKTtsZXQgUz0wO2ZvcihsZXQgaT0wO2k8dDtpKyspe2lmKG4pe1NePWIucmVhZEJpdChELHkpO2lmKFMpdGhyb3cgbmV3IEpiaWcyRXJyb3IoInByZWRpY3Rpb24gaXMgbm90IHN1cHBvcnRlZCIpfWNvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoZSk7dy5wdXNoKHQpO2ZvcihsZXQgbj0wO248ZTtuKyspe2xldCBvLGcsYz0wO2ZvcihRPTA7UTxDO1ErKyl7bz1pK2xbUV07Zz1uK2hbUV07bzwwfHxnPDB8fGc+PWU/Yzw8PTE6Yz1jPDwxfHdbb11bZ119Zm9yKFE9MDtRPHU7USsrKXtvPWkrZltRXS1zO2c9bitkW1FdLXI7bzwwfHxvPj1tfHxnPDB8fGc+PXA/Yzw8PTE6Yz1jPDwxfGFbb11bZ119Y29uc3QgRT1iLnJlYWRCaXQoRCxjKTt0W25dPUV9fXJldHVybiB3fWZ1bmN0aW9uIGRlY29kZVRleHRSZWdpb24oZSx0LGksYSxyLHMsbixvLGcsYyxDLGgsbCxRLEUsdSxkLGYscCl7aWYoZSYmdCl0aHJvdyBuZXcgSmJpZzJFcnJvcigicmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO2NvbnN0IG09W107bGV0IHksdztmb3IoeT0wO3k8YTt5Kyspe3c9bmV3IFVpbnQ4QXJyYXkoaSk7aWYocilmb3IobGV0IGU9MDtlPGk7ZSsrKXdbZV09cjttLnB1c2godyl9Y29uc3QgYj1kLmRlY29kZXIsRD1kLmNvbnRleHRDYWNoZTtsZXQgUz1lPy1RLnRhYmxlRGVsdGFULmRlY29kZShwKTotZGVjb2RlSW50ZWdlcihELCJJQURUIixiKSxrPTA7eT0wO2Zvcig7eTxzOyl7Uys9ZT9RLnRhYmxlRGVsdGFULmRlY29kZShwKTpkZWNvZGVJbnRlZ2VyKEQsIklBRFQiLGIpO2srPWU/US50YWJsZUZpcnN0Uy5kZWNvZGUocCk6ZGVjb2RlSW50ZWdlcihELCJJQUZTIixiKTtsZXQgYT1rO2Zvcig7Oyl7bGV0IHI9MDtuPjEmJihyPWU/cC5yZWFkQml0cyhmKTpkZWNvZGVJbnRlZ2VyKEQsIklBSVQiLGIpKTtjb25zdCBzPW4qUytyLGs9ZT9RLnN5bWJvbElEVGFibGUuZGVjb2RlKHApOmRlY29kZUlBSUQoRCxiLGcpLFI9dCYmKGU/cC5yZWFkQml0KCk6ZGVjb2RlSW50ZWdlcihELCJJQVJJIixiKSk7bGV0IE49b1trXSxHPU5bMF0ubGVuZ3RoLHg9Ti5sZW5ndGg7aWYoUil7Y29uc3QgZT1kZWNvZGVJbnRlZ2VyKEQsIklBUkRXIixiKSx0PWRlY29kZUludGVnZXIoRCwiSUFSREgiLGIpO0crPWU7eCs9dDtOPWRlY29kZVJlZmluZW1lbnQoRyx4LEUsTiwoZT4+MSkrZGVjb2RlSW50ZWdlcihELCJJQVJEWCIsYiksKHQ+PjEpK2RlY29kZUludGVnZXIoRCwiSUFSRFkiLGIpLCExLHUsZCl9bGV0IFU9MDtjPzEmaD9VPXgtMTphKz14LTE6aD4xP2ErPUctMTpVPUctMTtjb25zdCBNPXMtKDEmaD8wOngtMSksTD1hLSgyJmg/Ry0xOjApO2xldCBILEosdjtpZihjKWZvcihIPTA7SDx4O0grKyl7dz1tW0wrSF07aWYoIXcpY29udGludWU7dj1OW0hdO2NvbnN0IGU9TWF0aC5taW4oaS1NLEcpO3N3aXRjaChsKXtjYXNlIDA6Zm9yKEo9MDtKPGU7SisrKXdbTStKXXw9dltKXTticmVhaztjYXNlIDI6Zm9yKEo9MDtKPGU7SisrKXdbTStKXV49dltKXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAke2x9IGlzIG5vdCBzdXBwb3J0ZWRgKX19ZWxzZSBmb3IoSj0wO0o8eDtKKyspe3c9bVtNK0pdO2lmKHcpe3Y9TltKXTtzd2l0Y2gobCl7Y2FzZSAwOmZvcihIPTA7SDxHO0grKyl3W0wrSF18PXZbSF07YnJlYWs7Y2FzZSAyOmZvcihIPTA7SDxHO0grKyl3W0wrSF1ePXZbSF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgJHtsfSBpcyBub3Qgc3VwcG9ydGVkYCl9fX15Kys7Y29uc3QgWT1lP1EudGFibGVEZWx0YVMuZGVjb2RlKHApOmRlY29kZUludGVnZXIoRCwiSUFEUyIsYik7aWYobnVsbD09PVkpYnJlYWs7YSs9VStZK0N9fXJldHVybiBtfWZ1bmN0aW9uIHJlYWRTZWdtZW50SGVhZGVyKGUsdCl7Y29uc3QgaT17fTtpLm51bWJlcj1yZWFkVWludDMyKGUsdCk7Y29uc3QgYT1lW3QrNF0scj02MyZhO2lmKCFfdFtyXSl0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBzZWdtZW50IHR5cGU6ICIrcik7aS50eXBlPXI7aS50eXBlTmFtZT1fdFtyXTtpLmRlZmVycmVkTm9uUmV0YWluPSEhKDEyOCZhKTtjb25zdCBzPSEhKDY0JmEpLG49ZVt0KzVdO2xldCBvPW4+PjUmNztjb25zdCBnPVszMSZuXTtsZXQgYz10KzY7aWYoNz09PW4pe289NTM2ODcwOTExJnJlYWRVaW50MzIoZSxjLTEpO2MrPTM7bGV0IHQ9bys3Pj4zO2dbMF09ZVtjKytdO2Zvcig7LS10PjA7KWcucHVzaChlW2MrK10pfWVsc2UgaWYoNT09PW58fDY9PT1uKXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIHJlZmVycmVkLXRvIGZsYWdzIik7aS5yZXRhaW5CaXRzPWc7bGV0IEM9NDtpLm51bWJlcjw9MjU2P0M9MTppLm51bWJlcjw9NjU1MzYmJihDPTIpO2NvbnN0IGg9W107bGV0IGwsUTtmb3IobD0wO2w8bztsKyspe2xldCB0O3Q9MT09PUM/ZVtjXToyPT09Qz9yZWFkVWludDE2KGUsYyk6cmVhZFVpbnQzMihlLGMpO2gucHVzaCh0KTtjKz1DfWkucmVmZXJyZWRUbz1oO2lmKHMpe2kucGFnZUFzc29jaWF0aW9uPXJlYWRVaW50MzIoZSxjKTtjKz00fWVsc2UgaS5wYWdlQXNzb2NpYXRpb249ZVtjKytdO2kubGVuZ3RoPXJlYWRVaW50MzIoZSxjKTtjKz00O2lmKDQyOTQ5NjcyOTU9PT1pLmxlbmd0aCl7aWYoMzghPT1yKXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIHVua25vd24gc2VnbWVudCBsZW5ndGgiKTt7Y29uc3QgdD1yZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGUsYyksYT0hISgxJmVbYyt0aV0pLHI9NixzPW5ldyBVaW50OEFycmF5KHIpO2lmKCFhKXtzWzBdPTI1NTtzWzFdPTE3Mn1zWzJdPXQuaGVpZ2h0Pj4+MjQmMjU1O3NbM109dC5oZWlnaHQ+PjE2JjI1NTtzWzRdPXQuaGVpZ2h0Pj44JjI1NTtzWzVdPTI1NSZ0LmhlaWdodDtmb3IobD1jLFE9ZS5sZW5ndGg7bDxRO2wrKyl7bGV0IHQ9MDtmb3IoO3Q8ciYmc1t0XT09PWVbbCt0XTspdCsrO2lmKHQ9PT1yKXtpLmxlbmd0aD1sK3I7YnJlYWt9fWlmKDQyOTQ5NjcyOTU9PT1pLmxlbmd0aCl0aHJvdyBuZXcgSmJpZzJFcnJvcigic2VnbWVudCBlbmQgd2FzIG5vdCBmb3VuZCIpfX1pLmhlYWRlckVuZD1jO3JldHVybiBpfWZ1bmN0aW9uIHJlYWRTZWdtZW50cyhlLHQsaSxhKXtjb25zdCByPVtdO2xldCBzPWk7Zm9yKDtzPGE7KXtjb25zdCBpPXJlYWRTZWdtZW50SGVhZGVyKHQscyk7cz1pLmhlYWRlckVuZDtjb25zdCBhPXtoZWFkZXI6aSxkYXRhOnR9O2lmKCFlLnJhbmRvbUFjY2Vzcyl7YS5zdGFydD1zO3MrPWkubGVuZ3RoO2EuZW5kPXN9ci5wdXNoKGEpO2lmKDUxPT09aS50eXBlKWJyZWFrfWlmKGUucmFuZG9tQWNjZXNzKWZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrKyl7cltlXS5zdGFydD1zO3MrPXJbZV0uaGVhZGVyLmxlbmd0aDtyW2VdLmVuZD1zfXJldHVybiByfWZ1bmN0aW9uIHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZSx0KXtyZXR1cm57d2lkdGg6cmVhZFVpbnQzMihlLHQpLGhlaWdodDpyZWFkVWludDMyKGUsdCs0KSx4OnJlYWRVaW50MzIoZSx0KzgpLHk6cmVhZFVpbnQzMihlLHQrMTIpLGNvbWJpbmF0aW9uT3BlcmF0b3I6NyZlW3QrMTZdfX1jb25zdCB0aT0xNztmdW5jdGlvbiBwcm9jZXNzU2VnbWVudChlLHQpe2NvbnN0IGk9ZS5oZWFkZXIsYT1lLmRhdGEscj1lLmVuZDtsZXQgcyxuLG8sZyxjPWUuc3RhcnQ7c3dpdGNoKGkudHlwZSl7Y2FzZSAwOmNvbnN0IGU9e30sdD1yZWFkVWludDE2KGEsYyk7ZS5odWZmbWFuPSEhKDEmdCk7ZS5yZWZpbmVtZW50PSEhKDImdCk7ZS5odWZmbWFuREhTZWxlY3Rvcj10Pj4yJjM7ZS5odWZmbWFuRFdTZWxlY3Rvcj10Pj40JjM7ZS5iaXRtYXBTaXplU2VsZWN0b3I9dD4+NiYxO2UuYWdncmVnYXRpb25JbnN0YW5jZXNTZWxlY3Rvcj10Pj43JjE7ZS5iaXRtYXBDb2RpbmdDb250ZXh0VXNlZD0hISgyNTYmdCk7ZS5iaXRtYXBDb2RpbmdDb250ZXh0UmV0YWluZWQ9ISEoNTEyJnQpO2UudGVtcGxhdGU9dD4+MTAmMztlLnJlZmluZW1lbnRUZW1wbGF0ZT10Pj4xMiYxO2MrPTI7aWYoIWUuaHVmZm1hbil7Zz0wPT09ZS50ZW1wbGF0ZT80OjE7bj1bXTtmb3Iobz0wO288ZztvKyspe24ucHVzaCh7eDpyZWFkSW50OChhLGMpLHk6cmVhZEludDgoYSxjKzEpfSk7Yys9Mn1lLmF0PW59aWYoZS5yZWZpbmVtZW50JiYhZS5yZWZpbmVtZW50VGVtcGxhdGUpe249W107Zm9yKG89MDtvPDI7bysrKXtuLnB1c2goe3g6cmVhZEludDgoYSxjKSx5OnJlYWRJbnQ4KGEsYysxKX0pO2MrPTJ9ZS5yZWZpbmVtZW50QXQ9bn1lLm51bWJlck9mRXhwb3J0ZWRTeW1ib2xzPXJlYWRVaW50MzIoYSxjKTtjKz00O2UubnVtYmVyT2ZOZXdTeW1ib2xzPXJlYWRVaW50MzIoYSxjKTtjKz00O3M9W2UsaS5udW1iZXIsaS5yZWZlcnJlZFRvLGEsYyxyXTticmVhaztjYXNlIDY6Y2FzZSA3OmNvbnN0IEM9e307Qy5pbmZvPXJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oYSxjKTtjKz10aTtjb25zdCBoPXJlYWRVaW50MTYoYSxjKTtjKz0yO0MuaHVmZm1hbj0hISgxJmgpO0MucmVmaW5lbWVudD0hISgyJmgpO0MubG9nU3RyaXBTaXplPWg+PjImMztDLnN0cmlwU2l6ZT0xPDxDLmxvZ1N0cmlwU2l6ZTtDLnJlZmVyZW5jZUNvcm5lcj1oPj40JjM7Qy50cmFuc3Bvc2VkPSEhKDY0JmgpO0MuY29tYmluYXRpb25PcGVyYXRvcj1oPj43JjM7Qy5kZWZhdWx0UGl4ZWxWYWx1ZT1oPj45JjE7Qy5kc09mZnNldD1oPDwxNz4+Mjc7Qy5yZWZpbmVtZW50VGVtcGxhdGU9aD4+MTUmMTtpZihDLmh1ZmZtYW4pe2NvbnN0IGU9cmVhZFVpbnQxNihhLGMpO2MrPTI7Qy5odWZmbWFuRlM9MyZlO0MuaHVmZm1hbkRTPWU+PjImMztDLmh1ZmZtYW5EVD1lPj40JjM7Qy5odWZmbWFuUmVmaW5lbWVudERXPWU+PjYmMztDLmh1ZmZtYW5SZWZpbmVtZW50REg9ZT4+OCYzO0MuaHVmZm1hblJlZmluZW1lbnREWD1lPj4xMCYzO0MuaHVmZm1hblJlZmluZW1lbnREWT1lPj4xMiYzO0MuaHVmZm1hblJlZmluZW1lbnRTaXplU2VsZWN0b3I9ISEoMTYzODQmZSl9aWYoQy5yZWZpbmVtZW50JiYhQy5yZWZpbmVtZW50VGVtcGxhdGUpe249W107Zm9yKG89MDtvPDI7bysrKXtuLnB1c2goe3g6cmVhZEludDgoYSxjKSx5OnJlYWRJbnQ4KGEsYysxKX0pO2MrPTJ9Qy5yZWZpbmVtZW50QXQ9bn1DLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzPXJlYWRVaW50MzIoYSxjKTtjKz00O3M9W0MsaS5yZWZlcnJlZFRvLGEsYyxyXTticmVhaztjYXNlIDE2OmNvbnN0IGw9e30sUT1hW2MrK107bC5tbXI9ISEoMSZRKTtsLnRlbXBsYXRlPVE+PjEmMztsLnBhdHRlcm5XaWR0aD1hW2MrK107bC5wYXR0ZXJuSGVpZ2h0PWFbYysrXTtsLm1heFBhdHRlcm5JbmRleD1yZWFkVWludDMyKGEsYyk7Yys9NDtzPVtsLGkubnVtYmVyLGEsYyxyXTticmVhaztjYXNlIDIyOmNhc2UgMjM6Y29uc3QgRT17fTtFLmluZm89cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihhLGMpO2MrPXRpO2NvbnN0IHU9YVtjKytdO0UubW1yPSEhKDEmdSk7RS50ZW1wbGF0ZT11Pj4xJjM7RS5lbmFibGVTa2lwPSEhKDgmdSk7RS5jb21iaW5hdGlvbk9wZXJhdG9yPXU+PjQmNztFLmRlZmF1bHRQaXhlbFZhbHVlPXU+PjcmMTtFLmdyaWRXaWR0aD1yZWFkVWludDMyKGEsYyk7Yys9NDtFLmdyaWRIZWlnaHQ9cmVhZFVpbnQzMihhLGMpO2MrPTQ7RS5ncmlkT2Zmc2V0WD00Mjk0OTY3Mjk1JnJlYWRVaW50MzIoYSxjKTtjKz00O0UuZ3JpZE9mZnNldFk9NDI5NDk2NzI5NSZyZWFkVWludDMyKGEsYyk7Yys9NDtFLmdyaWRWZWN0b3JYPXJlYWRVaW50MTYoYSxjKTtjKz0yO0UuZ3JpZFZlY3Rvclk9cmVhZFVpbnQxNihhLGMpO2MrPTI7cz1bRSxpLnJlZmVycmVkVG8sYSxjLHJdO2JyZWFrO2Nhc2UgMzg6Y2FzZSAzOTpjb25zdCBkPXt9O2QuaW5mbz1yZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGEsYyk7Yys9dGk7Y29uc3QgZj1hW2MrK107ZC5tbXI9ISEoMSZmKTtkLnRlbXBsYXRlPWY+PjEmMztkLnByZWRpY3Rpb249ISEoOCZmKTtpZighZC5tbXIpe2c9MD09PWQudGVtcGxhdGU/NDoxO249W107Zm9yKG89MDtvPGc7bysrKXtuLnB1c2goe3g6cmVhZEludDgoYSxjKSx5OnJlYWRJbnQ4KGEsYysxKX0pO2MrPTJ9ZC5hdD1ufXM9W2QsYSxjLHJdO2JyZWFrO2Nhc2UgNDg6Y29uc3QgcD17d2lkdGg6cmVhZFVpbnQzMihhLGMpLGhlaWdodDpyZWFkVWludDMyKGEsYys0KSxyZXNvbHV0aW9uWDpyZWFkVWludDMyKGEsYys4KSxyZXNvbHV0aW9uWTpyZWFkVWludDMyKGEsYysxMil9OzQyOTQ5NjcyOTU9PT1wLmhlaWdodCYmZGVsZXRlIHAuaGVpZ2h0O2NvbnN0IG09YVtjKzE2XTtyZWFkVWludDE2KGEsYysxNyk7cC5sb3NzbGVzcz0hISgxJm0pO3AucmVmaW5lbWVudD0hISgyJm0pO3AuZGVmYXVsdFBpeGVsVmFsdWU9bT4+MiYxO3AuY29tYmluYXRpb25PcGVyYXRvcj1tPj4zJjM7cC5yZXF1aXJlc0J1ZmZlcj0hISgzMiZtKTtwLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZT0hISg2NCZtKTtzPVtwXTticmVhaztjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDYyOmJyZWFrO2Nhc2UgNTM6cz1baS5udW1iZXIsYSxjLHJdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYHNlZ21lbnQgdHlwZSAke2kudHlwZU5hbWV9KCR7aS50eXBlfSkgaXMgbm90IGltcGxlbWVudGVkYCl9Y29uc3QgQz0ib24iK2kudHlwZU5hbWU7QyBpbiB0JiZ0W0NdLmFwcGx5KHQscyl9ZnVuY3Rpb24gcHJvY2Vzc1NlZ21lbnRzKGUsdCl7Zm9yKGxldCBpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKXByb2Nlc3NTZWdtZW50KGVbaV0sdCl9Y2xhc3MgU2ltcGxlU2VnbWVudFZpc2l0b3J7b25QYWdlSW5mb3JtYXRpb24oZSl7dGhpcy5jdXJyZW50UGFnZUluZm89ZTtjb25zdCB0PWUud2lkdGgrNz4+MyxpPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmUuaGVpZ2h0KTtlLmRlZmF1bHRQaXhlbFZhbHVlJiZpLmZpbGwoMjU1KTt0aGlzLmJ1ZmZlcj1pfWRyYXdCaXRtYXAoZSx0KXtjb25zdCBpPXRoaXMuY3VycmVudFBhZ2VJbmZvLGE9ZS53aWR0aCxyPWUuaGVpZ2h0LHM9aS53aWR0aCs3Pj4zLG49aS5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGU/ZS5jb21iaW5hdGlvbk9wZXJhdG9yOmkuY29tYmluYXRpb25PcGVyYXRvcixvPXRoaXMuYnVmZmVyLGc9MTI4Pj4oNyZlLngpO2xldCBjLEMsaCxsLFE9ZS55KnMrKGUueD4+Myk7c3dpdGNoKG4pe2Nhc2UgMDpmb3IoYz0wO2M8cjtjKyspe2g9ZztsPVE7Zm9yKEM9MDtDPGE7QysrKXt0W2NdW0NdJiYob1tsXXw9aCk7aD4+PTE7aWYoIWgpe2g9MTI4O2wrK319USs9c31icmVhaztjYXNlIDI6Zm9yKGM9MDtjPHI7YysrKXtoPWc7bD1RO2ZvcihDPTA7QzxhO0MrKyl7dFtjXVtDXSYmKG9bbF1ePWgpO2g+Pj0xO2lmKCFoKXtoPTEyODtsKyt9fVErPXN9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgJHtufSBpcyBub3Qgc3VwcG9ydGVkYCl9fW9uSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbihlLHQsaSxhKXtjb25zdCByPWUuaW5mbyxzPW5ldyBEZWNvZGluZ0NvbnRleHQodCxpLGEpLG49ZGVjb2RlQml0bWFwKGUubW1yLHIud2lkdGgsci5oZWlnaHQsZS50ZW1wbGF0ZSxlLnByZWRpY3Rpb24sbnVsbCxlLmF0LHMpO3RoaXMuZHJhd0JpdG1hcChyLG4pfW9uSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVnaW9uKCl7dGhpcy5vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24oLi4uYXJndW1lbnRzKX1vblN5bWJvbERpY3Rpb25hcnkoZSx0LGksYSxyLHMpe2xldCBuLG87aWYoZS5odWZmbWFuKXtuPWZ1bmN0aW9uIGdldFN5bWJvbERpY3Rpb25hcnlIdWZmbWFuVGFibGVzKGUsdCxpKXtsZXQgYSxyLHMsbixvPTA7c3dpdGNoKGUuaHVmZm1hbkRIU2VsZWN0b3Ipe2Nhc2UgMDpjYXNlIDE6YT1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkRIU2VsZWN0b3IrNCk7YnJlYWs7Y2FzZSAzOmE9Z2V0Q3VzdG9tSHVmZm1hblRhYmxlKG8sdCxpKTtvKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIERIIHNlbGVjdG9yIil9c3dpdGNoKGUuaHVmZm1hbkRXU2VsZWN0b3Ipe2Nhc2UgMDpjYXNlIDE6cj1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkRXU2VsZWN0b3IrMik7YnJlYWs7Y2FzZSAzOnI9Z2V0Q3VzdG9tSHVmZm1hblRhYmxlKG8sdCxpKTtvKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yIil9aWYoZS5iaXRtYXBTaXplU2VsZWN0b3Ipe3M9Z2V0Q3VzdG9tSHVmZm1hblRhYmxlKG8sdCxpKTtvKyt9ZWxzZSBzPWdldFN0YW5kYXJkVGFibGUoMSk7bj1lLmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3I/Z2V0Q3VzdG9tSHVmZm1hblRhYmxlKG8sdCxpKTpnZXRTdGFuZGFyZFRhYmxlKDEpO3JldHVybnt0YWJsZURlbHRhSGVpZ2h0OmEsdGFibGVEZWx0YVdpZHRoOnIsdGFibGVCaXRtYXBTaXplOnMsdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXM6bn19KGUsaSx0aGlzLmN1c3RvbVRhYmxlcyk7bz1uZXcgUmVhZGVyKGEscixzKX1sZXQgZz10aGlzLnN5bWJvbHM7Z3x8KHRoaXMuc3ltYm9scz1nPXt9KTtjb25zdCBjPVtdO2Zvcihjb25zdCBlIG9mIGkpe2NvbnN0IHQ9Z1tlXTt0JiZjLnB1c2goLi4udCl9Y29uc3QgQz1uZXcgRGVjb2RpbmdDb250ZXh0KGEscixzKTtnW3RdPWZ1bmN0aW9uIGRlY29kZVN5bWJvbERpY3Rpb25hcnkoZSx0LGksYSxyLHMsbixvLGcsYyxDLGgpe2lmKGUmJnQpdGhyb3cgbmV3IEpiaWcyRXJyb3IoInN5bWJvbCByZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7Y29uc3QgbD1bXTtsZXQgUT0wLEU9bG9nMihpLmxlbmd0aCthKTtjb25zdCB1PUMuZGVjb2RlcixkPUMuY29udGV4dENhY2hlO2xldCBmLHA7aWYoZSl7Zj1nZXRTdGFuZGFyZFRhYmxlKDEpO3A9W107RT1NYXRoLm1heChFLDEpfWZvcig7bC5sZW5ndGg8YTspe1ErPWU/cy50YWJsZURlbHRhSGVpZ2h0LmRlY29kZShoKTpkZWNvZGVJbnRlZ2VyKGQsIklBREgiLHUpO2xldCBhPTAscj0wO2NvbnN0IGY9ZT9wLmxlbmd0aDowO2Zvcig7Oyl7Y29uc3QgZj1lP3MudGFibGVEZWx0YVdpZHRoLmRlY29kZShoKTpkZWNvZGVJbnRlZ2VyKGQsIklBRFciLHUpO2lmKG51bGw9PT1mKWJyZWFrO2ErPWY7cis9YTtsZXQgbTtpZih0KXtjb25zdCByPWRlY29kZUludGVnZXIoZCwiSUFBSSIsdSk7aWYocj4xKW09ZGVjb2RlVGV4dFJlZ2lvbihlLHQsYSxRLDAsciwxLGkuY29uY2F0KGwpLEUsMCwwLDEsMCxzLGcsYyxDLDAsaCk7ZWxzZXtjb25zdCBlPWRlY29kZUlBSUQoZCx1LEUpLHQ9ZGVjb2RlSW50ZWdlcihkLCJJQVJEWCIsdSkscj1kZWNvZGVJbnRlZ2VyKGQsIklBUkRZIix1KTttPWRlY29kZVJlZmluZW1lbnQoYSxRLGcsZTxpLmxlbmd0aD9pW2VdOmxbZS1pLmxlbmd0aF0sdCxyLCExLGMsQyl9bC5wdXNoKG0pfWVsc2UgaWYoZSlwLnB1c2goYSk7ZWxzZXttPWRlY29kZUJpdG1hcCghMSxhLFEsbiwhMSxudWxsLG8sQyk7bC5wdXNoKG0pfX1pZihlJiYhdCl7Y29uc3QgZT1zLnRhYmxlQml0bWFwU2l6ZS5kZWNvZGUoaCk7aC5ieXRlQWxpZ24oKTtsZXQgdDtpZigwPT09ZSl0PXJlYWRVbmNvbXByZXNzZWRCaXRtYXAoaCxyLFEpO2Vsc2V7Y29uc3QgaT1oLmVuZCxhPWgucG9zaXRpb24rZTtoLmVuZD1hO3Q9ZGVjb2RlTU1SQml0bWFwKGgscixRLCExKTtoLmVuZD1pO2gucG9zaXRpb249YX1jb25zdCBpPXAubGVuZ3RoO2lmKGY9PT1pLTEpbC5wdXNoKHQpO2Vsc2V7bGV0IGUsYSxyLHMsbixvPTA7Zm9yKGU9ZjtlPGk7ZSsrKXtzPXBbZV07cj1vK3M7bj1bXTtmb3IoYT0wO2E8UTthKyspbi5wdXNoKHRbYV0uc3ViYXJyYXkobyxyKSk7bC5wdXNoKG4pO289cn19fX1jb25zdCBtPVtdLHk9W107bGV0IHcsYixEPSExO2NvbnN0IFM9aS5sZW5ndGgrYTtmb3IoO3kubGVuZ3RoPFM7KXtsZXQgdD1lP2YuZGVjb2RlKGgpOmRlY29kZUludGVnZXIoZCwiSUFFWCIsdSk7Zm9yKDt0LS07KXkucHVzaChEKTtEPSFEfWZvcih3PTAsYj1pLmxlbmd0aDt3PGI7dysrKXlbd10mJm0ucHVzaChpW3ddKTtmb3IobGV0IGU9MDtlPGE7dysrLGUrKyl5W3ddJiZtLnB1c2gobFtlXSk7cmV0dXJuIG19KGUuaHVmZm1hbixlLnJlZmluZW1lbnQsYyxlLm51bWJlck9mTmV3U3ltYm9scyxlLm51bWJlck9mRXhwb3J0ZWRTeW1ib2xzLG4sZS50ZW1wbGF0ZSxlLmF0LGUucmVmaW5lbWVudFRlbXBsYXRlLGUucmVmaW5lbWVudEF0LEMsbyl9b25JbW1lZGlhdGVUZXh0UmVnaW9uKGUsdCxpLGEscil7Y29uc3Qgcz1lLmluZm87bGV0IG4sbztjb25zdCBnPXRoaXMuc3ltYm9scyxjPVtdO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9Z1tlXTt0JiZjLnB1c2goLi4udCl9Y29uc3QgQz1sb2cyKGMubGVuZ3RoKTtpZihlLmh1ZmZtYW4pe289bmV3IFJlYWRlcihpLGEscik7bj1mdW5jdGlvbiBnZXRUZXh0UmVnaW9uSHVmZm1hblRhYmxlcyhlLHQsaSxhLHIpe2NvbnN0IHM9W107Zm9yKGxldCBlPTA7ZTw9MzQ7ZSsrKXtjb25zdCB0PXIucmVhZEJpdHMoNCk7cy5wdXNoKG5ldyBIdWZmbWFuTGluZShbZSx0LDAsMF0pKX1jb25zdCBuPW5ldyBIdWZmbWFuVGFibGUocywhMSk7cy5sZW5ndGg9MDtmb3IobGV0IGU9MDtlPGE7KXtjb25zdCB0PW4uZGVjb2RlKHIpO2lmKHQ+PTMyKXtsZXQgaSxhLG47c3dpdGNoKHQpe2Nhc2UgMzI6aWYoMD09PWUpdGhyb3cgbmV3IEpiaWcyRXJyb3IoIm5vIHByZXZpb3VzIHZhbHVlIGluIHN5bWJvbCBJRCB0YWJsZSIpO2E9ci5yZWFkQml0cygyKSszO2k9c1tlLTFdLnByZWZpeExlbmd0aDticmVhaztjYXNlIDMzOmE9ci5yZWFkQml0cygzKSszO2k9MDticmVhaztjYXNlIDM0OmE9ci5yZWFkQml0cyg3KSsxMTtpPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBjb2RlIGxlbmd0aCBpbiBzeW1ib2wgSUQgdGFibGUiKX1mb3Iobj0wO248YTtuKyspe3MucHVzaChuZXcgSHVmZm1hbkxpbmUoW2UsaSwwLDBdKSk7ZSsrfX1lbHNle3MucHVzaChuZXcgSHVmZm1hbkxpbmUoW2UsdCwwLDBdKSk7ZSsrfX1yLmJ5dGVBbGlnbigpO2NvbnN0IG89bmV3IEh1ZmZtYW5UYWJsZShzLCExKTtsZXQgZyxjLEMsaD0wO3N3aXRjaChlLmh1ZmZtYW5GUyl7Y2FzZSAwOmNhc2UgMTpnPWdldFN0YW5kYXJkVGFibGUoZS5odWZmbWFuRlMrNik7YnJlYWs7Y2FzZSAzOmc9Z2V0Q3VzdG9tSHVmZm1hblRhYmxlKGgsdCxpKTtoKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIEZTIHNlbGVjdG9yIil9c3dpdGNoKGUuaHVmZm1hbkRTKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpjPWdldFN0YW5kYXJkVGFibGUoZS5odWZmbWFuRFMrOCk7YnJlYWs7Y2FzZSAzOmM9Z2V0Q3VzdG9tSHVmZm1hblRhYmxlKGgsdCxpKTtoKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIERTIHNlbGVjdG9yIil9c3dpdGNoKGUuaHVmZm1hbkRUKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpDPWdldFN0YW5kYXJkVGFibGUoZS5odWZmbWFuRFQrMTEpO2JyZWFrO2Nhc2UgMzpDPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShoLHQsaSk7aCsrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBEVCBzZWxlY3RvciIpfWlmKGUucmVmaW5lbWVudCl0aHJvdyBuZXcgSmJpZzJFcnJvcigicmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO3JldHVybntzeW1ib2xJRFRhYmxlOm8sdGFibGVGaXJzdFM6Zyx0YWJsZURlbHRhUzpjLHRhYmxlRGVsdGFUOkN9fShlLHQsdGhpcy5jdXN0b21UYWJsZXMsYy5sZW5ndGgsbyl9Y29uc3QgaD1uZXcgRGVjb2RpbmdDb250ZXh0KGksYSxyKSxsPWRlY29kZVRleHRSZWdpb24oZS5odWZmbWFuLGUucmVmaW5lbWVudCxzLndpZHRoLHMuaGVpZ2h0LGUuZGVmYXVsdFBpeGVsVmFsdWUsZS5udW1iZXJPZlN5bWJvbEluc3RhbmNlcyxlLnN0cmlwU2l6ZSxjLEMsZS50cmFuc3Bvc2VkLGUuZHNPZmZzZXQsZS5yZWZlcmVuY2VDb3JuZXIsZS5jb21iaW5hdGlvbk9wZXJhdG9yLG4sZS5yZWZpbmVtZW50VGVtcGxhdGUsZS5yZWZpbmVtZW50QXQsaCxlLmxvZ1N0cmlwU2l6ZSxvKTt0aGlzLmRyYXdCaXRtYXAocyxsKX1vbkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbigpe3RoaXMub25JbW1lZGlhdGVUZXh0UmVnaW9uKC4uLmFyZ3VtZW50cyl9b25QYXR0ZXJuRGljdGlvbmFyeShlLHQsaSxhLHIpe2xldCBzPXRoaXMucGF0dGVybnM7c3x8KHRoaXMucGF0dGVybnM9cz17fSk7Y29uc3Qgbj1uZXcgRGVjb2RpbmdDb250ZXh0KGksYSxyKTtzW3RdPWZ1bmN0aW9uIGRlY29kZVBhdHRlcm5EaWN0aW9uYXJ5KGUsdCxpLGEscixzKXtjb25zdCBuPVtdO2lmKCFlKXtuLnB1c2goe3g6LXQseTowfSk7MD09PXImJm4ucHVzaCh7eDotMyx5Oi0xfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTJ9KX1jb25zdCBvPWRlY29kZUJpdG1hcChlLChhKzEpKnQsaSxyLCExLG51bGwsbixzKSxnPVtdO2ZvcihsZXQgZT0wO2U8PWE7ZSsrKXtjb25zdCBhPVtdLHI9dCplLHM9cit0O2ZvcihsZXQgZT0wO2U8aTtlKyspYS5wdXNoKG9bZV0uc3ViYXJyYXkocixzKSk7Zy5wdXNoKGEpfXJldHVybiBnfShlLm1tcixlLnBhdHRlcm5XaWR0aCxlLnBhdHRlcm5IZWlnaHQsZS5tYXhQYXR0ZXJuSW5kZXgsZS50ZW1wbGF0ZSxuKX1vbkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uKGUsdCxpLGEscil7Y29uc3Qgcz10aGlzLnBhdHRlcm5zW3RbMF1dLG49ZS5pbmZvLG89bmV3IERlY29kaW5nQ29udGV4dChpLGEsciksZz1mdW5jdGlvbiBkZWNvZGVIYWxmdG9uZVJlZ2lvbihlLHQsaSxhLHIscyxuLG8sZyxjLEMsaCxsLFEsRSl7aWYobil0aHJvdyBuZXcgSmJpZzJFcnJvcigic2tpcCBpcyBub3Qgc3VwcG9ydGVkIik7aWYoMCE9PW8pdGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICIke299IiBpcyBub3Qgc3VwcG9ydGVkIGluIGhhbGZ0b25lIHJlZ2lvbmApO2NvbnN0IHU9W107bGV0IGQsZixwO2ZvcihkPTA7ZDxyO2QrKyl7cD1uZXcgVWludDhBcnJheShhKTtpZihzKWZvcihmPTA7ZjxhO2YrKylwW2ZdPXM7dS5wdXNoKHApfWNvbnN0IG09dC5sZW5ndGgseT10WzBdLHc9eVswXS5sZW5ndGgsYj15Lmxlbmd0aCxEPWxvZzIobSksUz1bXTtpZighZSl7Uy5wdXNoKHt4Omk8PTE/MzoyLHk6LTF9KTswPT09aSYmUy5wdXNoKHt4Oi0zLHk6LTF9LHt4OjIseTotMn0se3g6LTIseTotMn0pfWNvbnN0IGs9W107bGV0IFIsTixHLHgsVSxNLEwsSCxKLHYsWTtlJiYoUj1uZXcgUmVhZGVyKEUuZGF0YSxFLnN0YXJ0LEUuZW5kKSk7Zm9yKGQ9RC0xO2Q+PTA7ZC0tKXtOPWU/ZGVjb2RlTU1SQml0bWFwKFIsZyxjLCEwKTpkZWNvZGVCaXRtYXAoITEsZyxjLGksITEsbnVsbCxTLEUpO2tbZF09Tn1mb3IoRz0wO0c8YztHKyspZm9yKHg9MDt4PGc7eCsrKXtVPTA7TT0wO2ZvcihmPUQtMTtmPj0wO2YtLSl7VV49a1tmXVtHXVt4XTtNfD1VPDxmfUw9dFtNXTtIPUMrRypRK3gqbD4+ODtKPWgrRypsLXgqUT4+ODtpZihIPj0wJiZIK3c8PWEmJko+PTAmJkorYjw9cilmb3IoZD0wO2Q8YjtkKyspe1k9dVtKK2RdO3Y9TFtkXTtmb3IoZj0wO2Y8dztmKyspWVtIK2ZdfD12W2ZdfWVsc2V7bGV0IGUsdDtmb3IoZD0wO2Q8YjtkKyspe3Q9SitkO2lmKCEodDwwfHx0Pj1yKSl7WT11W3RdO3Y9TFtkXTtmb3IoZj0wO2Y8dztmKyspe2U9SCtmO2U+PTAmJmU8YSYmKFlbZV18PXZbZl0pfX19fX1yZXR1cm4gdX0oZS5tbXIscyxlLnRlbXBsYXRlLG4ud2lkdGgsbi5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLmVuYWJsZVNraXAsZS5jb21iaW5hdGlvbk9wZXJhdG9yLGUuZ3JpZFdpZHRoLGUuZ3JpZEhlaWdodCxlLmdyaWRPZmZzZXRYLGUuZ3JpZE9mZnNldFksZS5ncmlkVmVjdG9yWCxlLmdyaWRWZWN0b3JZLG8pO3RoaXMuZHJhd0JpdG1hcChuLGcpfW9uSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbigpe3RoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbiguLi5hcmd1bWVudHMpfW9uVGFibGVzKGUsdCxpLGEpe2xldCByPXRoaXMuY3VzdG9tVGFibGVzO3J8fCh0aGlzLmN1c3RvbVRhYmxlcz1yPXt9KTtyW2VdPWZ1bmN0aW9uIGRlY29kZVRhYmxlc1NlZ21lbnQoZSx0LGkpe2NvbnN0IGE9ZVt0XSxyPTQyOTQ5NjcyOTUmcmVhZFVpbnQzMihlLHQrMSkscz00Mjk0OTY3Mjk1JnJlYWRVaW50MzIoZSx0KzUpLG49bmV3IFJlYWRlcihlLHQrOSxpKSxvPTErKGE+PjEmNyksZz0xKyhhPj40JjcpLGM9W107bGV0IEMsaCxsPXI7ZG97Qz1uLnJlYWRCaXRzKG8pO2g9bi5yZWFkQml0cyhnKTtjLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtsLEMsaCwwXSkpO2wrPTE8PGh9d2hpbGUobDxzKTtDPW4ucmVhZEJpdHMobyk7Yy5wdXNoKG5ldyBIdWZmbWFuTGluZShbci0xLEMsMzIsMCwibG93ZXIiXSkpO0M9bi5yZWFkQml0cyhvKTtjLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtzLEMsMzIsMF0pKTtpZigxJmEpe0M9bi5yZWFkQml0cyhvKTtjLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtDLDBdKSl9cmV0dXJuIG5ldyBIdWZmbWFuVGFibGUoYywhMSl9KHQsaSxhKX19Y2xhc3MgSHVmZm1hbkxpbmV7Y29uc3RydWN0b3IoZSl7aWYoMj09PWUubGVuZ3RoKXt0aGlzLmlzT09CPSEwO3RoaXMucmFuZ2VMb3c9MDt0aGlzLnByZWZpeExlbmd0aD1lWzBdO3RoaXMucmFuZ2VMZW5ndGg9MDt0aGlzLnByZWZpeENvZGU9ZVsxXTt0aGlzLmlzTG93ZXJSYW5nZT0hMX1lbHNle3RoaXMuaXNPT0I9ITE7dGhpcy5yYW5nZUxvdz1lWzBdO3RoaXMucHJlZml4TGVuZ3RoPWVbMV07dGhpcy5yYW5nZUxlbmd0aD1lWzJdO3RoaXMucHJlZml4Q29kZT1lWzNdO3RoaXMuaXNMb3dlclJhbmdlPSJsb3dlciI9PT1lWzRdfX19Y2xhc3MgSHVmZm1hblRyZWVOb2Rle2NvbnN0cnVjdG9yKGUpe3RoaXMuY2hpbGRyZW49W107aWYoZSl7dGhpcy5pc0xlYWY9ITA7dGhpcy5yYW5nZUxlbmd0aD1lLnJhbmdlTGVuZ3RoO3RoaXMucmFuZ2VMb3c9ZS5yYW5nZUxvdzt0aGlzLmlzTG93ZXJSYW5nZT1lLmlzTG93ZXJSYW5nZTt0aGlzLmlzT09CPWUuaXNPT0J9ZWxzZSB0aGlzLmlzTGVhZj0hMX1idWlsZFRyZWUoZSx0KXtjb25zdCBpPWUucHJlZml4Q29kZT4+dCYxO2lmKHQ8PTApdGhpcy5jaGlsZHJlbltpXT1uZXcgSHVmZm1hblRyZWVOb2RlKGUpO2Vsc2V7bGV0IGE9dGhpcy5jaGlsZHJlbltpXTthfHwodGhpcy5jaGlsZHJlbltpXT1hPW5ldyBIdWZmbWFuVHJlZU5vZGUobnVsbCkpO2EuYnVpbGRUcmVlKGUsdC0xKX19ZGVjb2RlTm9kZShlKXtpZih0aGlzLmlzTGVhZil7aWYodGhpcy5pc09PQilyZXR1cm4gbnVsbDtjb25zdCB0PWUucmVhZEJpdHModGhpcy5yYW5nZUxlbmd0aCk7cmV0dXJuIHRoaXMucmFuZ2VMb3crKHRoaXMuaXNMb3dlclJhbmdlPy10OnQpfWNvbnN0IHQ9dGhpcy5jaGlsZHJlbltlLnJlYWRCaXQoKV07aWYoIXQpdGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBkYXRhIik7cmV0dXJuIHQuZGVjb2RlTm9kZShlKX19Y2xhc3MgSHVmZm1hblRhYmxle2NvbnN0cnVjdG9yKGUsdCl7dHx8dGhpcy5hc3NpZ25QcmVmaXhDb2RlcyhlKTt0aGlzLnJvb3ROb2RlPW5ldyBIdWZmbWFuVHJlZU5vZGUobnVsbCk7Zm9yKGxldCB0PTAsaT1lLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPWVbdF07aS5wcmVmaXhMZW5ndGg+MCYmdGhpcy5yb290Tm9kZS5idWlsZFRyZWUoaSxpLnByZWZpeExlbmd0aC0xKX19ZGVjb2RlKGUpe3JldHVybiB0aGlzLnJvb3ROb2RlLmRlY29kZU5vZGUoZSl9YXNzaWduUHJlZml4Q29kZXMoZSl7Y29uc3QgdD1lLmxlbmd0aDtsZXQgaT0wO2ZvcihsZXQgYT0wO2E8dDthKyspaT1NYXRoLm1heChpLGVbYV0ucHJlZml4TGVuZ3RoKTtjb25zdCBhPW5ldyBVaW50MzJBcnJheShpKzEpO2ZvcihsZXQgaT0wO2k8dDtpKyspYVtlW2ldLnByZWZpeExlbmd0aF0rKztsZXQgcixzLG4sbz0xLGc9MDthWzBdPTA7Zm9yKDtvPD1pOyl7Zz1nK2Fbby0xXTw8MTtyPWc7cz0wO2Zvcig7czx0Oyl7bj1lW3NdO2lmKG4ucHJlZml4TGVuZ3RoPT09byl7bi5wcmVmaXhDb2RlPXI7cisrfXMrK31vKyt9fX1jb25zdCBpaT17fTtmdW5jdGlvbiBnZXRTdGFuZGFyZFRhYmxlKGUpe2xldCB0LGk9aWlbZV07aWYoaSlyZXR1cm4gaTtzd2l0Y2goZSl7Y2FzZSAxOnQ9W1swLDEsNCwwXSxbMTYsMiw4LDJdLFsyNzIsMywxNiw2XSxbNjU4MDgsMywzMiw3XV07YnJlYWs7Y2FzZSAyOnQ9W1swLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWzc1LDYsMzIsNjJdLFs2LDYzXV07YnJlYWs7Y2FzZSAzOnQ9W1stMjU2LDgsOCwyNTRdLFswLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWy0yNTcsOCwzMiwyNTUsImxvd2VyIl0sWzc1LDcsMzIsMTI2XSxbNiw2Ml1dO2JyZWFrO2Nhc2UgNDp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMCw2XSxbNCw0LDMsMTRdLFsxMiw1LDYsMzBdLFs3Niw1LDMyLDMxXV07YnJlYWs7Y2FzZSA1OnQ9W1stMjU1LDcsOCwxMjZdLFsxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWy0yNTYsNywzMiwxMjcsImxvd2VyIl0sWzc2LDYsMzIsNjJdXTticmVhaztjYXNlIDY6dD1bWy0yMDQ4LDUsMTAsMjhdLFstMTAyNCw0LDksOF0sWy01MTIsNCw4LDldLFstMjU2LDQsNywxMF0sWy0xMjgsNSw2LDI5XSxbLTY0LDUsNSwzMF0sWy0zMiw0LDUsMTFdLFswLDIsNywwXSxbMTI4LDMsNywyXSxbMjU2LDMsOCwzXSxbNTEyLDQsOSwxMl0sWzEwMjQsNCwxMCwxM10sWy0yMDQ5LDYsMzIsNjIsImxvd2VyIl0sWzIwNDgsNiwzMiw2M11dO2JyZWFrO2Nhc2UgNzp0PVtbLTEwMjQsNCw5LDhdLFstNTEyLDMsOCwwXSxbLTI1Niw0LDcsOV0sWy0xMjgsNSw2LDI2XSxbLTY0LDUsNSwyN10sWy0zMiw0LDUsMTBdLFswLDQsNSwxMV0sWzMyLDUsNSwyOF0sWzY0LDUsNiwyOV0sWzEyOCw0LDcsMTJdLFsyNTYsMyw4LDFdLFs1MTIsMyw5LDJdLFsxMDI0LDMsMTAsM10sWy0xMDI1LDUsMzIsMzAsImxvd2VyIl0sWzIwNDgsNSwzMiwzMV1dO2JyZWFrO2Nhc2UgODp0PVtbLTE1LDgsMywyNTJdLFstNyw5LDEsNTA4XSxbLTUsOCwxLDI1M10sWy0zLDksMCw1MDldLFstMiw3LDAsMTI0XSxbLTEsNCwwLDEwXSxbMCwyLDEsMF0sWzIsNSwwLDI2XSxbMyw2LDAsNThdLFs0LDMsNCw0XSxbMjAsNiwxLDU5XSxbMjIsNCw0LDExXSxbMzgsNCw1LDEyXSxbNzAsNSw2LDI3XSxbMTM0LDUsNywyOF0sWzI2Miw2LDcsNjBdLFszOTAsNyw4LDEyNV0sWzY0Niw2LDEwLDYxXSxbLTE2LDksMzIsNTEwLCJsb3dlciJdLFsxNjcwLDksMzIsNTExXSxbMiwxXV07YnJlYWs7Y2FzZSA5OnQ9W1stMzEsOCw0LDI1Ml0sWy0xNSw5LDIsNTA4XSxbLTExLDgsMiwyNTNdLFstNyw5LDEsNTA5XSxbLTUsNywxLDEyNF0sWy0zLDQsMSwxMF0sWy0xLDMsMSwyXSxbMSwzLDEsM10sWzMsNSwxLDI2XSxbNSw2LDEsNThdLFs3LDMsNSw0XSxbMzksNiwyLDU5XSxbNDMsNCw1LDExXSxbNzUsNCw2LDEyXSxbMTM5LDUsNywyN10sWzI2Nyw1LDgsMjhdLFs1MjMsNiw4LDYwXSxbNzc5LDcsOSwxMjVdLFsxMjkxLDYsMTEsNjFdLFstMzIsOSwzMiw1MTAsImxvd2VyIl0sWzMzMzksOSwzMiw1MTFdLFsyLDBdXTticmVhaztjYXNlIDEwOnQ9W1stMjEsNyw0LDEyMl0sWy01LDgsMCwyNTJdLFstNCw3LDAsMTIzXSxbLTMsNSwwLDI0XSxbLTIsMiwyLDBdLFsyLDUsMCwyNV0sWzMsNiwwLDU0XSxbNCw3LDAsMTI0XSxbNSw4LDAsMjUzXSxbNiwyLDYsMV0sWzcwLDUsNSwyNl0sWzEwMiw2LDUsNTVdLFsxMzQsNiw2LDU2XSxbMTk4LDYsNyw1N10sWzMyNiw2LDgsNThdLFs1ODIsNiw5LDU5XSxbMTA5NCw2LDEwLDYwXSxbMjExOCw3LDExLDEyNV0sWy0yMiw4LDMyLDI1NCwibG93ZXIiXSxbNDE2Niw4LDMyLDI1NV0sWzIsMl1dO2JyZWFrO2Nhc2UgMTE6dD1bWzEsMSwwLDBdLFsyLDIsMSwyXSxbNCw0LDAsMTJdLFs1LDQsMSwxM10sWzcsNSwxLDI4XSxbOSw1LDIsMjldLFsxMyw2LDIsNjBdLFsxNyw3LDIsMTIyXSxbMjEsNywzLDEyM10sWzI5LDcsNCwxMjRdLFs0NSw3LDUsMTI1XSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTI6dD1bWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDEsNl0sWzUsNSwwLDI4XSxbNiw1LDEsMjldLFs4LDYsMSw2MF0sWzEwLDcsMCwxMjJdLFsxMSw3LDEsMTIzXSxbMTMsNywyLDEyNF0sWzE3LDcsMywxMjVdLFsyNSw3LDQsMTI2XSxbNDEsOCw1LDI1NF0sWzczLDgsMzIsMjU1XV07YnJlYWs7Y2FzZSAxMzp0PVtbMSwxLDAsMF0sWzIsMywwLDRdLFszLDQsMCwxMl0sWzQsNSwwLDI4XSxbNSw0LDEsMTNdLFs3LDMsMyw1XSxbMTUsNiwxLDU4XSxbMTcsNiwyLDU5XSxbMjEsNiwzLDYwXSxbMjksNiw0LDYxXSxbNDUsNiw1LDYyXSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTQ6dD1bWy0yLDMsMCw0XSxbLTEsMywwLDVdLFswLDEsMCwwXSxbMSwzLDAsNl0sWzIsMywwLDddXTticmVhaztjYXNlIDE1OnQ9W1stMjQsNyw0LDEyNF0sWy04LDYsMiw2MF0sWy00LDUsMSwyOF0sWy0yLDQsMCwxMl0sWy0xLDMsMCw0XSxbMCwxLDAsMF0sWzEsMywwLDVdLFsyLDQsMCwxM10sWzMsNSwxLDI5XSxbNSw2LDIsNjFdLFs5LDcsNCwxMjVdLFstMjUsNywzMiwxMjYsImxvd2VyIl0sWzI1LDcsMzIsMTI3XV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgc3RhbmRhcmQgdGFibGUgQi4ke2V9IGRvZXMgbm90IGV4aXN0YCl9Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRbZV09bmV3IEh1ZmZtYW5MaW5lKHRbZV0pO2k9bmV3IEh1ZmZtYW5UYWJsZSh0LCEwKTtpaVtlXT1pO3JldHVybiBpfWNsYXNzIFJlYWRlcntjb25zdHJ1Y3RvcihlLHQsaSl7dGhpcy5kYXRhPWU7dGhpcy5zdGFydD10O3RoaXMuZW5kPWk7dGhpcy5wb3NpdGlvbj10O3RoaXMuc2hpZnQ9LTE7dGhpcy5jdXJyZW50Qnl0ZT0wfXJlYWRCaXQoKXtpZih0aGlzLnNoaWZ0PDApe2lmKHRoaXMucG9zaXRpb24+PXRoaXMuZW5kKXRocm93IG5ldyBKYmlnMkVycm9yKCJlbmQgb2YgZGF0YSB3aGlsZSByZWFkaW5nIGJpdCIpO3RoaXMuY3VycmVudEJ5dGU9dGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK107dGhpcy5zaGlmdD03fWNvbnN0IGU9dGhpcy5jdXJyZW50Qnl0ZT4+dGhpcy5zaGlmdCYxO3RoaXMuc2hpZnQtLTtyZXR1cm4gZX1yZWFkQml0cyhlKXtsZXQgdCxpPTA7Zm9yKHQ9ZS0xO3Q+PTA7dC0tKWl8PXRoaXMucmVhZEJpdCgpPDx0O3JldHVybiBpfWJ5dGVBbGlnbigpe3RoaXMuc2hpZnQ9LTF9bmV4dCgpe3JldHVybiB0aGlzLnBvc2l0aW9uPj10aGlzLmVuZD8tMTp0aGlzLmRhdGFbdGhpcy5wb3NpdGlvbisrXX19ZnVuY3Rpb24gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGUsdCxpKXtsZXQgYT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7Y29uc3Qgcz1pW3Rbcl1dO2lmKHMpe2lmKGU9PT1hKXJldHVybiBzO2ErK319dGhyb3cgbmV3IEpiaWcyRXJyb3IoImNhbid0IGZpbmQgY3VzdG9tIEh1ZmZtYW4gdGFibGUiKX1mdW5jdGlvbiByZWFkVW5jb21wcmVzc2VkQml0bWFwKGUsdCxpKXtjb25zdCBhPVtdO2ZvcihsZXQgcj0wO3I8aTtyKyspe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkodCk7YS5wdXNoKGkpO2ZvcihsZXQgYT0wO2E8dDthKyspaVthXT1lLnJlYWRCaXQoKTtlLmJ5dGVBbGlnbigpfXJldHVybiBhfWZ1bmN0aW9uIGRlY29kZU1NUkJpdG1hcChlLHQsaSxhKXtjb25zdCByPW5ldyBDQ0lUVEZheERlY29kZXIoZSx7SzotMSxDb2x1bW5zOnQsUm93czppLEJsYWNrSXMxOiEwLEVuZE9mQmxvY2s6YX0pLHM9W107bGV0IG4sbz0hMTtmb3IobGV0IGU9MDtlPGk7ZSsrKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KHQpO3MucHVzaChlKTtsZXQgaT0tMTtmb3IobGV0IGE9MDthPHQ7YSsrKXtpZihpPDApe249ci5yZWFkTmV4dENoYXIoKTtpZigtMT09PW4pe249MDtvPSEwfWk9N31lW2FdPW4+PmkmMTtpLS19fWlmKGEmJiFvKXtjb25zdCBlPTU7Zm9yKGxldCB0PTA7dDxlJiYtMSE9PXIucmVhZE5leHRDaGFyKCk7dCsrKTt9cmV0dXJuIHN9Y2xhc3MgSmJpZzJJbWFnZXtwYXJzZUNodW5rcyhlKXtyZXR1cm4gZnVuY3Rpb24gcGFyc2VKYmlnMkNodW5rcyhlKXtjb25zdCB0PW5ldyBTaW1wbGVTZWdtZW50VmlzaXRvcjtmb3IobGV0IGk9MCxhPWUubGVuZ3RoO2k8YTtpKyspe2NvbnN0IGE9ZVtpXTtwcm9jZXNzU2VnbWVudHMocmVhZFNlZ21lbnRzKHt9LGEuZGF0YSxhLnN0YXJ0LGEuZW5kKSx0KX1yZXR1cm4gdC5idWZmZXJ9KGUpfXBhcnNlKGUpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkOiBKYmlnMkltYWdlLnBhcnNlIil9fWNsYXNzIEpiaWcyU3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxpKXtzdXBlcih0KTt0aGlzLnN0cmVhbT1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5tYXliZUxlbmd0aD10O3RoaXMucGFyYW1zPWl9Z2V0IGJ5dGVzKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJieXRlcyIsdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpfWVuc3VyZUJ1ZmZlcihlKXt9cmVhZEJsb2NrKCl7dGhpcy5kZWNvZGVJbWFnZSgpfWRlY29kZUltYWdlKGUpe2lmKHRoaXMuZW9mKXJldHVybiB0aGlzLmJ1ZmZlcjtlfHw9dGhpcy5ieXRlcztjb25zdCB0PW5ldyBKYmlnMkltYWdlLGk9W107aWYodGhpcy5wYXJhbXMgaW5zdGFuY2VvZiBEaWN0KXtjb25zdCBlPXRoaXMucGFyYW1zLmdldCgiSkJJRzJHbG9iYWxzIik7aWYoZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pe2NvbnN0IHQ9ZS5nZXRCeXRlcygpO2kucHVzaCh7ZGF0YTp0LHN0YXJ0OjAsZW5kOnQubGVuZ3RofSl9fWkucHVzaCh7ZGF0YTplLHN0YXJ0OjAsZW5kOmUubGVuZ3RofSk7Y29uc3QgYT10LnBhcnNlQ2h1bmtzKGkpLHI9YS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxyO2UrKylhW2VdXj0yNTU7dGhpcy5idWZmZXI9YTt0aGlzLmJ1ZmZlckxlbmd0aD1yO3RoaXMuZW9mPSEwO3JldHVybiB0aGlzLmJ1ZmZlcn1nZXQgY2FuQXN5bmNEZWNvZGVJbWFnZUZyb21CdWZmZXIoKXtyZXR1cm4gdGhpcy5zdHJlYW0uaXNBc3luY319ZnVuY3Rpb24gY29udmVydFRvUkdCQShlKXtzd2l0Y2goZS5raW5kKXtjYXNlIFM6cmV0dXJuIGNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKGUpO2Nhc2UgazpyZXR1cm4gZnVuY3Rpb24gY29udmVydFJHQlRvUkdCQSh7c3JjOmUsc3JjUG9zOnQ9MCxkZXN0OmksZGVzdFBvczphPTAsd2lkdGg6cixoZWlnaHQ6c30pe2xldCBuPTA7Y29uc3Qgbz1lLmxlbmd0aD4+MixnPW5ldyBVaW50MzJBcnJheShlLmJ1ZmZlcix0LG8pO2lmKEZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuKXtmb3IoO248by0yO24rPTMsYSs9NCl7Y29uc3QgZT1nW25dLHQ9Z1tuKzFdLHI9Z1tuKzJdO2lbYV09NDI3ODE5MDA4MHxlO2lbYSsxXT1lPj4+MjR8dDw8OHw0Mjc4MTkwMDgwO2lbYSsyXT10Pj4+MTZ8cjw8MTZ8NDI3ODE5MDA4MDtpW2ErM109cj4+Pjh8NDI3ODE5MDA4MH1mb3IobGV0IHQ9NCpuLHI9ZS5sZW5ndGg7dDxyO3QrPTMpaVthKytdPWVbdF18ZVt0KzFdPDw4fGVbdCsyXTw8MTZ8NDI3ODE5MDA4MH1lbHNle2Zvcig7bjxvLTI7bis9MyxhKz00KXtjb25zdCBlPWdbbl0sdD1nW24rMV0scj1nW24rMl07aVthXT0yNTV8ZTtpW2ErMV09ZTw8MjR8dD4+Pjh8MjU1O2lbYSsyXT10PDwxNnxyPj4+MTZ8MjU1O2lbYSszXT1yPDw4fDI1NX1mb3IobGV0IHQ9NCpuLHI9ZS5sZW5ndGg7dDxyO3QrPTMpaVthKytdPWVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fDI1NX1yZXR1cm57c3JjUG9zOnQsZGVzdFBvczphfX0oZSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEoe3NyYzplLHNyY1Bvczp0PTAsZGVzdDppLHdpZHRoOmEsaGVpZ2h0OnIsbm9uQmxhY2tDb2xvcjpzPTQyOTQ5NjcyOTUsaW52ZXJzZURlY29kZTpuPSExfSl7Y29uc3Qgbz1GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NSxbZyxjXT1uP1tzLG9dOltvLHNdLEM9YT4+MyxoPTcmYSxsPWUubGVuZ3RoO2k9bmV3IFVpbnQzMkFycmF5KGkuYnVmZmVyKTtsZXQgUT0wO2ZvcihsZXQgYT0wO2E8cjthKyspe2Zvcihjb25zdCBhPXQrQzt0PGE7dCsrKXtjb25zdCBhPXQ8bD9lW3RdOjI1NTtpW1ErK109MTI4JmE/YzpnO2lbUSsrXT02NCZhP2M6ZztpW1ErK109MzImYT9jOmc7aVtRKytdPTE2JmE/YzpnO2lbUSsrXT04JmE/YzpnO2lbUSsrXT00JmE/YzpnO2lbUSsrXT0yJmE/YzpnO2lbUSsrXT0xJmE/YzpnfWlmKDA9PT1oKWNvbnRpbnVlO2NvbnN0IGE9dDxsP2VbdCsrXToyNTU7Zm9yKGxldCBlPTA7ZTxoO2UrKylpW1ErK109YSYxPDw3LWU/YzpnfXJldHVybntzcmNQb3M6dCxkZXN0UG9zOlF9fWNsYXNzIEpwZWdFcnJvciBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkpwZWdFcnJvciIpfX1jbGFzcyBETkxNYXJrZXJFcnJvciBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiRE5MTWFya2VyRXJyb3IiKTt0aGlzLnNjYW5MaW5lcz10fX1jbGFzcyBFT0lNYXJrZXJFcnJvciBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkVPSU1hcmtlckVycm9yIil9fWNvbnN0IGFpPW5ldyBVaW50OEFycmF5KFswLDEsOCwxNiw5LDIsMywxMCwxNywyNCwzMiwyNSwxOCwxMSw0LDUsMTIsMTksMjYsMzMsNDAsNDgsNDEsMzQsMjcsMjAsMTMsNiw3LDE0LDIxLDI4LDM1LDQyLDQ5LDU2LDU3LDUwLDQzLDM2LDI5LDIyLDE1LDIzLDMwLDM3LDQ0LDUxLDU4LDU5LDUyLDQ1LDM4LDMxLDM5LDQ2LDUzLDYwLDYxLDU0LDQ3LDU1LDYyLDYzXSkscmk9NDAxNyxzaT03OTksbmk9MzQwNixvaT0yMjc2LGdpPTE1NjcsSWk9Mzc4NCxjaT01NzkzLENpPTI4OTY7ZnVuY3Rpb24gYnVpbGRIdWZmbWFuVGFibGUoZSx0KXtsZXQgaSxhLHI9MCxzPTE2O2Zvcig7cz4wJiYhZVtzLTFdOylzLS07Y29uc3Qgbj1be2NoaWxkcmVuOltdLGluZGV4OjB9XTtsZXQgbyxnPW5bMF07Zm9yKGk9MDtpPHM7aSsrKXtmb3IoYT0wO2E8ZVtpXTthKyspe2c9bi5wb3AoKTtnLmNoaWxkcmVuW2cuaW5kZXhdPXRbcl07Zm9yKDtnLmluZGV4PjA7KWc9bi5wb3AoKTtnLmluZGV4Kys7bi5wdXNoKGcpO2Zvcig7bi5sZW5ndGg8PWk7KXtuLnB1c2gobz17Y2hpbGRyZW46W10saW5kZXg6MH0pO2cuY2hpbGRyZW5bZy5pbmRleF09by5jaGlsZHJlbjtnPW99cisrfWlmKGkrMTxzKXtuLnB1c2gobz17Y2hpbGRyZW46W10saW5kZXg6MH0pO2cuY2hpbGRyZW5bZy5pbmRleF09by5jaGlsZHJlbjtnPW99fXJldHVybiBuWzBdLmNoaWxkcmVufWZ1bmN0aW9uIGdldEJsb2NrQnVmZmVyT2Zmc2V0KGUsdCxpKXtyZXR1cm4gNjQqKChlLmJsb2Nrc1BlckxpbmUrMSkqdCtpKX1mdW5jdGlvbiBkZWNvZGVTY2FuKGUsdCxpLGEscixzLG4sbyxnLGM9ITEpe2NvbnN0IEM9aS5tY3VzUGVyTGluZSxoPWkucHJvZ3Jlc3NpdmUsbD10O2xldCBRPTAsRT0wO2Z1bmN0aW9uIHJlYWRCaXQoKXtpZihFPjApe0UtLTtyZXR1cm4gUT4+RSYxfVE9ZVt0KytdO2lmKDI1NT09PVEpe2NvbnN0IGE9ZVt0KytdO2lmKGEpe2lmKDIyMD09PWEmJmMpe2NvbnN0IGE9cmVhZFVpbnQxNihlLHQrPTIpO3QrPTI7aWYoYT4wJiZhIT09aS5zY2FuTGluZXMpdGhyb3cgbmV3IEROTE1hcmtlckVycm9yKCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixhKX1lbHNlIGlmKDIxNz09PWEpe2lmKGMpe2NvbnN0IGU9cCooOD09PWkucHJlY2lzaW9uPzg6MCk7aWYoZT4wJiZNYXRoLnJvdW5kKGkuc2NhbkxpbmVzL2UpPj01KXRocm93IG5ldyBETkxNYXJrZXJFcnJvcigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSwgcG9zc2libHkgY2F1c2VkIGJ5IGluY29ycmVjdCBgc2NhbkxpbmVzYCBwYXJhbWV0ZXIiLGUpfXRocm93IG5ldyBFT0lNYXJrZXJFcnJvcigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSIpfXRocm93IG5ldyBKcGVnRXJyb3IoYHVuZXhwZWN0ZWQgbWFya2VyICR7KFE8PDh8YSkudG9TdHJpbmcoMTYpfWApfX1FPTc7cmV0dXJuIFE+Pj43fWZ1bmN0aW9uIGRlY29kZUh1ZmZtYW4oZSl7bGV0IHQ9ZTtmb3IoOzspe3Q9dFtyZWFkQml0KCldO3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJudW1iZXIiOnJldHVybiB0O2Nhc2Uib2JqZWN0Ijpjb250aW51ZX10aHJvdyBuZXcgSnBlZ0Vycm9yKCJpbnZhbGlkIGh1ZmZtYW4gc2VxdWVuY2UiKX19ZnVuY3Rpb24gcmVjZWl2ZShlKXtsZXQgdD0wO2Zvcig7ZT4wOyl7dD10PDwxfHJlYWRCaXQoKTtlLS19cmV0dXJuIHR9ZnVuY3Rpb24gcmVjZWl2ZUFuZEV4dGVuZChlKXtpZigxPT09ZSlyZXR1cm4gMT09PXJlYWRCaXQoKT8xOi0xO2NvbnN0IHQ9cmVjZWl2ZShlKTtyZXR1cm4gdD49MTw8ZS0xP3Q6dCsoLTE8PGUpKzF9bGV0IHU9MDtsZXQgZCxmPTA7bGV0IHA9MDtmdW5jdGlvbiBkZWNvZGVNY3UoZSx0LGksYSxyKXtjb25zdCBzPWklQztwPShpL0N8MCkqZS52K2E7Y29uc3Qgbj1zKmUuaCtyO3QoZSxnZXRCbG9ja0J1ZmZlck9mZnNldChlLHAsbikpfWZ1bmN0aW9uIGRlY29kZUJsb2NrKGUsdCxpKXtwPWkvZS5ibG9ja3NQZXJMaW5lfDA7Y29uc3QgYT1pJWUuYmxvY2tzUGVyTGluZTt0KGUsZ2V0QmxvY2tCdWZmZXJPZmZzZXQoZSxwLGEpKX1jb25zdCBtPWEubGVuZ3RoO2xldCB5LHcsYixELFMsaztrPWg/MD09PXM/MD09PW8/ZnVuY3Rpb24gZGVjb2RlRENGaXJzdChlLHQpe2NvbnN0IGk9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZURDKSxhPTA9PT1pPzA6cmVjZWl2ZUFuZEV4dGVuZChpKTw8ZztlLmJsb2NrRGF0YVt0XT1lLnByZWQrPWF9OmZ1bmN0aW9uIGRlY29kZURDU3VjY2Vzc2l2ZShlLHQpe2UuYmxvY2tEYXRhW3RdfD1yZWFkQml0KCk8PGd9OjA9PT1vP2Z1bmN0aW9uIGRlY29kZUFDRmlyc3QoZSx0KXtpZih1PjApe3UtLTtyZXR1cm59bGV0IGk9cztjb25zdCBhPW47Zm9yKDtpPD1hOyl7Y29uc3QgYT1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpLHI9MTUmYSxzPWE+PjQ7aWYoMD09PXIpe2lmKHM8MTUpe3U9cmVjZWl2ZShzKSsoMTw8cyktMTticmVha31pKz0xNjtjb250aW51ZX1pKz1zO2NvbnN0IG49YWlbaV07ZS5ibG9ja0RhdGFbdCtuXT1yZWNlaXZlQW5kRXh0ZW5kKHIpKigxPDxnKTtpKyt9fTpmdW5jdGlvbiBkZWNvZGVBQ1N1Y2Nlc3NpdmUoZSx0KXtsZXQgaT1zO2NvbnN0IGE9bjtsZXQgcixvLGM9MDtmb3IoO2k8PWE7KXtjb25zdCBhPXQrYWlbaV0scz1lLmJsb2NrRGF0YVthXTwwPy0xOjE7c3dpdGNoKGYpe2Nhc2UgMDpvPWRlY29kZUh1ZmZtYW4oZS5odWZmbWFuVGFibGVBQyk7cj0xNSZvO2M9bz4+NDtpZigwPT09cilpZihjPDE1KXt1PXJlY2VpdmUoYykrKDE8PGMpO2Y9NH1lbHNle2M9MTY7Zj0xfWVsc2V7aWYoMSE9PXIpdGhyb3cgbmV3IEpwZWdFcnJvcigiaW52YWxpZCBBQ24gZW5jb2RpbmciKTtkPXJlY2VpdmVBbmRFeHRlbmQocik7Zj1jPzI6M31jb250aW51ZTtjYXNlIDE6Y2FzZSAyOmlmKGUuYmxvY2tEYXRhW2FdKWUuYmxvY2tEYXRhW2FdKz1zKihyZWFkQml0KCk8PGcpO2Vsc2V7Yy0tOzA9PT1jJiYoZj0yPT09Zj8zOjApfWJyZWFrO2Nhc2UgMzppZihlLmJsb2NrRGF0YVthXSllLmJsb2NrRGF0YVthXSs9cyoocmVhZEJpdCgpPDxnKTtlbHNle2UuYmxvY2tEYXRhW2FdPWQ8PGc7Zj0wfWJyZWFrO2Nhc2UgNDplLmJsb2NrRGF0YVthXSYmKGUuYmxvY2tEYXRhW2FdKz1zKihyZWFkQml0KCk8PGcpKX1pKyt9aWYoND09PWYpe3UtLTswPT09dSYmKGY9MCl9fTpmdW5jdGlvbiBkZWNvZGVCYXNlbGluZShlLHQpe2NvbnN0IGk9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZURDKSxhPTA9PT1pPzA6cmVjZWl2ZUFuZEV4dGVuZChpKTtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPWE7bGV0IHI9MTtmb3IoO3I8NjQ7KXtjb25zdCBpPWRlY29kZUh1ZmZtYW4oZS5odWZmbWFuVGFibGVBQyksYT0xNSZpLHM9aT4+NDtpZigwPT09YSl7aWYoczwxNSlicmVhaztyKz0xNjtjb250aW51ZX1yKz1zO2NvbnN0IG49YWlbcl07ZS5ibG9ja0RhdGFbdCtuXT1yZWNlaXZlQW5kRXh0ZW5kKGEpO3IrK319O2xldCBSLE49MDtjb25zdCBHPTE9PT1tP2FbMF0uYmxvY2tzUGVyTGluZSphWzBdLmJsb2Nrc1BlckNvbHVtbjpDKmkubWN1c1BlckNvbHVtbjtsZXQgeCxVO2Zvcig7Tjw9Rzspe2NvbnN0IGk9cj9NYXRoLm1pbihHLU4scik6RztpZihpPjApe2Zvcih3PTA7dzxtO3crKylhW3ddLnByZWQ9MDt1PTA7aWYoMT09PW0pe3k9YVswXTtmb3IoUz0wO1M8aTtTKyspe2RlY29kZUJsb2NrKHksayxOKTtOKyt9fWVsc2UgZm9yKFM9MDtTPGk7UysrKXtmb3Iodz0wO3c8bTt3Kyspe3k9YVt3XTt4PXkuaDtVPXkudjtmb3IoYj0wO2I8VTtiKyspZm9yKEQ9MDtEPHg7RCsrKWRlY29kZU1jdSh5LGssTixiLEQpfU4rK319RT0wO1I9ZmluZE5leHRGaWxlTWFya2VyKGUsdCk7aWYoIVIpYnJlYWs7aWYoUi5pbnZhbGlkKXt3YXJuKGBkZWNvZGVTY2FuIC0gJHtpPjA/InVuZXhwZWN0ZWQiOiJleGNlc3NpdmUifSBNQ1UgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICR7Ui5pbnZhbGlkfWApO3Q9Ui5vZmZzZXR9aWYoIShSLm1hcmtlcj49NjU0ODgmJlIubWFya2VyPD02NTQ5NSkpYnJlYWs7dCs9Mn1yZXR1cm4gdC1sfWZ1bmN0aW9uIHF1YW50aXplQW5kSW52ZXJzZShlLHQsaSl7Y29uc3QgYT1lLnF1YW50aXphdGlvblRhYmxlLHI9ZS5ibG9ja0RhdGE7bGV0IHMsbixvLGcsYyxDLGgsbCxRLEUsdSxkLGYscCxtLHksdztpZighYSl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJtaXNzaW5nIHJlcXVpcmVkIFF1YW50aXphdGlvbiBUYWJsZS4iKTtmb3IobGV0IGU9MDtlPDY0O2UrPTgpe1E9clt0K2VdO0U9clt0K2UrMV07dT1yW3QrZSsyXTtkPXJbdCtlKzNdO2Y9clt0K2UrNF07cD1yW3QrZSs1XTttPXJbdCtlKzZdO3k9clt0K2UrN107USo9YVtlXTtpZigwIT0oRXx1fGR8ZnxwfG18eSkpe0UqPWFbZSsxXTt1Kj1hW2UrMl07ZCo9YVtlKzNdO2YqPWFbZSs0XTtwKj1hW2UrNV07bSo9YVtlKzZdO3kqPWFbZSs3XTtzPWNpKlErMTI4Pj44O249Y2kqZisxMjg+Pjg7bz11O2c9bTtjPUNpKihFLXkpKzEyOD4+ODtsPUNpKihFK3kpKzEyOD4+ODtDPWQ8PDQ7aD1wPDw0O3M9cytuKzE+PjE7bj1zLW47dz1vKklpK2cqZ2krMTI4Pj44O289bypnaS1nKklpKzEyOD4+ODtnPXc7Yz1jK2grMT4+MTtoPWMtaDtsPWwrQysxPj4xO0M9bC1DO3M9cytnKzE+PjE7Zz1zLWc7bj1uK28rMT4+MTtvPW4tbzt3PWMqb2krbCpuaSsyMDQ4Pj4xMjtjPWMqbmktbCpvaSsyMDQ4Pj4xMjtsPXc7dz1DKnNpK2gqcmkrMjA0OD4+MTI7Qz1DKnJpLWgqc2krMjA0OD4+MTI7aD13O2lbZV09cytsO2lbZSs3XT1zLWw7aVtlKzFdPW4raDtpW2UrNl09bi1oO2lbZSsyXT1vK0M7aVtlKzVdPW8tQztpW2UrM109ZytjO2lbZSs0XT1nLWN9ZWxzZXt3PWNpKlErNTEyPj4xMDtpW2VdPXc7aVtlKzFdPXc7aVtlKzJdPXc7aVtlKzNdPXc7aVtlKzRdPXc7aVtlKzVdPXc7aVtlKzZdPXc7aVtlKzddPXd9fWZvcihsZXQgZT0wO2U8ODsrK2Upe1E9aVtlXTtFPWlbZSs4XTt1PWlbZSsxNl07ZD1pW2UrMjRdO2Y9aVtlKzMyXTtwPWlbZSs0MF07bT1pW2UrNDhdO3k9aVtlKzU2XTtpZigwIT0oRXx1fGR8ZnxwfG18eSkpe3M9Y2kqUSsyMDQ4Pj4xMjtuPWNpKmYrMjA0OD4+MTI7bz11O2c9bTtjPUNpKihFLXkpKzIwNDg+PjEyO2w9Q2kqKEUreSkrMjA0OD4+MTI7Qz1kO2g9cDtzPTQxMTIrKHMrbisxPj4xKTtuPXMtbjt3PW8qSWkrZypnaSsyMDQ4Pj4xMjtvPW8qZ2ktZypJaSsyMDQ4Pj4xMjtnPXc7Yz1jK2grMT4+MTtoPWMtaDtsPWwrQysxPj4xO0M9bC1DO3M9cytnKzE+PjE7Zz1zLWc7bj1uK28rMT4+MTtvPW4tbzt3PWMqb2krbCpuaSsyMDQ4Pj4xMjtjPWMqbmktbCpvaSsyMDQ4Pj4xMjtsPXc7dz1DKnNpK2gqcmkrMjA0OD4+MTI7Qz1DKnJpLWgqc2krMjA0OD4+MTI7aD13O1E9cytsO3k9cy1sO0U9bitoO209bi1oO3U9bytDO3A9by1DO2Q9ZytjO2Y9Zy1jO1E8MTY/UT0wOlE+PTQwODA/UT0yNTU6UT4+PTQ7RTwxNj9FPTA6RT49NDA4MD9FPTI1NTpFPj49NDt1PDE2P3U9MDp1Pj00MDgwP3U9MjU1OnU+Pj00O2Q8MTY/ZD0wOmQ+PTQwODA/ZD0yNTU6ZD4+PTQ7ZjwxNj9mPTA6Zj49NDA4MD9mPTI1NTpmPj49NDtwPDE2P3A9MDpwPj00MDgwP3A9MjU1OnA+Pj00O208MTY/bT0wOm0+PTQwODA/bT0yNTU6bT4+PTQ7eTwxNj95PTA6eT49NDA4MD95PTI1NTp5Pj49NDtyW3QrZV09UTtyW3QrZSs4XT1FO3JbdCtlKzE2XT11O3JbdCtlKzI0XT1kO3JbdCtlKzMyXT1mO3JbdCtlKzQwXT1wO3JbdCtlKzQ4XT1tO3JbdCtlKzU2XT15fWVsc2V7dz1jaSpRKzgxOTI+PjE0O3c9dzwtMjA0MD8wOnc+PTIwMjQ/MjU1OncrMjA1Nj4+NDtyW3QrZV09dztyW3QrZSs4XT13O3JbdCtlKzE2XT13O3JbdCtlKzI0XT13O3JbdCtlKzMyXT13O3JbdCtlKzQwXT13O3JbdCtlKzQ4XT13O3JbdCtlKzU2XT13fX19ZnVuY3Rpb24gYnVpbGRDb21wb25lbnREYXRhKGUsdCl7Y29uc3QgaT10LmJsb2Nrc1BlckxpbmUsYT10LmJsb2Nrc1BlckNvbHVtbixyPW5ldyBJbnQxNkFycmF5KDY0KTtmb3IobGV0IGU9MDtlPGE7ZSsrKWZvcihsZXQgYT0wO2E8aTthKyspe3F1YW50aXplQW5kSW52ZXJzZSh0LGdldEJsb2NrQnVmZmVyT2Zmc2V0KHQsZSxhKSxyKX1yZXR1cm4gdC5ibG9ja0RhdGF9ZnVuY3Rpb24gZmluZE5leHRGaWxlTWFya2VyKGUsdCxpPXQpe2NvbnN0IGE9ZS5sZW5ndGgtMTtsZXQgcj1pPHQ/aTp0O2lmKHQ+PWEpcmV0dXJuIG51bGw7Y29uc3Qgcz1yZWFkVWludDE2KGUsdCk7aWYocz49NjU0NzImJnM8PTY1NTM0KXJldHVybntpbnZhbGlkOm51bGwsbWFya2VyOnMsb2Zmc2V0OnR9O2xldCBuPXJlYWRVaW50MTYoZSxyKTtmb3IoOyEobj49NjU0NzImJm48PTY1NTM0KTspe2lmKCsrcj49YSlyZXR1cm4gbnVsbDtuPXJlYWRVaW50MTYoZSxyKX1yZXR1cm57aW52YWxpZDpzLnRvU3RyaW5nKDE2KSxtYXJrZXI6bixvZmZzZXQ6cn19Y2xhc3MgSnBlZ0ltYWdle2NvbnN0cnVjdG9yKHtkZWNvZGVUcmFuc2Zvcm06ZT1udWxsLGNvbG9yVHJhbnNmb3JtOnQ9LTF9PXt9KXt0aGlzLl9kZWNvZGVUcmFuc2Zvcm09ZTt0aGlzLl9jb2xvclRyYW5zZm9ybT10fXBhcnNlKGUse2RubFNjYW5MaW5lczp0PW51bGx9PXt9KXtmdW5jdGlvbiByZWFkRGF0YUJsb2NrKCl7Y29uc3QgdD1yZWFkVWludDE2KGUscik7cis9MjtsZXQgaT1yK3QtMjtjb25zdCBhPWZpbmROZXh0RmlsZU1hcmtlcihlLGkscik7aWYoYT8uaW52YWxpZCl7d2FybigicmVhZERhdGFCbG9jayAtIGluY29ycmVjdCBsZW5ndGgsIGN1cnJlbnQgbWFya2VyIGlzOiAiK2EuaW52YWxpZCk7aT1hLm9mZnNldH1jb25zdCBzPWUuc3ViYXJyYXkocixpKTtyKz1zLmxlbmd0aDtyZXR1cm4gc31mdW5jdGlvbiBwcmVwYXJlQ29tcG9uZW50cyhlKXtjb25zdCB0PU1hdGguY2VpbChlLnNhbXBsZXNQZXJMaW5lLzgvZS5tYXhIKSxpPU1hdGguY2VpbChlLnNjYW5MaW5lcy84L2UubWF4Vik7Zm9yKGNvbnN0IGEgb2YgZS5jb21wb25lbnRzKXtjb25zdCByPU1hdGguY2VpbChNYXRoLmNlaWwoZS5zYW1wbGVzUGVyTGluZS84KSphLmgvZS5tYXhIKSxzPU1hdGguY2VpbChNYXRoLmNlaWwoZS5zY2FuTGluZXMvOCkqYS52L2UubWF4Viksbj10KmEuaCxvPTY0KihpKmEudikqKG4rMSk7YS5ibG9ja0RhdGE9bmV3IEludDE2QXJyYXkobyk7YS5ibG9ja3NQZXJMaW5lPXI7YS5ibG9ja3NQZXJDb2x1bW49c31lLm1jdXNQZXJMaW5lPXQ7ZS5tY3VzUGVyQ29sdW1uPWl9bGV0IGksYSxyPTAscz1udWxsLG49bnVsbCxvPTA7Y29uc3QgZz1bXSxjPVtdLEM9W107bGV0IGg9cmVhZFVpbnQxNihlLHIpO3IrPTI7aWYoNjU0OTYhPT1oKXRocm93IG5ldyBKcGVnRXJyb3IoIlNPSSBub3QgZm91bmQiKTtoPXJlYWRVaW50MTYoZSxyKTtyKz0yO0E6Zm9yKDs2NTQ5NyE9PWg7KXtsZXQgbCxRLEU7c3dpdGNoKGgpe2Nhc2UgNjU1MDQ6Y2FzZSA2NTUwNTpjYXNlIDY1NTA2OmNhc2UgNjU1MDc6Y2FzZSA2NTUwODpjYXNlIDY1NTA5OmNhc2UgNjU1MTA6Y2FzZSA2NTUxMTpjYXNlIDY1NTEyOmNhc2UgNjU1MTM6Y2FzZSA2NTUxNDpjYXNlIDY1NTE1OmNhc2UgNjU1MTY6Y2FzZSA2NTUxNzpjYXNlIDY1NTE4OmNhc2UgNjU1MTk6Y2FzZSA2NTUzNDpjb25zdCB1PXJlYWREYXRhQmxvY2soKTs2NTUwND09PWgmJjc0PT09dVswXSYmNzA9PT11WzFdJiY3Mz09PXVbMl0mJjcwPT09dVszXSYmMD09PXVbNF0mJihzPXt2ZXJzaW9uOnttYWpvcjp1WzVdLG1pbm9yOnVbNl19LGRlbnNpdHlVbml0czp1WzddLHhEZW5zaXR5OnVbOF08PDh8dVs5XSx5RGVuc2l0eTp1WzEwXTw8OHx1WzExXSx0aHVtYldpZHRoOnVbMTJdLHRodW1iSGVpZ2h0OnVbMTNdLHRodW1iRGF0YTp1LnN1YmFycmF5KDE0LDE0KzMqdVsxMl0qdVsxM10pfSk7NjU1MTg9PT1oJiY2NT09PXVbMF0mJjEwMD09PXVbMV0mJjExMT09PXVbMl0mJjk4PT09dVszXSYmMTAxPT09dVs0XSYmKG49e3ZlcnNpb246dVs1XTw8OHx1WzZdLGZsYWdzMDp1WzddPDw4fHVbOF0sZmxhZ3MxOnVbOV08PDh8dVsxMF0sdHJhbnNmb3JtQ29kZTp1WzExXX0pO2JyZWFrO2Nhc2UgNjU0OTk6Y29uc3QgZD1yZWFkVWludDE2KGUscik7cis9Mjtjb25zdCBmPWQrci0yO2xldCBwO2Zvcig7cjxmOyl7Y29uc3QgdD1lW3IrK10saT1uZXcgVWludDE2QXJyYXkoNjQpO2lmKHQ+PjQ9PTApZm9yKFE9MDtRPDY0O1ErKyl7cD1haVtRXTtpW3BdPWVbcisrXX1lbHNle2lmKHQ+PjQhPTEpdGhyb3cgbmV3IEpwZWdFcnJvcigiRFFUIC0gaW52YWxpZCB0YWJsZSBzcGVjIik7Zm9yKFE9MDtRPDY0O1ErKyl7cD1haVtRXTtpW3BdPXJlYWRVaW50MTYoZSxyKTtyKz0yfX1nWzE1JnRdPWl9YnJlYWs7Y2FzZSA2NTQ3MjpjYXNlIDY1NDczOmNhc2UgNjU0NzQ6aWYoaSl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJPbmx5IHNpbmdsZSBmcmFtZSBKUEVHcyBzdXBwb3J0ZWQiKTtyKz0yO2k9e307aS5leHRlbmRlZD02NTQ3Mz09PWg7aS5wcm9ncmVzc2l2ZT02NTQ3ND09PWg7aS5wcmVjaXNpb249ZVtyKytdO2NvbnN0IG09cmVhZFVpbnQxNihlLHIpO3IrPTI7aS5zY2FuTGluZXM9dHx8bTtpLnNhbXBsZXNQZXJMaW5lPXJlYWRVaW50MTYoZSxyKTtyKz0yO2kuY29tcG9uZW50cz1bXTtpLmNvbXBvbmVudElkcz17fTtjb25zdCB5PWVbcisrXTtsZXQgdz0wLGI9MDtmb3IobD0wO2w8eTtsKyspe2NvbnN0IHQ9ZVtyXSxhPWVbcisxXT4+NCxzPTE1JmVbcisxXTt3PGEmJih3PWEpO2I8cyYmKGI9cyk7Y29uc3Qgbj1lW3IrMl07RT1pLmNvbXBvbmVudHMucHVzaCh7aDphLHY6cyxxdWFudGl6YXRpb25JZDpuLHF1YW50aXphdGlvblRhYmxlOm51bGx9KTtpLmNvbXBvbmVudElkc1t0XT1FLTE7cis9M31pLm1heEg9dztpLm1heFY9YjtwcmVwYXJlQ29tcG9uZW50cyhpKTticmVhaztjYXNlIDY1NDc2OmNvbnN0IEQ9cmVhZFVpbnQxNihlLHIpO3IrPTI7Zm9yKGw9MjtsPEQ7KXtjb25zdCB0PWVbcisrXSxpPW5ldyBVaW50OEFycmF5KDE2KTtsZXQgYT0wO2ZvcihRPTA7UTwxNjtRKysscisrKWErPWlbUV09ZVtyXTtjb25zdCBzPW5ldyBVaW50OEFycmF5KGEpO2ZvcihRPTA7UTxhO1ErKyxyKyspc1tRXT1lW3JdO2wrPTE3K2E7KHQ+PjQ9PTA/QzpjKVsxNSZ0XT1idWlsZEh1ZmZtYW5UYWJsZShpLHMpfWJyZWFrO2Nhc2UgNjU1MDE6cis9MjthPXJlYWRVaW50MTYoZSxyKTtyKz0yO2JyZWFrO2Nhc2UgNjU0OTg6Y29uc3QgUz0xPT0rK28mJiF0O3IrPTI7Y29uc3Qgaz1lW3IrK10sUj1bXTtmb3IobD0wO2w8aztsKyspe2NvbnN0IHQ9ZVtyKytdLGE9aS5jb21wb25lbnRJZHNbdF0scz1pLmNvbXBvbmVudHNbYV07cy5pbmRleD10O2NvbnN0IG49ZVtyKytdO3MuaHVmZm1hblRhYmxlREM9Q1tuPj40XTtzLmh1ZmZtYW5UYWJsZUFDPWNbMTUmbl07Ui5wdXNoKHMpfWNvbnN0IE49ZVtyKytdLEc9ZVtyKytdLHg9ZVtyKytdO3RyeXtjb25zdCB0PWRlY29kZVNjYW4oZSxyLGksUixhLE4sRyx4Pj40LDE1JngsUyk7cis9dH1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgRE5MTWFya2VyRXJyb3Ipe3dhcm4oYCR7dC5tZXNzYWdlfSAtLSBhdHRlbXB0aW5nIHRvIHJlLXBhcnNlIHRoZSBKUEVHIGltYWdlLmApO3JldHVybiB0aGlzLnBhcnNlKGUse2RubFNjYW5MaW5lczp0LnNjYW5MaW5lc30pfWlmKHQgaW5zdGFuY2VvZiBFT0lNYXJrZXJFcnJvcil7d2FybihgJHt0Lm1lc3NhZ2V9IC0tIGlnbm9yaW5nIHRoZSByZXN0IG9mIHRoZSBpbWFnZSBkYXRhLmApO2JyZWFrIEF9dGhyb3cgdH1icmVhaztjYXNlIDY1NTAwOnIrPTQ7YnJlYWs7Y2FzZSA2NTUzNToyNTUhPT1lW3JdJiZyLS07YnJlYWs7ZGVmYXVsdDpjb25zdCBVPWZpbmROZXh0RmlsZU1hcmtlcihlLHItMixyLTMpO2lmKFU/LmludmFsaWQpe3dhcm4oIkpwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIrVS5pbnZhbGlkKTtyPVUub2Zmc2V0O2JyZWFrfWlmKCFVfHxyPj1lLmxlbmd0aC0xKXt3YXJuKCJKcGVnSW1hZ2UucGFyc2UgLSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltYWdlIGRhdGEgd2l0aG91dCBmaW5kaW5nIGFuIEVPSSBtYXJrZXIgKDB4RkZEOSkuIik7YnJlYWsgQX10aHJvdyBuZXcgSnBlZ0Vycm9yKCJKcGVnSW1hZ2UucGFyc2UgLSB1bmtub3duIG1hcmtlcjogIitoLnRvU3RyaW5nKDE2KSl9aD1yZWFkVWludDE2KGUscik7cis9Mn1pZighaSl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJKcGVnSW1hZ2UucGFyc2UgLSBubyBmcmFtZSBkYXRhIGZvdW5kLiIpO3RoaXMud2lkdGg9aS5zYW1wbGVzUGVyTGluZTt0aGlzLmhlaWdodD1pLnNjYW5MaW5lczt0aGlzLmpmaWY9czt0aGlzLmFkb2JlPW47dGhpcy5jb21wb25lbnRzPVtdO2Zvcihjb25zdCBlIG9mIGkuY29tcG9uZW50cyl7Y29uc3QgdD1nW2UucXVhbnRpemF0aW9uSWRdO3QmJihlLnF1YW50aXphdGlvblRhYmxlPXQpO3RoaXMuY29tcG9uZW50cy5wdXNoKHtpbmRleDplLmluZGV4LG91dHB1dDpidWlsZENvbXBvbmVudERhdGEoMCxlKSxzY2FsZVg6ZS5oL2kubWF4SCxzY2FsZVk6ZS52L2kubWF4VixibG9ja3NQZXJMaW5lOmUuYmxvY2tzUGVyTGluZSxibG9ja3NQZXJDb2x1bW46ZS5ibG9ja3NQZXJDb2x1bW59KX10aGlzLm51bUNvbXBvbmVudHM9dGhpcy5jb21wb25lbnRzLmxlbmd0aH1fZ2V0TGluZWFyaXplZEJsb2NrRGF0YShlLHQsaT0hMSl7Y29uc3QgYT10aGlzLndpZHRoL2Uscj10aGlzLmhlaWdodC90O2xldCBzLG4sbyxnLGMsQyxoLGwsUSxFLHUsZD0wO2NvbnN0IGY9dGhpcy5jb21wb25lbnRzLmxlbmd0aCxwPWUqdCpmLG09bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHApLHk9bmV3IFVpbnQzMkFycmF5KGUpLHc9NDI5NDk2NzI4ODtsZXQgYjtmb3IoaD0wO2g8ZjtoKyspe3M9dGhpcy5jb21wb25lbnRzW2hdO249cy5zY2FsZVgqYTtvPXMuc2NhbGVZKnI7ZD1oO3U9cy5vdXRwdXQ7Zz1zLmJsb2Nrc1BlckxpbmUrMTw8MztpZihuIT09Yil7Zm9yKGM9MDtjPGU7YysrKXtsPTB8YypuO3lbY109KGwmdyk8PDN8NyZsfWI9bn1mb3IoQz0wO0M8dDtDKyspe2w9MHxDKm87RT1nKihsJncpfCg3JmwpPDwzO2ZvcihjPTA7YzxlO2MrKyl7bVtkXT11W0UreVtjXV07ZCs9Zn19fWxldCBEPXRoaXMuX2RlY29kZVRyYW5zZm9ybTtpfHw0IT09Znx8RHx8KEQ9bmV3IEludDMyQXJyYXkoWy0yNTYsMjU1LC0yNTYsMjU1LC0yNTYsMjU1LC0yNTYsMjU1XSkpO2lmKEQpZm9yKGg9MDtoPHA7KWZvcihsPTAsUT0wO2w8ZjtsKyssaCsrLFErPTIpbVtoXT0obVtoXSpEW1FdPj44KStEW1ErMV07cmV0dXJuIG19Z2V0IF9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZCgpe3JldHVybiB0aGlzLmFkb2JlPyEhdGhpcy5hZG9iZS50cmFuc2Zvcm1Db2RlOjM9PT10aGlzLm51bUNvbXBvbmVudHM/MCE9PXRoaXMuX2NvbG9yVHJhbnNmb3JtJiYoODIhPT10aGlzLmNvbXBvbmVudHNbMF0uaW5kZXh8fDcxIT09dGhpcy5jb21wb25lbnRzWzFdLmluZGV4fHw2NiE9PXRoaXMuY29tcG9uZW50c1syXS5pbmRleCk6MT09PXRoaXMuX2NvbG9yVHJhbnNmb3JtfV9jb252ZXJ0WWNjVG9SZ2IoZSl7bGV0IHQsaSxhO2ZvcihsZXQgcj0wLHM9ZS5sZW5ndGg7cjxzO3IrPTMpe3Q9ZVtyXTtpPWVbcisxXTthPWVbcisyXTtlW3JdPXQtMTc5LjQ1NisxLjQwMiphO2VbcisxXT10KzEzNS40NTktLjM0NCppLS43MTQqYTtlW3IrMl09dC0yMjYuODE2KzEuNzcyKml9cmV0dXJuIGV9X2NvbnZlcnRZY2NUb1JnYmEoZSx0KXtmb3IobGV0IGk9MCxhPTAscj1lLmxlbmd0aDtpPHI7aSs9MyxhKz00KXtjb25zdCByPWVbaV0scz1lW2krMV0sbj1lW2krMl07dFthXT1yLTE3OS40NTYrMS40MDIqbjt0W2ErMV09cisxMzUuNDU5LS4zNDQqcy0uNzE0Km47dFthKzJdPXItMjI2LjgxNisxLjc3MipzO3RbYSszXT0yNTV9cmV0dXJuIHR9X2NvbnZlcnRZY2NrVG9SZ2IoZSl7bGV0IHQsaSxhLHIscz0wO2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7bjxvO24rPTQpe3Q9ZVtuXTtpPWVbbisxXTthPWVbbisyXTtyPWVbbiszXTtlW3MrK109aSooLTY2MDYzNTY2OTQyMDM2NGUtMTkqaSsuMDAwNDM3MTMwNDc1OTI2MjMyKmEtNTQwODA2MTAwNjQ1OTllLTE4KnQrLjAwMDQ4NDQ5Nzk3MTIwMjgxKnItLjE1NDM2MjE1MTg3MTEyNiktMTIyLjY3MTk1NDA2ODk0K2EqKC0uMDAwOTU3OTY0Mzc4NDQ1NzczKmErLjAwMDgxNzA3NjkxMTM0NjYyNSp0LS4wMDQ3NzI3MTQwNTQwODc0NypyKzEuNTMzODAyNTMyMjE3MzQpK3QqKC4wMDA5NjEyNTAxODQxMzA2ODgqdC0uMDAyNjYyNTczMzIyODM5MzMqcisuNDgzNTcwODg0NTEyNjUpK3IqKC0uMDAwMzM2MTk3MTc3NjE4Mzk0KnIrLjQ4NDc5MTU2MTQ5MDc3Nik7ZVtzKytdPTEwNy4yNjgwMzkzOTc3MjQraSooMjE5OTI3MTA0NTI1NzQxZS0xOSppLS4wMDA2NDA5OTIwMTgyOTc5NDUqYSsuMDAwNjU5Mzk3MDAxMjQ1NTc3KnQrLjAwMDQyNjEwNTY1MjkzODgzNypyLS4xNzY0OTE3OTI0NjI4NzUpK2EqKC0uMDAwNzc4MjY5OTQxNTEzNjgzKmErLjAwMTMwODcyMjYxNDA4Mjc1KnQrLjAwMDc3MDQ4MjYzMTgwMTEzMipyLS4xNTEwNTE0OTI3NzU1NjIpK3QqKC4wMDEyNjkzNTM2ODExNDg0Myp0LS4wMDI2NTA5MDE4OTAxMDg5OCpyKy4yNTgwMjkxMDIwNjg0NSkrciooLS4wMDAzMTg5MTMxMTc1ODgzMjgqci0uMjEzNzQyNDAwMzIzNjY1KTtlW3MrK109aSooLS4wMDA1NzAxMTUxOTY5NzM2NzcqaS0yNjM0MDkwNTEwMDQ1ODllLTE5KmErLjAwMjA3NDEwODgxMTUwMTIqdC0uMDAyODgyNjAyMzY4NTM0NDIqcisuODE0MjcyOTY4MzU5Mjk1KS0yMC44MTAwMTI1NDY5NDcrYSooLTE1MzQ5NjA1NzQ0MDk3NWUtMTkqYS0uMDAwMTMyNjg5MDQzOTYxNDQ2KnQrLjAwMDU2MDgzMzY5MTI0MjgxMipyLS4xOTUxNTIwMjc1MzQwNDkpK3QqKC4wMDE3NDQxODEzMjkyNzU4Mip0LS4wMDI1NTI0MzMyMTQzOTM0NypyKy4xMTY5MzUwMjA0NjUxNDUpK3IqKC0uMDAwMzQzNTMxOTk2NTEwNTU1KnIrLjI0MTY1MjYwMjMyNDA3KX1yZXR1cm4gZS5zdWJhcnJheSgwLHMpfV9jb252ZXJ0WWNja1RvUmdiYShlKXtmb3IobGV0IHQ9MCxpPWUubGVuZ3RoO3Q8aTt0Kz00KXtjb25zdCBpPWVbdF0sYT1lW3QrMV0scj1lW3QrMl0scz1lW3QrM107ZVt0XT1hKigtNjYwNjM1NjY5NDIwMzY0ZS0xOSphKy4wMDA0MzcxMzA0NzU5MjYyMzIqci01NDA4MDYxMDA2NDU5OWUtMTgqaSsuMDAwNDg0NDk3OTcxMjAyODEqcy0uMTU0MzYyMTUxODcxMTI2KS0xMjIuNjcxOTU0MDY4OTQrciooLS4wMDA5NTc5NjQzNzg0NDU3NzMqcisuMDAwODE3MDc2OTExMzQ2NjI1KmktLjAwNDc3MjcxNDA1NDA4NzQ3KnMrMS41MzM4MDI1MzIyMTczNCkraSooLjAwMDk2MTI1MDE4NDEzMDY4OCppLS4wMDI2NjI1NzMzMjI4MzkzMypzKy40ODM1NzA4ODQ1MTI2NSkrcyooLS4wMDAzMzYxOTcxNzc2MTgzOTQqcysuNDg0NzkxNTYxNDkwNzc2KTtlW3QrMV09MTA3LjI2ODAzOTM5NzcyNCthKigyMTk5MjcxMDQ1MjU3NDFlLTE5KmEtLjAwMDY0MDk5MjAxODI5Nzk0NSpyKy4wMDA2NTkzOTcwMDEyNDU1NzcqaSsuMDAwNDI2MTA1NjUyOTM4ODM3KnMtLjE3NjQ5MTc5MjQ2Mjg3NSkrciooLS4wMDA3NzgyNjk5NDE1MTM2ODMqcisuMDAxMzA4NzIyNjE0MDgyNzUqaSsuMDAwNzcwNDgyNjMxODAxMTMyKnMtLjE1MTA1MTQ5Mjc3NTU2MikraSooLjAwMTI2OTM1MzY4MTE0ODQzKmktLjAwMjY1MDkwMTg5MDEwODk4KnMrLjI1ODAyOTEwMjA2ODQ1KStzKigtLjAwMDMxODkxMzExNzU4ODMyOCpzLS4yMTM3NDI0MDAzMjM2NjUpO2VbdCsyXT1hKigtLjAwMDU3MDExNTE5Njk3MzY3NyphLTI2MzQwOTA1MTAwNDU4OWUtMTkqcisuMDAyMDc0MTA4ODExNTAxMippLS4wMDI4ODI2MDIzNjg1MzQ0MipzKy44MTQyNzI5NjgzNTkyOTUpLTIwLjgxMDAxMjU0Njk0NytyKigtMTUzNDk2MDU3NDQwOTc1ZS0xOSpyLS4wMDAxMzI2ODkwNDM5NjE0NDYqaSsuMDAwNTYwODMzNjkxMjQyODEyKnMtLjE5NTE1MjAyNzUzNDA0OSkraSooLjAwMTc0NDE4MTMyOTI3NTgyKmktLjAwMjU1MjQzMzIxNDM5MzQ3KnMrLjExNjkzNTAyMDQ2NTE0NSkrcyooLS4wMDAzNDM1MzE5OTY1MTA1NTUqcysuMjQxNjUyNjAyMzI0MDcpO2VbdCszXT0yNTV9cmV0dXJuIGV9X2NvbnZlcnRZY2NrVG9DbXlrKGUpe2xldCB0LGksYTtmb3IobGV0IHI9MCxzPWUubGVuZ3RoO3I8cztyKz00KXt0PWVbcl07aT1lW3IrMV07YT1lW3IrMl07ZVtyXT00MzQuNDU2LXQtMS40MDIqYTtlW3IrMV09MTE5LjU0MS10Ky4zNDQqaSsuNzE0KmE7ZVtyKzJdPTQ4MS44MTYtdC0xLjc3MippfXJldHVybiBlfV9jb252ZXJ0Q215a1RvUmdiKGUpe2xldCB0LGksYSxyLHM9MDtmb3IobGV0IG49MCxvPWUubGVuZ3RoO248bztuKz00KXt0PWVbbl07aT1lW24rMV07YT1lW24rMl07cj1lW24rM107ZVtzKytdPTI1NSt0KigtNjc0NzE0NzA3MzYwMjQ0MWUtMjAqdCsuMDAwODM3OTI2MjEyMTAxMzcyNyppKy4wMDAyODk0NzE4MTg4NjQzMjk0KmErLjAwMzI2NDIzMTA1NzUzNzgwNipyLTEuMTE4NTYxMTg2NzIwMzkzNykraSooMjYzNzQxMDc2MTYwODk0MDVlLTIxKmktODYyNjk0OTE1ODYzODU3MmUtMjAqYS0uMDAwMjc0ODc2OTA2NzQ5OTQ5MSpyLS4wMjE1NTY4ODc5NDk3ODk2NykrYSooLTM4NzgwOTkyMTI4NjkzNjNlLTIwKmEtLjAwMDMyNjc4MDgyNzk0ODUyODYqcisuMDY4Njc0MjIzODU5NTM0NSktciooLjAwMDMzNjE5NzE3NzYxODM5MzcqcisuNzQzMDY1OTE1MTM0MjI1NCk7ZVtzKytdPTI1NSt0KiguMDAwMTM1OTYzNzI4MTM1ODg4NDgqdCsuMDAwOTI0NTM3MTMyNTczNTg1KmkrLjAwMDEwNTY3MzU5NjE4NjgzNTkzKmErLjAwMDQ3OTE4NjQ2ODc0MzY1MTIqci0uMzEwOTY4OTU4NzUxNTg3NSkraSooLS4wMDAyMzU0NTM0NjEwODM3MDM0NCppKy4wMDAyNzAyODQ1MjUzNTM0NzE0KmErLjAwMjAyMDAzMDg5NzczMDcxNTYqci0uNzQ4ODA1MjE2NzAxNTQ5NCkrYSooNjgzNDgxNTk5ODIzNTY2MmUtMjAqYSsuMDAwMTUxNjg0NTIzNjM0NjA5NzMqci0uMDk3NTE5Mjc3NzQ3Mjg5MzMpLXIqKC4wMDAzMTg5MTMxMTc1ODgzMjgxKnIrLjczNjQ4ODM4MDc3MzMxNjgpO2VbcysrXT0yNTUrdCooMTM1OTg2NTA0MTEzODUzMDdlLTIxKnQrLjAwMDEyNDIzOTU2MTc1NDkwODUxKmkrLjAwMDQ3NTE5ODUwOTc1ODM1ODkqYS0zNjcyOTMxNzQ3NjYzMDQyMmUtMjIqci0uMDU1NjIxODY5ODAyNjQwMzQpK2kqKC4wMDAxNjE0MTM4MDU5ODcyNDY3NippKy4wMDA5NjkyMjM5MTMwNzI1MTg2KmErLjAwMDc3ODI2OTI0NTAwMzYyNTMqci0uNDQwMTUyMzIzNjc1MjY0NjMpK2EqKDUuMDY4ODgyOTE0MDY4NzY5ZS03KmErLjAwMTc3NzgzNjkwMTEzNzUwNzEqci0uNzU5MTQ1NDY0OTc0OTYwOSktciooLjAwMDM0MzUzMTk5NjUxMDU1NTMqcisuNzA2Mzc3MDE4NjE2MDE0NCl9cmV0dXJuIGUuc3ViYXJyYXkoMCxzKX1fY29udmVydENteWtUb1JnYmEoZSl7Zm9yKGxldCB0PTAsaT1lLmxlbmd0aDt0PGk7dCs9NCl7Y29uc3QgaT1lW3RdLGE9ZVt0KzFdLHI9ZVt0KzJdLHM9ZVt0KzNdO2VbdF09MjU1K2kqKC02NzQ3MTQ3MDczNjAyNDQxZS0yMCppKy4wMDA4Mzc5MjYyMTIxMDEzNzI3KmErLjAwMDI4OTQ3MTgxODg2NDMyOTQqcisuMDAzMjY0MjMxMDU3NTM3ODA2KnMtMS4xMTg1NjExODY3MjAzOTM3KSthKigyNjM3NDEwNzYxNjA4OTQwNWUtMjEqYS04NjI2OTQ5MTU4NjM4NTcyZS0yMCpyLS4wMDAyNzQ4NzY5MDY3NDk5NDkxKnMtLjAyMTU1Njg4Nzk0OTc4OTY3KStyKigtMzg3ODA5OTIxMjg2OTM2M2UtMjAqci0uMDAwMzI2NzgwODI3OTQ4NTI4NipzKy4wNjg2NzQyMjM4NTk1MzQ1KS1zKiguMDAwMzM2MTk3MTc3NjE4MzkzNypzKy43NDMwNjU5MTUxMzQyMjU0KTtlW3QrMV09MjU1K2kqKC4wMDAxMzU5NjM3MjgxMzU4ODg0OCppKy4wMDA5MjQ1MzcxMzI1NzM1ODUqYSsuMDAwMTA1NjczNTk2MTg2ODM1OTMqcisuMDAwNDc5MTg2NDY4NzQzNjUxMipzLS4zMTA5Njg5NTg3NTE1ODc1KSthKigtLjAwMDIzNTQ1MzQ2MTA4MzcwMzQ0KmErLjAwMDI3MDI4NDUyNTM1MzQ3MTQqcisuMDAyMDIwMDMwODk3NzMwNzE1NipzLS43NDg4MDUyMTY3MDE1NDk0KStyKig2ODM0ODE1OTk4MjM1NjYyZS0yMCpyKy4wMDAxNTE2ODQ1MjM2MzQ2MDk3MypzLS4wOTc1MTkyNzc3NDcyODkzMyktcyooLjAwMDMxODkxMzExNzU4ODMyODEqcysuNzM2NDg4MzgwNzczMzE2OCk7ZVt0KzJdPTI1NStpKigxMzU5ODY1MDQxMTM4NTMwN2UtMjEqaSsuMDAwMTI0MjM5NTYxNzU0OTA4NTEqYSsuMDAwNDc1MTk4NTA5NzU4MzU4OSpyLTM2NzI5MzE3NDc2NjMwNDIyZS0yMipzLS4wNTU2MjE4Njk4MDI2NDAzNCkrYSooLjAwMDE2MTQxMzgwNTk4NzI0Njc2KmErLjAwMDk2OTIyMzkxMzA3MjUxODYqcisuMDAwNzc4MjY5MjQ1MDAzNjI1MypzLS40NDAxNTIzMjM2NzUyNjQ2MykrciooNS4wNjg4ODI5MTQwNjg3NjllLTcqcisuMDAxNzc3ODM2OTAxMTM3NTA3MSpzLS43NTkxNDU0NjQ5NzQ5NjA5KS1zKiguMDAwMzQzNTMxOTk2NTEwNTU1MypzKy43MDYzNzcwMTg2MTYwMTQ0KTtlW3QrM109MjU1fXJldHVybiBlfWdldERhdGEoe3dpZHRoOmUsaGVpZ2h0OnQsZm9yY2VSR0JBOmk9ITEsZm9yY2VSR0I6YT0hMSxpc1NvdXJjZVBERjpyPSExfSl7aWYodGhpcy5udW1Db21wb25lbnRzPjQpdGhyb3cgbmV3IEpwZWdFcnJvcigiVW5zdXBwb3J0ZWQgY29sb3IgbW9kZSIpO2NvbnN0IHM9dGhpcy5fZ2V0TGluZWFyaXplZEJsb2NrRGF0YShlLHQscik7aWYoMT09PXRoaXMubnVtQ29tcG9uZW50cyYmKGl8fGEpKXtjb25zdCBlPXMubGVuZ3RoKihpPzQ6MyksdD1uZXcgVWludDhDbGFtcGVkQXJyYXkoZSk7bGV0IGE9MDtpZihpKSFmdW5jdGlvbiBncmF5VG9SR0JBKGUsdCl7aWYoRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4pZm9yKGxldCBpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKXRbaV09NjU3OTMqZVtpXXw0Mjc4MTkwMDgwO2Vsc2UgZm9yKGxldCBpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKXRbaV09MTY4NDMwMDgqZVtpXXwyNTV9KHMsbmV3IFVpbnQzMkFycmF5KHQuYnVmZmVyKSk7ZWxzZSBmb3IoY29uc3QgZSBvZiBzKXt0W2ErK109ZTt0W2ErK109ZTt0W2ErK109ZX1yZXR1cm4gdH1pZigzPT09dGhpcy5udW1Db21wb25lbnRzJiZ0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZCl7aWYoaSl7Y29uc3QgZT1uZXcgVWludDhDbGFtcGVkQXJyYXkocy5sZW5ndGgvMyo0KTtyZXR1cm4gdGhpcy5fY29udmVydFljY1RvUmdiYShzLGUpfXJldHVybiB0aGlzLl9jb252ZXJ0WWNjVG9SZ2Iocyl9aWYoND09PXRoaXMubnVtQ29tcG9uZW50cyl7aWYodGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpcmV0dXJuIGk/dGhpcy5fY29udmVydFljY2tUb1JnYmEocyk6YT90aGlzLl9jb252ZXJ0WWNja1RvUmdiKHMpOnRoaXMuX2NvbnZlcnRZY2NrVG9DbXlrKHMpO2lmKGkpcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2JhKHMpO2lmKGEpcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2Iocyl9cmV0dXJuIHN9fWNsYXNzIEpwZWdTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLm1heWJlTGVuZ3RoPXQ7dGhpcy5wYXJhbXM9aX1nZXQgYnl0ZXMoKXtyZXR1cm4gc2hhZG93KHRoaXMsImJ5dGVzIix0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSl9ZW5zdXJlQnVmZmVyKGUpe31yZWFkQmxvY2soKXt0aGlzLmRlY29kZUltYWdlKCl9ZGVjb2RlSW1hZ2UoZSl7aWYodGhpcy5lb2YpcmV0dXJuIHRoaXMuYnVmZmVyO2V8fD10aGlzLmJ5dGVzO2ZvcihsZXQgdD0wLGk9ZS5sZW5ndGgtMTt0PGk7dCsrKWlmKDI1NT09PWVbdF0mJjIxNj09PWVbdCsxXSl7dD4wJiYoZT1lLnN1YmFycmF5KHQpKTticmVha31jb25zdCB0PXtkZWNvZGVUcmFuc2Zvcm06dm9pZCAwLGNvbG9yVHJhbnNmb3JtOnZvaWQgMH0saT10aGlzLmRpY3QuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZigodGhpcy5mb3JjZVJHQkF8fHRoaXMuZm9yY2VSR0IpJiZBcnJheS5pc0FycmF5KGkpKXtjb25zdCBlPXRoaXMuZGljdC5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKXx8OCxhPWkubGVuZ3RoLHI9bmV3IEludDMyQXJyYXkoYSk7bGV0IHM9ITE7Y29uc3Qgbj0oMTw8ZSktMTtmb3IobGV0IGU9MDtlPGE7ZSs9Mil7cltlXT0yNTYqKGlbZSsxXS1pW2VdKXwwO3JbZSsxXT1pW2VdKm58MDsyNTY9PT1yW2VdJiYwPT09cltlKzFdfHwocz0hMCl9cyYmKHQuZGVjb2RlVHJhbnNmb3JtPXIpfWlmKHRoaXMucGFyYW1zIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT10aGlzLnBhcmFtcy5nZXQoIkNvbG9yVHJhbnNmb3JtIik7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHQuY29sb3JUcmFuc2Zvcm09ZSl9Y29uc3QgYT1uZXcgSnBlZ0ltYWdlKHQpO2EucGFyc2UoZSk7Y29uc3Qgcj1hLmdldERhdGEoe3dpZHRoOnRoaXMuZHJhd1dpZHRoLGhlaWdodDp0aGlzLmRyYXdIZWlnaHQsZm9yY2VSR0JBOnRoaXMuZm9yY2VSR0JBLGZvcmNlUkdCOnRoaXMuZm9yY2VSR0IsaXNTb3VyY2VQREY6ITB9KTt0aGlzLmJ1ZmZlcj1yO3RoaXMuYnVmZmVyTGVuZ3RoPXIubGVuZ3RoO3RoaXMuZW9mPSEwO3JldHVybiB0aGlzLmJ1ZmZlcn1nZXQgY2FuQXN5bmNEZWNvZGVJbWFnZUZyb21CdWZmZXIoKXtyZXR1cm4gdGhpcy5zdHJlYW0uaXNBc3luY319X193ZWJwYWNrX3JlcXVpcmVfXyg0OTc5KTt2YXIgaGksbGk9KGhpPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdD8uc3JjOnZvaWQgMCxmdW5jdGlvbihlPXt9KXt2YXIgdCxpLGE9ZTtuZXcgUHJvbWlzZSgoKGUsYSk9Pnt0PWU7aT1hfSkpO2EuZGVjb2RlPWZ1bmN0aW9uKGUse251bUNvbXBvbmVudHM6dD00LGlzSW5kZXhlZENvbG9ybWFwOmk9ITEsc21hc2tJbkRhdGE6cj0hMX0pe2NvbnN0IHM9ZS5sZW5ndGgsbj1hLl9tYWxsb2Mocyk7YS5IRUFQVTguc2V0KGUsbik7Y29uc3Qgbz1hLl9qcDJfZGVjb2RlKG4scyx0PjA/dDowLCEhaSwhIXIpO2EuX2ZyZWUobik7aWYobyl7Y29uc3R7ZXJyb3JNZXNzYWdlczplfT1hO2lmKGUpe2RlbGV0ZSBhLmVycm9yTWVzc2FnZXM7cmV0dXJuIGV9cmV0dXJuIlVua25vd24gZXJyb3IifWNvbnN0e2ltYWdlRGF0YTpnfT1hO2EuaW1hZ2VEYXRhPW51bGw7cmV0dXJuIGd9O3ZhciByLHM9T2JqZWN0LmFzc2lnbih7fSxhKSxuPSIuL3RoaXMucHJvZ3JhbSIsbz0iIjsidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYobz1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyk7aGkmJihvPWhpKTtvPW8uc3RhcnRzV2l0aCgiYmxvYjoiKT8iIjpvLnN1YnN0cigwLG8ucmVwbGFjZSgvWz8jXS4qLywiIikubGFzdEluZGV4T2YoIi8iKSsxKTt2YXIgZyxjLEMsaCxsLFE9YS5wcmludHx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxFPWEucHJpbnRFcnJ8fGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWduKGEscyk7cz1udWxsO2EuYXJndW1lbnRzJiZhLmFyZ3VtZW50czthLnRoaXNQcm9ncmFtJiYobj1hLnRoaXNQcm9ncmFtKTthLnF1aXQmJmEucXVpdDthLndhc21CaW5hcnkmJihnPWEud2FzbUJpbmFyeSk7ZnVuY3Rpb24gdHJ5UGFyc2VBc0RhdGFVUkkoZSl7aWYoaXNEYXRhVVJJKGUpKXJldHVybiBmdW5jdGlvbiBpbnRBcnJheUZyb21CYXNlNjQoZSl7Zm9yKHZhciB0PWF0b2IoZSksaT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCksYT0wO2E8dC5sZW5ndGg7KythKWlbYV09dC5jaGFyQ29kZUF0KGEpO3JldHVybiBpfShlLnNsaWNlKGIubGVuZ3RoKSl9ZnVuY3Rpb24gdXBkYXRlTWVtb3J5Vmlld3MoKXt2YXIgZT1jLmJ1ZmZlcjthLkhFQVA4PUM9bmV3IEludDhBcnJheShlKTthLkhFQVAxNj1uZXcgSW50MTZBcnJheShlKTthLkhFQVBVOD1oPW5ldyBVaW50OEFycmF5KGUpO2EuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoZSk7YS5IRUFQMzI9bmV3IEludDMyQXJyYXkoZSk7YS5IRUFQVTMyPWw9bmV3IFVpbnQzMkFycmF5KGUpO2EuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KGUpO2EuSEVBUEY2ND1uZXcgRmxvYXQ2NEFycmF5KGUpfXZhciB1LGQ9W10sZj1bXSxwPVtdLG09MCx5PW51bGwsdz1udWxsLGI9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiLGlzRGF0YVVSST1lPT5lLnN0YXJ0c1dpdGgoYik7ZnVuY3Rpb24gaW5zdGFudGlhdGVTeW5jKGUsdCl7dmFyIGksYT1mdW5jdGlvbiBnZXRCaW5hcnlTeW5jKGUpe2lmKGU9PXUmJmcpcmV0dXJuIG5ldyBVaW50OEFycmF5KGcpO3ZhciB0PXRyeVBhcnNlQXNEYXRhVVJJKGUpO2lmKHQpcmV0dXJuIHQ7aWYocilyZXR1cm4gcihlKTt0aHJvdydzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZDogeW91IGNhbiBwcmVsb2FkIGl0IHRvIE1vZHVsZVsid2FzbUJpbmFyeSJdIG1hbnVhbGx5LCBvciBlbWNjLnB5IHdpbGwgZG8gdGhhdCBmb3IgeW91IHdoZW4gZ2VuZXJhdGluZyBIVE1MIChidXQgbm90IEpTKSd9KGUpO2k9bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShhKTtyZXR1cm5bbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKGksdCksaV19dmFyIGNhbGxSdW50aW1lQ2FsbGJhY2tzPWU9Pntmb3IoO2UubGVuZ3RoPjA7KWUuc2hpZnQoKShhKX07YS5ub0V4aXRSdW50aW1lO3ZhciBELGdyb3dNZW1vcnk9ZT0+e3ZhciB0PShlLWMuYnVmZmVyLmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2O3RyeXtjLmdyb3codCk7dXBkYXRlTWVtb3J5Vmlld3MoKTtyZXR1cm4gMX1jYXRjaChlKXt9fSxTPXt9LGdldEVudlN0cmluZ3M9KCk9PntpZighZ2V0RW52U3RyaW5ncy5zdHJpbmdzKXt2YXIgZT17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIuVVRGLTgiLF86bnx8Ii4vdGhpcy5wcm9ncmFtIn07Zm9yKHZhciB0IGluIFMpdm9pZCAwPT09U1t0XT9kZWxldGUgZVt0XTplW3RdPVNbdF07dmFyIGk9W107Zm9yKHZhciB0IGluIGUpaS5wdXNoKGAke3R9PSR7ZVt0XX1gKTtnZXRFbnZTdHJpbmdzLnN0cmluZ3M9aX1yZXR1cm4gZ2V0RW52U3RyaW5ncy5zdHJpbmdzfSxrPVtudWxsLFtdLFtdXSxSPSJ1bmRlZmluZWQiIT10eXBlb2YgVGV4dERlY29kZXI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwLFVURjhBcnJheVRvU3RyaW5nPShlLHQsaSk9Pntmb3IodmFyIGE9dCtpLHI9dDtlW3JdJiYhKHI+PWEpOykrK3I7aWYoci10PjE2JiZlLmJ1ZmZlciYmUilyZXR1cm4gUi5kZWNvZGUoZS5zdWJhcnJheSh0LHIpKTtmb3IodmFyIHM9IiI7dDxyOyl7dmFyIG49ZVt0KytdO2lmKDEyOCZuKXt2YXIgbz02MyZlW3QrK107aWYoMTkyIT0oMjI0Jm4pKXt2YXIgZz02MyZlW3QrK107aWYoKG49MjI0PT0oMjQwJm4pPygxNSZuKTw8MTJ8bzw8NnxnOig3Jm4pPDwxOHxvPDwxMnxnPDw2fDYzJmVbdCsrXSk8NjU1MzYpcys9U3RyaW5nLmZyb21DaGFyQ29kZShuKTtlbHNle3ZhciBjPW4tNjU1MzY7cys9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxjPj4xMCw1NjMyMHwxMDIzJmMpfX1lbHNlIHMrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMxJm4pPDw2fG8pfWVsc2Ugcys9U3RyaW5nLmZyb21DaGFyQ29kZShuKX1yZXR1cm4gc30scHJpbnRDaGFyPShlLHQpPT57dmFyIGk9a1tlXTtpZigwPT09dHx8MTA9PT10KXsoMT09PWU/UTpFKShVVEY4QXJyYXlUb1N0cmluZyhpLDApKTtpLmxlbmd0aD0wfWVsc2UgaS5wdXNoKHQpfSxVVEY4VG9TdHJpbmc9KGUsdCk9PmU/VVRGOEFycmF5VG9TdHJpbmcoaCxlLHQpOiIiLE49e2M6KGUsdCxpKT0+aC5jb3B5V2l0aGluKGUsdCx0K2kpLGc6ZnVuY3Rpb24gX2NvcHlfcGl4ZWxzXzEoZSx0KXtlPj49Mjtjb25zdCBpPWEuaW1hZ2VEYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KSxyPWEuSEVBUDMyLnN1YmFycmF5KGUsZSt0KTtpLnNldChyKX0sZjpmdW5jdGlvbiBfY29weV9waXhlbHNfMyhlLHQsaSxyKXtlPj49Mjt0Pj49MjtpPj49Mjtjb25zdCBzPWEuaW1hZ2VEYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKnIpLG49YS5IRUFQMzIuc3ViYXJyYXkoZSxlK3IpLG89YS5IRUFQMzIuc3ViYXJyYXkodCx0K3IpLGc9YS5IRUFQMzIuc3ViYXJyYXkoaSxpK3IpO2ZvcihsZXQgZT0wO2U8cjtlKyspe3NbMyplXT1uW2VdO3NbMyplKzFdPW9bZV07c1szKmUrMl09Z1tlXX19LGU6ZnVuY3Rpb24gX2NvcHlfcGl4ZWxzXzQoZSx0LGkscixzKXtlPj49Mjt0Pj49MjtpPj49MjtyPj49Mjtjb25zdCBuPWEuaW1hZ2VEYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSg0KnMpLG89YS5IRUFQMzIuc3ViYXJyYXkoZSxlK3MpLGc9YS5IRUFQMzIuc3ViYXJyYXkodCx0K3MpLGM9YS5IRUFQMzIuc3ViYXJyYXkoaSxpK3MpLEM9YS5IRUFQMzIuc3ViYXJyYXkocixyK3MpO2ZvcihsZXQgZT0wO2U8cztlKyspe25bNCplXT1vW2VdO25bNCplKzFdPWdbZV07bls0KmUrMl09Y1tlXTtuWzQqZSszXT1DW2VdfX0sazplPT57dmFyIHQ9aC5sZW5ndGgsaT0yMTQ3NDgzNjQ4O2lmKChlPj4+PTApPmkpcmV0dXJuITE7Zm9yKHZhciBhLHIscz0xO3M8PTQ7cyo9Mil7dmFyIG49dCooMSsuMi9zKTtuPU1hdGgubWluKG4sZSsxMDA2NjMyOTYpO3ZhciBvPU1hdGgubWluKGksKGE9TWF0aC5tYXgoZSxuKSkrKChyPTY1NTM2KS1hJXIpJXIpO2lmKGdyb3dNZW1vcnkobykpcmV0dXJuITB9cmV0dXJuITF9LGw6KGUsdCk9Pnt2YXIgaT0wO2dldEVudlN0cmluZ3MoKS5mb3JFYWNoKCgoYSxyKT0+e3ZhciBzPXQraTtsW2UrNCpyPj4yXT1zOygoZSx0KT0+e2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKUNbdCsrXT1lLmNoYXJDb2RlQXQoaSk7Q1t0XT0wfSkoYSxzKTtpKz1hLmxlbmd0aCsxfSkpO3JldHVybiAwfSxtOihlLHQpPT57dmFyIGk9Z2V0RW52U3RyaW5ncygpO2xbZT4+Ml09aS5sZW5ndGg7dmFyIGE9MDtpLmZvckVhY2goKGU9PmErPWUubGVuZ3RoKzEpKTtsW3Q+PjJdPWE7cmV0dXJuIDB9LG46ZT0+NTIsajpmdW5jdGlvbiBfZmRfc2VlayhlLHQsaSxhLHIpe3JldHVybiA3MH0sYjooZSx0LGksYSk9Pntmb3IodmFyIHI9MCxzPTA7czxpO3MrKyl7dmFyIG49bFt0Pj4yXSxvPWxbdCs0Pj4yXTt0Kz04O2Zvcih2YXIgZz0wO2c8bztnKyspcHJpbnRDaGFyKGUsaFtuK2ddKTtyKz1vfWxbYT4+Ml09cjtyZXR1cm4gMH0sbzpmdW5jdGlvbiBfZ3JheV90b19yZ2JhKGUsdCl7ZT4+PTI7Y29uc3QgaT1hLmltYWdlRGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkoNCp0KSxyPWEuSEVBUDMyLnN1YmFycmF5KGUsZSt0KTtmb3IobGV0IGU9MDtlPHQ7ZSsrKXtpWzQqZV09aVs0KmUrMV09aVs0KmUrMl09cltlXTtpWzQqZSszXT0yNTV9fSxpOmZ1bmN0aW9uIF9ncmF5YV90b19yZ2JhKGUsdCxpKXtlPj49Mjt0Pj49Mjtjb25zdCByPWEuaW1hZ2VEYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSg0KmkpLHM9YS5IRUFQMzIuc3ViYXJyYXkoZSxlK2kpLG49YS5IRUFQMzIuc3ViYXJyYXkodCx0K2kpO2ZvcihsZXQgZT0wO2U8aTtlKyspe3JbNCplXT1yWzQqZSsxXT1yWzQqZSsyXT1zW2VdO3JbNCplKzNdPW5bZV19fSxkOmZ1bmN0aW9uIF9qc1ByaW50V2FybmluZyhlKXtjb25zdCB0PVVURjhUb1N0cmluZyhlKTsoYS53YXJufHxjb25zb2xlLndhcm4pKGBPcGVuSlBFRzogJHt0fWApfSxoOmZ1bmN0aW9uIF9yZ2JfdG9fcmdiYShlLHQsaSxyKXtlPj49Mjt0Pj49MjtpPj49Mjtjb25zdCBzPWEuaW1hZ2VEYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSg0KnIpLG49YS5IRUFQMzIuc3ViYXJyYXkoZSxlK3IpLG89YS5IRUFQMzIuc3ViYXJyYXkodCx0K3IpLGc9YS5IRUFQMzIuc3ViYXJyYXkoaSxpK3IpO2ZvcihsZXQgZT0wO2U8cjtlKyspe3NbNCplXT1uW2VdO3NbNCplKzFdPW9bZV07c1s0KmUrMl09Z1tlXTtzWzQqZSszXT0yNTV9fSxhOmZ1bmN0aW9uIF9zdG9yZUVycm9yTWVzc2FnZShlKXtjb25zdCB0PVVURjhUb1N0cmluZyhlKTthLmVycm9yTWVzc2FnZXM/YS5lcnJvck1lc3NhZ2VzKz0iXG4iK3Q6YS5lcnJvck1lc3NhZ2VzPXR9fSxHPWZ1bmN0aW9uIGNyZWF0ZVdhc20oKXt2YXIgZT1mdW5jdGlvbiBnZXRXYXNtSW1wb3J0cygpe3JldHVybnthOk59fSgpO2Z1bmN0aW9uIHJlY2VpdmVJbnN0YW5jZShlLHQpe0c9ZS5leHBvcnRzO2M9Ry5wO3VwZGF0ZU1lbW9yeVZpZXdzKCk7IWZ1bmN0aW9uIGFkZE9uSW5pdChlKXtmLnVuc2hpZnQoZSl9KEcucSk7IWZ1bmN0aW9uIHJlbW92ZVJ1bkRlcGVuZGVuY3koZSl7bS0tO2EubW9uaXRvclJ1bkRlcGVuZGVuY2llcz8uKG0pO2lmKDA9PW0pe2lmKG51bGwhPT15KXtjbGVhckludGVydmFsKHkpO3k9bnVsbH1pZih3KXt2YXIgdD13O3c9bnVsbDt0KCl9fX0oKTtyZXR1cm4gR30hZnVuY3Rpb24gYWRkUnVuRGVwZW5kZW5jeShlKXttKys7YS5tb25pdG9yUnVuRGVwZW5kZW5jaWVzPy4obSl9KCk7aWYoYS5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBhLmluc3RhbnRpYXRlV2FzbShlLHJlY2VpdmVJbnN0YW5jZSl9Y2F0Y2goZSl7RShgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtlfWApO2koZSl9dXx8KHU9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxBR0Z6YlFFQUFBQUJ6Z0VhWUFOL2YzOEJmMkFFZjM5L2Z3Ri9ZQUYvQUdBQ2YzOEFZQUYvQVg5Z0EzOS9md0JnQW45L0FYOWdCSDkvZjM4QVlBTi9mbjhCZm1BRmYzOS9mMzhCZjJBQ2ZuOEJmMkFDZm44QmZtQUZmMzkvZjM4QVlBTi9mbjhCZjJBQUFYOWdCMzkvZjM5L2YzOEJmMkFKZjM5L2YzOS9mMzkvQVg5Z0MzOS9mMzkvZjM5L2YzOS9BWDlnQm45L2YzOS9md0YvWUFaL2ZIOS9mMzhCZjJBSWYzOS9mMzkvZjM4QVlBaC9mMzkvZjM5L2Z3Ri9ZQUFBWUFaL2YzOS9mMzhBWUFkL2YzOS9mMzkvQUdBQ2ZIOEJmQUpiRHdGaEFXRUFBZ0ZoQVdJQUFRRmhBV01BQlFGaEFXUUFBZ0ZoQVdVQURBRmhBV1lBQndGaEFXY0FBd0ZoQVdnQUJ3RmhBV2tBQlFGaEFXb0FDUUZoQVdzQUJBRmhBV3dBQmdGaEFXMEFCZ0ZoQVc0QUJBRmhBVzhBQXdQQUFiNEJCd0lGQUFZRUFBVUdCQVVCQkF3RkZBWUNBZ0lDQUFZUUVRUUNDaElDQlFJRUJ3UUNEZ0lDRFFZQ0ZRTUhBQUFFQXdFV0NRa0RBQWtHQVFRRUJRVU9Ed0VCQXdBREJnSVFCQmNZQWdjR0F3Y0hBUUVDQUFRWkJBWUhCQThNQUFRQ0FnSUFCZ0FHQVFFQkFRRUJBUUVBQUFBQUFBWURBZ0lDQXdNREF3TUFBeE1JQkE0RUFBZ0RBd2tFQ0FvTENBQUFBUUVCQVFFQkFRRU5BUUFFQkFVSkR3RVNFUUVBQUFZREF3RUZCUVVGQlFVRkJRRUxBUUVCQVFFQkFRRUJDZ1FGQVhBQmJtNEZCd0VCZ2dLQWdBSUdDQUYvQVVHUTJRVUxCeHNHQVhBQ0FBRnhBRUVCY2dDWUFRRnpBQkFCZEFFQUFYVUFsd0VKdlFFQkFFRUJDMjFSekFIQ0FYTnpOcWNCbkFHWkFZc0JpZ0dKQVlnQmh3R0dBWVVCaEFGU2dRR0FBWDkrZlh4N2VubDRkM1oxeXdIS0Fja0J5QUhIQWNZQlFNVUJ4QUZBUU1NQndRSEFBYjhCdmdHOUFid0J1d0c2QWJrQnN3R29BYVlCcFFHa0FhTUJvZ0doQWFBQm53R2VBWjBCbXdHYUFVbEtURkpJZ3dGVE9GQ0NBVTlGUms0cko2c0JxZ0dzQWJRQnVBRzFBYThCcVFHdEFhNEJ0Z0czQVhDd0FiRUJzZ0ZSbGdHVkFZd0JqZ0dOQVpJQmt3R1VBWkFCandFS2tab092Z0dDQWdFRGZ5TUFRWkFFYXlJRUpBQUNRQ0FBUlEwQUFrQUNRQUpBQWtBZ0FVRUJhdzRFQUFFRUFnUUxJQUJCREdvaEFRd0NDeUFBUVJCcUlRRWdBRUVFYWlFQURBRUxJQUJCRkdvaEFTQUFRUWhxSVFBTElBRW9BZ0FpQlVVTkFDQUNSUTBBSUFBb0FnQWhCaUFFUVFCQmdBUVFGU0lCSUFNMkFvd0VJd0JCb0FGcklnQWtBQ0FBSUFFMkFwUUJJQUJCL3dNMkFwZ0JJQUJCQUVHUUFSQVZJZ0JCZnpZQ1RDQUFRZVlBTmdJa0lBQkJmellDVUNBQUlBQkJud0ZxTmdJc0lBQWdBRUdVQVdvMkFsUWdBVUVBT2dBQUlBQWdBaUFEUWVjQVFlZ0FFR3NnQUVHZ0FXb2tBQ0FCUVFBNkFQOERJQUVnQmlBRkVRTUFDeUFFUVpBRWFpUUFDOUFDQVFWL0lBQUVRQ0FBUVFScklnTW9BZ0FpQkNFQklBTWhBaUFBUVFocktBSUFJZ0FnQUVGK2NTSUFSd1JBSUFJZ0FHc2lBaWdDQkNJQklBSW9BZ2dpQlRZQ0NDQUZJQUUyQWdRZ0FDQUVhaUVCQ3lBRElBUnFJZ0FvQWdBaUF5QUFJQU5xUVFScktBSUFSd1JBSUFBb0FnUWlCQ0FBS0FJSUlnQTJBZ2dnQUNBRU5nSUVJQUVnQTJvaEFRc2dBaUFCTmdJQUlBSWdBVUY4Y1dwQkJHc2dBVUVCY2pZQ0FDQUNBbjhnQWlnQ0FFRUlheUlBUWY4QVRRUkFJQUJCQTNaQkFXc01BUXNnQUdjaEF5QUFRUjBnQTJ0MlFRUnpJQU5CQW5SclFlNEFhaUFBUWY4ZlRRMEFHa0UvSUFCQkhpQURhM1pCQW5NZ0EwRUJkR3RCeHdCcUlnQWdBRUUvVHhzTElnRkJCSFFpQUVHZ3h3RnFOZ0lFSUFJZ0FFR294d0ZxSWdBb0FnQTJBZ2dnQUNBQ05nSUFJQUlvQWdnZ0FqWUNCRUdvendGQnFNOEJLUU1BUWdFZ0FhMkdoRGNEQUFzTHlRSUJCSDhnQVVFQU5nSUFBa0FnQWtVTkFDQUJJQUpxSVFNQ1FDQUNRUkJKQkVBZ0FDRUJEQUVMQWtBZ0FDQUNhaUFCVFEwQUlBQWdBMDhOQUNBQUlRRU1BUXNnQTBFUWF5RUdJQUFnQWtGd2NTSUZhaUVCSUFNZ0JXc2hBd05BSUFZZ0JHc2dBQ0FFYXYwQUFBRDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlEUThPRFF3TENna0lCd1lGQkFNQ0FRRDlDd0FBSUFSQkVHb2lCQ0FGUncwQUN5QUNJQVZHRFFFTEFrQWdBa0VEY1NJR1JRUkFJQVVoQkF3QkMwRUFJUUFnQlNFRUEwQWdBMEVCYXlJRElBRXRBQUE2QUFBZ0JFRUJhaUVFSUFGQkFXb2hBU0FBUVFGcUlnQWdCa2NOQUFzTElBVWdBbXRCZkVzTkFBTkFJQU5CQVdzZ0FTMEFBRG9BQUNBRFFRSnJJQUV0QUFFNkFBQWdBMEVEYXlBQkxRQUNPZ0FBSUFOQkJHc2lBeUFCTFFBRE9nQUFJQUZCQkdvaEFTQUVRUVJxSWdRZ0FrY05BQXNMQzRBRUFRTi9JQUpCZ0FSUEJFQWdBQ0FCSUFJUUFpQUFEd3NnQUNBQ2FpRURBa0FnQUNBQmMwRURjVVVFUUFKQUlBQkJBM0ZGQkVBZ0FDRUNEQUVMSUFKRkJFQWdBQ0VDREFFTElBQWhBZ05BSUFJZ0FTMEFBRG9BQUNBQlFRRnFJUUVnQWtFQmFpSUNRUU54UlEwQklBSWdBMGtOQUFzTEFrQWdBMEY4Y1NJRVFjQUFTUTBBSUFJZ0JFRkFhaUlGU3cwQUEwQWdBaUFCS0FJQU5nSUFJQUlnQVNnQ0JEWUNCQ0FDSUFFb0FnZzJBZ2dnQWlBQktBSU1OZ0lNSUFJZ0FTZ0NFRFlDRUNBQ0lBRW9BaFEyQWhRZ0FpQUJLQUlZTmdJWUlBSWdBU2dDSERZQ0hDQUNJQUVvQWlBMkFpQWdBaUFCS0FJa05nSWtJQUlnQVNnQ0tEWUNLQ0FDSUFFb0FpdzJBaXdnQWlBQktBSXdOZ0l3SUFJZ0FTZ0NORFlDTkNBQ0lBRW9BamcyQWpnZ0FpQUJLQUk4TmdJOElBRkJRR3NoQVNBQ1FVQnJJZ0lnQlUwTkFBc0xJQUlnQkU4TkFRTkFJQUlnQVNnQ0FEWUNBQ0FCUVFScUlRRWdBa0VFYWlJQ0lBUkpEUUFMREFFTElBTkJCRWtFUUNBQUlRSU1BUXNnQUNBRFFRUnJJZ1JMQkVBZ0FDRUNEQUVMSUFBaEFnTkFJQUlnQVMwQUFEb0FBQ0FDSUFFdEFBRTZBQUVnQWlBQkxRQUNPZ0FDSUFJZ0FTMEFBem9BQXlBQlFRUnFJUUVnQWtFRWFpSUNJQVJORFFBTEN5QUNJQU5KQkVBRFFDQUNJQUV0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29pQWlBRFJ3MEFDd3NnQUFzd0FRRi9Ba0FnQUVVTkFDQUJSUTBBUVFnZ0FDQUJiQ0lCRUNVaUFBUkFJQUJCQUNBQkVCVWFDeUFBSVFJTElBSUxFUUFnQUVVRVFFRUFEd3RCQ0NBQUVDVUw4Z0lDQW44QmZnSkFJQUpGRFFBZ0FDQUJPZ0FBSUFBZ0Ftb2lBMEVCYXlBQk9nQUFJQUpCQTBrTkFDQUFJQUU2QUFJZ0FDQUJPZ0FCSUFOQkEyc2dBVG9BQUNBRFFRSnJJQUU2QUFBZ0FrRUhTUTBBSUFBZ0FUb0FBeUFEUVFScklBRTZBQUFnQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCQkdzZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FRaHJJQUUyQWdBZ0FrRU1heUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRVFheUFCTmdJQUlBSkJGR3NnQVRZQ0FDQUNRUmhySUFFMkFnQWdBa0VjYXlBQk5nSUFJQVFnQTBFRWNVRVljaUlFYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFVZ0F5QUVhaUVCQTBBZ0FTQUZOd01ZSUFFZ0JUY0RFQ0FCSUFVM0F3Z2dBU0FGTndNQUlBRkJJR29oQVNBQ1FTQnJJZ0pCSDBzTkFBc0xJQUFMSndFQmZ5TUFRUkJySWdNa0FDQURJQUkyQWd3Z0FDQUJJQUpCQUVFQUVHc2dBMEVRYWlRQUMrZ0ZBUWwvSUFGRkJFQkJBQThMQW44Z0FFVUVRRUVJSUFFUUpRd0JDeUFCUlFSQUlBQVFFRUVBREFFTEFrQWdBVUZIU3cwQUlBQUNmMEVJSUFGQkEycEJmSEVnQVVFSVRSc2lCMEVJYWlFQkFrQUNmd0pBSUFCQkJHc2lDaUlFS0FJQUlnVWdCR29pQWlnQ0FDSUpJQUlnQ1dvaUNFRUVheWdDQUVjRVFDQUlJQUVnQkdvaUEwRVFhazhFUUNBQ0tBSUVJZ1VnQWlnQ0NDSUNOZ0lJSUFJZ0JUWUNCQ0FESUFnZ0Eyc2lBallDQUNBRElBSkJmSEZxUVFScklBSkJBWEkyQWdBZ0F3Si9JQU1vQWdCQkNHc2lBa0gvQUUwRVFDQUNRUU4yUVFGckRBRUxJQUpCSFNBQ1p5SUZhM1pCQkhNZ0JVRUNkR3RCN2dCcUlBSkIveDlORFFBYVFUOGdBa0VlSUFWcmRrRUNjeUFGUVFGMGEwSEhBR29pQWlBQ1FUOVBHd3NpQWtFRWRDSUZRYURIQVdvMkFnUWdBeUFGUWFqSEFXb2lCU2dDQURZQ0NDQUZJQU0yQWdBZ0F5Z0NDQ0FETmdJRVFhalBBVUdvendFcEF3QkNBU0FDcllhRU53TUFJQVFnQVRZQ0FBd0VDeUFESUFoTERRRWdBaWdDQkNJQklBSW9BZ2dpQXpZQ0NDQURJQUUyQWdRZ0JDQUZJQWxxSWdFMkFnQU1Bd3NnQlNBQlFSQnFUd1JBSUFRZ0FUWUNBQ0FFSUFGQmZIRnFRUVJySUFFMkFnQWdBU0FFYWlJRElBVWdBV3NpQVRZQ0FDQURJQUZCZkhGcVFRUnJJQUZCQVhJMkFnQWdBd0ovSUFNb0FnQkJDR3NpQVVIL0FFMEVRQ0FCUVFOMlFRRnJEQUVMSUFGQkhTQUJaeUlFYTNaQkJITWdCRUVDZEd0QjdnQnFJQUZCL3g5TkRRQWFRVDhnQVVFZUlBUnJka0VDY3lBRVFRRjBhMEhIQUdvaUFTQUJRVDlQR3dzaUFVRUVkQ0lFUWFESEFXbzJBZ1FnQXlBRVFhakhBV29pQkNnQ0FEWUNDQ0FFSUFNMkFnQWdBeWdDQ0NBRE5nSUVRYWpQQVVHb3p3RXBBd0JDQVNBQnJZYUVOd01BUVFFTUJBdEJBU0FCSUFWTkRRRWFDMEVBQ3d3QkN5QUVJQUZCZkhGcVFRUnJJQUUyQWdCQkFRc05BUnBCQ0NBSEVDVWlBVVVOQUNBQklBQWdCeUFLS0FJQVFRaHJJZ1lnQmlBSFN4c1FFaG9nQUJBUUlBRWhCZ3NnQmdzTE53RUNmeU1BUVJCcklnRWtBQ0FBQkg4Z0FVRU1ha0VRSUFBUWJDRUFRUUFnQVNnQ0RDQUFHd1ZCQUFzaEFpQUJRUkJxSkFBZ0Fnc1hBQ0FBTFFBQVFTQnhSUVJBSUFFZ0FpQUFFRDBhQ3d1OEJBRUZmeUFDSUFBb0FqQWlCVTBFUUNBQklBQW9BaVFnQWhBU0dpQUFJQUFvQWlRZ0FtbzJBaVFnQUNBQUtBSXdJQUpyTmdJd0lBQWdBQ2tET0NBQ3JYdzNBemdnQWc4TElBQXRBRVJCQkhFRVFDQUJJQUFvQWlRZ0JSQVNHaUFBS0FJd0lRRWdBRUVBTmdJd0lBQWdBU0FBS0FJa2FqWUNKQ0FBSUFBcEF6Z2dBYTE4TndNNElBVkJmeUFGR3c4TEFrQWdCUVJBSUFFZ0FDZ0NKQ0FGRUJJaEJDQUFJQUFvQWlBaUJ6WUNKQ0FBS0FJd0lRRWdBRUVBTmdJd0lBQWdBQ2tET0NBQnJYdzNBemdnQWlBQmF5RUNJQUVnQkdvaEFRd0JDeUFBSUFBb0FpQWlCellDSkFzQ1FBSkFBMEFDUUNBQUtBSUFJUVFnQUNnQ0VDRUdBa0FnQUNnQ1FDSUlJQUpMQkVBZ0FDQUhJQWdnQkNBR0VRQUFJZ1kyQWpBZ0JrRi9SZ1JBREFZTElBSWdCazBOQWlBQklBQW9BaVFnQmhBU0dpQUFJQUFvQWlBaUJ6WUNKQ0FBS0FJd0lRUU1BUXNnQUNBQklBSWdCQ0FHRVFBQUlnUTJBakFnQkVGL1JnUkFEQVVMSUFJZ0JFME5BeUFBSUFBb0FpQWlCellDSkNBRUlRWUxJQUJCQURZQ01DQUFJQUFwQXpnZ0JLMThOd000SUFFZ0JHb2hBU0FDSUFScklRSWdCU0FHYWlFRkRBRUxDeUFCSUFBb0FpUWdBaEFTR2lBQUlBQW9BaVFnQW1vMkFpUWdBQ0FBS0FJd0lBSnJOZ0l3SUFBZ0FDa0RPQ0FDclh3M0F6Z2dBaUFGYWc4TElBQkJBRFlDTUNBQUlBQW9BaUEyQWlRZ0FDQUFLUU00SUFTdGZEY0RPQ0FFSUFWcUR3c2dBMEVFUVp2MUFFRUFFQThnQUVFQU5nSXdJQUFnQUNnQ1JFRUVjallDUkNBRlFYOGdCUnNMaXdjQ0RYOEJmaUFBS0FJUUlnZEJJRThFUUNBQUtRTUlwdzhMQWtBZ0FDZ0NHQ0lDUVFST0JFQWdBQ2dDQUNJQktBSUFJUVFnQUNBQ1FRUnJJZ1UyQWhnZ0FDQUJRUVJxTmdJQURBRUxRWDlCQUNBQUtBSWNHeUVFSUFKQkFFd0VRQ0FDSVFVTUFRc2dBa0VCY1NFTUlBQW9BZ0FoQVFKQUlBSkJBVVlFUUNBQklRWU1BUXNnQWtIKy8vLy9CM0VoQ2dOQUlBQWdBVUVCYWpZQ0FDQUJMUUFBSVFrZ0FDQUJRUUpxSWdZMkFnQWdBQ0FDUVFGck5nSVlJQUV0QUFFaEFTQUFJQUpCQW1zaUFqWUNHQ0FFUWY4QklBTjBRWDl6Y1NBSklBTjBja0dBL2dNZ0EzUkJmM054SUFFZ0EwRUljblJ5SVFRZ0EwRVFhaUVESUFZaEFTQUZRUUpxSWdVZ0NrY05BQXNMUVFBaEJTQU1SUTBBSUFBZ0JrRUJhallDQUNBR0xRQUFJUUVnQUNBQ1FRRnJOZ0lZSUFSQi93RWdBM1JCZjNOeElBRWdBM1J5SVFRTElBQW9BaFFoQVNBQUlBUkJHSFlpQ2tIL0FVWTJBaFFnQUVFSFFRZ2dBUnNpQVVFSFFRZ2dCRUgvQVhFaUJrSC9BVVliYWlJQ1FRZEJDQ0FFUVFoMlFmOEJjU0lEUWY4QlJodHFJZ2xCQjBFSUlBUkJFSFpCL3dGeElnUkIvd0ZHR3lBSGFtb2lDRFlDRUNBQUlBQXBBd2dnQXlBQmRDQUVJQUowY2lBS0lBbDBjaUFHY3EwZ0I2MkdoQ0lPTndNSUlBaEJIMDBFUUFKQUlBVkJCRTRFUUNBQUtBSUFJZ0VvQWdBaEFpQUFJQVZCQkdzMkFoZ2dBQ0FCUVFScU5nSUFEQUVMUVFBaEEwRi9RUUFnQUNnQ0hCc2hBaUFGUVFCTURRQWdCVUVCY1NFTklBQW9BZ0FoQVFKQUlBVkJBVVlFUUNBQklRUU1BUXNnQlVIKy8vLy9CM0VoQ1VFQUlRWURRQ0FBSUFGQkFXbzJBZ0FnQVMwQUFDRUxJQUFnQVVFQ2FpSUVOZ0lBSUFBZ0JVRUJhellDR0NBQkxRQUJJUUVnQUNBRlFRSnJJZ1UyQWhnZ0FrSC9BU0FEZEVGL2MzRWdDeUFEZEhKQmdQNERJQU4wUVg5emNTQUJJQU5CQ0hKMGNpRUNJQU5CRUdvaEF5QUVJUUVnQmtFQ2FpSUdJQWxIRFFBTEN5QU5SUTBBSUFBZ0JFRUJhallDQUNBRUxRQUFJUUVnQUNBRlFRRnJOZ0lZSUFKQi93RWdBM1JCZjNOeElBRWdBM1J5SVFJTElBQWdBa0VZZGlJQlFmOEJSallDRkNBQVFRZEJDQ0FLUWY4QlJoc2lCRUVIUVFnZ0FrSC9BWEVpQmtIL0FVWWJhaUlGUVFkQkNDQUNRUWgyUWY4QmNTSURRZjhCUmh0cUlnZEJCMEVJSUFKQkVIWkIvd0Z4SWdKQi93RkdHeUFJYW1vMkFoQWdBQ0FESUFSMElBSWdCWFJ5SUFFZ0IzUnlJQVp5clNBSXJZWWdEb1FpRGpjRENBc2dEcWNMYXdFQmZ5TUFRWUFDYXlJRkpBQUNRQ0FDSUFOTURRQWdCRUdBd0FSeERRQWdCU0FCSUFJZ0Eyc2lBMEdBQWlBRFFZQUNTU0lCR3hBVkdpQUJSUVJBQTBBZ0FDQUZRWUFDRUJrZ0EwR0FBbXNpQTBIL0FVc05BQXNMSUFBZ0JTQURFQmtMSUFWQmdBSnFKQUFMTVFBZ0FRSi9JQUlvQWt4QkFFZ0VRQ0FBSUFFZ0FoQTlEQUVMSUFBZ0FTQUNFRDBMSWdCR0JFQVBDeUFBSUFGdUdnc1hBQ0FBSUFFZ0FpQURJQVFnQlNBR0lBZEJBUkFtR2d1aEFRRUVmeUFCUVFCTUJFQkJBQThMSUFBb0Fnd2hBaUFBS0FJUUlRTURRQ0FCSVFVQ1FDQUREUUFnQUNBQ1FRaDBRWUQrQTNFaUFqWUNEQ0FBUVFkQkNDQUNRWUQrQTBZYklnTTJBaEFnQUNnQ0NDSUJJQUFvQWdSUERRQWdBQ0FCUVFGcU5nSUlJQUFnQWlBQkxRQUFjaUlDTmdJTUN5QUFJQU5CQVdzaUF6WUNFQ0FDSUFOMlFRRnhJQVZCQVdzaUFYUWdCSEloQkNBRlFRRkxEUUFMSUFRTEhnQWdBQ2dDREFSQUlBQkJBRFlDS0FOQUlBQW9BaGhCQUVvTkFBc0xDMm9CQTM4Z0FBUkFJQUFvQWhnaUFRUkFJQUFvQWhBaUFnUi9RUUFoQVFOQUlBQW9BaGdnQVVFMGJHb29BaXdpQXdSQUlBTVFFQ0FBS0FJUUlRSUxJQUZCQVdvaUFTQUNTUTBBQ3lBQUtBSVlCU0FCQ3hBUUN5QUFLQUljSWdFRVFDQUJFQkFMSUFBUUVBc0xraFVCRDM4Q1FBSkFJQUFvQWd4RkJFQkJBU0VQSUFBb0FnUkJBRW9OQVNBQUtBSUlRUUZLRFFFTUFndEJBU0VOSUFBb0FnaEJBRW9OQUNBQUtBSUVRUUpJRFFFTElBQW9BZ0FpQ0NBTlFRVjBhaUVFQWtBZ0FDZ0NFQ0lISUFBb0FoUWlDazhOQUNBRUlBZEJCblJxSVFFQ1FDQUtJQWRyUVFOeElnWkZCRUFnQnlFQ0RBRUxJQWNoQWdOQUlBRWdBZjBBQkFEOURGaDJuVDlZZHAwL1dIYWRQMWgyblQvOTVnSDlDd1FBSUFFZ0FmMEFCQkQ5REZoMm5UOVlkcDAvV0hhZFAxaDJuVC85NWdIOUN3UVFJQUZCUUdzaEFTQUNRUUZxSVFJZ0EwRUJhaUlESUFaSERRQUxDeUFISUFwclFYeExEUUFEUUNBQklBSDlBQVFBL1F4WWRwMC9XSGFkUDFoMm5UOVlkcDAvL2VZQi9Rc0VBQ0FCSUFIOUFBUVEvUXhZZHAwL1dIYWRQMWgyblQ5WWRwMC8vZVlCL1FzRUVDQUJJQUg5QUFSQS9ReFlkcDAvV0hhZFAxaDJuVDlZZHAwLy9lWUIvUXNFUUNBQklBSDlBQVJRL1F4WWRwMC9XSGFkUDFoMm5UOVlkcDAvL2VZQi9Rc0VVQ0FCSUFIOUFBU0FBZjBNV0hhZFAxaDJuVDlZZHAwL1dIYWRQLzNtQWYwTEJJQUJJQUVnQWYwQUJKQUIvUXhZZHAwL1dIYWRQMWgyblQ5WWRwMC8vZVlCL1FzRWtBRWdBU0FCL1FBRXdBSDlERmgyblQ5WWRwMC9XSGFkUDFoMm5ULzk1Z0g5Q3dUQUFTQUJJQUg5QUFUUUFmME1XSGFkUDFoMm5UOVlkcDAvV0hhZFAvM21BZjBMQk5BQklBRkJnQUpxSVFFZ0FrRUVhaUlDSUFwSERRQUxDeUFJSUE5QkJYUnFJUVVDUUNBQUtBSVlJZ1lnQUNnQ0hDSUxUdzBBSUFVZ0JrRUdkR29oQVFKQUlBc2dCbXRCQTNFaUNFVUVRQ0FHSVFJTUFRdEJBQ0VESUFZaEFnTkFJQUVnQWYwQUJBRDlEQUFZMEQ4QUdOQS9BQmpRUHdBWTBELzk1Z0g5Q3dRQUlBRWdBZjBBQkJEOURBQVkwRDhBR05BL0FCalFQd0FZMEQvOTVnSDlDd1FRSUFGQlFHc2hBU0FDUVFGcUlRSWdBMEVCYWlJRElBaEhEUUFMQ3lBR0lBdHJRWHhMRFFBRFFDQUJJQUg5QUFRQS9Rd0FHTkEvQUJqUVB3QVkwRDhBR05BLy9lWUIvUXNFQUNBQklBSDlBQVFRL1F3QUdOQS9BQmpRUHdBWTBEOEFHTkEvL2VZQi9Rc0VFQ0FCSUFIOUFBUkEvUXdBR05BL0FCalFQd0FZMEQ4QUdOQS8vZVlCL1FzRVFDQUJJQUg5QUFSUS9Rd0FHTkEvQUJqUVB3QVkwRDhBR05BLy9lWUIvUXNFVUNBQklBSDlBQVNBQWYwTUFCalFQd0FZMEQ4QUdOQS9BQmpRUC8zbUFmMExCSUFCSUFFZ0FmMEFCSkFCL1F3QUdOQS9BQmpRUHdBWTBEOEFHTkEvL2VZQi9Rc0VrQUVnQVNBQi9RQUV3QUg5REFBWTBEOEFHTkEvQUJqUVB3QVkwRC85NWdIOUN3VEFBU0FCSUFIOUFBVFFBZjBNQUJqUVB3QVkwRDhBR05BL0FCalFQLzNtQWYwTEJOQUJJQUZCZ0FKcUlRRWdBa0VFYWlJQ0lBdEhEUUFMQ3lBS0lBQW9BZ2dpQ1NBQUtBSUVJZzRnRFdzaUFDQUFJQWxLR3lJSUlBZ2dDa3NiSVF3Z0JFRWdhaUVCQW44Z0IwVUVRQ0FNUlFSQVFRQWhBeUFCREFJTElBUWdCUDBBQkFBZ0JmMEFCQUFnQlAwQUJDRDk1QUg5REZVVDR6NVZFK00rVlJQalBsVVQ0ejc5NWdIOTVRSDlDd1FBSUFRZ0JQMEFCQkFnQmYwQUJCQWdCUDBBQkREOTVBSDlERlVUNHo1VkUrTStWUlBqUGxVVDR6Nzk1Z0g5NVFIOUN3UVFRUUVoQXlBRVFlQUFhZ3dCQ3lBQklBY2lBMEVHZEdvTElRSWdBeUFNU1FSQUEwQWdBa0VnYXlJQUlBRDlBQVFBSUFKQlFHcjlBQVFBSUFMOUFBUUEvZVFCL1F4VkUrTStWUlBqUGxVVDR6NVZFK00rL2VZQi9lVUIvUXNFQUNBQ1FSQnJJZ0FnQVAwQUJBQWdBa0V3YS8wQUJBQWdBdjBBQkJEOTVBSDlERlVUNHo1VkUrTStWUlBqUGxVVDR6Nzk1Z0g5NVFIOUN3UUFJQUpCUUdzaEFpQURRUUZxSWdNZ0RFY05BQXNMSUFnZ0NrOGlEVVVFUUNBQ1FTQnJJZ0FnQVAwQUJBQWdBa0ZBYXYwQUJBRDlERlVUWXo5VkUyTS9WUk5qUDFVVFl6Lzk1Z0g5NVFIOUN3UUFJQUpCRUdzaUFDQUEvUUFFQUNBQ1FUQnIvUUFFQVAwTVZSTmpQMVVUWXo5VkUyTS9WUk5qUC8zbUFmM2xBZjBMQkFBTElBc2dEaUFKSUE5cklnQWdBQ0FPU2hzaURpQUxJQTVKR3lFSklBVkJJR29oQWlBSkFuOGdCa1VFUUNBSlJRUkFJQUloQTBFQURBSUxJQVVnQmYwQUJBQWdCUDBBQkFBZ0JmMEFCQ0Q5NUFIOURIWUdZajkyQm1JL2RnWmlQM1lHWWovOTVnSDk1UUg5Q3dRQUlBVWdCZjBBQkJBZ0JQMEFCQkFnQmYwQUJERDk1QUg5REhZR1lqOTJCbUkvZGdaaVAzWUdZai85NWdIOTVRSDlDd1FRSUFWQjRBQnFJUU5CQVF3QkN5QUNJQVpCQm5ScUlRTWdCZ3NpQUVzRVFBTkFJQU5CSUdzaUNDQUkvUUFFQUNBRFFVQnEvUUFFQUNBRC9RQUVBUDNrQWYwTWRnWmlQM1lHWWo5MkJtSS9kZ1ppUC8zbUFmM2xBZjBMQkFBZ0EwRVFheUlJSUFqOUFBUUFJQU5CTUd2OUFBUUFJQVA5QUFRUS9lUUIvUXgyQm1JL2RnWmlQM1lHWWo5MkJtSS8vZVlCL2VVQi9Rc0VBQ0FEUVVCcklRTWdBRUVCYWlJQUlBbEhEUUFMQ3lBTElBNU5JZ2hGQkVBZ0EwRWdheUlBSUFEOUFBUUFJQU5CUUdyOUFBUUEvUXgyQnVJL2RnYmlQM1lHNGo5MkJ1SS8vZVlCL2VVQi9Rc0VBQ0FEUVJCcklnQWdBUDBBQkFBZ0EwRXdhLzBBQkFEOURIWUc0ajkyQnVJL2RnYmlQM1lHNGovOTVnSDk1UUg5Q3dRQUN3SkFJQWRGQkVBZ0RFVUVRRUVBSVFjTUFnc2dCQ0FFL1FBRUFDQUYvUUFFQUNBRS9RQUVJUDNrQWYwTXJnRlpQYTRCV1QydUFWazlyZ0ZaUGYzbUFmM2tBZjBMQkFBZ0JDQUUvUUFFRUNBRi9RQUVFQ0FFL1FBRU1QM2tBZjBNcmdGWlBhNEJXVDJ1QVZrOXJnRlpQZjNtQWYza0FmMExCQkFnQkVIZ0FHb2hBVUVCSVFjTUFRc2dBU0FIUVFaMGFpRUJDeUFISUF4SkJFQURRQ0FCUVNCcklnQWdBUDBBQkFBZ0FVRkFhdjBBQkFBZ0FmMEFCQUQ5NUFIOURLNEJXVDJ1QVZrOXJnRlpQYTRCV1QzOTVnSDk1QUg5Q3dRQUlBRkJFR3NpQUNBQS9RQUVBQ0FCUVRCci9RQUVBQ0FCL1FBRUVQM2tBZjBNcmdGWlBhNEJXVDJ1QVZrOXJnRlpQZjNtQWYza0FmMExCQUFnQVVGQWF5RUJJQWRCQVdvaUJ5QU1SdzBBQ3dzZ0RVVUVRQ0FCUVNCcklnQWdBUDBBQkFBZ0FVRkFhdjBBQkFEOURLNEIyVDJ1QWRrOXJnSFpQYTRCMlQzOTVnSDk1QUg5Q3dRQUlBRkJFR3NpQUNBQS9RQUVBQ0FCUVRCci9RQUVBUDBNcmdIWlBhNEIyVDJ1QWRrOXJnSFpQZjNtQWYza0FmMExCQUFMQWtBZ0JrVUVRQ0FKUlFSQVFRQWhCZ3dDQ3lBRklBWDlBQVFBSUFUOUFBUUFJQVg5QUFRZy9lUUIvUXh6QnNzL2N3YkxQM01HeXo5ekJzcy8vZVlCL2VRQi9Rc0VBQ0FGSUFYOUFBUVFJQVQ5QUFRUUlBWDlBQVF3L2VRQi9ReHpCc3MvY3diTFAzTUd5ejl6QnNzLy9lWUIvZVFCL1FzRUVDQUZRZUFBYWlFQ1FRRWhCZ3dCQ3lBQ0lBWkJCblJxSVFJTElBWWdDVWtFUUFOQUlBSkJJR3NpQUNBQS9RQUVBQ0FDUVVCcS9RQUVBQ0FDL1FBRUFQM2tBZjBNY3diTFAzTUd5ejl6QnNzL2N3YkxQLzNtQWYza0FmMExCQUFnQWtFUWF5SUFJQUQ5QUFRQUlBSkJNR3Y5QUFRQUlBTDlBQVFRL2VRQi9ReHpCc3MvY3diTFAzTUd5ejl6QnNzLy9lWUIvZVFCL1FzRUFDQUNRVUJySVFJZ0JrRUJhaUlHSUFsSERRQUxDeUFJRFFBZ0FrRWdheUlBSUFEOUFBUUFJQUpCUUdyOUFBUUEvUXh6Qmt0QWN3WkxRSE1HUzBCekJrdEEvZVlCL2VRQi9Rc0VBQ0FDUVJCcklnQWdBUDBBQkFBZ0FrRXdhLzBBQkFEOURITUdTMEJ6Qmt0QWN3WkxRSE1HUzBEOTVnSDk1QUg5Q3dRQUN3dGRBUVIvSUFBRVFDQUFLQUlVSWdFZ0FDZ0NFQ0lDYkFSQUEwQWdBQ2dDR0NBRFFRSjBhaWdDQUNJRUJFQWdCQkFRSUFBb0FoQWhBaUFBS0FJVUlRRUxJQU5CQVdvaUF5QUJJQUpzU1EwQUN3c2dBQ2dDR0JBUUlBQVFFQXNMaFFFQkFuOENRQUpBSUFBb0FnUWlBeUFBS0FJQUlnUkhCRUFnQUNnQ0NDRUREQUVMSUFBZ0EwRUthaUlFTmdJRUlBQW9BZ2dnQkVFQ2RCQVhJZ05GRFFFZ0FDQUROZ0lJSUFBb0FnQWhCQXNnQXlBRVFRSjBhaUFCTmdJQUlBQWdCRUVCYWpZQ0FFRUJEd3NnQUNnQ0NCQVFJQUJDQURjQ0FDQUNRUUZCMGk1QkFCQVBRUUFMa3dRQ0JuOENmZ0pBQWtBRFFDQUFJQUJCQVd0eERRRWdBVUZIU3cwQklBQkJDQ0FBUVFoTElnY2JJUUJCcU04QktRTUFJZ2dDZjBFSUlBRkJBMnBCZkhFZ0FVRUlUUnNpQVVIL0FFMEVRQ0FCUVFOMlFRRnJEQUVMSUFGbklRTWdBVUVkSUFOcmRrRUVjeUFEUVFKMGEwSHVBR29nQVVIL0gwME5BQnBCUHlBQlFSNGdBMnQyUVFKeklBTkJBWFJyUWNjQWFpSURJQU5CUDA4YkN5SURyWWdpQ1VJQVVnUkFBMEFnQ1NBSmVpSUlpQ0VKQW40Z0F5QUlwMm9pQTBFRWRDSUVRYWpIQVdvb0FnQWlBaUFFUWFESEFXb2lCVWNFUUNBQ0lBQWdBUkE4SWdRTkJpQUNLQUlFSWdRZ0FpZ0NDQ0lHTmdJSUlBWWdCRFlDQkNBQ0lBVTJBZ2dnQWlBRktBSUVOZ0lFSUFVZ0FqWUNCQ0FDS0FJRUlBSTJBZ2dnQTBFQmFpRURJQWxDQVlnTUFRdEJxTThCUWFqUEFTa0RBRUorSUFPdGlZTTNBd0FnQ1VJQmhRc2lDVUlBVWcwQUMwR296d0VwQXdBaENBdEJQeUFJZWFkcklRVUNRQ0FJVUFSQVFRQWhBZ3dCQ3lBRlFRUjBJZ1JCcU1jQmFpZ0NBQ0VDSUFoQ2dJQ0FnQVJVRFFCQjR3QWhBeUFDSUFSQm9NY0JhaUlHUmcwQUEwQWdBMFVOQVNBQ0lBQWdBUkE4SWdRTkJDQURRUUZySVFNZ0FpZ0NDQ0lDSUFaSERRQUxDeUFCSUFCQk1HcEJNQ0FIRzJvUWJRMEFDeUFDUlEwQUlBSWdCVUVFZEVHZ3h3RnFJZ05HRFFBRFFDQUNJQUFnQVJBOElnUU5BaUFDS0FJSUlnSWdBMGNOQUFzTFFRQWhCQXNnQkF2YUl3SXJmd043QWtBZ0FDZ0NBQ0lKSUFOSkRRQWdBU0FEVHcwQUlBRWdDVThOQUNBQUtBSUVJZ2tnQkVrTkFDQUNJQVJQRFFBZ0FpQUpUdzBBSUFWQkhHc2hKeUFBS0FJSUlobEJBblFoRVNBSFFRSjBJUThnQmtFQ2RDRWZJQVZCQkdzaEtDQUNJQUFvQWd4dUlSNGdHU0FaSUFFZ0dXNGlLV3dnQVd0cUlTb2dCa0VJUnlFaklBSWhIUU5BSUFBb0Fnd2lDU0VLSUFJZ0hVWUVRQ0FKSUFJZ0NYQnJJUW9MSUFvZ0JDQWRheUlNSUFvZ0RFa2JJaE5CZkhFaEd5QVRRUU54SVJZZ0UwRjRjU0VySUJOQkIzRWhKQ0FUUVFGcklSb2dHU0FKUVFKMElBcEJBblJyUVFScWJDRWdJQVpCQWtZZ0UwRUJSbkVoTENBSklBcHJJQmxzSVNVZ0p5QVBJQjBnQW1zaURHd2lDV29oSmlBSklDaHFJUzBnQlNBSmFpRXVJQVVnQnlBTWJFRUNkR29oSENBcElTRWdBU0VZQTBBZ0tpQVpJQUVnR0VZYklnd2dBeUFZYXlJSklBa2dERXNiSVJBZ0dTQU1heUVKSUNGQkFuUWlEU0FBS0FJWUlBQW9BaEFnSG14QkFuUnFhaWdDQUNFU0FrQUNRQ0FJQkVBQ1FBSkFBa0FDUUFKQUlCSUVRQ0FTSUNWQkFuUnFJQWxCQW5ScUlRb2dHQ0FCYXlFTklBWkJBVVlOQkNBY0lBWWdEV3hCQW5ScUlRc2dFRUVCUmcwRElDd05BaUFqRFFFZ0VFRUhUUTBCSUJORkRRZ2dKaUFOSUI5c2FpQVFRUVYwYWlFVklCSWdJQ0FRUVFKMGFpQU1RUUowYTJvaElpQVFRWHh4SVExQkFDRVNEQVVMSUFaQkFVY0VRQ0FUUlEwSUlCQkJmSEVoRFNBUVFRTnhJUXdnSENBWUlBRnJJQVpzUVFKMGFpRUxRUUFoRWlBUVFRRnJRUU5KSVJRRFFBSkFJQkJGRFFCQkFDRUpRUUFoQ2tFQUlRNGdGRVVFUUFOQUlBc2dCaUFLYkVFQ2RHcEJBRFlDQUNBTElBcEJBWElnQm14QkFuUnFRUUEyQWdBZ0N5QUtRUUp5SUFac1FRSjBha0VBTmdJQUlBc2dDa0VEY2lBR2JFRUNkR3BCQURZQ0FDQUtRUVJxSVFvZ0RrRUVhaUlPSUExSERRQUxDeUFNUlEwQUEwQWdDeUFHSUFwc1FRSjBha0VBTmdJQUlBcEJBV29oQ2lBSlFRRnFJZ2tnREVjTkFBc0xJQXNnRDJvaEN5QVRJQkpCQVdvaUVrY05BQXNNQ0FzZ0UwVU5CeUFRUVFKMElRd2dIQ0FZSUFGclFRSjBhaUVMUVFBaENTQWFRUWRQQkVBRFFDQUxRUUFnREJBVklBOXFRUUFnREJBVklBOXFRUUFnREJBVklBOXFRUUFnREJBVklBOXFRUUFnREJBVklBOXFRUUFnREJBVklBOXFRUUFnREJBVklBOXFRUUFnREJBVklBOXFJUXNnQ1VFSWFpSUpJQ3RIRFFBTEMwRUFJUWtnSkVVTkJ3TkFJQXRCQUNBTUVCVWdEMm9oQ3lBSlFRRnFJZ2tnSkVjTkFBc01Cd3NnRTBVTkJpQVFRWHh4SVJRZ0VFRURjU0VTUVFBaERTQVFRUUZyUVFOSklSY01CUXRCQUNFSklCQkJmSEVpRGdSQUEwQWdDeUFKUVFOMGFpQUtJQWxCQW5ScUtBSUFOZ0lBSUFzZ0NVRUJjaUlVUVFOMGFpQUtJQlJCQW5ScUtBSUFOZ0lBSUFzZ0NVRUNjaUlVUVFOMGFpQUtJQlJCQW5ScUtBSUFOZ0lBSUFzZ0NVRURjaUlVUVFOMGFpQUtJQlJCQW5ScUtBSUFOZ0lBSUFsQkJHb2lDU0FPU1EwQUN3c2dDU0FRVHcwRkFrQWdFQ0FKYXlJVVFSQkpEUUFnTGlBTklCOXNJZzFxSUFsQkEzUnFJQklnSUdvaURpQVFJQXhyUVFKMGFra0VRQ0FPSUFrZ0RHdEJBblJxSUEwZ0xXb2dFRUVEZEdwSkRRRUxJQW9nQ1VFQ2RHb2hEU0FKL1JIOURBQUFBQUFCQUFBQUFnQUFBQU1BQUFEOXJnRWhOQ0FKSUJSQmZIRWlER29oQ1VFQUlRNERRQ0FMSURSQkFmMnJBU0kxL1JzQVFRSjBhaUFOSUE1QkFuUnEvUUFDQUNJMi9Wb0NBQUFnQ3lBMS9Sc0JRUUowYWlBMi9Wb0NBQUVnQ3lBMS9Sc0NRUUowYWlBMi9Wb0NBQUlnQ3lBMS9Sc0RRUUowYWlBMi9Wb0NBQU1nTlAwTUJBQUFBQVFBQUFBRUFBQUFCQUFBQVAydUFTRTBJQTVCQkdvaURpQU1SdzBBQ3lBTUlCUkdEUVlMUVFBaERDQUpJUTRnRUNBSmEwRURjU0lOQkVBRFFDQUxJQTVCQTNScUlBb2dEa0VDZEdvb0FnQTJBZ0FnRGtFQmFpRU9JQXhCQVdvaURDQU5SdzBBQ3dzZ0NTQVFhMEY4U3cwRkEwQWdDeUFPUVFOMGFpQUtJQTVCQW5ScUtBSUFOZ0lBSUFzZ0RrRUJhaUlKUVFOMGFpQUtJQWxCQW5ScUtBSUFOZ0lBSUFzZ0RrRUNhaUlKUVFOMGFpQUtJQWxCQW5ScUtBSUFOZ0lBSUFzZ0RrRURhaUlKUVFOMGFpQUtJQWxCQW5ScUtBSUFOZ0lBSUE1QkJHb2lEaUFRUncwQUN3d0ZDeUFUUlEwRVFRQWhDU0FhUVFOUEJFQURRQ0FMSUFvb0FnQTJBZ0FnQ3lBUGFpSU1JQW9nRVdvaURTZ0NBRFlDQUNBTUlBOXFJZ3dnRFNBUmFpSU5LQUlBTmdJQUlBd2dEMm9pRENBTklCRnFJZzBvQWdBMkFnQWdEU0FSYWlFS0lBd2dEMm9oQ3lBSlFRUnFJZ2tnRzBjTkFBc0xRUUFoQ1NBV1JRMEVBMEFnQ3lBS0tBSUFOZ0lBSUFvZ0VXb2hDaUFMSUE5cUlRc2dDVUVCYWlJSklCWkhEUUFMREFRTElCd2dEVUVDZEdvaEN5QVFRUVJIQkVBZ0UwVU5CQ0FRUVFKMElRbEJBQ0VPSUJwQkEwOEVRQU5BSUFzZ0NpQUpFQkloTUNBS0lCRnFJZzBnRVdvaUN5QVJhaUlTSUJGcUlRb2dNQ0FQYWlBTklBa1FFaUFQYWlBTElBa1FFaUFQYWlBU0lBa1FFaUFQYWlFTElBNUJCR29pRGlBYlJ3MEFDd3RCQUNFT0lCWkZEUVFEUUNBTElBb2dDUkFTSVRFZ0NpQVJhaUVLSURFZ0Qyb2hDeUFPUVFGcUlnNGdGa2NOQUFzTUJBc2dFMFVOQTBFQUlRa2dHa0VEVHdSQUEwQWdDeUFLL1FBQ0FQMExBZ0FnQ3lBUGFpSU1JQW9nRVdvaURmMEFBZ0Q5Q3dJQUlBd2dEMm9pRENBTklCRnFJZzM5QUFJQS9Rc0NBQ0FNSUE5cUlnd2dEU0FSYWlJTi9RQUNBUDBMQWdBZ0RTQVJhaUVLSUF3Z0Qyb2hDeUFKUVFScUlna2dHMGNOQUFzTFFRQWhDU0FXUlEwREEwQWdDeUFLL1FBQ0FQMExBZ0FnQ2lBUmFpRUtJQXNnRDJvaEN5QUpRUUZxSWdrZ0ZrY05BQXNNQXdzRFFFRUFJUWtnRFFSQUEwQWdDeUFKUVFWMGFpQUtJQWxCQW5ScUtBSUFOZ0lBSUFzZ0NVRUJjaUlNUVFWMGFpQUtJQXhCQW5ScUtBSUFOZ0lBSUFzZ0NVRUNjaUlNUVFWMGFpQUtJQXhCQW5ScUtBSUFOZ0lBSUFzZ0NVRURjaUlNUVFWMGFpQUtJQXhCQW5ScUtBSUFOZ0lBSUFsQkJHb2lDU0FOU1EwQUN3c0NRQ0FKSUJCUERRQUNRQ0FRSUFsckloUkJDRThFUUFKQUlBc2dDVUVGZEdvZ0lpQVJJQkpzYWs4TkFDQUtJQWxCQW5ScUlCVWdEeUFTYkdwUERRQWdDU0VNREFJTElBbjlFZjBNQUFBQUFBRUFBQUFDQUFBQUF3QUFBUDJ1QVNFMElBa2dGRUY4Y1NJWGFpRU1RUUFoRGdOQUlBc2dORUVEL2FzQklqWDlHd0JCQW5ScUlBb2dDU0FPYWtFQ2RHcjlBQUlBSWpiOVdnSUFBQ0FMSURYOUd3RkJBblJxSURiOVdnSUFBU0FMSURYOUd3SkJBblJxSURiOVdnSUFBaUFMSURYOUd3TkJBblJxSURiOVdnSUFBeUEwL1F3RUFBQUFCQUFBQUFRQUFBQUVBQUFBL2E0QklUUWdEa0VFYWlJT0lCZEhEUUFMSUJRZ0YwWU5BZ3dCQ3lBSklRd0xRUUFoRGlBUUlBd2lDV3RCQTNFaUZBUkFBMEFnQ3lBSlFRVjBhaUFLSUFsQkFuUnFLQUlBTmdJQUlBbEJBV29oQ1NBT1FRRnFJZzRnRkVjTkFBc0xJQXdnRUd0QmZFc05BQU5BSUFzZ0NVRUZkR29nQ2lBSlFRSjBhaWdDQURZQ0FDQUxJQWxCQVdvaURFRUZkR29nQ2lBTVFRSjBhaWdDQURZQ0FDQUxJQWxCQW1vaURFRUZkR29nQ2lBTVFRSjBhaWdDQURZQ0FDQUxJQWxCQTJvaURFRUZkR29nQ2lBTVFRSjBhaWdDQURZQ0FDQUpRUVJxSWdrZ0VFY05BQXNMSUFvZ0VXb2hDaUFMSUE5cUlRc2dFeUFTUVFGcUloSkhEUUFMREFJTElCSkZCRUJCQVNBQUtBSUlJQUFvQWd4c1FRSjBFQk1pRWtVRVFFRUFEd3NnQUNnQ0dDQUFLQUlRSUI1c1FRSjBhaUFOYWlBU05nSUFDeUFTSUNWQkFuUnFJQWxCQW5ScUlRc2dHQ0FCYXlFSkFrQUNRQUpBQWtBZ0JrRUJSd1JBSUJ3Z0JpQUpiRUVDZEdvaENpQVFRUUZHRFFFZ0l3MENJQkJCQjAwTkFpQVRSUTBHSUNZZ0NTQWZiR29nRUVFRmRHb2hJaUFnSUJCQkFuUnFJQXhCQW5ScklTOGdFRUY4Y1NFVVFRQWhEQU5BUVFBaENTQVVCRUFEUUNBTElBbEJBblJxSUFvZ0NVRUZkR29vQWdBMkFnQWdDeUFKUVFGeUlnMUJBblJxSUFvZ0RVRUZkR29vQWdBMkFnQWdDeUFKUVFKeUlnMUJBblJxSUFvZ0RVRUZkR29vQWdBMkFnQWdDeUFKUVFOeUlnMUJBblJxSUFvZ0RVRUZkR29vQWdBMkFnQWdDVUVFYWlJSklCUkpEUUFMQ3dKQUlBa2dFRThOQUFKQUlCQWdDV3NpRjBFSVR3UkFBa0FnQ3lBSlFRSjBhaUFpSUF3Z0QyeHFUdzBBSUFvZ0NVRUZkR29nRWlBdklBd2dFV3hxYWs4TkFDQUpJUTBNQWdzZ0NmMFIvUXdBQUFBQUFRQUFBQUlBQUFBREFBQUEvYTRCSVRRZ0NTQVhRWHh4SWhWcUlRMUJBQ0VPQTBBZ0N5QUpJQTVxUVFKMGFpQUtJRFJCQS8yckFTSTEvUnNEUVFKMGFpQUtJRFg5R3dKQkFuUnFJQW9nTmYwYkFVRUNkR29nQ2lBMS9Sc0FRUUowYXYwSkFnRDlWZ0lBQWYxV0FnQUMvVllDQUFQOUN3SUFJRFQ5REFRQUFBQUVBQUFBQkFBQUFBUUFBQUQ5cmdFaE5DQU9RUVJxSWc0Z0ZVY05BQXNnRlNBWFJnMENEQUVMSUFraERRdEJBQ0VPSUJBZ0RTSUphMEVEY1NJWEJFQURRQ0FMSUFsQkFuUnFJQW9nQ1VFRmRHb29BZ0EyQWdBZ0NVRUJhaUVKSUE1QkFXb2lEaUFYUncwQUN3c2dEU0FRYTBGOFN3MEFBMEFnQ3lBSlFRSjBhaUFLSUFsQkJYUnFLQUlBTmdJQUlBc2dDVUVCYWlJTlFRSjBhaUFLSUExQkJYUnFLQUlBTmdJQUlBc2dDVUVDYWlJTlFRSjBhaUFLSUExQkJYUnFLQUlBTmdJQUlBc2dDVUVEYWlJTlFRSjBhaUFLSUExQkJYUnFLQUlBTmdJQUlBbEJCR29pQ1NBUVJ3MEFDd3NnQ3lBUmFpRUxJQW9nRDJvaENpQVRJQXhCQVdvaURFY05BQXNNQmdzZ0hDQUpRUUowYWlFS0lCQkJCRVlOQWlBVFJRMEZJQkJCQW5RaENVRUFJUTRnR2tFRFR3UkFBMEFnQ3lBS0lBa1FFaUV5SUFvZ0Qyb2lEU0FQYWlJTElBOXFJaElnRDJvaENpQXlJQkZxSUEwZ0NSQVNJQkZxSUFzZ0NSQVNJQkZxSUJJZ0NSQVNJQkZxSVFzZ0RrRUVhaUlPSUJ0SERRQUxDMEVBSVE0Z0ZrVU5CUU5BSUFzZ0NpQUpFQkloTXlBS0lBOXFJUW9nTXlBUmFpRUxJQTVCQVdvaURpQVdSdzBBQ3d3RkN5QVRSUTBFUVFBaENTQWFRUU5QQkVBRFFDQUxJQW9vQWdBMkFnQWdDeUFSYWlJTUlBb2dEMm9pRFNnQ0FEWUNBQ0FNSUJGcUlnd2dEU0FQYWlJTktBSUFOZ0lBSUF3Z0VXb2lEQ0FOSUE5cUlnMG9BZ0EyQWdBZ0RDQVJhaUVMSUEwZ0Qyb2hDaUFKUVFScUlna2dHMGNOQUFzTFFRQWhDU0FXUlEwRUEwQWdDeUFLS0FJQU5nSUFJQXNnRVdvaEN5QUtJQTlxSVFvZ0NVRUJhaUlKSUJaSERRQUxEQVFMSUJORkRRTWdFRUY4Y1NFVUlCQkJBM0VoRWtFQUlRMGdFRUVCYTBFRFNTRVhEQUVMSUJORkRRSkJBQ0VKSUJwQkEwOEVRQU5BSUFzZ0N2MEFBZ0Q5Q3dJQUlBc2dFV29pRENBS0lBOXFJZzM5QUFJQS9Rc0NBQ0FNSUJGcUlnd2dEU0FQYWlJTi9RQUNBUDBMQWdBZ0RDQVJhaUlNSUEwZ0Qyb2lEZjBBQWdEOUN3SUFJQTBnRDJvaENpQU1JQkZxSVFzZ0NVRUVhaUlKSUJ0SERRQUxDMEVBSVFrZ0ZrVU5BZ05BSUFzZ0N2MEFBZ0Q5Q3dJQUlBb2dEMm9oQ2lBTElCRnFJUXNnQ1VFQmFpSUpJQlpIRFFBTERBSUxBMEFDUUNBUVJRMEFRUUFoRGtFQUlRbEJBQ0VNSUJkRkJFQURRQ0FMSUFsQkFuUnFJQW9nQmlBSmJFRUNkR29vQWdBMkFnQWdDeUFKUVFGeUloVkJBblJxSUFvZ0JpQVZiRUVDZEdvb0FnQTJBZ0FnQ3lBSlFRSnlJaFZCQW5ScUlBb2dCaUFWYkVFQ2RHb29BZ0EyQWdBZ0N5QUpRUU55SWhWQkFuUnFJQW9nQmlBVmJFRUNkR29vQWdBMkFnQWdDVUVFYWlFSklBeEJCR29pRENBVVJ3MEFDd3NnRWtVTkFBTkFJQXNnQ1VFQ2RHb2dDaUFHSUFsc1FRSjBhaWdDQURZQ0FDQUpRUUZxSVFrZ0RrRUJhaUlPSUJKSERRQUxDeUFMSUJGcUlRc2dDaUFQYWlFS0lCTWdEVUVCYWlJTlJ3MEFDd3dCQ3dOQUFrQWdFRVVOQUVFQUlRNUJBQ0VKUVFBaERDQVhSUVJBQTBBZ0N5QUdJQWxzUVFKMGFpQUtJQWxCQW5ScUtBSUFOZ0lBSUFzZ0NVRUJjaUlWSUFac1FRSjBhaUFLSUJWQkFuUnFLQUlBTmdJQUlBc2dDVUVDY2lJVklBWnNRUUowYWlBS0lCVkJBblJxS0FJQU5nSUFJQXNnQ1VFRGNpSVZJQVpzUVFKMGFpQUtJQlZCQW5ScUtBSUFOZ0lBSUFsQkJHb2hDU0FNUVFScUlnd2dGRWNOQUFzTElCSkZEUUFEUUNBTElBWWdDV3hCQW5ScUlBb2dDVUVDZEdvb0FnQTJBZ0FnQ1VFQmFpRUpJQTVCQVdvaURpQVNSdzBBQ3dzZ0NpQVJhaUVLSUFzZ0Qyb2hDeUFOUVFGcUlnMGdFMGNOQUFzTElDRkJBV29oSVNBUUlCaHFJaGdnQTBrTkFBc2dIa0VCYWlFZUlCTWdIV29pSFNBRVNRMEFDd3RCQVF2RE13VW1mdzkrQVhzQmZRRjhJd0JCMEFCcklnNGtBQ0FPUVpEL0F6WUNLQ0FBS0FKc0lBQW9BbWhzSVJjQ2Z3SkFBa0FDUUNBQUtBSUlJZ3RCQ0VjRVFFRUFJQXRCZ0FKSERRUWFJQTVCMmY4RE5nSW9EQUVMSUFBdEFFUkJBWEVOQUNBWFFRRnhJU0lnRjBGOGNTRVBJQmRCQVd1dFFvd3NmaUl4UWlDSXAwRUFSeUVqSURHbklTUWdEa0hOQUdvaEpTQU9RY3dBYWlFb0lBNUJ5QUJxSVNrZ0YwRWtTU0VxUVpEL0F5RUxBa0FDUUFKQUEwQUNRQ0FMUVpQL0EwWU5BQUpBQTBBZ0NTa0RDQ0l4VUFSK1FnQUZJREVnQ1NrRE9IMExVQVJBSUFCQndBQTJBZ2dNQXdzZ0NTQUFLQUlRUVFJZ0NoQWFRUUpIQkVBZ0NrRUJRWllTUVFBUUQwRUFEQXNMSUFBb0FoQWdEa0VrYWtFQ0VCRWdEaWdDSkNJTFFRRk5CRUFnQ2tFQlFZY3VRUUFRRDBFQURBc0xBa0FnRGlnQ0tFR0FnUUpHQkVBZ0NTa0RDQ0l4VUFSK1FnQUZJREVnQ1NrRE9IMExVQTBCSUE0b0FpUWhDd3NnQUNnQ0NDSVVRUkJ4QkVBZ0FDQUFLQUlZSUF0clFRSnJOZ0lZQ3lBT0lBdEJBbXNpRWpZQ0pFSGd2UUVoRENBT0tBSW9JUTBEUUNBTUlnc29BZ0FpR0FSQUlBdEJER29oRENBTklCaEhEUUVMQ3lBTEtBSUVJQlJ4UlFSQUlBcEJBVUg4S0VFQUVBOUJBQXdNQ3dKQUlBQW9BaFFnRWs4RVFDQUFLQUlRSVF3TUFRc2dDU2tEQ0NJeFVBUitRZ0FGSURFZ0NTa0RPSDBMSUJLdFV3UkFJQXBCQVVHTUxFRUFFQTlCQUF3TkN5QUFLQUlRSUE0b0FpUVFGeUlNUlFSQUlBQW9BaEFRRUNBQVFnQTNBeEFnQ2tFQlFkUWxRUUFRRDBFQURBMExJQUFnRERZQ0VDQUFJQTRvQWlRaUVqWUNGQXNnQ1NBTUlCSWdDaEFhSWd3Z0RpZ0NKRWNFUUNBS1FRRkJsaEpCQUJBUFFRQU1EQXNnQ3lnQ0NDSUxSUVJBSUFwQkFVSGExZ0JCQUJBUFFRQU1EQXNnQUNBQUtBSVFJQXdnQ2lBTEVRRUFSUVJBSUE0Z0RpZ0NLRFlDSUNBS1FRRkJsT2dBSUE1QklHb1FEMEVBREF3TElBa3BBemdoTVNBT0tBSWtJUkVnQUNnQ3lBRWlGQ2dDS0NJU0lBQW9Bc3dCSWd4QktHd2lEV29pRmlnQ0ZDSWNRUUZxSWgwZ0ZpZ0NIQ0lMU3dSQUlCWUNmeUFMczBNQUFNaENraUpCUXdBQWdFOWRJRUZEQUFBQUFHQnhCRUFnUWFrTUFRdEJBQXNpQ3pZQ0hDQVdLQUlZSUF0QkdHd1FGeUVMSUJRb0FpZ2lFaUFOYWlFV0lBdEZEUU1nRmlBTE5nSVlJQllvQWhRaUhFRUJhaUVkQ3lBTklCSnFJZzBvQWhnZ0hFRVliR29pQ3lBUlFRUnFOZ0lRSUFzZ01hY2dFV3RCQkdzaURLdzNBd2dnQ3lBWU93RUFJQTBnSFRZQ0ZBSkFJQmhCa1A4RFJ3MEFJQTBvQWhBaUN3UkFJQXNnRFNnQ0RFRVliR29nREswM0F3QUxJQWtwQXppbklBNG9BaVJyUVFScnJTSXhJQUFwQXpCWERRQWdBQ0F4TndNd0N5QUFMUUJFUVFSeEJFQWdDU0FBTlFJWUlBb2dDU2dDS0JFSUFDQUFOUUlZVWdSQUlBcEJBVUdXRWtFQUVBOUJBQXdOQ3lBT1FaUC9BellDS0F3RUN5QUpJQUFvQWhCQkFpQUtFQnBCQWtjRVFDQUtRUUZCbGhKQkFCQVBRUUFNREFzZ0FDZ0NFQ0FPUVNocVFRSVFFU0FPS0FJb1FaUC9BMGNOQVF3REN3c2dBRUhBQURZQ0NBd0JDeUFXS0FJWUVCQWdGQ2dDS0NBTVFTaHNhaUlBUVFBMkFod2dBRUlBTndJVUlBcEJBVUdGSFVFQUVBOUJBQXdJQ3dKQUlBa3BBd2dpTVZBRWZrSUFCU0F4SUFrcEF6aDlDMUFFUUNBQUtBSUlRY0FBUmcwQkN3SkFBa0FnQUMwQVJDSUxRUVJ4UlFSQUlBQW9Bc3dCUVl3c2JDRU1JQUFvQXB3QklTNENRQUpBSUFBb0FqZ0VRQ0FKS1FNSUlqRlFCSDVDQUFVZ01TQUpLUU00ZlF1bklSTU1BUXNnQUNnQ0dDSVRRUUpKRFFFTElBQWdFMEVDYXlJVE5nSVlDeUF1SUF4cUlSZ2dFMFVOQVNBSktRTUlJakZRQkg1Q0FBVWdNU0FKS1FNNGZRc2dFNjFUQkVBZ0FDZ0N1QUVFUUNBS1FRRkJ1U3hCQUJBUFFRQU1EUXNnQ2tFQ1Fia3NRUUFRRHdzZ0FDZ0NHQ0lOUVg1UEJFQWdDa0VCUWY0S1FRQVFEMEVBREF3TEFrQWdHQ2dDM0NzaURBUkFJQmdvQXVBcklndEJmU0FOYTBzRVFDQUtRUUZCbGdsQkFCQVBRUUFNRGdzZ0RDQUxJQTFxUVFKcUVCY2lDd1JBSUJnZ0N6WUMzQ3NNQkFzZ0dDZ0MzQ3NRRUNBWVFRQTJBdHdyREFFTElCZ2dEVUVDYWhBVUlnczJBdHdySUFzTkFnc2dDa0VCUVljdlFRQVFEMEVBREFzTElBQkJDRFlDQ0NBQUlBdEIrZ0Z4T2dCRURBRUxJQUFvQXNnQkloWUVRQ0FXS0FJb0loSWdBQ2dDekFFaUZFRW9iQ0lSYWlJTUtBSVFJQXdvQWd4QkdHeHFJZ3NnQ1NrRE9DSXlRZ0o5SWpFM0F3Z2dDeUF5SUFBMUFoaDhOd01RSUFBb0FoZ2hEUUpBSUF3b0FoUWlIRUVCYWlJZElBd29BaHdpQzAwRVFDQU1LQUlZSVF3TUFRc2dEQUovSUF1elF3QUF5RUtTSWtGREFBQ0FUMTBnUVVNQUFBQUFZSEVFUUNCQnFRd0JDMEVBQ3lJTE5nSWNJQXdvQWhnZ0MwRVliQkFYSVF3Z0ZpZ0NLQ0lTSUJGcUlRc2dERVVOQmlBTElBdzJBaGdnQ3lnQ0ZDSWNRUUZxSVIwTElBd2dIRUVZYkdvaUN5QU5RUUpxTmdJUUlBc2dNY1EzQXdnZ0MwR1Qvd003QVFBZ0VTQVNhaUFkTmdJVUN5QUFLQUlZSVF3Q1FDQVRSUVJBUVFBaEV3d0JDeUFKSUJnb0F0d3JJQmdvQXVBcmFpQU1JQW9RR2lFVElBQW9BaGdoREFzZ0FFRUlRY0FBSUF3Z0UwWWJOZ0lJSUJnZ0dDZ0M0Q3NnRTJvMkF1QXJJQUF0QUVRaUMwRUpjVUVCUncwQUlBQWdDMEVJY2pvQVJDQUFLQUxNQVNFTklBa29BaHhCQWtZTkFDQUpLUU00SWpGQ2YxRU5BQUpBQTBCQkFDRU1JQWtnRGtIR0FHb2lDMEVDSUFvUUdrRUNSdzBCSUFzZ0RrRkFhMEVDRUJFZ0RpZ0NRRUdRL3dOSERRRkJsaEloRWlBSklBdEJBaUFLRUJwQkFrY05DU0FMSUE1QlBHcEJBaEFSSUE0b0FqeEJDa2NFUUVHSExpRVNEQW9MSUE1QkNEWUNQQ0FKSUE1QnhnQnFRUWdnQ2hBYUlnc2dEaWdDUEVjTkNTQUxRUWhIQkVCQnZSNGhFZ3dLQ3lBT1FjWUFhaUFPUVRocVFRSVFFU0FwSUE1Qk5HcEJCQkFSSUNnZ0RrRXdha0VCRUJFZ0pTQU9RU3hxUVFFUUVTQU5JQTRvQWpoSEJFQWdEaWdDTkNJTFFRNUpEUUlnRGlBTFFReHJJZ3MyQWpRZ0NTQUxyU0FLSUFrb0FpZ1JDQUFnRGpVQ05GRU5BUXdDQ3dzZ0RpZ0NNQ0FPS0FJc1JpRU1DeUFKSURFZ0NpQUpLQUlzRVEwQVJRMElJQXhGRFFBZ0FDQUFMUUJFUWU0QmNVRVFjam9BUkFKQUlCZEZEUUFnQUNnQ25BRWhFMEVBSVFzQ1FDQXFEUUFnRTBIWUsyb2lEQ0FrYWlBTVNTQWpjZzBBQTBBZ0V5QUxRWXdzYkdvaUhDZ0MyQ3NpSGYwUklCTWdDMEVCY2tHTUxHeHFJaGdvQXRnckloYjlIQUVnRXlBTFFRSnlRWXdzYkdvaUVTZ0MyQ3NpRlAwY0FpQVRJQXRCQTNKQmpDeHNhaUlOS0FMWUt5SU0vUndEL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1RnaVFQMGJBRUVCY1FSQUlCeEIyQ3RxSUIxQkFXbzJBZ0FMSUVEOUd3RkJBWEVFUUNBWVFkZ3JhaUFXUVFGcU5nSUFDeUJBL1JzQ1FRRnhCRUFnRVVIWUsyb2dGRUVCYWpZQ0FBc2dRUDBiQTBFQmNRUkFJQTFCMkN0cUlBeEJBV28yQWdBTElBdEJCR29pQ3lBUFJ3MEFDeUFYSUE4aUMwWU5BUXNnQzBFQmNpRU1JQ0lFUUNBVElBdEJqQ3hzYWlJTktBTFlLeUlMQkVBZ0RVSFlLMm9nQzBFQmFqWUNBQXNnRENFTEN5QU1JQmRHRFFBRFFDQVRJQXRCakN4c2FpSU5LQUxZS3lJTUJFQWdEVUhZSzJvZ0RFRUJhallDQUFzZ0RVSGsxd0JxSWcwb0FnQWlEQVJBSUEwZ0RFRUJhallDQUFzZ0MwRUNhaUlMSUJkSERRQUxDeUFLUVFKQmxNUUFRUUFRRHdzZ0FDMEFSRUVCY1EwQUlBa2dBQ2dDRUVFQ0lBb1FHa0VDUndSQUFrQWdBQ2dDekFGQkFXb2dGMGNOQUNBWFJRMEFJQUFvQXB3QklReEJBQ0VMQTBBZ0RDQUxRWXdzYkdvaUNTZ0MxQ3RGQkVBZ0NTZ0MyQ3RGRFFnTElBdEJBV29pQ3lBWFJ3MEFDd3NnQ2tFQlFaWVNRUUFRRDBFQURBa0xJQUFvQWhBZ0RrRW9ha0VDRUJFZ0RpZ0NLQ0VMSUFBdEFFUkJBWEVOQWlBTFFkbi9BMGNOQVF3Q0N3c2dEaWdDS0NFTEN5QUxRZG4vQTBjTkFpQUFLQUlJUVlBQ1JnMENJQUJCZ0FJMkFnZ2dBRUVBTmdMTUFRd0NDeUFMS0FJWUVCQWdGaWdDS0NBVVFTaHNhaUlBUVFBMkFod2dBRUlBTndJVUlBcEJBVUdGSFVFQUVBOUJBQXdFQ3lBT0lBczJBaEFnQ2tFRVFlZlJBQ0FPUVJCcUVBOGdBQ0FMTmdMTUFTQU9RZG4vQXpZQ0tDQUFRWUFDTmdJSUN5QUFLQUxNQVNFTElBQW9BcHdCSVFrQ1FBSkFJQUF0QUVSQkFYRU5BQUpBQWtBZ0N5QVhUdzBBSUFrZ0MwR01MR3hxSVJNRFFDQVRLQUxjS3cwQklBQWdDMEVCYWlJTE5nTE1BU0FUUVl3c2FpRVRJQXNnRjBjTkFBc01BUXNnQ3lBWFJ3MEJDeUFJUVFBMkFnQU1BUXNDUUFKQUlBcEJBU0FKSUF0QmpDeHNhaUlSS0FLMEtBUi9RWncwQlNBUkxRQ0lMRUVDY1VVTkFnSkFJQkVvQXFnb0lnOUZCRUJCQUNFTURBRUxJQkVvQXF3b0lRbEJBQ0VNUVFBaEN5QVBRUVJQQkVBZ0QwRjhjU0VML1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBSVVCQkFDRVNBMEFnQ1NBU1FRTjBhaUlNUVJ4cUlBeEJGR29nREVFTWFpQU0vUWtDQlAxV0FnQUIvVllDQUFMOVZnSUFBeUJBL2E0QklVQWdFa0VFYWlJU0lBdEhEUUFMSUVBZ1FDQkEvUTBJQ1FvTERBME9Ed0FCQWdNQUFRSUQvYTRCSWtBZ1FDQkEvUTBFQlFZSEFBRUNBd0FCQWdNQUFRSUQvYTRCL1JzQUlRd2dDeUFQUmcwQkN3TkFJQWtnQzBFRGRHb29BZ1FnREdvaERDQUxRUUZxSWdzZ0QwY05BQXNMSUJFZ0RCQVVJZ2syQXJRb0lBa05BVUdYSGd0QkFCQVBJQXBCQVVIMVBFRUFFQTlCQUF3RkN5QVJJQXcyQXJ3b0lCRW9BcXdvSVFrZ0VTZ0NxQ2dpREFSQVFRQWhFa0VBSVFzRFFDQUpJQXRCQTNRaUZHb2lEU2dDQUNJUEJFQWdFU2dDdENnZ0Vtb2dEeUFOS0FJRUVCSWFJQkVvQXF3b0lCUnFJZ2tvQWdRaEx5QUpLQUlBRUJBZ0VTZ0NyQ2dpQ1NBVWFrSUFOd0lBSUM4Z0Vtb2hFaUFSS0FLb0tDRU1DeUFMUVFGcUlnc2dERWtOQUFzTElCRkJBRFlDcUNnZ0NSQVFJQkZCQURZQ3JDZ2dFU0FSS0FLMEtEWUNzQ2dnRVNBUktBSzhLRFlDdUNnTEFuOUJBQ0VvSUFBb0F0QUJJZ3NvQWh3aUppZ0NUQ0FBS0FMTUFTSUpRWXdzYkdvb0F0QXJJUnNnQ3lnQ0dDSVVLQUlZSVNjZ0N5Z0NGQ2dDQUNJZUlDWW9BZ1FnSmlnQ0RDSUxJQWtnQ1NBbUtBSVlJZ2x1SWd3Z0NXeHJiR29pRFNBVUtBSUFJZ2tnQ1NBTlNSc2lEellDQUNBZVFYOGdDeUFOYWlJSklBa2dEVWtiSWdzZ0ZDZ0NDQ0lKSUFrZ0Mwc2JJZ2syQWdnQ1FDQUpJQTlLSUE5QkFFNXhSUVJBSUFwQkFVR0JNMEVBRUE4TUFRc2dIaWdDRkNFUUlCNGdKaWdDQ0NBTUlDWW9BaEFpQzJ4cUlnOGdGQ2dDQkNJSklBa2dEMGtiSWd3MkFnUWdIa0YvSUFzZ0Qyb2lDU0FKSUE5Skd5SUxJQlFvQWd3aUNTQUpJQXRMR3lJSk5nSU1JQWtnREVvZ0RFRUFUbkZGQkVBZ0NrRUJRZHN5UVFBUUR3d0JDd0pBSUJzb0FnUUVRQ0FlS0FJUURRRkJBUXdEQ3lBS1FRRkIxU2hCQUJBUERBRUxBa0FDUUFOQUlDZEJBRFlDSkNBUUlDYzBBZ0FpTlVJQmZTSXhJQjQwQWdCOElEVi9QZ0lBSUJBZ0p6UUNCQ0kwUWdGOUlqSWdIalFDQkh3Z05IOCtBZ1FnRUNBeElCNDBBZ2g4SURWL1BnSUlJQjQwQWd3aE1TQVFJQ2cyQWhBZ0VDQXhJREo4SURSL1BnSU1JQkFnR3lnQ0JDSUxOZ0lVSUJCQkFTQUxJQ1lvQWxBaUNXc2dDU0FMU3hzMkFoZ2dFQ2dDTkJBUUlCQkJBRFlDUkNBUS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0NOQ0FMUVpnQmJDRU1Ba0FnRUNnQ0hDSUpSUVJBSUJBZ0RCQVVJZ2syQWh3Z0NVVU5CU0FRSUF3MkFpQWdDVUVBSUF3UUZSb01BUXNnRENBUUtBSWdUUTBBSUFrZ0RCQVhJZ3RGQkVBZ0NrRUJRWUFYUVFBUUR5QVFLQUljRUJBZ0VFSUFOd0ljREFVTElCQWdDellDSENBTElCQW9BaUFpQ1dwQkFDQU1JQWxyRUJVYUlCQWdERFlDSUFzZ0VDZ0NGQ0lMQkVBZ0cwR3dCMm9oSFNBYlFhd0dhaUVZSUJ0QkhHb2hGeUFRS0FJY0lScEJBQ0VyQTBBZ0drSi9JQXRCQVdzaUNhMGlNNFpDZjRVaU1pQVFOQUlBZkNBemg2Y2lGallDQUNBYUlESWdFRFFDQkh3Z000ZW5JaEUyQWdRZ0dpQXlJQkEwQWdoOElET0hJakduSWhRMkFnZ2dHaUF5SUJBMEFneDhJRE9ISWpTbklnMDJBZ3dnTWNSQ0FTQVlJQ3RCQW5RaURHb29BZ0FpSDYwaU1ZWjhRZ0Y5SURHSHB5QWZkQ0lQUVFCSURRUWdOTVJDZnlBTUlCMXFLQUlBSWlDdElqR0dRbitGZkNBeGg2Y2dJSFFpREVFQVNBMEVJQm9nREVGL0lDQjBJQkZ4SWhOcklDQjFRUUFnRFNBUlJ4c2lERFlDRkNBYUlBOUJmeUFmZENBV2NTSWlheUFmZFVFQUlCUWdGa2NiSWc4MkFoQUNRQ0FQUlEwQUlBK3RJQXl0ZmtJZ2lGQU5BQXdFQ3lBTUlBOXNJaU5CNTh5Wk0wOE5BeUFqUVNoc0lTRWdHaUFyQkg4Z0lFRUJheUVnSUI5QkFXc2hIeUFUckVJQmZFSUJpS2NoRXlBaXJFSUJmRUlCaUtjaElrRURCVUVCQ3pZQ0dDQWFRUnhxSVJWQ0FTQUxyU0kyaGlFM1FuOGdHeWdDRENJTElDQWdDeUFnU1JzaUxLMGlQSVpDZjRVaFBVSi9JQnNvQWdnaUN5QWZJQXNnSDBrYklpMnRJajZHUW4rRklUOUJBQ0VwQTBBQ2ZpQXJSUVJBSURJZ0VEUUNCSHdnTTRjaE9DQXlJQkEwQWdCOElET0hJVGxCQUNFTElESWlNU0U2SURNTUFRc2dOeUFwUVFGcUlndEJBWGF0SURPR1FuK0ZmQ0k2SUJBMEFnUjhJRGFISVRnZ055QUxRUUZ4clNBemhrSi9oWHdpTVNBUU5BSUFmQ0EyaHlFNUlEWUxJVHNnRURRQ0NDRTFJQkEwQWd3aE5DQVZJRGcrQWdRZ0ZTQTVQZ0lBSUJVZ0N6WUNFQ0FWSURRZ09ud2dPNGMrQWd3Z0ZTQXhJRFY4SUR1SFBnSUlRUUFoREFKQUlCc29BaFJGRFFBZ0MwVU5BRUVDUVFFZ0MwRURSaHNoREF0RUFBQUFBQUFBOEQ4aFFnSkFJQ2NvQWhnZ0RHb2dGeWdDQUNJTWF5SUxRWUFJVGdSQVJBQUFBQUFBQU9CL0lVSWdDMEgvRDBrRVFDQUxRZjhIYXlFTERBSUxSQUFBQUFBQUFQQi9JVUpCL1JjZ0N5QUxRZjBYVHh0Qi9nOXJJUXNNQVFzZ0MwR0JlRW9OQUVRQUFBQUFBQUJnQXlGQ0lBdEJ1SEJMQkVBZ0MwSEpCMm9oQ3d3QkMwUUFBQUFBQUFBQUFDRkNRZkJvSUFzZ0MwSHdhRTBiUVpJUGFpRUxDeUFWSUJjb0FnUzNSQUFBQUFBQUFFQS9va1FBQUFBQUFBRHdQNkFnUWlBTFFmOEhhcTFDTklhL29xSzJPQUlnSUJVZ0RDQWJLQUtrQm1wQkFXczJBaHdnRlNnQ0ZDRUxBa0FDUUFKQUlDTkZEUUFnQ3cwQUlCVWdJUkFVSWdzMkFoUWdDMFVFUUNBS1FRRkJsQlZCQUJBUERBb0xJQXRCQUNBaEVCVWFJQlVnSVRZQ0dBd0JDeUFoSUJVb0FoaExCRUFnQ3lBaEVCY2lERVVFUUNBS1FRRkJsQlZCQUJBUElCVW9BaFFRRUNBVlFnQTNBaFFNQ2dzZ0ZTQU1OZ0lVSUF3Z0ZTZ0NHQ0lMYWtFQUlDRWdDMnNRRlJvZ0ZTQWhOZ0lZQ3lBalJRMEJDeUFWS0FJVUlRdEJBQ0VrQTBBZ0N5QWtJQ1FnR2lnQ0VDSU1iaUlXSUF4c2F5SU5JQjkwSUNKcUlnOGdGU2dDQUNJTUlBd2dEMGdiSWhFMkFnQWdDeUFXSUNCMElCTnFJZzhnRlNnQ0JDSU1JQXdnRDBnYkloUTJBZ1FnQ3lBTlFRRnFJQjkwSUNKcUlnOGdGU2dDQ0NJTUlBd2dEMG9iSWcwMkFnZ2dDeUFXUVFGcUlDQjBJQk5xSWc4Z0ZTZ0NEQ0lNSUF3Z0Qwb2JJZ3cyQWd3Z0N5QS9JQTJzZkNBK2g2Y2dFU0F0ZFNJV2F5QXRkQ0F0ZFNJUE5nSVFJQXNnUFNBTXJId2dQSWVuSUJRZ0xIVWlFV3NnTEhRZ0xIVWlERFlDRkNBTUlBOXNJaVd0UWdhR1FpQ0lRZ0JTQkVBZ0NrRUJRZVVWUVFBUUR3d0pDeUFsUVFaMElRMENRQUovQWtBZ0N5Z0NHQ0lNRFFBZ0pVVU5BQ0FMSUEwUUZDSU1OZ0lZSUF4RkRRc2dERUVBSUEwUUZSb2dDMEVjYWd3QkN5QU5JQXNvQWh4TkRRRWdEQ0FORUJjaUQwVUVRQ0FMS0FJWUVCQWdDMElBTndJWUlBcEJBVUhqRWtFQUVBOE1Dd3NnQ3lBUE5nSVlJQThnQ3lnQ0hDSU1ha0VBSUEwZ0RHc1FGUm9nQzBFY2Fnc2dEVFlDQUFzZ0N5Z0NGQ0VOSUFzb0FoQWhEeUFMQW44Z0N5Z0NJQ0lNUlFSQUlBOGdEU0FLRUdNTUFRc2dEQ0FQSUEwZ0NoQmhDellDSUNBTEtBSVVJUTBnQ3lnQ0VDRVBJQXNDZnlBTEtBSWtJZ3hGQkVBZ0R5QU5JQW9RWXd3QkN5QU1JQThnRFNBS0VHRUxOZ0lrSUNVRVFFRUFJUklEUUNBU0lBc29BaEFpRFc0aEhBSkFJQXNvQWhnZ0VrRUdkR29pR1NnQ0FDSVVCRUFnR1NnQ09DRVBJQmtvQWdRaERDQVpLQUl3SVNvZ0dTZ0NQQkFRSUJuOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOUN3SW9JQmxDQURjQ09DQVovUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDR0NBWi9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0NDQ0FaSUJRMkFnQWdHU0FxTmdJd0lDb0VRQ0FVUVFBZ0trRVliQkFWR2dzZ0dTQVBOZ0k0SUJrZ0REWUNCQXdCQ3lBWlFRcEJHQkFUSWd3MkFnQWdERVVOQ3lBWlFRbzJBakFMSUJrZ0VpQU5JQnhzYXlBV2FpSVVJQzEwSWc4Z0N5Z0NBQ0lNSUF3Z0QwZ2JOZ0lJSUJrZ0VTQWNhaUlOSUN4MElnOGdDeWdDQkNJTUlBd2dEMGdiTmdJTUlCa2dGRUVCYWlBdGRDSVBJQXNvQWdnaURDQU1JQTlLR3pZQ0VDQVpJQTFCQVdvZ0xIUWlEeUFMS0FJTUlnd2dEQ0FQU2hzMkFoUWdFa0VCYWlJU0lDVkhEUUFMQ3lBTFFTaHFJUXNnSkVFQmFpSWtJQ05IRFFBTEN5QVhRUWhxSVJjZ0ZVRWthaUVWSUNsQkFXb2lLU0FhS0FJWVNRMEFDeUFhUVpnQmFpRWFJQWtoQ3lBclFRRnFJaXNnRUNnQ0ZFa05BQXNMSUNkQk5Hb2hKeUFRUWN3QWFpRVFJQnRCdUFocUlSc2dLRUVCYWlJb0lCNG9BaEJKRFFBTFFRRU1Bd3NnQ2tFQlFaUVdRUUFRRHd3QkN5QUtRUUZCc3hGQkFCQVBDMEVBQzBVRVFDQUtRUUZCd2h0QkFCQVBRUUFNQkFzZ0FDZ0N6QUVoQ1NBT0lBQW9BbWdnQUNnQ2JHdzJBZ1FnRGlBSlFRRnFOZ0lBSUFwQkJFRysxd0FnRGhBUElBRWdBQ2dDekFFMkFnQWdDRUVCTmdJQUlBSUVRQ0FDSUFBb0F0QUJRUUFRVkNJQk5nSUFRUUFnQVVGL1JnMEVHZ3NnQXlBQUtBTFFBU2dDRkNnQ0FDSUJLQUlBTmdJQUlBUWdBU2dDQkRZQ0FDQUZJQUVvQWdnMkFnQWdCaUFCS0FJTU5nSUFJQWNnQVNnQ0VEWUNBQ0FBSUFBb0FnaEJnQUZ5TmdJSUMwRUJEQUlMSUFwQkFTQVNRUUFRRHdzZ0NrRUJRZVFiUVFBUUQwRUFDeUV3SUE1QjBBQnFKQUFnTUF2ZUVBSU5md0orQWtBZ0FDZ0NJQ0lGRFFBQ1FDQUFLQUlRSWdsQkJVb0VRQ0FKSVFNTUFRc0NRQUpBSUFBb0FoUWlBa0VGVGdSQUlBQW9BZ0FpQVNnQ0FDRUZJQUFnQVVFRWFqWUNBQ0FDUVFScklRY01BUXNnQWtFQVRBUkFRWDhoQlF3Q0N5QUFLQUlBSVFFQ2Z5QUNRUUZHQkVCQmZ5RUdRUUFNQVF0QmZ5RUdJQUpCQVdzaUEwRUJjU0VOQWtBZ0FrRUNSZ1JBUVFBaEJTQUNJUVFNQVFzZ0EwRitjU0VMUVFBaEJTQUJJUU1nQWlFRUEwQWdBQ0FEUVFGcU5nSUFJQU10QUFBaERDQUFJQU5CQW1vaUFUWUNBQ0FBSUFSQkFXczJBaFFnQXkwQUFTRURJQUFnQkVFQ2F5SUVOZ0lVSUFaQi93RWdCWFJCZjNOeElBd2dCWFJ5UVlEK0F5QUZkRUYvYzNFZ0F5QUZRUWh5ZEhJaEJpQUZRUkJxSVFVZ0FTRURJQWhCQW1vaUNDQUxSdzBBQ3dzZ0RRUkFJQUFnQVVFQmFpSUROZ0lBSUFFdEFBQWhBU0FBSUFSQkFXczJBaFFnQmtIL0FTQUZkRUYvYzNFZ0FTQUZkSEloQmlBRElRRUxJQUpCQTNSQkNHc0xJUVVnQUNBQlFRRnFOZ0lBSUFaQi93RWdCWFJCZjNOeElBRXRBQUJCRDNJZ0JYUnlJUVVMSUFBZ0J6WUNGQXNnQUNnQ0dDRUJJQUFnQlVFWWRpSUhRZjhCUmpZQ0dDQUFJQWtnQlVFUWRrSC9BWEVpQ0VIL0FVWWlDaUFGUVFoMlFmOEJjU0lMUWY4QlJpSU1JQUVnQlVIL0FYRWlCRUgvQVVZaUFtcHFhaUlCYTBFZ2FpSUROZ0lRSUFBZ0FDa0RDQ0FFUVFkQkNDQUNHM1FnQzNKQkIwRUlJQXdiZENBSWNrRUhRUWdnQ2h0MElBZHlyU0FCSUFsclFTQnFyWWFFTndNSVFRQWhCU0FEUVFaSURRRUxJQUFvQWh3aUFVRUNkRUdnblFGcUtBSUFJUUlDZmlBQUtRTUlJZzVDQUZNRVFFRU1JQUZCQVdvZ0FVRUxUaHNoQkNBRFFRRnJJUU5CZnlBQ2RFRi9jMEVCZENFQlFnRU1BUXNnQVVFQmEwRUFJQUZCQVVvYklRUWdEa0UvSUFKcnJZaW5RWDhnQW5SQmYzTnhRUUYwUVFGeUlRRWdBeUFDUVFGcUlnSnJJUU1nQXEwTElROGdBQ0FETmdJUUlBQWdCRFlDSENBQUlBNGdENFkzQXdnZ0FDQUJyQ0FBS1FNb1FrQ0RoRGNES0VFQklRVWdBMEVHU0EwQUlBQW9BaHdpQVVFQ2RFR2duUUZxS0FJQUlRSUNmaUFBS1FNSUlnNUNBRk1FUUVFTUlBRkJBV29nQVVFTFRoc2hCQ0FEUVFGcklRTkJmeUFDZEVGL2MwRUJkQ0VCUWdFTUFRc2dBVUVCYTBFQUlBRkJBVW9iSVFRZ0RrRS9JQUpycllpblFYOGdBblJCZjNOeFFRRjBRUUZ5SVFFZ0F5QUNRUUZxSWdKcklRTWdBcTBMSVE4Z0FDQUROZ0lRSUFBZ0JEWUNIQ0FBSUE0Z0Q0WTNBd2dnQUNBQUtRTW9RdjlBZ3lBQnJFSUhob1EzQXloQkFpRUZJQU5CQmtnTkFDQUFLQUljSWdGQkFuUkJvSjBCYWlnQ0FDRUNBbjRnQUNrRENDSU9RZ0JUQkVCQkRDQUJRUUZxSUFGQkMwNGJJUVFnQTBFQmF5RURRWDhnQW5SQmYzTkJBWFFoQVVJQkRBRUxJQUZCQVd0QkFDQUJRUUZLR3lFRUlBNUJQeUFDYTYySXAwRi9JQUowUVg5emNVRUJkRUVCY2lFQklBTWdBa0VCYWlJQ2F5RURJQUt0Q3lFUElBQWdBellDRUNBQUlBUTJBaHdnQUNBT0lBK0dOd01JSUFBZ0FDa0RLRUwvLzBDRElBR3NRZzZHaERjREtFRURJUVVnQTBFR1NBMEFJQUFvQWh3aUFVRUNkRUdnblFGcUtBSUFJUUlDZmlBQUtRTUlJZzVDQUZNRVFFRU1JQUZCQVdvZ0FVRUxUaHNoQkNBRFFRRnJJUU5CZnlBQ2RFRi9jMEVCZENFQlFnRU1BUXNnQVVFQmEwRUFJQUZCQVVvYklRUWdEa0UvSUFKcnJZaW5RWDhnQW5SQmYzTnhRUUYwUVFGeUlRRWdBeUFDUVFGcUlnSnJJUU1nQXEwTElROGdBQ0FETmdJUUlBQWdCRFlDSENBQUlBNGdENFkzQXdnZ0FDQUFLUU1vUXYvLy8wQ0RJQUdzUWhXR2hEY0RLRUVFSVFVZ0EwRUdTQTBBSUFBb0Fod2lBVUVDZEVHZ25RRnFLQUlBSVFJQ2ZpQUFLUU1JSWc1Q0FGTUVRRUVNSUFGQkFXb2dBVUVMVGhzaEJDQURRUUZySVFOQmZ5QUNkRUYvYzBFQmRDRUJRZ0VNQVFzZ0FVRUJhMEVBSUFGQkFVb2JJUVFnRGtFL0lBSnJyWWluUVg4Z0FuUkJmM054UVFGMFFRRnlJUUVnQXlBQ1FRRnFJZ0pySVFNZ0FxMExJUThnQUNBRE5nSVFJQUFnQkRZQ0hDQUFJQTRnRDRZM0F3Z2dBQ0FBS1FNb1F2Ly8vLzlBZ3lBQnJFSWNob1EzQXloQkJTRUZJQU5CQmtnTkFDQUFLQUljSWdGQkFuUkJvSjBCYWlnQ0FDRUNBbjRnQUNrRENDSU9RZ0JUQkVCQkRDQUJRUUZxSUFGQkMwNGJJUVFnQTBFQmF5RURRWDhnQW5SQmYzTkJBWFFoQVVJQkRBRUxJQUZCQVd0QkFDQUJRUUZLR3lFRUlBNUJQeUFDYTYySXAwRi9JQUowUVg5emNVRUJkRUVCY2lFQklBTWdBa0VCYWlJQ2F5RURJQUt0Q3lFUElBQWdBellDRUNBQUlBUTJBaHdnQUNBT0lBK0dOd01JSUFBZ0FDa0RLRUwvLy8vLy8wQ0RJQUd0UWlPR2hEY0RLRUVHSVFVZ0EwRUdTQTBBSUFBb0Fod2lBVUVDZEVHZ25RRnFLQUlBSVFJQ2ZpQUFLUU1JSWc1Q0FGTUVRRUVNSUFGQkFXb2dBVUVMVGhzaEJDQURRUUZySVFOQmZ5QUNkRUYvYzBFQmRDRUJRZ0VNQVFzZ0FVRUJhMEVBSUFGQkFVb2JJUVFnRGtFL0lBSnJyWWluUVg4Z0FuUkJmM054UVFGMFFRRnlJUUVnQXlBQ1FRRnFJZ0pySVFNZ0FxMExJUThnQUNBRE5nSVFJQUFnQkRZQ0hDQUFJQTRnRDRZM0F3Z2dBQ0FBS1FNb1F2Ly8vLy8vLzBDRElBR3RRaXFHaERjREtFRUhJUVVnQTBFR1NBMEFJQUFvQWh3aUFVRUNkRUdnblFGcUtBSUFJUUlDZmlBQUtRTUlJZzVDQUZNRVFFRU1JQUZCQVdvZ0FVRUxUaHNoQkNBRFFRRnJJUU5CZnlBQ2RFRi9jMEVCZENFQlFnRU1BUXNnQVVFQmEwRUFJQUZCQVVvYklRUWdEa0UvSUFKcnJZaW5RWDhnQW5SQmYzTnhRUUYwUVFGeUlRRWdBeUFDUVFGcUlnSnJJUU1nQXEwTElROGdBQ0FETmdJUUlBQWdCRFlDSENBQUlBNGdENFkzQXdnZ0FDQUFLUU1vUXYvLy8vLy8vLzlBZ3lBQnJVSXhob1EzQXloQkNDRUZDeUFBSUFWQkFXczJBaUFnQUNBQUtRTW9JZzVDQjRnM0F5Z2dEcWRCL3dCeEN5SUJBWDhnQUFSQUlBQW9BZ3dpQVFSQUlBRVFFQ0FBUVFBMkFnd0xJQUFRRUFzTGlnRUNBWDRGZndKQUlBQkNnSUNBZ0JCVUJFQWdBQ0VDREFFTEEwQWdBVUVCYXlJQklBQkNDb0FpQWtMMkFYNGdBSHluUVRCeU9nQUFJQUJDLy8vLy81OEJWaUVHSUFJaEFDQUdEUUFMQ3lBQ1FnQlNCRUFnQXFjaEF3TkFJQUZCQVdzaUFTQURRUXB1SWdSQjlnRnNJQU5xUVRCeU9nQUFJQU5CQ1VzaEJ5QUVJUU1nQncwQUN3c2dBUXY1NGdFRWVuOEdld2grQVgwakFFRVFheUpPSkFBQ1FDQUFMUUFJUVlBQmNVVU5BQ0FBS0FMTUFTQUJSdzBBSUFBb0Fwd0JJQUZCakN4c2FpSlBLQUxjS3lJVlJRUkFJRThRTGd3QkN5QUFLQUxJQVJvZ0FDZ0MwQUVoR1NBQUtBSk1JZ2RGQkVBZ0FDZ0NTQ0VIQ3lBSEtBSUFJUVlnQnlnQ0JDRUxJQWNvQWdnaENTQUhLQUlNSVEwZ0FDZ0NQQ0VISUFBb0FrQWhDQ0JQS0FMZ0t5RUtJd0JCRUdzaVFDUUFJQmtnQVRZQ0pDQVpLQUljS0FKTUlRd2dHVUVCTmdKQUlCa2dEVFlDUENBWklBazJBamdnR1NBTE5nSTBJQmtnQmpZQ01DQVpJQXdnQVVHTUxHeHFOZ0lnSUJrb0FrUVFFRUVBSVFzZ0dVRUFOZ0pFQWtBZ0J3UkFRUVFnR1NnQ0dDZ0NFQkFUSWd0RkJFQU1BZ3RCQUNFTlFRQWhDU0FIUVFSUEJFQWdCMEY4Y1NFTVFRQWhBUU5BSUFzZ0NDQUpRUUowYWlJR0tBSUFRUUowYWtFQk5nSUFJQXNnQmlnQ0JFRUNkR3BCQVRZQ0FDQUxJQVlvQWdoQkFuUnFRUUUyQWdBZ0N5QUdLQUlNUVFKMGFrRUJOZ0lBSUFsQkJHb2hDU0FCUVFScUlnRWdERWNOQUFzTElBZEJBM0VpQVFSQUEwQWdDeUFJSUFsQkFuUnFLQUlBUVFKMGFrRUJOZ0lBSUFsQkFXb2hDU0FOUVFGcUlnMGdBVWNOQUFzTElCa2dDellDUkFzQ1FBSkFJQmtvQWhnaUJpZ0NFQ0lOUlEwQVFRQWhDUUpBQTBBQ1FDQUxCRUFnQ3lBSlFRSjBhaWdDQUVVTkFRc2dCaWdDR0NBSlFUUnNhaUlCTlFJRUlvWUJRZ0Y5SW9vQklCazFBang4SUlZQmdDR0xBU0FCTlFJQUlvY0JRZ0Y5SW9nQklCazFBamg4SUljQmdDR01BU0NLQVNBWk5RSTBmQ0NHQVlBaGhnRWdHU2dDRkNnQ0FDZ0NGQ0FKUWN3QWJHb2lBU2dDRkNBQktBSVlheUlIUVI5TERRQUNRQ0NJQVNBWk5RSXdmQ0NIQVlDbklnZ2dBU2dDQUdzaURFRUFJQWdnREU4YklBZDJEUUFnaGdHbklnZ2dBU2dDQkdzaURFRUFJQWdnREU4YklBZDJEUUFnQVNnQ0NDSUlJSXdCcDJzaURFRUFJQWdnREU4YklBZDJEUUFnQVNnQ0RDSUJJSXNCcDJzaUNFRUFJQUVnQ0U4YklBZDJSUTBCQ3lBWlFRQTJBa0FNQWdzZ0NVRUJhaUlKSUExSERRQUxJQmtvQWtCRkRRQWdEVVVOQVVFQUlRMERRQ0FaS0FJVUtBSUFLQUlVSUExQnpBQnNhaUlCS0FJY0lBRW9BaGhCbUFGc2FpSUhRWlFCYXlnQ0FDRUdJQWRCakFGcktBSUFJUXNnQjBHWUFXc29BZ0FoQ1NBSFFaQUJheWdDQUNFSUFrQWdHU2dDUkNJSEJFQWdCeUFOUVFKMGFpZ0NBRVVOQVFzZ0N5QUdheUVISUFnZ0NXc2hDUUpBSUFZZ0MwWU5BQ0FIclNBSnJYNUNJSWhRRFFBZ0JVRUJRWlFXUVFBUUR3d0dDeUFISUFsc0lnZEJnSUNBZ0FSUEJFQWdCVUVCUVpRV1FRQVFEd3dHQ3lBQklBZEJBblFpQnpZQ0xBSi9Ba0FDUUFKQUlBRW9BaVFpQmdSQUlBY2dBU2dDTUUwTkJTQUJLQUlvRFFFTElBRWdCeEFZSWdjMkFpUWdCMEVCSUFFb0Fpd2lCeHRGRFFFZ0FTQUhOZ0l3SUFGQktHb01Bd3NnQmhBUUlBRWdBU2dDTEJBWUlnYzJBaVFnQncwQklBRkJBRFlDTUNBQlFnQTNBaWdMSUFWQkFVR1VGa0VBRUE4TUJ3c2dBU0FCS0FJc05nSXdJQUZCS0dvTFFRRTJBZ0FMSUExQkFXb2lEU0FaS0FJWUlnWW9BaEJKRFFBTERBRUxJQTFGRFFBZ0JpZ0NHQ0VQSUJrb0FoUW9BZ0FvQWhRaEZrRUFJUUVEUUFKQUlBc0VRQ0FMSUFGQkFuUnFLQUlBUlEwQkN5QVdJQUZCekFCc2FpSUhJQWNvQWdBaUNTQVBJQUZCTkd4cUlnZzFBZ0FpaGdGQ0FYMGlpZ0VnR1RVQ01Id2doZ0dBcHlJTUlBa2dERXNiSWdrMkFqZ2dCeUFIS0FJRUlnd2dDRFVDQkNLSEFVSUJmU0tMQVNBWk5RSTBmQ0NIQVlDbklnZ2dDQ0FNU1JzaUNEWUNQQ0FISUFjb0FnZ2lEQ0NLQVNBWk5RSTRmQ0NHQVlDbkloY2dEQ0FYU1JzaUREWUNRQ0FISUFjb0Fnd2lGeUNMQVNBWk5RSThmQ0NIQVlDbklnNGdEaUFYU3hzaUZ6WUNSQ0FKSUF4TERRTWdDQ0FYU3cwRElBY29BaFFpRGtVTkFDQU9yU0dMQVNBWHJTR0lBU0FNclNHTUFTQUlyU0dOQVNBSnJTR0pBU0FIS0FJY0lRbENBQ0dIQVFOQUlBa2dod0duSWdoQm1BRnNhaUlIUW44Z0RpQUlRWDl6YXEwaWhnR0dRbitGSW9vQklJZ0JmQ0NHQVlnK0FwUUJJQWNnaWdFZ2pBRjhJSVlCaUQ0Q2tBRWdCeUNLQVNDTkFYd2doZ0dJUGdLTUFTQUhJSWtCSUlvQmZDQ0dBWWcrQW9nQklJY0JRZ0Y4SW9jQklJc0JVZzBBQ3dzZ0FVRUJhaUlCSUExSERRQUxDeUJBUVFBMkFnZ2dHU2dDSENFQlFRRkJDQkFUSWhzRVFDQWJJQUUyQWdRZ0d5QUdOZ0lBQ3lBYlJRMEJJQmtvQWlRaEVTQVpLQUlVS0FJQUlTQWpBRUh3QUdzaUV5UUFJQkZCakN4c0lnRWdHeWdDQkNJSUtBSk1haUljS0FLa0F5RW9BbjhnR3lnQ0FDSWVJUmNnQlNFelFRQWhEU01BUVNCcklnOGtBQ0FCSUFnb0FreHFJaDBvQXFRRElSZ0NRQ0FYS0FJUUloWkJrQVJzRUJRaURFVU5BQUpBSUJaQkFuUVFGQ0lMUlFSQUlBd2hDd3dCQ3dKL0lBZ29Ba3dnRVVHTUxHeHFJZ2tvQXFRRElocEJBV29pQVVId0FSQVRJZ2NFUUFKQUlBRUVRQ0FYS0FJUUlRNGdCeUVCQTBBZ0FTQXpOZ0xzQVNBQklBNUJFQkFUSWdZMkFzZ0JJQVpGRFFJZ0FTQVhLQUlRSWg4MkFzUUJRUUFoQmtFQUlRNGdId1JBQTBBZ0FTZ0N5QUVnQmtFRWRHb2lEaUFKS0FMUUt5QUdRYmdJYkdvaUh5Z0NCRUVRRUJNaUlUWUNEQ0FoUlEwRUlBNGdIeWdDQkRZQ0NDQUdRUUZxSWdZZ0Z5Z0NFQ0lPU1EwQUN3c2dBVUh3QVdvaEFTQVNJQnBHSVhNZ0VrRUJhaUVTSUhORkRRQUxDeUFIREFJTElBY29BZ1FpQVFSQUlBRVFFQ0FIUVFBMkFnUUxJQWNoQVVFQUlRa0RRQ0FCS0FMSUFTSUdCRUJCQUNFT0lBRW9Bc1FCSWhJRWZ3TkFJQVlvQWd3aUh3UkFJQjhRRUNBR1FRQTJBZ3dnQVNnQ3hBRWhFZ3NnQmtFUWFpRUdJQTVCQVdvaURpQVNTUTBBQ3lBQktBTElBUVVnQmdzUUVDQUJRUUEyQXNnQkN5QUJRZkFCYWlFQklBa2dHa1loZENBSlFRRnFJUWtnZEVVTkFBc2dCeEFRQzBFQUN5SUhCRUFDUUNBV1JRMEFRUUFoQ1NBTUlRWWdGa0VFVHdSQUlBWWdGa0Y4Y1NJSlFaQUViR29oQmlBTUlRRURRQ0FMSUJCQkFuUnFJQUg5RWYwTUFBQUFBQkFDQUFBZ0JBQUFNQVlBQVAydUFmMExBZ0FnQVVIQUVHb2hBU0FRUVFScUloQWdDVWNOQUFzZ0NTQVdSZzBCQ3dOQUlBc2dDVUVDZEdvZ0JqWUNBQ0FHUVpBRWFpRUdJQWxCQVdvaUNTQVdSdzBBQ3dzZ0N5RU9RUUFoRWlBSUtBSk1JQkZCakN4c2FpZ0MwQ3NoQVNBWEtBSVlJUWtnRHlBSUtBSUVJQWdvQWd3Z0VTQVJJQWdvQWhnaUJtNGlDeUFHYkd0c2FpSUdJQmNvQWdBaUVDQUdJQkJMR3pZQ0ZDQVBRWDhnQmlBSUtBSU1haUlRSUFZZ0VFc2JJZ1lnRnlnQ0NDSVFJQVlnRUVrYk5nSVFJQThnQ0NnQ0NDQUlLQUlRSUF0c2FpSUdJQmNvQWdRaUN5QUdJQXRMR3pZQ0RDQVBRWDhnQmlBSUtBSVFhaUlMSUFZZ0Mwc2JJZ1lnRnlnQ0RDSUxJQVlnQzBrYk5nSUlJQTlCQURZQ0dDQVBRUUEyQWh3Z0QwSC8vLy8vQnpZQ0JDQVBRZi8vLy84SE5nSUFJQmNvQWhBRVFBTkFJQTRFZnlBT0lCSkJBblJxS0FJQUJVRUFDeUVMSUFrMUFnUWloZ0ZDQVgwaWlnRWdEelVDQ0h3Z2hnR0FJWXNCSUFrMUFnQWlod0ZDQVgwaWlBRWdEelVDRUh3Z2h3R0FJWXdCSUlvQklBODFBZ3g4SUlZQmdDR0dBU0NJQVNBUE5RSVVmQ0NIQVlBaGh3RWdBU2dDQkNJSUlBOG9BaHhMQkVBZ0R5QUlOZ0ljSUFFb0FnUWhDQXNnQ0FSQUlJc0JRdi8vLy84UGd5R0tBU0NNQVVMLy8vLy9ENE1oaXdFZ2hnRkMvLy8vL3crRElZZ0JJSWNCUXYvLy8vOFBneUdNQVNBQlFiQUhhaUVmSUFGQnJBWnFJU0ZCQUNFYUEwQWdIeUFhUVFKMEloQnFLQUlBSVFZZ0VDQWhhaWdDQUNFUlFRQWhFQ0FMQkVBZ0N5QUdOZ0lFSUFzZ0VUWUNBQ0FMUVFocUlSQUxBa0FnRVNBSVFRRnJJZ2hxSWd0Qkgwc05BQ0FKS0FJQUlpSkJmeUFMZGtzTkFDQVBJQThvQWdRaUp5QWlJQXQwSWdzZ0N5QW5TeHMyQWdRTEFrQWdCaUFJYWlJTFFSOUxEUUFnQ1NnQ0JDSWlRWDhnQzNaTERRQWdEeUFQS0FJQUlpY2dJaUFMZENJTElBc2dKMHNiTmdJQUMwRUFJUXNnaWdGQ2Z5QUlyU0tHQVlaQ2Y0VWlod0Y4SUlZQmlDS05BVUwvLy8vL0Q0TkNBU0FHclNLSkFZWjhRZ0Y5SUlrQmlLY2dod0VnaUFGOElJWUJpS2NpSWlBR2RtdEJmeUFHZG5GQkFDQWlJSTBCcDBjYklRWWdod0VnaXdGOElJWUJpQ0tOQVVMLy8vLy9ENE5DQVNBUnJTS0pBWVo4UWdGOUlJa0JpS2NnaHdFZ2pBRjhJSVlCaUtjaUlpQVJkbXRCZnlBUmRuRkJBQ0FpSUkwQnAwY2JJUkVnRUFSQUlCQWdCallDQkNBUUlCRTJBZ0FnRUVFSWFpRUxDeUFHSUJGc0lnWWdEeWdDR0VzRVFDQVBJQVkyQWhnTElCcEJBV29pR2lBQktBSUVTUTBBQ3dzZ0NVRTBhaUVKSUFGQnVBaHFJUUVnRWtFQmFpSVNJQmNvQWhCSkRRQUxDeUFZUVFGcUlTRWdEeWdDSENFUklBOG9BaGdoRWlBSFFRQTJBZ1FDUUNBZEtBSUlRUUZxSWdHdElCRWdFaUFXYkNJaWJDSWFyWDVDSUloUUJFQWdCeUFCSUJwc0lnRTJBZ2dnQnlBQlFRSVFFeUlCTmdJRUlBRU5BUXNnREJBUUlBNFFFQ0FIS0FJRUlnRUVRQ0FCRUJBZ0IwRUFOZ0lFQ3lBaFJRUkFJQWNoQ3d3REMwRUFJUXNnQnlFQkEwQWdBU2dDeUFFaUNRUkFRUUFoQmlBQktBTEVBU0lRQkg4RFFDQUpLQUlNSWdnRVFDQUlFQkFnQ1VFQU5nSU1JQUVvQXNRQklSQUxJQWxCRUdvaENTQUdRUUZxSWdZZ0VFa05BQXNnQVNnQ3lBRUZJQWtMRUJBZ0FVRUFOZ0xJQVFzZ0FVSHdBV29oQVNBTElCaEdJWFVnQzBFQmFpRUxJSFZGRFFBTElBY2hDd3dDQ3lBWEtBSVlJUmNnQnlBUEtBSVVJaWMyQXN3QklBY2dEeWdDRENJd05nTFFBU0FISUE4b0FoQWlMVFlDMUFFZ0J5QVBLQUlJSWlzMkF0Z0JJQWNnR2pZQ0RDQUhJQ0kyQWhBZ0J5QVNOZ0lVUVFFaEh5QUhRUUUyQWhnZ0ZnUkFJQWNvQXNnQklRRkJBQ0VJSUJjaEN3TkFJQTRnQ0VFQ2RHb29BZ0FoQ1NBQklBc29BZ0EyQWdBZ0FTQUxLQUlFTmdJRUFrQWdBU2dDQ0NJTlJRMEFJQUVvQWd3aEJpQU5RUUZIQkVBZ0RVRitjU0V2UVFBaEVBTkFJQVlnQ1NnQ0FEWUNBQ0FHSUFrb0FnUTJBZ1FnQmlBSktBSUlOZ0lJSUFZZ0NTZ0NERFlDRENBR0lBa29BaEEyQWhBZ0JpQUpLQUlVTmdJVUlBWWdDU2dDR0RZQ0dDQUdJQWtvQWh3MkFod2dCa0VnYWlFR0lBbEJJR29oQ1NBUVFRSnFJaEFnTDBjTkFBc0xJQTFCQVhGRkRRQWdCaUFKS0FJQU5nSUFJQVlnQ1NnQ0JEWUNCQ0FHSUFrb0FnZzJBZ2dnQmlBSktBSU1OZ0lNQ3lBTFFUUnFJUXNnQVVFUWFpRUJJQWhCQVdvaUNDQVdSdzBBQ3dzZ0lVRUJTd1JBSUFjaERRTkFJQTBnS3pZQ3lBTWdEU0F0TmdMRUF5QU5JREEyQXNBRElBMGdKellDdkFNZ0RVRUJOZ0tJQWlBTklCSTJBb1FDSUEwZ0lqWUNnQUlnRFNBYU5nTDhBU0FXQkVBZ0RTZ0N1QU1oQVVFQUlRZ2dGeUVMQTBBZ0RpQUlRUUowYWlnQ0FDRUpJQUVnQ3lnQ0FEWUNBQ0FCSUFzb0FnUTJBZ1FDUUNBQktBSUlJaUZGRFFBZ0FTZ0NEQ0VHSUNGQkFVY0VRQ0FoUVg1eElTOUJBQ0VRQTBBZ0JpQUpLQUlBTmdJQUlBWWdDU2dDQkRZQ0JDQUdJQWtvQWdnMkFnZ2dCaUFKS0FJTU5nSU1JQVlnQ1NnQ0VEWUNFQ0FHSUFrb0FoUTJBaFFnQmlBSktBSVlOZ0lZSUFZZ0NTZ0NIRFlDSENBR1FTQnFJUVlnQ1VFZ2FpRUpJQkJCQW1vaUVDQXZSdzBBQ3dzZ0lVRUJjVVVOQUNBR0lBa29BZ0EyQWdBZ0JpQUpLQUlFTmdJRUlBWWdDU2dDQ0RZQ0NDQUdJQWtvQWd3MkFnd0xJQXRCTkdvaEN5QUJRUkJxSVFFZ0NFRUJhaUlJSUJaSERRQUxDeUFOSUEwcEFnUTNBdlFCSUJnZ0gwY2hkaUFOUWZBQmFpRU5JQjlCQVdvaEh5QjJEUUFMQ3lBTUVCQWdEaEFRSUIwb0FxUURJUXNDUUNBZExRQ0lMRUVFY1FSQUlBdEJmMFlOQVNBZFFhZ0RhaUVHSUIwb0FnZ2hBVUVBSVJBZ0J5RUpBMEFnQmlnQ0pDRU5JQWxCQVRZQ0xDQUpJQTAyQWxRZ0NTQUdLQUlBTmdJd0lBWW9BZ1FoRFNBSlFnQTNBa1FnQ1NBTk5nSTBJQWtnQmlnQ0REWUNQQ0FKSUFZb0FoQTJBa0FnQmlnQ0NDRU5JQWtnRWpZQ1RDQUpJQTBnQVNBQklBMUxHellDT0NBR1FaUUJhaUVHSUFsQjhBRnFJUWtnQ3lBUVJpRjNJQkJCQVdvaEVDQjNSUTBBQ3d3QkN5QUxRWDlHRFFBZ0hTZ0NDQ0VHSUIwb0FnUWhEU0FISVFrZ0N3UkFJQXRCQVdwQmZuRWhDRUVBSVFFRFFDQUpRZ0EzQWtRZ0NVRUFOZ0kwSUFsQ0FUY0NMQ0FKSUEwMkFsUWdDU0FSTmdJOElBa2dEVFlDeEFJZ0NTQVNOZ0pNSUFrZ0JqWUNPQ0FKUWdBM0FyUUNJQWxCQURZQ3BBSWdDVUlCTndLY0FpQUpJQkUyQXF3Q0lBa2dCallDcUFJZ0NTQVNOZ0s4QWlBSklBa29Bc1FCTmdKQUlBa2dDU2dDdEFNMkFyQUNJQWxCNEFOcUlRa2dBVUVDYWlJQklBaEhEUUFMQ3lBTFFRRnhEUUFnQ1VJQU53SkVJQWxCQURZQ05DQUpRZ0UzQWl3Z0NTQU5OZ0pVSUFrZ0VUWUNQQ0FKSUJJMkFrd2dDU0FHTmdJNElBa2dDU2dDeEFFMkFrQUxJQWNoRFF3Q0N5QU1FQkFMSUFzUUVBc2dEMEVnYWlRQVFRQWdEU0lIUlEwQUdpQW9RUUZxSVE0Z0ZTRWRJQWNoQ3dKQUFrQURRQ0FMS0FKVVFYOUdEUUlnSGlnQ0VFRUNkQkFVSWdGRkRRSWdBVUVCSUI0b0FoQkJBblFRRlNFSklBc1FWd1JBQTBBZ0lDZ0NGQ0VJQWtBQ1FDQUxLQUlvSUJ3b0FneFBEUUFnQ3lnQ0lDSUJJQWdnQ3lnQ0hFSE1BR3hxSWdZb0FoaFBEUUFnQmlnQ0hDQUJRWmdCYkdvaURTZ0NHRVVOQUNBTlFSeHFJUWhCQUNFQkFrQURRQ0FaSUFzb0Fod2dDeWdDSUNBSUlBRkJKR3hxSWdZb0FoQWdCaWdDRkNBTEtBSWtRU2hzYWlJR0tBSUFJQVlvQWdRZ0JpZ0NDQ0FHS0FJTUVEbEZCRUFnQVVFQmFpSUJJQTBvQWhoSkRRRU1BZ3NMSUFrZ0N5Z0NIRUVDZEdwQkFEWUNBQ0FUUVFBMkFtZ2dHeWdDQkNBZ0tBSVVJQndnQ3lBVFFld0FhaUFkSUJOQjZBQnFJQW9nTXhCV1JRMEdJQXNvQWlBaENDQUxLQUljSVJZZ0V5Z0NhQ0VhSUJNb0Ftd0VRQ0FUUVFBMkFtZ2dJQ2dDRkNBV1Fjd0FiR29vQWh3Z0NFR1lBV3hxSWg4b0FoZ2lBUVIvSUFvZ0dtc2hHQ0FLSUIxcUlTRWdIMEVjYWlFTVFRQWhFVUVBSVE4Z0dpQWRhaUlpSVJJRFFBSkFJQXdvQWdnZ0RDZ0NBRVlOQUNBTUtBSU1JQXdvQWdSR0RRQWdEQ2dDRkNBTEtBSWtRU2hzYWlJR0tBSVVJQVlvQWhCc0lpaEZEUUFnQmlnQ0dDRUJRUUFoRmdOQUlBOEVRQ0FCUVFBMkFqUUxJQUVvQWlRaUZ3UkFJQUVvQWdBaENBSkFJQUVnQVNnQ0tDSUdCSDhnQ0NBR1FSaHNhaUlJUVJScktBSUFJQWhCREdzb0FnQkhCRUFnQ0VFWWF5RUlEQUlMSUFaQkFXb0ZRUUVMTmdJb0N3SkFBMEFDUUFKQUFrQWdDQ2dDRkNJTklCSkJmM05MRFFBZ0R3MEFJQTBnRW1vZ0lVME5BUXNnQ3lnQ0hDRUdJQXNvQWlBaEZ5QUxLQUlrSVE4Z0d5Z0NCQ2dDYUFSQUlCTWdCallDV0NBVElCYzJBbFFnRXlBUk5nSlFJQk1nRHpZQ1RDQVRJQlkyQWtnZ0V5QVlOZ0pFSUJNZ0RUWUNRQ0F6UVFGQjh1MEFJQk5CUUdzUUR3d1JDeUFUSUFZMkFqZ2dFeUFYTmdJMElCTWdFVFlDTUNBVElBODJBaXdnRXlBV05nSW9JQk1nR0RZQ0pDQVRJQTAyQWlBZ00wRUNRZkx0QUNBVFFTQnFFQThnQVVFQU5nSTBJQWdnQ0NnQ0VDSUdJQWdvQWdScU5nSUVJQUVnQVNnQ0pDSU5JQVpySWhjMkFpUkJBU0VQSUFZZ0RVWU5BU0FCSUFFb0FpaEJBV29pQ0RZQ0tBd0RDeUFCS0FJRUlSQWdBU2dDTkNJUElBRW9BamhIQkg4Z0Z3VWdFQ0FQUVFGMFFRRnlJZ1pCQTNRUUZ5SVFSUVJBSUROQkFVR0FDRUVBRUE4TUVRc2dBU0FHTmdJNElBRWdFRFlDQkNBQktBSTBJUThnQ0NnQ0ZDRU5JQUVvQWlRTElRWWdFQ0FQUVFOMGFpSVhJQTAyQWdRZ0Z5QVNOZ0lBSUFFZ0QwRUJhallDTkNBSUlBZ29BZ0FnRFdvMkFnQWdDQ0FJS0FJUUloQWdDQ2dDQkdvaUR6WUNCQ0FCSUFZZ0VHc2lGellDSkNBSUlBODJBZ2dnRFNBU2FpRVNRUUFoRHlBR0lCQkdEUUFnQVNBQktBSW9RUUZxTmdJb0lBaEJHR29oQ0FzZ0Z3MEFDeUFCS0FJb0lRZ0xJQUVnQ0RZQ0xBc2dBVUZBYXlFQklCWkJBV29pRmlBb1J3MEFDeUFmS0FJWUlRRUxJQXhCSkdvaERDQVJRUUZxSWhFZ0FVa05BQXNnQ3lnQ0hDRVdJQXNvQWlBaENDQVlJQklnSW1zZ0R4c0ZRUUFMSUJwcUlSb0xJQjRvQWhnZ0ZrRTBiR29pQVNBSUlBRW9BaVFpQVNBQklBaEpHellDSkF3Q0N5QWdLQUlVSVFnTElCTkJBRFlDYUNBYktBSUVJQWdnSENBTElCTkI3QUJxSUIwZ0UwSG9BR29nQ2lBekVGWkZEUVFnQ3lnQ0hDRVdJQk1vQW1naEdpQVRLQUpzUlEwQUFrQWdJQ2dDRkNBV1Fjd0FiR29vQWh3Z0N5Z0NJQ0lpUVpnQmJHb2lBU2dDR0NJb1JRUkFRUUFoRnd3QkN5QUtJQnBySVJBZ0FVRWNhaUVNSUFzb0FpUWhJVUVBSVJkQkFDRVlBMEFDUUNBTUtBSUlJQXdvQWdCR0RRQWdEQ2dDRENBTUtBSUVSZzBBSUF3b0FoUWdJVUVvYkdvaUFTZ0NGQ0FCS0FJUWJDSW5SUTBBSUFFb0FoZ2hFVUVBSVI4RFFDQVJLQUlrSWdFRVFDQVJLQUlBSVFnQ1FDQVJJQkVvQWlnaUVnUi9JQWdnRWtFWWJHb2lDRUVVYXlnQ0FDQUlRUXhyS0FJQVJ3UkFJQWhCR0dzaENBd0NDeUFTUVFGcUJVRUJDeUlTTmdJb0N3SkFBa0FnQ0NnQ0ZDSVBJQmRxSWcwZ0Qwa05BQ0FOSUJCTERRQURRQ0FOSVJjZ0NDQUlLQUlRSWcwZ0NDZ0NCR28yQWdRZ0FTQU5heUVHSUFFZ0RVWU5BaUFSSUJKQkFXb2lFallDS0NBSUtBSXNJZzhnRjJvaURTQVBUd1JBSUFoQkdHb2hDQ0FHSVFFZ0RTQVFUUTBCQ3dzZ0VTQUdOZ0lrQ3lBYktBSUVLQUpvSVFFZ0V5QVdOZ0lZSUJNZ0lqWUNGQ0FUSUJnMkFoQWdFeUFoTmdJTUlCTWdIellDQ0NBVElCQTJBZ1FnRXlBUE5nSUFJRE5CQVVFQ0lBRWJRWjN0QUNBVEVBOGdBUTBLSUFzb0Fod2hGZ3dGQ3lBUklBWTJBaVFMSUJGQlFHc2hFU0FmUVFGcUloOGdKMGNOQUFzTElBeEJKR29oRENBWVFRRnFJaGdnS0VjTkFBc0xJQmNnR21vaEdnc0NRQ0FKSUJaQkFuUnFLQUlBUlEwQUlCNG9BaGdnRmtFMGJHb2lBU2dDSkEwQUlBRWdJQ2dDRkNBV1Fjd0FiR29vQWhoQkFXczJBaVFMSUFvZ0dtc2hDaUFhSUIxcUlSMGdDeEJYRFFBTEN5QUpFQkFnQzBId0FXb2hDeUFqUVFGcUlpTWdIQ2dDcEFOTkRRQUxJQWNnRGhBNklFQWdIU0FWYXpZQ0NFRUJEQUlMSUFjZ0RoQTZJQWtRRUVFQURBRUxJQWNnRGhBNlFRQUxJWGdnRTBId0FHb2tBQ0FiRUN3Z2VFVU5BU0FaS0FJZ0tBTFFLeUVKSUJrb0FoUW9BZ0FpRmlnQ0ZDRWRJRUJCQVRZQ0RFRUFJUTFCQUNFVklCa29BaUFpQVNnQ0RDQUJLQUlJUmdSQUlBa29BaEJCQkhaQkFYRWhGUXNDUUNBV0tBSVFJakZGRFFBRFFBSkFJQmtvQWtRaUFRUkFJQUVnRFVFQ2RHb29BZ0JGRFFFTElFQkJER29oRTBFQUlURUNRQ0FkS0FJWUlnRkZEUUFnR1NnQ0xDRVFBMEFnSFNnQ0hDQXhRWmdCYkdvaURDZ0NHQ0lMQkVBZ0RFRWNhaUVTSUF3b0FoUWhBU0FNS0FJUUlSZEJBQ0VPQTBBZ0FTQVhiQVJBSUJJZ0RrRWtiR29oRDBFQUlRZ0RRQ0FaSUIwb0FoQWdNU0FQS0FJUUlBOG9BaFFnQ0VFb2JHb2lCeWdDQUNBSEtBSUVJQWNvQWdnZ0J5Z0NEQkE1SVFZZ0J5Z0NGQ0lMSUFjb0FoQWlDbXdoQVFKQUlBWUVRQ0FCUlEwQlFRQWhDZ05BQWtBZ0dTQWRLQUlRSURFZ0R5Z0NFQ0FIS0FJWUlBcEJCblJxSWdZb0FnZ2dCaWdDRENBR0tBSVFJQVlvQWhRUU9VVUVRQ0FHS0FJOElnRkZEUUVnQVJBUUlBWkJBRFlDUEF3QkN5QVpLQUpBUlFSQUlBWW9BandOQVNBR0tBSVFJQVlvQWdoR0RRRWdCaWdDRkNBR0tBSU1SZzBCQzBFQlFTd1FFeUlCUlFSQUlFQkJBRFlDREF3S0N5QVpLQUpBSVFzZ0FVRUFOZ0lrSUFFZ0V6WUNIQ0FCSUFrMkFoUWdBU0FkTmdJUUlBRWdEellDRENBQklBWTJBZ2dnQVNBeE5nSUVJQUVnQ3pZQ0FDQUJJQlUyQWlnZ0FTQXpOZ0lnSUFFZ0VDZ0NCRUVCU2pZQ0dDQVFRUTRnQVJBdElFQW9BZ3hGRFFrTElBcEJBV29pQ2lBSEtBSVVJQWNvQWhCc1NRMEFDd3dCQ3lBQlJRMEFRUUFoRndOQUlBY29BaGdnRjBFR2RHb2lBU2dDUENJR0JFQWdCaEFRSUFGQkFEWUNQQ0FIS0FJUUlRb2dCeWdDRkNFTEN5QVhRUUZxSWhjZ0NpQUxiRWtOQUFzTElBaEJBV29pQ0NBTUtBSVVJZ0VnRENnQ0VDSVhiRWtOQUFzZ0RDZ0NHQ0VMQ3lBT1FRRnFJZzRnQzBrTkFBc2dIU2dDR0NFQkN5QXhRUUZxSWpFZ0FVa05BQXNMSUVBb0FneEZEUUlnRmlnQ0VDRXhDeUFKUWJnSWFpRUpJQjFCekFCcUlSMGdEVUVCYWlJTklERkpEUUFMQzBFQUlURWdHU2dDTEJBZ0lFQW9BZ3hGRFFFQ1FDQVpLQUpBRFFBZ0dTZ0NHQ0lkS0FJUVJRMEFRUUFoQ1FOQUlCa29BaFFvQWdBb0FoUWdDVUhNQUd4cUlnRW9BaHdnSFNnQ0dDQUpRVFJzYWlnQ0pFR1lBV3hxSWdjb0FvZ0JJUVlnQnlnQ2tBRWhDeUFIS0FLTUFTRUtJQWNvQXBRQklRY2dBU2dDTkJBUUlBRkJBRFlDTkFKQUlCa29Ba1FpRFFSQUlBMGdDVUVDZEdvb0FnQkZEUUVMSUFZZ0MwWU5BQ0FISUFwR0RRQWdCeUFLYXlJSHJTQUxJQVpySWdhdGZrSWdpRUlBVWdSQUlETkJBVUdVRmtFQUVBOE1CUXNnQmlBSGJDSUhRWUNBZ0lBRVR3UkFJRE5CQVVHVUZrRUFFQThNQlFzZ0FTQUhRUUowRUJnaUFUWUNOQ0FCRFFBZ00wRUJRWlFXUVFBUUR3d0VDeUFKUVFGcUlna2dHU2dDR0NJZEtBSVFTUTBBQ3dzZ0dTZ0NJQ0VkSUJrb0FoUW9BZ0FpRnlnQ0VBUkFJQmNvQWhRaENTQWRLQUxRS3lFZElCa29BaGdvQWhnaERVRUFJUXNEUUFKQUlCa29Ba1FpQVFSQUlBRWdDMEVDZEdvb0FnQkZEUUVMSUEwb0FpUkJBV29oQVNBZEtBSVVRUUZHQkVBZ0FTRWVRUUFoQmtFQUlRejlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhnQUVqQUVFZ2F5SWxKQUFDUUFKQUlCa29Ba0FFUUVFQklRY2dBVUVCUmcwQ0lBa29BaHdpRENBSktBSVlRWmdCYkdvaUFVR1FBV3NvQWdBaUVDQUJRWmdCYXlnQ0FDSVRSZzBDSUF3b0FnUWhFU0FNS0FJTUlSZ2dEQ2dDQUNFYUlBd29BZ2doR3lBWktBSXNJZzRvQWdRaEZpQWVRUUZySWdvaEZTQU1JUWNDUUNBS1FRUlBCRUFnQ2tFRGNTRVZJQWNnQ2tGOGNTSUlRWmdCYkdvaEIwRUFJUUVEUUNDQUFTQU1JQUZCbUFGc2FpSUdRZWdFYWlBR1FkQURhaUFHUWJnQ2FpQUcvUWtDb0FIOVZnSUFBZjFXQWdBQy9WWUNBQU1nQmtIZ0JHb2dCa0hJQTJvZ0JrR3dBbW9nQnYwSkFwZ0IvVllDQUFIOVZnSUFBdjFXQWdBRC9iRUIvYmtCSUFaQjdBUnFJQVpCMUFOcUlBWkJ2QUpxSUFiOUNRS2tBZjFXQWdBQi9WWUNBQUw5VmdJQUF5QUdRZVFFYWlBR1Fjd0RhaUFHUWJRQ2FpQUcvUWtDbkFIOVZnSUFBZjFXQWdBQy9WWUNBQVA5c1FIOXVRRWhnQUVnQVVFRWFpSUJJQWhIRFFBTElJQUJJSUFCSUlBQi9RMElDUW9MREEwT0R3QUJBZ01BQVFJRC9ia0JJb0FCSUlBQklJQUIvUTBFQlFZSEFBRUNBd0FCQWdNQUFRSUQvYmtCL1JzQUlRWWdDQ0FLUmcwQkN3TkFJQVlnQnlnQ29BRWdCeWdDbUFGcklnRWdBU0FHU1JzaUFTQUhLQUtrQVNBSEtBS2NBV3NpQmlBQklBWkxHeUVHSUFkQm1BRnFJUWNnRlVFQmF5SVZEUUFMQzBFQUlRY2dCa0gvLy84L1N3MENJQ1VnQmtFRmRDSVNFREVpRHpZQ0VDQVBSUTBDSUNVZ0R6WUNBQ0FLQkVBZ0VDQVRheUVRSUJnZ0VXc2hDQ0FiSUJwcklRRURRQ0FKS0FJa0lSTWdKU0FJSWhVMkFnZ2dKU0FCSWdjMkFoZ2dEQ2dDbkFFaEJpQU1LQUtrQVNFSUlBd29BcUFCSVFFZ0pTQU1LQUtZQVNJUlFRSnZOZ0ljSUNVZ0FTQVJheUlCSUFkck5nSVVBa0FnRmtFQ1NDSWFSU0FJSUFacklnaEJBVXR4UlFSQVFRQWhCaUFJUlEwQkEwQWdKVUVRYWlBVElBWWdFR3hCQW5ScUVGMGdCa0VCYWlJR0lBaEhEUUFMREFFTElBZ2dGaUFJSUJaSkd5SVJRUUZySVJzZ0NDQVJiaUVZUVFBaEJ3TkFRU1FRRkNJR1JRMEZJQ1g5QUFJUUlZQUJJQVlnRXpZQ0dDQUdJQkEyQWhRZ0JpQUJOZ0lRSUFZZ2dBSDlDd0lBSUFZZ0J5QVliRFlDSENBSElCdEdJUjhnQmlBSUlBZEJBV29pQnlBWWJDQWZHellDSUNBR0lCSVFNU0lmTmdJQUlCOUZCRUJCQUNFSElBNFFJQ0FHRUJBZ0R4QVFEQWNMSUE1QkNpQUdFQzBnQnlBUlJ3MEFDeUFPRUNBTElDVWdDQ0FWYXpZQ0JDQWxJQXdvQXB3QlFRSnZOZ0lNQWtBZ0drVWdBVUVCUzNGRkJFQkJDQ0VIUVFBaEJpQUJRUWhQQkVBRFFDQWxJQk1nQmtFQ2RHb2dFRUVJRURBZ0J5SUdRUWhxSWdjZ0FVME5BQXNMSUFFZ0JrME5BU0FsSUJNZ0JrRUNkR29nRUNBQklBWnJFREFNQVFzZ0FTQVdJQUVnRmtrYkloVkJBV3NoR0NBQklCVnVJUkZCQUNFSEEwQkJKQkFVSWdaRkRRVWdKZjBBQWdBaGdBRWdCaUFUTmdJWUlBWWdFRFlDRkNBR0lBZzJBaEFnQmlDQUFmMExBZ0FnQmlBSElCRnNOZ0ljSUFjZ0dFWWhHaUFHSUFFZ0IwRUJhaUlISUJGc0lCb2JOZ0lnSUFZZ0VoQXhJaG8yQWdBZ0drVUVRRUVBSVFjZ0RoQWdJQVlRRUNBUEVCQU1Cd3NnRGtFTElBWVFMU0FISUJWSERRQUxJQTRRSUFzZ0RFR1lBV29oRENBS1FRRnJJZ29OQUFzTFFRRWhCeUFQRUJBTUFndEJBU0VISUFrb0Fod2lDQ0FlUVpnQmJHb2lOVUdZQVdzaVh5Z0NBQ0ExUVpBQmF5Z0NBRVlOQVNBMVFaUUJheUpnS0FJQUlEVkJqQUZyS0FJQVJnMEJJQWdvQWdRaERpQUlLQUlNSVE4Z0NDZ0NBQ0VXSUFnb0FnZ2hFQ0FKS0FKRUlTRWdDU2dDUUNFaUlBa29BandoS0NBSktBSTRJVEFnQ1NBZUVGd2lPVVVFUUVFQUlRY01BZ3NDUUFKQUlCNUJBVWNFUUFKQUFrQWdIa0VCYXlJS1FRUkpCRUFnQ2lFQklBZ2hCd3dCQ3lBS1FRTnhJUUVnQ0NBS1FYeHhJaFZCbUFGc2FpRUhBMEFnZ0FFZ0NDQU1RWmdCYkdvaUJrSG9CR29nQmtIUUEyb2dCa0c0QW1vZ0J2MEpBcUFCL1ZZQ0FBSDlWZ0lBQXYxV0FnQURJQVpCNEFScUlBWkJ5QU5xSUFaQnNBSnFJQWI5Q1FLWUFmMVdBZ0FCL1ZZQ0FBTDlWZ0lBQS8yeEFmMjVBU0FHUWV3RWFpQUdRZFFEYWlBR1Fid0NhaUFHL1FrQ3BBSDlWZ0lBQWYxV0FnQUMvVllDQUFNZ0JrSGtCR29nQmtITUEyb2dCa0cwQW1vZ0J2MEpBcHdCL1ZZQ0FBSDlWZ0lBQXYxV0FnQUQvYkVCL2JrQklZQUJJQXhCQkdvaURDQVZSdzBBQ3lDQUFTQ0FBU0NBQWYwTkNBa0tDd3dORGc4QUFRSURBQUVDQS8yNUFTS0FBU0NBQVNDQUFmME5CQVVHQndBQkFnTUFBUUlEQUFFQ0EvMjVBZjBiQUNFR0lBb2dGVVlOQVFzRFFDQUdJQWNvQXFBQklBY29BcGdCYXlJS0lBWWdDa3NiSWdZZ0J5Z0NwQUVnQnlnQ25BRnJJZ29nQmlBS1N4c2hCaUFIUVpnQmFpRUhJQUZCQVdzaUFRMEFDd3NnQmtHQWdJQ0FBVThOQWlBR1FRUjBFREVpRkVVTkFnSkFJQjVGRFFBZ0R5QU9heUVTSUJBZ0Ztc2hHaUFVUVFScklUc2dGRUVFYWlFa0lCUkJER29oS1NBVVFSeHFJVU1nRkVFWWFpRWZJQlJCRkdvaElDQVVRUXhySVVRZ0ZFRUlhaUVxSUJSQkVHb2hOaUFVUVJCcklUY2dGRUVJYXlGQklDR3RJWVlCSUNLdElZY0JJQ2l0SVlvQklEQ3RJWXNCUVFFaFJnTkFJQWdvQXB3QklnRkJBbThoUnlBSUtBS1lBU0lIUVFKdklUd2dDQ2dDcEFFZ0FXc2lKeUFTYXlFc0lBZ29BcUFCSUFkcklpMGdHbXNoTGlBd0lnd2hCeUFvSWdZaENpQWlJZ0VoT2lBaElnOGhFUUpBSUFrb0FoUWlGU0JHUmcwQUlCVWdSbXNoRlVFQUlRcEJBQ0VISUF3RVFFSi9JQld0SW9nQmhrSi9oU0NMQVh3Z2lBR0lweUVIQ3lBb0JFQkNmeUFWclNLSUFZWkNmNFVnaWdGOElJZ0JpS2NoQ2d0QkFDRVBRUUFoQVNBaUJFQkNmeUFWclNLSUFZWkNmNFVnaHdGOElJZ0JpS2NoQVFzZ0lRUkFRbjhnRmEwaWlBR0dRbitGSUlZQmZDQ0lBWWluSVE4TFFRQWhPa0VBSVF4QkFTQVZRUUZyZENJT0lEQkpCRUFnTUNBT2E2MUNmeUFWclNLSUFZWkNmNFY4SUlnQmlLY2hEQXNnRGlBaVNRUkFJQ0lnRG11dFFuOGdGYTBpaUFHR1FuK0ZmQ0NJQVlpbklUb0xRUUFoRVVFQUlRWWdEaUFvU1FSQUlDZ2dEbXV0UW44Z0ZhMGlpQUdHUW4rRmZDQ0lBWWluSVFZTElBNGdJVThOQUNBaElBNXJyVUovSUJXdElvZ0Joa0ovaFh3Z2lBR0lweUVSQzBGL0lEb2dDQ2dDdEFFaUZXc2lEa0VBSUE0Z09rMGJJZzVCQW1vaUZpQU9JQlpMR3lJT0lDNGdEaUF1U1JzaU5FRi9JQUVnQ0NnQzJBRWlFMnNpRGtFQUlBRWdEazhiSWdGQkFtb2lEaUFCSUE1TEd5SUJJQm9nQVNBYVNSc2lKaUE4RzBFQmRDSUJJQ1lnTkNBOEcwRUJkRUVCY2lJT0lBRWdEa3NiSWtnZ0xVa2hHQ0FNSUJWcklnRkJBQ0FCSUF4Tkd5SUJRUUpySWd4QkFDQUJJQXhQR3lJUUlBY2dFMnNpQVVFQUlBRWdCMDBiSWdGQkFtc2lERUVBSUFFZ0RFOGJJaFlnUEJ0QkFYUWlEQ0FXSUJBZ1BCdEJBWFJCQVhJaUswa2hMeUFLSUFnb0FyZ0JJaHRySWhWQkFDQUtJQlZQR3lJS1FRSnJJaFZCQUNBS0lCVlBHeUlWSVNNZ0JpQUlLQUxjQVNJS2F5SU9RUUFnQmlBT1R4c2lCa0VDYXlJT1FRQWdCaUFPVHhzaURpRTlRWDhnRHlBYmF5SUdRUUFnQmlBUFRSc2lCa0VDYWlJUElBWWdEMHNiSWdZZ0VpQUdJQkpKR3lJYklUNUJmeUFSSUFwcklnWkJBQ0FHSUJGTkd5SUdRUUpxSWdvZ0JpQUtTeHNpQmlBc0lBWWdMRWtiSWh3aFB5QkhCRUFnRlNFOUlCd2hQaUFiSVQ4Z0RpRWpDeUJJSUMwZ0dCc2hTU0FNSUNzZ0x4c2hHQ0FTSUJ4cUlWQWdEaUFTYWlGUklDY0VRQ0FVSUJaQkEzUWlCbW9pUlVFRWFpQTdJQzVCQTNRaUNtb2lVaUFXSUM1SUlnd2JJVk1nQmlBa2FpSUdJQ1lnTGlBbUlDNUlHeUlQSUFjZ0V5QUhJQk5KRzBFQ0lBRWdBVUVDVHh0cUlnRnFJaE1nQjJ0QkFtc2lFVUVEZENJcmFpQUdTU0FwSUFjZ0FXdEJBM1JxSWdFZ0syb2dBVWx5SUJGQi8vLy8vd0ZMY2lGVUlEUWdHa0VCYXlBYUlEUktHeUV2UVFBaEVTQWFRUUZLSUM1QkFFcHlJVlVnSkNBOFFRSjBJZ0ZySUJCQkEzUnFJVllnQVNCRmFpRlhJQllnQjBGL2N5QVRhaUpLUVh4eElqSnFJVGdnRmtFQmFpSVRJREpxSVVJZ0dpQTBhaUZZSUJBZ0dtb2hXU0FXL1JIOURBQUFBQUFCQUFBQUFnQUFBQU1BQUFEOXJnRWhnd0VnRkNBWVFRSjBhaUZhSUVFZ0drRURkQ0lCYWlGTElBRWdPMm9oVENBS0lFRnFJVTBnR2tVZ0xrRUJSbkVoV3lBVUlFbEJBblFpQVdvaFhDQUJJRHRxSVYwZ0UvMFIvUXdBQUFBQUFRQUFBQUlBQUFBREFBQUEvYTRCSVlRQklEc2dGaUF1SUF3YlFRTjBhaUZlQTBBQ1FBSkFJQkVnRzBrZ0VTQVZUM0VOQUNBUklGQkpJQkVnVVU5eERRQWdFVUVCYWlFckRBRUxJQzBnU0VzRVFDQmRRUUEyQWdBZ1hFRUFOZ0lBQ3lBNUlCWWdFU0FtSUJGQkFXb2lLeUJYUVFKQkFCQWVJRGtnV1NBUklGZ2dLeUJXUVFKQkFCQWVBa0FDUUFKQUlEeEZCRUFnVlVVTkF5QVdJQ1pPRFFJQ1FBSkFJQlpCQUVvRVFDQmVLQUlBSVFjTUFRc2dKQ2dDQUNJSElRRWdGa0VBU0EwQkN5QUhJUUVnVXlnQ0FDRUhDeUJGSUVVb0FnQWdBU0FIYWtFQ2FrRUNkV3MyQWdBZ0V5SUhJQTlPRFFGQkFDRUhJSVFCSVlBQklJTUJJWUlCSUJNaEFTQVdJUW9nU2tFVVNTQlVja1VFUUFOQUlCUWdnQUZCQWYyckFTS0JBZjBiQUVFQ2RHb2lBU0FVSUlFQi9Sc0RRUUowYWlJR0lCUWdnUUg5R3dKQkFuUnFJZ29nRkNDQkFmMGJBVUVDZEdvaURDQUIvUWtDQVAxV0FnQUIvVllDQUFMOVZnSUFBeUFVSUlJQlFRSDlxd0g5REFFQUFBQUJBQUFBQVFBQUFBRUFBQUQ5VUNLRkFmMGJBMEVDZEdvZ0ZDQ0ZBZjBiQWtFQ2RHb2dGQ0NGQWYwYkFVRUNkR29nRkNDRkFmMGJBRUVDZEdyOUNRSUEvVllDQUFIOVZnSUFBdjFXQWdBRElCUWdnUUg5REFFQUFBQUJBQUFBQVFBQUFBRUFBQUQ5VUNLQkFmMGJBMEVDZEdvZ0ZDQ0JBZjBiQWtFQ2RHb2dGQ0NCQWYwYkFVRUNkR29nRkNDQkFmMGJBRUVDZEdyOUNRSUEvVllDQUFIOVZnSUFBdjFXQWdBRC9hNEIvUXdDQUFBQUFnQUFBQUlBQUFBQ0FBQUEvYTRCUVFMOXJBSDlzUUVpZ1FIOVdnSUFBQ0FNSUlFQi9Wb0NBQUVnQ2lDQkFmMWFBZ0FDSUFZZ2dRSDlXZ0lBQXlDQ0FmME1CQUFBQUFRQUFBQUVBQUFBQkFBQUFQMnVBU0dDQVNDQUFmME1CQUFBQUFRQUFBQUVBQUFBQkFBQUFQMnVBU0dBQVNBSFFRUnFJZ2NnTWtjTkFBc2dRaUVCSURnaENpQVBJUWNnTWlCS1JnMENDd05BSUJRZ0FVRURkR29pQnlBSEtBSUFJQlFnQ2tFRGRHb29BZ1FnQnlnQ0JHcEJBbXBCQW5Wck5nSUFJQUVpQ2tFQmFpSUJJQTlIRFFBTElBOGhCd3dCQ3dKQUlGdEZCRUFnRmlJSElDWk9EUUVEUUNBVUlBZEJBM1JxSWdFb0FnUWhCaUFCSUFZQ2Z3SkFJQWRCQUU0RVFDQUJJRTBnQnlBdVNCc29BZ0FoT2lBSFFRRnFJUUVNQVFzZ0ZDZ0NBQ0U2UVFBaEFTQVVJQWRCQVdvaUJ3MEJHZ3NnQVNBdVRnUkFJQUVoQnlCTkRBRUxJQlFnQVNJSFFRTjBhZ3NvQWdBZ09tcEJBbXBCQW5Wck5nSUVJQWNnSmtnTkFBc01BUXNnRkNBVUtBSUFRUUp0TmdJQURBTUxJQkFpQnlBMFRnMENBMEFnRkNBSFFRTjBhaUlCS0FJQUlRb0NmeUFIUVFCSUJFQWdKQ2dDQUNFR0lDUU1BUXNnRkNBSFFRTjBha0VFYWlCTUlBY2dHa2diS0FJQUlRWWdKQ0FIUlEwQUdpQk1JQUZCQkdzZ0J5QWFTaHNMSVF3Z0FTQU1LQUlBSUFacVFRRjFJQXBxTmdJQUlBZEJBV29pQnlBMFJ3MEFDd3dDQ3lBSElDWk9EUUFEUUNBVUlBZEJBM1JxSWdFZ0FTZ0NBQUovQWtBZ0IwRUFTZ1JBSURzZ0J5QXVJQWNnTGtnYlFRTjBhaWdDQUNFS0RBRUxJQ1FvQWdBaENpQWtJQWRCQUVnTkFSb0xJRklnQnlBdVRnMEFHaUFVSUFkQkEzUnFRUVJxQ3lnQ0FDQUtha0VDYWtFQ2RXczJBZ0FnQjBFQmFpSUhJQ1pIRFFBTEN5QVFJRFJPRFFBZ0x5QVFJZ0VpQjBvRVFBTkFJQlFnQjBFRGRHb2lBU0FCS0FJRUlCUWdCMEVCYWlJSFFRTjBhaWdDQUNBQktBSUFha0VCZFdvMkFnUWdCeUF2UncwQUN5QXZJUUVMSUFFZ05FNE5BQU5BQW44Q1FDQUJJZ2RCQUU0RVFDQVVJQUZCQTNScUlFc2dBU0FhU0Jzb0FnQWhEQ0FCUVFGcUlRb01BUXNnRkNnQ0FDRU1RUUFoQ2lBVUlBZEJBV29pQVEwQkdnc2dDaUFhVGdSQUlBb2hBU0JMREFFTElCUWdDaUlCUVFOMGFnc2hCaUFVSUFkQkEzUnFJZ2NnQnlnQ0JDQUdLQUlBSUF4cVFRRjFhallDQkNBQklEUklEUUFMQ3lBNUlCZ2dFU0JKSUNzZ1drRUJRUUJCQUJBbVJRMEdDeUFySWhFZ0owY05BQXNMSUFoQm1BRnFJUWdnUGtFQmRDSUJJRDlCQVhSQkFYSWlCeUFCSUFkTEd5SUJJQ2NnQVNBblNSc2hTQ0JESUJWQkJYUWlBV29nT3lBc1FRVjBJZ2RxSUJVZ0xFZ2lCaHNoU2lBQklCOXFJQWNnUVdvZ0Joc2hTeUFCSUNCcUlBY2dSR29nQmhzaFRDQUJJRFpxSUFjZ04yb2dCaHNoVFNBY0lCSkJBV3NnRWlBY1Noc2hEQ0FzUVFCS0lnOGdFa0VCU25JaFVpQUJJQlJxSWlzZ1IwRUVkR29oVXlBcElCSkJBM1FpR2tFSWF5SStRUUFnRWtFQVRCdEJBblFpQ21vaFZDQUtJQ3BxSVZVZ0NpQWthaUZXSUFvZ0ZHb2hWeUFwUVFBZ0xFRURkQ0lLUVFocklqOGdEeHRCQW5RaUQyb2hXQ0FQSUNwcUlWa2dEeUFrYWlGYUlBOGdGR29oV3lBVVFRUWdSMEVDZEd0QkFuUnFJQTVCQlhScUlWd2dHeUFzSUJzZ0xFZ2JJUThnRlVFQmFpRVFJQlFnSTBFQmRDSVdJRDFCQVhSQkFYSWlFeUFUSUJaTEd5SmRRUVIwYWlGZUlBRWdLV29oUFNBQklDcHFJU01nQVNBa2FpRXZJQnBCQVdzaE9DQWFRUUpySVVJZ0drRURheUV1SUJRZ0VrRUZkR29oWVNBYVFRUnJJVFFnQ2tFRmF5RmlJQXBCQm1zaFl5QUtRUWRySVdRZ0VrVWdMRUVCUm5FaFpTQXBJQWRCRUdzaUFXb2hKaUFCSUNwcUlUb2dBU0FrYWlFOElBRWdGR29oUlNBcElENUJBblFpQVdvaGFDQUJJQ3BxSVdrZ0FTQWthaUZxSUFFZ0ZHb2hheUE3SUJVZ0xDQUdHMEVGZENJQmFpRnNJQUVnUVdvaEV5QUJJRVJxSVJFZ0FTQTNhaUZ0SUNrZ1AwRUNkQ0lCYWlGdUlBRWdLbW9oYnlBQklDUnFJWEFnQVNBVWFpRnhBMEFDUUFKQUFuOENRQ0FZSWhZZ1NVa0VRQ0E1SUJZZ0ZVRUVJRWtnRm1zaUFTQUJRUVJQR3lBV2FpSVlJQnNnVTBFQlFRZ1FIaUE1SUJZZ1VTQVlJRkFnWEVFQlFRZ1FIaUJIUlFSQUlGSkZEUVVnRlNBYlRnMEVBbjhnRlVFQVNnUkFJRzBvQWdBaEJ5QVRJUVlnRVNFS0lHd01BUXNnTmlnQ0FDRUhJQlZCQUVnTkF5QWZJUVlnSUNFS0lFTUxJWGtnS3lBcktBSUFJQWNnVFNnQ0FHcEJBbXBCQW5Wck5nSUFJQzhnTHlnQ0FDQUtLQUlBSUV3b0FnQnFRUUpxUVFKMWF6WUNBQ0FqSUNNb0FnQWdCaWdDQUNCTEtBSUFha0VDYWtFQ2RXczJBZ0FnU2lnQ0FDRUhJSGtvQWdBTUF3c2daUVJBSUJRZ0ZDZ0NBRUVDYlRZQ0FDQWtJQ1FvQWdCQkFtMDJBZ0FnS2lBcUtBSUFRUUp0TmdJQUlDa2dLU2dDQUVFQ2JUWUNBQXdGQ3lBYklCVWlCMG9FUUFOQUlBZEJBM1FoQVFKL0FrQWdCMEVBU0FSQUlBZEJmMFlOQVNBVUlBRkJBblJxSWdFZ0FTZ0NFQ0FVS0FJQVFRRjBRUUpxUVFKMWF6WUNFQ0FCSUFFb0FoUWdKQ2dDQUVFQmRFRUNha0VDZFdzMkFoUWdBU0FCS0FJWUlDb29BZ0JCQVhSQkFtcEJBblZyTmdJWUlDa29BZ0JCQVhSQkFtb2hCaUFCUVJ4cURBSUxJQ3dnQjBFQmFpSUdUQVJBSUJRZ0FVRUNkR29pQ2lBS0tBSVFJQlFnQVNBL0lBY2dMRWdpQmh0QkFuUnFLQUlBSUhFb0FnQnFRUUpxUVFKMWF6WUNFQ0FLSUFvb0FoUWdGQ0FCUVFGeUlHUWdCaHRCQW5ScUtBSUFJSEFvQWdCcVFRSnFRUUoxYXpZQ0ZDQUtJQW9vQWhnZ0ZDQUJRUUp5SUdNZ0JodEJBblJxS0FJQUlHOG9BZ0JxUVFKcVFRSjFhellDR0NBVUlBRkJBM0lnWWlBR0cwRUNkR29vQWdBZ2JpZ0NBR3BCQW1vaEJpQUtRUnhxREFJTElCUWdBVUVDZEdvaUFTQUJLQUlRSUFFb0FnQWdGQ0FHUVFWMGFpSUdLQUlBYWtFQ2FrRUNkV3MyQWhBZ0FTQUJLQUlVSUFFb0FnUWdCaWdDQkdwQkFtcEJBblZyTmdJVUlBRWdBU2dDR0NBQktBSUlJQVlvQWdocVFRSnFRUUoxYXpZQ0dDQUJLQUlNSUFZb0FneHFRUUpxSVFZZ0FVRWNhZ3dCQ3lBM0lEY29BZ0FnRkNnQ0FDQmJLQUlBYWtFQ2FrRUNkV3MyQWdBZ1JDQkVLQUlBSUNRb0FnQWdXaWdDQUdwQkFtcEJBblZyTmdJQUlFRWdRU2dDQUNBcUtBSUFJRmtvQWdCcVFRSnFRUUoxYXpZQ0FDQXBLQUlBSUZnb0FnQnFRUUpxSVFZZ093c2lBU0FCS0FJQUlBWkJBblZyTmdJQUlBZEJBV29pQnlBYlJ3MEFDd3NnSENBT0lnZE1EUVFEUUNBSFFRTjBJUUVDZnlBSFFRQklCRUFnRkNBQlFRSjBhaUlCSUFFb0FnQWdOaWdDQUVFQmRFRUJkV28yQWdBZ0FTQUJLQUlFSUJRb0FoUkJBWFJCQVhWcU5nSUVJQUVnQVNnQ0NDQVVLQUlZUVFGMFFRRjFhallDQ0NBVUtBSWNRUUYwSVFvZ0FVRU1hZ3dCQ3lBSEJFQWdGQ0FCUVFKMGFpSUdJQVlvQWdBZ1lTQUdJQWNnRWtvaU1odEJFR3NvQWdBZ0ZDQUJRUVJ5SURRZ0J5QVNTQ0lLRzBFQ2RHb29BZ0JxUVFGMWFqWUNBQ0FHSUFZb0FnUWdSQ0FhSUFFZ01odEJBblFpTW1vb0FnQWdGQ0FCUVFWeUlDNGdDaHRCQW5ScUtBSUFha0VCZFdvMkFnUWdCaUFHS0FJSUlESWdRV29vQWdBZ0ZDQUJRUVp5SUVJZ0NodEJBblJxS0FJQWFrRUJkV28yQWdnZ01pQTdhaWdDQUNBVUlBRkJCM0lnT0NBS0cwRUNkR29vQWdCcUlRb2dCa0VNYWd3QkN5QVVJQlFvQWdBZ05pZ0NBQ0FVUVFRZ05DQUhJQkpJSWdFYlFRSjBhaWdDQUdwQkFYVnFOZ0lBSUNRZ0pDZ0NBQ0FVS0FJVUlCUkJCU0F1SUFFYlFRSjBhaWdDQUdwQkFYVnFOZ0lBSUNvZ0tpZ0NBQ0FVS0FJWUlCUkJCaUJDSUFFYlFRSjBhaWdDQUdwQkFYVnFOZ0lBSUJRb0Fod2dGRUVISURnZ0FSdEJBblJxS0FJQWFpRUtJQ2tMSWdFZ0FTZ0NBQ0FLUVFGMWFqWUNBQ0FIUVFGcUlnY2dIRWNOQUFzTUJBc2dMU0VhSUNjaEVpQkdRUUZxSWtZZ0hrY05CUXdHQ3lBcklDc29BZ0FnQjBFQmRFRUNha0VDZFdzMkFnQWdMeUF2S0FJQUlDQW9BZ0JCQVhSQkFtcEJBblZyTmdJQUlDTWdJeWdDQUNBZktBSUFRUUYwUVFKcVFRSjFhellDQUNCREtBSUFJZ2NMSVFFZ1BTQTlLQUlBSUFFZ0IycEJBbXBCQW5Wck5nSUFJQlVoQmlBUUlnRWlCeUFQU0FSQUEwQWdGQ0FCUVFWMGFpSUhJQWY5QUFJQUlEWWdCa0VGZEdyOUFBSUFJQWY5QUFJUS9hNEIvUXdDQUFBQUFnQUFBQUlBQUFBQ0FBQUEvYTRCUVFMOXJBSDlzUUg5Q3dJQUlBRWlCa0VCYWlJQklBOUhEUUFMSUE4aEJ3c2dCeUFiVGcwQUEwQWdCMEVEZENFQklBY2dMRWdoQmdKQUlBZEJBRXdFUUNBMktBSUFJUW9nQjBFQVRnUkFJQlFnQVVFQ2RDSUJhaUl5SURJb0FnQWdDaUFCSURacUlFVWdCaHNvQWdCcVFRSnFRUUoxYXpZQ0FDQUJJQ1JxSWdvZ0NpZ0NBQ0FnS0FJQUlBRWdJR29nUENBR0d5Z0NBR3BCQW1wQkFuVnJOZ0lBSUFFZ0ttb2lDaUFLS0FJQUlCOG9BZ0FnQVNBZmFpQTZJQVliS0FJQWFrRUNha0VDZFdzMkFnQWdReWdDQUNBQklFTnFJQ1lnQmhzb0FnQnFRUUpxSVFZZ0FTQXBhaUVCREFJTElCUWdBVUVDZENJQmFpSUdJQVlvQWdBZ0NrRUJkRUVDYWtFQ2RXczJBZ0FnQVNBa2FpSUdJQVlvQWdBZ0ZDZ0NGRUVCZEVFQ2FrRUNkV3MyQWdBZ0FTQXFhaUlHSUFZb0FnQWdGQ2dDR0VFQmRFRUNha0VDZFdzMkFnQWdBU0FwYWlFQklCUW9BaHhCQVhSQkFtb2hCZ3dCQ3lBVUlBY2dMQ0FHRzBFRGRFRUVhMEVDZENJS2FpZ0NBQ0V5SUFaRkJFQWdGQ0FCUVFKMElnRnFJZ1lnQmlnQ0FDQXlJRVVvQWdCcVFRSnFRUUoxYXpZQ0FDQUJJQ1JxSWdZZ0JpZ0NBQ0FLSUNScUtBSUFJRHdvQWdCcVFRSnFRUUoxYXpZQ0FDQUJJQ3BxSWdZZ0JpZ0NBQ0FLSUNwcUtBSUFJRG9vQWdCcVFRSnFRUUoxYXpZQ0FDQUJJQ2xxSVFFZ0NpQXBhaWdDQUNBbUtBSUFha0VDYWlFR0RBRUxJQlFnQVVFQ2RDSUJhaUlHSUFZb0FnQWdNaUFHS0FJUWFrRUNha0VDZFdzMkFnQWdBU0FrYWlJR0lBWW9BZ0FnQ2lBa2FpZ0NBQ0FHS0FJUWFrRUNha0VDZFdzMkFnQWdBU0FxYWlJR0lBWW9BZ0FnQ2lBcWFpZ0NBQ0FHS0FJUWFrRUNha0VDZFdzMkFnQWdDaUFwYWlnQ0FDQUJJQ2xxSWdFb0FoQnFRUUpxSVFZTElBRWdBU2dDQUNBR1FRSjFhellDQUNBSFFRRnFJZ2NnRzBjTkFBc0xJQTRnSEU0TkFDQU1JQTRpQVNJSFNnUkFBMEFnRkNBQlFRVjBhaUlISUFmOUFBSWdJQWY5QUFJQS9hNEJRUUg5ckFFZ0IvMEFBaEQ5cmdIOUN3SVFJQUZCQVdvaUFTQU1SdzBBQ3lBTUlRY0xJQWNnSEU0TkFBTkFJRU1nQjBFRGRDSUJRUUowYWlJeUFuOGdCMEVBU0FSQUlCUW9BZ0FoQmlBSFFYOUhCRUFnTmlBQlFRSjBJZ0ZxSWdvZ0NpZ0NBQ0FHYWpZQ0FDQUJJQ0JxSWdZZ0JpZ0NBQ0FrS0FJQWFqWUNBQ0FCSUI5cUlnRWdBU2dDQUNBcUtBSUFhallDQUNBcEtBSUFEQUlMSURZZ0FVRUNkQ0lCYWlJS0lBb29BZ0FnVnlnQ0FDQUdha0VCZFdvMkFnQWdBU0FnYWlJR0lBWW9BZ0FnVmlnQ0FDQWtLQUlBYWtFQmRXbzJBZ0FnQVNBZmFpSUJJQUVvQWdBZ1ZTZ0NBQ0FxS0FJQWFrRUJkV28yQWdBZ1ZDZ0NBQ0FwS0FJQWFrRUJkUXdCQ3lBQklENGdCeUFTU0JzaEJpQVNJQWRCQVdvaVprd0VRQ0EySUFGQkFuUWlDbW9pQVNBQktBSUFJR3NvQWdBZ0ZDQUdRUUowYWlJQktBSUFha0VCZFdvMkFnQWdDaUFnYWlJR0lBWW9BZ0FnYWlnQ0FDQUJLQUlFYWtFQmRXbzJBZ0FnQ2lBZmFpSUdJQVlvQWdBZ2FTZ0NBQ0FCS0FJSWFrRUJkV28yQWdBZ2FDZ0NBQ0FCS0FJTWFrRUJkUXdCQ3lBMklBRkJBblFpQ21vaUFTQUJLQUlBSUJRZ1prRUZkR29pQVNnQ0FDQVVJQVpCQW5ScUlnWW9BZ0JxUVFGMWFqWUNBQ0FLSUNCcUltWWdaaWdDQUNBQktBSUVJQVlvQWdScVFRRjFhallDQUNBS0lCOXFJZ29nQ2lnQ0FDQUJLQUlJSUFZb0FnaHFRUUYxYWpZQ0FDQUJLQUlNSUFZb0FneHFRUUYxQ3lBeUtBSUFhallDQUNBSFFRRnFJZ2NnSEVjTkFBc0xJRGtnRmlCZElCZ2dTQ0JlUVFGQkJFRUFFQ1lOQUFzTERBSUxJQlFRRUVFQklRY0xJRGtnTlVFUWF5Z0NBQ0lCSUY4b0FnQWlCbXNnTlVFTWF5Z0NBQ0JnS0FJQUlncHJJRFZCQ0dzb0FnQWlDQ0FHYXlBMVFRUnJLQUlBSUFwcklBa29BalJCQVNBSUlBRnJFQjRnT1JBakRBTUxJRGtRSXlBVUVCQkJBQ0VIREFJTElEa1FJMEVBSVFjTUFRdEJBQ0VISUE0UUlDQVBFQkFMSUNWQklHb2tBQ0FIRFFFTUJRc2dBU0VJUVFBaER2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFDR0FBU01BUVVCcUlod2tBQUpBQW44Q1FDQVpLQUpBQkVBZ0NTZ0NIQ0lWSUFrb0FoaEJtQUZzYWlJQlFaZ0JheWdDQUNFYUlBRkJrQUZyS0FJQUlSc2dGU2dDQkNFTUlCVW9BZ3doZWlBVktBSUFJUkFnRlNnQ0NDRVRRUUVoQnlBWktBSXNJaDhvQWdRaEt5QUlRUUZHRFFOQkFDRUdJQWhCQVdzaUZpRUlJQlVoQVFKQUlCWkJCRThFUUNBV1FRTnhJUWdnQVNBV1FYeHhJZ3BCbUFGc2FpRUJRUUFoQndOQUlJQUJJQlVnQjBHWUFXeHFJZ1pCNkFScUlBWkIwQU5xSUFaQnVBSnFJQWI5Q1FLZ0FmMVdBZ0FCL1ZZQ0FBTDlWZ0lBQXlBR1FlQUVhaUFHUWNnRGFpQUdRYkFDYWlBRy9Ra0NtQUg5VmdJQUFmMVdBZ0FDL1ZZQ0FBUDlzUUg5dVFFZ0JrSHNCR29nQmtIVUEyb2dCa0c4QW1vZ0J2MEpBcVFCL1ZZQ0FBSDlWZ0lBQXYxV0FnQURJQVpCNUFScUlBWkJ6QU5xSUFaQnRBSnFJQWI5Q1FLY0FmMVdBZ0FCL1ZZQ0FBTDlWZ0lBQS8yeEFmMjVBU0dBQVNBSFFRUnFJZ2NnQ2tjTkFBc2dnQUVnZ0FFZ2dBSDlEUWdKQ2dzTURRNFBBQUVDQXdBQkFnUDl1UUVpZ0FFZ2dBRWdnQUg5RFFRRkJnY0FBUUlEQUFFQ0F3QUJBZ1A5dVFIOUd3QWhCaUFLSUJaR0RRRUxBMEFnQmlBQktBS2dBU0FCS0FLWUFXc2lCeUFHSUFkTEd5SUhJQUVvQXFRQklBRW9BcHdCYXlJR0lBWWdCMGtiSVFZZ0FVR1lBV29oQVNBSVFRRnJJZ2dOQUFzTFFRQWhCeUFHUWYvLy96OUxEUU1nSENBR1FRVjBJa1lRR0NJQk5nSWdJQUZGRFFNZ0hDQUJOZ0lBSUJaRkJFQkJBU0VISUFFUUVBd0VDeUI2SUF4cklROGdFeUFRYXlFT1FRSWdLMEVCZGlJQklBRkJBazBiSVVjZ0NTZ0NKQ0lLSUJ0QkhHd2lUU0FhUVJ4c0lsOXJhaUV2SUFvZ0cwRVliQ0pnSUJwQkdHd2lVbXRxSVQwZ0NpQWJRUlJzSWxNZ0drRVViQ0pVYTJvaFBpQUtJQnRCQkhRaVZTQWFRUVIwSWxacmFpRS9JQW9nRzBFTWJDSlhJQnBCREd3aVdHdHFJVGdnR3lBYWF5SVFRUWRzSVVrZ0VFRUdiQ0ZGSUJCQkJXd2hNaUFRUVFOc0lVZ2dFRUVCZENGUUlBb2dFRUVEZENKUmFpRkNJQW9nRUVFQ2RDSkJhaUVVSUJCQkJYUWhXU0FRL1JFaGhBRURRQ0FjSUE4MkFnZ2dIQ0FPSWdFMkFpZ2dGU2dDbkFFaEpDQVZLQUtrQVNFcElCVW9BcUFCSVI0Z0ZTZ0NtQUVoSUNBY1FRQTJBamdnSENBQk5nSTBJQnhCQURZQ01DQWNJQ0JCQW04aUdEWUNMQ0FjSUI0Z0lHc2lEaUFCYXlJVE5nSThJQndnRXpZQ0pBSkFJQ3RCQWtnaVdrVWdLU0FrYXlJUFFROUxjVVVFUUVFQUlRY2dDaUVHSUE5QkNFa05BU0EvSUFZZ1V5QWVRUUowSWdGcUlGUWdJRUVDZENJSWFtdHFJanBKSUQ0Z0JpQUJJRlZxSUFnZ1ZtcHJhaUpEU1hFZ1BTQkRTU0EvSUFZZ0FTQmdhaUFJSUZKcWEyb2lQRWx4Y2lBdklFTkpJRDhnQmlBQklFMXFJQWdnWDJwcmFpSkVTWEZ5SVZzZ1BTQkVTU0F2SUR4SmNTRmNJRDRnUkVrZ0x5QTZTWEVoWFNBOElENUxJRG9nUFV0eElWNGdRaUFHSUFFZ1Yyb2dDQ0JZYW10cUlrcEpJRGdnQmlBQklGRnFJQWhyYWlKTFNYRWhZU0FVSUVwSklEZ2dCaUFiSUI1cUlCb2dJR3ByUVFKMGFpSk1TWEVoWWlBVUlFdEpJRUlnVEVseElXTWdCaUFCSUFocmFpRXFJQTVCZkhFaENDQWNLQUlnSWhNZ0RrRUZkR29pRVVFUWF5RWxJQkZCRkdzaExDQVJRUmhySVM0Z0VVRWNheUUySUJGQkJHc2hPU0FSUVFocklUc2dFVUVNYXlFMFFRQWhHQ0FUUVF4cUlpTWdIaUFnUVg5emFpSU1RUVYwSWdGcUlDTkpJQXhCLy8vL1Awc2lEQ0FUUVFScUlpRWdBV29nSVVrZ0FTQVRhaUFUU1hKeUlCTkJDR29pSWlBQmFpQWlTWEp5SUE1QnlBSkpjaUZrSUJOQkZHb2lLQ0FCYWlBb1NTQVRRUkJxSWljZ0FXb2dKMGx5SUF4eUlCTkJHR29pTUNBQmFpQXdTWElnRTBFY2FpSXRJQUZxSUMxSmNpQU9RZFFBU1hJaFpRTkFJQWNoRENBY1FTQnFJZ0VnQmlBUVFRZ1FPeUFCRUNJQ1FDQU9SUTBBSUJnZ1dXd2hCMEVBSVFFQ1FBSkFJR1FOQUNCaElBWWdOa2tnRXlBSElDcHFJamRKY1NBR0lBY2dTbW9pRWtrZ0tpQTRTM0VnRkNBcVNTQUdJQWNnVEdvaUprbHhJQVlnQnlCTGFpSTFTU0FxSUVKTGNYSnljaUFHSUM1SklDRWdOMGx4Y2lBR0lDeEpJQ0lnTjBseGNpQUdJQ1ZKSUNNZ04wbHhjaUJqY2lCaWNpQVRJQ1pKSUFjZ0ZHb2lOeUEyU1hGeUlDRWdKa2tnTGlBM1MzRnlJQ0lnSmtrZ0xDQTNTM0Z5SUNNZ0pra2dKU0EzUzNGeWNnMEFJQk1nTlVrZ0J5QkNhaUltSURaSmNRMEFJQ0VnTlVrZ0ppQXVTWEVOQUNBaUlEVkpJQ1lnTEVseERRQWdJeUExU1NBbElDWkxjUTBBSUFjZ09Hb2lKaUEyU1NBU0lCTkxjUTBBSUNZZ0xra2dFaUFoUzNFTkFDQW1JQ3hKSUJJZ0lrdHhEUUFnRWlBalN5QWxJQ1pMY1EwQUEwQWdCaUFCUVFKMGFpQVRJQUZCQlhScUloTDlDUUlBSUJJcUFpRDlJQUVnRWtGQWF5b0NBUDBnQWlBU0tnSmcvU0FEL1FzQ0FDQUdJQUVnRUdwQkFuUnFJQkw5Q1FJRUlCSXFBaVQ5SUFFZ0Vpb0NSUDBnQWlBU0tnSmsvU0FEL1FzQ0FDQUdJQUVnVUdwQkFuUnFJQkw5Q1FJSUlCSXFBaWo5SUFFZ0Vpb0NTUDBnQWlBU0tnSm8vU0FEL1FzQ0FDQUdJQUVnU0dwQkFuUnFJQkw5Q1FJTUlCSXFBaXo5SUFFZ0Vpb0NUUDBnQWlBU0tnSnMvU0FEL1FzQ0FDQUJRUVJxSWdFZ0NFY05BQXNnQ0NJQklBNUdEUUVMQTBBZ0JpQUJRUUowYWlBVElBRkJCWFJxSWhJcUFnQTRBZ0FnQmlBQklCQnFRUUowYWlBU0tnSUVPQUlBSUFZZ0FTQlFha0VDZEdvZ0Vpb0NDRGdDQUNBR0lBRWdTR3BCQW5ScUlCSXFBZ3c0QWdBZ0FVRUJhaUlCSUE1SERRQUxDMEVBSVFFQ1FDQmxEUUFnWENBSElENXFJaElnTkVrZ0p5QUhJRHBxSWlaSmNTQmJJQWNnUDJvaU5TQTBTU0FuSUFjZ1Eyb2lOMGx4Y2lBb0lEZEpJRFVnTzBseGNpQXdJRGRKSURVZ09VbHhjaUF0SURkSklCRWdOVXR4Y2lCZWNpQmRjbklnRWlBN1NTQW1JQ2hMY1hJZ0VpQTVTU0FtSURCTGNYSWdKaUF0U3lBUklCSkxjWEp5RFFBZ0J5QTlhaUlTSURSSklDY2dCeUE4YWlJbVNYRU5BQ0FTSUR0SklDWWdLRXR4RFFBZ0VpQTVTU0FtSURCTGNRMEFJQ1lnTFVzZ0VTQVNTM0VOQUNBSElDOXFJaElnTkVrZ0p5QUhJRVJxSWdkSmNRMEFJQklnTzBrZ0J5QW9TM0VOQUNBU0lEbEpJQWNnTUV0eERRQWdCeUF0U3lBUklCSkxjUTBBQTBBZ0JpQUJJRUZxUVFKMGFpQVRJQUZCQlhScUlnZjlDUUlRSUFjcUFqRDlJQUVnQnlvQ1VQMGdBaUFIS2dKdy9TQUQvUXNDQUNBR0lBRWdNbXBCQW5ScUlBZjlDUUlVSUFjcUFqVDlJQUVnQnlvQ1ZQMGdBaUFIS2dKMC9TQUQvUXNDQUNBR0lBRWdSV3BCQW5ScUlBZjlDUUlZSUFjcUFqajlJQUVnQnlvQ1dQMGdBaUFIS2dKNC9TQUQvUXNDQUNBR0lBRWdTV3BCQW5ScUlBZjlDUUljSUFjcUFqejlJQUVnQnlvQ1hQMGdBaUFIS2dKOC9TQUQvUXNDQUNBQlFRUnFJZ0VnQ0VjTkFBc2dDQ0lCSUE1R0RRRUxBMEFnQmlBQklFRnFRUUowYWlBVElBRkJCWFJxSWdjcUFoQTRBZ0FnQmlBQklESnFRUUowYWlBSEtnSVVPQUlBSUFZZ0FTQkZha0VDZEdvZ0J5b0NHRGdDQUNBR0lBRWdTV3BCQW5ScUlBY3FBaHc0QWdBZ0FVRUJhaUlCSUE1SERRQUxDeUFZUVFGcUlSZ2dERUVJYWlFSElBWWdVVUVDZEdvaEJpQU1RUTlxSUE5SkRRQUxEQUVMSUE4Z0QwRURkaUlISUNzZ0J5QXJTUnNpRW01QmVIRWhFU0FQUVhoeElRZEJBQ0VJSUFvaEJnTkFRVEFRRkNJTVJRMEVJQXdnUmhBWUlpTTJBZ0FnSTBVRVFDQWZFQ0FnREJBUVFRQU1CZ3NnRENBR05nSW9JQXdnRURZQ0pDQU1JQTQyQWlBZ0RDQVROZ0ljSUF4QkFEWUNHQ0FNSUFFMkFoUWdERUVBTmdJUUlBd2dHRFlDRENBTUlBRTJBZ2dnRENBVE5nSUVJQXdnQnlBSUlCRnNheUFSSUFoQkFXb2lDQ0FTUmhzaUl6WUNMQ0FmUVF3Z0RCQXRJQVlnRUNBamJFRUNkR29oQmlBSUlCSkhEUUFMSUI4UUlBc0NRQ0FISUE5UERRQWdIRUVnYWlJQklBWWdFQ0FQSUFkckloZ1FPeUFCRUNJZ0RrVU5BQ0FjS0FJZ0lpTWdIa0VGZEVFQklCZ2dHRUVCVFJzaUVrRUNkR29nSUVFRmRHdHFRU0JySVI0Z0VrRURjU0VnSUJKQmZIRWhEQ0JCSUJKQkFXdHNJU0ZCQUNFSUEwQWdJeUFJUVFWMGFpRVRRUUFoQndKQUFrQWdHRUVFU1EwQUlCNGdCaUFJUVFKMEloRnFJZ0VnQmlBUklDRnFhaUlSSUFFZ0VVa2JTd1JBSUNNZ0FTQVJJQUVnRVVzYlFRUnFTUTBCQ3lBSS9SRWhnUUg5REFBQUFBQUJBQUFBQWdBQUFBTUFBQUFoZ0FGQkFDRUJBMEFnQmlDQUFTQ0VBZjIxQVNDQkFmMnVBU0tDQWYwYkFFRUNkR29nRXlBQlFRSjBhdjBBQWdBaWd3SDlId0E0QWdBZ0JpQ0NBZjBiQVVFQ2RHb2dnd0g5SHdFNEFnQWdCaUNDQWYwYkFrRUNkR29nZ3dIOUh3STRBZ0FnQmlDQ0FmMGJBMEVDZEdvZ2d3SDlId000QWdBZ2dBSDlEQVFBQUFBRUFBQUFCQUFBQUFRQUFBRDlyZ0VoZ0FFZ0FVRUVhaUlCSUF4SERRQUxJQXdpQnlBU1JnMEJDMEVBSVJFZ0J5RUJJQ0FFUUFOQUlBWWdBU0FRYkNBSWFrRUNkR29nRXlBQlFRSjBhaW9DQURnQ0FDQUJRUUZxSVFFZ0VVRUJhaUlSSUNCSERRQUxDeUFISUJKclFYeExEUUFEUUNBR0lBRWdFR3dnQ0dwQkFuUnFJQk1nQVVFQ2RHb3FBZ0E0QWdBZ0JpQUJRUUZxSWdjZ0VHd2dDR3BCQW5ScUlCTWdCMEVDZEdvcUFnQTRBZ0FnQmlBQlFRSnFJZ2NnRUd3Z0NHcEJBblJxSUJNZ0IwRUNkR29xQWdBNEFnQWdCaUFCUVFOcUlnY2dFR3dnQ0dwQkFuUnFJQk1nQjBFQ2RHb3FBZ0E0QWdBZ0dDQUJRUVJxSWdGSERRQUxDeUFJUVFGcUlnZ2dEa2NOQUFzTElCd2dEeUFjS0FJSUlneHJJaE0yQWdRZ0ZTZ0NuQUVoQVNBY1FRQTJBaEFnSENBTU5nSVVJQnhCQURZQ0dDQWNJQk0yQWh3Z0hDQUJRUUp2SWhnMkFnd0NRQ0JhUlNBT1FROUxjVVVFUUNBS0lRRWdEa0VJU1EwQklBOUJmbkVoSVNBUFFRRnhJU0lnRTBGK2NTRW9JQk5CQVhFaEp5QU1RWDV4SVRBZ0RFRUJjU0V0SUNrZ0pFRi9jMm9oSXlBY0tBSUFJaElnR0VFRmRDSUhhaUVnSUJJZ0IydEJJR29oSGlBTUlCQnNRUUowSVNvZ0RpRUlBMEJCQUNFR1FRQWhCd0pBQWtBQ1FDQU1EZ0lDQVFBTEEwQWdJQ0FHUVFaMGFpSVJJQUVnQmlBUWJFRUNkR29pSmYwQUFnRDlDd0lBSUJFZ0pmMEFBaEQ5Q3dJUUlDQWdCa0VCY2lJUlFRWjBhaUlsSUFFZ0VDQVJiRUVDZEdvaUVmMEFBaEQ5Q3dJUUlDVWdFZjBBQWdEOUN3SUFJQVpCQW1vaEJpQUhRUUpxSWdjZ01FY05BQXNMSUMxRkRRQWdJQ0FHUVFaMGFpSUhJQUVnQmlBUWJFRUNkR29pQnYwQUFnRDlDd0lBSUFjZ0J2MEFBaEQ5Q3dJUUN3SkFJQXdnRDBZTkFDQUJJQ3BxSVFkQkFDRUdRUUFoRVNBTUlDTkhCRUFEUUNBZUlBWkJCblJxSWlVZ0J5QUdJQkJzUVFKMGFpSXMvUUFDQVAwTEFnQWdKU0FzL1FBQ0VQMExBaEFnSGlBR1FRRnlJaVZCQm5ScUlpd2dCeUFRSUNWc1FRSjBhaUlsL1FBQ0VQMExBaEFnTENBbC9RQUNBUDBMQWdBZ0JrRUNhaUVHSUJGQkFtb2lFU0FvUncwQUN3c2dKMFVOQUNBZUlBWkJCblJxSWhFZ0J5QUdJQkJzUVFKMGFpSUgvUUFDQVAwTEFnQWdFU0FIL1FBQ0VQMExBaEFMSUJ3UUlnSkFJQTlGRFFCQkFDRUdRUUFoQnlBakJFQURRQ0FCSUFZZ0VHeEJBblJxSWhFZ0VpQUdRUVYwYWlJbC9RQUNBUDBMQWdBZ0VTQWwvUUFDRVAwTEFoQWdBU0FHUVFGeUloRWdFR3hCQW5ScUlpVWdFaUFSUVFWMGFpSVIvUUFDRVAwTEFoQWdKU0FSL1FBQ0FQMExBZ0FnQmtFQ2FpRUdJQWRCQW1vaUJ5QWhSdzBBQ3dzZ0lrVU5BQ0FCSUFZZ0VHeEJBblJxSWdjZ0VpQUdRUVYwYWlJRy9RQUNBUDBMQWdBZ0J5QUcvUUFDRVAwTEFoQUxJQUZCSUdvaEFTQUlRUWhySWdoQkIwc05BQXNNQVF0QkFTQU9RUU4ySWdFZ1J5QUJJRWRKR3lJSUlBaEJBVTBiSVJFZ0RpQUlia0Y0Y1NFU0lBNUJlSEVoSUVFQUlRY2dDaUVCQTBCQk1CQVVJZ1pGRFFRZ0JpQkdFQmdpSGpZQ0FDQWVSUVJBSUI4UUlDQUdFQkJCQUF3R0N5QUdJQUUyQWlnZ0JpQVFOZ0lrSUFZZ0R6WUNJQ0FHSUJNMkFod2dCa0VBTmdJWUlBWWdERFlDRkNBR1FRQTJBaEFnQmlBWU5nSU1JQVlnRERZQ0NDQUdJQk0yQWdRZ0JpQWdJQWNnRW14cklCSWdCMEVCYWlJSElBaEdHeUllTmdJc0lCOUJEU0FHRUMwZ0FTQWVRUUowYWlFQklBY2dFVWNOQUFzZ0h4QWdDd0pBSUE1QkIzRWlFa1VOQUNBWVFRVjBJU0FnSENnQ0FDRUlBa0FnREVVTkFDQUlJQ0JxSVJFZ0VrRUNkQ0VZUVFBaEJpQU1RUUZIQkVBZ0RFRitjU0VlUVFBaEJ3TkFJQkVnQmtFR2RHb2dBU0FHSUJCc1FRSjBhaUFZRUJJYUlCRWdCa0VCY2lJalFRWjBhaUFCSUJBZ0kyeEJBblJxSUJnUUVob2dCa0VDYWlFR0lBZEJBbW9pQnlBZVJ3MEFDd3NnREVFQmNVVU5BQ0FSSUFaQkJuUnFJQUVnQmlBUWJFRUNkR29nR0JBU0dnc0NRQ0FNSUE5R0RRQWdDQ0FnYTBFZ2FpRUhJQUVnRENBUWJFRUNkR29oRVNBU1FRSjBJUmhCQUNFR0lBd2dLU0FrUVg5emFrY0VRQ0FUUVg1eElTQkJBQ0VNQTBBZ0J5QUdRUVowYWlBUklBWWdFR3hCQW5ScUlCZ1FFaG9nQnlBR1FRRnlJaDVCQm5ScUlCRWdFQ0FlYkVFQ2RHb2dHQkFTR2lBR1FRSnFJUVlnREVFQ2FpSU1JQ0JIRFFBTEN5QVRRUUZ4UlEwQUlBY2dCa0VHZEdvZ0VTQUdJQkJzUVFKMGFpQVlFQklhQ3lBY0VDSWdEMFVOQUNBU1FRSjBJUWRCQUNFR0lDUkJBV29nS1VjRVFDQVBRWDV4SVF4QkFDRVJBMEFnQVNBR0lCQnNRUUowYWlBSUlBWkJCWFJxSUFjUUVob2dBU0FHUVFGeUloTWdFR3hCQW5ScUlBZ2dFMEVGZEdvZ0J4QVNHaUFHUVFKcUlRWWdFVUVDYWlJUklBeEhEUUFMQ3lBUFFRRnhSUTBBSUFFZ0JpQVFiRUVDZEdvZ0NDQUdRUVYwYWlBSEVCSWFDeUFWUVpnQmFpRVZJQlpCQVdzaUZnMEFDMEVCREFJTFFRRWhCeUFKS0FJY0lnd2dDRUdZQVd4cUlpTkJtQUZySWk4b0FnQWdJMEdRQVdzb0FnQkdEUUlnSTBHVUFXc2lQU2dDQUNBalFZd0JheWdDQUVZTkFpQU1LQUlFSVE4Z0RDZ0NEQ0VXSUF3b0FnQWhFQ0FNS0FJSUlSTWdDU2dDUkNFU0lBa29Ba0FoRVNBSktBSThJUm9nQ1NnQ09DRWZJQWtnQ0JCY0loNUZCRUJCQUNFSERBTUxJQWhCQVVZRVFDQWVJQ05CRUdzb0FnQWlBU0F2S0FJQUlnWnJJQ05CREdzb0FnQWdQU2dDQUNJS2F5QWpRUWhyS0FJQUlnZ2dCbXNnSTBFRWF5Z0NBQ0FLYXlBSktBSTBRUUVnQ0NBQmF4QWVJQjRRSXd3REMwRUFJUVlDUUFKQUlBaEJBV3NpQ2tFRVNRUkFJQW9oQnlBTUlRRU1BUXNnQ2tFRGNTRUhJQXdnQ2tGOGNTSVZRWmdCYkdvaEFRTkFJSUFCSUF3Z0RrR1lBV3hxSWdaQjZBUnFJQVpCMEFOcUlBWkJ1QUpxSUFiOUNRS2dBZjFXQWdBQi9WWUNBQUw5VmdJQUF5QUdRZUFFYWlBR1FjZ0RhaUFHUWJBQ2FpQUcvUWtDbUFIOVZnSUFBZjFXQWdBQy9WWUNBQVA5c1FIOXVRRWdCa0hzQkdvZ0JrSFVBMm9nQmtHOEFtb2dCdjBKQXFRQi9WWUNBQUg5VmdJQUF2MVdBZ0FESUFaQjVBUnFJQVpCekFOcUlBWkJ0QUpxSUFiOUNRS2NBZjFXQWdBQi9WWUNBQUw5VmdJQUEvMnhBZjI1QVNHQUFTQU9RUVJxSWc0Z0ZVY05BQXNnZ0FFZ2dBRWdnQUg5RFFnSkNnc01EUTRQQUFFQ0F3QUJBZ1A5dVFFaWdBRWdnQUVnZ0FIOURRUUZCZ2NBQVFJREFBRUNBd0FCQWdQOXVRSDlHd0FoQmlBS0lCVkdEUUVMQTBBZ0JpQUJLQUtnQVNBQktBS1lBV3NpQ2lBR0lBcExHeUlHSUFFb0FxUUJJQUVvQXB3QmF5SUtJQVlnQ2tzYklRWWdBVUdZQVdvaEFTQUhRUUZySWdjTkFBc0xBa0FnQmtHQWdJREFBRThOQUNBY0lBWkJCWFFRR0NJaE5nSWdJQ0ZGRFFBZ0hDQWhOZ0lBQWtBZ0NBUkFJQllnRDJzaENpQVRJQkJySVFZZ0lVRWdhaUUrSUFpdElZY0JJQkt0SVlvQklCR3RJWXNCSUJxdElZZ0JJQit0SVl3QklBa29BaFFpUXEwaGpRRkNBU0dHQVFOQUlCd2dDallDQ0NBY0lBWTJBaWdnRENnQ3BBRWhCeUFNS0FLZ0FTRUlJQXdvQXB3QklRRWdIQ0FNS0FLWUFTSVZRUUp2SWlJMkFpd2dIQ0FCUVFKdklqODJBZ3dnSENBSUlCVnJJaUFnQm1zaUtEWUNKQ0FjSUFjZ0FXc2lFeUFLYXlJNE5nSUVJQjhpRmlFSUlCb2lBU0VPSUJFaUJ5RVlJQklpRlNFUEFrQWdoZ0VnalFGUkRRQWdRaUNHQWFkcklSQkJBQ0VPUVFBaENDQVdCRUJDZnlBUXJTS0pBWVpDZjRVZ2pBRjhJSWtCaUtjaENBc2dHZ1JBUW44Z0VLMGlpUUdHUW4rRklJZ0JmQ0NKQVlpbklRNExRUUFoRlVFQUlRY2dFUVJBUW44Z0VLMGlpUUdHUW4rRklJc0JmQ0NKQVlpbklRY0xJQklFUUVKL0lCQ3RJb2tCaGtKL2hTQ0tBWHdnaVFHSXB5RVZDMEVBSVJoQkFDRVdRUUVnRUVFQmEzUWlHeUFmU1FSQUlCOGdHMnV0UW44Z0VLMGlpUUdHUW4rRmZDQ0pBWWluSVJZTElCRWdHMHNFUUNBUklCdHJyVUovSUJDdElva0Joa0ovaFh3Z2lRR0lweUVZQzBFQUlROUJBQ0VCSUJvZ0cwc0VRQ0FhSUJ0cnJVSi9JQkN0SW9rQmhrSi9oWHdnaVFHSXB5RUJDeUFTSUJ0TkRRQWdFaUFiYTYxQ2Z5QVFyU0tKQVlaQ2Y0VjhJSWtCaUtjaER3dEJmeUFZSUF3b0FyUUJJaEJySWh0QkFDQVlJQnRQR3lJWVFRUnFJaHNnR0NBYlN4c2lHQ0FvSUJnZ0tFa2JJaTFCZnlBSElBd29BdGdCSWhocklodEJBQ0FISUJ0UEd5SUhRUVJxSWhzZ0J5QWJTeHNpQnlBR0lBWWdCMHNiSWlzZ0lodEJBWFFpQnlBcklDMGdJaHRCQVhSQkFYSWlHeUFISUJ0TEd5SW9JQ0JKSVJRZ0ZpQVFheUlIUVFBZ0J5QVdUUnNpQjBFRWF5SVdRUUFnQnlBV1R4c2lKeUFJSUJocklnZEJBQ0FISUFoTkd5SUhRUVJySWdoQkFDQUhJQWhQR3lJd0lDSWJRUUYwSWhnZ01DQW5JQ0liUVFGMFFRRnlJaVJKSVNrZ0RpQU1LQUs0QVNJV2F5SUhRUUFnQnlBT1RSc2lCMEVFYXlJSVFRQWdCeUFJVHhzaUNDRVFJQUVnRENnQzNBRWlEbXNpQjBFQUlBRWdCMDhiSWdGQkJHc2lCMEVBSUFFZ0IwOGJJZ0VoQjBGL0lCVWdGbXNpRmtFQUlCVWdGazhiSWhWQkJHb2lGaUFWSUJaTEd5SVZJQW9nQ2lBVlN4c2lGaUVWUVg4Z0R5QU9heUlPUVFBZ0RpQVBUUnNpRGtFRWFpSVBJQTRnRDBzYklnNGdPQ0FPSURoSkd5SWJJUThnUHdSQUlBRWhFQ0FXSVE4Z0d5RVZJQWdoQndzZ0tDQWdJQlFiSVNnZ0dDQWtJQ2tiSVJnZ0hDQXROZ0k4SUJ3Z0p6WUNPQ0FjSUNzMkFqUWdIQ0F3TmdJd0FrQWdFMEVJU1FSQVFRY2hCa0VBSVE0TUFRc2dQaUFpUVFWMElnNXJJQ2RCQm5ScUlUZ2dEaUFoYWlBd1FRWjBhaUVVSUFZZ0xXb2hMU0FHSUNkcUlTY2dDaUFiYWlFa0lBRWdDbW9oS1NBaElCaEJCWFJxSVNwQkFDRU9BMEFDUUFKQUlBNGdGa2tnRGtFSGNpSUdJQWhQY1EwQUlBNGdKRWtnQmlBcFQzRU5BQ0FPUVFocUlRNE1BUXRCQ0NBVElBNXJJZ1lnQmtFSVR4c2hKVUVBSVFZRFFDQWVJREFnQmlBT2FpSWlJQ3NnSWtFQmFpSXNJQlFnQmtFQ2RDSXVha0VRUVFBUUhpQWVJQ2NnSWlBdElDd2dMaUE0YWtFUVFRQVFIaUFHUVFGcUlnWWdKVWNOQUFzZ0hFRWdhaEFpSUI0Z0dDQU9JQ2dnRGtFSWFpSU9JQ3BCQ0VFQlFRQVFKa1VOQlFzZ0RrRUhjaUlHSUJOSkRRQUxDd0pBSUE0Z0UwOE5BQ0FPSUJaSklBWWdDRTl4UlFSQUlBNGdDaUFiYWs4TkFTQUdJQUVnQ21wSkRRRUxJQnhCSUdvaEJrRUFJU0lnRXlBT2F5SXdCRUFEUUNBZUlBWW9BaEFpTFNBT0lDSnFJaWNnQmlnQ0ZDQW5RUUZxSWlzZ0lrRUNkQ0k0SUFZb0FnQWdCaWdDREVFRmRHb2dMVUVHZEdwcVFSQkJBQkFlSUI0Z0JpZ0NHQ0l0SUFZb0FnZ2lGR29nSnlBR0tBSWNJQlJxSUNzZ0JpZ0NBQ0FHS0FJTVFRVjBheUF0UVFaMGFpQTRha0VnYWtFUVFRQVFIaUFpUVFGcUlpSWdNRWNOQUFzTElBWVFJaUFlSUJnZ0RpQW9JQk1nSVNBWVFRVjBha0VJUVFGQkFCQW1SUTBEQ3lBY0lCczJBaHdnSENBQk5nSVlJQndnRmpZQ0ZDQWNJQWcyQWhBZ0dDQW9TUVJBSUJWQkFYUWlCaUFQUVFGMFFRRnlJaFVnQmlBVlN4c2lCaUFUSUFZZ0Uwa2JJUVlnUGlBL1FRVjBJaFZySUFGQkJuUnFJUTRnRlNBaGFpQUlRUVowYWlFVklBb2dHMm9oRHlBQklBcHFJUW9nSVNBUVFRRjBJZ0VnQjBFQmRFRUJjaUlISUFFZ0Iwa2JJZ2RCQlhScUlSQURRQ0FlSUJnZ0NFRUlJQ2dnR0dzaUFTQUJRUWhQR3lBWWFpSUJJQllnRlVFQlFSQVFIaUFlSUJnZ0NpQUJJQThnRGtFQlFSQVFIaUFjRUNJZ0hpQVlJQWNnQVNBR0lCQkJBVUVJUVFBUUprVU5CQ0FZUVFocUloZ2dLRWtOQUFzTElBeEJtQUZxSVF3Z0lDRUdJQk1oQ2lDR0FVSUJmQ0tHQVNDSEFWSU5BQXNMUVFFaEJ5QWVJQ05CRUdzb0FnQWlBU0F2S0FJQUlnWnJJQ05CREdzb0FnQWdQU2dDQUNJS2F5QWpRUWhyS0FJQUlnZ2dCbXNnSTBFRWF5Z0NBQ0FLYXlBSktBSTBRUUVnQ0NBQmF4QWVJQjRRSXlBaEVCQU1CQXNnSGhBaklDRVFFRUVBSVFjTUF3c2dIaEFqUVFBaEJ3d0NDeUFmRUNCQkFBc2hCeUFjS0FJZ0VCQUxJQnhCUUdza0FDQUhEUUFNQkFzZ0hVRzRDR29oSFNBTlFUUnFJUTBnQ1VITUFHb2hDU0FMUVFGcUlnc2dGeWdDRUVrTkFBc2dHU2dDSUNFZElCa29BaFFvQWdBaEZ3c0NRQ0FkS0FJUUlnbEZEUUFnR1NnQ1JBMEFJQmNvQWhRaURTZ0NIQ0VCQWtBQ1FBSkFJQmtvQWtBaUJnUkFJQmNvQWhBaUMwRURTUTBDQWtBZ0RTZ0NHQ0lISUEwb0FtUkdCRUFnQnlBTktBS3dBVVlOQVFzZ00wRUJRZFRLQUVFQUVBOE1Cd3NDUUNBWktBSVlLQUlZSWdvb0FpUWlDQ0FLS0FKWVJ3MEFJQWdnQ2lnQ2pBRkhEUUFnQVNBSFFaZ0JiQ0lLYWlJQlFZd0JheWdDQUNBQlFaUUJheWdDQUdzZ0FVR1FBV3NvQWdBZ0FVR1lBV3NvQWdCcmJDSUJJQTBvQW1nZ0Ntb2lCMEdNQVdzb0FnQWdCMEdVQVdzb0FnQnJJQWRCa0FGcktBSUFJQWRCbUFGcktBSUFhMnhIRFFBZ0RTZ0N0QUVnQ21vaUIwR01BV3NvQWdBZ0IwR1VBV3NvQWdCcklBZEJrQUZyS0FJQUlBZEJtQUZyS0FJQWEyd2dBVVlOQWdzZ00wRUJRZFRLQUVFQUVBOE1CZ3NnRnlnQ0VDSUxRUU5KRFFFQ1FDQVpLQUlZS0FJWUlnY29BaVFpQ2lBSEtBSllSdzBBSUFvZ0J5Z0NqQUVpQ0VjTkFDQUJJQXBCbUFGc0lnZHFJZ0VvQXBRQklBRW9Bb3dCYXlBQktBS1FBU0FCS0FLSUFXdHNJZ0VnQnlBTktBSm9haUlIS0FLVUFTQUhLQUtNQVdzZ0J5Z0NrQUVnQnlnQ2lBRnJiRWNOQUNBTktBSzBBU0FJUVpnQmJHb2lCeWdDbEFFZ0J5Z0NqQUZySUFjb0FwQUJJQWNvQW9nQmEyd2dBVVlOQVFzZ00wRUJRZFRLQUVFQUVBOE1CUXNnQ1VFQ1JnUkFJQjBvQXVnclJRMERJQXRCQW5RUUZDSUxSUTBGSUJjb0FoQWlDRVVOQWlBWktBSkFCRUJCQUNFWEFrQWdDRUVNU1FSQVFRQWhCZ3dCQ3lBTlFTUnFJUW9DUUNBTElBMGdDRUhNQUd4cVFTUnJUdzBBSUFvZ0N5QUlRUUowYWs4TkFFRUFJUVlNQVFzZ0RVR0lBbW9oRENBTlFid0JhaUVWSUExQjhBQnFJUTRnRFNBSVFYeHhJZ1pCekFCc2FpRU5RUUFoQ1FOQUlBc2dDVUVDZEdvZ0RDQUpRY3dBYkNJSGFpQUhJQlZxSUFjZ0Rtb2dCeUFLYXYwSkFnRDlWZ0lBQWYxV0FnQUMvVllDQUFQOUN3SUFJQWxCQkdvaUNTQUdSdzBBQ3lBR0lBaEdEUVFMQWtBZ0NFRURjU0lIUlFSQUlBWWhDUXdCQ3lBR0lRa0RRQ0FMSUFsQkFuUnFJQTBvQWlRMkFnQWdDVUVCYWlFSklBMUJ6QUJxSVEwZ0YwRUJhaUlYSUFkSERRQUxDeUFHSUFoclFYeExEUU1nQzBFTWFpRUdJQXRCQ0dvaENpQUxRUVJxSVF3RFFDQUxJQWxCQW5RaUIyb2dEU2dDSkRZQ0FDQUhJQXhxSUEwb0FuQTJBZ0FnQnlBS2FpQU5LQUs4QVRZQ0FDQUdJQWRxSUEwb0FvZ0NOZ0lBSUExQnNBSnFJUTBnQ1VFRWFpSUpJQWhIRFFBTERBTUxRUUFoRndKQUlBaEJERWtFUUVFQUlRWU1BUXNnRFVFMGFpRUtBa0FnQ3lBTklBaEJ6QUJzYWtFVWEwOE5BQ0FLSUFzZ0NFRUNkR3BQRFFCQkFDRUdEQUVMSUExQm1BSnFJUXdnRFVITUFXb2hGU0FOUVlBQmFpRU9JQTBnQ0VGOGNTSUdRY3dBYkdvaERVRUFJUWtEUUNBTElBbEJBblJxSUF3Z0NVSE1BR3dpQjJvZ0J5QVZhaUFISUE1cUlBY2dDbXI5Q1FJQS9WWUNBQUg5VmdJQUF2MVdBZ0FEL1FzQ0FDQUpRUVJxSWdrZ0JrY05BQXNnQmlBSVJnMERDd0pBSUFoQkEzRWlCMFVFUUNBR0lRa01BUXNnQmlFSkEwQWdDeUFKUVFKMGFpQU5LQUkwTmdJQUlBbEJBV29oQ1NBTlFjd0FhaUVOSUJkQkFXb2lGeUFIUncwQUN3c2dCaUFJYTBGOFN3MENJQXRCREdvaEJpQUxRUWhxSVFvZ0MwRUVhaUVNQTBBZ0N5QUpRUUowSWdkcUlBMG9BalEyQWdBZ0J5QU1haUFOS0FLQUFUWUNBQ0FISUFwcUlBMG9Bc3dCTmdJQUlBWWdCMm9nRFNnQ21BSTJBZ0FnRFVHd0Ftb2hEU0FKUVFScUlna2dDRWNOQUFzTUFnc2dIU2dDMENzb0FoUkJBVVlFUUNBR0JFQWdEU2dDSkNBTktBSndJQTBvQXJ3QklBRVFYd3dFQ3lBTktBSTBJQTBvQW9BQklBMG9Bc3dCSUFFUVh3d0RDeUFHQkVBZ0RTZ0NKQ0FOS0FKd0lBMG9BcndCSUFFUVhnd0RDeUFOS0FJMElBMG9Bb0FCSUEwb0Fzd0JJQUVRWGd3Q0N5QkFJQXMyQWdBZ00wRUJRWkhMQUNCQUVBOE1BUXNnR1NnQ0dDZ0NHQ2dDSUJvQ2Z5QWRLQUxvS3lFSFFRQWhEa0VBSUFoQkEzUVFGQ0lOUlEwQUdnSkFJQUZGRFFBZ0NFVU5BQ0FOSUFoQkFuUnFJUk1nQ0VGOGNTRVBJQWhCQTNFaERDQUlRUUZySVJBRFFFRUFJUmRCQUNFSklCQkJBMDhFUUFOQUlBMGdGMEVDZENJR2FpQUdJQXRxS0FJQUtnSUFPQUlBSUEwZ0JrRUVjaUlLYWlBS0lBdHFLQUlBS2dJQU9BSUFJQTBnQmtFSWNpSUthaUFLSUF0cUtBSUFLZ0lBT0FJQUlBMGdCa0VNY2lJR2FpQUdJQXRxS0FJQUtnSUFPQUlBSUJkQkJHb2hGeUFKUVFScUlna2dEMGNOQUFzTFFRQWhDaUFNQkVBRFFDQU5JQmRCQW5RaUJtb2dCaUFMYWlnQ0FDb0NBRGdDQUNBWFFRRnFJUmNnQ2tFQmFpSUtJQXhIRFFBTEMwRUFJUVlnQnlFWEEwQWdFeUFHUVFKMEloSnFJZ2xCQURZQ0FFTUFBQUFBSVk0QlFRQWhDa0VBSVJZZ0VFRUNTd1JBQTBBZ0NTQVhLZ0lBSUEwZ0NrRUNkR29pRlNvQ0FKUWdqZ0dTSW80Qk9BSUFJQWtnRnlvQ0JDQVZLZ0lFbENDT0FaSWlqZ0U0QWdBZ0NTQVhLZ0lJSUJVcUFnaVVJSTRCa2lLT0FUZ0NBQ0FKSUJjcUFnd2dGU29DREpRZ2pnR1NJbzRCT0FJQUlBcEJCR29oQ2lBWFFSQnFJUmNnRmtFRWFpSVdJQTlIRFFBTEMwRUFJUlVnREFSQUEwQWdDU0FYS2dJQUlBMGdDa0VDZEdvcUFnQ1VJSTRCa2lLT0FUZ0NBQ0FLUVFGcUlRb2dGMEVFYWlFWElCVkJBV29pRlNBTVJ3MEFDd3NnQ3lBU2FpSUtJQW9vQWdBaUNrRUVhallDQUNBS0lJNEJPQUlBSUFaQkFXb2lCaUFJUncwQUN5QU9RUUZxSWc0Z0FVY05BQXNMSUEwUUVFRUJDeUY3SUFzUUVDQjdSUTBDQ3lBWktBSVVLQUlBSWhZb0FoQkZCRUJCQVNFeERBSUxJQmtvQWlBb0F0QXJJaGRCdUFocUlSTWdGMEcwQ0dvaEVpQVpLQUpFSVJBZ0ZpZ0NGQ0VISUJrb0FoZ29BaGdoQ2tFQUlRZ0RRQUpBSUJBRVFDQVFJQWhCQW5ScUtBSUFSUTBCQ3lBSEtBSWNJZ0VnQ2lnQ0pFR1lBV3hxSVFzQ2Z5QVpLQUpBUlFSQUlBc29BcFFCSUFzb0Fvd0JheUVHSUFzb0FwQUJJQXNvQW9nQmF5RUJRUUFoREVFMERBRUxJQUVnQnlnQ0dFR1lBV3hxSWdaQmtBRnJLQUlBSUFzb0FnZ2dDeWdDQUdzaUFTQUdRWmdCYXlnQ0FHcHJJUXdnQ3lnQ0RDQUxLQUlFYXlFR1FTUUxJUWtnQ2lnQ0dDRUxBbjhnQ2lnQ0lBUkFRUUVnQzBFQmEzUWlDMEVCYXlFZFFRQWdDMnNNQVF0QmZ5QUxkRUYvY3lFZFFRQUxJUThnQVVVTkFDQUdSUTBBSUFjZ0NXb29BZ0FoQ1NBWEtBSVVRUUZHQkVBZ0V5QUlRYmdJYkNJTGFpRVJJQXNnRW1vaEdDQUJRUUZ4SVJvZ0FVRUNkQ0V6SUFGQmZIRWlEa0VDZENFYklCMzlFU0dDQVNBUC9SRWhnQUZCQUNFVklBRkJCRWtoSHdOQUFrQUNRQUpBSUI4TkFDQUpJQkZKSUJnZ0NTQXpha2x4RFFBZ0NTQWJhaUVOSUJmOUNRSzBDQ0dEQVVFQUlRc0RRQ0FKSUF0QkFuUnFJaUFnZ0FFZ2d3RWdJUDBBQWdEOXJnRWloQUVnZ2dIOXRnRWdoQUVnZ0FIOU9mMVMvUXNDQUNBTFFRUnFJZ3NnRGtjTkFBc2dEaUlMSUFGR0RRSU1BUXNnQ1NFTlFRQWhDd3NnQzBFQmNpRUpJQm9FUUNBTklBOGdGeWdDdEFnZ0RTZ0NBR29pQ3lBZElBc2dIVWdiSUFzZ0QwZ2JOZ0lBSUExQkJHb2hEU0FKSVFzTElBRWdDVVlOQUFOQUlBMGdEeUFYS0FLMENDQU5LQUlBYWlJSklCMGdDU0FkU0JzZ0NTQVBTQnMyQWdBZ0RTQVBJQmNvQXJRSUlBMG9BZ1JxSWdrZ0hTQUpJQjFJR3lBSklBOUlHellDQkNBTlFRaHFJUTBnQzBFQ2FpSUxJQUZIRFFBTEN5QU5JQXhCQW5ScUlRa2dGVUVCYWlJVklBWkhEUUFMREFFTElCMnNJWVlCSUErc0lZY0JRUUFoRlFOQVFRQWhDd05BSUFrQ2Z5QWRJQWtxQWdBaWpnRkRBQUFBVDE0TkFCb2dEeUNPQVVNQUFBRFBYUTBBR2lDSEFTQVhOQUswQ0FKL0lJNEJrQ0tPQVl0REFBQUFUMTBFUUNDT0FhZ01BUXRCZ0lDQWdIZ0xySHdpaWdFZ2hnRWdoZ0VnaWdGVkd5Q0hBU0NLQVZVYnB3czJBZ0FnQ1VFRWFpRUpJQXRCQVdvaUN5QUJSdzBBQ3lBSklBeEJBblJxSVFrZ0ZVRUJhaUlWSUFaSERRQUxDeUFIUWN3QWFpRUhJQmRCdUFocUlSY2dDa0UwYWlFS1FRRWhNU0FJUVFGcUlnZ2dGaWdDRUVrTkFBc01BUXNnQlVFQlFab1pRUUFRRHdzZ1FFRVFhaVFBSURGRkJFQWdUeEF1SUFBZ0FDZ0NDRUdBZ0FKeU5nSUlJQVZCQVVIdzFBQkJBQkFQREFFTEFrQWdBa1VOQUFKL0lBSWhCMEVBSVFZQ1FDQUFLQUxRQVNJVlFRRVFWQ0lCUVg5R0RRQWdBU0FEU3cwQVFRRWdGU2dDR0NJQktBSVFSUTBCR2lBQktBSVlJUWdnRlNnQ0ZDZ0NBQ2dDRkNFWEEwQWdDQ2dDR0NJQlFRZHhJUUlnQVVFRGRpRURJQmNvQWh3aUJpQUlLQUlrUVpnQmJHb2hBUUovSUJVb0FrQUVRQ0FHSUJjb0FoaEJtQUZzYWlJR1FaQUJheWdDQUNBQktBSUlJQUVvQWdCcklnc2dCa0dZQVdzb0FnQnFheUVNSUFFb0Fnd2dBU2dDQkdzaENVRWtEQUVMSUFFb0FwUUJJQUVvQW93QmF5RUpJQUVvQXBBQklBRW9Bb2dCYXlFTFFRQWhERUUwQ3lBWGFpZ0NBQ0VCQWtBQ1FBSkFBa0FDUUVFRUlBTWdBa0VBUjJvaUFpQUNRUU5HRzBFQmF3NEVBUUlFQUFRTElBbEZEUU1nQ3lBTWFpRUdJQXRCQW5RaEFpQUpRUVJQQkVBZ0NVRjhjU0VLUVFBaEN3TkFJQWNnQVNBQ0VCSWhCeUFCSUFaQkFuUWlBMm9pRFNBRGFpSU1JQU5xSWc0Z0Eyb2hBU0FDSUFkcUlBMGdBaEFTSUFKcUlBd2dBaEFTSUFKcUlBNGdBaEFTSUFKcUlRY2dDMEVFYWlJTElBcEhEUUFMQzBFQUlRc2dDVUVEY1NJRFJRMERBMEFnQnlBQklBSVFFaUVISUFFZ0JrRUNkR29oQVNBQ0lBZHFJUWNnQzBFQmFpSUxJQU5IRFFBTERBTUxJQWxGSUF0RmNpRUNJQWdvQWlCRkRRRWdBZzBDSUF0QkFuUWhEaUFMUVh4eElnTkJBblFoRDBFQUlRMERRQUpBQWtBQ1FDQUxRUVJKRFFBZ0FTQUhJQXRxU1NBQklBNXFJQWRMY1EwQUlBTWdCMm9oZkNBQklBOXFJUVpCQUNFS0EwQWdCeUFLYWlBQklBcEJBblJxL1FBQ0FQME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQME5BQVFJREFBQUFBQUFBQUFBQUFBQUFQMWFBQUFBSUFwQkJHb2lDaUFEUncwQUN5QjhJUWNnQXlJQ0lBdEdEUUlNQVFzZ0FTRUdRUUFoQWd0QkFDRUtJQXNnQWlJQmEwRUhjU0lXQkVBRFFDQUhJQVlvQWdBNkFBQWdBVUVCYWlFQklBZEJBV29oQnlBR1FRUnFJUVlnQ2tFQmFpSUtJQlpIRFFBTEN5QUNJQXRyUVhoTERRQURRQ0FISUFZb0FnQTZBQUFnQnlBR0tBSUVPZ0FCSUFjZ0JpZ0NDRG9BQWlBSElBWW9BZ3c2QUFNZ0J5QUdLQUlRT2dBRUlBY2dCaWdDRkRvQUJTQUhJQVlvQWhnNkFBWWdCeUFHS0FJY09nQUhJQWRCQ0dvaEJ5QUdRU0JxSVFZZ0FVRUlhaUlCSUF0SERRQUxDeUFHSUF4QkFuUnFJUUVnRFVFQmFpSU5JQWxIRFFBTERBSUxJQWxGSUF0RmNpRUNJQWdvQWlBRVFDQUNEUUlnQzBFQ2RDRU9JQXRCQVhRaER5QUxRWHh4SWdOQkFuUWhGaUFEUVFGMElSQkJBQ0VOQTBBQ1FBSkFBa0FnQzBFRVNRMEFJQUVnQnlBUGFra2dBU0FPYWlBSFMzRU5BQ0FCSUJacUlRWWdCeUFRYWlGOVFRQWhDZ05BSUFjZ0NrRUJkR29nQVNBS1FRSjBhdjBBQWdEOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOURRQUJCQVVJQ1F3TkFBRUFBUUFCQUFIOVd3RUFBQ0FLUVFScUlnb2dBMGNOQUFzZ2ZTRUhJQU1pQWlBTFJnMENEQUVMSUFFaEJrRUFJUUlMUVFBaENpQUxJQUlpQVd0QkIzRWlFd1JBQTBBZ0J5QUdLQUlBT3dFQUlBRkJBV29oQVNBSFFRSnFJUWNnQmtFRWFpRUdJQXBCQVdvaUNpQVRSdzBBQ3dzZ0FpQUxhMEY0U3cwQUEwQWdCeUFHS0FJQU93RUFJQWNnQmlnQ0JEc0JBaUFISUFZb0FnZzdBUVFnQnlBR0tBSU1Pd0VHSUFjZ0JpZ0NFRHNCQ0NBSElBWW9BaFE3QVFvZ0J5QUdLQUlZT3dFTUlBY2dCaWdDSERzQkRpQUhRUkJxSVFjZ0JrRWdhaUVHSUFGQkNHb2lBU0FMUncwQUN3c2dCaUFNUVFKMGFpRUJJQTFCQVdvaURTQUpSdzBBQ3d3Q0N5QUNEUUVnQzBFQ2RDRU9JQXRCQVhRaER5QUxRWHh4SWdOQkFuUWhGaUFEUVFGMElSQkJBQ0VOQTBBQ1FBSkFBa0FnQzBFRVNRMEFJQUVnQnlBUGFra2dBU0FPYWlBSFMzRU5BQ0FCSUJacUlRWWdCeUFRYWlGK1FRQWhDZ05BSUFjZ0NrRUJkR29nQVNBS1FRSjBhdjBBQWdEOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOURRQUJCQVVJQ1F3TkFBRUFBUUFCQUFIOVd3RUFBQ0FLUVFScUlnb2dBMGNOQUFzZ2ZpRUhJQU1pQWlBTFJnMENEQUVMSUFFaEJrRUFJUUlMUVFBaENpQUxJQUlpQVd0QkIzRWlFd1JBQTBBZ0J5QUdLQUlBT3dFQUlBRkJBV29oQVNBSFFRSnFJUWNnQmtFRWFpRUdJQXBCQVdvaUNpQVRSdzBBQ3dzZ0FpQUxhMEY0U3cwQUEwQWdCeUFHS0FJQU93RUFJQWNnQmlnQ0JEc0JBaUFISUFZb0FnZzdBUVFnQnlBR0tBSU1Pd0VHSUFjZ0JpZ0NFRHNCQ0NBSElBWW9BaFE3QVFvZ0J5QUdLQUlZT3dFTUlBY2dCaWdDSERzQkRpQUhRUkJxSVFjZ0JrRWdhaUVHSUFGQkNHb2lBU0FMUncwQUN3c2dCaUFNUVFKMGFpRUJJQTFCQVdvaURTQUpSdzBBQ3d3QkN5QUNEUUFnQzBFQ2RDRU9JQXRCZkhFaUEwRUNkQ0VQUVFBaERRTkFBa0FDUUFKQUlBdEJCRWtOQUNBQklBY2dDMnBKSUFFZ0Rtb2dCMHR4RFFBZ0F5QUhhaUYvSUFFZ0Qyb2hCa0VBSVFvRFFDQUhJQXBxSUFFZ0NrRUNkR3I5QUFJQS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9RMEFCQWdNQUFBQUFBQUFBQUFBQUFBQS9Wb0FBQUFnQ2tFRWFpSUtJQU5IRFFBTElIOGhCeUFESWdJZ0MwWU5BZ3dCQ3lBQklRWkJBQ0VDQzBFQUlRb2dDeUFDSWdGclFRZHhJaFlFUUFOQUlBY2dCaWdDQURvQUFDQUJRUUZxSVFFZ0IwRUJhaUVISUFaQkJHb2hCaUFLUVFGcUlnb2dGa2NOQUFzTElBSWdDMnRCZUVzTkFBTkFJQWNnQmlnQ0FEb0FBQ0FISUFZb0FnUTZBQUVnQnlBR0tBSUlPZ0FDSUFjZ0JpZ0NERG9BQXlBSElBWW9BaEE2QUFRZ0J5QUdLQUlVT2dBRklBY2dCaWdDR0RvQUJpQUhJQVlvQWh3NkFBY2dCMEVJYWlFSElBWkJJR29oQmlBQlFRaHFJZ0VnQzBjTkFBc0xJQVlnREVFQ2RHb2hBU0FOUVFGcUlnMGdDVWNOQUFzTElCZEJ6QUJxSVJjZ0NFRTBhaUVJUVFFaEJpQnlRUUZxSW5JZ0ZTZ0NHQ2dDRUVrTkFBc0xJQVlMUlEwQklFOG9BdHdySWdGRkRRQWdBUkFRSUU5Q0FEY0MzQ3NMSUFBZ0FDMEFSRUgrQVhFNkFFUWdBQ0FBS0FJSVFmOStjVFlDQ0VFQklXY2dCQ2tEQ0NLR0FWQUVma0lBQlNDR0FTQUVLUU00ZlF0UUlBQW9BZ2dpQVVIQUFFWnhEUUFnQVVHQUFrWU5BQ0FFSUU1QkNtcEJBaUFGRUJwQkFrY0VRQ0FGUVFGQkFpQUFLQUs0QVJ0QmxoSkJBQkFQSUFBb0FyZ0JSU0ZuREFFTElFNUJDbW9nVGtFTWFrRUNFQkVnVGlnQ0RDSUJRWkQvQTBZTkFDQUJRZG4vQTBZRVFDQUFRWUFDTmdJSUlBQkJBRFlDekFFTUFRc2dCQ2tEQ0NLR0FWQUVma0lBQlNDR0FTQUVLUU00ZlF0UUJFQWdBRUhBQURZQ0NDQUZRUUpCckQ5QkFCQVBEQUVMUVFBaFp5QUZRUUZCN0Q1QkFCQVBDeUJPUVJCcUpBQWdad3NMQUNBQUJFQWdBQkFRQ3d1MEFRRUJmeUFBS0FJTVJRUkFJQUlnQUNnQ0pDQUJFUU1BRHdzQ1FFRUlFQlFpQTBVTkFDQURJQUkyQWdRZ0F5QUJOZ0lBUVFnUUZDSUJSUVJBSUFNUUVBOExJQUVnQXpZQ0FDQUFJQUFvQWdSQjVBQnNJZ0kyQWlnRFFDQUFLQUlZSUFKS0RRQUxJQUVnQUNnQ0ZEWUNCQ0FBSUFFMkFoUWdBQ0FBS0FJWVFRRnFOZ0lZSUFBb0Fod2lBVVVOQUNBQktBSUFRUUEyQWdnZ0FDQUJLQUlFTmdJY0lBQWdBQ2dDSUVFQmF6WUNJQ0FCRUJBTEMvb0NBUVIvQWtBZ0FFVU5BQ0FBS0FLc0tDSUJCRUFnQUNnQ3FDZ2lBZ1JBUVFBaEFRTkFJQUFvQXF3b0lBRkJBM1JxS0FJQUlnTUVRQ0FERUJBZ0FDZ0NxQ2doQWdzZ0FVRUJhaUlCSUFKSkRRQUxJQUFvQXF3b0lRRUxJQUJCQURZQ3FDZ2dBUkFRSUFCQkFEWUNyQ2dMSUFBb0FyUW9JZ0VFUUNBQkVCQWdBRUVBTmdLMEtBc2dBQ2dDMENzaUFRUkFJQUVRRUNBQVFRQTJBdEFyQ3lBQUtBTHNLeUlCQkVBZ0FSQVFJQUJCQURZQzdDc0xJQUFvQXVncklnRUVRQ0FCRUJBZ0FFRUFOZ0xvS3dzZ0FDZ0MvQ3NpQVFSQUlBRVFFQ0FBUVFBMkFvUXNJQUJDQURjQy9Dc0xJQUFvQXZBcklnRUVRQ0FBS0FMMEt5SURCSDlCQUNFQ0EwQWdBU2dDRENJRUJFQWdCQkFRSUFGQkFEWUNEQ0FBS0FMMEt5RURDeUFCUVJScUlRRWdBa0VCYWlJQ0lBTkpEUUFMSUFBb0F2QXJCU0FCQ3hBUUlBQkJBRFlDOENzTElBQW9BdVFySWdFRVFDQUJFQkFnQUVFQU5nTGtLd3NnQUNnQzNDc2lBVVVOQUNBQkVCQWdBRUlBTndMY0t3c0x5QWNDRVg4QmZpQUFLQUlRSWdoQklFOEVRQ0FBS1FNSXB3OExBa0FnQUNnQ0ZDSURRUVJPQkVBZ0FDZ0NBQ0lDUVFOcktBSUFJUUVnQUNBRFFRUnJJZ00yQWhRZ0FDQUNRUVJyTmdJQURBRUxJQU5CQUV3RVFBd0JDeUFEUVFGeElRMGdBQ2dDQUNFQ0FrQWdBMEVCUmdSQVFSZ2hCQXdCQ3lBRFFmNy8vLzhIY1NFSlFSZ2hCQU5BSUFBZ0FrRUJheUlHTmdJQUlBSXRBQUFoRENBQUlBSkJBbXNpQWpZQ0FDQUFJQU5CQVdzMkFoUWdCaTBBQUNFR0lBQWdBMEVDYXlJRE5nSVVJQXdnQkhRZ0FYSWdCaUFFUVFocmRISWhBU0FFUVJCcklRUWdCVUVDYWlJRklBbEhEUUFMQ3lBTkJFQWdBQ0FDUVFGck5nSUFJQUl0QUFBaERpQUFJQU5CQVdzMkFoUWdEaUFFZENBQmNpRUJDMEVBSVFNTElBQW9BaGdoQWlBQUlBRkIvd0Z4SWdsQmp3RkxOZ0lZSUFCQkIwRUlJQUZCZ0lDQStBZHhRWUNBZ1BnSFJodEJDQ0FDR3lJQ1FRaEJCMEVJSUFGQmdJRDhBM0ZCZ0lEOEEwWWJJQUZCLy8vLy8zaE5HMm9pQkVFSVFRZEJDQ0FCUVlEK0FYRkJnUDRCUmhzZ0FVRVFka0gvQVhFaUJVR1BBVTBiYWlJR1FRaEJCMEVJSUFGQi93QnhRZjhBUmhzZ0FVRUlka0gvQVhFaUIwR1BBVTBiSUFocWFpSUtOZ0lRSUFBZ0FDa0RDQ0FGSUFKMElBRkJHSFp5SUFjZ0JIUnlJQWtnQm5SeXJTQUlyWWFFSWhJM0F3Z2dDa0VmVFFSQUFrQWdBMEVFVGdSQUlBQW9BZ0FpQWtFRGF5Z0NBQ0VCSUFBZ0EwRUVhellDRkNBQUlBSkJCR3MyQWdBTUFRc2dBMEVBVEFSQVFRQWhBUXdCQ3lBRFFRRnhJUkFnQUNnQ0FDRUNBa0FnQTBFQlJnUkFRUmdoQkVFQUlRRU1BUXNnQTBIKy8vLy9CM0VoQmtFWUlRUkJBQ0VCUVFBaEJRTkFJQUFnQWtFQmF5SUhOZ0lBSUFJdEFBQWhEeUFBSUFKQkFtc2lBallDQUNBQUlBTkJBV3MyQWhRZ0J5MEFBQ0VISUFBZ0EwRUNheUlETmdJVUlBOGdCSFFnQVhJZ0J5QUVRUWhyZEhJaEFTQUVRUkJySVFRZ0JVRUNhaUlGSUFaSERRQUxDeUFRUlEwQUlBQWdBa0VCYXpZQ0FDQUNMUUFBSVJFZ0FDQURRUUZyTmdJVUlCRWdCSFFnQVhJaEFRc2dBQ0FCUWY4QmNTSUNRWThCU3pZQ0dDQUFRUWhCQjBFSUlBRkJnSUNBK0FkeFFZQ0FnUGdIUmhzZ0NVR1BBVTBiSWdOQkNFRUhRUWdnQVVHQWdQd0RjVUdBZ1B3RFJoc2dBVUgvLy8vL2VFMGJhaUlFUVFoQkIwRUlJQUZCZ1A0QmNVR0EvZ0ZHR3lBQlFSQjJRZjhCY1NJRlFZOEJUUnRxSWdoQkNFRUhRUWdnQVVIL0FIRkIvd0JHR3lBQlFRaDJRZjhCY1NJSlFZOEJUUnNnQ21wcU5nSVFJQUFnQlNBRGRDQUJRUmgyY2lBSklBUjBjaUFDSUFoMGNxMGdDcTJHSUJLRUloSTNBd2dMSUJLbkM4a1VBaDEvQm5zZ0FDZ0NDQ0lLSUFBb0FnUnFJUWdDUUNBQUtBSU1SUVJBSUFoQkFrZ05BU0FEUVFCTURRRWdBQ2dDQUNJRklBaEJCR3NpQmtFQmRpSU1RUUowSWdrZ0FTQUtRUUowYWlJSElBTkJBblFpQkdwcVFRUnFTU0FGSUF4QkEzUnFRUWhxSWdBZ0IwRUVha3R4SUFVZ0FTQUVhaUFKYWtFRWFra2dBVUVFYWlBQVNYRnlJUklnQ0VFRVNTSVVJQUpCQVVkeUlSVWdBa0VCUmlBR1FRVkxjU0VXSUFoQi9QLy8vd2R4SVJNZ0NFRUJjU0VYSUFwQkFXb2hEeUFJUVFOeElSRWdBU0FGYXlFWUlBVWdDRUVDZEdvaEdTQUZJQWhCQVdzaUFFRUNkR29oR2lBTVFRRnFJaHRCZkhFaUVFRUJkQ0VMSUFJZ0NteEJBblFoSENBQVFRRjJJQUpzUVFKMElSMERRQ0FCS0FJQUlBRWdIR29vQWdBaUNVRUJha0VCZFdzaEJ3SkFJQlFFUUNBSklRUkJBQ0VHREFFTFFRQWhCZ0pBQW45QkFDQVdSUTBBR2tFQUlCSU5BQm9nQ2YwUklTSWdCLzBSSVNIOURBQUFBQUFDQUFBQUJBQUFBQVlBQUFBaEpVRUFJUUFEUUNBQklBQkJBblJxL1FBQ0JDRWtJQUVnQUNBUGFrRUNkR3I5QUFJQUlTTWdCU0FBUVFOMGFpSUVJQ0g5V2dJQUF5QUVRUWhxSUNRZ0l5QWlJQ1A5RFF3TkRnOFFFUklURkJVV0Z4Z1pHaHNpSlAydUFmME1BZ0FBQUFJQUFBQUNBQUFBQWdBQUFQMnVBVUVDL2F3Qi9iRUJJaUw5V2dJQUFDQUVRUkJxSUNMOVdnSUFBU0FFUVJocUlDTDlXZ0lBQWlBRklDWDlEQUVBQUFBQkFBQUFBUUFBQUFFQUFBRDlVQ0ltL1JzQVFRSjBhaUFpSUNFZ0l2ME5EQTBPRHhBUkVoTVVGUllYR0JrYUcvMnVBVUVCL2F3QklDVDlyZ0VpSWYxYUFnQUFJQVVnSnYwYkFVRUNkR29nSWYxYUFnQUJJQVVnSnYwYkFrRUNkR29nSWYxYUFnQUNJQVVnSnYwYkEwRUNkR29nSWYxYUFnQURJQ1g5REFnQUFBQUlBQUFBQ0FBQUFBZ0FBQUQ5cmdFaEpTQWlJU0VnSXlFaUlBQkJCR29pQUNBUVJ3MEFDeUFpL1JzRElRUWdJZjBiQXlFSElCQWdHMFlOQVNBTElRWWdCQ0VKSUJBTElRQURRQ0FCSUFCQkFXb2lDaUFDYkVFQ2RHb29BZ0FoSGlBQklBQWdEMm9nQW14QkFuUnFLQUlBSVFRZ0JTQUdRUUowYWlJT0lBYzJBZ0FnRGlBSElCNGdCQ0FKYWtFQ2FrRUNkV3NpQjJwQkFYVWdDV28yQWdRZ0JrRUNhaUVHSUFBZ0RFY2hIeUFFSVFrZ0NpRUFJQjhOQUFzTUFRc2dDeUVHQ3lBRklBWkJBblJxSUFjMkFnQkJmQ0VBSUJjRWZ5QWFJQUVnSFdvb0FnQWdCRUVCYWtFQmRXc2lBRFlDQUNBQUlBZHFRUUYxSVFkQmVBVkJmQXNnR1dvZ0JDQUhhallDQUVFQUlRWkJBQ0VBUVFBaEJBSkFJQlVnR0NBTlFRSjBha0VRU1hKRkJFQURRQ0FCSUFCQkFuUWlCR29nQkNBRmF2MEFBZ0Q5Q3dJQUlBQkJCR29pQUNBVFJ3MEFDeUFUSWdRZ0NFWU5BUXNnQkNFQUlCRUVRQU5BSUFFZ0FDQUNiRUVDZEdvZ0JTQUFRUUowYWlnQ0FEWUNBQ0FBUVFGcUlRQWdCa0VCYWlJR0lCRkhEUUFMQ3lBRUlBaHJRWHhMRFFBRFFDQUJJQUFnQW14QkFuUnFJQVVnQUVFQ2RHb29BZ0EyQWdBZ0FTQUFRUUZxSWdRZ0FteEJBblJxSUFVZ0JFRUNkR29vQWdBMkFnQWdBU0FBUVFKcUlnUWdBbXhCQW5ScUlBVWdCRUVDZEdvb0FnQTJBZ0FnQVNBQVFRTnFJZ1FnQW14QkFuUnFJQVVnQkVFQ2RHb29BZ0EyQWdBZ0FFRUVhaUlBSUFoSERRQUxDeUFCUVFScUlRRWdEVUVCYWlJTklBTkhEUUFMREFFTEFrQUNRQUpBSUFoQkFXc09BZ0FCQWdzZ0EwRUFUQTBDUVFBaEFnSkFJQU5CQkVrRVFDQUJJUUFNQVFzZ0FTQURRZnovLy84SGNTSUNRUUowYWlFQUEwQWdBU0FHUVFKMGFpSUVJQVQ5QUFJQUlpSDlHd0JCQW0zOUVTQWgvUnNCUVFKdC9Sd0JJQ0g5R3dKQkFtMzlIQUlnSWYwYkEwRUNiZjBjQS8wTEFnQWdCa0VFYWlJR0lBSkhEUUFMSUFJZ0EwWU5Bd3NEUUNBQUlBQW9BZ0JCQW0wMkFnQWdBRUVFYWlFQUlBSkJBV29pQWlBRFJ3MEFDd3dDQ3lBRFFRQk1EUUVnQUNnQ0FDRUpJQUlnQ214QkFuUWhCd05BSUFrZ0FTZ0NBQ0FCSUFkcUlnUW9BZ0JCQVdwQkFYVnJJZ0EyQWdRZ0NTQUFJQVFvQWdCcUlnQTJBZ0FnQVNBQU5nSUFJQUVnQWtFQ2RHb2dDU2dDQkRZQ0FDQUJRUVJxSVFFZ0JrRUJhaUlHSUFOSERRQUxEQUVMSUFoQkEwZ05BQ0FEUVFCTURRQWdBQ2dDQUNJRklBZ2dDRUVCY1NJVVJTSUdhMEVFYXlJSlFRRjJJZ3RCQW5RaUJ5QUJJQU5CQW5RaUFHcHFTU0FGSUF0QkEzUnFRUXhxSWdRZ0FVRUVha3R4SUFWQkJHb2dBQ0FCSUFwQkFuUnFJZ0JxSUFkcVFRaHFTU0FBUVFocUlBUkpjWEloRlNBQ1FRRkhJQWhCQkVseUlSWWdBa0VCUmlBSlFRVkxjU0VYSUFoQi9QLy8vd2R4SVJBZ0NFRURjU0VSSUFFZ0JXc2hHQ0FGSUFoQkFuUnFRUVJySVJrZ0JTQUlRUUpySWdCQkFuUnFJUm9nQzBFQmFpSVNRWHh4SWd4QkFYSWhFeUFNUVFGMFFRRnlJUXNnQWlBS2JFRUNkQ0ViSUFBZ0JtdEJBa2toSENBSVFRRjJRUUZySUFKc1FRSjBJUjBEUUNBRklBRW9BZ0FnQVNBYmFpSVBJQUpCQW5ScUtBSUFJZ2tnRHlnQ0FDSUFha0VDYWtFQ2RXc2lCeUFBYWpZQ0FFRUJJUVFDUUNBY0JFQWdDU0VHREFFTEFrQUNmMEVCSUJkRkRRQWFRUUVnRlEwQUdpQUovUkVoSVNBSC9SRWhJa0VBSVFBRFFDQUZJQUJCQTNScUlnY2dBU0FBUVFKMElnUnEvUUFDQkNBaElBUWdEMnI5QUFJSUlpSDlEUXdORGc4UUVSSVRGQlVXRnhnWkdoc2lKQ0FoL2E0Qi9Rd0NBQUFBQWdBQUFBSUFBQUFDQUFBQS9hNEJRUUw5ckFIOXNRRWlJeUFqSUNJZ0kvME5EQTBPRHhBUkVoTVVGUllYR0JrYUcvMnVBVUVCL2F3QklDVDlyZ0VpSlAwTkJBVUdCeGdaR2hzSUNRb0xIQjBlSC8wTEFoUWdCeUFpSUNUOURRd05EZzhRRVJJVEFBRUNBeFFWRmhjZ0kvME5BQUVDQXdRRkJnY1FFUklUREEwT0QvMExBZ1FnSXlFaUlBQkJCR29pQUNBTVJ3MEFDeUFoL1JzRElRWWdJdjBiQXlFSElBd2dFa1lOQVNBTElRUWdCaUVKSUJNTElRQURRQ0FCSUFBZ0FteEJBblJxS0FJQUlSNGdEeUFBUVFGcUlnb2dBbXhCQW5ScUtBSUFJUVlnQlNBRVFRSjBhaUlPSUFjMkFnQWdEaUFISUI0Z0JpQUpha0VDYWtFQ2RXc2lCMnBCQVhVZ0NXbzJBZ1FnQkVFQ2FpRUVJQUFnRWtjaElDQUtJUUFnQmlFSklDQU5BQXNNQVFzZ0N5RUVDeUFZSUExQkFuUnFJUWtnQlNBRVFRSjBhaUFITmdJQUFrQWdGRVVFUUNBYUlBRWdIV29vQWdBZ0JrRUJha0VCZFdzaUFDQUhha0VCZFNBR2FqWUNBQXdCQ3lBR0lBZHFJUUFMSUJrZ0FEWUNBRUVBSVFaQkFDRUFRUUFoQkFKQUlCWWdDVUVRU1hKRkJFQURRQ0FCSUFCQkFuUWlCR29nQkNBRmF2MEFBZ0Q5Q3dJQUlBQkJCR29pQUNBUVJ3MEFDeUFRSWdRZ0NFWU5BUXNnQkNFQUlCRUVRQU5BSUFFZ0FDQUNiRUVDZEdvZ0JTQUFRUUowYWlnQ0FEWUNBQ0FBUVFGcUlRQWdCa0VCYWlJR0lCRkhEUUFMQ3lBRUlBaHJRWHhMRFFBRFFDQUJJQUFnQW14QkFuUnFJQVVnQUVFQ2RHb29BZ0EyQWdBZ0FTQUFRUUZxSWdRZ0FteEJBblJxSUFVZ0JFRUNkR29vQWdBMkFnQWdBU0FBUVFKcUlnUWdBbXhCQW5ScUlBVWdCRUVDZEdvb0FnQTJBZ0FnQVNBQVFRTnFJZ1FnQW14QkFuUnFJQVVnQkVFQ2RHb29BZ0EyQWdBZ0FFRUVhaUlBSUFoSERRQUxDeUFCUVFScUlRRWdEVUVCYWlJTklBTkhEUUFMQ3dzM0FRSi9Jd0JCRUdzaUFTUUFJQUFFZnlBQlFReHFRU0FnQUJCc0lRQkJBQ0FCS0FJTUlBQWJCVUVBQ3lFQ0lBRkJFR29rQUNBQ0N4c0JBWDhnQUFSQUlBQW9BZ2dpQVFSQUlBRVFFQXNnQUJBUUN3c3hBUUovUVFGQkRCQVRJZ0FFUUNBQVFRbzJBZ1FnQUVFS1FRUVFFeUlCTmdJSUlBRUVRQ0FBRHdzZ0FCQVFDMEVBQ3k4QkFYOGdBQVJBSUFBb0FnUWlBUVJBSUFBb0FnQWdBUkVDQUFzZ0FDZ0NJQkFRSUFCQkFEWUNJQ0FBRUJBTEN5b0FJQUFFUUNBQUtBSXdJQUJCRkVFUUlBQW9Ba3diYWlnQ0FCRUNBQ0FBUVFBMkFqQWdBQkFRQ3d0VEFRSi9JQUJCQURZQ01DQUFJQUFvQWlBMkFpUWdBU0FBS0FJQUlBQW9BaHdSQ2dBaEJDQUFLQUpFSVFJZ0JFVUVRQ0FBSUFKQkJISTJBa1JCQUE4TElBQWdBVGNET0NBQUlBSkJlM0UyQWtSQkFRdUdBd0lGZndwK0l3QkJJR3NpQXlRQUFrQWdBQ2dDRUNJRlJRUkFRUUVoQWd3QkN3SkFJQUEwQWdBaUIwSUFVdzBBSUFBMEFnUWlDRUlBVXcwQUlBQTBBZ2dpQ1VJQVV3MEFJQUEwQWd3aUNrSUFVdzBBSUFBb0FoZ2hBQ0FIUWdGOUlRd2dDRUlCZlNFTklBbENBWDBoQ1NBS1FnRjlJUW9EUUNBQUlBd2dBQ2dDQUNJQ3JTSUhmQ0FIZ0NJTFBnSVFJQUFnRFNBQUtBSUVJZ2F0SWdkOElBZUFJZzQrQWhSQ0FTQUFOUUlvSWdlR0lnOUNBWDBpQ0NBSklBS3NJaEI4SUJCL3hId2dCNGVuSUFnZ0M4UjhJQWVIcDJzaUFrRUFTQVJBSUFNZ0FqWUNCQ0FESUFRMkFnQWdBVUVCUWRQa0FDQURFQTlCQUNFQ0RBTUxJQUFnQWpZQ0NDQUlJQW9nQnF3aUMzd2dDMy9FZkNBSGg2Y2dEc1FnRDN4Q0FYMGdCNGVuYXlJQ1FRQklCRUFnQXlBQ05nSVVJQU1nQkRZQ0VDQUJRUUZCbU9VQUlBTkJFR29RRDBFQUlRSU1Bd3NnQUNBQ05nSU1JQUJCTkdvaEFFRUJJUUlnQkVFQmFpSUVJQVZIRFFBTERBRUxJQUZCQVVHbk0wRUFFQThMSUFOQklHb2tBQ0FDQzljR0FRWi9JQUFFUUFKQUlBQW9BZ0FFUUNBQUtBSU1JZ0VFUUNBQkVDNGdBQ2dDREJBUUlBQkJBRFlDREFzZ0FDZ0NFQ0lCQkVBZ0FSQVFJQUJDQURjREVBc2dBQ2dDUUJBUUlBQkNBRGNDUEF3QkN5QUFLQUlzSWdFRVFDQUJFQkFnQUVFQU5nSXNDeUFBS0FJZ0lnRUVRQ0FCRUJBZ0FFSUFOd01nQ3lBQUtBSTBJZ0ZGRFFBZ0FSQVFJQUJDQURjQ05Bc2dBQ2dDMEFFUVZTQUFLQUtjQVNJQkJFQWdBQ2dDYUNBQUtBSnNiQ0lEQkg4RFFDQUJFQzRnQVVHTUxHb2hBU0FDUVFGcUlnSWdBMGNOQUFzZ0FDZ0NuQUVGSUFFTEVCQWdBRUVBTmdLY0FRc2dBQ2dDZENJQkJFQWdBQ2dDY0NJQ0JFQkJBQ0VCQTBBZ0FDZ0NkQ0FCUVFOMGFpZ0NBQ0lEQkVBZ0F4QVFJQUFvQW5BaEFnc2dBVUVCYWlJQklBSkpEUUFMSUFBb0FuUWhBUXNnQUVFQU5nSndJQUVRRUNBQVFRQTJBblFMSUFBb0FvZ0JFQkFnQUVFQU5nSjRJQUJCQURZQ2lBRWdBQ2dDWkJBUUlBQkJBRFlDWkNBQUxRQzhBVUVDY1VVRVFDQUFLQUtvQVJBUUN5QUFRZEFBYWtFQVFmQUFFQlVhSUFBb0FzQUJFRElnQUVFQU5nTEFBU0FBS0FMRUFSQXlJQUJCQURZQ3dBRWdBQ2dDeUFFaUFRUkFJQUVvQWh3aUFnUkFJQUlRRUNBQlFRQTJBaHdMSUFFb0FpZ2lBZ1JBSUFFb0FpUUVRQU5BSUFJZ0JVRW9iQ0lEYWlnQ0pDSUVCRUFnQkJBUUlBRW9BaWdpQWlBRGFrRUFOZ0lrQ3lBQ0lBTnFLQUlRSWdRRVFDQUVFQkFnQVNnQ0tDSUNJQU5xUVFBMkFoQUxJQUlnQTJvb0FoZ2lCQVJBSUFRUUVDQUJLQUlvSWdJZ0EycEJBRFlDR0FzZ0JVRUJhaUlGSUFFb0FpUkpEUUFMQ3lBQ0VCQWdBVUVBTmdJb0N5QUJFQkFMSUFCQkFEWUN5QUVnQUNnQ1NCQWhJQUJCQURZQ1NDQUFLQUpNRUNFZ0FFRUFOZ0pNSUFBb0F0UUJJZ01FUUFKQUlBTW9BZ2hGRFFBZ0F5Z0NEQVJBSUFOQkFEWUNLQU5BSUFNb0FoaEJBRW9OQUFzTElBTkJBVFlDRUNBREtBSUFFQkFnQXlnQ0hDSUNSUTBBQTBBZ0FpZ0NCQ0VCSUFJUUVDQURJQUUyQWh3Z0FTSUNEUUFMQ3lBREtBSWtJZ0lFUUNBQ0tBSUVJZ1ZCQUVvRVFFRUFJUUVEUUNBQ0tBSUFJQUZCREd4cUlnUW9BZ2dpQmdSQUlBUW9BZ1FnQmhFQ0FDQUNLQUlFSVFVTElBRkJBV29pQVNBRlNBMEFDd3NnQWlnQ0FCQVFJQUlRRUFzZ0F4QVFDeUFBUVFBMkF0UUJJQUFRRUFzTDVnTUNDSDhFZmlBQUtBSVVLQUlBS0FJVUlBRkJ6QUJzYWlJSktBSU1JZ2dnQUNnQ0dDZ0NHQ0FCUVRSc2FpSUtOUUlFSWhCQ0FYMGlFaUFBTlFJOGZDQVFnS2NpQ3lBSUlBdEpHeUVNSUFrb0FnZ2lDQ0FLTlFJQUloRkNBWDBpRXlBQU5RSTRmQ0FSZ0tjaUNpQUlJQXBKR3lFS0lBa29BZ1FpQ0NBU0lBQTFBalI4SUJDQXB5SUxJQWdnQzBzYklRc2dDU2dDQUNJSUlCTWdBRFVDTUh3Z0VZQ25JZzBnQ0NBTlN4c2hEVUVBSVFnZ0FDZ0NJQ2dDMENzZ0FVRzRDR3hxS0FJVUlRNENRQ0FKS0FJVVFRQWdBbXRCZnlBQ0cyb2lBa1VFUUNBS0lRQWdEU0VJSUFzaEFRd0JDeUFEUVFGeElBSkJBV3NpRDNRaUNTQU5TUVJBSUEwZ0NXdXRRbjhnQXEwaUVJWkNmNFY4SUJDSXB5RUlDMEVBSVFCQkFDRUJJQU5CQVhZZ0QzUWlBeUFMU1FSQUlBc2dBMnV0UW44Z0FxMGlFSVpDZjRWOElCQ0lweUVCQ3lBSklBcEpCRUFnQ2lBSmE2MUNmeUFDclNJUWhrSi9oWHdnRUlpbklRQUxJQU1nREU4RVFFRUFJUXdNQVFzZ0RDQURhNjFDZnlBQ3JTSVFoa0ovaFh3Z0VJaW5JUXdMUVg4Z0FFRUNRUU1nRGtFQlJoc2lBbW9pQXlBQUlBTkxHeUFFUzBGL0lBSWdER29pQUNBQUlBeEpHeUFGUzNFZ0NDQUNheUlBUVFBZ0FDQUlUUnNnQmtseElBRWdBbXNpQUVFQUlBQWdBVTBiSUFkSmNRdWlBUUVHZnlBQUJFQWdBQ2dDQkNJQ0JFQWdBaEFRSUFCQkFEWUNCQXNnQVFSQUlBQWhBZ05BSUFJb0FzZ0JJZ01FUUVFQUlRVWdBaWdDeEFFaUJBUi9BMEFnQXlnQ0RDSUdCRUFnQmhBUUlBTkJBRFlDRENBQ0tBTEVBU0VFQ3lBRFFSQnFJUU1nQlVFQmFpSUZJQVJKRFFBTElBSW9Bc2dCQlNBREN4QVFJQUpCQURZQ3lBRUxJQUpCOEFGcUlRSWdCMEVCYWlJSElBRkhEUUFMQ3lBQUVCQUxDOVVaQWhOL0Ezc2dBQ2dDQUNJS0lBQW9BZ3dpRFVFRmRDSUZhaUVHSUFvZ0JXc2hGaUFBS0FJUUlRVWdBQ2dDSENFTElBQW9BaFFoQ1NBQUtBSUlJUTRDUUFKQUFrQUNRQ0FEUVFoSkRRQWdBVUVQY1EwQUlBWkJEM0ZGRFFFTElBVWdDVThOQWdKQUFrQWdBMEVCYXc0Q0FBRURDd0pBSUFrZ0JXc2lDRUVZU1EwQUlBRWdCVUVDZEdvaEJ5QU5RUVYwSWdRZ0NpQUZRUVowYW1vZ0FTQUpRUUowYWtrRVFDQUhJQW9nQ1VFR2RHb2dCR3BCUEd0SkRRRUxJQVg5RWYwTUFBQUFBQUVBQUFBQ0FBQUFBd0FBQVAydUFTRVlJQVVnQ0VGOGNTSVBhaUVGUVFBaEJBTkFJQVlnR0VFRS9hc0JJaGY5R3dCQkFuUnFJQWNnQkVFQ2RHcjlBQUlBSWhuOUh3QTRBZ0FnQmlBWC9Sc0JRUUowYWlBWi9SOEJPQUlBSUFZZ0YvMGJBa0VDZEdvZ0dmMGZBamdDQUNBR0lCZjlHd05CQW5ScUlCbjlId000QWdBZ0dQME1CQUFBQUFRQUFBQUVBQUFBQkFBQUFQMnVBU0VZSUFSQkJHb2lCQ0FQUncwQUN5QUlJQTlHRFFRTElBVWhCQ0FKSUFWclFRTnhJZ2NFUUVFQUlRZ0RRQ0FHSUFSQkJuUnFJQUVnQkVFQ2RHb3FBZ0E0QWdBZ0JFRUJhaUVFSUFoQkFXb2lDQ0FIUncwQUN3c2dCU0FKYTBGOFN3MERBMEFnQmlBRVFRWjBhaUFCSUFSQkFuUnFLZ0lBT0FJQUlBWWdCRUVCYWlJRlFRWjBhaUFCSUFWQkFuUnFLZ0lBT0FJQUlBWWdCRUVDYWlJRlFRWjBhaUFCSUFWQkFuUnFLZ0lBT0FJQUlBWWdCRUVEYWlJRlFRWjBhaUFCSUFWQkFuUnFLZ0lBT0FJQUlBUkJCR29pQkNBSlJ3MEFDd3dEQ3lBQklBSkJBblJxSVFnQ1FDQUpJQVZySWc5QlBFa0VRQ0FGSVFRTUFRc2dDaUFGUVFaMElBMUJCWFJxYWlJRUlBa2dCVUYvYzJvaUIwRUdkQ0lRYWlBRVNRUkFJQVVoQkF3QkN5QUVRUVJxSWdRZ0VHb2dCRWtFUUNBRklRUU1BUXNnQjBILy8vOGZTd1JBSUFVaEJBd0JDeUFOUVFWMElnUWdDaUFGUVFaMGFtb2lCeUFCSUFJZ0NXcEJBblJxU1NBS0lBbEJCblJxSUFScVFUaHJJZ1FnQVNBQ0lBVnFRUUowYWt0eEJFQWdCU0VFREFFTElBY2dBU0FKUVFKMGFra2dBU0FGUVFKMGFpQUVTWEVFUUNBRklRUU1BUXNnQmYwUi9Rd0FBQUFBQVFBQUFBSUFBQUFEQUFBQS9hNEJJUmdnQlNBUFFYeHhJaEJxSVFSQkFDRUhBMEFnQmlBWVFRVDlxd0VpRi8wYkFFRUNkR29pRVNBQklBVWdCMnBCQW5RaURHcjlBQUlBSWhuOUh3QTRBZ0FnQmlBWC9Sc0JRUUowYWlJVElCbjlId0U0QWdBZ0JpQVgvUnNDUVFKMGFpSVVJQm45SHdJNEFnQWdCaUFYL1JzRFFRSjBhaUlWSUJuOUh3TTRBZ0FnRVNBSUlBeHEvUUFDQUNJWC9SOEFPQUlFSUJNZ0YvMGZBVGdDQkNBVUlCZjlId0k0QWdRZ0ZTQVgvUjhET0FJRUlCajlEQVFBQUFBRUFBQUFCQUFBQUFRQUFBRDlyZ0VoR0NBSFFRUnFJZ2NnRUVjTkFBc2dEeUFRUmcwREN5QUVRUUZxSVFVZ0NTQUVhMEVCY1FSQUlBWWdCRUVHZEdvaUJ5QUJJQVJCQW5RaUJHb3FBZ0E0QWdBZ0J5QUVJQWhxS2dJQU9BSUVJQVVoQkFzZ0JTQUpSZzBDQTBBZ0JpQUVRUVowYWlJRklBRWdCRUVDZENJSGFpb0NBRGdDQUNBRklBY2dDR29xQWdBNEFnUWdCaUFFUVFGcUlnVkJCblJxSWdjZ0FTQUZRUUowSWdWcUtnSUFPQUlBSUFjZ0JTQUlhaW9DQURnQ0JDQUVRUUpxSWdRZ0NVY05BQXNNQWdzZ0JTQUpUdzBCSUFFZ0FrRUNkR29oQ0FOQUlBWWdCVUVHZEdvaUJDQUJJQVZCQW5ScUtnSUFPQUlBSUFRZ0FTQUNJQVZxSWdkQkFuUnFLZ0lBT0FJRUlBUWdBU0FDSUFkcUlnZEJBblJxS2dJQU9BSUlJQVFnQVNBQ0lBZHFJZ2RCQW5ScUtnSUFPQUlNSUFRZ0FTQUNJQWRxSWdkQkFuUnFLZ0lBT0FJUUlBUWdBU0FDSUFkcUlnZEJBblJxS2dJQU9BSVVJQVFnQVNBQ0lBZHFRUUowSWdkcUtnSUFPQUlZSUFRZ0J5QUlhaW9DQURnQ0hDQUZRUUZxSWdVZ0NVY05BQXNNQVFzZ0FTQUNRUUowYWlFSUlBTkJBMFloQnlBRFFRUkdJUThnQTBFRlJpRVFJQU5CQjBZaEVRTkFJQVlnQlVFR2RHb2lCQ0FCSUFWQkFuUnFLZ0lBT0FJQUlBUWdBU0FDSUFWcUlneEJBblJxS2dJQU9BSUVJQVFnQVNBQ0lBeHFJZ3hCQW5ScUtnSUFPQUlJQWtBZ0J3MEFJQVFnQVNBQ0lBeHFJZ3hCQW5ScUtnSUFPQUlNSUE4TkFDQUVJQUVnQWlBTWFpSU1RUUowYWlvQ0FEZ0NFQ0FRRFFBZ0JDQUJJQUlnREdvaURFRUNkR29xQWdBNEFoUWdBMEVHUmcwQUlBUWdBU0FDSUF4cVFRSjBJZ3hxS2dJQU9BSVlJQkVOQUNBRUlBZ2dER29xQWdBNEFod0xJQVZCQVdvaUJTQUpSdzBBQ3dzZ0ZrRWdhaUVHSUFFZ0RrRUNkR29oQkNBQUtBSVlJUVVDUUFKQUFrQWdBMEVJU1EwQUlBUkJEM0VOQUNBR1FROXhSUTBCQ3lBRklBdFBEUUVDUUFKQUFrQWdBMEVCYXc0Q0FBRUNDd0pBSUFzZ0JXc2lBRUVjU1EwQUlBb2dCVUVHZEVFZ2NpQU5RUVYwSWdKcmFpQUJJQXNnRG1wQkFuUnFTUVJBSUFFZ0JTQU9ha0VDZEdvZ0MwRUdkQ0FDYXlBS2FrRWNhMGtOQVFzZ0JDQUZRUUowYWlFRElBWDlFZjBNQUFBQUFBRUFBQUFDQUFBQUF3QUFBUDJ1QVNFWUlBVWdBRUY4Y1NJQmFpRUZRUUFoQWdOQUlBWWdHRUVFL2FzQkloZjlHd0JCQW5ScUlBTWdBa0VDZEdyOUFBSUFJaG45SHdBNEFnQWdCaUFYL1JzQlFRSjBhaUFaL1I4Qk9BSUFJQVlnRi8wYkFrRUNkR29nR2YwZkFqZ0NBQ0FHSUJmOUd3TkJBblJxSUJuOUh3TTRBZ0FnR1AwTUJBQUFBQVFBQUFBRUFBQUFCQUFBQVAydUFTRVlJQUpCQkdvaUFpQUJSdzBBQ3lBQUlBRkdEUVFMSUFVaEFpQUxJQVZyUVFOeElnQUVRRUVBSVFFRFFDQUdJQUpCQm5ScUlBUWdBa0VDZEdvcUFnQTRBZ0FnQWtFQmFpRUNJQUZCQVdvaUFTQUFSdzBBQ3dzZ0JTQUxhMEY4U3cwREEwQWdCaUFDUVFaMGFpQUVJQUpCQW5ScUtnSUFPQUlBSUFZZ0FrRUJhaUlBUVFaMGFpQUVJQUJCQW5ScUtnSUFPQUlBSUFZZ0FrRUNhaUlBUVFaMGFpQUVJQUJCQW5ScUtnSUFPQUlBSUFZZ0FrRURhaUlBUVFaMGFpQUVJQUJCQW5ScUtnSUFPQUlBSUFKQkJHb2lBaUFMUncwQUN3d0RDeUFFSUFKQkFuUnFJUU1DUUNBTElBVnJJZ0JCeEFCSkJFQWdCU0VDREFFTElBb2dCVUVHZENJSlFTQnlJQTFCQlhRaUNHdHFJZ2NnQ3lBRlFYOXphaUlQUVFaMEloQnFJQWRKQkVBZ0JTRUNEQUVMSUFvZ0NVRWtjaUFJYTJvaUNTQVFhaUFKU1FSQUlBVWhBZ3dCQ3lBUFFmLy8veDlMQkVBZ0JTRUNEQUVMSUFvZ0JVRUdkRUVnY2lBTlFRVjBJZ2xyYWlJTklBRWdDeUFPYWlJSUlBSnFRUUowYWtrZ0MwRUdkQ0FKYXlBS2FrRVlheUlKSUFFZ0RrRUNkR29nQlVFQ2RHb2lDaUFDUVFKMGFrdHhCRUFnQlNFQ0RBRUxJQTBnQVNBSVFRSjBha2tnQ1NBS1MzRUVRQ0FGSVFJTUFRc2dCZjBSL1F3QUFBQUFBUUFBQUFJQUFBQURBQUFBL2E0QklSZ2dCU0FBUVh4eElnbHFJUUpCQUNFQkEwQWdCaUFZUVFUOXF3RWlGLzBiQUVFQ2RHb2lDaUFFSUFFZ0JXcEJBblFpRFdyOUFBSUFJaG45SHdBNEFnQWdCaUFYL1JzQlFRSjBhaUlPSUJuOUh3RTRBZ0FnQmlBWC9Sc0NRUUowYWlJSUlCbjlId0k0QWdBZ0JpQVgvUnNEUVFKMGFpSUhJQm45SHdNNEFnQWdDaUFESUExcS9RQUNBQ0lYL1I4QU9BSUVJQTRnRi8wZkFUZ0NCQ0FJSUJmOUh3STRBZ1FnQnlBWC9SOERPQUlFSUJqOURBUUFBQUFFQUFBQUJBQUFBQVFBQUFEOXJnRWhHQ0FCUVFScUlnRWdDVWNOQUFzZ0FDQUpSZzBEQ3lBQ1FRRnFJUUFnQ3lBQ2EwRUJjUVJBSUFZZ0FrRUdkR29pQVNBRUlBSkJBblFpQW1vcUFnQTRBZ0FnQVNBQ0lBTnFLZ0lBT0FJRUlBQWhBZ3NnQUNBTFJnMENBMEFnQmlBQ1FRWjBhaUlBSUFRZ0FrRUNkQ0lCYWlvQ0FEZ0NBQ0FBSUFFZ0Eyb3FBZ0E0QWdRZ0JpQUNRUUZxSWdCQkJuUnFJZ0VnQkNBQVFRSjBJZ0JxS2dJQU9BSUFJQUVnQUNBRGFpb0NBRGdDQkNBQ1FRSnFJZ0lnQzBjTkFBc01BZ3NnQkNBQ1FRSjBhaUVCSUFOQkEwWWhDU0FEUVFSR0lRb2dBMEVGUmlFTklBTkJCMFloRGdOQUlBWWdCVUVHZEdvaUFDQUVJQVZCQW5ScUtnSUFPQUlBSUFBZ0JDQUNJQVZxSWdoQkFuUnFLZ0lBT0FJRUlBQWdCQ0FDSUFocUlnaEJBblJxS2dJQU9BSUlBa0FnQ1EwQUlBQWdCQ0FDSUFocUlnaEJBblJxS2dJQU9BSU1JQW9OQUNBQUlBUWdBaUFJYWlJSVFRSjBhaW9DQURnQ0VDQU5EUUFnQUNBRUlBSWdDR29pQ0VFQ2RHb3FBZ0E0QWhRZ0EwRUdSZzBBSUFBZ0JDQUNJQWhxUVFKMElnaHFLZ0lBT0FJWUlBNE5BQ0FBSUFFZ0NHb3FBZ0E0QWh3TElBVkJBV29pQlNBTFJ3MEFDd3dCQ3lBRklBdFBEUUFnQkNBQ1FRSjBhaUVCQTBBZ0JpQUZRUVowYWlJQUlBUWdCVUVDZEdvcUFnQTRBZ0FnQUNBRUlBSWdCV29pQTBFQ2RHb3FBZ0E0QWdRZ0FDQUVJQUlnQTJvaUEwRUNkR29xQWdBNEFnZ2dBQ0FFSUFJZ0Eyb2lBMEVDZEdvcUFnQTRBZ3dnQUNBRUlBSWdBMm9pQTBFQ2RHb3FBZ0E0QWhBZ0FDQUVJQUlnQTJvaUEwRUNkR29xQWdBNEFoUWdBQ0FFSUFJZ0EycEJBblFpQTJvcUFnQTRBaGdnQUNBQklBTnFLZ0lBT0FJY0lBVkJBV29pQlNBTFJ3MEFDd3NMbXdNQkJIOGdBU0FBUVFScUlnUnFRUUZyUVFBZ0FXdHhJZ1VnQW1vZ0FDQUFLQUlBSWdGcVFRUnJUUVIvSUFBb0FnUWlBeUFBS0FJSUlnWTJBZ2dnQmlBRE5nSUVJQVFnQlVjRVFDQUFJQUJCQkdzb0FnQkJmbkZySWdNZ0JTQUVheUlFSUFNb0FnQnFJZ1UyQWdBZ0F5QUZRWHh4YWtFRWF5QUZOZ0lBSUFBZ0JHb2lBQ0FCSUFScklnRTJBZ0FMQW44Z0FTQUNRUmhxVHdSQUlBQWdBbXBCQ0dvaUF5QUJJQUpyUVFocklnRTJBZ0FnQXlBQlFYeHhha0VFYXlBQlFRRnlOZ0lBSUFNQ2Z5QURLQUlBUVFocklnRkIvd0JOQkVBZ0FVRURka0VCYXd3QkN5QUJaeUVFSUFGQkhTQUVhM1pCQkhNZ0JFRUNkR3RCN2dCcUlBRkIveDlORFFBYVFUOGdBVUVlSUFScmRrRUNjeUFFUVFGMGEwSEhBR29pQVNBQlFUOVBHd3NpQVVFRWRDSUVRYURIQVdvMkFnUWdBeUFFUWFqSEFXb2lCQ2dDQURZQ0NDQUVJQU0yQWdBZ0F5Z0NDQ0FETmdJRVFhalBBVUdvendFcEF3QkNBU0FCcllhRU53TUFJQUFnQWtFSWFpSUJOZ0lBSUFBZ0FVRjhjV29NQVFzZ0FDQUJhZ3RCQkdzZ0FUWUNBQ0FBUVFScUJVRUFDd3ZDQVFFRGZ3SkFJQUVnQWlnQ0VDSURCSDhnQXdVZ0FoQStEUUVnQWlnQ0VBc2dBaWdDRkNJRWEwc0VRQ0FDSUFBZ0FTQUNLQUlrRVFBQUR3c0NRQUpBSUFJb0FsQkJBRWdOQUNBQlJRMEFJQUVoQXdOQUlBQWdBMm9pQlVFQmF5MEFBRUVLUndSQUlBTkJBV3NpQXcwQkRBSUxDeUFDSUFBZ0F5QUNLQUlrRVFBQUlnUWdBMGtOQWlBQklBTnJJUUVnQWlnQ0ZDRUVEQUVMSUFBaEJVRUFJUU1MSUFRZ0JTQUJFQklhSUFJZ0FpZ0NGQ0FCYWpZQ0ZDQUJJQU5xSVFRTElBUUxXUUVCZnlBQUlBQW9Ba2dpQVVFQmF5QUJjallDU0NBQUtBSUFJZ0ZCQ0hFRVFDQUFJQUZCSUhJMkFnQkJmdzhMSUFCQ0FEY0NCQ0FBSUFBb0Fpd2lBVFlDSENBQUlBRTJBaFFnQUNBQklBQW9BakJxTmdJUVFRQUx6QUlCQkg4Z0FTQUEvUUFDQVAwTEFnQWdBU2dDR0NJQ0JFQWdBU2dDRUNJREJIOUJBQ0VDQTBBZ0FTZ0NHQ0FDUVRSc2FpZ0NMQ0lFQkVBZ0JCQVFJQUVvQWhBaEF3c2dBa0VCYWlJQ0lBTkpEUUFMSUFFb0FoZ0ZJQUlMRUJBZ0FVRUFOZ0lZQ3lBQklBQW9BaEFpQWpZQ0VDQUJJQUpCTkd3UUZDSUNOZ0lZSUFJRVFDQUJLQUlRQkVCQkFDRURBMEFnQWlBRFFUUnNJZ1ZxSWdJZ0FDZ0NHQ0FGYWlJRS9RQUNBUDBMQWdBZ0FpQUVLQUl3TmdJd0lBSWdCUDBBQWlEOUN3SWdJQUlnQlAwQUFoRDlDd0lRSUFFb0FoZ2lBaUFGYWtFQU5nSXNJQU5CQVdvaUF5QUJLQUlRU1EwQUN3c2dBU0FBS0FJVU5nSVVJQUVnQUNnQ0lDSUNOZ0lnSUFJRVFDQUJJQUlRRkNJQ05nSWNJQUpGQkVBZ0FVSUFOd0ljRHdzZ0FpQUFLQUljSUFBb0FpQVFFaG9QQ3lBQlFRQTJBaHdQQ3lBQlFRQTJBaEFnQVVFQU5nSVlDd1FBUVFFTHhnRUJBMzhEUUNBQVFRUjBJZ0ZCcE1jQmFpQUJRYURIQVdvaUFqWUNBQ0FCUWFqSEFXb2dBallDQUNBQVFRRnFJZ0JCd0FCSERRQUxRVEFRYlJvakFFRVFheUlBSkFBQ1FDQUFRUXhxSUFCQkNHb1FEQTBBUWJEUEFVRUlJQUFvQWd4QkFuUkJCR29RSlNJQk5nSUFJQUZGRFFCQkNDQUFLQUlJRUNVaUFRUkFRYkRQQVNnQ0FDSUNJQUFvQWd4QkFuUnFRUUEyQWdBZ0FpQUJFQXRGRFFFTFFiRFBBVUVBTmdJQUN5QUFRUkJxSkFCQnpNOEJRU28yQWdCQmxOQUJRZGpRQVRZQ0FBdVFCZ0lGZndON0l3QkJFR3NpQmlRQUFuOGdBQ2dDQ0VFUVJnUkFJQUFvQXB3QklBQW9Bc3dCUVl3c2JHb01BUXNnQUNnQ0RBc2hBQUpBSUFNb0FnQWlCVVVFUUVFQUlRSWdCRUVCUWNBVFFRQVFEd3dCQ3lBQUtBTFFLeUVKSUFNZ0JVRUJhellDQUNBQ0lBWkJER3BCQVJBUklBa2dBVUc0Q0d4cUlnY2dCaWdDRENJQVFRVjJOZ0trQmlBSElBQkJIM0VpQVRZQ0dDQUNRUUZxSVFBZ0F3Si9BbjhDUUFKL0FrQUNRQ0FCRGdJQUF3RUxJQU1vQWdBTUFRc2dBeWdDQUVFQmRnc2lCVUhpQUU4RWZ5QUdRdUdBZ0lDUUREY0NCQ0FHSUFVMkFnQWdCRUVDUWNYNEFDQUdFQThnQnlnQ0dBVWdBUXNFUUNBRklnRU5BVUVBREFJTElBVUVRQ0FIUVJ4cUlRRkJBQ0VDQTBBZ0FDQUdRUXhxUVFFUUVTQUNRZUFBVFFSQUlBWW9BZ3doQkNBQklBSkJBM1JxSWdoQkFEWUNCQ0FJSUFSQkEzWTJBZ0FMSUFCQkFXb2hBQ0FDUVFGcUlnSWdCVWNOQUFzTFFRQWhBaUFES0FJQUlnQWdCVWtOQXlBQUlBVnJEQUlMSUFkQkhHb2hCRUVBSVFJRFFDQUFJQVpCREdwQkFoQVJJQUpCNEFCTkJFQWdCQ0FDUVFOMGFpSUZJQVlvQWd3aUNFSC9EM0UyQWdRZ0JTQUlRUXQyTmdJQUN5QUFRUUpxSVFBZ0FrRUJhaUlDSUFGSERRQUxJQUZCQVhRTElRQkJBQ0VDSUFNb0FnQWlBU0FBU1EwQklBRWdBR3NMTmdJQVFRRWhBaUFIS0FJWVFRRkhEUUFnQjBFY2FpRUVJQWY5Q1FJY0lRd2dCeWdDSUNFRC9Rd0JBQUFBQWdBQUFBTUFBQUFFQUFBQUlRdEJBQ0VCQTBBZ0JDQUJRUU4wYWlJQVFSaHFJQXdnQy8wTS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8ydUFTSUsvUnNBUVFOdS9SRWdDdjBiQVVFRGJ2MGNBU0FLL1JzQ1FRTnUvUndDSUFyOUd3TkJBMjc5SEFQOXNRSDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDl1QUVpQ3YxYUFnQUNJQUJCRUdvZ0N2MWFBZ0FCSUFCQkNHb2dDdjFhQWdBQUlBUWdBVUVFYWlJQlFRTjBhaUlGSUFyOVdnSUFBeUFBSUFNMkFod2dBQ0FETmdJVUlBQWdBellDRENBRklBTTJBZ1FnQy8wTUJBQUFBQVFBQUFBRUFBQUFCQUFBQVAydUFTRUxJQUZCNEFCSERRQUxDeUFHUVJCcUpBQWdBZ3VmQmdFR2Z5TUFRU0JySWdZa0FBSi9JQUFvQWdoQkVFWUVRQ0FBS0FLY0FTQUFLQUxNQVVHTUxHeHFEQUVMSUFBb0Fnd0xJUVVDUUNBREtBSUFRUVJOQkVCQkFDRUFJQVJCQVVHZEUwRUFFQThNQVFzZ0FpQUZLQUxRS3lBQlFiZ0liR29pQlNJSlFRUnFRUUVRRVNBRklBVW9BZ1JCQVdvaUJ6WUNCQ0FIUVNKUEJFQWdCa0VoTmdJRUlBWWdCellDQUNBRVFRRkIrVGtnQmhBUFFRQWhBQXdCQ3lBSElBQW9BcUFCSWdoTkJFQWdCaUFITmdJWUlBWWdDRFlDRkNBR0lBRTJBaEFnQkVFQlFiVDdBQ0FHUVJCcUVBOGdBQ0FBS0FJSVFZQ0FBbkkyQWdoQkFDRUFEQUVMSUFKQkFXb2dCVUVJYWtFQkVCRWdCU0FGS0FJSVFRSnFOZ0lJSUFKQkFtb2dCVUVNYWtFQkVCRWdCU0FGS0FJTVFRSnFJZ0EyQWd3Q1FBSkFJQVVvQWdnaUFVRUtTdzBBSUFCQkNrc05BQ0FBSUFGcVFRMUpEUUVMUVFBaEFDQUVRUUZCd3lsQkFCQVBEQUVMSUFKQkEyb2dCVUVRYWtFQkVCRWdCUzBBRUVHQUFYRUVRRUVBSVFBZ0JFRUJRWXN5UVFBUUR3d0JDeUFDUVFScUlBVkJGR3BCQVJBUklBVW9BaFJCQWs4RVFFRUFJUUFnQkVFQlFjb3hRUUFRRHd3QkN5QURJQU1vQWdCQkJXc2lCellDQUVFQklRQWdCU2dDQkNFQklBVXRBQUJCQVhGRkJFQWdBVVVOQVNBRlFiQUhhaUVCSUFWQnJBWnFJUUpCQUNFRkEwQWdBaUFGUVFKMElnQnFRUTgyQWdBZ0FDQUJha0VQTmdJQVFRRWhBQ0FGUVFGcUlnVWdDU2dDQkVrTkFBc01BUXNnQVNBSFRRUkFBa0FnQVVVRVFFRUFJUUVNQVFzZ0FrRUZhaUFHUVJ4cVFRRVFFU0FGSUFZb0Fod2lBRUVFZGpZQ3NBY2dCU0FBUVE5eE5nS3NCaUFGS0FJRUlnRkJBazhFUUNBRlFiQUhhaUVISUFWQnJBWnFJUWdnQWtFR2FpRUFRUUVoQlFOQUlBQWdCa0VjYWtFQkVCRUNRQ0FHS0FJY0lnRkJFRThFUUNBQlFROXhJZ0lOQVF0QkFDRUFJQVJCQVVId0xVRUFFQThNQlFzZ0NDQUZRUUowSWdwcUlBSTJBZ0FnQnlBS2FpQUJRUVIyTmdJQUlBQkJBV29oQUNBRlFRRnFJZ1VnQ1NnQ0JDSUJTUTBBQ3dzZ0F5Z0NBQ0VIQ3lBRElBY2dBV3MyQWdCQkFTRUFEQUVMUVFBaEFDQUVRUUZCblJOQkFCQVBDeUFHUVNCcUpBQWdBQXRTQUNBQklBQXRBQUE2QUFjZ0FTQUFMUUFCT2dBR0lBRWdBQzBBQWpvQUJTQUJJQUF0QUFNNkFBUWdBU0FBTFFBRU9nQURJQUVnQUMwQUJUb0FBaUFCSUFBdEFBWTZBQUVnQVNBQUxRQUhPZ0FBQzVJQkFRUi9JQUFnQVRZQ29BRUNRQ0FBS0FKSUlnTkZEUUFnQXlnQ0dDSUdSUTBBSUFBb0Fnd2lCRVVOQUNBRUtBTFFLMFVOQUNBREtBSVFJZ1JGQkVCQkFROExRUUFoQXdOQUlBRWdBQ2dDRENnQzBDc2dBMEc0Q0d4cUtBSUVUd1JBSUFKQkFVR2l4UUJCQUJBUFFRQVBDeUFHSUFOQk5HeHFJQUUyQWloQkFTRUZJQU5CQVdvaUF5QUVSdzBBQ3dzZ0JRdXNCd0lKZndoK0l3QkJFR3NpQ2lRQUFrQWdBa1VFUUNBRFFRRkIrdFVBUVFBUUR3d0JDeUFDS0FJUUlnc2dBQ2dDU0NJR0tBSVFTUVJBSUFOQkFVRzF6Z0JCQUJBUERBRUxJQVFnQUNnQ2FDSUZJQUFvQW14c0lnZFBCRUFnQ2lBRU5nSUFJQW9nQjBFQmF6WUNCQ0FEUVFGQjkvb0FJQW9RRDBFQUlRVU1BUXNnQWlBQUtBSlVJQVFnQlNBRUlBVnVJZ2RzYXlJSUlBQW9BbHhzYWlJRk5nSUFJQUlnQlNBR0tBSUFJZ1lnQlNBR1N4c2lCallDQUNBQ0lBQW9BbFFnQUNnQ1hDQUlRUUZxYkdvaUJUWUNDQ0FDSUFVZ0FDZ0NTQ2dDQ0NJSUlBVWdDRWtiSWdnMkFnZ2dBaUFBS0FKWUlBQW9BbUFnQjJ4cUlnVTJBZ1FnQWlBRklBQW9Ba2dvQWdRaUNTQUZJQWxMR3lJSk5nSUVJQUlnQUNnQ1dDQUFLQUpnSUFkQkFXcHNhaUlGTmdJTUlBSWdCU0FBS0FKSUtBSU1JZ2NnQlNBSFNSc2lCVFlDRENBQUtBSklJZ3dvQWhBaUJ3UkFJQVdzUWdGOUlSRWdDS3hDQVgwaEVpQUpyVUlCZlNFVElBYXRRZ0Y5SVJRZ0RDZ0NHQ0VJSUFJb0FoZ2hCVUVBSVFZRFFDQUZJQWdnQmtFMGJHb29BaWdpQ1RZQ0tDQUZJQlFnQlNnQ0FDSU1yU0lPZkNBT2dDSVZQZ0lRSUFVZ0V5QUZLQUlFSWcydElnNThJQTZBSWhBK0FoUWdCVUovSUFtdElnNkdJZzhnRU1SOUlBNkhweUFQSUJFZ0Rhd2lFSHdnRUgvRWZTQU9oNmRyTmdJTUlBVWdEeUFWeEgwZ0RvZW5JQThnRWlBTXJDSVBmQ0FQZjhSOUlBNkhwMnMyQWdnZ0JVRTBhaUVGSUFaQkFXb2lCaUFIUncwQUN3c2dCeUFMU1FSQUlBSW9BaGdoQlFOQUlBVWdCMEUwYkNJR2FpZ0NMQkFRSUFJb0FoZ2lCU0FHYWtFQU5nSXNJQWRCQVdvaUJ5QUNLQUlRU1EwQUN5QUNJQUFvQWtnb0FoQTJBaEFMSUFBb0Frd2lCUVJBSUFVUUlRc2dBRUVCUVNRUUV5SUhOZ0pNUVFBaEJTQUhSUTBBSUFJZ0J4QS9JQUFnQkRZQ0xDQUFLQUxBQVVFWElBTVFKRVVOQUNBQUtBTEFBU0lFS0FJQUlRWWdCQ2dDQ0NFSEFrQWdCZ1JBUVFFaEJTQUdRUUZ4SVFzZ0JrRUJSZ1IvUVFBRklBWkJmbkVoQ0VFQUlRWURRQUovUVFBZ0JVVU5BQnBCQUNBQUlBRWdBeUFIS0FJQUVRQUFSUTBBR2lBQUlBRWdBeUFIS0FJRUVRQUFRUUJIQ3lFRklBZEJDR29oQnlBR1FRSnFJZ1lnQ0VjTkFBc2dCVUVCY3dzaEJnSkFBa0FnQ3dSQUlBWU5BU0FBSUFFZ0F5QUhLQUlBRVFBQVFRQkhJUVVMSUFSQkFEWUNBQ0FGUVFGeFJRMEJEQU1MSUFSQkFEWUNBQXNnQUNnQ1NCQWhRUUFoQlNBQVFRQTJBa2dNQWdzZ0JFRUFOZ0lBQ3lBQUlBSVFSeUVGQ3lBS1FSQnFKQUFnQlF2eUF3RUZmd0pBQWtBZ0FDZ0NQQ0lDUlFSQUlBRW9BaEFOQVVFQkR3c2dBa0UwYkJBVUlnVkZEUUVnQVNnQ0VBUkFJQUVvQWhnaEFnTkFJQUlnQTBFMGJDSUVhaWdDTEJBUUlBRW9BaGdpQWlBRWFrRUFOZ0lzSUFOQkFXb2lBeUFCS0FJUUlnUkpEUUFMQ3lBQklBQW9BandFZnlBQUtBSk1LQUlZSVFOQkFDRUNBMEFnQlNBQ1FUUnNhaUlFSUFNZ0FDZ0NRQ0FDUVFKMGFpZ0NBRUUwYkNJR2FpSUQvUUFDQVAwTEFnQWdCQ0FES0FJd05nSXdJQVFnQS8wQUFpRDlDd0lnSUFRZ0EvMEFBaEQ5Q3dJUUlBUWdBQ2dDVENnQ0dDSURJQVpxSWdZb0FpUTJBaVFnQkNBR0tBSXNOZ0lzSUFaQkFEWUNMQ0FDUVFGcUlnSWdBQ2dDUENJR1NRMEFDeUFCS0FJUUJTQUVDd1IvSUFBb0Frd29BaGdoQWtFQUlRTURRQ0FDSUFOQk5Hd2lCR29vQWl3UUVDQUFLQUpNS0FJWUlnSWdCR3BCQURZQ0xDQURRUUZxSWdNZ0FTZ0NFRWtOQUFzZ0FDZ0NQQVVnQmdzMkFoQWdBU2dDR0JBUUlBRWdCVFlDR0VFQkR3c2dBU2dDR0NFRUlBQW9Ba3dvQWhnaEEwRUFJUUlEUUNBRUlBSkJOR3dpQldvaUJDQURJQVZxS0FJa05nSWtJQVFvQWl3UUVDQUJLQUlZSWdRZ0JXb2dBQ2dDVENnQ0dDSURJQVZxSWdVb0FpdzJBaXdnQlVFQU5nSXNJQUpCQVdvaUFpQUJLQUlRU1EwQUMwRUJEd3NnQUNnQ1NCQWhJQUJCQURZQ1NFRUFDODRFQVFoL0FrQWdBa1VOQUFKQUlBQW9BcUFCSWdWRkRRQWdBQ2dDU0NJRVJRMEFJQVFvQWhCRkRRQWdCQ2dDR0NnQ0tDQUZSdzBBSUFJb0FoQWlDRVVOQUNBQ0tBSVlJZ1lvQWlnTkFDQUdLQUlzRFFCQkFDRUVJQWhCQ0U4RVFDQUlRWGh4SVFrRFFDQUdJQVJCTkd4cUlBVTJBaWdnQmlBRVFRRnlRVFJzYWlBRk5nSW9JQVlnQkVFQ2NrRTBiR29nQlRZQ0tDQUdJQVJCQTNKQk5HeHFJQVUyQWlnZ0JpQUVRUVJ5UVRSc2FpQUZOZ0lvSUFZZ0JFRUZja0UwYkdvZ0JUWUNLQ0FHSUFSQkJuSkJOR3hxSUFVMkFpZ2dCaUFFUVFkeVFUUnNhaUFGTmdJb0lBUkJDR29oQkNBS1FRaHFJZ29nQ1VjTkFBc0xJQWhCQjNFaUNBUkFBMEFnQmlBRVFUUnNhaUFGTmdJb0lBUkJBV29oQkNBTFFRRnFJZ3NnQ0VjTkFBc0xJQUlnQXhBM0RRQkJBQThMSUFBb0Frd2lCVVVFUUNBQVFRRkJKQkFUSWdVMkFrd2dCVVVOQVFzZ0FpQUZFRDhnQUNnQ3dBRkJGaUFERUNSRkRRQWdBQ2dDd0FFaUJpZ0NBQ0VFSUFZb0FnZ2hCUUpBSUFRRVFFRUJJUWNnQkVFQmNTRUlJQVJCQVVZRWYwRUFCU0FFUVg1eElRbEJBQ0VFQTBBQ2YwRUFJQWRGRFFBYVFRQWdBQ0FCSUFNZ0JTZ0NBQkVBQUVVTkFCb2dBQ0FCSUFNZ0JTZ0NCQkVBQUVFQVJ3c2hCeUFGUVFocUlRVWdCRUVDYWlJRUlBbEhEUUFMSUFkQkFYTUxJUVFDUUFKQUlBZ0VRQ0FFRFFFZ0FDQUJJQU1nQlNnQ0FCRUFBRUVBUnlFSEN5QUdRUUEyQWdBZ0IwRUJjVVVOQVF3REN5QUdRUUEyQWdBTElBQW9Ba2dRSVNBQVFRQTJBa2hCQUE4TElBWkJBRFlDQUFzZ0FDQUNFRWNoQndzZ0J3djRCQUVHZndKQVFRRkJNQkFUSWdJRWZ5QUNJQUFvQXNnQklnSDlBQU1BL1FzREFDQUNJQUVwQXhBM0F4QWdBaUFCS0FJWUlnRTJBaGdnQWlBQlFSaHNFQlFpQVRZQ0hDQUJSUVJBSUFJUUVFRUFEd3NDUUNBQUtBTElBU2dDSENJREJFQWdBU0FESUFJb0FoaEJHR3dRRWhvTUFRc2dBUkFRSUFKQkFEWUNIQXNnQWlBQUtBTElBU2dDSkNJQk5nSWtJQUlnQVVFb0VCTWlBVFlDS0NBQlJRUkFJQUlvQWh3UUVDQUNFQkJCQUE4TEFrQWdBQ2dDeUFFb0FpZ0VRQ0FDS0FJa1JRMEJBMEFnQVNBRlFTaHNJZ05xSUFBb0FzZ0JLQUlvSUFOcUtBSVVJZ0UyQWhRZ0FVRVliQkFVSVFFZ0FpZ0NLQ0lFSUFOcUlnWWdBVFlDR0NBQlJRUkFJQVVFZjBFQUlRRURRQ0FDS0FJb0lBRkJLR3hxS0FJWUVCQWdBVUVCYWlJQklBVkhEUUFMSUFJb0FpZ0ZJQVFMRUJBTUJRc0NRQ0FBS0FMSUFTZ0NLQ0FEYWlnQ0dDSUVCRUFnQVNBRUlBWW9BaFJCR0d3UUVob2dBaWdDS0NFQkRBRUxJQUVRRUNBQ0tBSW9JZ0VnQTJwQkFEWUNHQXNnQVNBRGFpQUFLQUxJQVNnQ0tDQURhaWdDQkNJQk5nSUVJQUZCR0d3UUZDRUJJQUlvQWlnaUJDQURhaUlHSUFFMkFoQWdBVVVFUUNBRkJIOUJBQ0VCQTBBZ0FVRW9iQ0lBSUFJb0FpaHFLQUlZRUJBZ0FpZ0NLQ0FBYWlnQ0VCQVFJQUZCQVdvaUFTQUZSdzBBQ3lBQ0tBSW9CU0FFQ3hBUURBVUxBa0FnQUNnQ3lBRW9BaWdnQTJvb0FoQWlCQVJBSUFFZ0JDQUdLQUlFUVJoc0VCSWFJQUlvQWlnaEFRd0JDeUFCRUJBZ0FpZ0NLQ0lCSUFOcVFRQTJBaEFMSUFFZ0EycENBRGNDSUNBRlFRRnFJZ1VnQWlnQ0pFa05BQXNNQVFzZ0FSQVFJQUpCQURZQ0tBc2dBZ1ZCQUFzUEN5QUNLQUljRUJBZ0FoQVFRUUFMb0FZQ0RuOEJleU1BUVJCcklnZ2tBQ0FBS0FKSUtBSVFJUTBnQ0VFQlFUZ1FFeUlCTmdJTUFrQWdBVVVOQUNBQklBQW9Ba2dvQWhBaUNUWUNHQ0FCSUFEOUFBSlUvUXNDQUNBQklBQW9BbWcyQWhBZ0FDZ0NiQ0VDSUFGQkFEWUNOQ0FCSUFJMkFoUWdBU0FBS0FJTUlnd29BZ0EyQWlBZ0FTQU1LQUlFTmdJa0lBRWdEQ2dDQ0RZQ0tDQUJJQXdvQWhBMkFpd2dBU0FKUWJnSUVCTWlBRFlDTUNBQUJFQWdEUVJBQTBBZ0RrRzRDR3dpQUNBQktBSXdhaUlGSUF3b0F0QXJJQUJxSWdUOUFBSUFJZy85Q3dJRUlBVWdCQ2dDRURZQ0ZDQUZJQVFvQWhRMkFoZ2dELzBiQVNJQVFTQk5CRUFnQlVHMEIyb2dCRUd3QjJvZ0FCQVNHaUFGUWJBR2FpQUVRYXdHYWlBRUtBSUVFQklhQ3lBRklBUW9BaGdpQURZQ0hDQUZJQVFvQXFRR05nS29Ca0VCSVFZQ1FDQUFRUUZIQkVBZ0JDZ0NCRUVEYkNJQVFRTnJRZDhBU3cwQklBQkJBbXNoQmdzZ0JVR2tBMm9oQ1NBRlFTQnFJUW9nQkVFY2FpRUxRUUFoQUFKQUlBWkJDRWtOQUNBRUlBWkJBM1JxUVJ4cUlBcExCRUFnQ3lBRklBWkJBblJxUWFRRGFra05BUXNnQmtGOGNTRUFRUUFoQWdOQUlBb2dBa0VDZENJRGFpQUxJQUpCQTNScUlnZEJIR29nQjBFVWFpQUhRUXhxSUFmOUNRSUUvVllDQUFIOVZnSUFBdjFXQWdBRC9Rc0NBQ0FESUFscUlBZEJHR29nQjBFUWFpQUhRUWhxSUFmOUNRSUEvVllDQUFIOVZnSUFBdjFXQWdBRC9Rc0NBQ0FDUVFScUlnSWdBRWNOQUFzZ0FDQUdSZzBCQ3lBQVFRRnlJUU1nQmtFQmNRUkFJQW9nQUVFQ2RDSUNhaUFMSUFCQkEzUnFJZ0FvQWdRMkFnQWdBaUFKYWlBQUtBSUFOZ0lBSUFNaEFBc2dBeUFHUmcwQUEwQWdDaUFBUVFKMElnSnFJQXNnQUVFRGRHb2lBeWdDQkRZQ0FDQUNJQWxxSUFNb0FnQTJBZ0FnQ2lBQVFRRnFJZ05CQW5RaUFtb2dDeUFEUVFOMGFpSURLQUlFTmdJQUlBSWdDV29nQXlnQ0FEWUNBQ0FBUVFKcUlnQWdCa2NOQUFzTElBVWdCQ2dDcUFZMkFxd0dJQTVCQVdvaURpQU5SdzBBQ3dzZ0FTRUREQUVMSUFoQkRHb0VRQ0FJS0FJTUlnRW9BakFpQUFSL0lBQVFFQ0FJS0FJTUJTQUJDeEFRSUFoQkFEWUNEQXNMSUFoQkVHb2tBQ0FEQy9rRUFRaC9Jd0JCZ0FKcklnTWtBQ0FBQkVCQi9BeEJFU0FDRUIwZ0F5QUFLQUlBTmdMd0FTQUNRWm9SSUFOQjhBRnFFQllnQXlBQUtBSUVOZ0xnQVNBQ1FhY1JJQU5CNEFGcUVCWWdBeUFBS0FJSU5nTFFBU0FDUVlJM0lBTkIwQUZxRUJZZ0F5QUFLQUlRTmdMQUFTQUNRZjBRSUFOQndBRnFFQllnQVVFQVNnUkFBMEFnQUNnQzBDc2hCQ0FESUFjMkFyQUJJQUpCb2cwZ0EwR3dBV29RRmlBRElBUWdCMEc0Q0d4cUlnUW9BZ0EyQXFBQklBSkJtUkVnQTBHZ0FXb1FGaUFESUFRb0FnUTJBcEFCSUFKQjlEY2dBMEdRQVdvUUZpQURJQVFvQWdnMkFvQUJJQUpCb0RZZ0EwR0FBV29RRmlBRElBUW9BZ3cyQW5BZ0FrR3dOaUFEUWZBQWFoQVdJQU1nQkNnQ0VEWUNZQ0FDUVlnUklBTkI0QUJxRUJZZ0F5QUVLQUlVTmdKUUlBSkJ0amdnQTBIUUFHb1FGa0hWQzBFWElBSVFIU0FFS0FJRUJFQWdCRUd3QjJvaEJpQUVRYXdHYWlFSVFRQWhCUU5BSUFnZ0JVRUNkQ0lKYWlnQ0FDRUtJQU1nQmlBSmFpZ0NBRFlDUkNBRElBbzJBa0FnQWtHTERDQURRVUJyRUJZZ0JVRUJhaUlGSUFRb0FnUkpEUUFMQ3lBQ0VHNGdBeUFFS0FJWU5nSXdJQUpCd0RZZ0EwRXdhaEFXSUFNZ0JDZ0NwQVkyQWlBZ0FrSHhOaUFEUVNCcUVCWkJBU0VHUWUwTFFSUWdBaEFkQWtBZ0JDZ0NHRUVCUndSQUlBUW9BZ1FpQlVFQVRBMEJJQVZCQTJ4QkFtc2hCZ3NnQkVFY2FpRUlRUUFoQlFOQUlBTWdDQ0FGUVFOMGFpa0NBRUlnaVRjREVDQUNRWXNNSUFOQkVHb1FGaUFGUVFGcUlnVWdCa2NOQUFzTElBSVFiaUFESUFRb0FxZ0dOZ0lBSUFKQjREWWdBeEFXUVprTVFRVWdBaEFkSUFkQkFXb2lCeUFCUncwQUN3dEJtZ3hCQkNBQ0VCMExJQU5CZ0FKcUpBQUw1Z29EQ1g4QmV3RitJd0JCc0FGcklnVWtBQUpBSUFGQmdBTnhCRUJCbmkxQkN5QUNFQjBNQVFzQ1FDQUJRUUZ4UlEwQUlBQW9Ba2dpQmtVTkFDTUFRZEFBYXlJREpBQkI3Z3hCRFNBQ0VCMGdBMEVBT2dCUElBTkJDVG9BVGlBRElBWXBBZ0EzQWtRZ0F5QURRYzRBYWlJRU5nSkFJQUpCaGprZ0EwRkFheEFXSUFNZ0Jpa0NDRGNDTkNBRElBUTJBakFnQWtIMU9DQURRVEJxRUJZZ0F5QUdLQUlRTmdJa0lBTWdCRFlDSUNBQ1FaTTNJQU5CSUdvUUZnSkFJQVlvQWhoRkRRQWdCaWdDRUVVTkFBTkFJQU1nQTBIT0FHb2lDallDRUNBRElBYzJBaFFnQWtHT0RTQURRUkJxRUJZZ0JpZ0NHQ0FIUVRSc2FpRUlJd0JCTUdzaUJDUUFJQVJCQ1RzQUxpQUVRUWs2QUMwZ0JDQUlLUUlBTndJa0lBUWdCRUV0YWlJSk5nSWdJQUpCenpZZ0JFRWdhaEFXSUFRZ0NDZ0NHRFlDRkNBRUlBazJBaEFnQWtIRk9DQUVRUkJxRUJZZ0JDQUlLQUlnTmdJRUlBUWdDVFlDQUNBQ1FhbzRJQVFRRmlBRVFUQnFKQUFnQXlBS05nSUFJQUpCbEF3Z0F4QVdJQWRCQVdvaUJ5QUdLQUlRU1EwQUN3dEJuQXhCQWlBQ0VCMGdBMEhRQUdva0FBc0NRQ0FCUVFKeFJRMEFJQUFvQWtoRkRRQkIrUTFCSkNBQ0VCMGdCU0FBS1FKVU53T2dBU0FDUWVjUklBVkJvQUZxRUJZZ0JTQUFLUUpjTndPUUFTQUNRY1VSSUFWQmtBRnFFQllnQlNBQUtRTm9Od09BQVNBQ1FkY1JJQVZCZ0FGcUVCWWdBQ2dDRENBQUtBSklLQUlRSUFJUVMwR2NERUVDSUFJUUhRc0NRQ0FCUVFoeFJRMEFJQUFvQWtoRkRRQWdBQ2dDYUNBQUtBSnNiQ0lFUlEwQUlBQW9BcHdCSVFNRFFDQURJQUFvQWtnb0FoQWdBaEJMSUFOQmpDeHFJUU1nQzBFQmFpSUxJQVJIRFFBTEN5QUJRUkJ4UlEwQUlBQW9Bc2dCSVFGQjB3MUJKU0FDRUIwZ0JTQUIvUUFEQVAwTEJIQWdBa0hKS3lBRlFmQUFhaEFXUWNFTlFSRWdBaEFkQWtBZ0FTZ0NIRVVOQUNBQktBSVlSUTBBUVFBaEF3TkFJQUVvQWh3Z0EwRVliR29pQUM4QkFDRUVJQUFwQXdnaERTQUZJQUFvQWhBMkFtQWdCU0FOTndOWUlBVWdCRFlDVUNBQ1FZczRJQVZCMEFCcUVCWWdBMEVCYWlJRElBRW9BaGhKRFFBTEMwR2FERUVFSUFJUUhRSkFJQUVvQWlnaUJFVU5BQ0FCS0FJa0lnZEZEUUJCQUNFRFFRQWhBQUpBSUFkQkJFOEVRQ0FIUVh4eElRQURRQ0FFSUFOQkEzSkJLR3hxUVFScUlBUWdBMEVDY2tFb2JHcEJCR29nQkNBRFFRRnlRU2hzYWtFRWFpQUVJQU5CS0d4cS9Ra0NCUDFXQWdBQi9WWUNBQUw5VmdJQUF5QU0vYTRCSVF3Z0EwRUVhaUlESUFCSERRQUxJQXdnRENBTS9RMElDUW9MREEwT0R3QUJBZ01BQVFJRC9hNEJJZ3dnRENBTS9RMEVCUVlIQUFFQ0F3QUJBZ01BQVFJRC9hNEIvUnNBSVFNZ0FDQUhSZzBCQ3dOQUlBUWdBRUVvYkdvb0FnUWdBMm9oQXlBQVFRRnFJZ0FnQjBjTkFBc0xJQU5GRFFCQnNBMUJFQ0FDRUIwZ0FTZ0NKQVJBSUFFb0FpZ2hBRUVBSVFjRFFDQUZJQUFnQjBFb2JDSUVhaWdDQkNJR05nSkVJQVVnQnpZQ1FDQUNRZEU0SUFWQlFHc1FGaUFCS0FJb0lRQUNRQ0FHUlEwQVFRQWhBeUFBSUFScUtBSVFSUTBBQTBBZ0FTZ0NLQ0FFYWlnQ0VDQURRUmhzYWlJQS9RQURBQ0VNSUFVZ0FDa0RFRGNET0NBRklBejlDd01vSUFVZ0F6WUNJQ0FDUWFYUkFDQUZRU0JxRUJZZ0EwRUJhaUlESUFaSERRQUxJQUVvQWlnaEFBc0NRQ0FBSUFScUlnWW9BaGhGRFFCQkFDRURJQVlvQWhSRkRRQURRQ0FBSUFScUtBSVlJQU5CR0d4cUlnQXZBUUFoQmlBQUtRTUlJUTBnQlNBQUtBSVFOZ0lRSUFVZ0RUY0RDQ0FGSUFZMkFnQWdBa0dMT0NBRkVCWWdBMEVCYWlJRElBRW9BaWdpQUNBRWFpZ0NGRWtOQUFzTElBZEJBV29pQnlBQktBSWtTUTBBQ3d0Qm1neEJCQ0FDRUIwTFFad01RUUlnQWhBZEN5QUZRYkFCYWlRQUM0OENBUU4vQWtCQkFVSG9BUkFUSWdFRWZ5QUJRUUUyQWdBZ0FVRUJOZ0s0QVNBQklBRXRBTHdCUVFaeU9nQzhBU0FCUVFGQmpDd1FFeUlBTmdJTUlBQkZEUUVnQVVFQlFlZ0hFQk1pQURZQ0VDQUFSUTBCSUFGQ0FEY0RNQ0FCUVg4MkFpd2dBVUhvQnpZQ0ZBSkFRUUZCTUJBVElnQUVRQ0FBUVFBMkFoZ2dBRUhrQURZQ0lDQUFRZVFBUVJnUUV5SUNOZ0ljSUFJTkFTQUFFQkFMSUFGQkFEWUN5QUVNQWdzZ0FFRUFOZ0lvSUFFZ0FEWUN5QUVnQVJBeklnQTJBc1FCSUFCRkRRRWdBUkF6SWdBMkFzQUJJQUJGRFFFQ1FCQ1JBVVVOQUFzZ0FVRUFFR1lpQURZQzFBRWdBRVVFUUNBQlFRQVFaaUlBTmdMVUFTQUFSUTBDQ3lBQkJVRUFDdzhMSUFFUU9FRUFDNDBKQWdsL0FYNGpBRUhRQVdzaUJ5UUFJQUFvQWtnaENRSkFBa0FDUUNBQUtBSm9RUUZIRFFBZ0FDZ0NiRUVCUncwQUlBQW9BcHdCS0FMY0t3MEJDeUFBS0FJSVFRaEdEUUFnQmtFQlFlSE9BRUVBRUE4TUFRc0NRQ0FCS0FJUUlneEZEUUFnQUNnQ29BRWhDaUFCS0FJWUlRc2dERUVJVHdSQUlBeEJlSEVoRHdOQUlBc2dDRUUwYkdvZ0NqWUNLQ0FMSUFoQkFYSkJOR3hxSUFvMkFpZ2dDeUFJUVFKeVFUUnNhaUFLTmdJb0lBc2dDRUVEY2tFMGJHb2dDallDS0NBTElBaEJCSEpCTkd4cUlBbzJBaWdnQ3lBSVFRVnlRVFJzYWlBS05nSW9JQXNnQ0VFR2NrRTBiR29nQ2pZQ0tDQUxJQWhCQjNKQk5HeHFJQW8yQWlnZ0NFRUlhaUVJSUE1QkNHb2lEaUFQUncwQUN3c2dERUVIY1NJTVJRMEFBMEFnQ3lBSVFUUnNhaUFLTmdJb0lBaEJBV29oQ0NBTlFRRnFJZzBnREVjTkFBc0xJQUlnQTNJZ0JISWdCWEpGQkVBZ0JrRUVRYTh3UVFBUUR5QUFRZ0EzQWh3Z0FDQUFLUUpvTndJa0lBRWdDZjBBQWdEOUN3SUFJQUVnQmhBM0lRZ01BUXNnQWtFQVNBUkFJQWNnQWpZQ0FDQUdRUUZCeDkwQUlBY1FEMEVBSVFnTUFRc2dBaUFKS0FJSUlnaExCRUFnQnlBSU5nSVVJQWNnQWpZQ0VDQUdRUUZCbStFQUlBZEJFR29RRDBFQUlRZ01BUXNDUUNBQ0lBa29BZ0FpQ0VrRVFDQUhJQWcyQXNRQklBY2dBallDd0FFZ0JrRUNRZnZqQUNBSFFjQUJhaEFQSUFCQkFEWUNIQ0FKS0FJQUlRSU1BUXNnQUNBQ0lBQW9BbFJySUFBb0FseHVOZ0ljQ3lBQklBSTJBZ0FnQTBFQVNBUkFJQWNnQXpZQ0lDQUdRUUZCaDkwQUlBZEJJR29RRDBFQUlRZ01BUXNnQXlBSktBSU1JZ0pMQkVBZ0J5QUNOZ0kwSUFjZ0F6WUNNQ0FHUVFGQjd0OEFJQWRCTUdvUUQwRUFJUWdNQVFzQ1FDQURJQWtvQWdRaUFra0VRQ0FISUFJMkFyUUJJQWNnQXpZQ3NBRWdCa0VDUWN6aUFDQUhRYkFCYWhBUElBQkJBRFlDSUNBSktBSUVJUU1NQVFzZ0FDQURJQUFvQWxocklBQW9BbUJ1TmdJZ0N5QUJJQU0yQWdSQkFDRUlJQVJCQUV3RVFDQUhJQVEyQWtBZ0JrRUJRY1hjQUNBSFFVQnJFQThNQVFzZ0JDQUpLQUlBSWdKSkJFQWdCeUFDTmdKVUlBY2dCRFlDVUNBR1FRRkJvdU1BSUFkQjBBQnFFQThNQVFzQ1FDQUVJQWtvQWdnaUFrc0VRQ0FISUFJMkFxUUJJQWNnQkRZQ29BRWdCa0VDUWNQZ0FDQUhRYUFCYWhBUElBQWdBQ2dDYURZQ0pDQUpLQUlJSVFRTUFRc2dBQ0FBTlFKY0loQWdCQ0FBS0FKVWE2MThRZ0Y5SUJDQVBnSWtDeUFCSUFRMkFnZ2dCVUVBVEFSQUlBY2dCVFlDWUNBR1FRRkJndHdBSUFkQjRBQnFFQThNQVFzZ0JTQUpLQUlFSWdKSkJFQWdCeUFDTmdKMElBY2dCVFlDY0NBR1FRRkI4dUVBSUFkQjhBQnFFQThNQVFzQ1FDQUZJQWtvQWd3aUFrc0VRQ0FISUFJMkFwUUJJQWNnQlRZQ2tBRWdCa0VDUVpYZkFDQUhRWkFCYWhBUElBQWdBQ2dDYkRZQ0tDQUpLQUlNSVFVTUFRc2dBQ0FBTlFKZ0loQWdCU0FBS0FKWWE2MThRZ0Y5SUJDQVBnSW9DeUFCSUFVMkFnd2dBQ0FBTFFCRVFRSnlPZ0JFSUFFZ0JoQTNJZ2hGQkVCQkFDRUlEQUVMSUFjZ0FmMEFBZ0Q5Q3dTQUFTQUdRUVJCdERrZ0IwR0FBV29RRHdzZ0IwSFFBV29rQUNBSUM1VUNBUWQvSXdCQklHc2lCU1FBQW44Z0FDZ0NTQ0lFUlFSQUlBTkJBVUhGNWdCQkFCQVBRUUFNQVF0QkFFRUVJQVFvQWhBUUV5SUVSUTBBR2lBQkJFQWdBQ2dDU0NFSUEwQUNRQUpBSUFJZ0JrRUNkR29vQWdBaUJ5QUlLQUlRVHdSQUlBVWdCellDRUNBRFFRRkIrUkVnQlVFUWFoQVBEQUVMSUFRZ0IwRUNkR29pQ1NnQ0FFVU5BU0FGSUFjMkFnQWdBMEVCUVkwYUlBVVFEd3NnQkJBUVFRQU1Bd3NnQ1VFQk5nSUFJQVpCQVdvaUJpQUJSdzBBQ3dzZ0JCQVFJQUFvQWtBUUVBSkFJQUVFUUNBQUlBRkJBblFpQkJBVUlnTTJBa0FnQTBVRVFDQUFRUUEyQWp4QkFBd0RDeUFESUFJZ0JCQVNHZ3dCQ3lBQVFRQTJBa0FMSUFBZ0FUWUNQRUVCQ3lFS0lBVkJJR29rQUNBS0M3d0ZBUWQvSUFGQkFVRWtFQk1pQkRZQ1NBSkFBa0FnQkVVTkFBSkFJQUVvQXNRQlFSSWdBeEFrQkVBZ0FTZ0N4QUZCRXlBREVDUU5BUXNNQWdzZ0FTZ0N4QUVpQnlnQ0FDRUdJQWNvQWdnaEJBSkFJQVlFUUVFQklRVWdCa0VCUndSQUlBWkJmbkVoQ1FOQUFuOUJBQ0FGUlEwQUdrRUFJQUVnQUNBRElBUW9BZ0FSQUFCRkRRQWFJQUVnQUNBRElBUW9BZ1FSQUFCQkFFY0xJUVVnQkVFSWFpRUVJQWhCQW1vaUNDQUpSdzBBQ3dzQ1FBSkFJQVpCQVhFRVFDQUZSUTBCSUFFZ0FDQURJQVFvQWdBUkFBQkJBRWNoQlFzZ0IwRUFOZ0lBSUFWRkRRRU1Bd3NnQjBFQU5nSUFDd3dEQ3lBSFFRQTJBZ0FMQWtBZ0FTZ0N3QUZCRkNBREVDUUVRQ0FCS0FMQUFVRVZJQU1RSkEwQkN3d0NDeUFCS0FMQUFTSUhLQUlBSVFZZ0J5Z0NDQ0VFQWtBZ0JnUkFRUUVoQlNBR1FRRnhJUWtnQmtFQlJnUi9RUUFGSUFaQmZuRWhCa0VBSVFnRFFBSi9RUUFnQlVVTkFCcEJBQ0FCSUFBZ0F5QUVLQUlBRVFBQVJRMEFHaUFCSUFBZ0F5QUVLQUlFRVFBQVFRQkhDeUVGSUFSQkNHb2hCQ0FJUVFKcUlnZ2dCa2NOQUFzZ0JVVUxJUVlDUUFKQUlBa0VRQ0FHRFFFZ0FTQUFJQU1nQkNnQ0FCRUFBRUVBUnlFRkN5QUhRUUEyQWdBZ0JVVU5BUXdEQ3lBSFFRQTJBZ0FMREFNTElBZEJBRFlDQUFzZ0FrRUJRU1FRRXlJQU5nSUFJQUJGRFFBZ0FTZ0NTQ0FBRUQ4Z0FTZ0N5QUVnQVNnQ2JDQUJLQUpvYkNJQU5nSWtJQUJCS0JBVElRTWdBU2dDeUFFaUFDQUROZ0lvQWtBZ0EwVU5BQ0FBS0FJa1JRUkFRUUVQQzBFQUlRUURRQ0FESUFSQktHd2lCV29pQUVFQU5nSVVJQUJCNUFBMkFoeEI1QUJCR0JBVElRQWdCU0FCS0FMSUFTSUhLQUlvSWdOcUlBQTJBaGdnQUVVTkFVRUJJUW9nQkVFQmFpSUVJQWNvQWlSSkRRQUxEQUVMSUFJb0FnQVFJVUVBSVFvZ0FrRUFOZ0lBQ3lBS0R3c2dBU2dDU0JBaElBRkJBRFlDU0VFQUN3SUFDd1FBUVFFTE5BQUNRQ0FBUlEwQUlBRkZEUUFnQUNBQktBSUVOZ0trQVNBQUlBRW9BZ0EyQXFBQklBQWdBU2dDdUVCQkFuRTJBdUFCQ3d1MEJRRUlmeUFBS0FJWUlnUW9BaEFpQ1VVRVFFRUFEd3NnQkNnQ0dDRUZJQUFvQWhRb0FnQW9BaFFoQkFKQUFrQWdBVVVFUUVFQUlRRURRQ0FGS0FJWUlRSWdCQ2dDSENBRUtBSVlRWmdCYkdvaUFFR01BV3NvQWdBaUJ5QUFRWlFCYXlnQ0FDSUlheUVESUFCQmtBRnJLQUlBSUFCQm1BRnJLQUlBYXlFQUFrQWdCeUFJUmcwQUlBQ3RJQU90ZmtJZ2lGQU5BQXdFQ3lBQUlBTnNJUU1DUUVFRUlBSkJBM1lnQWtFSGNVRUFSMm9pQUNBQVFRTkdHeUlDUlEwQUlBS3RJQU90ZmtJZ2lGQU5BQXdFQzBGL0lRQWdBaUFEYkNJQ0lBRkJmM05MRFFJZ0JFSE1BR29oQkNBRlFUUnFJUVVnQVNBQ2FpSUJJUUFnQmtFQmFpSUdJQWxIRFFBTERBRUxRUUFoQVNBQUtBSkFSUVJBQTBBZ0JTZ0NHQ0VDSUFRb0Fod2dCQ2dDR0VHWUFXeHFJZ0JCQkdzb0FnQWlCeUFBUVF4cktBSUFJZ2hySVFNZ0FFRUlheWdDQUNBQVFSQnJLQUlBYXlFQUFrQWdCeUFJUmcwQUlBQ3RJQU90ZmtJZ2lGQU5BQXdFQ3lBQUlBTnNJUU1DUUVFRUlBSkJBM1lnQWtFSGNVRUFSMm9pQUNBQVFRTkdHeUlDUlEwQUlBS3RJQU90ZmtJZ2lGQU5BQXdFQzBGL0lRQWdBaUFEYkNJQ0lBRkJmM05MRFFJZ0JFSE1BR29oQkNBRlFUUnFJUVVnQVNBQ2FpSUJJUUFnQmtFQmFpSUdJQWxIRFFBTERBRUxBMEFnQlNnQ0dDRUNJQVFvQWh3Z0JDZ0NHRUdZQVd4cUlnQkJqQUZyS0FJQUlnY2dBRUdVQVdzb0FnQWlDR3NoQXlBQVFaQUJheWdDQUNBQVFaZ0JheWdDQUdzaEFBSkFJQWNnQ0VZTkFDQUFyU0FEclg1Q0lJaFFEUUFNQXdzZ0FDQURiQ0VEQWtCQkJDQUNRUU4ySUFKQkIzRkJBRWRxSWdBZ0FFRURSaHNpQWtVTkFDQUNyU0FEclg1Q0lJaFFEUUFNQXd0QmZ5RUFJQUlnQTJ3aUFpQUJRWDl6U3cwQklBUkJ6QUJxSVFRZ0JVRTBhaUVGSUFFZ0Ftb2lBU0VBSUFaQkFXb2lCaUFKUncwQUN3c2dBQThMUVg4TDJnUUJDMzhnQUFSQUlBQW9BaFFpQVFSQUlBRW9BZ0FpQlFSQUlBVW9BaFFoQXlBRktBSVFCSDlCRUVFUklBQXRBQ2hCQVhFYklRZ0RRQ0FES0FJY0lnSUVRQ0FES0FJZ0lnRkJtQUZ1SVFwQkFDRUpJQUZCbUFGUEJIOERRQ0FDS0FJd0lnRUVRQ0FDS0FJMElnWkJLRzRoQjBFQUlRUWdCa0VvVHdSL0EwQWdBU2dDSUJBcElBRkJBRFlDSUNBQktBSWtFQ2tnQVVFQU5nSWtJQUVnQ0JFQ0FDQUJRU2hxSVFFZ0JFRUJhaUlFSUFkSERRQUxJQUlvQWpBRklBRUxFQkFnQWtFQU5nSXdDeUFDS0FKVUlnRUVRQ0FDS0FKWUlnWkJLRzRoQjBFQUlRUWdCa0VvVHdSL0EwQWdBU2dDSUJBcElBRkJBRFlDSUNBQktBSWtFQ2tnQVVFQU5nSWtJQUVnQ0JFQ0FDQUJRU2hxSVFFZ0JFRUJhaUlFSUFkSERRQUxJQUlvQWxRRklBRUxFQkFnQWtFQU5nSlVDeUFDS0FKNElnRUVRQ0FDS0FKOElnWkJLRzRoQjBFQUlRUWdCa0VvVHdSL0EwQWdBU2dDSUJBcElBRkJBRFlDSUNBQktBSWtFQ2tnQVVFQU5nSWtJQUVnQ0JFQ0FDQUJRU2hxSVFFZ0JFRUJhaUlFSUFkSERRQUxJQUlvQW5nRklBRUxFQkFnQWtFQU5nSjRDeUFDUVpnQmFpRUNJQWxCQVdvaUNTQUtSdzBBQ3lBREtBSWNCU0FDQ3hBUUlBTkJBRFlDSEFzQ1FDQURLQUlvUlEwQUlBTW9BaVFpQVVVTkFDQUJFQkFnQS8wTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEFpUUxJQU1vQWpRUUVDQURRY3dBYWlFRElBdEJBV29pQ3lBRktBSVFTUTBBQ3lBRktBSVVCU0FEQ3hBUUlBVkJBRFlDRkNBQUtBSVVLQUlBRUJBZ0FDZ0NGQ0lCUVFBMkFnQUxJQUVRRUNBQVFRQTJBaFFMSUFBb0FrUVFFQ0FBRUJBTEM4c1RBUlYvSXdCQklHc2lEeVFBSUE4Z0JUWUNHQ0FCSUFNb0FoeEJ6QUJzYWlnQ0hDQURLQUlnUVpnQmJHb2hFUUpBQWtBZ0F5Z0NLQTBBSUJFb0FoaEZEUUFnRVVFY2FpRUpBMEFDUUNBSktBSUlJQWtvQWdCSEJIOGdDU2dDRENBSktBSUVSZ1ZCQVFzTkFDQURLQUlrSWdFZ0NTZ0NHRUVvYms4RVFDQUlRUUZCZ2hWQkFCQVBEQVFMSUFrb0FoUWdBVUVvYkdvaUFTZ0NJQkJpSUFFb0FpUVFZaUFCS0FJVUlBRW9BaEJzSWcxRkRRQWdBU2dDR0NFQklBMUJDRThFUUNBTlFYaHhJUXRCQUNFS0EwQWdBVUlBTndMb0F5QUJRZ0EzQXFnRElBRkNBRGNDNkFJZ0FVSUFOd0tvQWlBQlFnQTNBdWdCSUFGQ0FEY0NxQUVnQVVJQU53Sm9JQUZDQURjQ0tDQUJRWUFFYWlFQklBcEJDR29pQ2lBTFJ3MEFDd3RCQUNFS0lBMUJCM0VpRFVVTkFBTkFJQUZDQURjQ0tDQUJRVUJySVFFZ0NrRUJhaUlLSUExSERRQUxDeUFKUVNScUlRa2dERUVCYWlJTUlCRW9BaGhKRFFBTEN5QUZJUTBDUUNBQ0xRQUFRUUp4UlEwQUlBZEJCVTBFUUNBSVFRSkJzUjlCQUJBUERBRUxBa0FnQlMwQUFFSC9BVVlFUUNBRkxRQUJRWkVCUmcwQkN5QUlRUUpCMng5QkFCQVBEQUVMSUE4Z0JVRUdhaUlOTmdJWUMwRVVFQlFpQzBVTkFBSi9JQUF0QUd4QkFYRUVRQ0FBUVNocUlRY2dBQ2dDS0NFTklBQkJMR29NQVFzZ0FpMEFpQ3hCQW5FRVFDQUNRYkFvYWlFSElBSW9BckFvSVEwZ0FrRzhLR29NQVFzZ0R5QUZJQWRxSUExck5nSWNJQTlCR0dvaEJ5QVBRUnhxQ3lJU0tBSUFJUUFnQzBJQU53SU1JQXNnRFRZQ0NDQUxJQTAyQWdBZ0N5QUFJQTFxTmdJRUlBdEJBUkFmUlFSQUlBc1FaQm9nQ3lnQ0NDQUxLQUlBYXlFYUlBc1FMQ0FhSUExcUlRRUNRQ0FDTFFBQVFRUnhSUTBBSUFjb0FnQWdFaWdDQUNBQmEycEJBVTBFUUNBSVFRSkJtQ0ZCQUJBUERBRUxBa0FnQVMwQUFFSC9BVVlFUUNBQkxRQUJRWklCUmcwQkN5QUlRUUpCd2lGQkFCQVBEQUVMSUFGQkFtb2hBUXNnRWlBU0tBSUFJQWNvQWdBZ0FXdHFOZ0lBSUFjZ0FUWUNBQ0FFUVFBMkFnQWdCaUFQS0FJWUlBVnJOZ0lBUVFFaEZ3d0JDeUFSS0FJWUJFQWdFVUVjYWlFUUEwQWdBeWdDSkNFQUlCQW9BaFFoQVFKQUlCQW9BZ2dnRUNnQ0FFY0VmeUFRS0FJTUlCQW9BZ1JHQlVFQkN3MEFJQUVnQUVFb2JHb2lGQ2dDRkNBVUtBSVFiQ0lZUlEwQUlCUW9BaGdoQ1VFQUlSVURRQUpBQW44Z0NTZ0NLRVVFUUNBTElCUW9BaUFnRlNBREtBSW9RUUZxRUdBTUFRc2dDMEVCRUI4TFJRUkFJQWxCQURZQ0pBd0JDeUFKS0FJb1JRUkFRUUFoQVFOQUlBRWlBRUVCYWlFQklBc2dGQ2dDSkNBVklBQVFZRVVOQUFzZ0VDZ0NIQ0VCSUFsQkF6WUNJQ0FKSUFFMkFoZ2dDU0FCSUFCclFRRnFOZ0ljQ3lBSkFuOUJBU0FMUVFFUUgwVU5BQnBCQWlBTFFRRVFIMFVOQUJvZ0MwRUNFQjhpQUVFRFJ3UkFJQUJCQTJvTUFRc2dDMEVGRUI4aUFFRWZSd1JBSUFCQkJtb01BUXNnQzBFSEVCOUJKV29MTmdJa1FRQWhBUU5BSUFFaUFFRUJhaUVCSUF0QkFSQWZEUUFMSUFrZ0NTZ0NJQ0FBYWpZQ0lBSkFBa0FDZnlBSktBSW9JZ0JGQkVBZ0FpZ0MwQ3NnQXlnQ0hFRzRDR3hxS0FJUUlRQWdDU2dDTUVVRVFDQUpLQUlBUWZBQkVCY2lBVVVOQkNBSklBRTJBZ0FnQVNBSktBSXdRUmhzYWtFQVFmQUJFQlVhSUFsQkNqWUNNQXNnQ1NnQ0FDSUIvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDQUNBQlFnQTNBaEJCQVVFS1FlMEFJQUJCQVhFYklBQkJCSEViSVFwQkFBd0JDeUFKS0FJQUlnRWdBRUVCYXlJTVFSaHNhaUlLS0FJRUlBb29BZ3hIRFFFZ0FpZ0MwQ3NnQXlnQ0hFRzRDR3hxS0FJUUlRb2dDU2dDTUNJTUlBQkJBV3BKQkg4Z0FTQU1RUXBxSWd4QkdHd1FGeUlCUlEwRElBa2dBVFlDQUNBQklBa29BakJCR0d4cVFRQkI4QUVRRlJvZ0NTQU1OZ0l3SUFrb0FnQUZJQUVMSUFCQkdHeHFJZ0g5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5Q3dJQUlBRkNBRGNDRUFKL1FRRWdDa0VFY1EwQUdrSHRBQ0FLUVFGeFJRMEFHa0VDUVFKQkFTQUJRUXhyS0FJQUlncEJDa1liSUFwQkFVWWJDeUVLSUFBTElRd2dBU0FLTmdJTUN5QUpLQUlrSVFBZ0FpZ0MwQ3NnQXlnQ0hFRzRDR3hxTFFBUVFjQUFjUVJBQTBBZ0RFRVliQ0lPSUFrb0FnQnFJQUJCQVNBTUd5SVROZ0lRSUFrb0FpQWhGa0VBSVFvZ0FDRUJJQk5CQWs4RVFBTkFJQXBCQVdvaENpQUJRUU5MSVJzZ0FVRUJkaUVCSUJzTkFBc0xJQW9nRm1vaUFVRWhUd1JBSUE4Z0FUWUNFQ0FJUVFGQnZQUUFJQTlCRUdvUUR3d0RDeUFMSUFFUUh5RUtJQWtvQWdBaUFTQU9haUlPSUFvMkFoUWdBQ0FPS0FJUWF5SUFRUUJNRFFNZ0FpZ0MwQ3NnQXlnQ0hFRzRDR3hxS0FJUUlRb2dDU2dDTUNJT0lBeEJBbXBKQkVBZ0FTQU9RUXBxSWc1QkdHd1FGeUlCUlEwRElBa2dBVFlDQUNBQklBa29BakJCR0d4cVFRQkI4QUVRRlJvZ0NTQU9OZ0l3SUFrb0FnQWhBUXNnQVNBTVFRRnFJZ3hCR0d4cUlnSDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlDd0lBSUFGQ0FEY0NFQ0FCQW45QkFTQUtRUVJ4RFFBYVFlMEFJQXBCQVhGRkRRQWFRUUpCQWtFQklBRkJER3NvQWdBaUFVRUtSaHNnQVVFQlJoc0xOZ0lNREFBTEFBc0RRQ0FNUVJoc0lnNGdDU2dDQUdvaUFTQUJLQUlNSUFFb0FnUnJJZ0VnQUNBQUlBRktHeUlCTmdJUUlBa29BaUFoRTBFQUlRb2dBVUVDVHdSQUEwQWdDa0VCYWlFS0lBRkJBMHNoSENBQlFRRjJJUUVnSEEwQUN3c2dDaUFUYWlJQlFTRlBCRUFnRHlBQk5nSUFJQWhCQVVHODlBQWdEeEFQREFJTElBc2dBUkFmSVFvZ0NTZ0NBQ0lCSUE1cUlnNGdDallDRkNBQUlBNG9BaEJySWdCQkFFd05BaUFDS0FMUUt5QURLQUljUWJnSWJHb29BaEFoQ2lBSktBSXdJZzRnREVFQ2Fra0VRQ0FCSUE1QkNtb2lEa0VZYkJBWElnRkZEUUlnQ1NBQk5nSUFJQUVnQ1NnQ01FRVliR3BCQUVId0FSQVZHaUFKSUE0MkFqQWdDU2dDQUNFQkN5QUJJQXhCQVdvaURFRVliR29pQWYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEFnQWdBVUlBTndJUUlBRUNmMEVCSUFwQkJIRU5BQnBCN1FBZ0NrRUJjVVVOQUJwQkFrRUNRUUVnQVVFTWF5Z0NBQ0lCUVFwR0d5QUJRUUZHR3dzMkFnd01BQXNBQ3lBTEVDd01CUXNnQ1VGQWF5RUpJQlZCQVdvaUZTQVlSdzBBQ3dzZ0VFRWthaUVRSUJsQkFXb2lHU0FSS0FJWVNRMEFDd3NnQ3hCa1JRUkFJQXNRTEF3QkN5QUxLQUlJSUFzb0FnQnJJUjBnQ3hBc0lCMGdEV29oQVFKQUlBSXRBQUJCQkhGRkRRQWdCeWdDQUNBU0tBSUFJQUZyYWtFQlRRUkFJQWhCQWtHWUlVRUFFQThNQVFzQ1FDQUJMUUFBUWY4QlJnUkFJQUV0QUFGQmtnRkdEUUVMSUFoQkFrSENJVUVBRUE4TUFRc2dBVUVDYWlFQkN5QVNJQklvQWdBZ0J5Z0NBQ0FCYTJvMkFnQWdCeUFCTmdJQVFRRWhGeUFFUVFFMkFnQWdCaUFQS0FJWUlBVnJOZ0lBQ3lBUFFTQnFKQUFnRnd1V0pBSVVmdzUrQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUtBSlVEZ1VBQVFJREJBb0xBa0FnQUNnQ05DSUdJQUFvQXNRQklnRkpCRUFnQUNnQ1FDSUhJQUZCQVdwSkRRRUxJQUFvQXV3QlFRRkI5RDlCQUJBUERBd0xJQUFvQWl4RkJFQWdBQ2dDSkNFQ1FRQWhBUXdGQ3lBQVFRQTJBaXdnQUNnQ1JDRURRUUVoQVF3RUN3SkFJQUFvQWpRaUJpQUFLQUxFQVNJQlNRUkFJQUFvQWtBaUJ5QUJRUUZxU1EwQkN5QUFLQUxzQVVFQlFhSEFBRUVBRUE4TUN3c2dBQ2dDTEVVRVFDQUFLQUlrSVFSQkFDRUJEQWdMSUFCQkFEWUNMQ0FBS0FJd0lRTkJBU0VCREFjTEFrQWdBQ2dDTkNJRUlBQW9Bc1FCSWdwSkJFQWdBQ2dDUUNJT0lBcEJBV3BKRFFFTElBQW9BdXdCUVFGQnFNRUFRUUFRRHd3S0N5QUFLQUlzUlFSQUlBQW9BaWdoQ3d3R0N5QUFRZ0EzQXVRQklBQkJBRFlDTENBQUtBTElBU0VNQTBBZ0RDQUhRUVIwYWlJRktBSUlJZzhFUUNBRktBSU1JUkpCQUNFQkEwQUNRQ0FQSUFGQmYzTnFJaEFnRWlBQlFRUjBhaUlSS0FJQWFpSUpRUjlMRFFBZ0JTZ0NBQ0lUUVg4Z0NYWkxEUUFnQUNBQ0lCTWdDWFFpQ1NBQ0lBbEpHeUFKSUFJYklnSTJBdVFCQ3dKQUlCRW9BZ1FnRUdvaUNVRWZTdzBBSUFVb0FnUWlFRUYvSUFsMlN3MEFJQUFnQXlBUUlBbDBJZ2tnQXlBSlNSc2dDU0FER3lJRE5nTG9BUXNnQVVFQmFpSUJJQTlIRFFBTEN5QUhRUUZxSWdjZ0NrY05BQXNnQWtVTkJ5QURSUTBISUFBdEFBQkZCRUFnQUNBQUtBTFFBVFlDYkNBQUlBQW9Bc3dCTmdKa0lBQWdBQ2dDMkFFMkFuQWdBQ0FBS0FMVUFUWUNhQXNnQUNnQ01DRUZRUUVoQVF3RkN3SkFJQUFvQWpRaUJTQUFLQUxFQVNJSlNRUkFJQUFvQWtBaUVpQUpRUUZxU1EwQkN5QUFLQUxzQVVFQlFmdkFBRUVBRUE4TUNRc2dBQ2dDTEVVRVFDQUFLQUxJQVNJTklBQW9BaHdpQkVFRWRHb2hDeUFBS0FJb0lRZ01CQXNnQUVJQU53TGtBU0FBUVFBMkFpd2dBQ2dDeUFFaERRTkFJQTBnQmtFRWRHb2lDaWdDQ0NJT0JFQWdDaWdDRENFUVFRQWhBUU5BQWtBZ0RpQUJRWDl6YWlJUklCQWdBVUVFZEdvaUV5Z0NBR29pREVFZlN3MEFJQW9vQWdBaUZFRi9JQXgyU3cwQUlBQWdBaUFVSUF4MElnd2dBaUFNU1JzZ0RDQUNHeUlDTmdMa0FRc0NRQ0FUS0FJRUlCRnFJZ3hCSDBzTkFDQUtLQUlFSWhGQmZ5QU1ka3NOQUNBQUlBTWdFU0FNZENJTUlBTWdERWtiSUF3Z0F4c2lBellDNkFFTElBRkJBV29pQVNBT1J3MEFDd3NnQmtFQmFpSUdJQWxIRFFBTElBSkZEUVlnQTBVTkJnSkFJQUF0QUFBRVFDQUFLQUpzSVFZTUFRc2dBQ0FBS0FMUUFTSUdOZ0pzSUFBZ0FDZ0N6QUUyQW1RZ0FDQUFLQUxZQVRZQ2NDQUFJQUFvQXRRQk5nSm9DMEVCSVFFTUF3c0NRQ0FBS0FJMElnWWdBQ2dDeEFFaUFVa0VRQ0FBS0FKQUlnOGdBVUVCYWtrTkFRc2dBQ2dDN0FGQkFVSE93QUJCQUJBUERBWUxJQUFvQWl4RkJFQWdBQ2dDeUFFZ0FDZ0NIQ0lHUVFSMGFpRUZJQUFvQWlnaEIwRUFJUUVNQWdzZ0FDQUdOZ0ljSUFCQkFEWUNMRUVCSVFFTUFRc0RRQUovQWtBZ0FVVUVRQ0FDUVFGcUlRSU1BUXNnQUNBRE5nSW9JQUFvQWpnZ0EwME5DU0FBS0FJd0lRUkJBQXdCQzBFQkN5RUJBMEFDUUFKQUFrQUNRQ0FCUlFSQUlBQWdCRFlDSUNBRUlBQW9BanhQRFFFZ0FDQUdOZ0ljSUFZaEFVRUFJUVVNQkFzZ0FDQUNOZ0lrSUFBb0Frd2dBazBFUUNBQUtBSWNJUUZCQVNFRkRBUUxJQUFvQWhBZ0FDZ0NJR3dnQUNnQ0RDQUFLQUlvYkdvZ0FDZ0NGQ0FBS0FJY2JHb2dBQ2dDR0NBQ2JHb2lBU0FBS0FJSVR3UkFEQXdMSUFBb0FnUWdBVUVCZEdvaUFTOEJBQTBCREEwTElBQW9BaWhCQVdvaEF3d0JDMEVBSVFFTUF3dEJBU0VCREFJTEEwQUNRQUpBQWtBZ0JVVUVRQ0FCSUFkUERRRWdBQ2dDSUNJRklBQW9Bc2dCSUFGQkJIUnFJZzBvQWdoUERRTWdBQzBBQUVVRVFDQUFJQTBvQWd3Z0JVRUVkR29pQVNnQ0RDQUJLQUlJYkRZQ1RBc2dBQ2dDU0NFQ1FRRWhBUXdGQ3lBQUlBRkJBV29pQVRZQ0hBd0JDeUFBS0FJZ1FRRnFJUVJCQUNFQkRBTUxRUUFoQlF3QkMwRUJJUVVNQUFzQUN3QUxBQXNEUUFKL0FrQWdBVVVFUUNBQUlBZEJBV29pQnpZQ0tBd0JDeUFHSUE5UERRZ2dBRUlBTndMa0FTQUFLQUxJQVNBR1FRUjBhaUlGS0FJSUlndEZEUWdnQlNnQ0RDRUtRUUFoQWtFQUlRUkJBQ0VCQTBBQ1FDQUxJQUZCZjNOcUlna2dDaUFCUVFSMGFpSU9LQUlBYWlJSVFSOUxEUUFnQlNnQ0FDSU1RWDhnQ0haTERRQWdBQ0FFSUF3Z0NIUWlDQ0FFSUFoSkd5QUlJQVFiSWdRMkF1UUJDd0pBSUE0b0FnUWdDV29pQ0VFZlN3MEFJQVVvQWdRaUNVRi9JQWgyU3cwQUlBQWdBaUFKSUFoMElnZ2dBaUFJU1JzZ0NDQUNHeUlDTmdMb0FRc2dBVUVCYWlJQklBdEhEUUFMSUFSRkRRWWdBa1VOQmdKQUlBQXRBQUFFUUNBQUtBSnNJUUlNQVFzZ0FDQUFLQUxRQVNJQ05nSnNJQUFnQUNnQ3pBRTJBbVFnQUNBQUtBTFlBVFlDY0NBQUlBQW9BdFFCTmdKb0MwRUFEQUVMUVFFTElRRURRQUpBQWtBQ1FBSkFJQUZGQkVBZ0FDQUNOZ0xnQVNBQ0lBQW9BbkJQRFFFZ0FDZ0NaQ0VOUVFBaEFRd0VDeUFBS0FJNElBZE5CRUFnQUNnQ0lDRURRUUVoQVF3RUN5QUFLQUlRSUFBb0FpQnNJQUFvQWd3Z0IyeHFJQUFvQWhRZ0JteHFJQUFvQWhnZ0FDZ0NKR3hxSWdFZ0FDZ0NDRThFUUF3TEN5QUFLQUlFSUFGQkFYUnFJZ0V2QVFBTkFRd01DeUFBSUFaQkFXb2lCallDSEF3QkMwRUFJUUVNQXd0QkFTRUJEQUlMQTBBQ1FBSkFBa0FnQUFKL0lBRkZCRUFnQUNBTk5nTGNBU0FOSUFBb0FtaFBEUUlnQUNnQ01Bd0JDeUFEUVFGcUN5SUROZ0lnSUFBb0Fqd2lBU0FGS0FJSUlnUWdBU0FFU1JzZ0Ewc0VRQ0FGS0FJQUlnRWdBYTBpSGlBRUlBTkJmM05xSWdpdEloYUdJaGNnRm9pblJ3MERJQVVvQWdRaUJFSi9JQmFJcDNFZ0JFY05BeUFFclNJVklCYUdJaGhDQVgwaUdTQUFOUUxZQVh3Z0dJQWhIeUFaSUFBb0F0QUJJZ210ZkNBWWdDRWFJQmRDQVgwaUd5QUFOUUxVQVh3Z0Y0QWhJQ0FiSUFBb0Fzd0JJZzZ0ZkNBWGdDRWNJQUZDZnlBRktBSU1JQU5CQkhScUlnc29BZ0FpQ2lBSWFxMGlIWWluY1NBQlJ3MERJQVFnRlNBTEtBSUVJZ0VnQ0dxdEloV0dJaUVnRllpblJ3MERJQUFvQXVBQklnU3RJaUlnSVlKQ0FGSUVRQ0FFSUFsSERRUkNmeUFWaGtKL2hTQWFRdi8vLy84UGd5QVdob05RRFFRTElBQW9BdHdCSWdTdEloVWdIaUFkaG9KQ0FGSUVRQ0FFSUE1SERRUkNmeUFkaGtKL2hTQWNRdi8vLy84UGd5QVdob05RRFFRTElBc29BZ2dpQkVVTkF5QUxLQUlNUlEwRElCeW5JZ3NnSUtkR0RRTWdHcWNpQ0NBZnAwWU5BeUFBSUFBb0FrUWlCellDS0NBQUlCVWdHM3dnRjRDbklBcDJJQXNnQ25acklCa2dJbndnR0lDbklBRjJJQWdnQVhacklBUnNhallDSkVFQklRRU1CUXNnQUNnQzNBRWlBU0FBS0FMa0FTSUVhaUFCSUFSd2F5RU5EQUVMSUFBb0F1QUJJZ0VnQUNnQzZBRWlCR29nQVNBRWNHc2hBa0VBSVFFTUF3dEJBQ0VCREFFTFFRRWhBUXdBQ3dBTEFBc0FDd05BQW44Q1FDQUJSUVJBSUFBZ0NFRUJhaUlJTmdJb0RBRUxJQUFnQmpZQzRBRWdBQ2dDY0NBR1RRMEhJQUFvQW1RaEQwRUFEQUVMUVFFTElRRURRQUpBQWtBQ1FBSkFJQUZGQkVBZ0FDQVBOZ0xjQVNBUElBQW9BbWhQRFFFZ0FDQUZOZ0ljSUFVaEJFRUFJUUVNQkFzZ0FDZ0NPQ0FJVFFSQUlBQW9BaUFoQjBFQklRRU1CQXNnQUNnQ0VDQUFLQUlnYkNBQUtBSU1JQWhzYWlBQUtBSVVJQVJzYWlBQUtBSVlJQUFvQWlSc2FpSUJJQUFvQWdoUEJFQU1DZ3NnQUNnQ0JDQUJRUUYwYWlJQkx3RUFEUUVNQ3dzZ0FDZ0M0QUVpQVNBQUtBTG9BU0lHYWlBQklBWndheUVHREFFTFFRQWhBUXdEQzBFQklRRU1BZ3NEUUFKQUFrQUNRQUpBSUFGRkJFQWdCQ0FTVHcwQ0lBQWdBQ2dDTUNJSE5nSWdJQTBnQkVFRWRHb2hDd3dCQ3lBQUlBZEJBV29pQnpZQ0lBc2dBQ2dDUENJQklBc29BZ2dpQWlBQklBSkpHeUFIU3dSQUlBc29BZ0FpQVNBQnJTSWVJQUlnQjBGL2Myb2lDcTBpRm9ZaUZ5QVdpS2RIRFFNZ0N5Z0NCQ0lDUW44Z0ZvaW5jU0FDUncwRElBS3RJaFVnRm9ZaUdFSUJmU0laSUFBMUF0Z0JmQ0FZZ0NFZklCa2dBQ2dDMEFFaURxMThJQmlBSVJvZ0YwSUJmU0liSUFBMUF0UUJmQ0FYZ0NFZ0lCc2dBQ2dDekFFaURLMThJQmVBSVJ3Z0FVSi9JQXNvQWd3Z0IwRUVkR29pQXlnQ0FDSUpJQXBxclNJZGlLZHhJQUZIRFFNZ0FpQVZJQU1vQWdRaUFTQUthcTBpRllZaUlTQVZpS2RIRFFNZ0FDZ0M0QUVpQXEwaUlpQWhna0lBVWdSQUlBSWdEa2NOQkVKL0lCV0dRbitGSUJwQy8vLy8vdytESUJhR2cxQU5CQXNnQUNnQzNBRWlBcTBpRlNBZUlCMkdna0lBVWdSQUlBSWdERWNOQkVKL0lCMkdRbitGSUJ4Qy8vLy8vdytESUJhR2cxQU5CQXNnQXlnQ0NDSUNSUTBESUFNb0FneEZEUU1nSEtjaUF5QWdwMFlOQXlBYXB5SUtJQituUmcwRElBQWdBQ2dDUkNJSU5nSW9JQUFnRlNBYmZDQVhnS2NnQ1hZZ0F5QUpkbXNnR1NBaWZDQVlnS2NnQVhZZ0NpQUJkbXNnQW14cU5nSWtRUUVoQVF3RkN5QUFJQVJCQVdvaUJEWUNIQXdCQ3lBQUtBTGNBU0lCSUFBb0F1UUJJZ0pxSUFFZ0FuQnJJUTlCQUNFQkRBTUxRUUFoQVF3QkMwRUJJUUVNQUFzQUN3QUxBQXNEUUFKL0FrQWdBVVVFUUNBQUlBdEJBV29pQ3pZQ0tBd0JDeUFBSUFVMkFpQWdBQ2dDUENBRlRRMEdJQUFvQW13aENFRUFEQUVMUVFFTElRRURRQUpBQWtBQ1FBSkFJQUZGQkVBZ0FDQUlOZ0xnQVNBSUlBQW9BbkJQRFFFZ0FDZ0NaQ0VOUVFBaEFRd0VDeUFBS0FJNElBdE5CRUFnQUNnQ0hDRUdRUUVoQVF3RUN5QUFLQUlRSUFBb0FpQnNJQUFvQWd3Z0MyeHFJQUFvQWhRZ0FDZ0NIR3hxSUFBb0FoZ2dBQ2dDSkd4cUlnRWdBQ2dDQ0U4RVFBd0pDeUFBS0FJRUlBRkJBWFJxSWdFdkFRQU5BUXdLQ3lBQUtBSWdRUUZxSVFVTUFRdEJBQ0VCREFNTFFRRWhBUXdDQ3dOQUFrQUNRQUpBQWtBZ0FVVUVRQ0FBSUEwMkF0d0JJQTBnQUNnQ2FFOE5BaUFBSUFRMkFod2dCQ0VHREFFTElBQWdCa0VCYWlJR05nSWNDeUFHSUE1SkJFQWdBQ2dDSUNJSElBQW9Bc2dCSUFaQkJIUnFJZ0VvQWdnaUEwOE5BeUFCS0FJQUlnSWdBcTBpSGlBRElBZEJmM05xSWdxdEloYUdJaGNnRm9pblJ3MERJQUVvQWdRaUEwSi9JQmFJcDNFZ0EwY05BeUFEclNJVklCYUdJaGhDQVgwaUdTQUFOUUxZQVh3Z0dJQWhIeUFaSUFBb0F0QUJJZyt0ZkNBWWdDRWFJQmRDQVgwaUd5QUFOUUxVQVh3Z0Y0QWhJQ0FiSUFBb0Fzd0JJZ210ZkNBWGdDRWNJQUpDZnlBQktBSU1JQWRCQkhScUlnRW9BZ0FpQnlBS2FxMGlIWWluY1NBQ1J3MERJQU1nRlNBQktBSUVJZ0lnQ21xdEloV0dJaUVnRllpblJ3MERJQUFvQXVBQklnT3RJaUlnSVlKQ0FGSUVRQ0FESUE5SERRUkNmeUFWaGtKL2hTQWFRdi8vLy84UGd5QVdob05RRFFRTElBQW9BdHdCSWdPdEloVWdIaUFkaG9KQ0FGSUVRQ0FESUFsSERRUkNmeUFkaGtKL2hTQWNRdi8vLy84UGd5QVdob05RRFFRTElBRW9BZ2dpQTBVTkF5QUJLQUlNUlEwRElCeW5JZ0VnSUtkR0RRTWdHcWNpQ2lBZnAwWU5BeUFBSUFBb0FrUWlDellDS0NBQUlCVWdHM3dnRjRDbklBZDJJQUVnQjNacklCa2dJbndnR0lDbklBSjJJQW9nQW5acklBTnNhallDSkVFQklRRU1CUXNnQUNnQzNBRWlBU0FBS0FMa0FTSUNhaUFCSUFKd2F5RU5EQUVMSUFBb0F1QUJJZ0VnQUNnQzZBRWlBbW9nQVNBQ2NHc2hDRUVBSVFFTUF3dEJBQ0VCREFFTFFRRWhBUXdBQ3dBTEFBc0FDd05BQW44Q1FDQUJSUVJBSUFSQkFXb2hCQXdCQ3lBQUlBTTJBaUFnQUNnQ1BDQURUUTBGSUFBb0FrUWhBa0VBREFFTFFRRUxJUUVEUUFKQUFrQUNRQUpBSUFGRkJFQWdBQ0FDTmdJb0lBSWdBQ2dDT0U4TkFTQUFJQVkyQWh3Z0JpRUJRUUFoQlF3RUN5QUFJQVEyQWlRZ0FDZ0NUQ0FFVFFSQUlBQW9BaHdoQVVFQklRVU1CQXNnQUNnQ0VDQUFLQUlnYkNBQUtBSU1JQUFvQWloc2FpQUFLQUlVSUFBb0FoeHNhaUFBS0FJWUlBUnNhaUlCSUFBb0FnaFBCRUFNQ0FzZ0FDZ0NCQ0FCUVFGMGFpSUJMd0VBRFFFTUNRc2dBQ2dDSUVFQmFpRUREQUVMUVFBaEFRd0RDMEVCSVFFTUFnc0RRQUpBQWtBQ1FDQUZSUVJBSUFFZ0IwOE5BU0FBS0FJZ0lnVWdBQ2dDeUFFZ0FVRUVkR29pRFNnQ0NFOE5BeUFBTFFBQVJRUkFJQUFnRFNnQ0RDQUZRUVIwYWlJQktBSU1JQUVvQWdoc05nSk1DeUFBS0FKSUlRUkJBU0VCREFVTElBQWdBVUVCYWlJQk5nSWNEQUVMSUFBb0FpaEJBV29oQWtFQUlRRU1Bd3RCQUNFRkRBRUxRUUVoQlF3QUN3QUxBQXNBQzBFQUR3c2dBQ2dDN0FGQkFVR2FDa0VBRUE4TFFRQVBDeUFCUVFFN0FRQkJBUXVSQ3dFS2Z3SkFJQUVvQWdBZ0JFRURiQ0lNZGlJR1FaQ0FnQUZ4RFFBZ0FDQUFRUnhxSWc0Z0FDZ0NiQ0FHUWU4RGNXb3RBQUJCQW5ScUlnbzJBbWdnQUNBQUtBSUVJQW9vQWdBaUNTZ0NBQ0lJYXlJR05nSUVBa0FnQ0NBQUtBSUFJZ2RCRUhaTEJFQWdDU2dDQkNFTElBQWdDRFlDQkNBS0lBbEJDRUVNSUFZZ0NFa2lCaHRxS0FJQU5nSUFJQXNnQzBVZ0Joc2hDU0FBS0FJSUlRWURRQUpBSUFZTkFDQUFLQUlRSWdaQkFXb2hDeUFHTFFBQklRb2dCaTBBQUVIL0FVWUVRQ0FLUVpBQlR3UkFJQUFnQUNnQ0RFRUJhallDRENBSFFZRCtBMm9oQjBFSUlRWU1BZ3NnQUNBTE5nSVFJQWNnQ2tFSmRHb2hCMEVISVFZTUFRc2dBQ0FMTmdJUVFRZ2hCaUFISUFwQkNIUnFJUWNMSUFBZ0JrRUJheUlHTmdJSUlBQWdCMEVCZENJSE5nSUFJQUFnQ0VFQmRDSUlOZ0lFSUFoQmdJQUNTUTBBQ3lBSUlRWU1BUXNnQUNBSElBaEJFSFJySWdjMkFnQWdCa0dBZ0FKeFJRUkFJQWtvQWdRaEN5QUtJQWxCREVFSUlBWWdDRWtpQ0J0cUtBSUFOZ0lBSUF0RklBc2dDQnNoQ1NBQUtBSUlJUWdEUUFKQUlBZ05BQ0FBS0FJUUlnaEJBV29oQ3lBSUxRQUJJUW9nQ0MwQUFFSC9BVVlFUUNBS1FaQUJUd1JBSUFBZ0FDZ0NERUVCYWpZQ0RDQUhRWUQrQTJvaEIwRUlJUWdNQWdzZ0FDQUxOZ0lRSUFjZ0NrRUpkR29oQjBFSElRZ01BUXNnQUNBTE5nSVFRUWdoQ0NBSElBcEJDSFJxSVFjTElBQWdDRUVCYXlJSU5nSUlJQUFnQjBFQmRDSUhOZ0lBSUFBZ0JrRUJkQ0lHTmdJRUlBWkJnSUFDU1EwQUN3d0JDeUFKS0FJRUlRa0xJQWxGRFFBZ0FDQU9JQUVvQWdRZ0RFRVJhblpCQkhFZ0FVRUVheUlOS0FJQUlBeEJFMnAyUVFGeElBRW9BZ0FpQ0NBTVFSQnFka0hBQUhFZ0NDQU1ka0dxQVhGeUlBZ2dERUVNYWtFT0lBUWJka0VRY1hKeWNpSVBRZEM1QVdvdEFBQkJBblJxSWdzMkFtZ2dBQ0FHSUFzb0FnQWlDaWdDQUNJSWF5SUdOZ0lFQWtBZ0NDQUhRUkIyU3dSQUlBb29BZ1FoQ1NBQUlBZzJBZ1FnQ3lBS1FRaEJEQ0FHSUFoSklnWWJhaWdDQURZQ0FDQUpJQWxGSUFZYklRb2dBQ2dDQ0NFR0EwQUNRQ0FHRFFBZ0FDZ0NFQ0lHUVFGcUlRc2dCaTBBQVNFSklBWXRBQUJCL3dGR0JFQWdDVUdRQVU4RVFDQUFJQUFvQWd4QkFXbzJBZ3dnQjBHQS9nTnFJUWRCQ0NFR0RBSUxJQUFnQ3pZQ0VDQUhJQWxCQ1hScUlRZEJCeUVHREFFTElBQWdDellDRUVFSUlRWWdCeUFKUVFoMGFpRUhDeUFBSUFaQkFXc2lCallDQ0NBQUlBZEJBWFFpQnpZQ0FDQUFJQWhCQVhRaUNEWUNCQ0FJUVlDQUFra05BQXNNQVFzZ0FDQUhJQWhCRUhScklnazJBZ0FnQmtHQWdBSnhSUVJBSUFvb0FnUWhCeUFMSUFwQkRFRUlJQVlnQ0VraUNCdHFLQUlBTmdJQUlBZEZJQWNnQ0JzaENpQUFLQUlJSVFjRFFBSkFJQWNOQUNBQUtBSVFJZ2RCQVdvaEN5QUhMUUFCSVFnZ0J5MEFBRUgvQVVZRVFDQUlRWkFCVHdSQUlBQWdBQ2dDREVFQmFqWUNEQ0FKUVlEK0Eyb2hDVUVJSVFjTUFnc2dBQ0FMTmdJUUlBa2dDRUVKZEdvaENVRUhJUWNNQVFzZ0FDQUxOZ0lRUVFnaEJ5QUpJQWhCQ0hScUlRa0xJQUFnQjBFQmF5SUhOZ0lJSUFBZ0NVRUJkQ0lKTmdJQUlBQWdCa0VCZENJR05nSUVJQVpCZ0lBQ1NRMEFDd3dCQ3lBS0tBSUVJUW9MSUFKQkFDQURheUFESUFvZ0QwSFF1d0ZxTFFBQWN5SURHellDQUNBTklBMG9BZ0JCSUNBTWRISTJBZ0FnQVNBQktBSUFJQU5CRTNSQkVISWdESFJ5TmdJQUlBRWdBU2dDQkVFSUlBeDBjallDQkNBRUlBVnlSUVJBSUFGQmZpQUFLQUo4YTBFQ2RHb2lBaUFDS0FJRVFZQ0FBbkkyQWdRZ0FpQUNLQUlBSUFOQkgzUnlRWUNBQkhJMkFnQWdBa0VFYXlJQ0lBSW9BZ0JCZ0lBSWNqWUNBQXNnQkVFRFJ3MEFJQUVnQUNnQ2ZFRUNkR29pQUVFRWFpQUFLQUlFUVFSeU5nSUFJQUFnQUNnQ0RFRUJjallDRENBQUlBQW9BZ2dnQTBFU2RISkJBbkkyQWdnTEM2c0xBUWwvQWtBZ0FTZ0NBQ0FFUVFOc0lnMTJJZ2RCa0lDQUFYRU5BQ0FIUWU4RGNTSUhSUTBBSUFBZ0FFRWNhaUlPSUFBb0Ftd2dCMm90QUFCQkFuUnFJZ3MyQW1nZ0FDQUFLQUlFSUFzb0FnQWlDaWdDQUNJSmF5SUhOZ0lFQWtBZ0NTQUFLQUlBSWdoQkVIWkxCRUFnQ2lnQ0JDRU1JQUFnQ1RZQ0JDQUxJQXBCQ0VFTUlBY2dDVWtpQnh0cUtBSUFOZ0lBSUF3Z0RFVWdCeHNoQ2lBQUtBSUlJUWNEUUFKQUlBY05BQ0FBS0FJUUlnZEJBV29oRENBSExRQUJJUXNnQnkwQUFFSC9BVVlFUUNBTFFaQUJUd1JBSUFBZ0FDZ0NERUVCYWpZQ0RDQUlRWUQrQTJvaENFRUlJUWNNQWdzZ0FDQU1OZ0lRSUFnZ0MwRUpkR29oQ0VFSElRY01BUXNnQUNBTU5nSVFRUWdoQnlBSUlBdEJDSFJxSVFnTElBQWdCMEVCYXlJSE5nSUlJQUFnQ0VFQmRDSUlOZ0lBSUFBZ0NVRUJkQ0lKTmdJRUlBbEJnSUFDU1EwQUN5QUpJUWNNQVFzZ0FDQUlJQWxCRUhScklnZzJBZ0FnQjBHQWdBSnhSUVJBSUFvb0FnUWhEQ0FMSUFwQkRFRUlJQWNnQ1VraUNSdHFLQUlBTmdJQUlBeEZJQXdnQ1JzaENpQUFLQUlJSVFrRFFBSkFJQWtOQUNBQUtBSVFJZ2xCQVdvaERDQUpMUUFCSVFzZ0NTMEFBRUgvQVVZRVFDQUxRWkFCVHdSQUlBQWdBQ2dDREVFQmFqWUNEQ0FJUVlEK0Eyb2hDRUVJSVFrTUFnc2dBQ0FNTmdJUUlBZ2dDMEVKZEdvaENFRUhJUWtNQVFzZ0FDQU1OZ0lRUVFnaENTQUlJQXRCQ0hScUlRZ0xJQUFnQ1VFQmF5SUpOZ0lJSUFBZ0NFRUJkQ0lJTmdJQUlBQWdCMEVCZENJSE5nSUVJQWRCZ0lBQ1NRMEFDd3dCQ3lBS0tBSUVJUW9MQWtBZ0NrVU5BQ0FBSUE0Z0FTZ0NCQ0FOUVJGcWRrRUVjU0FCUVFScklnOG9BZ0FnRFVFVGFuWkJBWEVnQVNnQ0FDSUpJQTFCRUdwMlFjQUFjU0FKSUExMlFhb0JjWElnQ1NBTlFReHFRUTRnQkJ0MlFSQnhjbkp5SWdwQjBMa0JhaTBBQUVFQ2RHb2lERFlDYUNBQUlBY2dEQ2dDQUNJTEtBSUFJZ2xySWdjMkFnUWdDa0hRdXdGcUxRQUFJUTRDUUNBSklBaEJFSFpMQkVBZ0N5Z0NCQ0VLSUFBZ0NUWUNCQ0FNSUF0QkNFRU1JQWNnQ1VraUJ4dHFLQUlBTmdJQUlBb2dDa1VnQnhzaEN5QUFLQUlJSVFjRFFBSkFJQWNOQUNBQUtBSVFJZ2RCQVdvaERDQUhMUUFCSVFvZ0J5MEFBRUgvQVVZRVFDQUtRWkFCVHdSQUlBQWdBQ2dDREVFQmFqWUNEQ0FJUVlEK0Eyb2hDRUVJSVFjTUFnc2dBQ0FNTmdJUUlBZ2dDa0VKZEdvaENFRUhJUWNNQVFzZ0FDQU1OZ0lRUVFnaEJ5QUlJQXBCQ0hScUlRZ0xJQUFnQjBFQmF5SUhOZ0lJSUFBZ0NFRUJkQ0lJTmdJQUlBQWdDVUVCZENJSk5nSUVJQWxCZ0lBQ1NRMEFDd3dCQ3lBQUlBZ2dDVUVRZEdzaUNqWUNBQ0FIUVlDQUFuRkZCRUFnQ3lnQ0JDRUlJQXdnQzBFTVFRZ2dCeUFKU1NJSkcyb29BZ0EyQWdBZ0NFVWdDQ0FKR3lFTElBQW9BZ2doQ0FOQUFrQWdDQTBBSUFBb0FoQWlDRUVCYWlFTUlBZ3RBQUVoQ1NBSUxRQUFRZjhCUmdSQUlBbEJrQUZQQkVBZ0FDQUFLQUlNUVFGcU5nSU1JQXBCZ1A0RGFpRUtRUWdoQ0F3Q0N5QUFJQXcyQWhBZ0NpQUpRUWwwYWlFS1FRY2hDQXdCQ3lBQUlBdzJBaEJCQ0NFSUlBb2dDVUVJZEdvaENnc2dBQ0FJUVFGcklnZzJBZ2dnQUNBS1FRRjBJZ28yQWdBZ0FDQUhRUUYwSWdjMkFnUWdCMEdBZ0FKSkRRQUxEQUVMSUFzb0FnUWhDd3NnQWtFQUlBTnJJQU1nQ3lBT2N5SUNHellDQUNBUElBOG9BZ0JCSUNBTmRISTJBZ0FnQVNBQktBSUFJQUpCRTNSQkVISWdEWFJ5TmdJQUlBRWdBU2dDQkVFSUlBMTBjallDQkNBRUlBWnlSUVJBSUFFZ0JVRUNkR3NpQUNBQUtBSUVRWUNBQW5JMkFnUWdBQ0FBS0FJQUlBSkJIM1J5UVlDQUJISTJBZ0FnQUVFRWF5SUFJQUFvQWdCQmdJQUljallDQUFzZ0JFRURSdzBBSUFFZ0JVRUNkR29pQUNBQUtBSUVRUUZ5TmdJRUlBQWdBQ2dDQUNBQ1FSSjBja0VDY2pZQ0FDQUFRUVJySWdBZ0FDZ0NBRUVFY2pZQ0FBc2dBU0FCS0FJQVFZQ0FnQUVnRFhSeU5nSUFDd3V0QVFBZ0FFSHduUUUyQW1RZ0FFSHduUUUyQW1BZ0FFSHduUUUyQWx3Z0FFSHduUUUyQWxnZ0FFSHduUUUyQWxRZ0FFSHduUUUyQWxBZ0FFSHduUUUyQWt3Z0FFSHduUUUyQWtnZ0FFSHduUUUyQWtRZ0FFSHduUUUyQWtBZ0FFSHduUUUyQWp3Z0FFSHduUUUyQWpnZ0FFSHduUUUyQWpRZ0FFSHduUUUyQWpBZ0FFSHduUUUyQWl3Z0FFSHduUUUyQWlnZ0FFSHduUUUyQWlRZ0FFSHduUUUyQWlBZ0FFSHduUUUyQWh3TGtnWUNDWDhFZmlBQUlBRTJBZ0FnQVAwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTEF3Z2dBQ0FETmdJY0lBQWdBa0VCYXlJRk5nSVlJQUZCQTNFaENnSi9JQUpCQUV3RVFDQUJJUVFnQXd3QkN5QUFJQUZCQVdvaUJEWUNBQ0FCTFFBQUN5RUJRUWdoQnlBQVFRZzJBaEFnQUNBQnJTSU5Od01JSUFBZ0RVTC9BWU1pRGtML0FWRWlDVFlDRkFKQUlBcEJBMFlOQUNBQUlBSkJBbXNpQ0RZQ0dBSi9JQUpCQWtnRVFDQUVJUUVnQXd3QkN5QUFJQVJCQVdvaUFUWUNBQ0FFTFFBQUN5RUVJQUJCRDBFUUlBNUMvd0ZSR3lJSE5nSVFJQUFnQkswaURrTC9BWU1pRDBML0FWRWlDVFlDRkNBQUlBNUNDSVlnRFlRaURUY0RDQ0FLUVFKR0JFQWdBU0VFSUFVaEFpQUlJUVVNQVFzZ0FDQUNRUU5ySWdzMkFoZ2dBQUovSUFKQkEwZ0VRQ0FCSVFZZ0F3d0JDeUFBSUFGQkFXb2lCallDQUNBQkxRQUFDNjBpRGtML0FZTWlFRUwvQVZFaUNUWUNGQ0FBUVFkQkNDQVBRdjhCVVJzZ0Iyb2lBVFlDRUNBQUlBNGdCNjJHSUEyRUlnMDNBd2dnQ2tFQlJnUkFJQVloQkNBQklRY2dDQ0VDSUFzaEJRd0JDeUFBSUFKQkJHc2lCVFlDR0NBQUFuOGdBa0VFU0FSQUlBWWhCQ0FEREFFTElBQWdCa0VCYWlJRU5nSUFJQVl0QUFBTHJTSU9RdjhCZzBML0FWRWlDVFlDRkNBQVFRZEJDQ0FRUXY4QlVSc2dBV29pQnpZQ0VDQUFJQTRnQWEyR0lBMkVJZzAzQXdnZ0N5RUNDd0pBSUFKQkJVNEVRQ0FFS0FJQUlRTWdBQ0FDUVFWck5nSVlJQUFnQkVFRWFqWUNBQXdCQzBFQUlRRkJmMEVBSUFNYklRTWdBa0VDU0EwQUEwQWdBQ0FFUVFGcUlnSTJBZ0FnQkMwQUFDRUVJQUFnQlVFQmF5SUdOZ0lZSUFOQi93RWdBWFJCZjNOeElBUWdBWFJ5SVFNZ0FVRUlhaUVCSUFWQkFVc2hEQ0FDSVFRZ0JpRUZJQXdOQUFzTElBQWdBMEVZZGlJQlFmOEJSallDRkNBQVFRZEJDQ0FKR3lJQ1FRZEJDQ0FEUWY4QmNTSUVRZjhCUmh0cUlnVkJCMEVJSUFOQkNIWkIvd0Z4SWdaQi93RkdHMm9pQ0VFSFFRZ2dBMEVRZGtIL0FYRWlBMEgvQVVZYklBZHFhallDRUNBQUlBWWdBblFnQXlBRmRISWdBU0FJZEhJZ0JIS3RJQWV0aGlBTmhEY0RDQXUyQlFJU2Z3SitBbjhnQUNnQ0hDQUJRWmdCYkdvaUFrR1FBV3NvQWdBZ0FrR1lBV3NvQWdCcklnTWhCU0FDUVl3QmF5Z0NBQ0FDUVpRQmF5Z0NBR3NpQWlFR1FjQUFJQU1nQTBIQUFFOGJJUU5Cd0FBZ0FpQUNRY0FBVHhzaEJBSkFJQVZGRFFBZ0JrVU5BQ0FEUlEwQUlBUkZEUUJCZnlBRWJrRUNkaUFEU1EwQVFRRkJIQkFUSWdJZ0JEWUNEQ0FDSUFNMkFnZ2dBaUFHTmdJRUlBSWdCVFlDQUNBQ0lBU3RJaFFnQnExOFFnRjlJQlNBSWhTbklnUTJBaFFnQWlBRHJTSVZJQVd0ZkVJQmZTQVZnQ0lWcHlJRE5nSVFBa0FnRkVMLy8vLy9ENE1nRlVMLy8vLy9ENE4rUWlDSXB3MEFJQUpCQkNBRElBUnNFQk1pQXpZQ0dDQURSUTBBSUFJTUFnc2dBaEFRQzBFQUN5SUpSUVJBUVFBUEN3SkFJQUVFUUFOQUlBNUJtQUZzSWc4Z0FDZ0NIR29pQlNnQ0dDSUNCRUFnQlVFY2FpRVFJQVVvQWhRaEF5QUZLQUlRSVFSQkFDRUtBMEFnQXlBRWJBUkFJQkFnQ2tFa2JHb2hCa0VBSVFzRFFDQUdLQUlVSUF0QktHeHFJZ2dvQWhRaUFpQUlLQUlRSWdkc0JFQkJBQ0VFQTBBZ0NDZ0NHQ0FFUVFaMGFpSURLQUk4SWhFRVFDQURLQUlNSVFjZ0F5Z0NGQ0VTSUFNb0FoQWhEQ0FES0FJSUloTWdCaWdDQUdzaEF5QUdLQUlRSWcxQkFYRUVRQ0FBS0FJY0lBOXFJZ0pCa0FGcktBSUFJQU5xSUFKQm1BRnJLQUlBYXlFREN5QUhJQVlvQWdScklRSWdEVUVDY1FSQUlBSWdBQ2dDSENBUGFpSU5RWXdCYXlnQ0FHb2dEVUdVQVdzb0FnQnJJUUlMSUFrZ0F5QUNJQU1nRENBVGF5SU1haUFTSUFkcklBSnFJQkZCQVNBTVFRQVFKa1VOQ1NBSUtBSVFJUWNnQ0NnQ0ZDRUNDeUFFUVFGcUlnUWdBaUFIYkVrTkFBc2dCU2dDRUNFRUlBVW9BaFFoQXdzZ0MwRUJhaUlMSUFNZ0JHeEpEUUFMSUFVb0FoZ2hBZ3NnQ2tFQmFpSUtJQUpKRFFBTEN5QU9RUUZxSWc0Z0FVY05BQXNMSUFrUEN5QUpFQ05CQUF2UURBSVFmd1o3SUFBb0FnZ2lDeUFBS0FJRWFpRUhBa0FnQUNnQ0RFVUVRQ0FIUVFKSURRRWdBU2dDQUNBQklBdEJBblJxSWcwb0FnQWlCRUVCYWtFQmRXc2hBeUFBS0FJQUlRWUNRQ0FIUVFSSkJFQWdCQ0VDREFFTElBZEJCR3NpQUVFQmRpSUpRUUZxSVF3Q1FDQUFRUlpKQkVCQkFTRUFEQUVMSUFZZ0FTQUxRUUowYWlJRklBbEJBblFpQW1wQkNHcEpJQVlnQ1VFRGRHcEJDR29pQUNBRlFRUnFTM0VFUUVFQklRQU1BUXNnQmlBQklBSnFRUWhxU1NBQlFRUnFJQUJKY1FSQVFRRWhBQXdCQ3lBTVFmei8vLzhIY1NJRlFRRnlJUUFnQlVFQmRDRUlJQVQ5RVNFU0lBUDlFU0VUL1F3QUFBQUFBZ0FBQUFRQUFBQUdBQUFBSVJaQkFDRUNBMEFnQVNBQ1FRSjBRUVJ5SWdOcS9RQUNBQ0VWSUFNZ0RXcjlBQUlBSVJRZ0JpQUNRUU4wYWlJRElCUDlXZ0lBQXlBRFFRaHFJQlVnRkNBU0lCVDlEUXdORGc4UUVSSVRGQlVXRnhnWkdoc2lGZjJ1QWYwTUFnQUFBQUlBQUFBQ0FBQUFBZ0FBQVAydUFVRUMvYXdCL2JFQkloTDlXZ0lBQUNBRFFSQnFJQkw5V2dJQUFTQURRUmhxSUJMOVdnSUFBaUFHSUJiOURBRUFBQUFCQUFBQUFRQUFBQUVBQUFEOVVDSVgvUnNBUVFKMGFpQVNJQk1nRXYwTkRBME9EeEFSRWhNVUZSWVhHQmthRy8ydUFVRUIvYXdCSUJYOXJnRWlFLzFhQWdBQUlBWWdGLzBiQVVFQ2RHb2dFLzFhQWdBQklBWWdGLzBiQWtFQ2RHb2dFLzFhQWdBQ0lBWWdGLzBiQTBFQ2RHb2dFLzFhQWdBRElCYjlEQWdBQUFBSUFBQUFDQUFBQUFnQUFBRDlyZ0VoRmlBU0lSTWdGQ0VTSUFKQkJHb2lBaUFGUncwQUN5QVMvUnNESVFJZ0UvMGJBeUVESUFVZ0RFWU5BU0FDSVFRTEEwQWdBU0FBUVFKMElnSnFLQUlBSVFrZ0FpQU5haWdDQUNFQ0lBWWdDRUVDZEdvaUJTQUROZ0lBSUFVZ0F5QUpJQUlnQkdwQkFtcEJBblZySWdOcVFRRjFJQVJxTmdJRUlBaEJBbW9oQ0NBQUlBeEhJUkFnQWlFRUlBQkJBV29oQUNBUURRQUxDeUFHSUFoQkFuUnFJQU0yQWdCQmZDRUFJQWRCQVhFRWZ5QUdJQWRCQVdzaUFFRUNkR29nQVNBQVFRRjBhaWdDQUNBQ1FRRnFRUUYxYXlJQU5nSUFJQUFnQTJwQkFYVWhBMEY0QlVGOEN5QUdJQWRCQW5RaUFHcHFJQUlnQTJvMkFnQWdBU0FHSUFBUUVob1BDd0pBQWtBQ1FDQUhRUUZyRGdJQUFRSUxJQUVnQVNnQ0FFRUNiVFlDQUE4TElBQW9BZ0FpQkNBQktBSUFJQUVnQzBFQ2RHb2lBeWdDQUVFQmFrRUJkV3NpQURZQ0JDQUVJQUFnQXlnQ0FHbzJBZ0FnQVNBRUtRSUFOd0lBRHdzZ0IwRURTQTBBSUFBb0FnQWlDaUFCS0FJQUlBRWdDMEVDZEdvaURpZ0NCQ0lFSUE0b0FnQWlBR3BCQW1wQkFuVnJJZ01nQUdvMkFnQkJBU0VJQWtBZ0IwRUNheUlHSUFkQkFYRWlERVVpQUd0QkFra0VRQ0FFSVFJTUFRc2dCeUFBYTBFRWF5SUFRUUYySWdKQkFXb2hEd0pBQWtBZ0FFRVdTUTBBSUFwQkJHb2lCU0FCSUFKQkFuUWlBR3BCQ0dwSklBb2dBa0VEZEdwQkRHb2lBaUFCUVFScVMzRU5BQ0FGSUFBZ0FTQUxRUUowYWlJQWFrRU1ha2tnQUVFSWFpQUNTWEVOQUNBUFFYeHhJZ1ZCQVhJaEFDQUZRUUYwUVFGeUlRZ2dCUDBSSVJNZ0EvMFJJUkpCQUNFQ0EwQWdDaUFDUVFOMGFpSUVJQUVnQWtFQ2RDSURhdjBBQWdRZ0V5QURJQTVxL1FBQ0NDSVQvUTBNRFE0UEVCRVNFeFFWRmhjWUdSb2JJaFVnRS8ydUFmME1BZ0FBQUFJQUFBQUNBQUFBQWdBQUFQMnVBVUVDL2F3Qi9iRUJJaFFnRkNBU0lCVDlEUXdORGc4UUVSSVRGQlVXRnhnWkdodjlyZ0ZCQWYyc0FTQVYvYTRCSWhYOURRUUZCZ2NZR1JvYkNBa0tDeHdkSGgvOUN3SVVJQVFnRWlBVi9RME1EUTRQRUJFU0V3QUJBZ01VRlJZWElCVDlEUUFCQWdNRUJRWUhFQkVTRXd3TkRnLzlDd0lFSUJRaEVpQUNRUVJxSWdJZ0JVY05BQXNnRS8wYkF5RUNJQkw5R3dNaEF5QUZJQTlHRFFJZ0FpRUVEQUVMUVFFaEFBc0RRQ0FCSUFCQkFuUnFLQUlBSVEwZ0RpQUFRUUZxSWdWQkFuUnFLQUlBSVFJZ0NpQUlRUUowYWlJSklBTTJBZ0FnQ1NBRElBMGdBaUFFYWtFQ2FrRUNkV3NpQTJwQkFYVWdCR28yQWdRZ0NFRUNhaUVJSUFBZ0QwY2hFU0FDSVFRZ0JTRUFJQkVOQUFzTElBb2dDRUVDZEdvZ0F6WUNBQUpBSUF4RkJFQWdDaUFHUVFKMGFpQUJJQWRCQVhScVFRUnJLQUlBSUFKQkFXcEJBWFZySWdBZ0EycEJBWFVnQW1vMkFnQU1BUXNnQWlBRGFpRUFDeUFLSUFkQkFuUWlBMnBCQkdzZ0FEWUNBQ0FCSUFvZ0F4QVNHZ3NMb0FjREEzMERld0ovSUFOQkNFOEVRQ0FEUVFOMklRc0RRQ0FCL1FBRUFDRUhJQUFnQVAwQUJBQWlDQ0FDL1FBRUFDSUovUXk4ZExNL3ZIU3pQN3gwc3orOGRMTS8vZVlCL2VRQi9Rc0VBQ0FCSUFnZ0IvME16ekd3UHM4eHNEN1BNYkErenpHd1B2M21BZjNsQVNBSi9RemgwVFkvNGRFMlArSFJOai9oMFRZLy9lWUIvZVVCL1FzRUFDQUNJQWdnQi8wTTVkRGlQK1hRNGovbDBPSS81ZERpUC8zbUFmM2tBZjBMQkFBZ0FmMEFCQkFoQnlBQUlBRDlBQVFRSWdnZ0F2MEFCQkFpQ2YwTXZIU3pQN3gwc3orOGRMTS92SFN6UC8zbUFmM2tBZjBMQkJBZ0FTQUlJQWY5RE04eHNEN1BNYkErenpHd1BzOHhzRDc5NWdIOTVRRWdDZjBNNGRFMlArSFJOai9oMFRZLzRkRTJQLzNtQWYzbEFmMExCQkFnQWlBSUlBZjlET1hRNGovbDBPSS81ZERpUCtYUTRqLzk1Z0g5NUFIOUN3UVFJQUpCSUdvaEFpQUJRU0JxSVFFZ0FFRWdhaUVBSUFwQkFXb2lDaUFMUncwQUN3c0NRQ0FEUVFkeElnTkZEUUFnQVNvQ0FDRUVJQUFnQWlvQ0FDSUdRN3gwc3orVUlBQXFBZ0FpQlpJNEFnQWdBU0FGSUFSRHp6R3d2cFNTSUFaRDRkRTJ2NVNTT0FJQUlBSWdCU0FFUStYUTRqK1VramdDQUNBRFFRRkdEUUFnQVNvQ0JDRUVJQUFnQWlvQ0JDSUdRN3gwc3orVUlBQXFBZ1FpQlpJNEFnUWdBU0FGSUFSRHp6R3d2cFNTSUFaRDRkRTJ2NVNTT0FJRUlBSWdCU0FFUStYUTRqK1VramdDQkNBRFFRSkdEUUFnQVNvQ0NDRUVJQUFnQWlvQ0NDSUdRN3gwc3orVUlBQXFBZ2dpQlpJNEFnZ2dBU0FGSUFSRHp6R3d2cFNTSUFaRDRkRTJ2NVNTT0FJSUlBSWdCU0FFUStYUTRqK1VramdDQ0NBRFFRTkdEUUFnQVNvQ0RDRUVJQUFnQWlvQ0RDSUdRN3gwc3orVUlBQXFBZ3dpQlpJNEFnd2dBU0FGSUFSRHp6R3d2cFNTSUFaRDRkRTJ2NVNTT0FJTUlBSWdCU0FFUStYUTRqK1VramdDRENBRFFRUkdEUUFnQVNvQ0VDRUVJQUFnQWlvQ0VDSUdRN3gwc3orVUlBQXFBaEFpQlpJNEFoQWdBU0FGSUFSRHp6R3d2cFNTSUFaRDRkRTJ2NVNTT0FJUUlBSWdCU0FFUStYUTRqK1VramdDRUNBRFFRVkdEUUFnQVNvQ0ZDRUVJQUFnQWlvQ0ZDSUdRN3gwc3orVUlBQXFBaFFpQlpJNEFoUWdBU0FGSUFSRHp6R3d2cFNTSUFaRDRkRTJ2NVNTT0FJVUlBSWdCU0FFUStYUTRqK1VramdDRkNBRFFRWkdEUUFnQVNvQ0dDRUVJQUFnQWlvQ0dDSUdRN3gwc3orVUlBQXFBaGdpQlpJNEFoZ2dBU0FGSUFSRHp6R3d2cFNTSUFaRDRkRTJ2NVNTT0FJWUlBSWdCU0FFUStYUTRqK1VramdDR0FzTDRBRUNCbjhEZXdKQUlBTkZEUUFnQTBFRVR3UkFJQU5CZkhFaEJnTkFJQUFnQkVFQ2RDSUZhaUlISUFmOUFBSUFJQUlnQldvaUIvMEFBZ0FpQ3lBQklBVnFJZ1g5QUFJQUlnejlyZ0ZCQXYyc0FmMnhBU0lLSUF2OXJnSDlDd0lBSUFVZ0N2MExBZ0FnQnlBS0lBejlyZ0g5Q3dJQUlBUkJCR29pQkNBR1J3MEFDeUFESUFaR0RRRUxBMEFnQUNBR1FRSjBJZ1JxSWdVZ0JTZ0NBQ0FDSUFScUlnVW9BZ0FpQnlBQklBUnFJZ2dvQWdBaUNXcEJBblZySWdRZ0IybzJBZ0FnQ0NBRU5nSUFJQVVnQkNBSmFqWUNBQ0FHUVFGcUlnWWdBMGNOQUFzTEM5MEJBUVIvSXdCQmdBRnJJZ1lrQUNBR0lRVUNRQ0FCS0FJTUlBSkJCSFJxSWdJb0FnQWlCRVVFUUNBQ0lRRU1BUXNEUUNBRklBSTJBZ0FnQlVFRWFpRUZJQVFpQVNJQ0tBSUFJZ1FOQUFzTFFRQWhCQU5BSUFFb0FnZ2lBaUFFU0FSQUlBRWdCRFlDQ0NBRUlRSUxBa0FnQWlBRFRnMEFBMEFnQWlBQktBSUVUZzBCQWtBZ0FFRUJFQjhFUUNBQklBSTJBZ1FNQVFzZ0FrRUJhaUVDQ3lBQ0lBTklEUUFMQ3lBQklBSTJBZ2dnQlNBR1J3UkFJQVZCQkdzaUJTZ0NBQ0VCSUFJaEJBd0JDd3NnQVNnQ0JDRUhJQVpCZ0FGcUpBQWdCeUFEU0F2OUJnRUxmeU1BUVlBQ2F5SUtKQUFDUUNBQVJRUkFRUUFoQUF3QkN3SkFJQUVnQUNnQ0FFWUVRQ0FBS0FJRUlBSkdEUUVMSUFBZ0FqWUNCQ0FBSUFFMkFnQWdDaUFDTmdJQUlBb2dBVFlDZ0FFZ0FpRUVJQUVoQlFOQUlBb2dCeUlNUVFGcUlnZEJBblFpQ0dvZ0JFRUJha0VDYlNJSk5nSUFJQXBCZ0FGcUlBaHFJQVZCQVdwQkFtMGlDRFlDQUNBR0lBUWdCV3dpQzJvaEJpQUpJUVFnQ0NFRklBdEJBVXNOQUFzZ0FDQUdOZ0lJQWtBQ1FBSkFBa0FnQmtVRVFDQUFLQUlNSWdSRkRRSWdBRUVNYWlFRkRBRUxJQVpCQkhRaUJDQUFLQUlRVFEwRElBQW9BZ3dnQkJBWElnRU5BaUFEUVFGQm1qRkJBQkFQSUFCQkRHb2lCU2dDQUNJRVJRMEJDeUFFRUJBZ0JVRUFOZ0lBQ3lBQUVCQkJBQ0VBREFNTElBQWdBVFlDRENBQklBQW9BaEFpQW1wQkFDQUVJQUpyRUJVYUlBQWdCRFlDRUNBQUtBSUVJUUlnQUNnQ0FDRUJDeUFBS0FJTUlRVWdEQVJBUVFBaEF5QUZJQUVnQW14QkJIUnFJZ1FoQmdOQUFrQWdDaUFEUVFKMElnRnFLQUlBSWdoQkFFd05BQ0FJUVFGcklRdEJBQ0VKQWtBQ1FDQUtRWUFCYWlBQmFpZ0NBQ0lDUVFCTUJFQWdDRUVCY1NFTlFRQWhCeUFJUVFGSERRRWdCaUVCREFJTEEwQWdCaUVCSUFJaEJnTkFBa0FnQlNBRU5nSUFJQVpCQVVZRVFDQUZRUkJxSVFVZ0JFRVFhaUVFREFFTElBVWdCRFlDRUNBRVFSQnFJUVFnQlVFZ2FpRUZJQVpCQWtvaERpQUdRUUpySVFZZ0RnMEJDd3NnQkNBQklBSkJCSFJxSUFrZ0NTQUxSbkpCQVhFaUJ4c2hCaUFFSUFFZ0J4c2hCQ0FKUVFGcUlna2dDRWNOQUFzTUFnc2dDRUgrLy8vL0IzRWhDQU5BSUFjZ0MwWWhBU0FIUVFKcUlRY2dCQ0FHSUFFYklnUWhCaUFFSVFFZ0NVRUNhaUlKSUFoSERRQUxDeUFOUlFSQUlBUWhCZ3dCQ3lBRUlBRWdBa0VFZEdvZ0J5QUhJQXRHY2tFQmNTSUNHeUVHSUFRZ0FTQUNHeUVFQ3lBRFFRRnFJZ01nREVjTkFBc0xJQVZCQURZQ0FBc2dBQ2dDQ0NJQlJRMEFJQUFvQWd3aEJDQUJRUVJQQkVBZ0FVRjhjU0VDUVFBaEJRTkFJQVJCQURZQ1BDQUVRdWNITndJMElBUkJBRFlDTENBRVF1Y0hOd0lrSUFSQkFEWUNIQ0FFUXVjSE53SVVJQVJCQURZQ0RDQUVRdWNITndJRUlBUkJRR3NoQkNBRlFRUnFJZ1VnQWtjTkFBc0xJQUZCQTNFaUFVVU5BRUVBSVFVRFFDQUVRUUEyQWd3Z0JFTG5CemNDQkNBRVFSQnFJUVFnQlVFQmFpSUZJQUZIRFFBTEN5QUtRWUFDYWlRQUlBQUxzUUVCQTM4Q1FDQUFSUTBBSUFBb0FnZ2lBVVVOQUNBQUtBSU1JUUFnQVVFRVR3UkFJQUZCZkhFaEF3TkFJQUJCQURZQ1BDQUFRdWNITndJMElBQkJBRFlDTENBQVF1Y0hOd0lrSUFCQkFEWUNIQ0FBUXVjSE53SVVJQUJCQURZQ0RDQUFRdWNITndJRUlBQkJRR3NoQUNBQ1FRUnFJZ0lnQTBjTkFBc0xJQUZCQTNFaUFVVU5BRUVBSVFJRFFDQUFRUUEyQWd3Z0FFTG5CemNDQkNBQVFSQnFJUUFnQWtFQmFpSUNJQUZIRFFBTEN3djdCUUVRZnlNQVFZQUNheUlJSkFBQ2YwRUJRUlFRRXlJR1JRUkFJQUpCQVVIME1FRUFFQTlCQUF3QkN5QUdJQUUyQWdRZ0JpQUFOZ0lBSUFnZ0FUWUNBQ0FJSUFBMkFvQUJBMEFnQ0NBRklnMUJBV29pQlVFQ2RDSUhhaUFCUVFGcVFRSnRJZ00yQWdBZ0NFR0FBV29nQjJvZ0FFRUJha0VDYlNJSE5nSUFJQVFnQUNBQmJDSUphaUVFSUFNaEFTQUhJUUFnQ1VFQlN3MEFDeUFHSUFRMkFnZ2dCRVVFUUNBR0VCQkJBQXdCQ3lBR0lBUkJFQkFUSWdNMkFnd2dBMFVFUUNBQ1FRRkIyaHBCQUJBUElBWVFFRUVBREFFTElBWWdCaWdDQ0NJTFFRUjBOZ0lRSUFNaEFDQU5CRUFnQXlBR0tBSUVJQVlvQWdCc1FRUjBhaUlFSVFFRFFBSkFJQWdnRGtFQ2RDSUNhaWdDQUNJSlFRQk1EUUFnQ1VFQmF5RU1RUUFoQndKQUlBaEJnQUZxSUFKcUtBSUFJZ0pCQUV3RVFFRUFJUVVnQ1VFQlJ3UkFJQWxCL3YvLy93ZHhJUW9EUUNBRklBeEdJUThnQlVFQ2FpRUZJQUVnQkNBUEd5SUVJUUVnQjBFQ2FpSUhJQXBIRFFBTEN5QUpRUUZ4RFFFZ0JDRUJEQUlMQTBBZ0JDRUZJQUloQkFOQUFrQWdBQ0FCTmdJQUlBUkJBVVlFUUNBQVFSQnFJUUFnQVVFUWFpRUJEQUVMSUFBZ0FUWUNFQ0FCUVJCcUlRRWdBRUVnYWlFQUlBUkJBa29oRUNBRVFRSnJJUVFnRUEwQkN3c2dBU0FGSUFKQkJIUnFJQWNnQnlBTVJuSkJBWEVpQ2hzaEJDQUJJQVVnQ2hzaEFTQUhRUUZxSWdjZ0NVY05BQXNNQVFzZ0FTQUVJQUpCQkhScUlBVWdCU0FNUm5KQkFYRWlCUnNoRVNBQklBUWdCUnNoQVNBUklRUUxJQTVCQVdvaURpQU5SdzBBQ3dzZ0FFRUFOZ0lBQWtBZ0MwVU5BQ0FMUVFSUEJFQWdDMEY4Y1NFQVFRQWhBUU5BSUFOQkFEWUNQQ0FEUXVjSE53STBJQU5CQURZQ0xDQURRdWNITndJa0lBTkJBRFlDSENBRFF1Y0hOd0lVSUFOQkFEWUNEQ0FEUXVjSE53SUVJQU5CUUdzaEF5QUJRUVJxSWdFZ0FFY05BQXNMSUF0QkEzRWlBRVVOQUVFQUlRRURRQ0FEUVFBMkFnd2dBMExuQnpjQ0JDQURRUkJxSVFNZ0FVRUJhaUlCSUFCSERRQUxDeUFHQ3lFU0lBaEJnQUpxSkFBZ0VndFRBUUYvQW44Z0FDMEFERUgvQVVZRVFDQUFRb0QrZzREd0FEY0NERUVBSUFBb0FnZ2lBU0FBS0FJRVR3MEJHaUFBSUFGQkFXbzJBZ2dnQUNBQkxRQUFRWUQrQTNJMkFnd0xJQUJCQURZQ0VFRUJDd3QrQWdGL0FYNGdBTDBpQTBJMGlLZEIvdzl4SWdKQi93OUhCSHdnQWtVRVFDQUJJQUJFQUFBQUFBQUFBQUJoQkg5QkFBVWdBRVFBQUFBQUFBRHdRNklnQVJCbElRQWdBU2dDQUVGQWFnczJBZ0FnQUE4TElBRWdBa0grQjJzMkFnQWdBMEwvLy8vLy8vLy9oNEIvZzBLQWdJQ0FnSUNBOEQrRXZ3VWdBQXNMU1FFQmZ3SkFRUUZCTEJBVElnRUVRQ0FCUVFBMkFoQUNRQ0FBUVFCTUJFQWdBVUVCUVFnUUV5SUFOZ0lrSUFCRkRRRU1Bd3NnQVVFQU5nSU1DeUFCRUJBTFFRQWhBUXNnQVF1UkFnQWdBRVVFUUVFQUR3c0Nmd0pBSUFGQi93Qk5EUUFDUUVHVTBBRW9BZ0FvQWdCRkJFQWdBVUdBZjNGQmdMOERSZzBDREFFTElBRkIvdzlOQkVBZ0FDQUJRVDl4UVlBQmNqb0FBU0FBSUFGQkJuWkJ3QUZ5T2dBQVFRSU1Bd3NnQVVHQVFIRkJnTUFEUnlBQlFZQ3dBMDl4UlFSQUlBQWdBVUUvY1VHQUFYSTZBQUlnQUNBQlFReDJRZUFCY2pvQUFDQUFJQUZCQm5aQlAzRkJnQUZ5T2dBQlFRTU1Bd3NnQVVHQWdBUnJRZi8vUDAwRVFDQUFJQUZCUDNGQmdBRnlPZ0FESUFBZ0FVRVNka0h3QVhJNkFBQWdBQ0FCUVFaMlFUOXhRWUFCY2pvQUFpQUFJQUZCREhaQlAzRkJnQUZ5T2dBQlFRUU1Bd3NMUVpUSEFVRVpOZ0lBUVg4TUFRc2dBQ0FCT2dBQVFRRUxDN3dDQUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBVUVKYXc0U0FBZ0pDZ2dKQVFJREJBb0pDZ29JQ1FVR0J3c2dBaUFDS0FJQUlnRkJCR28yQWdBZ0FDQUJLQUlBTmdJQUR3c2dBaUFDS0FJQUlnRkJCR28yQWdBZ0FDQUJNZ0VBTndNQUR3c2dBaUFDS0FJQUlnRkJCR28yQWdBZ0FDQUJNd0VBTndNQUR3c2dBaUFDS0FJQUlnRkJCR28yQWdBZ0FDQUJNQUFBTndNQUR3c2dBaUFDS0FJQUlnRkJCR28yQWdBZ0FDQUJNUUFBTndNQUR3c2dBaUFDS0FJQVFRZHFRWGh4SWdGQkNHbzJBZ0FnQUNBQkt3TUFPUU1BRHdzZ0FDQUNJQU1SQXdBTER3c2dBaUFDS0FJQUlnRkJCR28yQWdBZ0FDQUJOQUlBTndNQUR3c2dBaUFDS0FJQUlnRkJCR28yQWdBZ0FDQUJOUUlBTndNQUR3c2dBaUFDS0FJQVFRZHFRWGh4SWdGQkNHbzJBZ0FnQUNBQktRTUFOd01BQzNNQkJuOGdBQ2dDQUNJRExBQUFRVEJySWdGQkNVc0VRRUVBRHdzRFFFRi9JUVFnQWtITW1iUG1BRTBFUUVGL0lBRWdBa0VLYkNJRmFpQUJJQVZCLy8vLy93ZHpTeHNoQkFzZ0FDQURRUUZxSWdVMkFnQWdBeXdBQVNFR0lBUWhBaUFGSVFNZ0JrRXdheUlCUVFwSkRRQUxJQUlMdEJRQ0ZYOEJmaU1BUVVCcUlnZ2tBQ0FJSUFFMkFqd2dDRUVuYWlFV0lBaEJLR29oRVFKQUFrQUNRQUpBQTBCQkFDRUhBMEFnQVNFTklBY2dEa0gvLy8vL0IzTktEUUlnQnlBT2FpRU9Ba0FDUUFKQUFrQWdBU0lITFFBQUlnc0VRQU5BQWtBQ1FDQUxRZjhCY1NJQlJRUkFJQWNoQVF3QkN5QUJRU1ZIRFFFZ0J5RUxBMEFnQ3kwQUFVRWxSd1JBSUFzaEFRd0NDeUFIUVFGcUlRY2dDeTBBQWlFWklBdEJBbW9pQVNFTElCbEJKVVlOQUFzTElBY2dEV3NpQnlBT1FmLy8vLzhIY3lJWFNnMEpJQUFFUUNBQUlBMGdCeEFaQ3lBSERRY2dDQ0FCTmdJOElBRkJBV29oQjBGL0lSQUNRQ0FCTEFBQlFUQnJJZ2xCQ1VzTkFDQUJMUUFDUVNSSERRQWdBVUVEYWlFSFFRRWhFaUFKSVJBTElBZ2dCellDUEVFQUlRd0NRQ0FITEFBQUlndEJJR3NpQVVFZlN3UkFJQWNoQ1F3QkN5QUhJUWxCQVNBQmRDSUJRWW5SQkhGRkRRQURRQ0FJSUFkQkFXb2lDVFlDUENBQklBeHlJUXdnQnl3QUFTSUxRU0JySWdGQklFOE5BU0FKSVFkQkFTQUJkQ0lCUVluUkJIRU5BQXNMQWtBZ0MwRXFSZ1JBQW44Q1FDQUpMQUFCUVRCcklnRkJDVXNOQUNBSkxRQUNRU1JIRFFBQ2Z5QUFSUVJBSUFRZ0FVRUNkR3BCQ2pZQ0FFRUFEQUVMSUFNZ0FVRURkR29vQWdBTElROGdDVUVEYWlFQlFRRU1BUXNnRWcwR0lBbEJBV29oQVNBQVJRUkFJQWdnQVRZQ1BFRUFJUkpCQUNFUERBTUxJQUlnQWlnQ0FDSUhRUVJxTmdJQUlBY29BZ0FoRDBFQUN5RVNJQWdnQVRZQ1BDQVBRUUJPRFFGQkFDQVBheUVQSUF4QmdNQUFjaUVNREFFTElBaEJQR29RYVNJUFFRQklEUW9nQ0NnQ1BDRUJDMEVBSVFkQmZ5RUtBbjlCQUNBQkxRQUFRUzVIRFFBYUlBRXRBQUZCS2tZRVFBSi9Ba0FnQVN3QUFrRXdheUlKUVFsTERRQWdBUzBBQTBFa1J3MEFJQUZCQkdvaEFRSi9JQUJGQkVBZ0JDQUpRUUowYWtFS05nSUFRUUFNQVFzZ0F5QUpRUU4wYWlnQ0FBc01BUXNnRWcwR0lBRkJBbW9oQVVFQUlBQkZEUUFhSUFJZ0FpZ0NBQ0lKUVFScU5nSUFJQWtvQWdBTElRb2dDQ0FCTmdJOElBcEJBRTRNQVFzZ0NDQUJRUUZxTmdJOElBaEJQR29RYVNFS0lBZ29BandoQVVFQkN5RVRBMEFnQnlFVVFSd2hDU0FCSWhnc0FBQWlCMEg3QUd0QlJra05DeUFCUVFGcUlRRWdCeUFVUVRwc2FrRy93QUZxTFFBQUlnZEJBV3RCQ0VrTkFBc2dDQ0FCTmdJOEFrQWdCMEViUndSQUlBZEZEUXdnRUVFQVRnUkFJQUJGQkVBZ0JDQVFRUUowYWlBSE5nSUFEQXdMSUFnZ0F5QVFRUU4wYWlrREFEY0RNQXdDQ3lBQVJRMElJQWhCTUdvZ0J5QUNJQVlRYUF3QkN5QVFRUUJPRFF0QkFDRUhJQUJGRFFnTElBQXRBQUJCSUhFTkN5QU1RZi8vZTNFaUN5QU1JQXhCZ01BQWNSc2hERUVBSVJCQnNBZ2hGU0FSSVFrQ1FBSkFBbjhDUUFKQUFrQUNRQUpBQWtBQ2Z3SkFBa0FDUUFKQUFrQUNRQUpBSUJnc0FBQWlCMEZUY1NBSElBZEJEM0ZCQTBZYklBY2dGQnNpQjBIWUFHc09JUVFXRmhZV0ZoWVdGaEFXQ1FZUUVCQVdCaFlXRmhZQ0JRTVdGZ29XQVJZV0JBQUxBa0FnQjBIQkFHc09CeEFXQ3hZUUVCQUFDeUFIUWRNQVJnMExEQlVMSUFncEF6QWhIRUd3Q0F3RkMwRUFJUWNDUUFKQUFrQUNRQUpBQWtBQ1FDQVVRZjhCY1E0SUFBRUNBd1FjQlFZY0N5QUlLQUl3SUE0MkFnQU1Hd3NnQ0NnQ01DQU9OZ0lBREJvTElBZ29BakFnRHF3M0F3QU1HUXNnQ0NnQ01DQU9Pd0VBREJnTElBZ29BakFnRGpvQUFBd1hDeUFJS0FJd0lBNDJBZ0FNRmdzZ0NDZ0NNQ0FPckRjREFBd1ZDMEVJSUFvZ0NrRUlUUnNoQ2lBTVFRaHlJUXhCK0FBaEJ3c2dFU0VCSUFncEF6QWlIRUlBVWdSQUlBZEJJSEVoRFFOQUlBRkJBV3NpQVNBY3AwRVBjVUhReEFGcUxRQUFJQTF5T2dBQUlCeENEMVloR2lBY1FnU0lJUndnR2cwQUN3c2dBU0VOSUFncEF6QlFEUU1nREVFSWNVVU5BeUFIUVFSMlFiQUlhaUVWUVFJaEVBd0RDeUFSSVFFZ0NDa0RNQ0ljUWdCU0JFQURRQ0FCUVFGcklnRWdIS2RCQjNGQk1ISTZBQUFnSEVJSFZpRWJJQnhDQTRnaEhDQWJEUUFMQ3lBQklRMGdERUVJY1VVTkFpQUtJQkVnQVdzaUFVRUJhaUFCSUFwSUd5RUtEQUlMSUFncEF6QWlIRUlBVXdSQUlBaENBQ0FjZlNJY053TXdRUUVoRUVHd0NBd0JDeUFNUVlBUWNRUkFRUUVoRUVHeENBd0JDMEd5Q0VHd0NDQU1RUUZ4SWhBYkN5RVZJQndnRVJBcUlRMExJQk1nQ2tFQVNIRU5FU0FNUWYvL2UzRWdEQ0FUR3lFTUFrQWdDQ2tETUNJY1FnQlNEUUFnQ2cwQUlCRWhEVUVBSVFvTURnc2dDaUFjVUNBUklBMXJhaUlCSUFFZ0NrZ2JJUW9NRFFzZ0NDa0RNQ0VjREFzTEFuOUIvLy8vL3djZ0NpQUtRZi8vLy84SFR4c2lEQ0lIUVFCSElRa0NRQUpBQWtBZ0NDZ0NNQ0lCUVlRTUlBRWJJZzBpQVVFRGNVVU5BQ0FIUlEwQUEwQWdBUzBBQUVVTkFpQUhRUUZySWdkQkFFY2hDU0FCUVFGcUlnRkJBM0ZGRFFFZ0J3MEFDd3NnQ1VVTkFRSkFJQUV0QUFCRkRRQWdCMEVFU1EwQUEwQkJnSUtFQ0NBQktBSUFJZ2xySUFseVFZQ0Jnb1I0Y1VHQWdZS0VlRWNOQWlBQlFRUnFJUUVnQjBFRWF5SUhRUU5MRFFBTEN5QUhSUTBCQ3dOQUlBRWdBUzBBQUVVTkFob2dBVUVCYWlFQklBZEJBV3NpQncwQUN3dEJBQXNpQVNBTmF5QU1JQUViSWdFZ0RXb2hDU0FLUVFCT0JFQWdDeUVNSUFFaENnd01DeUFMSVF3Z0FTRUtJQWt0QUFBTkR3d0xDeUFJS1FNd0loeENBRklOQVVJQUlSd01DUXNnQ2dSQUlBZ29BakFNQWd0QkFDRUhJQUJCSUNBUFFRQWdEQkFjREFJTElBaEJBRFlDRENBSUlCdytBZ2dnQ0NBSVFRaHFJZ2MyQWpCQmZ5RUtJQWNMSVF0QkFDRUhBMEFDUUNBTEtBSUFJZzFGRFFBZ0NFRUVhaUFORUdjaURVRUFTQTBQSUEwZ0NpQUhhMHNOQUNBTFFRUnFJUXNnQnlBTmFpSUhJQXBKRFFFTEMwRTlJUWtnQjBFQVNBME1JQUJCSUNBUElBY2dEQkFjSUFkRkJFQkJBQ0VIREFFTFFRQWhDU0FJS0FJd0lRc0RRQ0FMS0FJQUlnMUZEUUVnQ0VFRWFpSUtJQTBRWnlJTklBbHFJZ2tnQjBzTkFTQUFJQW9nRFJBWklBdEJCR29oQ3lBSElBbExEUUFMQ3lBQVFTQWdEeUFISUF4QmdNQUFjeEFjSUE4Z0J5QUhJQTlJR3lFSERBZ0xJQk1nQ2tFQVNIRU5DVUU5SVFrZ0FDQUlLd013SUE4Z0NpQU1JQWNnQlJFVEFDSUhRUUJPRFFjTUNnc2dCeTBBQVNFTElBZEJBV29oQnd3QUN3QUxJQUFOQ1NBU1JRMERRUUVoQndOQUlBUWdCMEVDZEdvb0FnQWlBQVJBSUFNZ0IwRURkR29nQUNBQ0lBWVFhRUVCSVE0Z0IwRUJhaUlIUVFwSERRRU1Dd3NMUVFFaERpQUhRUXBQRFFrRFFDQUVJQWRCQW5ScUtBSUFEUUVnQjBFQmFpSUhRUXBIRFFBTERBa0xRUndoQ1F3R0N5QUlJQnc4QUNkQkFTRUtJQlloRFNBTElRd0xJQW9nQ1NBTmF5SUxJQW9nQzBvYklnb2dFRUgvLy8vL0IzTktEUU5CUFNFSklBOGdDaUFRYWlJQklBRWdEMGdiSWdjZ0Ywb05CQ0FBUVNBZ0J5QUJJQXdRSENBQUlCVWdFQkFaSUFCQk1DQUhJQUVnREVHQWdBUnpFQndnQUVFd0lBb2dDMEVBRUJ3Z0FDQU5JQXNRR1NBQVFTQWdCeUFCSUF4QmdNQUFjeEFjSUFnb0Fqd2hBUXdCQ3dzTFFRQWhEZ3dEQzBFOUlRa0xRWlRIQVNBSk5nSUFDMEYvSVE0TElBaEJRR3NrQUNBT0M2Z0NBUVIvSXdCQjBBRnJJZ1VrQUNBRklBSTJBc3dCSUFWQm9BRnFJZ0pCQUVFb0VCVWFJQVVnQlNnQ3pBRTJBc2dCQWtCQkFDQUJJQVZCeUFGcUlBVkIwQUJxSUFJZ0F5QUVFR3BCQUVnTkFDQUFLQUpNUVFCSUlRZ2dBQ0FBS0FJQUlnZEJYM0UyQWdBQ2Z3SkFBa0FnQUNnQ01FVUVRQ0FBUWRBQU5nSXdJQUJCQURZQ0hDQUFRZ0EzQXhBZ0FDZ0NMQ0VHSUFBZ0JUWUNMQXdCQ3lBQUtBSVFEUUVMUVg4Z0FCQStEUUVhQ3lBQUlBRWdCVUhJQVdvZ0JVSFFBR29nQlVHZ0FXb2dBeUFFRUdvTElRRWdCZ1IvSUFCQkFFRUFJQUFvQWlRUkFBQWFJQUJCQURZQ01DQUFJQVkyQWl3Z0FFRUFOZ0ljSUFBb0FoUWFJQUJDQURjREVFRUFCU0FCQ3hvZ0FDQUFLQUlBSUFkQklIRnlOZ0lBSUFnTkFBc2dCVUhRQVdva0FBc25BUUYvUVJ3aEF5QUJRUU54Qkg5QkhBVWdBQ0FCSUFJUUpTSUFOZ0lBUVFCQk1DQUFHd3NML1FNQkJYOENmMEhneEFFb0FnQWlBaUFBUVFkcVFYaHhJZ0ZCQjJwQmVIRWlBMm9oQUFKQUlBTkJBQ0FBSUFKTkcwVUVRQ0FBUHdCQkVIUk5EUUVnQUJBS0RRRUxRWlRIQVVFd05nSUFRWDhNQVF0QjRNUUJJQUEyQWdBZ0Fnc2lBa0YvUndSQUlBRWdBbW9pQUVFRWEwRVFOZ0lBSUFCQkVHc2lBMEVRTmdJQUFrQUNmMEdnendFb0FnQWlBUVIvSUFFb0FnZ0ZRUUFMSUFKR0JFQWdBaUFDUVFScktBSUFRWDV4YXlJRVFRUnJLQUlBSVFVZ0FTQUFOZ0lJSUFRZ0JVRitjV3NpQUNBQUtBSUFha0VFYXkwQUFFRUJjUVJBSUFBb0FnUWlBU0FBS0FJSUlnUTJBZ2dnQkNBQk5nSUVJQUFnQXlBQWF5SUJOZ0lBREFNTElBSkJFR3NNQVFzZ0FrRVFOZ0lBSUFJZ0FEWUNDQ0FDSUFFMkFnUWdBa0VRTmdJTVFhRFBBU0FDTmdJQUlBSkJFR29MSWdBZ0F5QUFheUlCTmdJQUN5QUFJQUZCZkhGcVFRUnJJQUZCQVhJMkFnQWdBQUovSUFBb0FnQkJDR3NpQVVIL0FFMEVRQ0FCUVFOMlFRRnJEQUVMSUFGQkhTQUJaeUlEYTNaQkJITWdBMEVDZEd0QjdnQnFJQUZCL3g5TkRRQWFRVDhnQVVFZUlBTnJka0VDY3lBRFFRRjBhMEhIQUdvaUFTQUJRVDlQR3dzaUFVRUVkQ0lEUWFESEFXbzJBZ1FnQUNBRFFhakhBV29pQXlnQ0FEWUNDQ0FESUFBMkFnQWdBQ2dDQ0NBQU5nSUVRYWpQQVVHb3p3RXBBd0JDQVNBQnJZYUVOd01BQ3lBQ1FYOUhDNzBCQVFKL0FrQWdBQ2dDVENJQlFRQk9CRUFnQVVVTkFVSE16d0VvQWdBZ0FVSC8vLy8vQTNGSERRRUxBa0FnQUNnQ1VFRUtSZzBBSUFBb0FoUWlBU0FBS0FJUVJnMEFJQUFnQVVFQmFqWUNGQ0FCUVFvNkFBQVBDeUFBRUc4UEN5QUFRY3dBYWlJQklBRW9BZ0FpQWtILy8vLy9BeUFDR3pZQ0FBSkFBa0FnQUNnQ1VFRUtSZzBBSUFBb0FoUWlBaUFBS0FJUVJnMEFJQUFnQWtFQmFqWUNGQ0FDUVFvNkFBQU1BUXNnQUJCdkN5QUJLQUlBR2lBQlFRQTJBZ0FMZkFFQ2Z5TUFRUkJySWdFa0FDQUJRUW82QUE4Q1FBSkFJQUFvQWhBaUFnUi9JQUlGSUFBUVBnMENJQUFvQWhBTElBQW9BaFFpQWtZTkFDQUFLQUpRUVFwR0RRQWdBQ0FDUVFGcU5nSVVJQUpCQ2pvQUFBd0JDeUFBSUFGQkQycEJBU0FBS0FJa0VRQUFRUUZIRFFBZ0FTMEFEeG9MSUFGQkVHb2tBQXV3QWdFQ2Z5QUFCRUFnQUNnQ0FCQTRJQUJCQURZQ0FDQUFLQUpJSWdFRVFDQUJFQkFnQUVFQU5nSklDeUFBS0FKRUlnRUVRQ0FCRUJBZ0FFRUFOZ0pFQ3lBQUtBSnNJZ0VFUUNBQkVCQWdBRUVBTmdKc0N5QUFLQUowSWdFRVFDQUJLQUlBSWdJRVFDQUNFQkFnQUNnQ2RDSUJRUUEyQWdBTElBRVFFQ0FBUVFBMkFuUUxJQUFvQW5naUFRUkFJQUVvQWd3aUFnUkFJQUlRRUNBQUtBSjRJZ0ZCQURZQ0RBc2dBU2dDQkNJQ0JFQWdBaEFRSUFBb0FuZ2lBVUVBTmdJRUN5QUJLQUlJSWdJRVFDQUNFQkFnQUNnQ2VDSUJRUUEyQWdnTElBRW9BZ0FpQWdSQUlBSVFFQ0FBS0FKNElnRkJBRFlDQUFzZ0FSQVFJQUJCQURZQ2VBc2dBQ2dDQkNJQkJFQWdBUkF5SUFCQkFEWUNCQXNnQUNnQ0NDSUJCRUFnQVJBeUlBQkJBRFlDQ0FzZ0FCQVFDd3VMR3dJZWZ3VjdJd0JCOEFGcklna2tBRUVCSVE0Q1FDQUFLQUlBS0FJOERRQWdBQ2dDZ0FFTkFBSkFBa0FnQUNnQ2RDSUlSUVJBSUFBb0FuZ2hCQXdCQ3lBQktBSVFJUU1nQ0M4QkJDRUdBa0FnQUNnQ2VDSUVSUTBBSUFRb0FneEZEUUFnQkMwQUVpRURDd0pBSUFZRVFDQUlLQUlBSVFnRFFDQUlJQVZCQm14cUlnb3ZBUUFpQnlBRFR3UkFJQWtnQXpZQ3RBRWdDU0FITmdLd0FTQUNRUUZCb09ZQUlBbEJzQUZxRUE5QkFDRU9EQVlMQWtBZ0NpOEJCQ0lLUlEwQUlBcEIvLzhEUmcwQUlBcEJBV3NpQ2lBRFNRMEFJQWtnQXpZQ3BBRWdDU0FLTmdLZ0FTQUNRUUZCb09ZQUlBbEJvQUZxRUE5QkFDRU9EQVlMSUFWQkFXb2lCU0FHUncwQUN3d0JDeUFERFFJTUFRc0RRQ0FEUVFGcklRTkJBQ0VGQTBBZ0NDQUZRUVpzYWk4QkFDQURSd1JBSUFWQkFXb2lCU0FHUncwQkRBUUxDeUFERFFBTEN3SkFJQVJGRFFBZ0JDZ0NEQ0lLUlEwQUFrQUNRQ0FFTFFBU0lnZ0VRRUVBSVFWQkFTRUhBMEFnQVNnQ0VDSURJQW9nQlVFQ2RHb3ZBUUFpQkUwRVFDQUpJQU0yQXBRQklBa2dCRFlDa0FFZ0FrRUJRYURtQUNBSlFaQUJhaEFQUVFBaEJ3c2dCVUVCYWlJRklBaEhEUUFMSUFoQkJCQVRJZ05GRFFGQkFDRUZBMEFDUUNBS0lBVkJBblJxSWdRdEFBSWlCa0VDVHdSQUlBa2dCallDUkNBSklBVTJBa0FnQWtFQlFjdlpBQ0FKUVVCckVBOUJBQ0VIREFFTElBZ2dCQzBBQXlJRVRRUkFJQWtnQkRZQ2dBRWdBa0VCUVpQWkFDQUpRWUFCYWhBUFFRQWhCd3dCQ3lBRElBUkJBblJxSVFzQ1FDQUdRUUZISWd3TkFDQUxLQUlBUlEwQUlBa2dCRFlDVUNBQ1FRRkJ2TlVBSUFsQjBBQnFFQTlCQUNFSERBRUxBa0FnQmcwQUlBUkZEUUFnQ1NBRU5nSmtJQWtnQlRZQ1lDQUNRUUZCaXRnQUlBbEI0QUJxRUE5QkFDRUhEQUVMQWtBZ0RBMEFJQVFnQlVZTkFDQUpJQVEyQW5nZ0NTQUZOZ0owSUFrZ0JUWUNjQ0FDUVFGQnJ0Z0FJQWxCOEFCcUVBOUJBQ0VIREFFTElBdEJBVFlDQUFzZ0JVRUJhaUlGSUFoSERRQUxRUUFoQlFOQUFrQUNRQ0FESUFWQkFuUWlCR29vQWdCRkJFQWdCQ0FLYWkwQUFnMEJDeUFGUVFGcUlnVWdDRWNOQWlBSFJRMEJJQUVvQWhCQkFVY05CVUVBSVFVRFFDQURJQVZCQW5ScUtBSUFCRUFnQ0NBRlFRRnFJZ1ZIRFFFTUJ3c0xRUUFoQnlBQ1FRSkI3c1VBUVFBUUR5QUlRUkJQQkVBZ0NFSHdBWEVoQjBFQUlRUURRQ0FLSUFSQkFuUnFJZ1pCQVRvQUFpQUdJQVE2QUFNZ0JrRUJPZ0ErSUFaQkFUb0FPaUFHUVFFNkFEWWdCa0VCT2dBeUlBWkJBVG9BTGlBR1FRRTZBQ29nQmtFQk9nQW1JQVpCQVRvQUlpQUdRUUU2QUI0Z0JrRUJPZ0FhSUFaQkFUb0FGaUFHUVFFNkFCSWdCa0VCT2dBT0lBWkJBVG9BQ2lBR1FRRTZBQVlnQmlBRVFRRnlPZ0FISUFZZ0JFRVBjam9BUHlBR0lBUkJEbkk2QURzZ0JpQUVRUTF5T2dBM0lBWWdCRUVNY2pvQU15QUdJQVJCQzNJNkFDOGdCaUFFUVFweU9nQXJJQVlnQkVFSmNqb0FKeUFHSUFSQkNISTZBQ01nQmlBRVFRZHlPZ0FmSUFZZ0JFRUdjam9BR3lBR0lBUkJCWEk2QUJjZ0JpQUVRUVJ5T2dBVElBWWdCRUVEY2pvQUR5QUdJQVJCQW5JNkFBc2dCRUVRYWlJRUlBZEhEUUFMSUFjZ0NFWU5CZ3NEUUNBS0lBZEJBblJxSWdRZ0J6b0FBeUFFUVFFNkFBSWdCMEVCYWlJSElBaEhEUUFMREFVTElBa2dCVFlDTUNBQ1FRRkJ5TklBSUFsQk1Hb1FEMEVBSVFjZ0JVRUJhaUlGSUFoSERRRUxDeUFERUJCQkFDRU9EQVVMSUFoQkJCQVRJZ01OQVF0QkFDRU9JQUpCQVVHSzJ3QkJBQkFQREFNTElBTVFFQXNDUUNBQUtBSjRJZ05GRFFBZ0F5Z0NEQ0lQUlFSQUlBTW9BZ1FRRUNBQUtBSjRLQUlJRUJBZ0FDZ0NlQ2dDQUJBUUlBQW9BbmdpQXlnQ0RDSUVCSDhnQkJBUUlBQW9BbmdGSUFNTEVCQWdBRUVBTmdKNERBRUxJQUVvQWhnaERRSkFBa0FnQXkwQUVpSUtCRUFnQXlnQ0FDRVVJQU1vQWdRaEJpQURLQUlJSVFoQkFDRUZBa0FEUUNBTklBOGdCVUVDZEdvdkFRQkJOR3hxS0FJc0JFQWdDaUFGUVFGcUlnVkhEUUVNQWdzTElBa2dCVFlDSUNBQ1FRRkJ3dWNBSUFsQklHb1FEMEVBSVE0TUJnc2dDa0UwYkJBVUlndEZEUUZCQUNFRkEwQWdEeUFGUVFKMGFpSURMd0VBSVFjZ0N5QURMUUFDQkg4Z0F5MEFBd1VnQlF0Qk5HeHFJZ1FnRFNBSFFUUnNhaUlEL1FBQ0FQMExBZ0FnQkNBREtBSXdOZ0l3SUFRZ0EvMEFBaUQ5Q3dJZ0lBUWdBLzBBQWhEOUN3SVFJQXNnQlVFMGJHb2lCQ0FES0FJSUlBTW9BZ3hzUVFKMEVCZ2lBellDTENBRFJRUkFJQVVFUUNBRlFmLy9BM0VoQUFOQUlBQkJOR3dnQzJwQkNHc29BZ0FRRUNBQVFRRnJJZ0FOQUFzTElBc1FFRUVBSVE0Z0FrRUJRWTduQUVFQUVBOE1Cd3NnQkNBRklBaHFMUUFBTmdJWUlBUWdCU0FHYWkwQUFEWUNJQ0FGUVFGcUlnVWdDa2NOQUFzZ0FDZ0NlQzhCRUNJUVFRRnJJUklEUUNBTElCTkJOR3hxSWdNb0Fnd2dBeWdDQ0d3aEJpQU5JQThnRTBFQ2RHb2lCQzhCQUVFMGJHb29BaXdoQ0FKQUlBUXRBQUpGQkVBZ0JrVU5BU0FES0FJc0lRVkJBQ0VIUVFBaEJBSkFJQVpCQkVrTkFDQUZJQWhyUVJCSkRRQWdCa0Y4Y1NFRVFRQWhBd05BSUFVZ0EwRUNkQ0lNYWlBSUlBeHEvUUFDQVAwTEFnQWdBMEVFYWlJRElBUkhEUUFMSUFRZ0JrWU5BZ3NnQkNFRElBWkJBM0VpREFSQUEwQWdCU0FEUVFKMEloRnFJQWdnRVdvb0FnQTJBZ0FnQTBFQmFpRURJQWRCQVdvaUJ5QU1SdzBBQ3dzZ0JDQUdhMEY4U3cwQkEwQWdCU0FEUVFKMElnUnFJQVFnQ0dvb0FnQTJBZ0FnQlNBRVFRUnFJZ2RxSUFjZ0NHb29BZ0EyQWdBZ0JTQUVRUWhxSWdkcUlBY2dDR29vQWdBMkFnQWdCU0FFUVF4cUlnUnFJQVFnQ0dvb0FnQTJBZ0FnQTBFRWFpSURJQVpIRFFBTERBRUxJQVpGRFFBZ0ZDQUVMUUFESWdOQkFuUnFJUVFnQ3lBRFFUUnNhaWdDTENFRlFRQWhBeUFHUVFGSEJFQWdCa0YrY1NFVlFRQWhEQU5BSUFVZ0EwRUNkQ0lIYWlBRUlBY2dDR29vQWdBaUVTQVNJQkFnRVVvYlFRQWdFVUVBVGhzZ0NteEJBblJxS0FJQU5nSUFJQVVnQjBFRWNpSUhhaUFFSUFjZ0NHb29BZ0FpQnlBU0lBY2dFRWdiUVFBZ0IwRUFUaHNnQ214QkFuUnFLQUlBTmdJQUlBTkJBbW9oQXlBTVFRSnFJZ3dnRlVjTkFBc0xJQVpCQVhGRkRRQWdCU0FEUVFKMElnTnFJQVFnQXlBSWFpZ0NBQ0lESUJJZ0F5QVFTQnRCQUNBRFFRQk9HeUFLYkVFQ2RHb29BZ0EyQWdBTElCTkJBV29pRXlBS1J3MEFDd3dDQ3lBS1FUUnNFQlFpQ3cwQkMwRUFJUTRnQWtFQlFZN25BRUVBRUE4TUF3c2dBU2dDRUNJREJFQkJBQ0VGQTBBZ0RTQUZRVFJzYWlnQ0xDSUVCRUFnQkJBUUN5QUZRUUZxSWdVZ0EwY05BQXNMSUEwUUVDQUJJQW8yQWhBZ0FTQUxOZ0lZQ3lBQUtBSjBJZ1ZGRFFFZ0JTZ0NBQ0VISUFVdkFRUWlDd1JBSUFkQkttb2hFaUFIUVNScUlSTWdCMEVlYWlFUklBZEJHR29oRkNBSFFSSnFJUlVnQjBFTWFpRVdJQWRCQm1vaEZ5QUxRUUpySVJoQkFDRUZRUUVoQkFOQUFrQWdBU2dDRUNJRElBY2dCVUVHYkdvaURTOEJBQ0lHVFFSQUlBa2dBellDRkNBSklBWTJBaEFnQWtFQ1FjdzNJQWxCRUdvUUR3d0JDeUFOTHdFRUlnaEJBV3BCLy84RGNVRUJUUVJBSUFFb0FoZ2dCa0UwYkdvZ0RTOEJBanNCTUF3QkN5QUlRUUZySWdwQi8vOERjU0lQSUFOUEJFQWdDU0FETmdJRUlBa2dEellDQUNBQ1FRSkJvemNnQ1JBUERBRUxBa0FnQmlBUFJnMEFJQTB2QVFJTkFDQUpJQUVvQWhnaUNDQUdRVFJzYWlJREtBSXdOZ0xvQVNBSklBUDlBQUlnL1FzRDJBRWdDU0FEL1FBQ0VQMExBOGdCSUFrZ0EvMEFBZ0Q5Q3dPNEFTQURJQWdnRDBFMGJDSU1haUlJS1FJSU53SUlJQU1nQ0NrQ0VEY0NFQ0FESUFncEFoZzNBaGdnQXlBSUtRSWdOd0lnSUFNZ0NDa0NLRGNDS0NBRElBZ29BakEyQWpBZ0F5QUlLUUlBTndJQUlBRW9BaGdnREdvaUF5QUovUUFEdUFIOUN3SUFJQU1nQ2YwQUE5Z0IvUXNDSUNBRElBbjlBQVBJQWYwTEFoQWdBeUFKS0FMb0FUWUNNQ0FGUVFGcUlBdFBEUUFnQkNFSUlCZ2dCV3RCLy84RGNTSURRUWRQQkVBZ0JDQURRUUZxSWhsQitQOEhjU0lRYWlFSUlBcjlFQ0VrSUFiOUVDRWpRUUFoREFOQUlDTWdKQ0FTSUFRZ0RHcEJCbXdpQTJvaUdpQURJQk5xSWhzZ0F5QVJhaUljSUFNZ0ZHb2lIU0FESUJWcUloNGdBeUFXYWlJZklBTWdGMm9pSUNBRElBZHFJZ1A5Q0FFQS9WVUJBQUg5VlFFQUF2MVZBUUFEL1ZVQkFBVDlWUUVBQmYxVkFRQUcvVlVCQUFjaUlTQWovUzRnSVNBay9TMGlKZjFPL1ZJaElpQWhJQ1A5TFNBbC9WQWlJZjBaQUVFQmNRUkFJQU1nSXYxWkFRQUFDeUFoL1JrQlFRRnhCRUFnSUNBaS9Wa0JBQUVMSUNIOUdRSkJBWEVFUUNBZklDTDlXUUVBQWdzZ0lmMFpBMEVCY1FSQUlCNGdJdjFaQVFBREN5QWgvUmtFUVFGeEJFQWdIU0FpL1ZrQkFBUUxJQ0g5R1FWQkFYRUVRQ0FjSUNMOVdRRUFCUXNnSWYwWkJrRUJjUVJBSUJzZ0l2MVpBUUFHQ3lBaC9Sa0hRUUZ4QkVBZ0dpQWkvVmtCQUFjTElBeEJDR29pRENBUVJ3MEFDeUFRSUJsR0RRRUxBMEFnQ2lFREFrQWdCaUFISUFoQkJteHFJZ3d2QVFBaUVFY0VRQ0FHSVFNZ0R5QVFSdzBCQ3lBTUlBTTdBUUFMSUFzZ0NFRUJhaUlJUWYvL0EzRkhEUUFMQ3lBQktBSVlJQVpCTkd4cUlBMHZBUUk3QVRBTElBUkJBV29oQkNBRlFRRnFJZ1VnQzBjTkFBc2dBQ2dDZENJRktBSUFJUWNMSUFjRWZ5QUhFQkFnQUNnQ2RBVWdCUXNRRUNBQVFRQTJBblFNQVF0QkFDRU9JQUpCQVVHaHhnQkJBQkFQQ3lBSlFmQUJhaVFBSUE0TDZRRUJCbjhqQUVFZ2F5SUVKQUFDZndKQUlBQW9BandpQXdSQVFRRWhCUU5BSUFBb0Frd29BaGdnQUNnQ1FDQUNRUUowYWlnQ0FDSUdRVFJzYWlnQ0xFVUVRQ0FFSUFZMkFoQWdBVUVDUWRvNUlBUkJFR29RRDBFQUlRVWdBQ2dDUENFREN5QUNRUUZxSWdJZ0Ewa05BQXNNQVF0QkFTRUZRUUVnQUNnQ1RDSURLQUlRUlEwQkdnTkFJQU1vQWhnZ0FrRTBiR29vQWl4RkJFQWdCQ0FDTmdJQUlBRkJBa0hhT1NBRUVBOUJBQ0VGSUFBb0Frd2hBd3NnQWtFQmFpSUNJQU1vQWhCSkRRQUxDMEVCSUFVTkFCb2dBVUVCUWI4VlFRQVFEMEVBQ3lFSElBUkJJR29rQUNBSEN3UUFRWDhMaGdjQ0ZuOENmaUFBS0FJWUloQW9BaEJGQkVCQkFROExJQkFvQWhnaERTQUFLQUlVS0FJQUtBSVVJUXNEUUNBQklBMG9BaVFpQWpZQ0pDQUxLQUljSWdZZ0FrR1lBV3hxSVFNQ1FBSkFBbjhnQUNnQ1FDSVJCRUFnQmlBTEtBSVlRWmdCYkdvaUFrR1FBV3NvQWdBZ0FrR1lBV3NvQWdCcklRd2dBMEVNYWlFR0lBTkJCR29oQkNBREtBSUlJUUlnQXlnQ0FDRUZRU1FNQVFzZ0EwR1VBV29oQmlBRFFZd0JhaUVFSUFNb0FwQUJJZ0lnQXlnQ2lBRWlCV3NoREVFMEN5QUxhaWdDQUNJU1JRMEFJQVFvQWdBaEJ5QUdLQUlBSVFrZ0FpQUZheUVHSUFFb0FnZ2lBMEovSUFFMUFpZ2lHSVpDZjRVaUdTQUJOUUlRZkNBWWlLY2lDR29oQkFKL0lBVWdDRXNFUUNBRklBaHJJUTVCQUNFSVFRQWdBaUFFVFEwQkdpQUdJQVFnQldzaUJtc01BUXNnQ0NBRmF5RUlJQUlnQkUwRVFDQUdJQWhySVFaQkFDRU9RUUFNQVF0QkFDRU9JQU1oQmlBQ0lBUnJDeUVWSUFrZ0Iyc2hBaUFCS0FJTUlnUWdHU0FCTlFJVWZDQVlpS2NpQ21vaEJRSi9JQWNnQ2tzRVFDQUhJQXBySVE5QkFDRUtRUUFnQlNBSlR3MEJHaUFDSUFVZ0Iyc2lBbXNNQVFzZ0NpQUhheUVLSUFVZ0NVOEVRQ0FDSUFwcklRSkJBQ0VQUVFBTUFRdEJBQ0VQSUFRaEFpQUpJQVZyQ3lFSFFRQWhCU0FJUVFCSURRRWdDa0VBU0EwQklCVkJBRWdOQVNBSFFRQklEUUVnQmtFQVNBMEJJQUpCQUVnTkFTQURJQTlzSUE1cUlRY2dDaUFNYkNBSWFpRUpBa0FDUUFKQUlBRW9BaXdpQ0EwQUlBa05BQ0FIRFFBZ0F5QU1SdzBBSUFNZ0JrY05BQ0FDSUFSSERRRWdBU0FMUVNSQk5DQVJHMm9pQWlnQ0FEWUNMQ0FDUVFBMkFnQU1Bd3NnQ0EwQkN5QUVSUTBDSUFTdElBT3Rma0lnaUtjTkFpQURJQVJzSWdOQi8vLy8vd05MRFFJZ0FTQURRUUowRUJnaUF6WUNMQ0FEUlEwQ0lBWWdBU2dDQ0NJRVJpQUJLQUlNSWdVZ0FrWnhEUUFnQTBFQUlBUWdCV3hCQW5RUUZSb0xJQUpGRFFBZ0FrRUJjU0VYSUFaQkFuUWhCaUFCS0FJc0lBZEJBblJxSVFRZ0VpQUpRUUowYWlFRklBSkJBVWNFUUNBQ1FmNy8vLzhIY1NFSFFRQWhBZ05BSUFRZ0JTQUdFQkloRmlBRklBeEJBblFpQ1dvaUNDQUphaUVGSUJZZ0FTZ0NDRUVDZEdvZ0NDQUdFQklnQVNnQ0NFRUNkR29oQkNBQ1FRSnFJZ0lnQjBjTkFBc0xJQmRGRFFBZ0JDQUZJQVlRRWhvTElBdEJ6QUJxSVFzZ0RVRTBhaUVOSUFGQk5Hb2hBVUVCSVFVZ0ZFRUJhaUlVSUJBb0FoQkpEUUVMQ3lBRkM5VVNBZ2wvREg0akFFR2dBV3NpQlNRQUFrQWdBa0VqVFFSQVFRQWhBaUFEUVFGQnRpNUJBQkFQREFFTElBSkJKR3NpQWlBQ1FRTnVJZ2xCQTJ4SEJFQkJBQ0VDSUFOQkFVRzJMa0VBRUE4TUFRc2dBQ2dDU0NFR0lBRWdCVUdjQVdvaUFrRUNFQkVnQUNBRktBS2NBVHNCVUNBQlFRSnFJQVpCQ0dwQkJCQVJJQUZCQm1vZ0JrRU1ha0VFRUJFZ0FVRUthaUFHUVFRUUVTQUJRUTVxSUFaQkJHcEJCQkFSSUFGQkVtb2dBRUhjQUdwQkJCQVJJQUZCRm1vZ0FFSGdBR3BCQkJBUklBRkJHbW9nQUVIVUFHcEJCQkFSSUFGQkhtb2dBRUhZQUdwQkJCQVJJQUZCSW1vZ0FrRUNFQkVDUUFKQUFrQWdCU2dDbkFFaUFrR0FnQUZOQkVBZ0JpQUNOZ0lRSUFJZ0NVY0VRQ0FGSUFrMkFvUUJJQVVnQWpZQ2dBRWdBMEVCUVpId0FDQUZRWUFCYWhBUFFRQWhBZ3dGQ3lBR0tBSUVJZ0lnQmlnQ0RDSUlTU0FHS0FJSUlnc2dCaWdDQUNJRVMzRkZCRUFnQlNBSXJTQUNyWDAzQTNnZ0JTQUxyU0FFclgwM0EzQWdBMEVCUWR2c0FDQUZRZkFBYWhBUFFRQWhBZ3dGQ3lBQUtBSmNJZ2RCQUNBQUtBSmdJZ29iUlFSQUlBVWdDallDQkNBRklBYzJBZ0FnQTBFQlFZUHhBQ0FGRUE5QkFDRUNEQVVMQWtBQ1FDQUFLQUpVSWd3Z0JFc05BRUYvSUFjZ0RHb2lCeUFISUF4Skd5QUVUUTBBSUFBb0FsZ2lCeUFDU3cwQVFYOGdCeUFLYWlJS0lBY2dDa3NiSUFKTERRRUxRUUFoQWlBRFFRRkIxaFJCQUJBUERBVUxBa0FnQUNnQzRBRU5BQ0FBS0FMWUFTSUhSUTBBSUFBb0F0d0JJZ3BGRFFBZ0N5QUVheUlFSUFkR0lBZ2dBbXNpQWlBS1JuRU5BQ0FGSUFJMkFtd2dCU0FFTmdKb0lBVWdDallDWkNBRklBYzJBbUFnQTBFQlFjUG9BQ0FGUWVBQWFoQVBRUUFoQWd3RkN5QUdJQWxCTkJBVElnUTJBaGdnQkVVTkFRSkFJQVlvQWhCRkRRQWdBVUVrYWlBRlFaZ0JhaUlDUVFFUUVTQUVJQVVvQXBnQklnbEJCM1lpQ2pZQ0lDQUVJQWxCL3dCeFFRRnFJZ3cyQWhnZ0FDZ0M0QUVoQ3lBQlFTVnFJQUpCQVJBUklBUWdCU2dDbUFFMkFnQWdBVUVtYWlBQ1FRRVFFU0FFSUFVb0FwZ0JJZ2cyQWdSQkFDRUNJQVFvQWdBaUIwR0FBbXRCZ1g1SkJFQkJBQ0VKREFVTFFRQWhDU0FJUVlBQ2EwR0Jma2tOQkNBRUtBSVlJZ2hCSDBzTkF5QUVRUUEyQWlRZ0JDQUFLQUtnQVRZQ0tFRUJJUWtnQmlnQ0VFRUJUUTBBUVFBZ0NpQUxHeUVLUVFBZ0RDQUxHeUVMSUFGQkoyb2hBUU5BSUFFZ0JVR1lBV3BCQVJBUklBUWdCU2dDbUFFaUIwRUhkaUlJTmdKVUlBUWdCMEgvQUhGQkFXb2lCellDVEFKQUlBQW9BdUFCRFFBZ0FDMEF2QUZCQkhFTkFDQUhJQXRHSUFnZ0NrWnhEUUFnQlNBSU5nSlVJQVVnQnpZQ1VDQUZJQWsyQWt3Z0JTQUtOZ0pJSUFVZ0N6WUNSQ0FGSUFrMkFrQWdBMEVDUWNmdUFDQUZRVUJyRUE4TElBRkJBV29nQlVHWUFXb2lDRUVCRUJFZ0JDQUZLQUtZQVRZQ05DQUJRUUpxSUFoQkFSQVJJQVFnQlNnQ21BRWlDRFlDT0NBRUtBSTBJZ2RCZ0FKclFZRitTUTBGSUFoQmdBSnJRWUIrVFEwRklBUW9Ba3dpQ0VFZ1R3MEVJQUZCQTJvaEFTQUVRUUEyQWxnZ0JDQUFLQUtnQVRZQ1hDQUVRVFJxSVFRZ0NVRUJhaUlKSUFZb0FoQkpEUUFMQzBFQUlRSWdBQ2dDWENJSVJRMEVJQUFvQW1BaUMwVU5CQ0FBSUFpdElnMUNBWDBpRHlBR0tBSUlJQUFvQWxRaUIydXRmQ0FOZ0tjaUFUWUNhQ0FBSUF1dElnNUNBWDBpRUNBR0tBSU1JQUFvQWxnaUNtdXRmQ0FPZ0tjaUJEWUNiQUpBQWtBZ0FVVU5BQ0FFUlEwQVFmLy9BeUFFYmlBQlR3MEJDeUFGSUFRMkFoUWdCU0FCTmdJUUlBTkJBVUcxNlFBZ0JVRVFhaEFQREFVTElBRWdCR3doQ1FKQUlBQXRBRVJCQW5FRVFDQUFJQUFvQWh3Z0Iyc2dDRzQyQWh3Z0FDQUFLQUlnSUFwcklBdHVOZ0lnSUFBZ0R5QUFLQUlrSUFkcnJYd2dEWUErQWlRZ0FDQVFJQUFvQWlnZ0NtdXRmQ0FPZ0Q0Q0tBd0JDeUFBSUFRMkFpZ2dBQ0FCTmdJa0lBQkNBRGNDSEFzZ0FDQUpRWXdzRUJNaUFUWUNuQUVnQVVVRVFDQURRUUZCelIxQkFCQVBEQVVMSUFZb0FoQkJ1QWdRRXlFQklBQW9BZ3dnQVRZQzBDc2dBQ2dDRENnQzBDdEZCRUFnQTBFQlFjMGRRUUFRRHd3RkMwRUtRUlFRRXlFQklBQW9BZ3dnQVRZQzhDc2dBQ2dDRENJQktBTHdLMFVFUUNBRFFRRkJ6UjFCQUJBUERBVUxJQUZCQ2pZQytDdEJDa0VVRUJNaEFTQUFLQUlNSUFFMkF2d3JJQUFvQWd3aUFTZ0MvQ3RGQkVBZ0EwRUJRYzBkUVFBUUR3d0ZDeUFCUVFvMkFvUXNBa0FnQmlnQ0VDSUVSUTBBSUFZb0FoZ2hDRUVBSVFFZ0JFRUJSd1JBSUFSQmZuRWhDd05BSUFnZ0FVRTBiR29pQnlnQ0lFVUVRQ0FBS0FJTUtBTFFLeUFCUWJnSWJHcEJBU0FIS0FJWVFRRnJkRFlDdEFnTElBZ2dBVUVCY2lJSFFUUnNhaUlLS0FJZ1JRUkFJQUFvQWd3b0F0QXJJQWRCdUFoc2FrRUJJQW9vQWhoQkFXdDBOZ0swQ0FzZ0FVRUNhaUVCSUFKQkFtb2lBaUFMUncwQUN3c2dCRUVCY1VVTkFDQUlJQUZCTkd4cUlnSW9BaUFOQUNBQUtBSU1LQUxRS3lBQlFiZ0liR3BCQVNBQ0tBSVlRUUZyZERZQ3RBZ0xJQWtFUUNBQUtBS2NBU0VCUVFBaEFnTkFJQUVnQmlnQ0VFRzRDQkFUSWdRMkF0QXJJQVJGQkVCQkFDRUNJQU5CQVVITkhVRUFFQThNQndzZ0FVR01MR29oQVNBQ1FRRnFJZ0lnQ1VrTkFBc0xJQUJCQkRZQ0NDQUdLQUlRSWdNRVFFRi9JQUFvQWxnaUFTQUFLQUpnSWdJZ0FDZ0NiRUVCYTJ4cUlnUWdBbW9pQWlBQ0lBUkpHeUlDSUFZb0Fnd2lCQ0FDSUFSSkc2MGhFRUYvSUFBb0FsUWlBaUFBS0FKY0lnUWdBQ2dDYUVFQmEyeHFJZ0FnQkdvaUJDQUFJQVJMR3lJQUlBWW9BZ2dpQkNBQUlBUkpHNjBoRVNBQklBWW9BZ1FpQUNBQUlBRkpHNjBoRWlBQ0lBWW9BZ0FpQUNBQUlBSkpHNjBoRXlBR0tBSVlJUUJCQUNFQkEwQWdBQ0FBTlFJRUlnMUNBWDBpRkNBU2ZDQU5nQ0lWUGdJVUlBQWdBRFVDQUNJT1FnRjlJaFlnRTN3Z0RvQWlGejRDRUNBQVFuOGdBRFVDS0NJUGhrSi9oU0lZSUJBZ0ZId2dEWUFnRlgxQy8vLy8vdytEZkNBUGlENENEQ0FBSUJFZ0Zud2dEb0FnRjMxQy8vLy8vdytESUJoOElBK0lQZ0lJSUFCQk5Hb2hBQ0FCUVFGcUlnRWdBMGNOQUFzTFFRRWhBZ3dFQ3lBRklBSTJBcEFCSUFOQkFVSDJPeUFGUVpBQmFoQVBRUUFoQWd3REMwRUFJUUlnQmtFQU5nSVFJQU5CQVVITkhVRUFFQThNQWdzZ0JTQUlOZ0kwSUFVZ0NUWUNNQ0FEUVFGQnQvTUFJQVZCTUdvUUR3d0JDeUFGSUFnMkFpZ2dCU0FITmdJa0lBVWdDVFlDSUNBRFFRRkJrZXNBSUFWQklHb1FEd3NnQlVHZ0FXb2tBQ0FDQzU0REFRZC9Jd0JCRUdzaUJpUUFBbjhnQWlBQ1FRRkJBaUFBS0FKSUtBSVFJZ2hCZ1FKSkd5SUhRUUYwUVFWcUlnUnVJZ1VnQkd4R0lBSWdCRTl4UlFSQUlBTkJBVUdLSTBFQUVBOUJBQXdCQ3dKL0lBQW9BZ2hCRUVZRVFDQUFLQUtjQVNBQUtBTE1BVUdNTEd4cURBRUxJQUFvQWd3TElRUkJBQ0VBSUFRdEFJZ3NJZ0pCQkhFRVFDQUVLQUtrQTBFQmFpRUFDeUFBSUFWcUlnVkJJRThFUUNBR0lBVTJBZ0FnQTBFQlFZczdJQVlRRDBFQURBRUxJQVFnQWtFRWNqb0FpQ3dnQUNBRlNRUkFJQVFnQUVHVUFXeHFRYWdEYWlFQ0EwQWdBU0FDUVFFUUVTQUJRUUZxSWdFZ0FrRUVhaUFIRUJFZ0FTQUhhaUlCSUFKQkNHcEJBaEFSSUFJZ0FpZ0NDQ0lESUFRb0FnZ2lDU0FESUFsSkd6WUNDQ0FCUVFKcUlBSkJER3BCQVJBUklBRkJBMm9pQVNBQ1FSQnFJQWNRRVNBQklBZHFJZ0VnQmtFTWFrRUJFQkVnQWlBR0tBSU1OZ0lrSUFJZ0FpZ0NFQ0lESUFnZ0F5QUlTUnMyQWhBZ0FrR1VBV29oQWlBQlFRRnFJUUVnQUVFQmFpSUFJQVZIRFFBTEN5QUVJQVZCQVdzMkFxUURRUUVMSVFvZ0JrRVFhaVFBSUFvTDdBRUJCSDhqQUVFUWF5SUVKQUFDZndKQUlBRWdCRUVJYWdKL0lBQW9Ba2dvQWhCQmdBSk5CRUFnQWdSQVFYOGhCVUVCREFJTElBTkJBVUcrSTBFQUVBOUJBQXdEQ3lBQ1FRRk5EUUZCZmlFRlFRSUxJZ1lRRVNBRUlBSWdCV28yQWd3Z0JDZ0NDQ0lDSUFBb0FrZ29BaEFpQlU4RVFDQUVJQVUyQWdRZ0JDQUNOZ0lBSUFOQkFVSEdPaUFFRUE5QkFBd0NDeUFBSUFJZ0FTQUdhaUFFUVF4cUlBTVFRa1VFUUNBRFFRRkJ2aU5CQUJBUFFRQU1BZ3RCQVNBRUtBSU1SUTBCR2lBRFFRRkJ2aU5CQUJBUFFRQU1BUXNnQTBFQlFiNGpRUUFRRDBFQUN5RUhJQVJCRUdva0FDQUhDOWtCQVFSL0l3QkJFR3NpQkNRQUlBUWdBallDREFKQUFrQWdBRUVBSUFFZ0JFRU1haUFERUVKRkRRQWdCQ2dDREEwQUFuOGdBQ2dDQ0VFUVJnUkFJQUFvQXB3QklBQW9Bc3dCUVl3c2JHb01BUXNnQUNnQ0RBc2hCMEVCSVFVZ0FDZ0NTQ2dDRUVFQ1NRMEJJQWNvQXRBcklnSkJIR29oQmtFQklRRWdBaUVEQTBBZ0F5QUNLQUlZTmdMUUNDQURJQUlvQXFRR05nTGNEaUFEUWRRSWFpQUdRWWdHRUJJYUlBTkJ1QWhxSVFNZ0FVRUJhaUlCSUFBb0FrZ29BaEJKRFFBTERBRUxJQU5CQVVIV0lrRUFFQThMSUFSQkVHb2tBQ0FGQzlZQkFRTi9Jd0JCRUdzaUJDUUFBa0FnQWtFQlFRSWdBQ2dDU0NnQ0VDSUdRWUVDU1JzaUJVRUNha2NFUUVFQUlRQWdBMEVCUVlvZ1FRQVFEd3dCQ3dKL0lBQW9BZ2hCRUVZRVFDQUFLQUtjQVNBQUtBTE1BVUdNTEd4cURBRUxJQUFvQWd3TElRSWdBU0FFUVF4cUlBVVFFVUVCSVFBZ0FTQUZhaUlGSUFSQkNHcEJBUkFSSUFZZ0JDZ0NEQ0lCVFFSQUlBUWdCallDQkNBRUlBRTJBZ0FnQTBFQlFkanZBQ0FFRUE5QkFDRUFEQUVMSUFWQkFXb2dBaWdDMENzZ0FVRzRDR3hxUWFnR2FrRUJFQkVMSUFSQkVHb2tBQ0FBQzRRQ0FRVi9Jd0JCRUdzaUJDUUFBbjhnQUNnQ0NFRVFSZ1JBSUFBb0Fwd0JJQUFvQXN3QlFZd3NiR29NQVFzZ0FDZ0NEQXNoQmdKQUlBSkJBVUVDSUFBb0FrZ2lCeWdDRUVHQkFra2JJZ1ZOQkVCQkFDRUNJQU5CQVVHa0kwRUFFQThNQVFzZ0JDQUZRWDl6SUFKcU5nSU1JQUVnQkVFSWFpQUZFQkVnQkNnQ0NDSUlJQWNvQWhCUEJFQkJBQ0VDSUFOQkFVR0E2UUJCQUJBUERBRUxRUUVoQWlBQklBVnFJZ0VnQmlnQzBDc2dDRUc0Q0d4cVFRRVFFU0FBSUFRb0FnZ2dBVUVCYWlBRVFReHFJQU1RUTBVRVFFRUFJUUlnQTBFQlFhUWpRUUFRRHd3QkN5QUVLQUlNUlEwQVFRQWhBaUFEUVFGQnBDTkJBQkFQQ3lBRVFSQnFKQUFnQWd1c0JnRUhmeU1BUVJCcklnWWtBQ0FHSUFJMkFnd2dBQ2dDU0NFSkFuOGdBQ2dDQ0VFUVJnUkFJQUFvQXB3QklBQW9Bc3dCUVl3c2JHb01BUXNnQUNnQ0RBc2lCQ0FFTFFDSUxFRUJjam9BaUN3Q1FDQUNRUVJOQkVBZ0EwRUJRYndpUVFBUUR3d0JDeUFCSUFSQkFSQVJJQVFvQWdCQkNFOEVRQ0FEUVFGQm1pSkJBQkFQREFFTElBRkJBV29nQmtFSWFrRUJFQkVnQkNBR0tBSUlJZ0kyQWdRZ0FrRUZUZ1JBSUFOQkFVSHhJVUVBRUE4Z0JFRi9OZ0lFQ3lBQlFRSnFJQVJCQ0dwQkFoQVJJQVFvQWdnaUIwR0FnQVJyUVlDQWZFMEVRQ0FHSUFjMkFnQWdBMEVCUWFrOUlBWVFEd3dCQ3lBRUlBQW9BcVFCSWdJZ0J5QUNHellDRENBQlFRUnFJQVJCRUdwQkFSQVJJQVFvQWhCQkFrOEVRQ0FEUVFGQmh5cEJBQkFQREFFTElBRkJCV29oQWlBR0lBWW9BZ3hCQldzMkFnd0NRQ0FKS0FJUUlnZEZEUUFnQkNnQ0FFRUJjU0VJSUFRb0F0QXJJUVJCQUNFSklBZEJDRThFUUNBSFFYaHhJUUVEUUNBRUlBVkJ1QWhzYWlBSU5nSUFJQVFnQlVFQmNrRzRDR3hxSUFnMkFnQWdCQ0FGUVFKeVFiZ0liR29nQ0RZQ0FDQUVJQVZCQTNKQnVBaHNhaUFJTmdJQUlBUWdCVUVFY2tHNENHeHFJQWcyQWdBZ0JDQUZRUVZ5UWJnSWJHb2dDRFlDQUNBRUlBVkJCbkpCdUFoc2FpQUlOZ0lBSUFRZ0JVRUhja0c0Q0d4cUlBZzJBZ0FnQlVFSWFpRUZJQXBCQ0dvaUNpQUJSdzBBQ3dzZ0IwRUhjU0lCUlEwQUEwQWdCQ0FGUWJnSWJHb2dDRFlDQUNBRlFRRnFJUVVnQ1VFQmFpSUpJQUZIRFFBTEMwRUFJUVVnQUVFQUlBSWdCa0VNYWlBREVFTkZCRUFnQTBFQlFid2lRUUFRRHd3QkN5QUdLQUlNQkVBZ0EwRUJRYndpUVFBUUR3d0JDd0ovSUFBb0FnaEJFRVlFUUNBQUtBS2NBU0FBS0FMTUFVR01MR3hxREFFTElBQW9BZ3dMSVFFZ0FDZ0NTQ2dDRUVFQ1R3UkFJQUVvQXRBcklnRW9BZ1JCQW5RaEJ5QUJRYkFIYWlFS0lBRkJyQVpxSVFOQkFTRUpJQUVoQWdOQUlBSWdBZjBBQWdUOUN3SzhDQ0FDSUFFb0FoUTJBc3dJSUFKQjVBNXFJQU1nQnhBU0dpQUNRZWdQYWlBS0lBY1FFaG9nQWtHNENHb2hBaUFKUVFGcUlna2dBQ2dDU0NnQ0VFa05BQXNMUVFFaEJRc2dCa0VRYWlRQUlBVUw3QWtCQm44akFFSHdBR3NpQkNRQUlBUkJBRFlDYUFKQUlBSkJDRWNFUUNBRFFRRkJ2UjVCQUJBUElBTkJBVUc5SGtFQUVBOE1BUXNnQVNBQVFjd0Jha0VDRUJFZ0FVRUNhaUFFUWV3QWFrRUVFQkVnQVVFR2FpQUVRZVFBYWtFQkVCRWdBVUVIYWlBRVFlZ0Fha0VCRUJFZ0FDZ0N6QUVpQWlBQUtBSm9JZ2dnQUNnQ2JHeFBCRUFnQkNBQ05nSmdJQU5CQVVHZE95QUVRZUFBYWhBUERBRUxJQUFvQXB3QklBSkJqQ3hzYWlFRklBSWdDRzRoQnlBRUtBSmtJUUVDUUNBQUtBSXNJZ1pCQUU0Z0FpQUdSM0VOQUNBRktBTFVLMEVCYWlJR0lBRkdEUUFnQkNBR05nSllJQVFnQVRZQ1ZDQUVJQUkyQWxBZ0EwRUJRYlU3SUFSQjBBQnFFQTlCQUNFRkRBRUxJQVVnQVRZQzFDc0NRQUpBSUFRb0Ftd2lBVUVCYTBFTVRRUi9JQUZCREVjTkFTQUVRUXcyQWpBZ0EwRUNRZVhYQUNBRVFUQnFFQThnQkNnQ2JBVWdBUXRGQkVBZ0EwRUVRYkxQQUVFQUVBOGdBRUVCTmdJNEN3SkFBa0FDUUFKQUlBVW9BdGdySWdFRVFDQUVLQUprSWdZZ0FVa05BU0FFSUFFMkFpUWdCQ0FHTmdJZ0lBTkJBVUdGSnlBRVFTQnFFQThnQUVFQk5nSTRRUUFoQlF3SEN5QUVLQUpvSWdZTkFRd0RDeUFFS0FKb0lnWkZEUUVMSUFRZ0JpQUFMUUJFUVFSMlFRRnhhaUlCTmdKb0lBUW9BbVFpQmlBRktBTFlLeUlKUVFGclN3UkFJQVFnQ1RZQ0JDQUVJQVkyQWdBZ0EwRUJRYUltSUFRUUR5QUFRUUUyQWpoQkFDRUZEQVVMSUFFZ0JrMEVRQ0FFSUFFMkFoUWdCQ0FHTmdJUUlBTkJBVUhwSnlBRVFSQnFFQThnQUVFQk5nSTRRUUFoQlF3RkN5QUZJQUUyQXRnckN5QUJJQVFvQW1SQkFXcEhEUUFnQUNBQUxRQkVRUUZ5T2dCRUN5QUVLQUpzSVFFZ0FFRVFOZ0lJSUFCQkFDQUJRUXhySUFBb0FqZ2JOZ0lZQWtBZ0FDZ0NMQ0lCUVg5R0JFQkJCQ0VGSUFJZ0J5QUliR3NpQVNBQUtBSWNTUTBCSUFFZ0FDZ0NKRThOQVNBSElBQW9BaUJKRFFFZ0J5QUFLQUlvVDBFQ2RDRUZEQUVMSUFBb0Fzd0JJQUZIUVFKMElRVUxJQUFnQUMwQVJFSDdBWEVnQlhJNkFFUkJBU0VGSUFBb0FzZ0JJZ0ZGRFFJZ0FTZ0NLQ0lHSUFBb0Fzd0JJZ0pCS0d4cUlnY2dBallDQUNBSElBUW9BbVFpQ0RZQ0RDQUVLQUpvSWdFRVFDQUhJQUUyQWdRZ0J5QUVLQUpvSWdFMkFnZ2dCeWdDRUNJQ1JRUkFJQUZCR0JBVElRRWdBQ2dDeUFFb0FpZ2dBQ2dDekFGQktHeHFJQUUyQWhBZ0FRMEVRUUFoQlNBRFFRRkJ5VFJCQUJBUERBUUxJQUlnQVVFWWJCQVhJUUVnQUNnQ3lBRW9BaWdnQUNnQ3pBRkJLR3hxSVFJZ0FVVUVRQ0FDS0FJUUVCQkJBQ0VGSUFBb0FzZ0JLQUlvSUFBb0Fzd0JRU2hzYWtFQU5nSVFJQU5CQVVISk5FRUFFQThNQkFzZ0FpQUJOZ0lRREFNTElBY29BaEFpQVVVRVFDQUhRUW8yQWdoQkNrRVlFQk1oQVNBQUtBTElBU2dDS0NJR0lBQW9Bc3dCSWdKQktHeHFJZ2NnQVRZQ0VDQUJSUTBDSUFRb0FtUWhDQXNnQ0NBR0lBSkJLR3hxSWdJb0FnaEpEUUlnQWlBSVFRRnFJZ0kyQWdnZ0FTQUNRUmhzRUJjaEFTQUFLQUxJQVNnQ0tDQUFLQUxNQVVFb2JHb2hBaUFCUlFSQUlBSW9BaEFRRUVFQUlRVWdBQ2dDeUFFb0FpZ2dBQ2dDekFGQktHeHFJZ0JCQURZQ0NDQUFRUUEyQWhBZ0EwRUJRY2swUVFBUUR3d0RDeUFDSUFFMkFoQU1BZ3NnQkNBQk5nSkFJQU5CQVVIeTJRQWdCRUZBYXhBUFFRQWhCUXdCQzBFQUlRVWdCMEVBTmdJSUlBTkJBVUhKTkVFQUVBOExJQVJCOEFCcUpBQWdCUXVyQndFSWZ5TUFRZEFBYXlJRUpBQWdCRUVCTmdKTUFrQUNRQ0FBS0FMSUFTSUZLQUlvSWdNTkFDQUZJQUFvQW13Z0FDZ0NhR3dpQXpZQ0pDQURRU2dRRXlFRElBQW9Bc2dCSWdVZ0F6WUNLQ0FEUlFSQVFRQWhCUXdDQ3lBRktBSWtSUTBBQTBCQkFDRUZJQU1nQmtFb2JDSUhhaUlEUVFBMkFoUWdBMEhrQURZQ0hFSGtBRUVZRUJNaENTQUhJQUFvQXNnQklnZ29BaWdpQTJvZ0NUWUNHQ0FKUlEwQ0lBWkJBV29pQmlBSUtBSWtTUTBBQ3dzZ0FDZ0NMQ0VKQWtBZ0F5Z0NFRVVOQUFKQUlBTWdDVUVvYkdvaUF5Z0NCRVVFUUNBQklBQXBBekJDQW53Z0FoQTJEUUZCQUNFRklBSkJBVUduS1VFQUVBOE1Bd3NnQVNBREtBSVFLUU1BUWdKOElBSVFOZzBBUVFBaEJTQUNRUUZCcHlsQkFCQVBEQUlMSUFBb0FnaEJnQUpIRFFBZ0FFRUlOZ0lJQ3dKQUlBQW9BbXdnQUNnQ2FHd2lCMFVOQUNBQUtBS2NBU0VGUVFBaEF5QUhRUWhQQkVBZ0IwRjRjU0VJUVFBaEJnTkFJQVVnQTBHTUxHeHFRWDgyQXRRcklBVWdBMEVCY2tHTUxHeHFRWDgyQXRRcklBVWdBMEVDY2tHTUxHeHFRWDgyQXRRcklBVWdBMEVEY2tHTUxHeHFRWDgyQXRRcklBVWdBMEVFY2tHTUxHeHFRWDgyQXRRcklBVWdBMEVGY2tHTUxHeHFRWDgyQXRRcklBVWdBMEVHY2tHTUxHeHFRWDgyQXRRcklBVWdBMEVIY2tHTUxHeHFRWDgyQXRRcklBTkJDR29oQXlBR1FRaHFJZ1lnQ0VjTkFBc0xJQWRCQjNFaUJrVU5BQU5BSUFVZ0EwR01MR3hxUVg4MkF0UXJJQU5CQVdvaEF5QUtRUUZxSWdvZ0JrY05BQXNMUVFBaEJTQUFJQVJCeUFCcVFRQWdCRUhFQUdvZ0JFRkFheUFFUVR4cUlBUkJPR29nQkVFMGFpQUVRY3dBYWlBQklBSVFKMFVOQUNBSlFRRnFJUWNEUUFKQUlBUW9Ba3hGRFFBZ0FDQUVLQUpJSWdOQkFFRUFJQUVnQWhBclJRMENJQUFvQW1naENDQUFLQUpzSVFvZ0JDQURRUUZxSWdZMkFpQWdCQ0FJSUFwc05nSWtJQUpCQkVHZzF3QWdCRUVnYWhBUElBQW9BdEFCSUFBb0Frd29BaGdRZEVVTkFpQUFLQUtjQVNBRFFZd3NiR29pQlNnQzNDc2lDQVJBSUFnUUVDQUZRZ0EzQXR3ckN5QUVJQVkyQWhBZ0FrRUVRZWI4QUNBRVFSQnFFQThnQXlBSlJnUkFJQUVnQUNnQ3lBRXBBd2hDQW53Z0FoQTJEUUZCQUNFRklBSkJBVUduS1VFQUVBOE1Bd3NnQkNBSE5nSUVJQVFnQmpZQ0FDQUNRUUpCM2VVQUlBUVFEMEVBSVFVZ0FDQUVRY2dBYWtFQUlBUkJ4QUJxSUFSQlFHc2dCRUU4YWlBRVFUaHFJQVJCTkdvZ0JFSE1BR29nQVNBQ0VDY05BUXdDQ3dzZ0FDQUNFSEloQlFzZ0JFSFFBR29rQUNBRkM4Z0dBZ2QvQVg0akFFSFFBR3NpQXlRQUlBTkJBVFlDVEFKQUFrQWdBQ2dDYUNJRVFRRkhEUUFnQUNnQ2JFRUJSdzBBSUFBb0FsUU5BQ0FBS0FKWURRQWdBQ2dDVENJRktBSUFEUUFnQlNnQ0JBMEFJQVVvQWdnZ0FDZ0NYRWNOQUNBRktBSU1JQUFvQW1CSERRQkJBQ0VFSUFBZ0EwSElBR3BCQUNBRFFjUUFhaUFEUVVCcklBTkJQR29nQTBFNGFpQURRVFJxSUFOQnpBQnFJQUVnQWhBblJRMEJBa0FnQUNBREtBSklRUUJCQUNBQklBSVFLd1JBSUFBb0Frd2lBU2dDRUEwQlFRRWhCQXdEQ3lBQ1FRRkJrY0lBUVFBUUR3d0NDeUFCS0FJWUlRRkJBQ0VDQTBBZ0FTQUNRVFJzSWdScUtBSXNFQkFnQUNnQ1RDSUZLQUlZSWdFZ0JHb2lCaUFBS0FMUUFTSUhLQUlVS0FJQUtBSVVJQUpCekFCc2FpSUlLQUlrTmdJc0lBWWdCeWdDR0NnQ0dDQUVhaWdDSkRZQ0pDQUlRUUEyQWlSQkFTRUVJQUpCQVdvaUFpQUZLQUlRU1EwQUN3d0JDd05BQWtBQ2Z3SkFJQVJCQVVjTkFDQUFLQUpzUVFGSERRQWdBQ2dDbkFFb0F0d3JSUTBBSUFOQkFEWUNTQ0FBUVFBMkFzd0JJQUFnQUNnQ0NFR0FBWEkyQWdoQkFBd0JDMEVBSVFRZ0FDQURRY2dBYWtFQUlBTkJ4QUJxSUFOQlFHc2dBMEU4YWlBRFFUaHFJQU5CTkdvZ0EwSE1BR29nQVNBQ0VDZEZEUU1nQXlnQ1RFVU5BU0FES0FKSUN5SUhRUUZxSVFRZ0FDQUhRUUJCQUNBQklBSVFLeUVKSUFBb0FtZ2dBQ2dDYkd3aEJTQUpSUVJBSUFNZ0JUWUNCQ0FESUFRMkFnQWdBa0VCUVpjNUlBTVFEMEVBSVFRTUF3c2dBeUFGTmdJa0lBTWdCRFlDSUNBQ1FRUkJvTmNBSUFOQklHb1FEeUFBS0FMUUFTQUFLQUpNS0FJWUVIUkZCRUJCQUNFRURBTUxBa0FDUUNBQUtBSm9RUUZIRFFBZ0FDZ0NiRUVCUncwQUlBQW9Ba3dpQlNnQ0FDQUFLQUpJSWdZb0FnQkhEUUVnQlNnQ0JDQUdLQUlFUncwQklBVW9BZ2dnQmlnQ0NFY05BU0FGS0FJTUlBWW9BZ3hIRFFFTElBQW9BcHdCSUFkQmpDeHNhaUlGS0FMY0t5SUdSUTBBSUFZUUVDQUZRZ0EzQXR3ckN5QURJQVEyQWhBZ0FrRUVRZWI4QUNBRFFSQnFFQThnQVNrRENDSUtVQVIrUWdBRklBb2dBU2tET0gwTFVBUkFJQUFvQWdoQndBQkdEUUVMSUFoQkFXb2lDQ0FBS0FKb0lnUWdBQ2dDYkd4SERRRUxDeUFBSUFJUWNpRUVDeUFEUWRBQWFpUUFJQVFMdFFZQkRIOGdBQ2dDU0NFSkFrQWdBQ2dDYUNBQUtBSnNiQ0lNQkVBZ0NTZ0NFQ0lCUWJnSWJDRU5JQUVnQVd4QkFuUWhDaUFBS0FJTUlRUWdBQ2dDbkFFaEF3TkFJQU1vQXRBcklRc2dBeUFFUVl3c0VCSWlBVUVBTmdMb0t5QUJRWDgyQXRRcklBRkJBRFlDc0NnZ0FVRUFOZ0tFTENBQlFRQTJBdkFySUFGQ0FEY0MrQ3NnQVNBTE5nTFFLeUFCSUFFdEFJZ3NRZndCY1RvQWlDd2dCQ2dDNkNzRVFDQUJJQW9RRkNJRE5nTG9LeUFEUlFSQVFRQVBDeUFESUFRb0F1Z3JJQW9RRWhvTElBRWdCQ2dDK0N0QkZHd2lCUkFVSWdNMkF2QXJRUUFoQ0NBRFJRMENJQU1nQkNnQzhDc2dCUkFTR2lBRUtBTDBLeUlHQkVBZ0JDZ0M4Q3NoQXlBQktBTHdLeUVGUVFBaEJ3TkFJQU1vQWd3RVFDQUZJQU1vQWhBUUZDSUdOZ0lNSUFaRkJFQkJBQThMSUFZZ0F5Z0NEQ0FES0FJUUVCSWFJQVFvQXZRcklRWUxJQUVnQVNnQytDdEJBV28yQXZncklBVkJGR29oQlNBRFFSUnFJUU1nQjBFQmFpSUhJQVpKRFFBTEN5QUJJQVFvQW9Rc1FSUnNJZ1VRRkNJRE5nTDhLeUFEUlEwQ0lBTWdCQ2dDL0NzZ0JSQVNHaUFCSUFRb0FvUXNJZ2cyQW9Rc0lBZ0VRQ0FFS0FMOEt5RURJQUVvQXZ3cklRVkJBQ0VIQTBBZ0F5Z0NDQ0lHQkVBZ0JTQUJLQUx3S3lBR0lBUW9BdkFyYTJvMkFnZ0xJQU1vQWd3aUJnUkFJQVVnQVNnQzhDc2dCaUFFS0FMd0sydHFOZ0lNQ3lBRlFSUnFJUVVnQTBFVWFpRURJQWRCQVdvaUJ5QUlSdzBBQ3dzZ0N5QUVLQUxRS3lBTkVCSWFJQUZCakN4cUlRTWdEa0VCYWlJT0lBeEhEUUFMQzBFQklRZ2dBQUovUVFCQkFVSElBQkFUSWdGRkRRQWFJQUVnQVMwQUtFSCtBWEZCQVhJNkFDZ2dBVUVCUVFRUUV5SUVOZ0lVSUFFZ0JBMEFHaUFCRUJCQkFBc2lBVFlDMEFFZ0FVVUVRRUVBRHdzZ0FDZ0MxQUVoQlVFQUlRUWdBU0FBUWRBQWFqWUNIQ0FCSUFrMkFoaEJBVUhRQmhBVElRTWdBU2dDRkNBRE5nSUFBa0FnQTBVTkFDQUpLQUlRUWN3QUVCTWhBeUFCS0FJVUtBSUFJZ2NnQXpZQ0ZDQURSUTBBSUFjZ0NTZ0NFRFlDRUNBQUtBS2tBU0VFSUFFZ0JUWUNMQ0FCSUFRMkFnQkJBU0VFQ3lBRURRQWdBQ2dDMEFFUVZVRUFJUWdnQUVFQU5nTFFBU0FDUVFGQndodEJBQkFQQ3lBSUM5VVNBd3gvQVgwQmZpTUFRVEJySWdna0FDQUFRUUUyQWdnQ2Z3SkFBa0FnQVNBSVFTaHFJZ1ZCQWlBQ0VCcEJBa2NOQUNBRklBaEJMR3BCQWhBUklBZ29BaXhCei80RFJ3MEFJQUJCQWpZQ0NDQUFLQUxJQVNBQktRTTRRZ0o5SWhBM0F3QWdDQ0FRTndNUUlBSkJCRUh1M2dBZ0NFRVFhaEFQSUFBb0FzZ0JJZ01wQXdBaEVDQURLQUlZSWdkQkFXb2lCU0FES0FJZ0lnUk5CRUFnQXlnQ0hDRUVEQUlMSUFNQ2Z5QUVzME1BQU1oQ2tpSVBRd0FBZ0U5ZElBOURBQUFBQUdCeEJFQWdENmtNQVF0QkFBc2lCVFlDSUNBREtBSWNJQVZCR0d3UUZ5SUVCRUFnQXlBRU5nSWNJQU1vQWhnaUIwRUJhaUVGREFJTElBTW9BaHdRRUNBRFFRQTJBaUFnQTBJQU53TVlJQUpCQVVHcEhVRUFFQThMSUFKQkFVRzE5UUJCQUJBUFFRQU1BUXNnQkNBSFFSaHNhaUlFUVFJMkFoQWdCQ0FReERjRENDQUVRYy8rQXpzQkFDQURJQVUyQWhnZ0FTQUFLQUlRUVFJZ0FoQWFRUUpIQkVBZ0FrRUJRWllTUVFBUUQwRUFEQUVMSUFBb0FoQWdDRUVvYWtFQ0VCRUNRQUpBSUFnb0FpZ2lCRUdRL3dOSEJFQURRRUhndlFFaEJ5QUVRZi85QTAwRVFDQUlJQVEyQWdBZ0FrRUJRY29RSUFnUUQwRUFEQVVMQTBBZ0J5SUZLQUlBSWdNRVFDQUZRUXhxSVFjZ0F5QUVSdzBCQ3dzQ1FBSkFJQU1OQUVFQ0lRWWdBa0VDUWZVY1FRQVFEMEdXRWlFSEFrQUNRQ0FCSUFBb0FoQkJBaUFDRUJwQkFrY05BQU5BSUFBb0FoQWdDRUVzYWtFQ0VCRkI0TDBCSVFNZ0NDZ0NMQ0lFUVlEK0EwOEVRQU5BSUFNaUJTZ0NBQ0lNQkVBZ0EwRU1haUVESUFRZ0RFY05BUXNMSUFVb0FnUWdBQ2dDQ0hGRkJFQkIvQ2doQnd3REN5QU1CRUFnREVHUS93TkdCRUFnQ0VHUS93TTJBaWdNQndzZ0FTa0RPQ0VRSUFBb0FzZ0JJZ01vQWhnaUJVRUJhaUlFSUFNb0FpQWlCMDBFUUNBREtBSWNJUWNNQlFzZ0F3Si9JQWV6UXdBQXlFS1NJZzlEQUFDQVQxMGdEME1BQUFBQVlIRUVRQ0FQcVF3QkMwRUFDeUlGTmdJZ0lBTW9BaHdnQlVFWWJCQVhJZ2NFUUNBRElBYzJBaHdnQXlnQ0dDSUZRUUZxSVFRTUJRc2dBeWdDSEJBUUlBTkJBRFlDSUNBRFFnQTNBeGhCcVIwaEJ3d0RDeUFHUVFKcUlRWUxJQUVnQUNnQ0VFRUNJQUlRR2tFQ1JnMEFDd3NnQWtFQklBZEJBQkFQSUFKQkFVSDl5QUJCQUJBUFFRQU1Cd3NnQnlBRlFSaHNhaUlGSUFZMkFoQWdCU0FRcHlBR2E2dzNBd2dnQlVFQU93RUFJQU1nQkRZQ0dDQUlJQXcyQWloQjRMMEJJUVFEUUNBRUlnVW9BZ0FpQTBVTkFTQUVRUXhxSVFRZ0F5QU1SdzBBQ3dzZ0JTZ0NCQ0FBS0FJSWNVVUVRQ0FDUVFGQi9DaEJBQkFQUVFBTUJnc2dBU0FBS0FJUVFRSWdBaEFhUVFKSEJFQWdBa0VCUVpZU1FRQVFEMEVBREFZTElBQW9BaEFnQ0VFa2FrRUNFQkVnQ0NnQ0pDSUVRUUZOQkVBZ0FrRUJRYUV1UVFBUUQwRUFEQVlMSUFnZ0JFRUNheUlITmdJa0lBQW9BaEFoQkNBQUtBSVVJQWRKQkVBZ0JDQUhFQmNpQkVVRVFDQUFLQUlRRUJBZ0FFSUFOd01RSUFKQkFVSFVKVUVBRUE5QkFBd0hDeUFBSUFRMkFoQWdBQ0FJS0FJa0lnYzJBaFFMSUFFZ0JDQUhJQUlRR2lJRUlBZ29BaVJIQkVBZ0FrRUJRWllTUVFBUUQwRUFEQVlMSUFBZ0FDZ0NFQ0FFSUFJZ0JTZ0NDQkVCQUVVRVFDQUNRUUZCcUJKQkFCQVBRUUFNQmdzZ0FTa0RPQ0VRSUFnb0FpUWhEQUpBSUFBb0FzZ0JJZ1VvQWhnaUJrRUJhaUlISUFVb0FpQWlCRTBFUUNBRktBSWNJUVFNQVFzZ0JRSi9JQVN6UXdBQXlFS1NJZzlEQUFDQVQxMGdEME1BQUFBQVlIRUVRQ0FQcVF3QkMwRUFDeUlFTmdJZ0lBVW9BaHdnQkVFWWJCQVhJZ1JGRFFVZ0JTQUVOZ0ljSUFVb0FoZ2lCa0VCYWlFSEN5QUVJQVpCR0d4cUlnUWdERUVFYWpZQ0VDQUVJQkNuSUF4clFRUnJyRGNEQ0NBRUlBTTdBUUFnQlNBSE5nSVlJQUVnQUNnQ0VFRUNJQUlRR2tFQ1J3UkFJQUpCQVVHV0VrRUFFQTlCQUF3R0MwRUJJQW9nQTBIYy9nTkdHeUVLUVFFZ0N5QURRZEwrQTBZYklRdEJBU0FOSUFOQjBmNERSaHNoRFNBQUtBSVFJQWhCS0dwQkFoQVJJQWdvQWlnaUJFR1Evd05IRFFFTEN5QU5EUUVMSUFKQkFVR1lKRUVBRUE5QkFBd0NDeUFMUlFSQUlBSkJBVUhHSkVFQUVBOUJBQXdDQ3lBS1JRUkFJQUpCQVVIMEpFRUFFQTlCQUF3Q0MwRUFJUU5CQUNFTkl3QkJFR3NpQkNRQVFRRWhCd0pBSUFBdEFMd0JRUUZ4UlEwQUFrQWdBQ2dDY0NJTFJRMEFBa0FEUUNBQUtBSjBJQTFCQTNScUlnVW9BZ0FpQ2dSQUlBTWdCU2dDQkNJR2F5SUZRUUFnQXlBRlR4c2hCU0FESUFaSkJFQWdCaUFEYXlFTElBTWdDbW9oQ2dOQUlBdEJCRWtFUUVHT0t5RUREQVVMSUFvZ0JFRU1ha0VFRUJFZ0JDZ0NEQ0lEUVg5eklBbEpCRUJCOUNvaEF3d0ZDeUFESUF0QkJHc2lCbXNnQlNBRElBWkxJZ3diSVFVZ0F5QUphaUVKSUFZZ0Eyc2hDeUFLUVFBZ0F5QU1HMnBCQkdvaENpQURJQVpKRFFBTElBQW9BbkFoQ3dzZ0JTRURDeUFOUVFGcUlnMGdDMGtOQUFzZ0EwVU5BVUVBSVFjZ0FrRUJRZWtXUVFBUUR3d0NDMEVBSVFjZ0FrRUJJQU5CQUJBUERBRUxJQUFnQ1JBVUlnTTJBb2dCSUFORkJFQkJBQ0VISUFKQkFVRytJRUVBRUE4TUFRc2dBQ0FKTmdKOElBQW9BblFoQmdKQUlBQW9BbkFpQ2dSQVFRQWhDVUVBSVFOQkFDRUZBMEFnQmlBRlFRTjBJZzFxSWd3b0FnQWlDd1JBSUFBb0FvZ0JJQU5xSVFvQ2Z5QU1LQUlFSWdZZ0NVMEVRQ0FLSUFzZ0JoQVNHaUFESUFacUlRTWdDU0FHYXd3QkN5QUtJQXNnQ1JBU0dpQURJQWxxSVFNZ0JpQUpheUlHQkVBZ0NTQUxhaUVKQTBBZ0JrRUVTUTBHSUFrZ0JFRUlha0VFRUJFZ0NVRUVhaUVKSUFBb0FvZ0JJQU5xSVFvZ0JrRUVheUlHSUFRb0FnZ2lDMGtFUUNBS0lBa2dCaEFTR2lBRElBWnFJUU1nQkNnQ0NDQUdhd3dEQ3lBS0lBa2dDeEFTR2lBRUtBSUlJZ29nQTJvaEF5QUpJQXBxSVFrZ0JpQUtheUlHRFFBTEMwRUFDeUVKSUFBb0FuUWdEV29vQWdBUUVDQUFLQUowSWdZZ0RXcENBRGNDQUNBQUtBSndJUW9MSUFWQkFXb2lCU0FLU1EwQUN5QUFLQUo4SVFrZ0FDZ0NpQUVoQXdzZ0FDQUpOZ0tRQVNBQUlBTTJBbmdnQUVFQU5nSndJQVlRRUNBQVFRQTJBblFNQVF0QkFDRUhJQUpCQVVHT0swRUFFQThMSUFSQkVHb2tBQ0FIUlFSQUlBSkJBVUdQUFVFQUVBOUJBQXdDQ3lBQ1FRUkI5OVlBUVFBUUR5QUFLQUxJQVNBQktRTTRRdjcvLy84UGZFTC8vLy8vRDRNM0F3Z2dBRUVJTmdJSVFRRU1BUXNnQlNnQ0hCQVFJQVZCQURZQ0lDQUZRZ0EzQXhnZ0FrRUJRYWtkUVFBUUQwRUFDeUVPSUFoQk1Hb2tBQ0FPQ3h3QUlBQW9BZ2hGSUFBb0FzQUJRUUJISUFBb0FzUUJRUUJIY1hFTEJBQkJBQXNQQUNBQUJFQWdBQ0FCTmdLNEFRc0xqd0VCQkg4Z0FDZ0NHQ0lCQkVBZ0FDZ0NIQ0lEUVRSdUlRUWdBMEUwVHdSL1FRQWhBd05BSUFFb0FnQWlBZ1JBSUFKQkFXc1FFQ0FCUVFBMkFnQUxJQUVvQWdRaUFnUkFJQUlRRUNBQlFRQTJBZ1FMSUFFb0FnZ2lBZ1JBSUFJUUVDQUJRUUEyQWdnTElBRkJOR29oQVNBRFFRRnFJZ01nQkVjTkFBc2dBQ2dDR0FVZ0FRc1FFQ0FBUVFBMkFoZ0xDNFlCQVFSL0lBQW9BaGdpQVFSQUlBQW9BaHdpQWtIQUFFOEVmeUFDUVFaMklRUkJBQ0VDQTBBZ0FTZ0NBQ0lEQkVBZ0F4QVFJQUZCQURZQ0FBc2dBU2dDQkNJREJFQWdBeEFRSUFGQkFEWUNCQXNnQVNnQ1BCQVFJQUZCQURZQ1BDQUJRVUJySVFFZ0FrRUJhaUlDSUFSSERRQUxJQUFvQWhnRklBRUxFQkFnQUVFQU5nSVlDd3MvQVFGL0lBQUVRQ0FBS0FKMElnRUVRQ0FCRUJBZ0FFRUFOZ0owQ3lBQUtBSjRJZ0VFUUNBQkVCQWdBRUVBTmdKNEN5QUFLQUtVQVJBUUlBQVFFQXNMd2FZRkJGeC9BbnNHZmdGOUl3QkI0QUJySWlNa0FDQUFLQUlJSVJvQ1FBSkFBa0FDUUNBQUtBSUFSUVJBSUJvZ0dpZ0NFQ0FhS0FJSWF5QWFLQUlVSUJvb0FneHJiRUVDZENJR0VCZ2lBellDUENBRFJRUkFJQUFvQWlRYUlBQW9BaUJCQVVIUlBFRUFFQThnQUNnQ0pCb2dBRUVjYWlFUURBTUxJQU5CQUNBR0VCVWFEQUVMSUJvb0Fqd2lBMFVOQUNBREVCQWdHa0VBTmdJOEN5QUFLQUlRSWpJb0Fod2dNaWdDR0VHWUFXeHFJZ05CbUFGcktBSUFJVFVnQTBHUUFXc29BZ0FoTmlBQUtBSVVJUzhnQUNnQ0RDRXdJQUFvQWdRaE55QUFLQUljS0FJQVJRMENJQUJCSEdvaEVBSkFBbjlCQUNBQktBSUVJZ05CQUV3TkFCb2dBU2dDQUNFR0FrQURRQ0FHSUFkQkRHeHFJZ1FvQWdCRkRRRWdCMEVCYWlJSElBTkhEUUFMUVFBTUFRc2dCQ2dDQkFzaUJBMEFRUUZCbkFFUUV5SUVSUVJBSUFBb0FpQkJBVUdRTUVFQUVBOE1BZ3NnQkVFQU5nS01BU0FCS0FJRUlnTkIvLy8vL3dkSEJIOENmeUFCS0FJQUlRWWdBMEVBU2dSQUEwQWdCaUFKUVF4c2FpSUhLQUlBUlFSQUlBY29BZ2dpQXdSL0lBY29BZ1FnQXhFQ0FDQUJLQUlBQlNBR0N5QUpRUXhzYWlJQlFRODJBZ2dnQVNBRU5nSUVRUUVNQXdzZ0NVRUJhaUlKSUFOSERRQUxDMEVBSUFZZ0EwRU1iRUVNYWhBWElnTkZEUUFhSUFFZ0F6WUNBQ0FESUFFb0FnUWlCa0VNYkdvaUEwRVBOZ0lJSUFNZ0JEWUNCQ0FEUVFBMkFnQWdBU0FHUVFGcU5nSUVRUUVMQlVFQUN3MEFJQUFvQWlCQkFVR01QMEVBRUE4Z0JDZ0NkQ0lCQkVBZ0FSQVFJQVJCQURZQ2RBc2dCQ2dDZUNJQkJFQWdBUkFRSUFSQkFEWUNlQXNnQkNnQ2xBRVFFQ0FFRUJBTUFRc2dCQ0FBS0FJWU5nS1FBU0FBS0FJb0lTc2dBQ2dDSkNFaElBQW9BaUFoSFNBdktBS29CaUVSSURBb0FoQWhBUUpBQWtBZ0x5Z0NFQ0lXUWNBQWNRUkFJQlloQ2lNQVFiQUNheUlQSkFBQ1FDQVJCRUFnSVFSQVFRQWhCeUFkUVFGQmdSaEJBQkFQREFJTFFRQWhCeUFkUVFGQmdSaEJBQkFQREFFTElBUW9BblFoQndKQUFrQWdHaWdDRkNBYUtBSU1heUlESUJvb0FoQWdHaWdDQ0dzaUJtd2lBU0FFS0FLRUFVc0VRQ0FIRUJBZ0JDQUJRUUowSWhFUUdDSUhOZ0owSUFkRkJFQkJBQ0VIREFRTElBUWdBVFlDaEFFTUFRc2dCMFVOQVNBQlFRSjBJUkVMSUFkQkFDQVJFQlVhQ3lBRUtBSjRJUWNDUUNBRUtBS0lBVUhQRkVzTkFDQUhFQkFnQkVIQTBnQVFHQ0lITmdKNElBY05BRUVBSVFjTUFRc2dCRUhRRkRZQ2lBRWdCMEVBUWNEU0FCQVZHaUFFSUFNMkFvQUJJQVFnQmpZQ2ZDQWFLQUlZSWdKRkJFQkJBU0VIREFFTElCb29BaHdoRFVFQklRY0NRQUpBQWtBQ1FBSkFJQm9vQWpRaUF3UkFJQm9vQWdRaENVRUFJUWRCQUNFQkFrQWdBMEVFVHdSQUlBTkJmSEVoQVFOQUlBa2dDRUVEZEdvaUJrRWNhaUFHUVJScUlBWkJER29nQnYwSkFnVDlWZ0lBQWYxV0FnQUMvVllDQUFNZ1h2MnVBU0ZlSUFoQkJHb2lDQ0FCUncwQUN5QmVJRjRnWHYwTkNBa0tDd3dORGc4QUFRSURBQUVDQS8ydUFTSmVJRjRnWHYwTkJBVUdCd0FCQWdNQUFRSURBQUVDQS8ydUFmMGJBQ0VISUFFZ0EwWU5BUXNEUUNBSklBRkJBM1JxS0FJRUlBZHFJUWNnQVVFQmFpSUJJQU5IRFFBTEN5QURRUUZHQkVBZ0JDZ0NrQUZGRFFVTElBY2dCQ2dDbUFGTkRRRWdCQ2dDbEFFZ0J4QVhJaEVOQWtFQUlRY01CZ3NnQkNnQ2tBRkZEUVVMSUFRb0FwUUJJaEVOQVVFQUlRY01CQXNnQkNBSE5nS1lBU0FFSUJFMkFwUUJDeUFhS0FJMFJRUkFRUUFoQnd3Q0N5QWFLQUlFSVFoQkFDRUhRUUFoQVFOQUlBY2dFV29nQ0NBQlFRTjBJZ05xSWdZb0FnQWdCaWdDQkJBU0dpQWFLQUlFSWdnZ0Eyb29BZ1FnQjJvaEJ5QUJRUUZxSWdFZ0dpZ0NORWtOQUFzTUFRc2dHaWdDQkNnQ0FDRVJDMEVBSVFGQkFDRUlBbjlCQUNBYUtBSW9JZ05GRFFBYUlCb29BZ0FpQmlnQ0NDRUlRUUFnQTBFQlJnMEFHaUFHS0FJZ0N5RURJQUlnRFdzaFJRSkFJQU1nQ0dvaUNFVUVRRUVBSVFrTUFRdEJBU0VCSUJvb0FnQWlBeWdDQUNFRlFRQWhDU0FJUVFGR0JFQkJBQ0VCREFFTElBTW9BaGdoQ1FzZ1JVRUJhaUVXSUFRb0FuUWhEaUFFS0FKNElSUWdHaWdDRENFU0lCb29BaFFoR0NBYUtBSUlJU1FnR2lnQ0VDRXJBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUZGRFFBZ0NRMEFJQ0ZGRFFFZ0hVRUNRYUhRQUVFQUVBOUJBU0VJREFJTElBaEJCRWtOQVNBaEJFQWdEeUFJTmdKd0lCMUJBVUg4eGdBZ0QwSHdBR29RRHd3SUN5QVBJQWcyQW1BZ0hVRUJRZnpHQUNBUFFlQUFhaEFQUVFBaEJ3d0lDeUFkUVFKQm9kQUFRUUFRRHlBYUtBSVlJZ0ZCSGtzTkFVRUJJUXdnQVNBV1R3MEREQVVMSUJvb0FoZ2lBVUVlVFEwQklDRkZEUUFnRHlBQk5nSWdJQjFCQVVHYjJ3QWdEMEVnYWhBUERBVUxJQThnQVRZQ0FDQWRRUUZCbTlzQUlBOFFEMEVBSVFjTUJRc2dBU0FXU1EwQklBaEJBa2tFUUNBSUlRd01BUXNnQVNBV1J3UkFJQWdoREF3QkMwRUJJUXhCa01jQkxRQUFEUUFnSVVVRVFFR1F4d0ZCQVRvQUFDQVBJQWcyQWtBZ0hVRUNRYWJNQUNBUFFVQnJFQThNQVF0QmtNY0JMUUFBUlFSQVFaREhBVUVCT2dBQUlBOGdDRFlDVUNBZFFRSkJwc3dBSUE5QjBBQnFFQThMQ3dKQUFrQWdCVUVDU1EwQUlBVWdCMHNOQUNBRklBbHFJQWRORFFFTElDRUVRRUVBSVFjZ0hVRUJRY0xHQUVFQUVBOE1CUXRCQUNFSElCMUJBVUhDeGdCQkFCQVBEQVFMQWtBQ1FDQUZJQkZxSWhOQkFXc3RBQUJCQkhRZ0UwRUNheTBBQUVFUGNYSWlCa0VDU1EwQUlBVWdCa2dOQUNBR1FmQWZTUTBCQ3lBaEJFQkJBQ0VISUIxQkFVSFc4Z0JCQUJBUERBVUxRUUFoQnlBZFFRRkIxdklBUVFBUUR3d0VDeUFhS0FJY0lTWWdEMEVBTmdLUUFpQVBRUUEyQXBnQ0lBOUNBRGNEaUFJZ0QwSUFOd09vQWlBUFFnQTNBcHdDSUE4Z0JrRUJheUlITmdLVUFpQVBJQVVnRVdvZ0Jtc2lBVFlDZ0FKQy93RWhZQ0FHUVFKUEJFQWdBVEVBQUNGZ0MwRUlJUU1nRDBFSU5nS1FBaUFQSUFaQkFtc2lDRFlDbEFJZ0R5QmdRZytFSUdBZ0IwRUJSaHNpWURjRGlBSWdEeUFCSUFaQkFVcHFJZ2MyQW9BQ0lBOGdZRUwvQVZFaURUWUNtQUlDZndKQUlBRkJBM0VpQWtFRFJnMEFRdjhCSVdFZ0RRUkFRUUFnQnkwQUFFR1BBVXNOQWhvTElBWkJBMDRFUUNBSE1RQUFJV0VMSUE4Z0JrRURheUlOTmdLVUFpQVBRUTlCRUNCZ1F2OEJVU0lMR3lJRE5nS1FBaUFQSUFjZ0JrRUNTbW9pQVRZQ2dBSWdEeUJoUWcrRUlHRWdDRUVCUmhzaVlVTC9BVkUyQXBnQ0lBOGdZRUlIUWdnZ0N4dUdJR0dFSW1BM0E0Z0NJQUpCQWtZTkFDQmhRdjhCVVFSQVFRQWdBUzBBQUVHUEFVc05BaG9MUXY4QklXSWdCa0VFVGdSQUlBRXhBQUFoWWdzZ0R5QUdRUVJySWdjMkFwUUNJQThnQVNBR1FRTkthaUlCTmdLQUFpQVBJR0pDRDRRZ1lpQU5RUUZHR3lKaVF2OEJVVFlDbUFJZ0R5QURRUWRCQ0NCaFF2OEJVU0lJRzJvaUF6WUNrQUlnRHlCZ1FnZENDQ0FJRzRZZ1lvUWlZRGNEaUFJZ0FrRUJSZzBBUXY4QklXRWdZa0wvQVZFRVFFRUFJQUV0QUFCQmp3RkxEUUlhQ3lBR1FRVk9CRUFnQVRFQUFDRmhDeUFQSUFaQkJXczJBcFFDSUE4Z0FTQUdRUVJLYWpZQ2dBSWdEeUJoUWcrRUlHRWdCMEVCUmhzaVlVTC9BVkUyQXBnQ0lBOGdBMEVIUVFnZ1lrTC9BVkVpQVJ0cUlnTTJBcEFDSUE4Z1lFSUhRZ2dnQVJ1R0lHR0VJbUEzQTRnQ0N5QVBJR0JCd0FBZ0EydXRoamNEaUFKQkFRdEZCRUFnSVFSQVFRQWhCeUFkUVFGQmc5VUFRUUFRRHd3RkMwRUFJUWNnSFVFQlFZUFZBRUVBRUE4TUJBc2dLeUFrYXlFVklBOGdCa0VDYXlJTE5nTDBBU0FQSUFVZ0VXb2lBa0VEYXlJRE5nTGdBU0FQSUFKQkFtc3RBQUFpR1VHUEFVc2lEVFlDK0FFZ0R5QVpRUVIyclNKZ053UG9BU0FQUVFOQkJDQmdRZ2VEUWdkUkd5SUJOZ0x3QVNBRFFRTnhRUUZxSWdjZ0N5QUhJQXRJR3lFSUFrQUNRQ0FHUVFKTUJFQWdEeUFMSUFocklnSTJBdlFCREFFTElBOGdBa0VFYXlJSE5nTGdBU0FQSUFNdEFBQWlGMEdQQVVzaURUWUMrQUVnRHlBWHJTSmhJQUd0aGlCZ2hDSmdOd1BvQVNBUFFRaEJCMEVJSUdGQy93Q0RRdjhBVVJzZ0dVR1BBVTBiSUFGcUlnRTJBdkFCQWtBZ0NFRUJSZ1JBSUFjaEF3d0JDeUFQSUFKQkJXc2lBellDNEFFZ0R5QUhMUUFBSWhsQmp3RkxJZzAyQXZnQklBOGdHYTBpWVNBQnJZWWdZSVFpWURjRDZBRWdEMEVJUVFkQkNDQmhRdjhBZzBML0FGRWJJQmRCandGTkd5QUJhaUlCTmdMd0FTQUlRUUpHRFFBZ0R5QUNRUVpySWdjMkF1QUJJQThnQXkwQUFDSVhRWThCU3lJTk5nTDRBU0FQSUJldEltRWdBYTJHSUdDRUltQTNBK2dCSUE5QkNFRUhRUWdnWVVML0FJTkMvd0JSR3lBWlFZOEJUUnNnQVdvaUFUWUM4QUVnQ0VFRFJnUkFJQWNoQXd3QkN5QVBJQUpCQjJzaUF6WUM0QUVnRHlBSE1RQUFJbUZDandGV0lnMDJBdmdCSUE4Z1lTQUJyWVlnWUlRaVlEY0Q2QUVnRDBFSVFRZEJDQ0JoUXY4QWcwTC9BRkViSUJkQmp3Rk5HeUFCYWlJQk5nTHdBUXNnRHlBTElBaHJJZ0kyQXZRQklBRkJJRXNOQVFzQ1FDQUNRUVJPQkVBZ0EwRURheWdDQUNFSElBOGdBa0VFYXpZQzlBRWdEeUFEUVFSck5nTGdBUXdCQ3lBQ1FRQk1CRUJCQUNFSERBRUxJQUpCQVhFaFJ3SkFJQUpCQVVZRVFFRVlJUWhCQUNFSERBRUxJQUpCL3YvLy93ZHhJUmRCR0NFSVFRQWhCMEVBSVFzRFFDQVBJQU5CQVdzaUh6WUM0QUVnQXkwQUFDRkdJQThnQTBFQ2F5SUROZ0xnQVNBUElBSkJBV3MyQXZRQklCOHRBQUFoSHlBUElBSkJBbXNpQWpZQzlBRWdSaUFJZENBSGNpQWZJQWhCQ0d0MGNpRUhJQWhCRUdzaENDQUxRUUpxSWdzZ0YwY05BQXNMSUVkRkRRQWdEeUFEUVFGck5nTGdBU0FETFFBQUlVZ2dEeUFDUVFGck5nTDBBU0JJSUFoMElBZHlJUWNMSUE4Z0IwSC9BWEVpQTBHUEFVczJBdmdCSUE5QkIwRUlJQWRCZ0lDQStBZHhRWUNBZ1BnSFJodEJDQ0FOR3lJQ1FRaEJCMEVJSUFkQmdJRDhBM0ZCZ0lEOEEwWWJJQWRCLy8vLy8zaE5HMm9pQ0VFSVFRZEJDQ0FIUVlEK0FYRkJnUDRCUmhzZ0IwRVFka0gvQVhFaURVR1BBVTBiYWlJTFFRaEJCMEVJSUFkQi93QnhRZjhBUmhzZ0IwRUlka0gvQVhFaUdVR1BBVTBiSUFGcWFqWUM4QUVnRHlBTklBSjBJQWRCR0haeUlCa2dDSFJ5SUFNZ0MzUnlyU0FCcllZZ1lJUTNBK2dCQ3lBUFFjQUJhaUFSSUFVZ0JtdEIvd0VRV3dKL1FRQWdERUVDU1EwQUdpQVBRYUFCYWlBVElBbEJBQkJiUVFBZ0RFRUNSZzBBR2tJQUlXQkNBQ0ZpSUE5QkFUWUNtQUVnRDBFQU5nS1FBU0FQUWdBM0E0Z0JJQThnQ1VFQmF5SUdOZ0tVQVNBUElBVWdFV29nQ1dvaUEwRUJheUlCTmdLQUFTQUJRUU54SVFVQ1FDQUpRUUJNQkVBZ0FTRUREQUVMSUE4Z0EwRUNheUlETmdLQUFTQUJNUUFBSVdBTElBOGdZRGNEaUFFZ0R5QmdRbzhCVmlJUk5nS1lBU0FQUVFkQkNDQmdRdjhBZzBML0FGRWJJZzAyQXBBQkFrQWdCVVVOQUNBUElBbEJBbXNpQWpZQ2xBRUNRQ0FKUVFKSUJFQWdBeUVIREFFTElBOGdBMEVCYXlJSE5nS0FBU0FETVFBQUlXSUxJQThnWWtLUEFWWWlFVFlDbUFFZ0R5QmlJQTJ0aGlCZ2hDSmhOd09JQVNBUFFRaEJCMEVJSUdKQy93Q0RRdjhBVVJzZ1lFS1BBVmdiSUExcUlnMDJBcEFCSUFWQkFVWUVRQ0FISVFNZ1lTRmdJQVloQ1NBQ0lRWU1BUXNnRHlBSlFRTnJJZ2cyQXBRQkFrQWdDVUVEU0FSQUlBY2hBUXdCQ3lBUElBZEJBV3NpQVRZQ2dBRWdCekVBQUNGakN5QVBJR05DandGV0loRTJBcGdCSUE4Z1l5QU5yWVlnWVlRaVlEY0RpQUVnRDBFSVFRZEJDQ0JqUXY4QWcwTC9BRkViSUdKQ2p3RllHeUFOYWlJTk5nS1FBU0FGUVFKR0JFQWdBU0VESUFJaENTQUlJUVlNQVFzZ0R5QUpRUVJySWdZMkFwUUJRZ0FoWWdKQUlBbEJCRWdFUUNBQklRTU1BUXNnRHlBQlFRRnJJZ00yQW9BQklBRXhBQUFoWWdzZ0R5QmlRbzhCVmlJUk5nS1lBU0FQSUdJZ0RhMkdJR0NFSW1BM0E0Z0JJQTlCQ0VFSFFRZ2dZa0wvQUlOQy93QlJHeUJqUW84QldCc2dEV29pRFRZQ2tBRWdDQ0VKQ3lBTlFTQk5CRUFDUUNBSlFRVk9CRUFnQTBFRGF5Z0NBQ0VISUE4Z0NVRUZhellDbEFFZ0R5QURRUVJyTmdLQUFRd0JDMEVBSVFjZ0NVRUNTQTBBUVJnaENRTkFJQThnQTBFQmF5SUJOZ0tBQVNBRExRQUFJVWtnRHlBR1FRRnJJZ0kyQXBRQklFa2dDWFFnQjNJaEJ5QUdRUUZMSVVvZ0FTRURJQWxCQ0dzaENTQUNJUVlnU2cwQUN3c2dEeUFIUWY4QmNTSUJRWThCU3pZQ21BRWdEMEVIUVFnZ0IwR0FnSUQ0QjNGQmdJQ0ErQWRHRzBFSUlCRWJJZ05CQ0VFSFFRZ2dCMEdBZ1B3RGNVR0FnUHdEUmhzZ0IwSC8vLy8vZUUwYmFpSUdRUWhCQjBFSUlBZEJnUDRCY1VHQS9nRkdHeUFIUVJCMlFmOEJjU0lKUVk4QlRSdHFJZ0pCQ0VFSFFRZ2dCMEgvQUhGQi93QkdHeUFIUVFoMlFmOEJjU0lJUVk4QlRSc2dEV3BxTmdLUUFTQVBJQWtnQTNRZ0IwRVlkbklnQ0NBR2RISWdBU0FDZEhLdElBMnRoaUJnaERjRGlBRUxRUUVMSVRFZ0dDQVNheUVmSUJaQkFXb2hMQ0FVUVFBNkFNQVFJQlJCd0JCcUlRc2dEMEdBQW1vUUtDRUNJQlZCQUVvRVFDQW1RUUZySVJNZ0ZDRURJQXNoQ0VFQUlSRWdEaUVHUVFBaERRTkFJQTBoQlNBUlFRaDBJQTlCNEFGcUVDOUIvd0J4UVFGMGNrR2cvUUJxTHdFQUlRRUNRQ0FSRFFBZ0FVRUFJQUpCQW1zaUIwRi9SaHNoQVNBQ1FRRktCRUFnQnlFQ0RBRUxJQTlCZ0FKcUVDZ2hBZ3NnRHlrRDZBRWhaQ0FQS0FMd0FTRkxJQU1nQXlnQ0FDQUJRUVIySWhoQkEzRWdBVUVDZGtFd2NYSWdJblJ5SWhZMkFnQWdBVUVGZGtFSGNTQUJRUkJ4SWg1QkJIWnlJUkVnU3lBQlFRZHhJZ2RySVEwZ1pDQUhyWWdpWUtjaENVRUFJUWNnRlNBRlFRSnlTZ1JBSUJGQkNIUWdDVUgvQUhGQkFYUnlRYUQ5QUdvdkFRQWhCd0pBSUJFTkFDQUhRUUFnQWtFQ2F5SUpRWDlHR3lFSElBSkJBVW9FUUNBSklRSU1BUXNnRDBHQUFtb1FLQ0VDQ3lBSFFRUjJRUUZ4SUFkQkJYWkJCM0Z5SVJFZ0RTQUhRUWR4SWdscklRMGdZQ0FKcllnaVlLY2hDUXNnQXlBSFFRSjBRWUFHY1NBSFFUQnhjaUFpUVFScWRDQVdjallDQUFKQUlBZEJBblpCQW5FZ0FVRURka0VCY1hJaUYwRURSdzBBUVFSQkF5QUNRUUpySWhaQmYwWWJJUmNnQWtFQlNnUkFJQlloQWd3QkN5QVBRWUFDYWhBb0lRSUxBbjhnRjBVRVFDQVBRb0dBZ0lBUU53SjRRUUFNQVFzZ0YwRUNUUVJBSUE5QkFTQUpRUWR4UWRTZEFXb3RBQUFpRmtFRmRrRi9JQlpCQW5aQkIzRWlHWFJCZjNNZ0NTQVdRUU54SWdsMmNXcEJBV29pRmlBWFFRRkdJaGNiTmdKOElBOGdGa0VCSUJjYk5nSjRJQWtnR1dvTUFRc2dDU0FKUVFkeFFkU2RBV290QUFBaUZrRURjU0laZGlFSklCZEJBMFlFUUNBV1FRVjJRUUZxSVJjZ0dVRURSZ1JBSUE4Z0NVRUJjVUVDY2pZQ2ZDQVBJQmRCZnlBV1FRSjJRUWR4SWhaMFFYOXpJQWxCQVhaeGFqWUNlQ0FXUVFScURBSUxJQThnRnlBSklBbEJCM0ZCMUowQmFpMEFBQ0lKUVFOeEloSjJJaUJCZnlBV1FRSjJRUWR4SWhaMFFYOXpjV28yQW5nZ0QwRi9JQWxCQW5aQkIzRWlGM1JCZjNNZ0lDQVdkbkVnQ1VFRmRtcEJBV28yQW53Z0ZpQVphaUFTYWlBWGFnd0JDeUFQSUFrZ0NVRUhjVUhVblFGcUxRQUFJZ2xCQTNFaUVuWWlJRUYvSUJaQkFuWkJCM0VpRjNSQmYzTnhJQlpCQlhacVFRTnFOZ0o0SUE5QmZ5QUpRUUoyUVFkeEloWjBRWDl6SUNBZ0YzWnhJQWxCQlhacVFRTnFOZ0o4SUJJZ0dXb2dGMm9nRm1vTElRa0NRQ0FzSUE4b0FuZ2lHVThFUUNBUEtBSjhJaElnTEUwTkFRc2dJUVJBUVFBaEJ5QWRRUUZCbWZZQVFRQVFEd3dIQzBFQUlRY2dIVUVCUVpuMkFFRUFFQThNQmdzZ0R5QU5JQWxyTmdMd0FTQVBJR0FnQ2EySU53UG9BU0FIUWZBQmNTQVlRUTl4Y2tIL0FVSC9BU0FGUVFScUlnMGdGV3RCQVhSMklBMGdGVXdiSWdrZ0NVSFZBSEVnSDBFQlNoc2lDVUYvYzNFRVFDQWhCRUJCQUNFSElCMUJBVUd2MmdCQkFCQVBEQWNMUVFBaEJ5QWRRUUZCcjlvQVFRQVFEd3dHQ3dKQUFrQWdIZ1JBSUE5QndBRnFFQnNoRnlBUElBOG9BdEFCSUJrZ0FVRVRkRUVmZFdvaUZtczJBdEFCSUE4Z0R5a0R5QUVnRnEySU53UElBU0FYUVg4Z0ZuUkJmM054SUFGQkNIWkJBWEVnRm5SeVFRRnlRUUpxSUJOMElCZEJIM1J5SVJZTUFRdEJBQ0VXSUFsQkFYRkZEUUVMSUFZZ0ZqWUNBQXNDUUNBQlFTQnhCRUFnRDBIQUFXb1FHeUVYSUE4Z0R5Z0MwQUVnR1NBQlFSSjBRUjkxYWlJV2F6WUMwQUVnRHlBUEtRUElBU0FXcllnM0E4Z0JJQVlnRlVFQ2RHb2dGMEYvSUJaMFFYOXpjU0FCUVFsMlFRRnhJQlowY2tFQmNpSVdRUUpxSUJOMElCZEJIM1J5TmdJQUlBaEJJQ0FXWjJzaUZpQUlMUUFBUWY4QWNTSVhJQllnRjBzYlFZQUJjam9BQUF3QkN5QUpRUUp4UlEwQUlBWWdGVUVDZEdwQkFEWUNBQXNnQmtFRWFpRVhBa0FDUUNBQlFjQUFjUVJBSUE5QndBRnFFQnNoR0NBUElBOG9BdEFCSUJrZ0FVRVJkRUVmZFdvaUZtczJBdEFCSUE4Z0R5a0R5QUVnRnEySU53UElBU0FZUVg4Z0ZuUkJmM054SUFGQkNuWkJBWEVnRm5SeVFRRnlRUUpxSUJOMElCaEJIM1J5SVJZTUFRdEJBQ0VXSUFsQkJIRkZEUUVMSUJjZ0ZqWUNBQXNnQ0VFQU9nQUJBa0FnQVVHQUFYRUVRQ0FQUWNBQmFoQWJJUmdnRHlBUEtBTFFBU0FaSUFGQkVIUkJIM1ZxSWhack5nTFFBU0FQSUE4cEE4Z0JJQmF0aURjRHlBRWdGeUFWUVFKMGFpQVlRWDhnRm5SQmYzTnhJQUZCQzNaQkFYRWdGblJ5UVFGeUlnRkJBbW9nRTNRZ0dFRWZkSEkyQWdBZ0NFR2dmeUFCWjJzNkFBRU1BUXNnQ1VFSWNVVU5BQ0FYSUJWQkFuUnFRUUEyQWdBTElBWkJDR29oQVFKQUFrQWdCMEVRY1FSQUlBOUJ3QUZxRUJzaEdTQVBJQThvQXRBQklCSWdCMEVUZEVFZmRXb2lGbXMyQXRBQklBOGdEeWtEeUFFZ0ZxMklOd1BJQVNBWlFYOGdGblJCZjNOeElBZEJDSFpCQVhFZ0ZuUnlRUUZ5UVFKcUlCTjBJQmxCSDNSeUlSY01BUXRCQUNFWElBbEJFSEZGRFFFTElBRWdGellDQUFzQ1FDQUhRU0J4QkVBZ0QwSEFBV29RR3lFWklBOGdEeWdDMEFFZ0VpQUhRUkowUVI5MWFpSVdhellDMEFFZ0R5QVBLUVBJQVNBV3JZZzNBOGdCSUFFZ0ZVRUNkR29nR1VGL0lCWjBRWDl6Y1NBSFFRbDJRUUZ4SUJaMGNrRUJjaUlCUVFKcUlCTjBJQmxCSDNSeU5nSUFJQWhCSUNBQloyc2lBU0FJTFFBQlFmOEFjU0lXSUFFZ0Zrc2JRWUFCY2pvQUFRd0JDeUFKUVNCeFJRMEFJQUVnRlVFQ2RHcEJBRFlDQUFzZ0JrRU1haUVCQWtBQ1FDQUhRY0FBY1FSQUlBOUJ3QUZxRUJzaEdTQVBJQThvQXRBQklCSWdCMEVSZEVFZmRXb2lGbXMyQXRBQklBOGdEeWtEeUFFZ0ZxMklOd1BJQVNBWlFYOGdGblJCZjNOeElBZEJDblpCQVhFZ0ZuUnlRUUZ5UVFKcUlCTjBJQmxCSDNSeUlSY01BUXRCQUNFWElBbEJ3QUJ4UlEwQkN5QUJJQmMyQWdBTElBaEJBbW9pQ0VFQU9nQUFBa0FnQjBHQUFYRUVRQ0FQUWNBQmFoQWJJUllnRHlBUEtBTFFBU0FTSUFkQkVIUkJIM1ZxSWdsck5nTFFBU0FQSUE4cEE4Z0JJQW10aURjRHlBRWdBU0FWUVFKMGFpQVdRWDhnQ1hSQmYzTnhJQWRCQzNaQkFYRWdDWFJ5UVFGeUlnRkJBbW9nRTNRZ0ZrRWZkSEkyQWdBZ0NFR2dmeUFCWjJzNkFBQU1BUXNnQ1VHQUFVa05BQ0FCSUJWQkFuUnFRUUEyQWdBTElDSkJFSE1oSWlBRElBVkJCSEZxSVFNZ0JrRVFhaUVHSUEwZ0ZVZ05BQXNMSUFwQkNIRWhPQ0FVUWJBTWFpRW9JQlJCb0FocUlTa2dGRUdRQkdvaEpTQWZRUU5PQkVBZ0ZVRURiQ0U1SUJWQkFYUWhPaUFtUVFGcklTQkJBeUFtUVFKcklnRjBJUzFCQVNBQmRDRXVJQlZCQjJwQkFYWkIvUC8vL3dkeFFRUnFJVDBnS3lBa1FYOXphaUlCUVFOMklnTkJBblFpUGtFRWFpRTdJQU5CQVdvaVAwSDgvLy8vQTNFaUhFRUNkQ0U4SUJ4QkEzUWhFaUFCUVJoSklVQkJBaUVaQTBBZ0dTRVRJQXN0QUFBaEZpQUxRUUE2QUFBZ0lrRnZjVUVDY3lFaUFrQWdGVUVBVEFSQUlCTkJBbW9oR1F3QkN5QWxJQlFnRTBFRWNSc2hFU0FUUVFKcUlSa2dEaUFUSUJWc1FRSjBhaUVJUVFBaENpQUxJUVpCQUNFTkEwQWdEU0VGSUFZdEFBRkJCWFpCQkhFZ0NpQVdRUWQyY25JaUEwRUlkQ0FQUWVBQmFoQXZRZjhBY1VFQmRISkJvSTBCYWk4QkFDRUJBa0FnQXcwQUlBRkJBQ0FDUVFKcklnTkJmMFliSVFFZ0FrRUJTZ1JBSUFNaEFnd0JDeUFQUVlBQ2FoQW9JUUlMSUE4cEErZ0JJV1VnRHlnQzhBRWhUQ0FSSUJFb0FnQWdBVUVFZGtFRGNTQUJRUUoyUVRCeGNpQWlkSElpQ1RZQ0FDQUJRY0FBY1NJcVFRVjJJQUZCZ0FGeElpZEJCblp5SVFvZ1RDQUJRUWR4SWdOcklSY2daU0FEcllnaVlLY2hEVUVBSVJnQ1FDQVZJQVZCQW5KTUJFQkJBQ0VIREFFTElBb2dCaTBBQWtFRmRrRUVjU0FHTFFBQlFRZDJjbklpQTBFSWRDQU5RZjhBY1VFQmRISkJvSTBCYWk4QkFDRUhBa0FnQXcwQUlBZEJBQ0FDUVFKcklnTkJmMFliSVFjZ0FrRUJTZ1JBSUFNaEFnd0JDeUFQUVlBQ2FoQW9JUUlMSUFkQkJYWWdCMEVHZG5KQkFuRWhDaUFYSUFkQkIzRWlBMnNoRnlCZ0lBT3RpQ0pncHlFTkN5QVJJQWRCQW5SQmdBWnhJQWRCTUhGeUlDSkJCR3AwSUFseU5nSUFRUUVoQ1VFQklRTUNRQ0FIUVFKMlFRSnhJQUZCQTNaQkFYRnlJaDVGRFFBZ0RTQU5RUWR4UWRTZEFXb3RBQUFpQTBFRGNTSU5kaUVKSUI1QkEwY0VRRUVCSUFsQmZ5QURRUUoyUVFkeEloaDBRWDl6Y1NBRFFRVjJha0VCYWlJRElCNUJBVVlpSGhzaENTQURRUUVnSGhzaEF5QU5JQmhxSVJnTUFRc2dDVUVIY1VIVW5RRnFMUUFBSWg1QkEzRWlNeUFOSUFOQkFuWkJCM0VpRzJwcUlCNUJBblpCQjNFaURXb2hHQ0FKSUROMklnbEJmeUFiZEVGL2MzRWdBMEVGZG1wQkFXb2hBMEYvSUExMFFYOXpJQWtnRzNaeElCNUJCWFpxUVFGcUlRa0xJQThnRnlBWWF6WUM4QUVnRHlCZ0lCaXRpRGNENkFFZ0FVSHdBWEVpRFNBTlFRRnJjUVJBSUFNZ0ZrSC9BSEVpRmlBR0xRQUJRZjhBY1NJWElCWWdGMHNiSWhaQkFtc2lGMEVBSUJZZ0YwOGJhaUVEQ3lBSFFmQUJjU0lYSUJkQkFXdHhCRUFnQ1NBR0xRQUJRZjhBY1NJV0lBWXRBQUpCL3dCeEloZ2dGaUFZU3hzaUZrRUNhMEVBSUJaQkFrc2JhaUVKQ3lBRElDeE5JQWtnTEUxeFJRUkFJQ0VFUUVFQUlRY2dIVUVCUWYzMkFFRUFFQThNQ1F0QkFDRUhJQjFCQVVIOTlnQkJBQkFQREFnTElBWXRBQUloRmlBR1FRQTdBQUVnRnlBTlFRUjJja0gvQVVIL0FTQUZRUVJxSWcwZ0ZXdEJBWFIySUEwZ0ZVd2JJaGRCMVFCeElCY2dHU0FmU2hzaUdFRi9jM0VFUUNBaEJFQkJBQ0VISUIxQkFVR3YyZ0JCQUJBUERBa0xRUUFoQnlBZFFRRkJyOW9BUVFBUUR3d0lDd0pBQWtBZ0FVRVFjUVJBSUE5QndBRnFFQnNoSGlBUElBOG9BdEFCSUFNZ0FVRVRkRUVmZFdvaUYyczJBdEFCSUE4Z0R5a0R5QUVnRjYySU53UElBU0FlUVg4Z0YzUkJmM054SUFGQkNIWkJBWEVnRjNSeVFRRnlRUUpxSUNCMElCNUJIM1J5SVJjTUFRdEJBQ0VYSUJoQkFYRkZEUUVMSUFnZ0Z6WUNBQXNDUUNBQlFTQnhCRUFnRDBIQUFXb1FHeUVlSUE4Z0R5Z0MwQUVnQXlBQlFSSjBRUjkxYWlJWGF6WUMwQUVnRHlBUEtRUElBU0FYcllnM0E4Z0JJQWdnRlVFQ2RHb2dIa0YvSUJkMFFYOXpjU0FCUVFsMlFRRnhJQmQwY2tFQmNpSVhRUUpxSUNCMElCNUJIM1J5TmdJQUlBWkJJQ0FYWjJzaUZ5QUdMUUFBUWY4QWNTSWVJQmNnSGtzYlFZQUJjam9BQUF3QkN5QVlRUUp4UlEwQUlBZ2dGVUVDZEdwQkFEWUNBQXNnQ0VFRWFpRWVBa0FDUUNBcUJFQWdEMEhBQVdvUUd5RWJJQThnRHlnQzBBRWdBeUFCUVJGMFFSOTFhaUlYYXpZQzBBRWdEeUFQS1FQSUFTQVhyWWczQThnQklCdEJmeUFYZEVGL2MzRWdBVUVLZGtFQmNTQVhkSEpCQVhKQkFtb2dJSFFnRzBFZmRISWhGd3dCQzBFQUlSY2dHRUVFY1VVTkFRc2dIaUFYTmdJQUN3SkFJQ2NFUUNBUFFjQUJhaEFiSVJjZ0R5QVBLQUxRQVNBRElBRkJFSFJCSDNWcUlnTnJOZ0xRQVNBUElBOHBBOGdCSUFPdGlEY0R5QUVnSGlBVlFRSjBhaUFYUVg4Z0EzUkJmM054SUFGQkMzWkJBWEVnQTNSeVFRRnlJZ0ZCQW1vZ0lIUWdGMEVmZEhJMkFnQWdCa0dnZnlBQloyczZBQUVNQVFzZ0dFRUljVVVOQUNBZUlCVkJBblJxUVFBMkFnQUxJQWhCQ0dvaEFRSkFBa0FnQjBFUWNRUkFJQTlCd0FGcUVCc2hGeUFQSUE4b0F0QUJJQWtnQjBFVGRFRWZkV29pQTJzMkF0QUJJQThnRHlrRHlBRWdBNjJJTndQSUFTQVhRWDhnQTNSQmYzTnhJQWRCQ0haQkFYRWdBM1J5UVFGeVFRSnFJQ0IwSUJkQkgzUnlJUU1NQVF0QkFDRURJQmhCRUhGRkRRRUxJQUVnQXpZQ0FBc0NRQ0FIUVNCeEJFQWdEMEhBQVdvUUd5RVhJQThnRHlnQzBBRWdDU0FIUVJKMFFSOTFhaUlEYXpZQzBBRWdEeUFQS1FQSUFTQURyWWczQThnQklBRWdGVUVDZEdvZ0YwRi9JQU4wUVg5emNTQUhRUWwyUVFGeElBTjBja0VCY2lJQlFRSnFJQ0IwSUJkQkgzUnlOZ0lBSUFaQklDQUJaMnNpQVNBR0xRQUJRZjhBY1NJRElBRWdBMHNiUVlBQmNqb0FBUXdCQ3lBWVFTQnhSUTBBSUFFZ0ZVRUNkR3BCQURZQ0FBc2dDRUVNYWlFQkFrQUNRQ0FIUWNBQWNRUkFJQTlCd0FGcUVCc2hGeUFQSUE4b0F0QUJJQWtnQjBFUmRFRWZkV29pQTJzMkF0QUJJQThnRHlrRHlBRWdBNjJJTndQSUFTQVhRWDhnQTNSQmYzTnhJQWRCQ25aQkFYRWdBM1J5UVFGeVFRSnFJQ0IwSUJkQkgzUnlJUU1NQVF0QkFDRURJQmhCd0FCeFJRMEJDeUFCSUFNMkFnQUxJQVpCQW1vaEJnSkFJQWRCZ0FGeEJFQWdEMEhBQVdvUUd5RVhJQThnRHlnQzBBRWdDU0FIUVJCMFFSOTFhaUlEYXpZQzBBRWdEeUFQS1FQSUFTQURyWWczQThnQklBRWdGVUVDZEdvZ0YwRi9JQU4wUVg5emNTQUhRUXQyUVFGeElBTjBja0VCY2lJQlFRSnFJQ0IwSUJkQkgzUnlOZ0lBSUFaQm9IOGdBV2RyT2dBQURBRUxJQmhCZ0FGSkRRQWdBU0FWUVFKMGFrRUFOZ0lBQ3lBaVFSQnpJU0lnRVNBRlFRUnhhaUVSSUFoQkVHb2hDQ0FOSUJWSURRQUxDd0pBSUF4QkFra05BQ0FUUVFKeFJRMEFJQmxCQkhFaEF3SkFBbjhDUUFKQUlERUVRQ0FVSUNVZ0F4c2hGa0VBSVJnZ0ZVRUFUQTBCSUE0Z0UwRUNheUFWYkVFQ2RHb2hFUU5BSUE5QmdBRnFFQzhoQjBFQUlRRWdGaWdDQUNJSUJFQWdFU0FZUVFKMGFpRUJRUUFoQ1VFUElRWURRQUpBSUFZZ0NIRkZEUUFnQmtHUm9zU0lBWEVpRFNBSWNRUkFJQUVnQVNnQ0FDQUhRWDl6UVFGeElDQjBjeUF1Y2pZQ0FDQUhRUUYySVFjTElBMUJBWFFnQ0hFRVFDQUJJQlZCQW5ScUlnVWdCU2dDQUNBSFFYOXpRUUZ4SUNCMGN5QXVjallDQUNBSFFRRjJJUWNMSUExQkFuUWdDSEVFUUNBQklEcEJBblJxSWdVZ0JTZ0NBQ0FIUVg5elFRRnhJQ0IwY3lBdWNqWUNBQ0FIUVFGMklRY0xJQTFCQTNRZ0NIRkZEUUFnQVNBNVFRSjBhaUlOSUEwb0FnQWdCMEYvYzBFQmNTQWdkSE1nTG5JMkFnQWdCMEVCZGlFSEN5QUJRUVJxSVFFZ0JrRUVkQ0VHSUFsQkFXb2lDVUVJUncwQUN5QUlhU0VCQ3lBV1FRUnFJUllnRHlBUEtBS1FBU0FCYXpZQ2tBRWdEeUFQS1FPSUFTQUJyWWczQTRnQklCaEJDR29pR0NBVlNBMEFDd3NnS1NBb0lBTWJJUVVnRkNBbElBTWJJUllnQTBVaEdDQVZRUUJNRFFOQkFDRURJRUFOQVNBRklCWWdPMnBKSUJZZ0JTQTdhaUlIU1hFTkFVRUFJQVVpQVNBV0lnWWdQbXBCQ0dwSklBWkJCR29nQjBseERRSWFJQVlnUEdvaEJpQUJJRHhxSVFIOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBaFhrRUFJUWNEUUNBRklBZEJBblFpQTJvaUNTQURJQlpxSWdQOUFBSUFJbDlCQlAydEFTQmZRUVQ5cXdFZ1hpQmYvUTBNRFE0UEVCRVNFeFFWRmhjWUdSb2JRUno5clFIOVVQMVFJRi85VUNKZS9Rc0NBQ0FKSUY0Z0EvMEFBZ1JCSFAyckFmMVFJbDVCQWYydEFmME1kM2QzZDNkM2QzZDNkM2QzZDNkM2QvMU9JRjVCQWYyckFmME03dTd1N3U3dTd1N3U3dTd1N3U3dTd2MU8vVkFnWHYxUUlGLzlULzBMQWdBZ1h5RmVJQWRCQkdvaUJ5QWNSdzBBQ3lBY0lEOUdEUU1nRWlFRElGNzlHd01NQWdzZ0EwVWhHQ0FwSUNnZ0F4c2hCUXdDQ3lBRklRRWdGaUVHUVFBTElRY0RRQ0FIUVJ4MklRa2dBU0FHS0FJQUlnZEJCSFlnQ1NBSFFRUjBjbklnQjNJaUNUWUNBQ0FCSUFrZ0JpZ0NCRUVjZEhJaUNVRUJka0gzN3QyN0IzRWdDVUVCZEVIdTNidjNmbkZ5SUFseUlBZEJmM054TmdJQUlBRkJCR29oQVNBR1FRUnFJUVlnQTBFSWFpSURJQlZJRFFBTEN5QVRRUVpKRFFCQkFDRUpRUUFoRVNBV0lRRWdLU0FvSUJnYkloc2hCeUFVSUNVZ0dCc2lGeUVHQWtBZ0ZVRUFUQ0lORFFBRFFDQUJRUVJxSVFNZ0J5Z0NBQ0VJSUFFb0FnQWhBU0FISURnRWZ5QUlCU0FCUVFSMElCRkJISFp5SUFGQkJIWnlJQU1vQWdCQkhIUnlJQUZ5UVFOMFFZaVJvc1I0Y1NBSWNnc2dCaWdDQUVGL2MzRTJBZ0FnQmtFRWFpRUdJQWRCQkdvaEJ5QUJJUkVnQXlFQklBbEJDR29pQ1NBVlNBMEFDeUFORFFBZ0RpQVRRUVpySUJWc1FRSjBhaUZCUVFBaEhpQVhJUkVEUUVFQUlRTWdHeWdDQUNJQkJFQWdGU0FlYXlGQ1FRQWhCMEVBSVFvRFFDQUhJVTBnRDBHZ0FXb1FHeUVIQWtBZ0NpQUtRUVJxSWdZZ1FpQUdJQjVxSUJWSUd5SXpUaUpEQkVCQkFDRUdEQUVMSUJFb0FnQkJmM01oS2lCQklBb2dIbkpCQW5ScUlSaEJBQ0VHUVE4Z0NpSUpRUUowSWtSMElnMGhDQU5BQWtBZ0FTQUljVVVOQUNBSVFaR2l4SWdCY1NJbklBRnhCRUFnQjBFQmNRUkFJQU1nSjNJaEEwRXlJQWxCQW5SMElDcHhJQUZ5SVFFTElBZEJBWFloQnlBR1FRRnFJUVlMSUFFZ0owRUJkQ0kwY1FSQUlBZEJBWEVFUUNBRElEUnlJUU1nQVVIMEFDQUpRUUowZENBcWNYSWhBUXNnQjBFQmRpRUhJQVpCQVdvaEJnc2dBU0FuUVFKMElqUnhCRUFnQjBFQmNRUkFJQU1nTkhJaEF5QUJRZWdCSUFsQkFuUjBJQ3B4Y2lFQkN5QUhRUUYySVFjZ0JrRUJhaUVHQ3lBQklDZEJBM1FpSjNGRkRRQWdCMEVCY1FSQUlBTWdKM0loQXlBQlFjQUJJQWxCQW5SMElDcHhjaUVCQ3lBR1FRRnFJUVlnQjBFQmRpRUhDeUFJUVFSMElRZ2dDVUVCYWlJSklETklEUUFMSUFNZ1JIWkIvLzhEY1VVTkFDQkREUUFEUUFKQUlBTWdEWEZGRFFBZ0RVR1Jvc1NJQVhFaUNTQURjUVJBSUJnZ0dDZ0NBQ0FIUVI5MGNpQXRjallDQUNBSFFRRjJJUWNnQmtFQmFpRUdDeUFKUVFGMElBTnhCRUFnR0NBVlFRSjBhaUlJSUFnb0FnQWdCMEVmZEhJZ0xYSTJBZ0FnQjBFQmRpRUhJQVpCQVdvaEJnc2dDVUVDZENBRGNRUkFJQmdnT2tFQ2RHb2lDQ0FJS0FJQUlBZEJIM1J5SUMxeU5nSUFJQWRCQVhZaEJ5QUdRUUZxSVFZTElBbEJBM1FnQTNGRkRRQWdHQ0E1UVFKMGFpSUpJQWtvQWdBZ0IwRWZkSElnTFhJMkFnQWdCa0VCYWlFR0lBZEJBWFloQndzZ0RVRUVkQ0VOSUJoQkJHb2hHQ0FLUVFGcUlnb2dNMGdOQUFzTElBOGdEeWdDc0FFZ0JtczJBckFCSUE4Z0R5a0RxQUVnQnEySU53T29BVUVCSVFkQkJDRUtJRTFCQVhGRkRRQUxJQnNnR3lnQ0JDQURRUnQyUVE1eElBTkJIWFp5SUFOQkhIWnlJQkVvQWdSQmYzTnhjallDQkFzZ0VTZ0NBQ0FEY2lJRFFRTjJRWkdpeElnQmNTSUJRUVIySUFGQkJIUnlJQUZ5SVFZZ0hnUkFJQVZCQkdzaUJ5QUhLQUlBSUJaQkJHc29BZ0JCZjNNZ0FVRWNkSEZ5TmdJQUN5QUZJQVVvQWdBZ0JpQVdLQUlBUVg5emNYSTJBZ0FnQlNBRktBSUVJQllvQWdSQmYzTWdBMEVmZG5GeU5nSUVJQnRCQkdvaEd5QVJRUVJxSVJFZ0JVRUVhaUVGSUJaQkJHb2hGaUFlUVFocUloNGdGVWdOQUFzTElCZEJBQ0E5RUJVYUN5QVpJQjlJRFFBTEN3SkFJQXhCQWtrTkFBSkFJQjlCQTNGQkFXc2lGa0VDU1NBeGNRUkFJQlZCQUV3TkFVRUJJQ1pCQW10MElRSWdEaUFmUWZ6Ly93ZHhJQlZzUVFKMGFpRVJJQ1VnRkNBZlFRUnhHeUVGSUNaQkFXc2hDRUVBSVFvZ0ZVRU1iQ0VNSUJWQkEzUWhDd05BSUE5QmdBRnFFQzhoQjBFQUlRRWdCU2dDQUNJREJFQWdFU0FLUVFKMGFpRUJRUThoQmtFQUlRa0RRQUpBSUFNZ0JuRkZEUUFnQmtHUm9zU0lBWEVpRFNBRGNRUkFJQUVnQVNnQ0FDQUhRWDl6UVFGeElBaDBjeUFDY2pZQ0FDQUhRUUYySVFjTElBMUJBWFFnQTNFRVFDQUJJQlZCQW5ScUloMGdIU2dDQUNBSFFYOXpRUUZ4SUFoMGN5QUNjallDQUNBSFFRRjJJUWNMSUExQkFuUWdBM0VFUUNBQklBdHFJaDBnSFNnQ0FDQUhRWDl6UVFGeElBaDBjeUFDY2pZQ0FDQUhRUUYySVFjTElBMUJBM1FnQTNGRkRRQWdBU0FNYWlJTklBMG9BZ0FnQjBGL2MwRUJjU0FJZEhNZ0FuSTJBZ0FnQjBFQmRpRUhDeUFCUVFScUlRRWdCa0VFZENFR0lBbEJBV29pQ1VFSVJ3MEFDeUFEYVNFQkN5QUZRUVJxSVFVZ0R5QVBLQUtRQVNBQmF6WUNrQUVnRHlBUEtRT0lBU0FCcllnM0E0Z0JJQXBCQ0dvaUNpQVZTQTBBQ3dzZ0ZrRUJTdzBBSUJWQkFFd05BQ0FsSUJRZ0gwRUVjU0lCR3lFSklDZ2dLU0FCR3lFQ1FRQWhBd0ovQWtBZ0t5QWtRWDl6YWlJQlFUaEpEUUFnQWlBSklBRkJBWFpCL1AvLy93ZHhJZ1pCQkdvaUIycEpJQWtnQWlBSGFpSUhTWEVOQUNBQ0lBWWdDV3BCQ0dwSklBbEJCR29nQjBseERRQWdBVUVEZGtFQmFpSU5RZnovLy84RGNTSUlRUU4wSVFNZ0NTQUlRUUowSWdGcUlRWWdBU0FDYWlFQi9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUlWNUJBQ0VIQTBBZ0FpQUhRUUowSWhacUloRWdDU0FXYWlJVy9RQUNBQ0pmUVFUOXJRRWdYMEVFL2FzQklGNGdYLzBOREEwT0R4QVJFaE1VRlJZWEdCa2FHMEVjL2EwQi9WRDlVQ0JmL1ZBaVh2MExBZ0FnRVNCZUlCYjlBQUlFUVJ6OXF3SDlVQ0plUVFIOXJRSDlESGQzZDNkM2QzZDNkM2QzZDNkM2QzZjlUaUJlUVFIOXF3SDlETzd1N3U3dTd1N3U3dTd1N3U3dTd1NzlUdjFRSUY3OVVDQmYvVS85Q3dJQUlGOGhYaUFIUVFScUlnY2dDRWNOQUFzZ0NDQU5SZzBDSUY3OUd3TU1BUXNnQWlFQklBa2hCa0VBQ3lFSEEwQWdCMEVjZGlFSklBRWdCaWdDQUNJSFFRUjJJQWtnQjBFRWRISnlJQWR5SWdrMkFnQWdBU0FKSUFZb0FnUkJISFJ5SWdsQkFYWkI5KzdkdXdkeElBbEJBWFJCN3QyNzkzNXhjaUFKY2lBSFFYOXpjVFlDQUNBQlFRUnFJUUVnQmtFRWFpRUdJQU5CQ0dvaUF5QVZTQTBBQ3dzZ0h5QWZRUUZxUVFOeGEwRURhMEVBSUI5QkJrb2JJaEVnSDA0TkFFRURJQ1pCQW10MElSa2dLeUFrUVg5emFpSUJRUU4ySWdOQkFuUWlLMEVFYWlFZElBTkJBV29pQTBIOC8vLy9BM0VpRWtFQ2RDRWhJQkpCQTNRaEZpQVZRUXhzSVN3Z0ZVRURkQ0V0SUFGQkdFa2hKaUFESUJKR0lSc0RRQUpBQWtBQ1FBSkFBbjhDUUNBZklCRnJJZ0ZCQVdzaUEwRURUd1JBUVg4aEZ5QUJRUVZJRFFVZ0ZVRUFUQTBHSUNVZ0ZDQVJRUVJ4SWdFYklRSWdLQ0FwSUFFYklRa2dPQVJBUVFBaEJpQW1EUVFnQWlBSklCMXFTU0FDSUIxcUlBbExjUTBFSUFJZ0lXb2hBU0FKSUNGcUlRY0RRQ0FKSUFaQkFuUWlBMm9pQ0NBSS9RQUNBQ0FDSUFOcS9RQUNBUDFQL1FzQ0FDQUdRUVJxSWdZZ0VrY05BQXNnRmlFR0lCc05CZ3dGQ3lBVUlDVWdBUnNoRFVFQUlRTWdKZzBCSUFrZ0RTQWRha2tnRFNBSklCMXFJZ0ZKY1EwQklBa2dEU0FyYWtFSWFra2dEVUVFYWlBQlNYRU5BU0FKSUFJZ0hXcEpJQUVnQWt0eERRRWdBaUFoYWlFSUlBa2dJV29oQVNBTklDRnFJUWY5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoWGtFQUlRWURRQ0FKSUFaQkFuUWlBMm9pQlNBRElBMXFJZ3o5QUFJQUlsOUJCUDJ0QVNCZlFRVDlxd0VnWGlCZi9RME1EUTRQRUJFU0V4UVZGaGNZR1JvYlFSejlyUUg5VVAxUUlBejlBQUlFUVJ6OXF3SDlVQ0JmL1ZCQkEvMnJBZjBNaUlpSWlJaUlpSWlJaUlpSWlJaUlpUDFPSUFYOUFBSUEvVkFnQWlBRGF2MEFBZ0Q5VC8wTEFnQWdYeUZlSUFaQkJHb2lCaUFTUncwQUN5QWJEUVVnRmlFRElGNzlHd01NQWdzZ0EwRUNkRUhjblFGcUtBSUFJUmNNQkFzZ0RTRUhJQWtoQVNBQ0lRaEJBQXNoQmdOQUlBWkJISFloQ1NBQklBRW9BZ0FnQnlnQ0FDSUdRUVIySUFrZ0JrRUVkSEp5SUFjb0FnUkJISFJ5SUFaeVFRTjBRWWlSb3NSNGNYSWdDQ2dDQUVGL2MzRTJBZ0FnQ0VFRWFpRUlJQUZCQkdvaEFTQUhRUVJxSVFjZ0EwRUlhaUlESUJWSURRQUxEQUlMSUFraEJ5QUNJUUVMQTBBZ0J5QUhLQUlBSUFFb0FnQkJmM054TmdJQUlBRkJCR29oQVNBSFFRUnFJUWNnQmtFSWFpSUdJQlZJRFFBTEN5QVZRUUJNRFFBZ0pTQVVJQkZCQkhFaUFSc2hDaUFvSUNrZ0FSc2hBaUFVSUNVZ0FSc2hFeUFwSUNnZ0FSc2hIaUFPSUJFZ0ZXeEJBblJxSVM1QkFDRUZBMEJCQUNFRElBSW9BZ0FnRjNFaUFRUkFJQlVnQldzaEtrRUFJUWRCQUNFTkEwQWdCeUZPSUE5Qm9BRnFFQnNoQndKQUlBMGdEVUVFYWlJR0lDb2dCU0FHYWlBVlNCc2lKRTRpSndSQVFRQWhCZ3dCQ3lBWElBb29BZ0JCZjNOeElSZ2dMaUFGSUExeVFRSjBhaUVMUVFBaEJrRVBJQTBpQ1VFQ2RDSWNkQ0lnSVFnRFFBSkFJQUVnQ0hGRkRRQWdDRUdSb3NTSUFYRWlJaUFCY1FSQUlBZEJBWEVFUUNBRElDSnlJUU5CTWlBSlFRSjBkQ0FZY1NBQmNpRUJDeUFIUVFGMklRY2dCa0VCYWlFR0N5QUJJQ0pCQVhRaU1YRUVRQ0FIUVFGeEJFQWdBeUF4Y2lFRElBRkI5QUFnQ1VFQ2RIUWdHSEZ5SVFFTElBZEJBWFloQnlBR1FRRnFJUVlMSUFFZ0lrRUNkQ0l4Y1FSQUlBZEJBWEVFUUNBRElERnlJUU1nQVVIb0FTQUpRUUowZENBWWNYSWhBUXNnQjBFQmRpRUhJQVpCQVdvaEJnc2dBU0FpUVFOMElpSnhSUTBBSUFkQkFYRUVRQ0FESUNKeUlRTWdBVUhBQVNBSlFRSjBkQ0FZY1hJaEFRc2dCa0VCYWlFR0lBZEJBWFloQndzZ0NFRUVkQ0VJSUFsQkFXb2lDU0FrU0EwQUN5QURJQngyUWYvL0EzRkZEUUFnSncwQUEwQUNRQ0FESUNCeFJRMEFJQ0JCa2FMRWlBRnhJZ2tnQTNFRVFDQUxJQXNvQWdBZ0IwRWZkSElnR1hJMkFnQWdCMEVCZGlFSElBWkJBV29oQmdzZ0NVRUJkQ0FEY1FSQUlBc2dGVUVDZEdvaUNDQUlLQUlBSUFkQkgzUnlJQmx5TmdJQUlBZEJBWFloQnlBR1FRRnFJUVlMSUFsQkFuUWdBM0VFUUNBTElDMXFJZ2dnQ0NnQ0FDQUhRUjkwY2lBWmNqWUNBQ0FIUVFGMklRY2dCa0VCYWlFR0N5QUpRUU4wSUFOeFJRMEFJQXNnTEdvaUNTQUpLQUlBSUFkQkgzUnlJQmx5TmdJQUlBWkJBV29oQmlBSFFRRjJJUWNMSUNCQkJIUWhJQ0FMUVFScUlRc2dEVUVCYWlJTklDUklEUUFMQ3lBUElBOG9BckFCSUFack5nS3dBU0FQSUE4cEE2Z0JJQWF0aURjRHFBRkJBU0VIUVFRaERTQk9RUUZ4UlEwQUN5QUNJQUlvQWdRZ0EwRWJka0VPY1NBRFFSMTJjaUFEUVJ4MmNpQUtLQUlFUVg5emNYSTJBZ1FMSUFvb0FnQWdBM0lpQTBFRGRrR1Jvc1NJQVhFaUFVRUVkaUFCUVFSMGNpQUJjaUVHSUFVRVFDQWVRUVJySWdjZ0J5Z0NBQ0FUUVFScktBSUFRWDl6SUFGQkhIUnhjallDQUFzZ0hpQWVLQUlBSUFZZ0V5Z0NBRUYvYzNGeU5nSUFJQjRnSGlnQ0JDQVRLQUlFUVg5eklBTkJIM1p4Y2pZQ0JDQUNRUVJxSVFJZ0NrRUVhaUVLSUI1QkJHb2hIaUFUUVFScUlSTWdCVUVJYWlJRklCVklEUUFMQ3lBUlFRUnFJaEVnSDBnTkFBc0xRUUVoQnlBZlFRQk1EUU1nRlVFQVRBMERJQlZCL1AvLy93ZHhJZ1pCQW5RaEFpQVZRUVJKSVFoQkFDRUpBMEFnRGlBSklCVnNRUUowYWlFREFrQUNRQ0FJQkVBZ0F5RUhRUUFoQVF3QkN5QUNJQU5xSVFkQkFDRUJBMEFnQXlBQlFRSjBhaUlOSUEzOUFBSUFJbDc5RFAvLy8zLy8vLzkvLy8vL2YvLy8vMy85VGlKZi9hRUJJRjhnWHYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwNS9WTDlDd0lBSUFGQkJHb2lBU0FHUncwQUN5QUdJZ0VnRlVZTkFRc0RRQ0FIUVFBZ0J5Z0NBQ0lEUWYvLy8vOEhjU0lOYXlBTklBTkJBRWdiTmdJQUlBZEJCR29oQnlBQlFRRnFJZ0VnRlVjTkFBc0xRUUVoQnlBSlFRRnFJZ2tnSDBjTkFBc01Bd3NnSVVVTkFDQVBJQm9vQWhnMkFqUWdEeUFXTmdJd0lCMUJBVUhjeHdBZ0QwRXdhaEFQREFFTElBOGdBVFlDRkNBUElCWTJBaEFnSFVFQlFkekhBQ0FQUVJCcUVBOUJBQ0VIREFFTFFRQWhCd3NnRDBHd0Ftb2tBQ0FIRFFFTUF3c2dCQ0FCUVFsMFFkQ3BBV28yQW13Q2Z5QUVLQUowSVFFQ1FBSkFJQm9vQWhBZ0dpZ0NDR3NpQlNBYUtBSVVJQm9vQWd4cklnbHNJZ01nQkNnQ2hBRkxCRUFnQVJBUUlBUWdBMEVDZEJBWUlnRTJBblJCQUNBQlJRMERHaUFFSUFNMkFvUUJEQUVMSUFGRkRRRUxJQUZCQUNBRFFRSjBFQlVhQ3lBRUtBSjRJUUVDUUNBRlFRSnFJZ1lnQ1VFRGFrRUNkaUlNUVFKcWJDSURJQVFvQW9nQlRRUkFJQU5CQW5RaENBd0JDeUFCRUJBZ0JDQURRUUowSWdnUUdDSUJOZ0o0SUFFTkFFRUFEQUVMSUFRZ0F6WUNpQUVnQVVFQUlBZ1FGUm9DUUNBR1JRMEFJQVFvQW5naUJ5RUJBa0FnQmtFRVR3UkFJQWNnQmtGOGNTSU5RUUowYWlFQlFRQWhDQU5BSUFjZ0NFRUNkR3I5REFBQUlFa0FBQ0JKQUFBZ1NRQUFJRW45Q3dJQUlBaEJCR29pQ0NBTlJ3MEFDeUFHSUExR0RRRUxBMEFnQVVHQWdJREpCRFlDQUNBQlFRUnFJUUVnRFVFQmFpSU5JQVpIRFFBTEN5QUhJQXhCQVdvZ0JteEJBblJxSVFOQkFDRU5Ba0FDUUNBR1FRUkpCRUFnQXlFQkRBRUxJQU1nQmtGOGNTSU5RUUowYWlFQlFRQWhDQU5BSUFNZ0NFRUNkR3I5REFBQUlFa0FBQ0JKQUFBZ1NRQUFJRW45Q3dJQUlBaEJCR29pQ0NBTlJ3MEFDeUFHSUExR0RRRUxBMEFnQVVHQWdJREpCRFlDQUNBQlFRUnFJUUVnRFVFQmFpSU5JQVpIRFFBTEN5QUpRUU54SWdGRkRRQWdCa1VOQUVHQWdJRElCRUdBZ0lEQUJFR0FnSUNBQkNBQlFRSkdHeUFCUVFGR0d5RUxJQWNnQmlBTWJFRUNkR29oQTBFQUlRMENRQ0FHUVFSSkJFQWdBeUVCREFFTElBTWdCa0Y4Y1NJTlFRSjBhaUVCSUF2OUVTRmZRUUFoQ0FOQUlBTWdDRUVDZEdvZ1gvMExBZ0FnQ0VFRWFpSUlJQTFIRFFBTElBWWdEVVlOQVFzRFFDQUJJQXMyQWdBZ0FVRUVhaUVCSUExQkFXb2lEU0FHUncwQUN3c2dCQ0FKTmdLQUFTQUVJQVUyQW54QkFRdEZEUUlnR2lnQ0hDQVJhaUlaUVI5T0JFQWdJVVVOQWlBaklCazJBaEFnSFVFQ1FkWEJBQ0FqUVJCcUVBOE1Bd3NnQkJCYVFRQWhBU0FFUWJDcEFUWUNaQ0FFUWRDZUFUWUNZQ0FFUWZDZUFUWUNIQUpBQWtBQ1FBSkFJQm9vQWpRaUIwRUJTdzBBSUFRb0FwQUJSUTBDSUFjTkFBd0JDeUFhS0FJRUlRTWdCMEVFVHdSQUlBZEJmSEVoQWtFQUlRWURRQ0FESUFaQkEzUnFJZ0ZCSEdvZ0FVRVVhaUFCUVF4cUlBSDlDUUlFL1ZZQ0FBSDlWZ0lBQXYxV0FnQURJRjc5cmdFaFhpQUdRUVJxSWdZZ0FrY05BQXNnWGlCZUlGNzlEUWdKQ2dzTURRNFBBQUVDQXdBQkFnUDlyZ0VpWGlCZUlGNzlEUVFGQmdjQUFRSURBQUVDQXdBQkFnUDlyZ0g5R3dBaEFTQUNJQWRHRFFFTEEwQWdBeUFDUVFOMGFpZ0NCQ0FCYWlFQklBSkJBV29pQWlBSFJ3MEFDd3NnQVVFQ2FpSURJQVFvQXBnQlN3UkFJQVFvQXBRQklBTVFGeUlHUlEwRklBUWdCallDbEFFZ0FTQUdha0VBT3dBQUlBUWdBellDbUFFZ0dpZ0NOQ0VIQ3lBRUtBS1VBU0VlSUFkRkRRRWdHaWdDQkNFR1FRQWhBa0VBSVFFRFFDQUNJQjVxSUFZZ0FVRURkQ0lEYWlJR0tBSUFJQVlvQWdRUUVob2dHaWdDQkNJR0lBTnFLQUlFSUFKcUlRSWdBVUVCYWlJQklCb29BalJKRFFBTERBRUxJQWRCQVVjTkFTQWFLQUlFS0FJQUlSNExJQm9vQWp3aUFRUkFJQVFvQW5RaExDQUVJQUUyQW5RTElCb29BaXdFUUNBV1FRaHhJU1VnQkVFY2FpRVBJQlpCQVhFaExTQVdRUUp4UlNFdVFRSWhId05BSUI0Z0tHb2hBU0FhS0FJQUlDbEJHR3hxSWlBb0FnQWhBd0pBSUMwZ0gwRUNTU0FaSUJvb0FoeEJCR3RNY1hFaUlnUkFJQVFnQVRZQ0ZDQUVJQUVnQTJvaUF6WUNHQ0FFSUFNdkFBQTdBWEFnQTBIL0FUb0FBQ0FFS0FJWVFmOEJPZ0FCSUFSQkFEWUNDQ0FFUVFBMkFnQWdCQ0FCTmdJUURBRUxJQVFnQVRZQ0ZDQUVJQUVnQTJvaUJqWUNHQ0FFSUFZdkFBQTdBWEFnQmtIL0FUb0FBQ0FFS0FJWVFmOEJPZ0FCSUFRZ0JFRWNhallDYUNBRUlBRTJBaEFnQkVFQU5nSU1JQVFnQXdSL0lBRXRBQUJCRUhRRlFZQ0EvQWNMSWdNMkFnQkJBU0VHSUFGQkFXb2hDU0FCTFFBQklRY0NmeUFCTFFBQVFmOEJSZ1JBSUFkQmtBRlBCRUFnQkVFQk5nSU1JQU5CZ1A0RGNnd0NDeUFFSUFrMkFoQkJBQ0VHSUFkQkNYUWdBMm9NQVFzZ0JDQUpOZ0lRSUFkQkNIUWdBM0lMSVFFZ0JDQUdOZ0lJSUFSQmdJQUNOZ0lFSUFRZ0FVRUhkRFlDQUFzZ0lDZ0NBQ0VxQWtBZ0dVRUFUQTBBSUNBb0FnaEZEUUFnSWlBdWNpRW5RUUFoSmdOQUFrQUNRQUpBQWtBQ1FDQWZRUUZyRGdJQkFnQUxJQ0lFUUVFQklCbDBJZ0ZCQVhZZ0FYSWhFU0FFS0FKOElnVkJBblFpRFNBRUtBSjRha0VNYWlFQklBUW9BblFoQmtFQUlRZ2dCQ2dDZ0FFaUEwRUVUd1JBSUFWRkRRVWdCVUVEYkNFQ0lBVkJBWFFoREVFQUlCRnJJUWtEUUNBTVFRSjBJUXRCQUNFREEwQUNRQ0FCSWdjb0FnQWlBVVVOQUFKQUlBRkJrSUNBQVhFTkFDQUJRZThEY1VVTkFDQUVLQUlBSVFFQ1FDQUVLQUlJSWhBTkFDQUJRZjhCUmlFS0lBUW9BaEFpRUMwQUFDRUJBa0FnQ2tVRVFDQUVJQUUyQWdBZ0JDQVFRUUZxTmdJUURBRUxJQUZCandGTkJFQWdCQ0FCTmdJQUlBUWdFRUVCYWpZQ0VFRUhJUkFNQWd0Qi93RWhBU0FFUWY4Qk5nSUFDMEVJSVJBTElBUWdFRUVCYXlJUU5nSUlBa0FnQVNBUWRrRUJjVVVOQUFKQUlCQU5BQ0FCUWY4QlJpRUtJQVFvQWhBaUVDMEFBQ0VCQWtBZ0NrVUVRQ0FFSUFFMkFnQWdCQ0FRUVFGcU5nSVFEQUVMSUFGQmp3Rk5CRUFnQkNBQk5nSUFJQVFnRUVFQmFqWUNFRUVISVJBTUFndEIvd0VoQVNBRVFmOEJOZ0lBQzBFSUlSQUxJQVFnRUVFQmF5SVFOZ0lJSUFZZ0NTQVJJQUVnRUhaQkFYRWlFQnMyQWdBZ0JDZ0NmQ0VCSUFkQkJHc2lDaUFLS0FJQVFTQnlOZ0lBSUFjZ0J5Z0NCRUVJY2pZQ0JDQUhJQWNvQWdBZ0VFRVRkSEpCRUhJMkFnQWdKUTBBSUFkQmZpQUJhMEVDZEdvaUFTQUJLQUlFUVlDQUFuSTJBZ1FnQVNBQktBSUFJQkJCSDNSeVFZQ0FCSEkyQWdBZ0FVRUVheUlCSUFFb0FnQkJnSUFJY2pZQ0FBc2dCeUFIS0FJQVFZQ0FnQUZ5SWdFMkFnQUxBa0FnQVVHQWdZQUljUTBBSUFGQitCNXhSUTBBSUFRb0FnQWhBUUpBSUFRb0FnZ2lFQTBBSUFGQi93RkdJUW9nQkNnQ0VDSVFMUUFBSVFFQ1FDQUtSUVJBSUFRZ0FUWUNBQ0FFSUJCQkFXbzJBaEFNQVFzZ0FVR1BBVTBFUUNBRUlBRTJBZ0FnQkNBUVFRRnFOZ0lRUVFjaEVBd0NDMEgvQVNFQklBUkIvd0UyQWdBTFFRZ2hFQXNnQkNBUVFRRnJJaEEyQWdnZ0J3Si9JQUVnRUhaQkFYRkZCRUFnQnlnQ0FBd0JDd0pBSUJBTkFDQUJRZjhCUmlFS0lBUW9BaEFpRUMwQUFDRUJBa0FnQ2tVRVFDQUVJQUUyQWdBZ0JDQVFRUUZxTmdJUURBRUxJQUZCandGTkJFQWdCQ0FCTmdJQUlBUWdFRUVCYWpZQ0VFRUhJUkFNQWd0Qi93RWhBU0FFUWY4Qk5nSUFDMEVJSVJBTElBUWdFRUVCYXlJUU5nSUlJQVlnRFdvZ0NTQVJJQUVnRUhaQkFYRWlBUnMyQWdBZ0IwRUVheUlRSUJBb0FnQkJnQUp5TmdJQUlBY2dCeWdDQkVIQUFISTJBZ1FnQnlnQ0FDQUJRUlowY2tHQUFYSUxRWUNBZ0FoeUlnRTJBZ0FMQWtBZ0FVR0FpSURBQUhFTkFDQUJRY0QzQVhGRkRRQWdCQ2dDQUNFQkFrQWdCQ2dDQ0NJUURRQWdBVUgvQVVZaENpQUVLQUlRSWhBdEFBQWhBUUpBSUFwRkJFQWdCQ0FCTmdJQUlBUWdFRUVCYWpZQ0VBd0JDeUFCUVk4QlRRUkFJQVFnQVRZQ0FDQUVJQkJCQVdvMkFoQkJCeUVRREFJTFFmOEJJUUVnQkVIL0FUWUNBQXRCQ0NFUUN5QUVJQkJCQVdzaUVEWUNDQ0FIQW44Z0FTQVFka0VCY1VVRVFDQUhLQUlBREFFTEFrQWdFQTBBSUFGQi93RkdJUW9nQkNnQ0VDSVFMUUFBSVFFQ1FDQUtSUVJBSUFRZ0FUWUNBQ0FFSUJCQkFXbzJBaEFNQVFzZ0FVR1BBVTBFUUNBRUlBRTJBZ0FnQkNBUVFRRnFOZ0lRUVFjaEVBd0NDMEgvQVNFQklBUkIvd0UyQWdBTFFRZ2hFQXNnQkNBUVFRRnJJaEEyQWdnZ0JpQUxhaUFKSUJFZ0FTQVFka0VCY1NJQkd6WUNBQ0FIUVFSckloQWdFQ2dDQUVHQUVISTJBZ0FnQnlBSEtBSUVRWUFFY2pZQ0JDQUhLQUlBSUFGQkdYUnlRWUFJY2d0QmdJQ0F3QUJ5SWdFMkFnQUxJQUZCZ01DQWdBUnhEUUFnQVVHQXZBOXhSUTBBSUFRb0FnQWhBUUpBSUFRb0FnZ2lFQTBBSUFGQi93RkdJUW9nQkNnQ0VDSVFMUUFBSVFFQ1FDQUtSUVJBSUFRZ0FUWUNBQ0FFSUJCQkFXbzJBaEFNQVFzZ0FVR1BBVTBFUUNBRUlBRTJBZ0FnQkNBUVFRRnFOZ0lRUVFjaEVBd0NDMEgvQVNFQklBUkIvd0UyQWdBTFFRZ2hFQXNnQkNBUVFRRnJJaEEyQWdnZ0FTQVFka0VCY1FSQUlBWWdBa0VDZEdvaFR3SkFJQkFOQUNBQlFmOEJSaUVVSUFRb0FoQWlFQzBBQUNFQkFrQWdGRVVFUUNBRUlBRTJBZ0FnQkNBUVFRRnFOZ0lRREFFTElBRkJqd0ZOQkVBZ0JDQUJOZ0lBSUFRZ0VFRUJhallDRUVFSElSQU1BZ3RCL3dFaEFTQUVRZjhCTmdJQUMwRUlJUkFMSUFRZ0VFRUJheUlRTmdJSUlFOGdDU0FSSUFFZ0VIWkJBWEVpRUJzMkFnQWdCQ2dDZkNFQklBZEJCR3NpQ2lBS0tBSUFRWUNBQVhJMkFnQWdCeUFIS0FJRVFZQWdjallDQkNBSElBY29BZ0FnRUVFY2RISkJnTUFBY2pZQ0FDQUhJQUZCQW5ScUlnRWdBU2dDQkVFRWNqWUNCQ0FCSUFFb0FneEJBWEkyQWd3Z0FTQUJLQUlJSUJCQkVuUnlRUUp5TmdJSUN5QUhJQWNvQWdCQmdJQ0FnQVJ5TmdJQUN5QUdRUVJxSVFZZ0IwRUVhaUVCSUFOQkFXb2lBeUFGUncwQUN5QUhRUXhxSVFFZ0JpQUNRUUowYWlFR0lBaEJCR29pQ0NBRUtBS0FBU0lEUVh4eFNRMEFDd3NnQXlBSVRRMERJQVZGRFFOQkFDRVRRUUFnRVdzaEN5QURJUkFEUUFKQUlBZ2dFRVlFUUNBSUlSQU1BUXNnQVVFRWF5RU1JQUVvQWdBaERVRUFJUUlEUUFKQUlBMGdBa0VEYkNJSGRpSUpRWkNBZ0FGeERRQWdDVUh2QTNGRkRRQWdCQ2dDQUNFREFrQWdCQ2dDQ0NJSkRRQWdBMEgvQVVjaEVDQUVLQUlRSWdrdEFBQWhBd0pBSUJCRkJFQWdBMEdRQVU4RVFFSC9BU0VESUFSQi93RTJBZ0FNQWdzZ0JDQUROZ0lBSUFRZ0NVRUJhallDRUVFSElRa01BZ3NnQkNBRE5nSUFJQVFnQ1VFQmFqWUNFQXRCQ0NFSkN5QUVJQWxCQVdzaUNUWUNDQUpBSUFNZ0NYWkJBWEZGRFFBZ0JpQUNJQVZzUVFKMGFpRlFBa0FnQ1EwQUlBTkIvd0ZISVEwZ0JDZ0NFQ0lKTFFBQUlRTUNRQ0FOUlFSQUlBTkJrQUZQQkVCQi93RWhBeUFFUWY4Qk5nSUFEQUlMSUFRZ0F6WUNBQ0FFSUFsQkFXbzJBaEJCQnlFSkRBSUxJQVFnQXpZQ0FDQUVJQWxCQVdvMkFoQUxRUWdoQ1FzZ0JDQUpRUUZySWdrMkFnZ2dVQ0FMSUJFZ0F5QUpka0VCY1NJSkd6WUNBQ0FFS0FKOElSQWdEQ0FNS0FJQVFTQWdCM1J5TmdJQUlBRWdBU2dDQUNBSlFSTjBRUkJ5SUFkMGNqWUNBQ0FCSUFFb0FnUkJDQ0FIZEhJMkFnUWdBaUFsY2tVRVFDQUJRWDRnRUd0QkFuUnFJZ01nQXlnQ0JFR0FnQUp5TmdJRUlBTWdBeWdDQUNBSlFSOTBja0dBZ0FSeU5nSUFJQU5CQkdzaUF5QURLQUlBUVlDQUNISTJBZ0FMSUFKQkEwY05BQ0FCSUJCQkFuUnFJZ01nQXlnQ0JFRUVjallDQkNBRElBTW9BZ3hCQVhJMkFnd2dBeUFES0FJSUlBbEJFblJ5UVFKeU5nSUlDeUFCSUFFb0FnQkJnSUNBQVNBSGRISWlEVFlDQUNBRUtBS0FBU0VEQ3lBRElSQWdBa0VCYWlJQ0lBTWdDR3RKRFFBTEN5QUdRUVJxSVFZZ0FVRUVhaUVCSUJOQkFXb2lFeUFGUncwQUN3d0RDMEVBSVFkQkFDRU5RUUFoRndKQUFrQUNRQUpBSUFRb0Fud2lFRUhBQUVjTkFDQUVLQUtBQVVIQUFFY05BRUVBUVFFZ0dYUWlBVUVCZGlBQmNpSVJheUVGSUFSQkhHb2hFQ0FFS0FKNFFZd0NhaUVHSUFRb0FnZ2hDQ0FFS0FJRUlRTWdCQ2dDQUNFQ0lBUW9BbWdoRENBRUtBSjBJUUVnRmtFSWNRMEJBMEJCQUNFWEEwQWdBU0VKSUFZaUJ5Z0NBQ0lHQkVBQ1FDQUdRWkNBZ0FGeERRQWdCa0h2QTNFaUFVVU5BQ0FESUJBZ0JDZ0NiQ0FCYWkwQUFFRUNkR29pRENnQ0FDSUxLQUlBSWdGcklRTUNmeUFCSUFKQkVIWkxCRUFnQ3lnQ0JDRUtJQXdnQzBFSVFRd2dBU0FEU3lJVUcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBRUtBSVFJZ2hCQVdvaEN5QUlMUUFCSVFNZ0NDMEFBRUgvQVVZRVFDQURRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFnTUFnc2dCQ0FMTmdJUUlBTkJDWFFnQW1vaEFrRUhJUWdNQVFzZ0JDQUxOZ0lRUVFnaENDQURRUWgwSUFKcUlRSUxJQWhCQVdzaENDQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQVNFRElBb2dDa1VnRkJzTUFRc2dBaUFCUVJCMGF5RUNJQU5CZ0lBQ2NVVUVRQ0FMS0FJRUlRb2dEQ0FMUVF4QkNDQUJJQU5MSWhRYmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFRb0FoQWlDRUVCYWlFTElBZ3RBQUVoQVNBSUxRQUFRZjhCUmdSQUlBRkJrQUZQQkVBZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQ0F3Q0N5QUVJQXMyQWhBZ0FVRUpkQ0FDYWlFQ1FRY2hDQXdCQ3lBRUlBczJBaEJCQ0NFSUlBRkJDSFFnQW1vaEFnc2dDRUVCYXlFSUlBSkJBWFFoQWlBRFFRRjBJZ05CZ0lBQ1NRMEFDeUFLUlNBS0lCUWJEQUVMSUFzb0FnUUxCSDhnQXlBUUlBY29BZ1JCRVhaQkJIRWdCMEVFYXlJS0tBSUFRUk4yUVFGeElBWkJEblpCRUhFZ0JrRVFka0hBQUhFZ0JrR3FBWEZ5Y25KeUloUkIwTGtCYWkwQUFFRUNkR29pRENnQ0FDSUxLQUlBSWdGcklRTWdGRUhRdXdGcUxRQUFJUk1nQ1NBRklCRUNmeUFCSUFKQkVIWkxCRUFnQ3lnQ0JDRVVJQXdnQzBFSVFRd2dBU0FEU3lJT0cyb29BZ0EyQWdBRFFBSkFJQWdOQUNBRUtBSVFJZ2hCQVdvaEN5QUlMUUFCSVFNZ0NDMEFBRUgvQVVZRVFDQURRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFnTUFnc2dCQ0FMTmdJUUlBTkJDWFFnQW1vaEFrRUhJUWdNQVFzZ0JDQUxOZ0lRUVFnaENDQURRUWgwSUFKcUlRSUxJQWhCQVdzaENDQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQVNFRElCUWdGRVVnRGhzTUFRc2dBaUFCUVJCMGF5RUNJQU5CZ0lBQ2NVVUVRQ0FMS0FJRUlSUWdEQ0FMUVF4QkNDQUJJQU5MSWc0YmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFRb0FoQWlDRUVCYWlFTElBZ3RBQUVoQVNBSUxRQUFRZjhCUmdSQUlBRkJrQUZQQkVBZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQ0F3Q0N5QUVJQXMyQWhBZ0FVRUpkQ0FDYWlFQ1FRY2hDQXdCQ3lBRUlBczJBaEJCQ0NFSUlBRkJDSFFnQW1vaEFnc2dDRUVCYXlFSUlBSkJBWFFoQWlBRFFRRjBJZ05CZ0lBQ1NRMEFDeUFVUlNBVUlBNGJEQUVMSUFzb0FnUUxJQk56SWdFYk5nSUFJQW9nQ2lnQ0FFRWdjallDQUNBSElBY29BZ1JCQ0hJMkFnUWdCMEdNQW1zaUN5QUxLQUlBUVlDQUNISTJBZ0FnQjBHRUFtc2lDeUFMS0FJQVFZQ0FBbkkyQWdBZ0IwR0lBbXNpQ3lBTEtBSUFJQUZCSDNSeVFZQ0FCSEkyQWdBZ0JpQUJRUk4wY2tFUWNnVWdCZ3RCZ0lDQUFYSWhCZ3NDUUNBR1FZQ0JnQWh4RFFBZ0JrSDRIbkZGRFFBZ0F5QVFJQVFvQW13Z0JrRURkaUlVUWU4RGNXb3RBQUJCQW5ScUlnd29BZ0FpQ3lnQ0FDSUJheUVEQW44Z0FTQUNRUkIyU3dSQUlBc29BZ1FoQ2lBTUlBdEJDRUVNSUFFZ0Ewc2lFeHRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUXNnQ0MwQUFTRURJQWd0QUFCQi93RkdCRUFnQTBHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUlEQUlMSUFRZ0N6WUNFQ0FEUVFsMElBSnFJUUpCQnlFSURBRUxJQVFnQ3pZQ0VFRUlJUWdnQTBFSWRDQUNhaUVDQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBRWhBeUFLSUFwRklCTWJEQUVMSUFJZ0FVRVFkR3NoQWlBRFFZQ0FBbkZGQkVBZ0N5Z0NCQ0VLSUF3Z0MwRU1RUWdnQVNBRFN5SVRHMm9vQWdBMkFnQURRQUpBSUFnTkFDQUVLQUlRSWdoQkFXb2hDeUFJTFFBQklRRWdDQzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRZ01BZ3NnQkNBTE5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFnTUFRc2dCQ0FMTmdJUVFRZ2hDQ0FCUVFoMElBSnFJUUlMSUFoQkFXc2hDQ0FDUVFGMElRSWdBMEVCZENJRFFZQ0FBa2tOQUFzZ0NrVWdDaUFUR3d3QkN5QUxLQUlFQ3dSL0lBTWdFQ0FIS0FJRVFSUjJRUVJ4SUFkQkJHc2lDaWdDQUVFV2RrRUJjU0FHUVE5MlFSQnhJQVpCRTNaQndBQnhJQlJCcWdGeGNuSnljaUlVUWRDNUFXb3RBQUJCQW5ScUlnd29BZ0FpQ3lnQ0FDSUJheUVESUJSQjBMc0JhaTBBQUNFVElBa2dCU0FSQW44Z0FTQUNRUkIyU3dSQUlBc29BZ1FoRkNBTUlBdEJDRUVNSUFFZ0Ewc2lEaHRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUXNnQ0MwQUFTRURJQWd0QUFCQi93RkdCRUFnQTBHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUlEQUlMSUFRZ0N6WUNFQ0FEUVFsMElBSnFJUUpCQnlFSURBRUxJQVFnQ3pZQ0VFRUlJUWdnQTBFSWRDQUNhaUVDQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBRWhBeUFVSUJSRklBNGJEQUVMSUFJZ0FVRVFkR3NoQWlBRFFZQ0FBbkZGQkVBZ0N5Z0NCQ0VVSUF3Z0MwRU1RUWdnQVNBRFN5SU9HMm9vQWdBMkFnQURRQUpBSUFnTkFDQUVLQUlRSWdoQkFXb2hDeUFJTFFBQklRRWdDQzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRZ01BZ3NnQkNBTE5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFnTUFRc2dCQ0FMTmdJUVFRZ2hDQ0FCUVFoMElBSnFJUUlMSUFoQkFXc2hDQ0FDUVFGMElRSWdBMEVCZENJRFFZQ0FBa2tOQUFzZ0ZFVWdGQ0FPR3d3QkN5QUxLQUlFQ3lBVGN5SUJHellDZ0FJZ0NpQUtLQUlBUVlBQ2NqWUNBQ0FISUFjb0FnUkJ3QUJ5TmdJRUlBWWdBVUVXZEhKQmdBRnlCU0FHQzBHQWdJQUljaUVHQ3dKQUlBWkJnSWlBd0FCeERRQWdCa0hBOXdGeFJRMEFJQU1nRUNBRUtBSnNJQVpCQm5ZaUZFSHZBM0ZxTFFBQVFRSjBhaUlNS0FJQUlnc29BZ0FpQVdzaEF3Si9JQUVnQWtFUWRrc0VRQ0FMS0FJRUlRb2dEQ0FMUVFoQkRDQUJJQU5MSWhNYmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFRb0FoQWlDRUVCYWlFTElBZ3RBQUVoQXlBSUxRQUFRZjhCUmdSQUlBTkJrQUZQQkVBZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQ0F3Q0N5QUVJQXMyQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hDQXdCQ3lBRUlBczJBaEJCQ0NFSUlBTkJDSFFnQW1vaEFnc2dDRUVCYXlFSUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFCSVFNZ0NpQUtSU0FUR3d3QkN5QUNJQUZCRUhScklRSWdBMEdBZ0FKeFJRUkFJQXNvQWdRaENpQU1JQXRCREVFSUlBRWdBMHNpRXh0cUtBSUFOZ0lBQTBBQ1FDQUlEUUFnQkNnQ0VDSUlRUUZxSVFzZ0NDMEFBU0VCSUFndEFBQkIvd0ZHQkVBZ0FVR1FBVThFUUNBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VJREFJTElBUWdDellDRUNBQlFRbDBJQUpxSVFKQkJ5RUlEQUVMSUFRZ0N6WUNFRUVJSVFnZ0FVRUlkQ0FDYWlFQ0N5QUlRUUZySVFnZ0FrRUJkQ0VDSUFOQkFYUWlBMEdBZ0FKSkRRQUxJQXBGSUFvZ0V4c01BUXNnQ3lnQ0JBc0VmeUFESUJBZ0J5Z0NCRUVYZGtFRWNTQUhRUVJySWdvb0FnQkJHWFpCQVhFZ0JrRVNka0VRY1NBR1FSWjJRY0FBY1NBVVFhb0JjWEp5Y25JaUZFSFF1UUZxTFFBQVFRSjBhaUlNS0FJQUlnc29BZ0FpQVdzaEF5QVVRZEM3QVdvdEFBQWhFeUFKSUFVZ0VRSi9JQUVnQWtFUWRrc0VRQ0FMS0FJRUlSUWdEQ0FMUVFoQkRDQUJJQU5MSWc0YmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFRb0FoQWlDRUVCYWlFTElBZ3RBQUVoQXlBSUxRQUFRZjhCUmdSQUlBTkJrQUZQQkVBZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQ0F3Q0N5QUVJQXMyQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hDQXdCQ3lBRUlBczJBaEJCQ0NFSUlBTkJDSFFnQW1vaEFnc2dDRUVCYXlFSUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFCSVFNZ0ZDQVVSU0FPR3d3QkN5QUNJQUZCRUhScklRSWdBMEdBZ0FKeFJRUkFJQXNvQWdRaEZDQU1JQXRCREVFSUlBRWdBMHNpRGh0cUtBSUFOZ0lBQTBBQ1FDQUlEUUFnQkNnQ0VDSUlRUUZxSVFzZ0NDMEFBU0VCSUFndEFBQkIvd0ZHQkVBZ0FVR1FBVThFUUNBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VJREFJTElBUWdDellDRUNBQlFRbDBJQUpxSVFKQkJ5RUlEQUVMSUFRZ0N6WUNFRUVJSVFnZ0FVRUlkQ0FDYWlFQ0N5QUlRUUZySVFnZ0FrRUJkQ0VDSUFOQkFYUWlBMEdBZ0FKSkRRQUxJQlJGSUJRZ0Roc01BUXNnQ3lnQ0JBc2dFM01pQVJzMkFvQUVJQW9nQ2lnQ0FFR0FFSEkyQWdBZ0J5QUhLQUlFUVlBRWNqWUNCQ0FHSUFGQkdYUnlRWUFJY2dVZ0JndEJnSUNBd0FCeUlRWUxBa0FnQmtHQXdJQ0FCSEVOQUNBR1FZQzhEM0ZGRFFBZ0F5QVFJQVFvQW13Z0JrRUpkaUlVUWU4RGNXb3RBQUJCQW5ScUlnd29BZ0FpQ3lnQ0FDSUJheUVEQW44Z0FTQUNRUkIyU3dSQUlBc29BZ1FoQ2lBTUlBdEJDRUVNSUFFZ0Ewc2lFeHRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUXNnQ0MwQUFTRURJQWd0QUFCQi93RkdCRUFnQTBHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUlEQUlMSUFRZ0N6WUNFQ0FEUVFsMElBSnFJUUpCQnlFSURBRUxJQVFnQ3pZQ0VFRUlJUWdnQTBFSWRDQUNhaUVDQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBRWhBeUFLSUFwRklCTWJEQUVMSUFJZ0FVRVFkR3NoQWlBRFFZQ0FBbkZGQkVBZ0N5Z0NCQ0VLSUF3Z0MwRU1RUWdnQVNBRFN5SVRHMm9vQWdBMkFnQURRQUpBSUFnTkFDQUVLQUlRSWdoQkFXb2hDeUFJTFFBQklRRWdDQzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRZ01BZ3NnQkNBTE5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFnTUFRc2dCQ0FMTmdJUVFRZ2hDQ0FCUVFoMElBSnFJUUlMSUFoQkFXc2hDQ0FDUVFGMElRSWdBMEVCZENJRFFZQ0FBa2tOQUFzZ0NrVWdDaUFUR3d3QkN5QUxLQUlFQ3dSL0lBTWdFQ0FIS0FJRVFScDJRUVJ4SUFkQkJHc2lDaWdDQUVFY2RrRUJjU0FHUVJWMlFSQnhJQVpCR1haQndBQnhJQlJCcWdGeGNuSnljaUlVUWRDNUFXb3RBQUJCQW5ScUlnd29BZ0FpQ3lnQ0FDSUJheUVESUJSQjBMc0JhaTBBQUNFVElBa2dCU0FSQW44Z0FTQUNRUkIyU3dSQUlBc29BZ1FoRkNBTUlBdEJDRUVNSUFFZ0Ewc2lEaHRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUXNnQ0MwQUFTRURJQWd0QUFCQi93RkdCRUFnQTBHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUlEQUlMSUFRZ0N6WUNFQ0FEUVFsMElBSnFJUUpCQnlFSURBRUxJQVFnQ3pZQ0VFRUlJUWdnQTBFSWRDQUNhaUVDQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBRWhBeUFVSUJSRklBNGJEQUVMSUFJZ0FVRVFkR3NoQWlBRFFZQ0FBbkZGQkVBZ0N5Z0NCQ0VVSUF3Z0MwRU1RUWdnQVNBRFN5SU9HMm9vQWdBMkFnQURRQUpBSUFnTkFDQUVLQUlRSWdoQkFXb2hDeUFJTFFBQklRRWdDQzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRZ01BZ3NnQkNBTE5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFnTUFRc2dCQ0FMTmdJUVFRZ2hDQ0FCUVFoMElBSnFJUUlMSUFoQkFXc2hDQ0FDUVFGMElRSWdBMEVCZENJRFFZQ0FBa2tOQUFzZ0ZFVWdGQ0FPR3d3QkN5QUxLQUlFQ3lBVGN5SUJHellDZ0FZZ0NpQUtLQUlBUVlDQUFYSTJBZ0FnQnlBSEtBSUVRWUFnY2pZQ0JDQUhJQWNvQW9RQ1FRUnlOZ0tFQWlBSElBY29Bb3dDUVFGeU5nS01BaUFISUFjb0FvZ0NJQUZCRW5SeVFRSnlOZ0tJQWlBR0lBRkJISFJ5UVlEQUFISUZJQVlMUVlDQWdJQUVjaUVHQ3lBSElBWTJBZ0FMSUFkQkJHb2hCaUFKUVFScUlRRWdGMEVCYWlJWFFjQUFSdzBBQ3lBSFFReHFJUVlnQ1VHRUJtb2hBU0FOUVR4SklWRWdEVUVFYWlFTklGRU5BQXNNQWd0QkFTQVpkQ0lCUVFGMklBRnlJUTBnQkNnQ2VDSUpJQkJCQW5ScVFReHFJUVlnQkNnQ2dBRWhBU0FFS0FJSUlRZ2dCQ2dDQkNFRElBUW9BZ0FoQWlBRUtBSm9JUXdnQkNnQ2RDRVJBa0FnRmtFSWNRUkFBa0FnQVVFRVNRMEFJQkFFUUVFQUlBMXJJUlFnQkVFY2FpRUZJQkJCREd3aEV5QVFRUU4wSVJVRFFFRUFJUXNEUUNBR0lna29BZ0FpQmdSQUFrQWdCa0dRZ0lBQmNRMEFJQVpCN3dOeElnRkZEUUFnQXlBRklBUW9BbXdnQVdvdEFBQkJBblJxSWd3b0FnQWlDaWdDQUNJQmF5RURBbjhnQVNBQ1FSQjJUUVJBSUFJZ0FVRVFkR3NoQWlBRFFZQ0FBbkVFUUNBS0tBSUVEQUlMSUFvb0FnUWhEaUFNSUFwQkRFRUlJQUVnQTBzaUVodHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0JDZ0NFQ0lJUVFGcUlRb2dDQzBBQVNFQklBZ3RBQUJCL3dGSEJFQWdCQ0FLTmdJUVFRZ2hDQ0FCUVFoMElBSnFJUUlNQVFzZ0FVR1BBVTBFUUNBRUlBbzJBaEFnQVVFSmRDQUNhaUVDUVFjaENBd0JDeUFFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUlDeUFJUVFGcklRZ2dBa0VCZENFQ0lBTkJBWFFpQTBHQWdBSkpEUUFMSUE1RklBNGdFaHNNQVFzZ0NpZ0NCQ0VPSUF3Z0NrRUlRUXdnQVNBRFN5SVNHMm9vQWdBMkFnQURRQUpBSUFnTkFDQUVLQUlRSWdoQkFXb2hDaUFJTFFBQklRTWdDQzBBQUVIL0FVY0VRQ0FFSUFvMkFoQkJDQ0VJSUFOQkNIUWdBbW9oQWd3QkN5QURRWThCVFFSQUlBUWdDallDRUNBRFFRbDBJQUpxSVFKQkJ5RUlEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUWdMSUFoQkFXc2hDQ0FDUVFGMElRSWdBVUVCZENJQlFZQ0FBa2tOQUFzZ0FTRURJQTRnRGtVZ0Voc0xCSDhnQXlBRklBa29BZ1JCRVhaQkJIRWdDVUVFYXlJT0tBSUFRUk4yUVFGeElBWkJEblpCRUhFZ0JrRVFka0hBQUhFZ0JrR3FBWEZ5Y25KeUloSkIwTGtCYWkwQUFFRUNkR29pRENnQ0FDSUtLQUlBSWdGcklRTWdFa0hRdXdGcUxRQUFJUmdnRVNBVUlBMENmeUFCSUFKQkVIWk5CRUFnQWlBQlFSQjBheUVDSUFOQmdJQUNjUVJBSUFvb0FnUU1BZ3NnQ2lnQ0JDRVNJQXdnQ2tFTVFRZ2dBU0FEU3lJYkcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBRUtBSVFJZ2hCQVdvaENpQUlMUUFCSVFFZ0NDMEFBRUgvQVVjRVFDQUVJQW8yQWhCQkNDRUlJQUZCQ0hRZ0Ftb2hBZ3dCQ3lBQlFZOEJUUVJBSUFRZ0NqWUNFQ0FCUVFsMElBSnFJUUpCQnlFSURBRUxJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRZ0xJQWhCQVdzaENDQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnRWtVZ0VpQWJHd3dCQ3lBS0tBSUVJUklnRENBS1FRaEJEQ0FCSUFOTEloc2JhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBUW9BaEFpQ0VFQmFpRUtJQWd0QUFFaEF5QUlMUUFBUWY4QlJ3UkFJQVFnQ2pZQ0VFRUlJUWdnQTBFSWRDQUNhaUVDREFFTElBTkJqd0ZOQkVBZ0JDQUtOZ0lRSUFOQkNYUWdBbW9oQWtFSElRZ01BUXNnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hDQXNnQ0VFQmF5RUlJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBQklRTWdFaUFTUlNBYkd3c2dHSE1pQVJzMkFnQWdEaUFPS0FJQVFTQnlOZ0lBSUFrZ0NTZ0NCRUVJY2pZQ0JDQUdJQUZCRTNSeVFSQnlCU0FHQzBHQWdJQUJjaUVHQ3dKQUlBWkJnSUdBQ0hFTkFDQUdRZmdlY1VVTkFDQURJQVVnQkNnQ2JDQUdRUU4ySWhKQjd3TnhhaTBBQUVFQ2RHb2lEQ2dDQUNJS0tBSUFJZ0ZySVFNQ2Z5QUJJQUpCRUhaTkJFQWdBaUFCUVJCMGF5RUNJQU5CZ0lBQ2NRUkFJQW9vQWdRTUFnc2dDaWdDQkNFT0lBd2dDa0VNUVFnZ0FTQURTeUlZRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FFS0FJUUlnaEJBV29oQ2lBSUxRQUJJUUVnQ0MwQUFFSC9BVWNFUUNBRUlBbzJBaEJCQ0NFSUlBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVJREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFnTElBaEJBV3NoQ0NBQ1FRRjBJUUlnQTBFQmRDSURRWUNBQWtrTkFBc2dEa1VnRGlBWUd3d0JDeUFLS0FJRUlRNGdEQ0FLUVFoQkRDQUJJQU5MSWhnYmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFRb0FoQWlDRUVCYWlFS0lBZ3RBQUVoQXlBSUxRQUFRZjhCUndSQUlBUWdDallDRUVFSUlRZ2dBMEVJZENBQ2FpRUNEQUVMSUFOQmp3Rk5CRUFnQkNBS05nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFnTUFRc2dCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaENBc2dDRUVCYXlFSUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFCSVFNZ0RpQU9SU0FZR3dzRWZ5QURJQVVnQ1NnQ0JFRVVka0VFY1NBSlFRUnJJZzRvQWdCQkZuWkJBWEVnQmtFUGRrRVFjU0FHUVJOMlFjQUFjU0FTUWFvQmNYSnljbklpRWtIUXVRRnFMUUFBUVFKMGFpSU1LQUlBSWdvb0FnQWlBV3NoQXlBU1FkQzdBV290QUFBaEdDQVJJQkJCQW5ScUlCUWdEUUovSUFFZ0FrRVFkazBFUUNBQ0lBRkJFSFJySVFJZ0EwR0FnQUp4QkVBZ0NpZ0NCQXdDQ3lBS0tBSUVJUklnRENBS1FReEJDQ0FCSUFOTEloc2JhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBUW9BaEFpQ0VFQmFpRUtJQWd0QUFFaEFTQUlMUUFBUWY4QlJ3UkFJQVFnQ2pZQ0VFRUlJUWdnQVVFSWRDQUNhaUVDREFFTElBRkJqd0ZOQkVBZ0JDQUtOZ0lRSUFGQkNYUWdBbW9oQWtFSElRZ01BUXNnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hDQXNnQ0VFQmF5RUlJQUpCQVhRaEFpQURRUUYwSWdOQmdJQUNTUTBBQ3lBU1JTQVNJQnNiREFFTElBb29BZ1FoRWlBTUlBcEJDRUVNSUFFZ0Ewc2lHeHRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUW9nQ0MwQUFTRURJQWd0QUFCQi93RkhCRUFnQkNBS05nSVFRUWdoQ0NBRFFRaDBJQUpxSVFJTUFRc2dBMEdQQVUwRVFDQUVJQW8yQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hDQXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VJQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBRWhBeUFTSUJKRklCc2JDeUFZY3lJQkd6WUNBQ0FPSUE0b0FnQkJnQUp5TmdJQUlBa2dDU2dDQkVIQUFISTJBZ1FnQmlBQlFSWjBja0dBQVhJRklBWUxRWUNBZ0FoeUlRWUxBa0FnQmtHQWlJREFBSEVOQUNBR1FjRDNBWEZGRFFBZ0F5QUZJQVFvQW13Z0JrRUdkaUlTUWU4RGNXb3RBQUJCQW5ScUlnd29BZ0FpQ2lnQ0FDSUJheUVEQW44Z0FTQUNRUkIyVFFSQUlBSWdBVUVRZEdzaEFpQURRWUNBQW5FRVFDQUtLQUlFREFJTElBb29BZ1FoRGlBTUlBcEJERUVJSUFFZ0Ewc2lHQnRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUW9nQ0MwQUFTRUJJQWd0QUFCQi93RkhCRUFnQkNBS05nSVFRUWdoQ0NBQlFRaDBJQUpxSVFJTUFRc2dBVUdQQVUwRVFDQUVJQW8yQWhBZ0FVRUpkQ0FDYWlFQ1FRY2hDQXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VJQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQU5CQVhRaUEwR0FnQUpKRFFBTElBNUZJQTRnR0JzTUFRc2dDaWdDQkNFT0lBd2dDa0VJUVF3Z0FTQURTeUlZRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FFS0FJUUlnaEJBV29oQ2lBSUxRQUJJUU1nQ0MwQUFFSC9BVWNFUUNBRUlBbzJBaEJCQ0NFSUlBTkJDSFFnQW1vaEFnd0JDeUFEUVk4QlRRUkFJQVFnQ2pZQ0VDQURRUWwwSUFKcUlRSkJCeUVJREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFnTElBaEJBV3NoQ0NBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dBU0VESUE0Z0RrVWdHQnNMQkg4Z0F5QUZJQWtvQWdSQkYzWkJCSEVnQ1VFRWF5SU9LQUlBUVJsMlFRRnhJQVpCRW5aQkVIRWdCa0VXZGtIQUFIRWdFa0dxQVhGeWNuSnlJaEpCMExrQmFpMEFBRUVDZEdvaURDZ0NBQ0lLS0FJQUlnRnJJUU1nRWtIUXV3RnFMUUFBSVJnZ0VTQVZhaUFVSUEwQ2Z5QUJJQUpCRUhaTkJFQWdBaUFCUVJCMGF5RUNJQU5CZ0lBQ2NRUkFJQW9vQWdRTUFnc2dDaWdDQkNFU0lBd2dDa0VNUVFnZ0FTQURTeUliRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FFS0FJUUlnaEJBV29oQ2lBSUxRQUJJUUVnQ0MwQUFFSC9BVWNFUUNBRUlBbzJBaEJCQ0NFSUlBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVJREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFnTElBaEJBV3NoQ0NBQ1FRRjBJUUlnQTBFQmRDSURRWUNBQWtrTkFBc2dFa1VnRWlBYkd3d0JDeUFLS0FJRUlSSWdEQ0FLUVFoQkRDQUJJQU5MSWhzYmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFRb0FoQWlDRUVCYWlFS0lBZ3RBQUVoQXlBSUxRQUFRZjhCUndSQUlBUWdDallDRUVFSUlRZ2dBMEVJZENBQ2FpRUNEQUVMSUFOQmp3Rk5CRUFnQkNBS05nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFnTUFRc2dCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaENBc2dDRUVCYXlFSUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFCSVFNZ0VpQVNSU0FiR3dzZ0dITWlBUnMyQWdBZ0RpQU9LQUlBUVlBUWNqWUNBQ0FKSUFrb0FnUkJnQVJ5TmdJRUlBWWdBVUVaZEhKQmdBaHlCU0FHQzBHQWdJREFBSEloQmdzQ1FDQUdRWURBZ0lBRWNRMEFJQVpCZ0x3UGNVVU5BQ0FESUFVZ0JDZ0NiQ0FHUVFsMkloSkI3d054YWkwQUFFRUNkR29pRENnQ0FDSUtLQUlBSWdGcklRTUNmeUFCSUFKQkVIWk5CRUFnQWlBQlFSQjBheUVDSUFOQmdJQUNjUVJBSUFvb0FnUU1BZ3NnQ2lnQ0JDRU9JQXdnQ2tFTVFRZ2dBU0FEU3lJWUcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBRUtBSVFJZ2hCQVdvaENpQUlMUUFCSVFFZ0NDMEFBRUgvQVVjRVFDQUVJQW8yQWhCQkNDRUlJQUZCQ0hRZ0Ftb2hBZ3dCQ3lBQlFZOEJUUVJBSUFRZ0NqWUNFQ0FCUVFsMElBSnFJUUpCQnlFSURBRUxJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRZ0xJQWhCQVdzaENDQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnRGtVZ0RpQVlHd3dCQ3lBS0tBSUVJUTRnRENBS1FRaEJEQ0FCSUFOTEloZ2JhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBUW9BaEFpQ0VFQmFpRUtJQWd0QUFFaEF5QUlMUUFBUWY4QlJ3UkFJQVFnQ2pZQ0VFRUlJUWdnQTBFSWRDQUNhaUVDREFFTElBTkJqd0ZOQkVBZ0JDQUtOZ0lRSUFOQkNYUWdBbW9oQWtFSElRZ01BUXNnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hDQXNnQ0VFQmF5RUlJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBQklRTWdEaUFPUlNBWUd3c0VmeUFESUFVZ0NTZ0NCRUVhZGtFRWNTQUpRUVJySWc0b0FnQkJISFpCQVhFZ0JrRVZka0VRY1NBR1FSbDJRY0FBY1NBU1Fhb0JjWEp5Y25JaUVrSFF1UUZxTFFBQVFRSjBhaUlNS0FJQUlnb29BZ0FpQVdzaEF5QVNRZEM3QVdvdEFBQWhHQ0FSSUJOcUlCUWdEUUovSUFFZ0FrRVFkazBFUUNBQ0lBRkJFSFJySVFJZ0EwR0FnQUp4QkVBZ0NpZ0NCQXdDQ3lBS0tBSUVJUklnRENBS1FReEJDQ0FCSUFOTEloc2JhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBUW9BaEFpQ0VFQmFpRUtJQWd0QUFFaEFTQUlMUUFBUWY4QlJ3UkFJQVFnQ2pZQ0VFRUlJUWdnQVVFSWRDQUNhaUVDREFFTElBRkJqd0ZOQkVBZ0JDQUtOZ0lRSUFGQkNYUWdBbW9oQWtFSElRZ01BUXNnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hDQXNnQ0VFQmF5RUlJQUpCQVhRaEFpQURRUUYwSWdOQmdJQUNTUTBBQ3lBU1JTQVNJQnNiREFFTElBb29BZ1FoRWlBTUlBcEJDRUVNSUFFZ0Ewc2lHeHRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUW9nQ0MwQUFTRURJQWd0QUFCQi93RkhCRUFnQkNBS05nSVFRUWdoQ0NBRFFRaDBJQUpxSVFJTUFRc2dBMEdQQVUwRVFDQUVJQW8yQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hDQXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VJQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBRWhBeUFTSUJKRklCc2JDeUFZY3lJS0d6WUNBQ0FPSUE0b0FnQkJnSUFCY2pZQ0FDQUpJQWtvQWdSQmdDQnlOZ0lFSUFRb0FueEJBblFnQ1dvaUFTQUJLQUlFUVFSeU5nSUVJQUVnQVNnQ0RFRUJjallDRENBQklBRW9BZ2dnQ2tFU2RISkJBbkkyQWdnZ0JpQUtRUngwY2tHQXdBQnlCU0FHQzBHQWdJQ0FCSEloQmdzZ0NTQUdOZ0lBQ3lBSlFRUnFJUVlnRVVFRWFpRVJJQXRCQVdvaUN5QVFSdzBBQ3lBSlFReHFJUVlnRVNBVGFpRVJJQWRCQkdvaUJ5QUVLQUtBQVNJQlFYeHhTUTBBQ3d3QkMwRUVJQUZCZkhFaUJpQUdRUVJORzBFQmF5SUdRWHh4UVFScUlRY2dDU0FHUVFGMFFYaHhha0VVYWlFR0N5QUVJQWcyQWdnZ0JDQUROZ0lFSUFRZ0FqWUNBQ0FFSUF3MkFtZ2dFRVVOQVNBQklBZE5EUUVEUUNBQklBZEdJVkpCQUNFSUlBY2hBU0JTUlFSQUEwQWdCQ0FHSUJFZ0NDQVFiRUVDZEdvZ0RTQUlJQVFvQW54QkFtcEJBUkJaSUFoQkFXb2lDQ0FFS0FLQUFTSUJJQWRyU1EwQUN3c2dCa0VFYWlFR0lCRkJCR29oRVNBWFFRRnFJaGNnRUVjTkFBc01BUXNDUUNBQlFRUkpEUUFnRUFSQVFRQWdEV3NoRkNBRVFSeHFJUVVnRUVFTWJDRVRJQkJCQTNRaEZRTkFRUUFoQ3dOQUlBWWlDU2dDQUNJR0JFQUNRQ0FHUVpDQWdBRnhEUUFnQmtIdkEzRWlBVVVOQUNBRElBVWdCQ2dDYkNBQmFpMEFBRUVDZEdvaURDZ0NBQ0lLS0FJQUlnRnJJUU1DZnlBQklBSkJFSFpOQkVBZ0FpQUJRUkIwYXlFQ0lBTkJnSUFDY1FSQUlBb29BZ1FNQWdzZ0NpZ0NCQ0VPSUF3Z0NrRU1RUWdnQVNBRFN5SVNHMm9vQWdBMkFnQURRQUpBSUFnTkFDQUVLQUlRSWdoQkFXb2hDaUFJTFFBQklRRWdDQzBBQUVIL0FVY0VRQ0FFSUFvMkFoQkJDQ0VJSUFGQkNIUWdBbW9oQWd3QkN5QUJRWThCVFFSQUlBUWdDallDRUNBQlFRbDBJQUpxSVFKQkJ5RUlEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUWdMSUFoQkFXc2hDQ0FDUVFGMElRSWdBMEVCZENJRFFZQ0FBa2tOQUFzZ0RrVWdEaUFTR3d3QkN5QUtLQUlFSVE0Z0RDQUtRUWhCRENBQklBTkxJaEliYWlnQ0FEWUNBQU5BQWtBZ0NBMEFJQVFvQWhBaUNFRUJhaUVLSUFndEFBRWhBeUFJTFFBQVFmOEJSd1JBSUFRZ0NqWUNFRUVJSVFnZ0EwRUlkQ0FDYWlFQ0RBRUxJQU5CandGTkJFQWdCQ0FLTmdJUUlBTkJDWFFnQW1vaEFrRUhJUWdNQVFzZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQ0FzZ0NFRUJheUVJSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUJJUU1nRGlBT1JTQVNHd3NFZnlBRElBVWdDU2dDQkVFUmRrRUVjU0FKUVFScklnNG9BZ0JCRTNaQkFYRWdCa0VPZGtFUWNTQUdRUkIyUWNBQWNTQUdRYW9CY1hKeWNuSWlFa0hRdVFGcUxRQUFRUUowYWlJTUtBSUFJZ29vQWdBaUFXc2hBeUFTUWRDN0FXb3RBQUFoR0NBUklCUWdEUUovSUFFZ0FrRVFkazBFUUNBQ0lBRkJFSFJySVFJZ0EwR0FnQUp4QkVBZ0NpZ0NCQXdDQ3lBS0tBSUVJUklnRENBS1FReEJDQ0FCSUFOTEloc2JhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBUW9BaEFpQ0VFQmFpRUtJQWd0QUFFaEFTQUlMUUFBUWY4QlJ3UkFJQVFnQ2pZQ0VFRUlJUWdnQVVFSWRDQUNhaUVDREFFTElBRkJqd0ZOQkVBZ0JDQUtOZ0lRSUFGQkNYUWdBbW9oQWtFSElRZ01BUXNnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hDQXNnQ0VFQmF5RUlJQUpCQVhRaEFpQURRUUYwSWdOQmdJQUNTUTBBQ3lBU1JTQVNJQnNiREFFTElBb29BZ1FoRWlBTUlBcEJDRUVNSUFFZ0Ewc2lHeHRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUW9nQ0MwQUFTRURJQWd0QUFCQi93RkhCRUFnQkNBS05nSVFRUWdoQ0NBRFFRaDBJQUpxSVFJTUFRc2dBMEdQQVUwRVFDQUVJQW8yQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hDQXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VJQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBRWhBeUFTSUJKRklCc2JDeUFZY3lJS0d6WUNBQ0FPSUE0b0FnQkJJSEkyQWdBZ0NTQUpLQUlFUVFoeU5nSUVJQWxCZmlBRUtBSjhhMEVDZEdvaUFTQUJLQUlFUVlDQUFuSTJBZ1FnQVNBQktBSUFJQXBCSDNSeVFZQ0FCSEkyQWdBZ0FVRUVheUlCSUFFb0FnQkJnSUFJY2pZQ0FDQUdJQXBCRTNSeVFSQnlCU0FHQzBHQWdJQUJjaUVHQ3dKQUlBWkJnSUdBQ0hFTkFDQUdRZmdlY1VVTkFDQURJQVVnQkNnQ2JDQUdRUU4ySWhKQjd3TnhhaTBBQUVFQ2RHb2lEQ2dDQUNJS0tBSUFJZ0ZySVFNQ2Z5QUJJQUpCRUhaTkJFQWdBaUFCUVJCMGF5RUNJQU5CZ0lBQ2NRUkFJQW9vQWdRTUFnc2dDaWdDQkNFT0lBd2dDa0VNUVFnZ0FTQURTeUlZRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FFS0FJUUlnaEJBV29oQ2lBSUxRQUJJUUVnQ0MwQUFFSC9BVWNFUUNBRUlBbzJBaEJCQ0NFSUlBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVJREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFnTElBaEJBV3NoQ0NBQ1FRRjBJUUlnQTBFQmRDSURRWUNBQWtrTkFBc2dEa1VnRGlBWUd3d0JDeUFLS0FJRUlRNGdEQ0FLUVFoQkRDQUJJQU5MSWhnYmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFRb0FoQWlDRUVCYWlFS0lBZ3RBQUVoQXlBSUxRQUFRZjhCUndSQUlBUWdDallDRUVFSUlRZ2dBMEVJZENBQ2FpRUNEQUVMSUFOQmp3Rk5CRUFnQkNBS05nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFnTUFRc2dCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaENBc2dDRUVCYXlFSUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFCSVFNZ0RpQU9SU0FZR3dzRWZ5QURJQVVnQ1NnQ0JFRVVka0VFY1NBSlFRUnJJZzRvQWdCQkZuWkJBWEVnQmtFUGRrRVFjU0FHUVJOMlFjQUFjU0FTUWFvQmNYSnljbklpRWtIUXVRRnFMUUFBUVFKMGFpSU1LQUlBSWdvb0FnQWlBV3NoQXlBU1FkQzdBV290QUFBaEdDQVJJQkJCQW5ScUlCUWdEUUovSUFFZ0FrRVFkazBFUUNBQ0lBRkJFSFJySVFJZ0EwR0FnQUp4QkVBZ0NpZ0NCQXdDQ3lBS0tBSUVJUklnRENBS1FReEJDQ0FCSUFOTEloc2JhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBUW9BaEFpQ0VFQmFpRUtJQWd0QUFFaEFTQUlMUUFBUWY4QlJ3UkFJQVFnQ2pZQ0VFRUlJUWdnQVVFSWRDQUNhaUVDREFFTElBRkJqd0ZOQkVBZ0JDQUtOZ0lRSUFGQkNYUWdBbW9oQWtFSElRZ01BUXNnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hDQXNnQ0VFQmF5RUlJQUpCQVhRaEFpQURRUUYwSWdOQmdJQUNTUTBBQ3lBU1JTQVNJQnNiREFFTElBb29BZ1FoRWlBTUlBcEJDRUVNSUFFZ0Ewc2lHeHRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUW9nQ0MwQUFTRURJQWd0QUFCQi93RkhCRUFnQkNBS05nSVFRUWdoQ0NBRFFRaDBJQUpxSVFJTUFRc2dBMEdQQVUwRVFDQUVJQW8yQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hDQXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VJQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBRWhBeUFTSUJKRklCc2JDeUFZY3lJQkd6WUNBQ0FPSUE0b0FnQkJnQUp5TmdJQUlBa2dDU2dDQkVIQUFISTJBZ1FnQmlBQlFSWjBja0dBQVhJRklBWUxRWUNBZ0FoeUlRWUxBa0FnQmtHQWlJREFBSEVOQUNBR1FjRDNBWEZGRFFBZ0F5QUZJQVFvQW13Z0JrRUdkaUlTUWU4RGNXb3RBQUJCQW5ScUlnd29BZ0FpQ2lnQ0FDSUJheUVEQW44Z0FTQUNRUkIyVFFSQUlBSWdBVUVRZEdzaEFpQURRWUNBQW5FRVFDQUtLQUlFREFJTElBb29BZ1FoRGlBTUlBcEJERUVJSUFFZ0Ewc2lHQnRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUW9nQ0MwQUFTRUJJQWd0QUFCQi93RkhCRUFnQkNBS05nSVFRUWdoQ0NBQlFRaDBJQUpxSVFJTUFRc2dBVUdQQVUwRVFDQUVJQW8yQWhBZ0FVRUpkQ0FDYWlFQ1FRY2hDQXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VJQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQU5CQVhRaUEwR0FnQUpKRFFBTElBNUZJQTRnR0JzTUFRc2dDaWdDQkNFT0lBd2dDa0VJUVF3Z0FTQURTeUlZRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FFS0FJUUlnaEJBV29oQ2lBSUxRQUJJUU1nQ0MwQUFFSC9BVWNFUUNBRUlBbzJBaEJCQ0NFSUlBTkJDSFFnQW1vaEFnd0JDeUFEUVk4QlRRUkFJQVFnQ2pZQ0VDQURRUWwwSUFKcUlRSkJCeUVJREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFnTElBaEJBV3NoQ0NBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dBU0VESUE0Z0RrVWdHQnNMQkg4Z0F5QUZJQWtvQWdSQkYzWkJCSEVnQ1VFRWF5SU9LQUlBUVJsMlFRRnhJQVpCRW5aQkVIRWdCa0VXZGtIQUFIRWdFa0dxQVhGeWNuSnlJaEpCMExrQmFpMEFBRUVDZEdvaURDZ0NBQ0lLS0FJQUlnRnJJUU1nRWtIUXV3RnFMUUFBSVJnZ0VTQVZhaUFVSUEwQ2Z5QUJJQUpCRUhaTkJFQWdBaUFCUVJCMGF5RUNJQU5CZ0lBQ2NRUkFJQW9vQWdRTUFnc2dDaWdDQkNFU0lBd2dDa0VNUVFnZ0FTQURTeUliRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FFS0FJUUlnaEJBV29oQ2lBSUxRQUJJUUVnQ0MwQUFFSC9BVWNFUUNBRUlBbzJBaEJCQ0NFSUlBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVJREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFnTElBaEJBV3NoQ0NBQ1FRRjBJUUlnQTBFQmRDSURRWUNBQWtrTkFBc2dFa1VnRWlBYkd3d0JDeUFLS0FJRUlSSWdEQ0FLUVFoQkRDQUJJQU5MSWhzYmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFRb0FoQWlDRUVCYWlFS0lBZ3RBQUVoQXlBSUxRQUFRZjhCUndSQUlBUWdDallDRUVFSUlRZ2dBMEVJZENBQ2FpRUNEQUVMSUFOQmp3Rk5CRUFnQkNBS05nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFnTUFRc2dCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaENBc2dDRUVCYXlFSUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFCSVFNZ0VpQVNSU0FiR3dzZ0dITWlBUnMyQWdBZ0RpQU9LQUlBUVlBUWNqWUNBQ0FKSUFrb0FnUkJnQVJ5TmdJRUlBWWdBVUVaZEhKQmdBaHlCU0FHQzBHQWdJREFBSEloQmdzQ1FDQUdRWURBZ0lBRWNRMEFJQVpCZ0x3UGNVVU5BQ0FESUFVZ0JDZ0NiQ0FHUVFsMkloSkI3d054YWkwQUFFRUNkR29pRENnQ0FDSUtLQUlBSWdGcklRTUNmeUFCSUFKQkVIWk5CRUFnQWlBQlFSQjBheUVDSUFOQmdJQUNjUVJBSUFvb0FnUU1BZ3NnQ2lnQ0JDRU9JQXdnQ2tFTVFRZ2dBU0FEU3lJWUcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBRUtBSVFJZ2hCQVdvaENpQUlMUUFCSVFFZ0NDMEFBRUgvQVVjRVFDQUVJQW8yQWhCQkNDRUlJQUZCQ0hRZ0Ftb2hBZ3dCQ3lBQlFZOEJUUVJBSUFRZ0NqWUNFQ0FCUVFsMElBSnFJUUpCQnlFSURBRUxJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRZ0xJQWhCQVdzaENDQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnRGtVZ0RpQVlHd3dCQ3lBS0tBSUVJUTRnRENBS1FRaEJEQ0FCSUFOTEloZ2JhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBUW9BaEFpQ0VFQmFpRUtJQWd0QUFFaEF5QUlMUUFBUWY4QlJ3UkFJQVFnQ2pZQ0VFRUlJUWdnQTBFSWRDQUNhaUVDREFFTElBTkJqd0ZOQkVBZ0JDQUtOZ0lRSUFOQkNYUWdBbW9oQWtFSElRZ01BUXNnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hDQXNnQ0VFQmF5RUlJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBQklRTWdEaUFPUlNBWUd3c0VmeUFESUFVZ0NTZ0NCRUVhZGtFRWNTQUpRUVJySWc0b0FnQkJISFpCQVhFZ0JrRVZka0VRY1NBR1FSbDJRY0FBY1NBU1Fhb0JjWEp5Y25JaUVrSFF1UUZxTFFBQVFRSjBhaUlNS0FJQUlnb29BZ0FpQVdzaEF5QVNRZEM3QVdvdEFBQWhHQ0FSSUJOcUlCUWdEUUovSUFFZ0FrRVFkazBFUUNBQ0lBRkJFSFJySVFJZ0EwR0FnQUp4QkVBZ0NpZ0NCQXdDQ3lBS0tBSUVJUklnRENBS1FReEJDQ0FCSUFOTEloc2JhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBUW9BaEFpQ0VFQmFpRUtJQWd0QUFFaEFTQUlMUUFBUWY4QlJ3UkFJQVFnQ2pZQ0VFRUlJUWdnQVVFSWRDQUNhaUVDREFFTElBRkJqd0ZOQkVBZ0JDQUtOZ0lRSUFGQkNYUWdBbW9oQWtFSElRZ01BUXNnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hDQXNnQ0VFQmF5RUlJQUpCQVhRaEFpQURRUUYwSWdOQmdJQUNTUTBBQ3lBU1JTQVNJQnNiREFFTElBb29BZ1FoRWlBTUlBcEJDRUVNSUFFZ0Ewc2lHeHRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUW9nQ0MwQUFTRURJQWd0QUFCQi93RkhCRUFnQkNBS05nSVFRUWdoQ0NBRFFRaDBJQUpxSVFJTUFRc2dBMEdQQVUwRVFDQUVJQW8yQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hDQXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VJQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBRWhBeUFTSUJKRklCc2JDeUFZY3lJS0d6WUNBQ0FPSUE0b0FnQkJnSUFCY2pZQ0FDQUpJQWtvQWdSQmdDQnlOZ0lFSUFRb0FueEJBblFnQ1dvaUFTQUJLQUlFUVFSeU5nSUVJQUVnQVNnQ0RFRUJjallDRENBQklBRW9BZ2dnQ2tFU2RISkJBbkkyQWdnZ0JpQUtRUngwY2tHQXdBQnlCU0FHQzBHQWdJQ0FCSEloQmdzZ0NTQUdOZ0lBQ3lBSlFRUnFJUVlnRVVFRWFpRVJJQXRCQVdvaUN5QVFSdzBBQ3lBSlFReHFJUVlnRVNBVGFpRVJJQWRCQkdvaUJ5QUVLQUtBQVNJQlFYeHhTUTBBQ3d3QkMwRUVJQUZCZkhFaUJpQUdRUVJORzBFQmF5SUdRWHh4UVFScUlRY2dDU0FHUVFGMFFYaHhha0VVYWlFR0N5QUVJQWcyQWdnZ0JDQUROZ0lFSUFRZ0FqWUNBQ0FFSUF3MkFtZ2dFRVVOQUNBQklBZE5EUUFEUUNBQklBZEdJVk5CQUNFSUlBY2hBU0JUUlFSQUEwQWdCQ0FHSUJFZ0NDQVFiRUVDZEdvZ0RTQUlJQVFvQW54QkFtcEJBQkJaSUFoQkFXb2lDQ0FFS0FLQUFTSUJJQWRyU1EwQUN3c2dCa0VFYWlFR0lCRkJCR29oRVNBWFFRRnFJaGNnRUVjTkFBc0xEQUlMQTBCQkFDRVhBMEFnQVNFSklBWWlCeWdDQUNJR0JFQUNRQ0FHUVpDQWdBRnhEUUFnQmtIdkEzRWlBVVVOQUNBRElCQWdCQ2dDYkNBQmFpMEFBRUVDZEdvaURDZ0NBQ0lMS0FJQUlnRnJJUU1DZnlBQklBSkJFSFpMQkVBZ0N5Z0NCQ0VLSUF3Z0MwRUlRUXdnQVNBRFN5SVVHMm9vQWdBMkFnQURRQUpBSUFnTkFDQUVLQUlRSWdoQkFXb2hDeUFJTFFBQklRTWdDQzBBQUVIL0FVWUVRQ0FEUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRZ01BZ3NnQkNBTE5nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFnTUFRc2dCQ0FMTmdJUVFRZ2hDQ0FEUVFoMElBSnFJUUlMSUFoQkFXc2hDQ0FDUVFGMElRSWdBVUVCZENJQlFZQ0FBa2tOQUFzZ0FTRURJQW9nQ2tVZ0ZCc01BUXNnQWlBQlFSQjBheUVDSUFOQmdJQUNjVVVFUUNBTEtBSUVJUW9nRENBTFFReEJDQ0FCSUFOTEloUWJhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBUW9BaEFpQ0VFQmFpRUxJQWd0QUFFaEFTQUlMUUFBUWY4QlJnUkFJQUZCa0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaENBd0NDeUFFSUFzMkFoQWdBVUVKZENBQ2FpRUNRUWNoQ0F3QkN5QUVJQXMyQWhCQkNDRUlJQUZCQ0hRZ0Ftb2hBZ3NnQ0VFQmF5RUlJQUpCQVhRaEFpQURRUUYwSWdOQmdJQUNTUTBBQ3lBS1JTQUtJQlFiREFFTElBc29BZ1FMQkg4Z0F5QVFJQWNvQWdSQkVYWkJCSEVnQjBFRWF5SUtLQUlBUVJOMlFRRnhJQVpCRG5aQkVIRWdCa0VRZGtIQUFIRWdCa0dxQVhGeWNuSnlJaFJCMExrQmFpMEFBRUVDZEdvaURDZ0NBQ0lMS0FJQUlnRnJJUU1nRkVIUXV3RnFMUUFBSVJNZ0NTQUZJQkVDZnlBQklBSkJFSFpMQkVBZ0N5Z0NCQ0VVSUF3Z0MwRUlRUXdnQVNBRFN5SU9HMm9vQWdBMkFnQURRQUpBSUFnTkFDQUVLQUlRSWdoQkFXb2hDeUFJTFFBQklRTWdDQzBBQUVIL0FVWUVRQ0FEUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRZ01BZ3NnQkNBTE5nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFnTUFRc2dCQ0FMTmdJUVFRZ2hDQ0FEUVFoMElBSnFJUUlMSUFoQkFXc2hDQ0FDUVFGMElRSWdBVUVCZENJQlFZQ0FBa2tOQUFzZ0FTRURJQlFnRkVVZ0Roc01BUXNnQWlBQlFSQjBheUVDSUFOQmdJQUNjVVVFUUNBTEtBSUVJUlFnRENBTFFReEJDQ0FCSUFOTElnNGJhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBUW9BaEFpQ0VFQmFpRUxJQWd0QUFFaEFTQUlMUUFBUWY4QlJnUkFJQUZCa0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaENBd0NDeUFFSUFzMkFoQWdBVUVKZENBQ2FpRUNRUWNoQ0F3QkN5QUVJQXMyQWhCQkNDRUlJQUZCQ0hRZ0Ftb2hBZ3NnQ0VFQmF5RUlJQUpCQVhRaEFpQURRUUYwSWdOQmdJQUNTUTBBQ3lBVVJTQVVJQTRiREFFTElBc29BZ1FMSUJOeklnRWJOZ0lBSUFvZ0NpZ0NBRUVnY2pZQ0FDQUhJQWNvQWdSQkNISTJBZ1FnQmlBQlFSTjBja0VRY2dVZ0JndEJnSUNBQVhJaEJnc0NRQ0FHUVlDQmdBaHhEUUFnQmtINEhuRkZEUUFnQXlBUUlBUW9BbXdnQmtFRGRpSVVRZThEY1dvdEFBQkJBblJxSWd3b0FnQWlDeWdDQUNJQmF5RURBbjhnQVNBQ1FSQjJTd1JBSUFzb0FnUWhDaUFNSUF0QkNFRU1JQUVnQTBzaUV4dHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0JDZ0NFQ0lJUVFGcUlRc2dDQzBBQVNFRElBZ3RBQUJCL3dGR0JFQWdBMEdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFSURBSUxJQVFnQ3pZQ0VDQURRUWwwSUFKcUlRSkJCeUVJREFFTElBUWdDellDRUVFSUlRZ2dBMEVJZENBQ2FpRUNDeUFJUVFGcklRZ2dBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFFaEF5QUtJQXBGSUJNYkRBRUxJQUlnQVVFUWRHc2hBaUFEUVlDQUFuRkZCRUFnQ3lnQ0JDRUtJQXdnQzBFTVFRZ2dBU0FEU3lJVEcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBRUtBSVFJZ2hCQVdvaEN5QUlMUUFCSVFFZ0NDMEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFnTUFnc2dCQ0FMTmdJUUlBRkJDWFFnQW1vaEFrRUhJUWdNQVFzZ0JDQUxOZ0lRUVFnaENDQUJRUWgwSUFKcUlRSUxJQWhCQVdzaENDQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnQ2tVZ0NpQVRHd3dCQ3lBTEtBSUVDd1IvSUFNZ0VDQUhLQUlFUVJSMlFRUnhJQWRCQkdzaUNpZ0NBRUVXZGtFQmNTQUdRUTkyUVJCeElBWkJFM1pCd0FCeElCUkJxZ0Z4Y25KeWNpSVVRZEM1QVdvdEFBQkJBblJxSWd3b0FnQWlDeWdDQUNJQmF5RURJQlJCMExzQmFpMEFBQ0VUSUFrZ0JTQVJBbjhnQVNBQ1FSQjJTd1JBSUFzb0FnUWhGQ0FNSUF0QkNFRU1JQUVnQTBzaURodHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0JDZ0NFQ0lJUVFGcUlRc2dDQzBBQVNFRElBZ3RBQUJCL3dGR0JFQWdBMEdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFSURBSUxJQVFnQ3pZQ0VDQURRUWwwSUFKcUlRSkJCeUVJREFFTElBUWdDellDRUVFSUlRZ2dBMEVJZENBQ2FpRUNDeUFJUVFGcklRZ2dBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFFaEF5QVVJQlJGSUE0YkRBRUxJQUlnQVVFUWRHc2hBaUFEUVlDQUFuRkZCRUFnQ3lnQ0JDRVVJQXdnQzBFTVFRZ2dBU0FEU3lJT0cyb29BZ0EyQWdBRFFBSkFJQWdOQUNBRUtBSVFJZ2hCQVdvaEN5QUlMUUFCSVFFZ0NDMEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFnTUFnc2dCQ0FMTmdJUUlBRkJDWFFnQW1vaEFrRUhJUWdNQVFzZ0JDQUxOZ0lRUVFnaENDQUJRUWgwSUFKcUlRSUxJQWhCQVdzaENDQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnRkVVZ0ZDQU9Hd3dCQ3lBTEtBSUVDeUFUY3lJQkd6WUNnQUlnQ2lBS0tBSUFRWUFDY2pZQ0FDQUhJQWNvQWdSQndBQnlOZ0lFSUFZZ0FVRVdkSEpCZ0FGeUJTQUdDMEdBZ0lBSWNpRUdDd0pBSUFaQmdJaUF3QUJ4RFFBZ0JrSEE5d0Z4UlEwQUlBTWdFQ0FFS0FKc0lBWkJCbllpRkVIdkEzRnFMUUFBUVFKMGFpSU1LQUlBSWdzb0FnQWlBV3NoQXdKL0lBRWdBa0VRZGtzRVFDQUxLQUlFSVFvZ0RDQUxRUWhCRENBQklBTkxJaE1iYWlnQ0FEWUNBQU5BQWtBZ0NBMEFJQVFvQWhBaUNFRUJhaUVMSUFndEFBRWhBeUFJTFFBQVFmOEJSZ1JBSUFOQmtBRlBCRUFnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hDQXdDQ3lBRUlBczJBaEFnQTBFSmRDQUNhaUVDUVFjaENBd0JDeUFFSUFzMkFoQkJDQ0VJSUFOQkNIUWdBbW9oQWdzZ0NFRUJheUVJSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUJJUU1nQ2lBS1JTQVRHd3dCQ3lBQ0lBRkJFSFJySVFJZ0EwR0FnQUp4UlFSQUlBc29BZ1FoQ2lBTUlBdEJERUVJSUFFZ0Ewc2lFeHRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUXNnQ0MwQUFTRUJJQWd0QUFCQi93RkdCRUFnQVVHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUlEQUlMSUFRZ0N6WUNFQ0FCUVFsMElBSnFJUUpCQnlFSURBRUxJQVFnQ3pZQ0VFRUlJUWdnQVVFSWRDQUNhaUVDQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQU5CQVhRaUEwR0FnQUpKRFFBTElBcEZJQW9nRXhzTUFRc2dDeWdDQkFzRWZ5QURJQkFnQnlnQ0JFRVhka0VFY1NBSFFRUnJJZ29vQWdCQkdYWkJBWEVnQmtFU2RrRVFjU0FHUVJaMlFjQUFjU0FVUWFvQmNYSnljbklpRkVIUXVRRnFMUUFBUVFKMGFpSU1LQUlBSWdzb0FnQWlBV3NoQXlBVVFkQzdBV290QUFBaEV5QUpJQVVnRVFKL0lBRWdBa0VRZGtzRVFDQUxLQUlFSVJRZ0RDQUxRUWhCRENBQklBTkxJZzRiYWlnQ0FEWUNBQU5BQWtBZ0NBMEFJQVFvQWhBaUNFRUJhaUVMSUFndEFBRWhBeUFJTFFBQVFmOEJSZ1JBSUFOQmtBRlBCRUFnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hDQXdDQ3lBRUlBczJBaEFnQTBFSmRDQUNhaUVDUVFjaENBd0JDeUFFSUFzMkFoQkJDQ0VJSUFOQkNIUWdBbW9oQWdzZ0NFRUJheUVJSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUJJUU1nRkNBVVJTQU9Hd3dCQ3lBQ0lBRkJFSFJySVFJZ0EwR0FnQUp4UlFSQUlBc29BZ1FoRkNBTUlBdEJERUVJSUFFZ0Ewc2lEaHRxS0FJQU5nSUFBMEFDUUNBSURRQWdCQ2dDRUNJSVFRRnFJUXNnQ0MwQUFTRUJJQWd0QUFCQi93RkdCRUFnQVVHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUlEQUlMSUFRZ0N6WUNFQ0FCUVFsMElBSnFJUUpCQnlFSURBRUxJQVFnQ3pZQ0VFRUlJUWdnQVVFSWRDQUNhaUVDQ3lBSVFRRnJJUWdnQWtFQmRDRUNJQU5CQVhRaUEwR0FnQUpKRFFBTElCUkZJQlFnRGhzTUFRc2dDeWdDQkFzZ0UzTWlBUnMyQW9BRUlBb2dDaWdDQUVHQUVISTJBZ0FnQnlBSEtBSUVRWUFFY2pZQ0JDQUdJQUZCR1hSeVFZQUljZ1VnQmd0QmdJQ0F3QUJ5SVFZTEFrQWdCa0dBd0lDQUJIRU5BQ0FHUVlDOEQzRkZEUUFnQXlBUUlBUW9BbXdnQmtFSmRpSVVRZThEY1dvdEFBQkJBblJxSWd3b0FnQWlDeWdDQUNJQmF5RURBbjhnQVNBQ1FSQjJTd1JBSUFzb0FnUWhDaUFNSUF0QkNFRU1JQUVnQTBzaUV4dHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0JDZ0NFQ0lJUVFGcUlRc2dDQzBBQVNFRElBZ3RBQUJCL3dGR0JFQWdBMEdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFSURBSUxJQVFnQ3pZQ0VDQURRUWwwSUFKcUlRSkJCeUVJREFFTElBUWdDellDRUVFSUlRZ2dBMEVJZENBQ2FpRUNDeUFJUVFGcklRZ2dBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFFaEF5QUtJQXBGSUJNYkRBRUxJQUlnQVVFUWRHc2hBaUFEUVlDQUFuRkZCRUFnQ3lnQ0JDRUtJQXdnQzBFTVFRZ2dBU0FEU3lJVEcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBRUtBSVFJZ2hCQVdvaEN5QUlMUUFCSVFFZ0NDMEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFnTUFnc2dCQ0FMTmdJUUlBRkJDWFFnQW1vaEFrRUhJUWdNQVFzZ0JDQUxOZ0lRUVFnaENDQUJRUWgwSUFKcUlRSUxJQWhCQVdzaENDQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnQ2tVZ0NpQVRHd3dCQ3lBTEtBSUVDd1IvSUFNZ0VDQUhLQUlFUVJwMlFRUnhJQWRCQkdzaUNpZ0NBRUVjZGtFQmNTQUdRUlYyUVJCeElBWkJHWFpCd0FCeElCUkJxZ0Z4Y25KeWNpSVVRZEM1QVdvdEFBQkJBblJxSWd3b0FnQWlDeWdDQUNJQmF5RURJQlJCMExzQmFpMEFBQ0VUSUFrZ0JTQVJBbjhnQVNBQ1FSQjJTd1JBSUFzb0FnUWhGQ0FNSUF0QkNFRU1JQUVnQTBzaURodHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0JDZ0NFQ0lJUVFGcUlRc2dDQzBBQVNFRElBZ3RBQUJCL3dGR0JFQWdBMEdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFSURBSUxJQVFnQ3pZQ0VDQURRUWwwSUFKcUlRSkJCeUVJREFFTElBUWdDellDRUVFSUlRZ2dBMEVJZENBQ2FpRUNDeUFJUVFGcklRZ2dBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFFaEF5QVVJQlJGSUE0YkRBRUxJQUlnQVVFUWRHc2hBaUFEUVlDQUFuRkZCRUFnQ3lnQ0JDRVVJQXdnQzBFTVFRZ2dBU0FEU3lJT0cyb29BZ0EyQWdBRFFBSkFJQWdOQUNBRUtBSVFJZ2hCQVdvaEN5QUlMUUFCSVFFZ0NDMEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFnTUFnc2dCQ0FMTmdJUUlBRkJDWFFnQW1vaEFrRUhJUWdNQVFzZ0JDQUxOZ0lRUVFnaENDQUJRUWgwSUFKcUlRSUxJQWhCQVdzaENDQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnRkVVZ0ZDQU9Hd3dCQ3lBTEtBSUVDeUFUY3lJQkd6WUNnQVlnQ2lBS0tBSUFRWUNBQVhJMkFnQWdCeUFIS0FJRVFZQWdjallDQkNBSElBY29Bb1FDUVFSeU5nS0VBaUFISUFjb0Fvd0NRUUZ5TmdLTUFpQUhJQWNvQW9nQ0lBRkJFblJ5UVFKeU5nS0lBaUFHSUFGQkhIUnlRWURBQUhJRklBWUxRWUNBZ0lBRWNpRUdDeUFISUFZMkFnQUxJQWRCQkdvaEJpQUpRUVJxSVFFZ0YwRUJhaUlYUWNBQVJ3MEFDeUFIUVF4cUlRWWdDVUdFQm1vaEFTQU5RVHhKSVZRZ0RVRUVhaUVOSUZRTkFBc0xJQVFnQ0RZQ0NDQUVJQU0yQWdRZ0JDQUNOZ0lBSUFRZ0REWUNhQXNNQWdzZ0lnUkFRUUVnR1hSQkFYWWhDU0FFS0FKOEloRkJBblFpRENBRUtBSjRha0VNYWlFQklBUW9BblFoQmtFQUlRMGdCQ2dDZ0FFaUEwRUVUd1JBSUJGRkRRUWdFVUVEYkNFRklCRkJBWFFoQzBFQUlBbHJJUUlEUUNBTFFRSjBJUXBCQUNFREEwQUNRQ0FCSWdjb0FnQWlBVVVOQUNBQlFaQ0FnQUZ4UVJCR0JFQWdCQ2dDQUNFQkFrQWdCQ2dDQ0NJUURRQWdBVUgvQVVZaEVDQUVLQUlRSWdndEFBQWhBUUpBSUJCRkJFQWdCQ0FCTmdJQUlBUWdDRUVCYWpZQ0VBd0JDeUFCUVk4QlRRUkFJQVFnQVRZQ0FDQUVJQWhCQVdvMkFoQkJCeUVRREFJTFFmOEJJUUVnQkVIL0FUWUNBQXRCQ0NFUUN5QUVJQkJCQVdzaUNEWUNDQ0FHSUFJZ0NTQUJJQWgyUVFGeElBWW9BZ0FpQVVFZmRrWWJJQUZxTmdJQUlBY2dCeWdDQUVHQWdNQUFjaUlCTmdJQUN5QUJRWUNCZ0FoeFFZQUJSZ1JBSUFRb0FnQWhBUUpBSUFRb0FnZ2lFQTBBSUFGQi93RkdJUkFnQkNnQ0VDSUlMUUFBSVFFQ1FDQVFSUVJBSUFRZ0FUWUNBQ0FFSUFoQkFXbzJBaEFNQVFzZ0FVR1BBVTBFUUNBRUlBRTJBZ0FnQkNBSVFRRnFOZ0lRUVFjaEVBd0NDMEgvQVNFQklBUkIvd0UyQWdBTFFRZ2hFQXNnQkNBUVFRRnJJZ2cyQWdnZ0JpQU1haUlRSUFJZ0NTQUJJQWgyUVFGeElCQW9BZ0FpQVVFZmRrWWJJQUZxTmdJQUlBY2dCeWdDQUVHQWdJQUVjaUlCTmdJQUN5QUJRWUNJZ01BQWNVR0FDRVlFUUNBRUtBSUFJUUVDUUNBRUtBSUlJaEFOQUNBQlFmOEJSaUVRSUFRb0FoQWlDQzBBQUNFQkFrQWdFRVVFUUNBRUlBRTJBZ0FnQkNBSVFRRnFOZ0lRREFFTElBRkJqd0ZOQkVBZ0JDQUJOZ0lBSUFRZ0NFRUJhallDRUVFSElSQU1BZ3RCL3dFaEFTQUVRZjhCTmdJQUMwRUlJUkFMSUFRZ0VFRUJheUlJTmdJSUlBWWdDbW9pRUNBQ0lBa2dBU0FJZGtFQmNTQVFLQUlBSWdGQkgzWkdHeUFCYWpZQ0FDQUhJQWNvQWdCQmdJQ0FJSElpQVRZQ0FBc2dBVUdBd0lDQUJIRkJnTUFBUncwQUlBWWdCVUVDZEdvaEVDQUVLQUlBSVFFQ1FDQUVLQUlJSWdnTkFDQUJRZjhCUmlFVUlBUW9BaEFpQ0MwQUFDRUJBa0FnRkVVRVFDQUVJQUUyQWdBZ0JDQUlRUUZxTmdJUURBRUxJQUZCandGTkJFQWdCQ0FCTmdJQUlBUWdDRUVCYWpZQ0VFRUhJUWdNQWd0Qi93RWhBU0FFUWY4Qk5nSUFDMEVJSVFnTElBUWdDRUVCYXlJSU5nSUlJQkFnQWlBSklBRWdDSFpCQVhFZ0VDZ0NBQ0lCUVI5MlJoc2dBV28yQWdBZ0J5QUhLQUlBUVlDQWdJQUNjallDQUFzZ0JrRUVhaUVHSUFkQkJHb2hBU0FEUVFGcUlnTWdFVWNOQUFzZ0IwRU1haUVCSUFZZ0JVRUNkR29oQmlBTlFRUnFJZzBnQkNnQ2dBRWlBMEY4Y1VrTkFBc0xJQU1nRFUwTkFpQVJSUTBDUVFBaEUwRUFJQWxySVFVZ0F5RUhBMEFDUUNBSElBMUdCRUFnRFNFSERBRUxJQUVvQWdBaEVFRUFJUUlEUUVHUWdJQUJJQUpCQTJ3aUIzUWdFSEZCRUNBSGRFWUVRQ0FHSUFJZ0VXeEJBblJxSVJBZ0JDZ0NBQ0VEQWtBZ0JDZ0NDQ0lJRFFBZ0EwSC9BVWNoRENBRUtBSVFJZ2d0QUFBaEF3SkFJQXhGQkVBZ0EwR1FBVThFUUVIL0FTRURJQVJCL3dFMkFnQU1BZ3NnQkNBRE5nSUFJQVFnQ0VFQmFqWUNFRUVISVFnTUFnc2dCQ0FETmdJQUlBUWdDRUVCYWpZQ0VBdEJDQ0VJQ3lBRUlBaEJBV3NpQ0RZQ0NDQVFJQVVnQ1NBRElBaDJRUUZ4SUJBb0FnQWlBMEVmZGtZYklBTnFOZ0lBSUFFZ0FTZ0NBRUdBZ01BQUlBZDBjaUlRTmdJQUlBUW9Bb0FCSVFNTElBTWhCeUFDUVFGcUlnSWdBeUFOYTBrTkFBc0xJQVpCQkdvaEJpQUJRUVJxSVFFZ0UwRUJhaUlUSUJGSERRQUxEQUlMSUFRb0FuZ2hDQ0FFS0FKMElRY2dCQ2dDZ0FFaEF3SkFJQVFvQW53aURFSEFBRWNOQUNBRFFjQUFSdzBBSUFoQmpBSnFJUU5CQUNFVFFRQkJBU0FaZEVFQmRpSUZheUVNSUFRb0FnZ2hBaUFFS0FJRUlRWWdCQ2dDQUNFQklBUW9BbWdoRFFOQVFRQWhDQU5BSUFjaENTQURJaEFvQWdBaUJ3UkFJQU1oVlNBSFFaQ0FnQUZ4UVJCR0JFQWdCaUFQUVJCQkQwRU9JQWRCN3dOeEd5QUhRWUNBd0FCeEcwRUNkR29pRFNnQ0FDSVJLQUlBSWdOcklRWUNmeUFESUFGQkVIWkxCRUFnRVNnQ0JDRUxJQTBnRVVFSVFRd2dBeUFHU3lJS0cyb29BZ0EyQWdBRFFBSkFJQUlOQUNBRUtBSVFJZ0pCQVdvaEVTQUNMUUFCSVFZZ0FpMEFBRUgvQVVZRVFDQUdRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FCUVlEK0Eyb2hBVUVJSVFJTUFnc2dCQ0FSTmdJUUlBWkJDWFFnQVdvaEFVRUhJUUlNQVFzZ0JDQVJOZ0lRUVFnaEFpQUdRUWgwSUFGcUlRRUxJQUpCQVdzaEFpQUJRUUYwSVFFZ0EwRUJkQ0lEUVlDQUFra05BQXNnQXlFR0lBc2dDMFVnQ2hzTUFRc2dBU0FEUVJCMGF5RUJJQVpCZ0lBQ2NVVUVRQ0FSS0FJRUlRc2dEU0FSUVF4QkNDQURJQVpMSWdvYmFpZ0NBRFlDQUFOQUFrQWdBZzBBSUFRb0FoQWlBa0VCYWlFUklBSXRBQUVoQXlBQ0xRQUFRZjhCUmdSQUlBTkJrQUZQQkVBZ0JDQUVLQUlNUVFGcU5nSU1JQUZCZ1A0RGFpRUJRUWdoQWd3Q0N5QUVJQkUyQWhBZ0EwRUpkQ0FCYWlFQlFRY2hBZ3dCQ3lBRUlCRTJBaEJCQ0NFQ0lBTkJDSFFnQVdvaEFRc2dBa0VCYXlFQ0lBRkJBWFFoQVNBR1FRRjBJZ1pCZ0lBQ1NRMEFDeUFMUlNBTElBb2JEQUVMSUJFb0FnUUxJUU1nQ1NBTUlBVWdBeUFKS0FJQUloRkJIM1pHR3lBUmFqWUNBQ0FIUVlDQXdBQnlJUWNMSUFkQmdJR0FDSEZCZ0FGR0JFQWdCaUFQUVJCQkQwRU9JQWRCK0I1eEd5QUhRWUNBZ0FSeEcwRUNkR29pRFNnQ0FDSVJLQUlBSWdOcklRWUNmeUFESUFGQkVIWkxCRUFnRVNnQ0JDRUxJQTBnRVVFSVFRd2dBeUFHU3lJS0cyb29BZ0EyQWdBRFFBSkFJQUlOQUNBRUtBSVFJZ0pCQVdvaEVTQUNMUUFCSVFZZ0FpMEFBRUgvQVVZRVFDQUdRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FCUVlEK0Eyb2hBVUVJSVFJTUFnc2dCQ0FSTmdJUUlBWkJDWFFnQVdvaEFVRUhJUUlNQVFzZ0JDQVJOZ0lRUVFnaEFpQUdRUWgwSUFGcUlRRUxJQUpCQVdzaEFpQUJRUUYwSVFFZ0EwRUJkQ0lEUVlDQUFra05BQXNnQXlFR0lBc2dDMFVnQ2hzTUFRc2dBU0FEUVJCMGF5RUJJQVpCZ0lBQ2NVVUVRQ0FSS0FJRUlRc2dEU0FSUVF4QkNDQURJQVpMSWdvYmFpZ0NBRFlDQUFOQUFrQWdBZzBBSUFRb0FoQWlBa0VCYWlFUklBSXRBQUVoQXlBQ0xRQUFRZjhCUmdSQUlBTkJrQUZQQkVBZ0JDQUVLQUlNUVFGcU5nSU1JQUZCZ1A0RGFpRUJRUWdoQWd3Q0N5QUVJQkUyQWhBZ0EwRUpkQ0FCYWlFQlFRY2hBZ3dCQ3lBRUlCRTJBaEJCQ0NFQ0lBTkJDSFFnQVdvaEFRc2dBa0VCYXlFQ0lBRkJBWFFoQVNBR1FRRjBJZ1pCZ0lBQ1NRMEFDeUFMUlNBTElBb2JEQUVMSUJFb0FnUUxJUU1nQ1NBTUlBVWdBeUFKS0FLQUFpSVJRUjkyUmhzZ0VXbzJBb0FDSUFkQmdJQ0FCSEloQndzZ0IwR0FpSURBQUhGQmdBaEdCRUFnQmlBUFFSQkJEMEVPSUFkQndQY0JjUnNnQjBHQWdJQWdjUnRCQW5ScUlnMG9BZ0FpRVNnQ0FDSURheUVHQW44Z0F5QUJRUkIyU3dSQUlCRW9BZ1FoQ3lBTklCRkJDRUVNSUFNZ0Jrc2lDaHRxS0FJQU5nSUFBMEFDUUNBQ0RRQWdCQ2dDRUNJQ1FRRnFJUkVnQWkwQUFTRUdJQUl0QUFCQi93RkdCRUFnQmtHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FVR0EvZ05xSVFGQkNDRUNEQUlMSUFRZ0VUWUNFQ0FHUVFsMElBRnFJUUZCQnlFQ0RBRUxJQVFnRVRZQ0VFRUlJUUlnQmtFSWRDQUJhaUVCQ3lBQ1FRRnJJUUlnQVVFQmRDRUJJQU5CQVhRaUEwR0FnQUpKRFFBTElBTWhCaUFMSUF0RklBb2JEQUVMSUFFZ0EwRVFkR3NoQVNBR1FZQ0FBbkZGQkVBZ0VTZ0NCQ0VMSUEwZ0VVRU1RUWdnQXlBR1N5SUtHMm9vQWdBMkFnQURRQUpBSUFJTkFDQUVLQUlRSWdKQkFXb2hFU0FDTFFBQklRTWdBaTBBQUVIL0FVWUVRQ0FEUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQlFZRCtBMm9oQVVFSUlRSU1BZ3NnQkNBUk5nSVFJQU5CQ1hRZ0FXb2hBVUVISVFJTUFRc2dCQ0FSTmdJUVFRZ2hBaUFEUVFoMElBRnFJUUVMSUFKQkFXc2hBaUFCUVFGMElRRWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0MwVWdDeUFLR3d3QkN5QVJLQUlFQ3lFRElBa2dEQ0FGSUFNZ0NTZ0NnQVFpRVVFZmRrWWJJQkZxTmdLQUJDQUhRWUNBZ0NCeUlRY0xJRlVnQjBHQXdJQ0FCSEZCZ01BQVJnUi9JQVlnRDBFUVFROUJEaUFIUVlDOEQzRWJJQWRCZ0lDQWdBSnhHMEVDZEdvaURTZ0NBQ0lSS0FJQUlnTnJJUVlDZnlBRElBRkJFSFpMQkVBZ0VTZ0NCQ0VMSUEwZ0VVRUlRUXdnQXlBR1N5SUtHMm9vQWdBMkFnQURRQUpBSUFJTkFDQUVLQUlRSWdKQkFXb2hFU0FDTFFBQklRWWdBaTBBQUVIL0FVWUVRQ0FHUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQlFZRCtBMm9oQVVFSUlRSU1BZ3NnQkNBUk5nSVFJQVpCQ1hRZ0FXb2hBVUVISVFJTUFRc2dCQ0FSTmdJUVFRZ2hBaUFHUVFoMElBRnFJUUVMSUFKQkFXc2hBaUFCUVFGMElRRWdBMEVCZENJRFFZQ0FBa2tOQUFzZ0F5RUdJQXNnQzBVZ0Noc01BUXNnQVNBRFFSQjBheUVCSUFaQmdJQUNjVVVFUUNBUktBSUVJUXNnRFNBUlFReEJDQ0FESUFaTElnb2JhaWdDQURZQ0FBTkFBa0FnQWcwQUlBUW9BaEFpQWtFQmFpRVJJQUl0QUFFaEF5QUNMUUFBUWY4QlJnUkFJQU5Ca0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFGQmdQNERhaUVCUVFnaEFnd0NDeUFFSUJFMkFoQWdBMEVKZENBQmFpRUJRUWNoQWd3QkN5QUVJQkUyQWhCQkNDRUNJQU5CQ0hRZ0FXb2hBUXNnQWtFQmF5RUNJQUZCQVhRaEFTQUdRUUYwSWdaQmdJQUNTUTBBQ3lBTFJTQUxJQW9iREFFTElCRW9BZ1FMSVFNZ0NTQU1JQVVnQXlBSktBS0FCaUlSUVI5MlJoc2dFV28yQW9BR0lBZEJnSUNBZ0FKeUJTQUhDellDQUFzZ0VFRUVhaUVESUFsQkJHb2hCeUFJUVFGcUlnaEJ3QUJIRFFBTElCQkJER29oQXlBSlFZUUdhaUVISUJOQlBFa2hWaUFUUVFScUlSTWdWZzBBQ3lBRUlBSTJBZ2dnQkNBR05nSUVJQVFnQVRZQ0FDQUVJQTAyQW1nTUFndEJBU0FaZEVFQmRpRUxJQWdnREVFQ2RDSU9ha0VNYWlFSklBUW9BZ2doQWlBRUtBSUVJUVlnQkNnQ0FDRUJJQVFvQW1naERVRUFJUkVDUUNBRFFRUkpEUUFnREFSQUlBeEJBMndoRkNBTVFRRjBJUmRCQUNBTGF5RUtBMEFnRjBFQ2RDRVNRUUFoQ0FOQUlBa2lCU2dDQUNJUUJFQWdFRUdRZ0lBQmNVRVFSZ1JBSUFZZ0QwRVFRUTlCRGlBUVFlOERjUnNnRUVHQWdNQUFjUnRCQW5ScUlnMG9BZ0FpQ1NnQ0FDSURheUVHQW44Z0F5QUJRUkIyVFFSQUlBRWdBMEVRZEdzaEFTQUdRWUNBQW5FRVFDQUpLQUlFREFJTElBa29BZ1FoRXlBTklBbEJERUVJSUFNZ0Jrc2lGUnRxS0FJQU5nSUFBMEFDUUNBQ0RRQWdCQ2dDRUNJSlFRRnFJUUlnQ1MwQUFTRURJQWt0QUFCQi93RkhCRUFnQkNBQ05nSVFRUWdoQWlBRFFRaDBJQUZxSVFFTUFRc2dBMEdQQVUwRVFDQUVJQUkyQWhBZ0EwRUpkQ0FCYWlFQlFRY2hBZ3dCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBVUdBL2dOcUlRRkJDQ0VDQ3lBQ1FRRnJJUUlnQVVFQmRDRUJJQVpCQVhRaUJrR0FnQUpKRFFBTElCTkZJQk1nRlJzTUFRc2dDU2dDQkNFVElBMGdDVUVJUVF3Z0F5QUdTeUlWRzJvb0FnQTJBZ0FEUUFKQUlBSU5BQ0FFS0FJUUlnbEJBV29oQWlBSkxRQUJJUVlnQ1MwQUFFSC9BVWNFUUNBRUlBSTJBaEJCQ0NFQ0lBWkJDSFFnQVdvaEFRd0JDeUFHUVk4QlRRUkFJQVFnQWpZQ0VDQUdRUWwwSUFGcUlRRkJCeUVDREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FCUVlEK0Eyb2hBVUVJSVFJTElBSkJBV3NoQWlBQlFRRjBJUUVnQTBFQmRDSURRWUNBQWtrTkFBc2dBeUVHSUJNZ0UwVWdGUnNMSVFNZ0J5QUtJQXNnQXlBSEtBSUFJZ2xCSDNaR0d5QUphallDQUNBUVFZQ0F3QUJ5SVJBTElCQkJnSUdBQ0hGQmdBRkdCRUFnQmlBUFFSQkJEMEVPSUJCQitCNXhHeUFRUVlDQWdBUnhHMEVDZEdvaURTZ0NBQ0lKS0FJQUlnTnJJUVlDZnlBRElBRkJFSFpOQkVBZ0FTQURRUkIwYXlFQklBWkJnSUFDY1FSQUlBa29BZ1FNQWdzZ0NTZ0NCQ0VUSUEwZ0NVRU1RUWdnQXlBR1N5SVZHMm9vQWdBMkFnQURRQUpBSUFJTkFDQUVLQUlRSWdsQkFXb2hBaUFKTFFBQklRTWdDUzBBQUVIL0FVY0VRQ0FFSUFJMkFoQkJDQ0VDSUFOQkNIUWdBV29oQVF3QkN5QURRWThCVFFSQUlBUWdBallDRUNBRFFRbDBJQUZxSVFGQkJ5RUNEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUJRWUQrQTJvaEFVRUlJUUlMSUFKQkFXc2hBaUFCUVFGMElRRWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0UwVWdFeUFWR3d3QkN5QUpLQUlFSVJNZ0RTQUpRUWhCRENBRElBWkxJaFViYWlnQ0FEWUNBQU5BQWtBZ0FnMEFJQVFvQWhBaUNVRUJhaUVDSUFrdEFBRWhCaUFKTFFBQVFmOEJSd1JBSUFRZ0FqWUNFRUVJSVFJZ0JrRUlkQ0FCYWlFQkRBRUxJQVpCandGTkJFQWdCQ0FDTmdJUUlBWkJDWFFnQVdvaEFVRUhJUUlNQVFzZ0JDQUVLQUlNUVFGcU5nSU1JQUZCZ1A0RGFpRUJRUWdoQWdzZ0FrRUJheUVDSUFGQkFYUWhBU0FEUVFGMElnTkJnSUFDU1EwQUN5QURJUVlnRXlBVFJTQVZHd3NoQXlBSElBNXFJZ2tnQ2lBTElBTWdDU2dDQUNJSlFSOTJSaHNnQ1dvMkFnQWdFRUdBZ0lBRWNpRVFDeUFRUVlDSWdNQUFjVUdBQ0VZRVFDQUdJQTlCRUVFUFFRNGdFRUhBOXdGeEd5QVFRWUNBZ0NCeEcwRUNkR29pRFNnQ0FDSUpLQUlBSWdOcklRWUNmeUFESUFGQkVIWk5CRUFnQVNBRFFSQjBheUVCSUFaQmdJQUNjUVJBSUFrb0FnUU1BZ3NnQ1NnQ0JDRVRJQTBnQ1VFTVFRZ2dBeUFHU3lJVkcyb29BZ0EyQWdBRFFBSkFJQUlOQUNBRUtBSVFJZ2xCQVdvaEFpQUpMUUFCSVFNZ0NTMEFBRUgvQVVjRVFDQUVJQUkyQWhCQkNDRUNJQU5CQ0hRZ0FXb2hBUXdCQ3lBRFFZOEJUUVJBSUFRZ0FqWUNFQ0FEUVFsMElBRnFJUUZCQnlFQ0RBRUxJQVFnQkNnQ0RFRUJhallDRENBQlFZRCtBMm9oQVVFSUlRSUxJQUpCQVdzaEFpQUJRUUYwSVFFZ0JrRUJkQ0lHUVlDQUFra05BQXNnRTBVZ0V5QVZHd3dCQ3lBSktBSUVJUk1nRFNBSlFRaEJEQ0FESUFaTEloVWJhaWdDQURZQ0FBTkFBa0FnQWcwQUlBUW9BaEFpQ1VFQmFpRUNJQWt0QUFFaEJpQUpMUUFBUWY4QlJ3UkFJQVFnQWpZQ0VFRUlJUUlnQmtFSWRDQUJhaUVCREFFTElBWkJqd0ZOQkVBZ0JDQUNOZ0lRSUFaQkNYUWdBV29oQVVFSElRSU1BUXNnQkNBRUtBSU1RUUZxTmdJTUlBRkJnUDREYWlFQlFRZ2hBZ3NnQWtFQmF5RUNJQUZCQVhRaEFTQURRUUYwSWdOQmdJQUNTUTBBQ3lBRElRWWdFeUFUUlNBVkd3c2hBeUFISUJKcUlna2dDaUFMSUFNZ0NTZ0NBQ0lKUVI5MlJoc2dDV28yQWdBZ0VFR0FnSUFnY2lFUUN5QUZJQkJCZ01DQWdBUnhRWURBQUVZRWZ5QUdJQTlCRUVFUFFRNGdFRUdBdkE5eEd5QVFRWUNBZ0lBQ2NSdEJBblJxSWcwb0FnQWlDU2dDQUNJRGF5RUdBbjhnQXlBQlFSQjJUUVJBSUFFZ0EwRVFkR3NoQVNBR1FZQ0FBbkVFUUNBSktBSUVEQUlMSUFrb0FnUWhFeUFOSUFsQkRFRUlJQU1nQmtzaUZSdHFLQUlBTmdJQUEwQUNRQ0FDRFFBZ0JDZ0NFQ0lKUVFGcUlRSWdDUzBBQVNFRElBa3RBQUJCL3dGSEJFQWdCQ0FDTmdJUVFRZ2hBaUFEUVFoMElBRnFJUUVNQVFzZ0EwR1BBVTBFUUNBRUlBSTJBaEFnQTBFSmRDQUJhaUVCUVFjaEFnd0JDeUFFSUFRb0FneEJBV28yQWd3Z0FVR0EvZ05xSVFGQkNDRUNDeUFDUVFGcklRSWdBVUVCZENFQklBWkJBWFFpQmtHQWdBSkpEUUFMSUJORklCTWdGUnNNQVFzZ0NTZ0NCQ0VUSUEwZ0NVRUlRUXdnQXlBR1N5SVZHMm9vQWdBMkFnQURRQUpBSUFJTkFDQUVLQUlRSWdsQkFXb2hBaUFKTFFBQklRWWdDUzBBQUVIL0FVY0VRQ0FFSUFJMkFoQkJDQ0VDSUFaQkNIUWdBV29oQVF3QkN5QUdRWThCVFFSQUlBUWdBallDRUNBR1FRbDBJQUZxSVFGQkJ5RUNEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUJRWUQrQTJvaEFVRUlJUUlMSUFKQkFXc2hBaUFCUVFGMElRRWdBMEVCZENJRFFZQ0FBa2tOQUFzZ0F5RUdJQk1nRTBVZ0ZSc0xJUU1nQnlBVVFRSjBhaUlKSUFvZ0N5QURJQWtvQWdBaUNVRWZka1liSUFscU5nSUFJQkJCZ0lDQWdBSnlCU0FRQ3pZQ0FBc2dCVUVFYWlFSklBZEJCR29oQnlBSVFRRnFJZ2dnREVjTkFBc2dCVUVNYWlFSklBY2dGRUVDZEdvaEJ5QVJRUVJxSWhFZ0JDZ0NnQUVpQTBGOGNVa05BQXNNQVF0QkJDQURRWHh4SWdrZ0NVRUVUUnRCQVdzaUNVRjhjVUVFYWlFUklBZ2dDVUVCZEVGNGNXcEJGR29oQ1FzZ0JDQUNOZ0lJSUFRZ0JqWUNCQ0FFSUFFMkFnQWdCQ0FOTmdKb0lBeEZEUUVnQXlBUlRRMEJRUUFoRTBFQUlBdHJJUlFnQXlFQkEwQUNRQ0FCSUJGR0JFQWdFU0VCREFFTElBa29BZ0FoQWtFQUlSQURRRUdRZ0lBQklCQkJBMndpQ0hRZ0FuRkJFQ0FJZEVZRVFDQUhJQXdnRUd4QkFuUnFJUVVnQkNBUFFSQkJEMEVPSUFJZ0NIWWlBVUh2QTNFYklBRkJnSURBQUhFYlFRSjBhaUlOTmdKb0lBUWdCQ2dDQkNBTktBSUFJZ0lvQWdBaUFXc2lBellDQkFKL0lBRWdCQ2dDQUNJR1FSQjJTd1JBSUFJb0FnUWhDaUFFSUFFMkFnUWdEU0FDUVFoQkRDQUJJQU5MSWc0YmFpZ0NBRFlDQUNBRUtBSUlJUUlEUUFKQUlBSU5BQ0FFS0FJUUlnSkJBV29oRFNBQ0xRQUJJUU1nQWkwQUFFSC9BVVlFUUNBRFFaQUJUd1JBSUFRZ0JDZ0NERUVCYWpZQ0RDQUdRWUQrQTJvaEJrRUlJUUlNQWdzZ0JDQU5OZ0lRSUFOQkNYUWdCbW9oQmtFSElRSU1BUXNnQkNBTk5nSVFRUWdoQWlBRFFRaDBJQVpxSVFZTElBUWdBa0VCYXlJQ05nSUlJQVFnQmtFQmRDSUdOZ0lBSUFRZ0FVRUJkQ0lCTmdJRUlBRkJnSUFDU1EwQUN5QUtJQXBGSUE0YkRBRUxJQVFnQmlBQlFSQjBheUlHTmdJQUlBTkJnSUFDY1VVRVFDQUNLQUlFSVFvZ0RTQUNRUXhCQ0NBQklBTkxJZzRiYWlnQ0FEWUNBQ0FFS0FJSUlRSURRQUpBSUFJTkFDQUVLQUlRSWdKQkFXb2hEU0FDTFFBQklRRWdBaTBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBR1FZRCtBMm9oQmtFSUlRSU1BZ3NnQkNBTk5nSVFJQUZCQ1hRZ0Jtb2hCa0VISVFJTUFRc2dCQ0FOTmdJUVFRZ2hBaUFCUVFoMElBWnFJUVlMSUFRZ0FrRUJheUlDTmdJSUlBUWdCa0VCZENJR05nSUFJQVFnQTBFQmRDSUROZ0lFSUFOQmdJQUNTUTBBQ3lBS1JTQUtJQTRiREFFTElBSW9BZ1FMSVFFZ0JTQVVJQXNnQVNBRktBSUFJZ05CSDNaR0d5QURhallDQUNBSklBa29BZ0JCZ0lEQUFDQUlkSElpQWpZQ0FDQUVLQUtBQVNFREN5QVFRUUZxSWhBZ0F5SUJJQkZyU1EwQUN3c2dDVUVFYWlFSklBZEJCR29oQnlBVFFRRnFJaE1nREVjTkFBc01BUXRCQUNFUlFRQWhGd0pBQWtBQ1FBSkFJQVFvQW53aUZFSEFBRWNOQUNBRUtBS0FBVUhBQUVjTkFFRUFRUUVnR1hRaUFVRUJkaUFCY2lJVWF5RVRJQVJCNUFCcUlRZ2dCRUhnQUdvaEVDQUVRUnhxSVFzZ0JDZ0NlRUdNQW1vaEJpQUVLQUlJSVFVZ0JDZ0NCQ0VCSUFRb0FnQWhBaUFFS0FKb0lRa2dCQ2dDZENFRElCWkJDSEVOQVFOQVFRQWhEQU5BSUFNaEVRSkFBa0FDZndKQUFrQWdCaUlOS0FJQUlnWkZCRUFnQVNBUUtBSUFJZ01vQWdBaUJtc2hBUUovSUFZZ0FrRVFka3NFUUNBREtBSUVJUWNnRUNBRFFRaEJEQ0FCSUFaSklnb2JhaWdDQURZQ0FBTkFBa0FnQlEwQUlBUW9BaEFpQTBFQmFpRUpJQU10QUFFaEFTQURMUUFBUWY4QlJnUkFJQUZCa0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRd0NDeUFFSUFrMkFoQWdBVUVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQWsyQWhCQkNDRUZJQUZCQ0hRZ0Ftb2hBZ3NnQlVFQmF5RUZJQUpCQVhRaEFpQUdRUUYwSWdaQmdJQUNTUTBBQ3lBR0lRRWdCeUFIUlNBS0d3d0JDeUFDSUFaQkVIUnJJUUlnQVVHQWdBSnhSUVJBSUFNb0FnUWhCeUFRSUFOQkRFRUlJQUVnQmtraUNodHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lHUVFGcUlRa2dCaTBBQVNFRElBWXRBQUJCL3dGR0JFQWdBMEdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkRBSUxJQVFnQ1RZQ0VDQURRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdDVFlDRUVFSUlRVWdBMEVJZENBQ2FpRUNDeUFGUVFGcklRVWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFkRklBY2dDaHNNQVFzZ0F5Z0NCQXRGQkVBZ0VDRUpEQVlMSUFFZ0NDZ0NBQ0lES0FJQUlnWnJJUUVDZnlBR0lBSkJFSFpMQkVBZ0F5Z0NCQ0VISUFnZ0EwRUlRUXdnQVNBR1NTSUtHMm9vQWdBaUF6WUNBQU5BQWtBZ0JRMEFJQVFvQWhBaUNVRUJhaUVGSUFrdEFBRWhBU0FKTFFBQVFmOEJSZ1JBSUFGQmtBRlBCRUFnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCUXdDQ3lBRUlBVTJBaEFnQVVFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFVMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWdzZ0JVRUJheUVGSUFKQkFYUWhBaUFHUVFGMElnWkJnSUFDU1EwQUN5QUdJUUVnQnlBSFJTQUtHd3dCQ3lBQ0lBWkJFSFJySVFJZ0FVR0FnQUp4UlFSQUlBTW9BZ1FoQnlBSUlBTkJERUVJSUFFZ0Jra2lDaHRxS0FJQUlnTTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnbEJBV29oQlNBSkxRQUJJUVlnQ1MwQUFFSC9BVVlFUUNBR1FaQUJUd1JBSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVNQWdzZ0JDQUZOZ0lRSUFaQkNYUWdBbW9oQWtFSElRVU1BUXNnQkNBRk5nSVFRUWdoQlNBR1FRaDBJQUpxSVFJTElBVkJBV3NoQlNBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dCMFVnQnlBS0d3d0JDeUFES0FJRUN5RUtJQUVnQXlnQ0FDSUdheUVCQW44Z0JpQUNRUkIyU3dSQUlBTW9BZ1FoQnlBSUlBTkJDRUVNSUFFZ0Jra2lEaHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJRFFRRnFJUWtnQXkwQUFTRUJJQU10QUFCQi93RkdCRUFnQVVHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0NUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQ1RZQ0VFRUlJUVVnQVVFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQVpCQVhRaUJrR0FnQUpKRFFBTElBWWhBU0FISUFkRklBNGJEQUVMSUFJZ0JrRVFkR3NoQWlBQlFZQ0FBbkZGQkVBZ0F5Z0NCQ0VISUFnZ0EwRU1RUWdnQVNBR1NTSU9HMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdaQkFXb2hDU0FHTFFBQklRTWdCaTBBQUVIL0FVWUVRQ0FEUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVU1BZ3NnQkNBSk5nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FKTmdJUVFRZ2hCU0FEUVFoMElBSnFJUUlMSUFWQkFXc2hCU0FDUVFGMElRSWdBVUVCZENJQlFZQ0FBa2tOQUFzZ0IwVWdCeUFPR3d3QkN5QURLQUlFQ3lFRFFRQWhCaUFJSVFrQ1FBSkFBa0FDZndKQUFrQWdBeUFLUVFGMGNnNEVBQUVEQlFvTElBRWdDeUFOS0FJRVFSRjJRUVJ4SUExQkJHc2lCeWdDQUVFVGRrRUJjWElpRGtIUXVRRnFMUUFBUVFKMGFpSUpLQUlBSWdNb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGtzRVFDQURLQUlFSVFvZ0NTQURRUWhCRENBQklBWkpJaEliYWlnQ0FEWUNBQU5BQWtBZ0JRMEFJQVFvQWhBaUEwRUJhaUVKSUFNdEFBRWhBU0FETFFBQVFmOEJSZ1JBSUFGQmtBRlBCRUFnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCUXdDQ3lBRUlBazJBaEFnQVVFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFrMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWdzZ0JVRUJheUVGSUFKQkFYUWhBaUFHUVFGMElnWkJnSUFDU1EwQUN5QUdJUUVnQ2lBS1JTQVNHd3dCQ3lBQ0lBWkJFSFJySVFJZ0FVR0FnQUp4UlFSQUlBTW9BZ1FoQ2lBSklBTkJERUVJSUFFZ0Jra2lFaHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJR1FRRnFJUWtnQmkwQUFTRURJQVl0QUFCQi93RkdCRUFnQTBHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0NUWUNFQ0FEUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQ1RZQ0VFRUlJUVVnQTBFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBcEZJQW9nRWhzTUFRc2dBeWdDQkFzaEF5QVJJQk1nRkNBRElBNUIwTHNCYWkwQUFITWlBeHMyQWdBZ0J5QUhLQUlBUVNCeU5nSUFJQTBnRFNnQ0JFRUljallDQkNBTlFZd0NheUlHSUFZb0FnQkJnSUFJY2pZQ0FDQU5RWVFDYXlJR0lBWW9BZ0JCZ0lBQ2NqWUNBQ0FOUVlnQ2F5SUdJQVlvQWdBZ0EwRWZkSEpCZ0lBRWNqWUNBQ0FEUVJOMElWY2dBU0FMSUFRb0Ftd3RBQUpCQW5ScUlnY29BZ0FpQXlnQ0FDSUdheUVCQW44Z0JpQUNRUkIyU3dSQUlBTW9BZ1FoQ1NBSElBTkJDRUVNSUFFZ0Jra2lEaHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJRFFRRnFJUWNnQXkwQUFTRUJJQU10QUFCQi93RkdCRUFnQVVHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0J6WUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQnpZQ0VFRUlJUVVnQVVFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQVpCQVhRaUJrR0FnQUpKRFFBTElBWWhBU0FKSUFsRklBNGJEQUVMSUFJZ0JrRVFkR3NoQWlBQlFZQ0FBbkZGQkVBZ0F5Z0NCQ0VKSUFjZ0EwRU1RUWdnQVNBR1NTSU9HMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdaQkFXb2hCeUFHTFFBQklRTWdCaTBBQUVIL0FVWUVRQ0FEUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVU1BZ3NnQkNBSE5nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FITmdJUVFRZ2hCU0FEUVFoMElBSnFJUUlMSUFWQkFXc2hCU0FDUVFGMElRSWdBVUVCZENJQlFZQ0FBa2tOQUFzZ0NVVWdDU0FPR3d3QkN5QURLQUlFQ3lFRElGZEJFSElpQmlBRFJRMEJHZ3NnQVNBTElBMG9BZ1JCRkhaQkJIRWdEVUVFYXlJSktBSUFRUloyUVFGeElBWkJEM1pCRUhFZ0JrRVRka0hBQUhFZ0JrRURka0dxQVhGeWNuSnlJaEpCMExrQmFpMEFBRUVDZEdvaUNpZ0NBQ0lIS0FJQUlnTnJJUUVDZnlBRElBSkJFSFpMQkVBZ0J5Z0NCQ0VPSUFvZ0IwRUlRUXdnQVNBRFNTSUtHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRRWdCeTBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVU1BZ3NnQkNBRk5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FGTmdJUVFRZ2hCU0FCUVFoMElBSnFJUUlMSUFWQkFXc2hCU0FDUVFGMElRSWdBMEVCZENJRFFZQ0FBa2tOQUFzZ0F5RUJJQTRnRGtVZ0Noc01BUXNnQWlBRFFSQjBheUVDSUFGQmdJQUNjVVVFUUNBSEtBSUVJUTRnQ2lBSFFReEJDQ0FCSUFOSklnb2JhaWdDQURZQ0FBTkFBa0FnQlEwQUlBUW9BaEFpQjBFQmFpRUZJQWN0QUFFaEF5QUhMUUFBUWY4QlJnUkFJQU5Ca0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRd0NDeUFFSUFVMkFoQWdBMEVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVUyQWhCQkNDRUZJQU5CQ0hRZ0Ftb2hBZ3NnQlVFQmF5RUZJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBT1JTQU9JQW9iREFFTElBY29BZ1FMSVFNZ0VTQVRJQlFnQXlBU1FkQzdBV290QUFCeklnTWJOZ0tBQWlBSklBa29BZ0JCZ0FKeU5nSUFJQTBnRFNnQ0JFSEFBSEkyQWdRZ0JpQURRUlowY2tHQUFYSUxJUVlnQVNBTElBUW9BbXdnQmtFR2RrSHZBM0ZxTFFBQVFRSjBhaUlKS0FJQUlnY29BZ0FpQTJzaEFRSi9JQU1nQWtFUWRrc0VRQ0FIS0FJRUlRb2dDU0FIUVFoQkRDQUJJQU5KSWc0YmFpZ0NBRFlDQUFOQUFrQWdCUTBBSUFRb0FoQWlCMEVCYWlFSklBY3RBQUVoQVNBSExRQUFRZjhCUmdSQUlBRkJrQUZQQkVBZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQlF3Q0N5QUVJQWsyQWhBZ0FVRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBazJBaEJCQ0NFRklBRkJDSFFnQW1vaEFnc2dCVUVCYXlFRklBSkJBWFFoQWlBRFFRRjBJZ05CZ0lBQ1NRMEFDeUFESVFFZ0NpQUtSU0FPR3d3QkN5QUNJQU5CRUhScklRSWdBVUdBZ0FKeFJRUkFJQWNvQWdRaENpQUpJQWRCREVFSUlBRWdBMGtpRGh0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUhRUUZxSVFrZ0J5MEFBU0VESUFjdEFBQkIvd0ZHQkVBZ0EwR1FBVThFUUNBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGREFJTElBUWdDVFlDRUNBRFFRbDBJQUpxSVFKQkJ5RUZEQUVMSUFRZ0NUWUNFRUVJSVFVZ0EwRUlkQ0FDYWlFQ0N5QUZRUUZySVFVZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQXBGSUFvZ0Roc01BUXNnQnlnQ0JBdEZEUUVMSUFFZ0N5QU5LQUlFUVJkMlFRUnhJQTFCQkdzaUNTZ0NBRUVaZGtFQmNTQUdRUkoyUVJCeElBWkJGblpCd0FCeElBWkJCblpCcWdGeGNuSnljaUlTUWRDNUFXb3RBQUJCQW5ScUlnb29BZ0FpQnlnQ0FDSURheUVCQW44Z0F5QUNRUkIyU3dSQUlBY29BZ1FoRGlBS0lBZEJDRUVNSUFFZ0Ewa2lDaHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSFFRRnFJUVVnQnkwQUFTRUJJQWN0QUFCQi93RkdCRUFnQVVHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0JUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQlRZQ0VFRUlJUVVnQVVFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQU5CQVhRaUEwR0FnQUpKRFFBTElBTWhBU0FPSUE1RklBb2JEQUVMSUFJZ0EwRVFkR3NoQWlBQlFZQ0FBbkZGQkVBZ0J5Z0NCQ0VPSUFvZ0IwRU1RUWdnQVNBRFNTSUtHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRTWdCeTBBQUVIL0FVWUVRQ0FEUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVU1BZ3NnQkNBRk5nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FGTmdJUVFRZ2hCU0FEUVFoMElBSnFJUUlMSUFWQkFXc2hCU0FDUVFGMElRSWdBVUVCZENJQlFZQ0FBa2tOQUFzZ0RrVWdEaUFLR3d3QkN5QUhLQUlFQ3lFRElCRWdFeUFVSUFNZ0VrSFF1d0ZxTFFBQWN5SURHellDZ0FRZ0NTQUpLQUlBUVlBUWNqWUNBQ0FOSUEwb0FnUkJnQVJ5TmdJRUlBWWdBMEVaZEhKQmdBaHlJUVlMSUFFZ0N5QUVLQUpzSUFaQkNYWkI3d054YWkwQUFFRUNkR29pQ1NnQ0FDSUhLQUlBSWdOcklRRUNmeUFESUFKQkVIWkxCRUFnQnlnQ0JDRUtJQWtnQjBFSVFRd2dBU0FEU1NJT0cyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ2RCQVdvaEJTQUhMUUFCSVFFZ0J5MEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTUFnc2dCQ0FGTmdJUUlBRkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUZOZ0lRUVFnaEJTQUJRUWgwSUFKcUlRSUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnQXlFQklBb2dDa1VnRGhzTUFRc2dBaUFEUVJCMGF5RUNJQUZCZ0lBQ2NVVUVRQ0FIS0FJRUlRb2dDU0FIUVF4QkNDQUJJQU5KSWc0YmFpZ0NBRFlDQUFOQUFrQWdCUTBBSUFRb0FoQWlCMEVCYWlFRklBY3RBQUVoQXlBSExRQUFRZjhCUmdSQUlBTkJrQUZQQkVBZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQlF3Q0N5QUVJQVUyQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBVTJBaEJCQ0NFRklBTkJDSFFnQW1vaEFnc2dCVUVCYXlFRklBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFLUlNBS0lBNGJEQUVMSUFjb0FnUUxSUTBGQ3lBQklBc2dEU2dDQkVFYWRrRUVjU0FOUVFScklnNG9BZ0JCSEhaQkFYRWdCa0VWZGtFUWNTQUdRUmwyUWNBQWNTQUdRUWwyUWFvQmNYSnljbklpQ2tIUXVRRnFMUUFBUVFKMGFpSUpLQUlBSWdjb0FnQWlBMnNoQVNBRElBSkJFSFpMQkVBZ0J5Z0NCQ0VTSUFrZ0IwRUlRUXdnQVNBRFNTSVZHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRRWdCeTBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVU1BZ3NnQkNBRk5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FGTmdJUVFRZ2hCU0FCUVFoMElBSnFJUUlMSUFWQkFXc2hCU0FDUVFGMElRSWdBMEVCZENJRFFZQ0FBa2tOQUFzZ0F5RUJJQklnRWtVZ0ZSc01CQXNnQWlBRFFSQjBheUVDSUFGQmdJQUNjUTBCSUFjb0FnUWhFaUFKSUFkQkRFRUlJQUVnQTBraUZSdHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFRElBY3RBQUJCL3dGR0JFQWdBMEdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkRBSUxJQVFnQlRZQ0VDQURRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCVFlDRUVFSUlRVWdBMEVJZENBQ2FpRUNDeUFGUVFGcklRVWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUJKRklCSWdGUnNNQXdzQ1FDQUdRWkNBZ0FGeERRQWdBU0FMSUFRb0Ftd2dCa0h2QTNGcUxRQUFRUUowYWlJSktBSUFJZ2NvQWdBaUEyc2hBUUovSUFNZ0FrRVFka3NFUUNBSEtBSUVJUW9nQ1NBSFFRaEJEQ0FCSUFOSklnNGJhaWdDQURZQ0FBTkFBa0FnQlEwQUlBUW9BaEFpQjBFQmFpRUZJQWN0QUFFaEFTQUhMUUFBUWY4QlJnUkFJQUZCa0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRd0NDeUFFSUFVMkFoQWdBVUVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVUyQWhCQkNDRUZJQUZCQ0hRZ0Ftb2hBZ3NnQlVFQmF5RUZJQUpCQVhRaEFpQURRUUYwSWdOQmdJQUNTUTBBQ3lBRElRRWdDaUFLUlNBT0d3d0JDeUFDSUFOQkVIUnJJUUlnQVVHQWdBSnhSUVJBSUFjb0FnUWhDaUFKSUFkQkRFRUlJQUVnQTBraURodHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFRElBY3RBQUJCL3dGR0JFQWdBMEdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkRBSUxJQVFnQlRZQ0VDQURRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCVFlDRUVFSUlRVWdBMEVJZENBQ2FpRUNDeUFGUVFGcklRVWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFwRklBb2dEaHNNQVFzZ0J5Z0NCQXRGRFFBZ0FTQUxJQTBvQWdSQkVYWkJCSEVnRFVFRWF5SUtLQUlBUVJOMlFRRnhJQVpCRG5aQkVIRWdCa0VRZGtIQUFIRWdCa0dxQVhGeWNuSnlJaEpCMExrQmFpMEFBRUVDZEdvaUNTZ0NBQ0lIS0FJQUlnTnJJUUVDZnlBRElBSkJFSFpMQkVBZ0J5Z0NCQ0VPSUFrZ0IwRUlRUXdnQVNBRFNTSVZHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRRWdCeTBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVU1BZ3NnQkNBRk5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FGTmdJUVFRZ2hCU0FCUVFoMElBSnFJUUlMSUFWQkFXc2hCU0FDUVFGMElRSWdBMEVCZENJRFFZQ0FBa2tOQUFzZ0F5RUJJQTRnRGtVZ0ZSc01BUXNnQWlBRFFSQjBheUVDSUFGQmdJQUNjVVVFUUNBSEtBSUVJUTRnQ1NBSFFReEJDQ0FCSUFOSkloVWJhaWdDQURZQ0FBTkFBa0FnQlEwQUlBUW9BaEFpQjBFQmFpRUZJQWN0QUFFaEF5QUhMUUFBUWY4QlJnUkFJQU5Ca0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRd0NDeUFFSUFVMkFoQWdBMEVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVUyQWhCQkNDRUZJQU5CQ0hRZ0Ftb2hBZ3NnQlVFQmF5RUZJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBT1JTQU9JQlViREFFTElBY29BZ1FMSVFNZ0VTQVRJQlFnQXlBU1FkQzdBV290QUFCeklnTWJOZ0lBSUFvZ0NpZ0NBRUVnY2pZQ0FDQU5JQTBvQWdSQkNISTJBZ1FnRFVHTUFtc2lCeUFIS0FJQVFZQ0FDSEkyQWdBZ0RVR0VBbXNpQnlBSEtBSUFRWUNBQW5JMkFnQWdEVUdJQW1zaUJ5QUhLQUlBSUFOQkgzUnlRWUNBQkhJMkFnQWdCaUFEUVJOMGNrRVFjaUVHQ3dKQUlBWkJnSUdBQ0hFTkFDQUJJQXNnQkNnQ2JDQUdRUU4ySWc1Qjd3TnhhaTBBQUVFQ2RHb2lDU2dDQUNJSEtBSUFJZ05ySVFFQ2Z5QURJQUpCRUhaTEJFQWdCeWdDQkNFS0lBa2dCMEVJUVF3Z0FTQURTU0lTRzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnZEJBV29oQlNBSExRQUJJUUVnQnkwQUFFSC9BVVlFUUNBQlFaQUJUd1JBSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVNQWdzZ0JDQUZOZ0lRSUFGQkNYUWdBbW9oQWtFSElRVU1BUXNnQkNBRk5nSVFRUWdoQlNBQlFRaDBJQUpxSVFJTElBVkJBV3NoQlNBQ1FRRjBJUUlnQTBFQmRDSURRWUNBQWtrTkFBc2dBeUVCSUFvZ0NrVWdFaHNNQVFzZ0FpQURRUkIwYXlFQ0lBRkJnSUFDY1VVRVFDQUhLQUlFSVFvZ0NTQUhRUXhCQ0NBQklBTkpJaEliYWlnQ0FEWUNBQU5BQWtBZ0JRMEFJQVFvQWhBaUIwRUJhaUVGSUFjdEFBRWhBeUFITFFBQVFmOEJSZ1JBSUFOQmtBRlBCRUFnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCUXdDQ3lBRUlBVTJBaEFnQTBFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFVMkFoQkJDQ0VGSUFOQkNIUWdBbW9oQWdzZ0JVRUJheUVGSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUtSU0FLSUJJYkRBRUxJQWNvQWdRTFJRMEFJQUVnQ3lBTktBSUVRUlIyUVFSeElBMUJCR3NpQ2lnQ0FFRVdka0VCY1NBR1FROTJRUkJ4SUFaQkUzWkJ3QUJ4SUE1QnFnRnhjbkp5Y2lJU1FkQzVBV290QUFCQkFuUnFJZ2tvQWdBaUJ5Z0NBQ0lEYXlFQkFuOGdBeUFDUVJCMlN3UkFJQWNvQWdRaERpQUpJQWRCQ0VFTUlBRWdBMGtpRlJ0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUhRUUZxSVFVZ0J5MEFBU0VCSUFjdEFBQkIvd0ZHQkVBZ0FVR1FBVThFUUNBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGREFJTElBUWdCVFlDRUNBQlFRbDBJQUpxSVFKQkJ5RUZEQUVMSUFRZ0JUWUNFRUVJSVFVZ0FVRUlkQ0FDYWlFQ0N5QUZRUUZySVFVZ0FrRUJkQ0VDSUFOQkFYUWlBMEdBZ0FKSkRRQUxJQU1oQVNBT0lBNUZJQlViREFFTElBSWdBMEVRZEdzaEFpQUJRWUNBQW5GRkJFQWdCeWdDQkNFT0lBa2dCMEVNUVFnZ0FTQURTU0lWRzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnZEJBV29oQlNBSExRQUJJUU1nQnkwQUFFSC9BVVlFUUNBRFFaQUJUd1JBSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVNQWdzZ0JDQUZOZ0lRSUFOQkNYUWdBbW9oQWtFSElRVU1BUXNnQkNBRk5nSVFRUWdoQlNBRFFRaDBJQUpxSVFJTElBVkJBV3NoQlNBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dEa1VnRGlBVkd3d0JDeUFIS0FJRUN5RURJQkVnRXlBVUlBTWdFa0hRdXdGcUxRQUFjeUlER3pZQ2dBSWdDaUFLS0FJQVFZQUNjallDQUNBTklBMG9BZ1JCd0FCeU5nSUVJQVlnQTBFV2RISkJnQUZ5SVFZTEFrQWdCa0dBaUlEQUFIRU5BQ0FCSUFzZ0JDZ0NiQ0FHUVFaMklnNUI3d054YWkwQUFFRUNkR29pQ1NnQ0FDSUhLQUlBSWdOcklRRUNmeUFESUFKQkVIWkxCRUFnQnlnQ0JDRUtJQWtnQjBFSVFRd2dBU0FEU1NJU0cyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ2RCQVdvaEJTQUhMUUFCSVFFZ0J5MEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTUFnc2dCQ0FGTmdJUUlBRkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUZOZ0lRUVFnaEJTQUJRUWgwSUFKcUlRSUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnQXlFQklBb2dDa1VnRWhzTUFRc2dBaUFEUVJCMGF5RUNJQUZCZ0lBQ2NVVUVRQ0FIS0FJRUlRb2dDU0FIUVF4QkNDQUJJQU5KSWhJYmFpZ0NBRFlDQUFOQUFrQWdCUTBBSUFRb0FoQWlCMEVCYWlFRklBY3RBQUVoQXlBSExRQUFRZjhCUmdSQUlBTkJrQUZQQkVBZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQlF3Q0N5QUVJQVUyQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBVTJBaEJCQ0NFRklBTkJDSFFnQW1vaEFnc2dCVUVCYXlFRklBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFLUlNBS0lCSWJEQUVMSUFjb0FnUUxSUTBBSUFFZ0N5QU5LQUlFUVJkMlFRUnhJQTFCQkdzaUNpZ0NBRUVaZGtFQmNTQUdRUkoyUVJCeElBWkJGblpCd0FCeElBNUJxZ0Z4Y25KeWNpSVNRZEM1QVdvdEFBQkJBblJxSWdrb0FnQWlCeWdDQUNJRGF5RUJBbjhnQXlBQ1FSQjJTd1JBSUFjb0FnUWhEaUFKSUFkQkNFRU1JQUVnQTBraUZSdHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFQklBY3RBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkRBSUxJQVFnQlRZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCVFlDRUVFSUlRVWdBVUVJZENBQ2FpRUNDeUFGUVFGcklRVWdBa0VCZENFQ0lBTkJBWFFpQTBHQWdBSkpEUUFMSUFNaEFTQU9JQTVGSUJVYkRBRUxJQUlnQTBFUWRHc2hBaUFCUVlDQUFuRkZCRUFnQnlnQ0JDRU9JQWtnQjBFTVFRZ2dBU0FEU1NJVkcyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ2RCQVdvaEJTQUhMUUFCSVFNZ0J5MEFBRUgvQVVZRVFDQURRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTUFnc2dCQ0FGTmdJUUlBTkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUZOZ0lRUVFnaEJTQURRUWgwSUFKcUlRSUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnRGtVZ0RpQVZHd3dCQ3lBSEtBSUVDeUVESUJFZ0V5QVVJQU1nRWtIUXV3RnFMUUFBY3lJREd6WUNnQVFnQ2lBS0tBSUFRWUFRY2pZQ0FDQU5JQTBvQWdSQmdBUnlOZ0lFSUFZZ0EwRVpkSEpCZ0FoeUlRWUxJQVpCZ01DQWdBUnhEUU1nQVNBTElBUW9BbXdnQmtFSmRpSVNRZThEY1dvdEFBQkJBblJxSWdrb0FnQWlBU2dDQUNJRGF5RUhBbjhnQXlBQ1FSQjJTd1JBSUFFb0FnUWhDaUFKSUFGQkNFRU1JQU1nQjBzaURodHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFQklBY3RBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkRBSUxJQVFnQlRZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCVFlDRUVFSUlRVWdBVUVJZENBQ2FpRUNDeUFGUVFGcklRVWdBa0VCZENFQ0lBTkJBWFFpQTBHQWdBSkpEUUFMSUFNaEJ5QUtJQXBGSUE0YkRBRUxJQUlnQTBFUWRHc2hBaUFIUVlDQUFuRkZCRUFnQVNnQ0JDRUtJQWtnQVVFTVFRZ2dBeUFIU3lJT0cyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ05CQVdvaEJTQURMUUFCSVFFZ0F5MEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTUFnc2dCQ0FGTmdJUUlBRkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUZOZ0lRUVFnaEJTQUJRUWgwSUFKcUlRSUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0IwRUJkQ0lIUVlDQUFra05BQXNnQ2tVZ0NpQU9Hd3dCQ3lBQktBSUVDMFVFUUNBSElRRU1CQXNnQnlBTElBMG9BZ1JCR25aQkJIRWdEVUVFYXlJT0tBSUFRUngyUVFGeElBWkJGWFpCRUhFZ0JrRVpka0hBQUhFZ0VrR3FBWEZ5Y25KeUlncEIwTGtCYWkwQUFFRUNkR29pQ1NnQ0FDSUhLQUlBSWdGcklRTWdBU0FDUVJCMlN3UkFJQWNvQWdRaEVpQUpJQWRCQ0VFTUlBRWdBMHNpRlJ0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUhRUUZxSVFVZ0J5MEFBU0VESUFjdEFBQkIvd0ZHQkVBZ0EwR1FBVThFUUNBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGREFJTElBUWdCVFlDRUNBRFFRbDBJQUpxSVFKQkJ5RUZEQUVMSUFRZ0JUWUNFRUVJSVFVZ0EwRUlkQ0FDYWlFQ0N5QUZRUUZySVFVZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQklnRWtVZ0ZSc01Bd3NnQWlBQlFSQjBheUVDSUFOQmdJQUNjVVVOQVNBRElRRUxJQWNvQWdRTUFRc2dCeWdDQkNFU0lBa2dCMEVNUVFnZ0FTQURTeUlWRzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnZEJBV29oQlNBSExRQUJJUUVnQnkwQUFFSC9BVVlFUUNBQlFaQUJUd1JBSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVNQWdzZ0JDQUZOZ0lRSUFGQkNYUWdBbW9oQWtFSElRVU1BUXNnQkNBRk5nSVFRUWdoQlNBQlFRaDBJQUpxSVFJTElBVkJBV3NoQlNBQ1FRRjBJUUlnQTBFQmRDSURRWUNBQWtrTkFBc2dBeUVCSUJKRklCSWdGUnNMSVFNZ0VTQVRJQlFnQXlBS1FkQzdBV290QUFCeklnTWJOZ0tBQmlBT0lBNG9BZ0JCZ0lBQmNqWUNBQ0FOSUEwb0FnUkJnQ0J5TmdJRUlBMGdEU2dDaEFKQkJISTJBb1FDSUEwZ0RTZ0NqQUpCQVhJMkFvd0NJQTBnRFNnQ2lBSWdBMEVTZEhKQkFuSTJBb2dDSUFZZ0EwRWNkSEpCZ01BQWNpRUdDeUFOSUFaQi8vLy90bnR4TmdJQUN5QU5RUVJxSVFZZ0VVRUVhaUVESUF4QkFXb2lERUhBQUVjTkFBc2dEVUVNYWlFR0lCRkJoQVpxSVFNZ0YwRThTU0ZZSUJkQkJHb2hGeUJZRFFBTERBSUxRUUVnR1hRaUFVRUJkaUFCY2lFT0lBUW9BbmdpQnlBVVFRSjBha0VNYWlFRElBUW9Bb0FCSVFZZ0JDZ0NDQ0VGSUFRb0FnUWhBU0FFS0FJQUlRSWdCQ2dDYUNFSklBUW9BblFoQ3dKQUFrQWdGa0VJY1FSQUlBWkJCRWtOQWlBVVJRMEJJQVJCNUFCcUlSQWdCRUhnQUdvaERTQVVRUU5zSVJzZ0ZFRUJkQ0VrUVFBZ0Rtc2hGU0FFUVJ4cUlSSURRRUVBSVJnRFFBSkFBa0FDZndKQUlBTWlDQ2dDQUNJREJFQUNRQ0FEUVpDQWdBRnhEUUFnQVNBU0lBUW9BbXdnQTBIdkEzRnFMUUFBUVFKMGFpSUpLQUlBSWdjb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGswRVFDQUNJQVpCRUhScklRSWdBVUdBZ0FKeEJFQWdCeWdDQkF3Q0N5QUhLQUlFSVF3Z0NTQUhRUXhCQ0NBQklBWkpJZ29iYWlnQ0FEWUNBQU5BQWtBZ0JRMEFJQVFvQWhBaUIwRUJhaUVGSUFjdEFBRWhCaUFITFFBQVFmOEJSd1JBSUFRZ0JUWUNFRUVJSVFVZ0JrRUlkQ0FDYWlFQ0RBRUxJQVpCandGTkJFQWdCQ0FGTmdJUUlBWkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQlFzZ0JVRUJheUVGSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QU1SU0FNSUFvYkRBRUxJQWNvQWdRaERDQUpJQWRCQ0VFTUlBRWdCa2tpQ2h0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUhRUUZxSVFVZ0J5MEFBU0VCSUFjdEFBQkIvd0ZIQkVBZ0JDQUZOZ0lRUVFnaEJTQUJRUWgwSUFKcUlRSU1BUXNnQVVHUEFVMEVRQ0FFSUFVMkFoQWdBVUVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkN5QUZRUUZySVFVZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBTUlBeEZJQW9iQzBVTkFDQUJJQklnQ0NnQ0JFRVJka0VFY1NBSVFRUnJJZ3dvQWdCQkUzWkJBWEVnQTBFT2RrRVFjU0FEUVJCMlFjQUFjU0FEUWFvQmNYSnljbklpRTBIUXVRRnFMUUFBUVFKMGFpSUpLQUlBSWdjb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGswRVFDQUNJQVpCRUhScklRSWdBVUdBZ0FKeEJFQWdCeWdDQkF3Q0N5QUhLQUlFSVFvZ0NTQUhRUXhCQ0NBQklBWkpJaHdiYWlnQ0FEWUNBQU5BQWtBZ0JRMEFJQVFvQWhBaUIwRUJhaUVGSUFjdEFBRWhCaUFITFFBQVFmOEJSd1JBSUFRZ0JUWUNFRUVJSVFVZ0JrRUlkQ0FDYWlFQ0RBRUxJQVpCandGTkJFQWdCQ0FGTmdJUUlBWkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQlFzZ0JVRUJheUVGSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUtSU0FLSUJ3YkRBRUxJQWNvQWdRaENpQUpJQWRCQ0VFTUlBRWdCa2tpSEJ0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUhRUUZxSVFVZ0J5MEFBU0VCSUFjdEFBQkIvd0ZIQkVBZ0JDQUZOZ0lRUVFnaEJTQUJRUWgwSUFKcUlRSU1BUXNnQVVHUEFVMEVRQ0FFSUFVMkFoQWdBVUVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkN5QUZRUUZySVFVZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBS0lBcEZJQndiQ3lFR0lBc2dGU0FPSUFZZ0UwSFF1d0ZxTFFBQWN5SUdHellDQUNBTUlBd29BZ0JCSUhJMkFnQWdDQ0FJS0FJRVFRaHlOZ0lFSUFNZ0JrRVRkSEpCRUhJaEF3c0NRQ0FEUVlDQmdBaHhEUUFnQVNBU0lBUW9BbXdnQTBFRGRpSUtRZThEY1dvdEFBQkJBblJxSWdrb0FnQWlCeWdDQUNJR2F5RUJBbjhnQmlBQ1FSQjJUUVJBSUFJZ0JrRVFkR3NoQWlBQlFZQ0FBbkVFUUNBSEtBSUVEQUlMSUFjb0FnUWhEQ0FKSUFkQkRFRUlJQUVnQmtraUV4dHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFR0lBY3RBQUJCL3dGSEJFQWdCQ0FGTmdJUVFRZ2hCU0FHUVFoMElBSnFJUUlNQVFzZ0JrR1BBVTBFUUNBRUlBVTJBaEFnQmtFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZDeUFGUVFGcklRVWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUF4RklBd2dFeHNNQVFzZ0J5Z0NCQ0VNSUFrZ0IwRUlRUXdnQVNBR1NTSVRHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRRWdCeTBBQUVIL0FVY0VRQ0FFSUFVMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWd3QkN5QUJRWThCVFFSQUlBUWdCVFlDRUNBQlFRbDBJQUpxSVFKQkJ5RUZEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVMSUFWQkFXc2hCU0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQXdnREVVZ0V4c0xSUTBBSUFFZ0VpQUlLQUlFUVJSMlFRUnhJQWhCQkdzaURDZ0NBRUVXZGtFQmNTQURRUTkyUVJCeElBTkJFM1pCd0FCeElBcEJxZ0Z4Y25KeWNpSVRRZEM1QVdvdEFBQkJBblJxSWdrb0FnQWlCeWdDQUNJR2F5RUJBbjhnQmlBQ1FSQjJUUVJBSUFJZ0JrRVFkR3NoQWlBQlFZQ0FBbkVFUUNBSEtBSUVEQUlMSUFjb0FnUWhDaUFKSUFkQkRFRUlJQUVnQmtraUhCdHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFR0lBY3RBQUJCL3dGSEJFQWdCQ0FGTmdJUVFRZ2hCU0FHUVFoMElBSnFJUUlNQVFzZ0JrR1BBVTBFUUNBRUlBVTJBaEFnQmtFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZDeUFGUVFGcklRVWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFwRklBb2dIQnNNQVFzZ0J5Z0NCQ0VLSUFrZ0IwRUlRUXdnQVNBR1NTSWNHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRRWdCeTBBQUVIL0FVY0VRQ0FFSUFVMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWd3QkN5QUJRWThCVFFSQUlBUWdCVFlDRUNBQlFRbDBJQUpxSVFKQkJ5RUZEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVMSUFWQkFXc2hCU0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQW9nQ2tVZ0hCc0xJUVlnQ3lBVVFRSjBhaUFWSUE0Z0JpQVRRZEM3QVdvdEFBQnpJZ1liTmdJQUlBd2dEQ2dDQUVHQUFuSTJBZ0FnQ0NBSUtBSUVRY0FBY2pZQ0JDQURJQVpCRm5SeVFZQUJjaUVEQ3dKQUlBTkJnSWlBd0FCeERRQWdBU0FTSUFRb0Ftd2dBMEVHZGlJS1FlOERjV290QUFCQkFuUnFJZ2tvQWdBaUJ5Z0NBQ0lHYXlFQkFuOGdCaUFDUVJCMlRRUkFJQUlnQmtFUWRHc2hBaUFCUVlDQUFuRUVRQ0FIS0FJRURBSUxJQWNvQWdRaERDQUpJQWRCREVFSUlBRWdCa2tpRXh0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUhRUUZxSVFVZ0J5MEFBU0VHSUFjdEFBQkIvd0ZIQkVBZ0JDQUZOZ0lRUVFnaEJTQUdRUWgwSUFKcUlRSU1BUXNnQmtHUEFVMEVRQ0FFSUFVMkFoQWdCa0VKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkN5QUZRUUZySVFVZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQXhGSUF3Z0V4c01BUXNnQnlnQ0JDRU1JQWtnQjBFSVFRd2dBU0FHU1NJVEcyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ2RCQVdvaEJTQUhMUUFCSVFFZ0J5MEFBRUgvQVVjRVFDQUVJQVUyQWhCQkNDRUZJQUZCQ0hRZ0Ftb2hBZ3dCQ3lBQlFZOEJUUVJBSUFRZ0JUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0JrRUJkQ0lHUVlDQUFra05BQXNnQmlFQklBd2dERVVnRXhzTFJRMEFJQUVnRWlBSUtBSUVRUmQyUVFSeElBaEJCR3NpRENnQ0FFRVpka0VCY1NBRFFSSjJRUkJ4SUFOQkZuWkJ3QUJ4SUFwQnFnRnhjbkp5Y2lJVFFkQzVBV290QUFCQkFuUnFJZ2tvQWdBaUJ5Z0NBQ0lHYXlFQkFuOGdCaUFDUVJCMlRRUkFJQUlnQmtFUWRHc2hBaUFCUVlDQUFuRUVRQ0FIS0FJRURBSUxJQWNvQWdRaENpQUpJQWRCREVFSUlBRWdCa2tpSEJ0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUhRUUZxSVFVZ0J5MEFBU0VHSUFjdEFBQkIvd0ZIQkVBZ0JDQUZOZ0lRUVFnaEJTQUdRUWgwSUFKcUlRSU1BUXNnQmtHUEFVMEVRQ0FFSUFVMkFoQWdCa0VKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkN5QUZRUUZySVFVZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQXBGSUFvZ0hCc01BUXNnQnlnQ0JDRUtJQWtnQjBFSVFRd2dBU0FHU1NJY0cyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ2RCQVdvaEJTQUhMUUFCSVFFZ0J5MEFBRUgvQVVjRVFDQUVJQVUyQWhCQkNDRUZJQUZCQ0hRZ0Ftb2hBZ3dCQ3lBQlFZOEJUUVJBSUFRZ0JUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0JrRUJkQ0lHUVlDQUFra05BQXNnQmlFQklBb2dDa1VnSEJzTElRWWdDeUFrUVFKMGFpQVZJQTRnQmlBVFFkQzdBV290QUFCeklnWWJOZ0lBSUF3Z0RDZ0NBRUdBRUhJMkFnQWdDQ0FJS0FJRVFZQUVjallDQkNBRElBWkJHWFJ5UVlBSWNpRURDeUFEUVlEQWdJQUVjUTBESUFFZ0VpQUVLQUpzSUFOQkNYWWlDa0h2QTNGcUxRQUFRUUowYWlJSktBSUFJZ0VvQWdBaUJtc2hCd0ovSUFZZ0FrRVFkazBFUUNBQ0lBWkJFSFJySVFJZ0IwR0FnQUp4QkVBZ0FTZ0NCQXdDQ3lBQktBSUVJUXdnQ1NBQlFReEJDQ0FHSUFkTEloTWJhaWdDQURZQ0FBTkFBa0FnQlEwQUlBUW9BaEFpQmtFQmFpRUZJQVl0QUFFaEFTQUdMUUFBUWY4QlJ3UkFJQVFnQlRZQ0VFRUlJUVVnQVVFSWRDQUNhaUVDREFFTElBRkJqd0ZOQkVBZ0JDQUZOZ0lRSUFGQkNYUWdBbW9oQWtFSElRVU1BUXNnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCUXNnQlVFQmF5RUZJQUpCQVhRaEFpQUhRUUYwSWdkQmdJQUNTUTBBQ3lBTVJTQU1JQk1iREFFTElBRW9BZ1FoRENBSklBRkJDRUVNSUFZZ0Iwc2lFeHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSFFRRnFJUVVnQnkwQUFTRUJJQWN0QUFCQi93RkhCRUFnQkNBRk5nSVFRUWdoQlNBQlFRaDBJQUpxSVFJTUFRc2dBVUdQQVUwRVFDQUVJQVUyQWhBZ0FVRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQVpCQVhRaUJrR0FnQUpKRFFBTElBWWhCeUFNSUF4RklCTWJDMFVFUUNBSElRRU1CQXNnQnlBU0lBZ29BZ1JCR25aQkJIRWdDRUVFYXlJTUtBSUFRUngyUVFGeElBTkJGWFpCRUhFZ0EwRVpka0hBQUhFZ0NrR3FBWEZ5Y25KeUloTkIwTGtCYWkwQUFFRUNkR29pQ1NnQ0FDSUtLQUlBSWdGcklRWWdBU0FDUVJCMlRRUkFJQUlnQVVFUWRHc2hBaUFHUVlDQUFuRUVRQ0FHSVFFTUF3c2dDaWdDQkNFSElBa2dDa0VNUVFnZ0FTQUdTeUljRzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnVkJBV29oQ2lBRkxRQUJJUUVnQlMwQUFFSC9BVWNFUUNBRUlBbzJBaEJCQ0NFRklBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTElBVkJBV3NoQlNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUFkRklBY2dIQnNNQXdzZ0NpZ0NCQ0VISUFrZ0NrRUlRUXdnQVNBR1N5SWNHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdWQkFXb2hDaUFGTFFBQklRWWdCUzBBQUVIL0FVY0VRQ0FFSUFvMkFoQkJDQ0VGSUFaQkNIUWdBbW9oQWd3QkN5QUdRWThCVFFSQUlBUWdDallDRUNBR1FRbDBJQUpxSVFKQkJ5RUZEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVMSUFWQkFXc2hCU0FDUVFGMElRSWdBVUVCZENJQlFZQ0FBa2tOQUFzZ0J5QUhSU0FjR3d3Q0N5QUJJQTBvQWdBaUJpZ0NBQ0lEYXlFQkFuOGdBeUFDUVJCMlRRUkFJQUlnQTBFUWRHc2hBaUFCUVlDQUFuRUVRQ0FHS0FJRURBSUxJQVlvQWdRaEJ5QU5JQVpCREVFSUlBRWdBMGtpREJ0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUdRUUZxSVFrZ0JpMEFBU0VESUFZdEFBQkIvd0ZIQkVBZ0JDQUpOZ0lRUVFnaEJTQURRUWgwSUFKcUlRSU1BUXNnQTBHUEFVMEVRQ0FFSUFrMkFoQWdBMEVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkN5QUZRUUZySVFVZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQWRGSUFjZ0RCc01BUXNnQmlnQ0JDRUhJQTBnQmtFSVFRd2dBU0FEU1NJTUcyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ1pCQVdvaENTQUdMUUFCSVFFZ0JpMEFBRUgvQVVjRVFDQUVJQWsyQWhCQkNDRUZJQUZCQ0hRZ0Ftb2hBZ3dCQ3lBQlFZOEJUUVJBSUFRZ0NUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnQXlFQklBY2dCMFVnREJzTFJRUkFJQTBoQ1F3RUN5QUJJQkFvQWdBaUJpZ0NBQ0lEYXlFQkFuOGdBeUFDUVJCMlRRUkFJQUlnQTBFUWRHc2hBaUFCUVlDQUFuRUVRQ0FHS0FJRURBSUxJQVlvQWdRaEJ5QVFJQVpCREVFSUlBRWdBMGtpREJ0cUtBSUFJZ1kyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ2xCQVdvaEJTQUpMUUFCSVFNZ0NTMEFBRUgvQVVjRVFDQUVJQVUyQWhCQkNDRUZJQU5CQ0hRZ0Ftb2hBZ3dCQ3lBRFFZOEJUUVJBSUFRZ0JUWUNFQ0FEUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQjBVZ0J5QU1Hd3dCQ3lBR0tBSUVJUWNnRUNBR1FRaEJEQ0FCSUFOSklnd2JhaWdDQUNJR05nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSlFRRnFJUVVnQ1MwQUFTRUJJQWt0QUFCQi93RkhCRUFnQkNBRk5nSVFRUWdoQlNBQlFRaDBJQUpxSVFJTUFRc2dBVUdQQVUwRVFDQUVJQVUyQWhBZ0FVRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQU5CQVhRaUEwR0FnQUpKRFFBTElBTWhBU0FISUFkRklBd2JDeUVNSUFFZ0JpZ0NBQ0lEYXlFQkFuOGdBeUFDUVJCMlRRUkFJQUlnQTBFUWRHc2hBaUFCUVlDQUFuRUVRQ0FHS0FJRURBSUxJQVlvQWdRaEJ5QVFJQVpCREVFSUlBRWdBMGtpQ2h0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUdRUUZxSVFrZ0JpMEFBU0VESUFZdEFBQkIvd0ZIQkVBZ0JDQUpOZ0lRUVFnaEJTQURRUWgwSUFKcUlRSU1BUXNnQTBHUEFVMEVRQ0FFSUFrMkFoQWdBMEVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkN5QUZRUUZySVFVZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQWRGSUFjZ0Noc01BUXNnQmlnQ0JDRUhJQkFnQmtFSVFRd2dBU0FEU1NJS0cyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ1pCQVdvaENTQUdMUUFCSVFFZ0JpMEFBRUgvQVVjRVFDQUVJQWsyQWhCQkNDRUZJQUZCQ0hRZ0Ftb2hBZ3dCQ3lBQlFZOEJUUVJBSUFRZ0NUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnQXlFQklBY2dCMFVnQ2hzTElRWkJBQ0VESUJBaENRSkFBa0FDUUFKL0FrQUNRQ0FHSUF4QkFYUnlEZ1FBQVFNRkNBc2dBU0FTSUFnb0FnUkJFWFpCQkhFZ0NFRUVheUlIS0FJQVFSTjJRUUZ4Y2lJS1FkQzVBV290QUFCQkFuUnFJZ2tvQWdBaUJpZ0NBQ0lEYXlFQkFuOGdBeUFDUVJCMlRRUkFJQUlnQTBFUWRHc2hBaUFCUVlDQUFuRUVRQ0FHS0FJRURBSUxJQVlvQWdRaERDQUpJQVpCREVFSUlBRWdBMGtpRXh0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUdRUUZxSVFrZ0JpMEFBU0VESUFZdEFBQkIvd0ZIQkVBZ0JDQUpOZ0lRUVFnaEJTQURRUWgwSUFKcUlRSU1BUXNnQTBHUEFVMEVRQ0FFSUFrMkFoQWdBMEVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkN5QUZRUUZySVFVZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQXhGSUF3Z0V4c01BUXNnQmlnQ0JDRU1JQWtnQmtFSVFRd2dBU0FEU1NJVEcyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ1pCQVdvaENTQUdMUUFCSVFFZ0JpMEFBRUgvQVVjRVFDQUVJQWsyQWhCQkNDRUZJQUZCQ0hRZ0Ftb2hBZ3dCQ3lBQlFZOEJUUVJBSUFRZ0NUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnQXlFQklBd2dERVVnRXhzTElRTWdDeUFWSUE0Z0F5QUtRZEM3QVdvdEFBQnpJZ01iTmdJQUlBY2dCeWdDQUVFZ2NqWUNBQ0FJSUFnb0FnUkJDSEkyQWdRZ0EwRVRkQ0ZaSUFFZ0VpQUVLQUpzTFFBQ1FRSjBhaUlIS0FJQUlnWW9BZ0FpQTJzaEFRSi9JQU1nQWtFUWRrMEVRQ0FDSUFOQkVIUnJJUUlnQVVHQWdBSnhCRUFnQmlnQ0JBd0NDeUFHS0FJRUlRa2dCeUFHUVF4QkNDQUJJQU5KSWdvYmFpZ0NBRFlDQUFOQUFrQWdCUTBBSUFRb0FoQWlCa0VCYWlFSElBWXRBQUVoQXlBR0xRQUFRZjhCUndSQUlBUWdCellDRUVFSUlRVWdBMEVJZENBQ2FpRUNEQUVMSUFOQmp3Rk5CRUFnQkNBSE5nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRc2dCVUVCYXlFRklBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFKUlNBSklBb2JEQUVMSUFZb0FnUWhDU0FISUFaQkNFRU1JQUVnQTBraUNodHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lHUVFGcUlRY2dCaTBBQVNFQklBWXRBQUJCL3dGSEJFQWdCQ0FITmdJUVFRZ2hCU0FCUVFoMElBSnFJUUlNQVFzZ0FVR1BBVTBFUUNBRUlBYzJBaEFnQVVFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZDeUFGUVFGcklRVWdBa0VCZENFQ0lBTkJBWFFpQTBHQWdBSkpEUUFMSUFNaEFTQUpJQWxGSUFvYkN5RUdJRmxCRUhJaUF5QUdSUTBCR2dzZ0FTQVNJQWdvQWdSQkZIWkJCSEVnQ0VFRWF5SUpLQUlBUVJaMlFRRnhJQU5CRDNaQkVIRWdBMEVUZGtIQUFIRWdBMEVEZGtHcUFYRnljbkp5SWhOQjBMa0JhaTBBQUVFQ2RHb2lEQ2dDQUNJSEtBSUFJZ1pySVFFQ2Z5QUdJQUpCRUhaTkJFQWdBaUFHUVJCMGF5RUNJQUZCZ0lBQ2NRUkFJQWNvQWdRTUFnc2dCeWdDQkNFS0lBd2dCMEVNUVFnZ0FTQUdTU0lNRzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnZEJBV29oQlNBSExRQUJJUVlnQnkwQUFFSC9BVWNFUUNBRUlBVTJBaEJCQ0NFRklBWkJDSFFnQW1vaEFnd0JDeUFHUVk4QlRRUkFJQVFnQlRZQ0VDQUdRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTElBVkJBV3NoQlNBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dDa1VnQ2lBTUd3d0JDeUFIS0FJRUlRb2dEQ0FIUVFoQkRDQUJJQVpKSWd3YmFpZ0NBRFlDQUFOQUFrQWdCUTBBSUFRb0FoQWlCMEVCYWlFRklBY3RBQUVoQVNBSExRQUFRZjhCUndSQUlBUWdCVFlDRUVFSUlRVWdBVUVJZENBQ2FpRUNEQUVMSUFGQmp3Rk5CRUFnQkNBRk5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRc2dCVUVCYXlFRklBSkJBWFFoQWlBR1FRRjBJZ1pCZ0lBQ1NRMEFDeUFHSVFFZ0NpQUtSU0FNR3dzaEJpQUxJQlJCQW5ScUlCVWdEaUFHSUJOQjBMc0JhaTBBQUhNaUJoczJBZ0FnQ1NBSktBSUFRWUFDY2pZQ0FDQUlJQWdvQWdSQndBQnlOZ0lFSUFNZ0JrRVdkSEpCZ0FGeUN5RURJQUVnRWlBRUtBSnNJQU5CQm5aQjd3TnhhaTBBQUVFQ2RHb2lDU2dDQUNJSEtBSUFJZ1pySVFFQ2Z5QUdJQUpCRUhaTkJFQWdBaUFHUVJCMGF5RUNJQUZCZ0lBQ2NRUkFJQWNvQWdRTUFnc2dCeWdDQkNFTUlBa2dCMEVNUVFnZ0FTQUdTU0lLRzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnZEJBV29oQ1NBSExRQUJJUVlnQnkwQUFFSC9BVWNFUUNBRUlBazJBaEJCQ0NFRklBWkJDSFFnQW1vaEFnd0JDeUFHUVk4QlRRUkFJQVFnQ1RZQ0VDQUdRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTElBVkJBV3NoQlNBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dERVVnRENBS0d3d0JDeUFIS0FJRUlRd2dDU0FIUVFoQkRDQUJJQVpKSWdvYmFpZ0NBRFlDQUFOQUFrQWdCUTBBSUFRb0FoQWlCMEVCYWlFSklBY3RBQUVoQVNBSExRQUFRZjhCUndSQUlBUWdDVFlDRUVFSUlRVWdBVUVJZENBQ2FpRUNEQUVMSUFGQmp3Rk5CRUFnQkNBSk5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRc2dCVUVCYXlFRklBSkJBWFFoQWlBR1FRRjBJZ1pCZ0lBQ1NRMEFDeUFHSVFFZ0RDQU1SU0FLR3d0RkRRRUxJQUVnRWlBSUtBSUVRUmQyUVFSeElBaEJCR3NpQ1NnQ0FFRVpka0VCY1NBRFFSSjJRUkJ4SUFOQkZuWkJ3QUJ4SUFOQkJuWkJxZ0Z4Y25KeWNpSVRRZEM1QVdvdEFBQkJBblJxSWd3b0FnQWlCeWdDQUNJR2F5RUJBbjhnQmlBQ1FSQjJUUVJBSUFJZ0JrRVFkR3NoQWlBQlFZQ0FBbkVFUUNBSEtBSUVEQUlMSUFjb0FnUWhDaUFNSUFkQkRFRUlJQUVnQmtraURCdHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFR0lBY3RBQUJCL3dGSEJFQWdCQ0FGTmdJUVFRZ2hCU0FHUVFoMElBSnFJUUlNQVFzZ0JrR1BBVTBFUUNBRUlBVTJBaEFnQmtFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZDeUFGUVFGcklRVWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFwRklBb2dEQnNNQVFzZ0J5Z0NCQ0VLSUF3Z0IwRUlRUXdnQVNBR1NTSU1HMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRRWdCeTBBQUVIL0FVY0VRQ0FFSUFVMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWd3QkN5QUJRWThCVFFSQUlBUWdCVFlDRUNBQlFRbDBJQUpxSVFKQkJ5RUZEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVMSUFWQkFXc2hCU0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQW9nQ2tVZ0RCc0xJUVlnQ3lBa1FRSjBhaUFWSUE0Z0JpQVRRZEM3QVdvdEFBQnpJZ1liTmdJQUlBa2dDU2dDQUVHQUVISTJBZ0FnQ0NBSUtBSUVRWUFFY2pZQ0JDQURJQVpCR1hSeVFZQUljaUVEQ3lBQklCSWdCQ2dDYkNBRFFRbDJRZThEY1dvdEFBQkJBblJxSWdrb0FnQWlCeWdDQUNJR2F5RUJBbjhnQmlBQ1FSQjJUUVJBSUFJZ0JrRVFkR3NoQWlBQlFZQ0FBbkVFUUNBSEtBSUVEQUlMSUFjb0FnUWhEQ0FKSUFkQkRFRUlJQUVnQmtraUNodHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFR0lBY3RBQUJCL3dGSEJFQWdCQ0FGTmdJUVFRZ2hCU0FHUVFoMElBSnFJUUlNQVFzZ0JrR1BBVTBFUUNBRUlBVTJBaEFnQmtFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZDeUFGUVFGcklRVWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUF4RklBd2dDaHNNQVFzZ0J5Z0NCQ0VNSUFrZ0IwRUlRUXdnQVNBR1NTSUtHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRRWdCeTBBQUVIL0FVY0VRQ0FFSUFVMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWd3QkN5QUJRWThCVFFSQUlBUWdCVFlDRUNBQlFRbDBJQUpxSVFKQkJ5RUZEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVMSUFWQkFXc2hCU0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQXdnREVVZ0Noc0xSUTBEQ3lBQklCSWdDQ2dDQkVFYWRrRUVjU0FJUVFScklnd29BZ0JCSEhaQkFYRWdBMEVWZGtFUWNTQURRUmwyUWNBQWNTQURRUWwyUWFvQmNYSnljbklpRTBIUXVRRnFMUUFBUVFKMGFpSUpLQUlBSWdvb0FnQWlCbXNoQVNBR0lBSkJFSFpOQkVBZ0FpQUdRUkIwYXlFQ0lBRkJnSUFDY1EwQklBb29BZ1FoQnlBSklBcEJERUVJSUFFZ0Jra2lIQnRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJRlFRRnFJUW9nQlMwQUFTRUdJQVV0QUFCQi93RkhCRUFnQkNBS05nSVFRUWdoQlNBR1FRaDBJQUpxSVFJTUFRc2dCa0dQQVUwRVFDQUVJQW8yQWhBZ0JrRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBZEZJQWNnSEJzTUFnc2dDaWdDQkNFSElBa2dDa0VJUVF3Z0FTQUdTU0ljRzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnVkJBV29oQ2lBRkxRQUJJUUVnQlMwQUFFSC9BVWNFUUNBRUlBbzJBaEJCQ0NFRklBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTElBVkJBV3NoQlNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUFjZ0IwVWdIQnNNQVFzZ0NpZ0NCQXNoQmlBTElCdEJBblJxSUJVZ0RpQUdJQk5CMExzQmFpMEFBSE1pQnhzMkFnQWdEQ0FNS0FJQVFZQ0FBWEkyQWdBZ0NDQUlLQUlFUVlBZ2NqWUNCQ0FFS0FKOFFRSjBJQWhxSWdZZ0JpZ0NCRUVFY2pZQ0JDQUdJQVlvQWd4QkFYSTJBZ3dnQmlBR0tBSUlJQWRCRW5SeVFRSnlOZ0lJSUFNZ0IwRWNkSEpCZ01BQWNpRURDeUFJSUFOQi8vLy90bnR4TmdJQUN5QUlRUVJxSVFNZ0MwRUVhaUVMSUJoQkFXb2lHQ0FVUncwQUN5QUlRUXhxSVFNZ0N5QWJRUUowYWlFTElCRkJCR29pRVNBRUtBS0FBU0lHUVh4eFNRMEFDd3dDQ3dKQUlBWkJCRWtOQUNBVUJFQWdCRUhrQUdvaEVDQUVRZUFBYWlFTklCUkJBMndoR3lBVVFRRjBJU1JCQUNBT2F5RVZJQVJCSEdvaEVnTkFRUUFoR0FOQUFrQUNRQUovQWtBZ0F5SUlLQUlBSWdNRVFBSkFJQU5Ca0lDQUFYRU5BQ0FCSUJJZ0JDZ0NiQ0FEUWU4RGNXb3RBQUJCQW5ScUlna29BZ0FpQnlnQ0FDSUdheUVCQW44Z0JpQUNRUkIyVFFSQUlBSWdCa0VRZEdzaEFpQUJRWUNBQW5FRVFDQUhLQUlFREFJTElBY29BZ1FoRENBSklBZEJERUVJSUFFZ0Jra2lDaHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSFFRRnFJUVVnQnkwQUFTRUdJQWN0QUFCQi93RkhCRUFnQkNBRk5nSVFRUWdoQlNBR1FRaDBJQUpxSVFJTUFRc2dCa0dQQVUwRVFDQUVJQVUyQWhBZ0JrRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBeEZJQXdnQ2hzTUFRc2dCeWdDQkNFTUlBa2dCMEVJUVF3Z0FTQUdTU0lLRzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnZEJBV29oQlNBSExRQUJJUUVnQnkwQUFFSC9BVWNFUUNBRUlBVTJBaEJCQ0NFRklBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQlRZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTElBVkJBV3NoQlNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUF3Z0RFVWdDaHNMUlEwQUlBRWdFaUFJS0FJRVFSRjJRUVJ4SUFoQkJHc2lEQ2dDQUVFVGRrRUJjU0FEUVE1MlFSQnhJQU5CRUhaQndBQnhJQU5CcWdGeGNuSnljaUlUUWRDNUFXb3RBQUJCQW5ScUlna29BZ0FpQnlnQ0FDSUdheUVCQW44Z0JpQUNRUkIyVFFSQUlBSWdCa0VRZEdzaEFpQUJRWUNBQW5FRVFDQUhLQUlFREFJTElBY29BZ1FoQ2lBSklBZEJERUVJSUFFZ0Jra2lIQnRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSFFRRnFJUVVnQnkwQUFTRUdJQWN0QUFCQi93RkhCRUFnQkNBRk5nSVFRUWdoQlNBR1FRaDBJQUpxSVFJTUFRc2dCa0dQQVUwRVFDQUVJQVUyQWhBZ0JrRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBcEZJQW9nSEJzTUFRc2dCeWdDQkNFS0lBa2dCMEVJUVF3Z0FTQUdTU0ljRzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnZEJBV29oQlNBSExRQUJJUUVnQnkwQUFFSC9BVWNFUUNBRUlBVTJBaEJCQ0NFRklBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQlRZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTElBVkJBV3NoQlNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUFvZ0NrVWdIQnNMSVFZZ0N5QVZJQTRnQmlBVFFkQzdBV290QUFCeklnY2JOZ0lBSUF3Z0RDZ0NBRUVnY2pZQ0FDQUlJQWdvQWdSQkNISTJBZ1FnQ0VGK0lBUW9BbnhyUVFKMGFpSUdJQVlvQWdSQmdJQUNjallDQkNBR0lBWW9BZ0FnQjBFZmRISkJnSUFFY2pZQ0FDQUdRUVJySWdZZ0JpZ0NBRUdBZ0FoeU5nSUFJQU1nQjBFVGRISkJFSEloQXdzQ1FDQURRWUNCZ0FoeERRQWdBU0FTSUFRb0Ftd2dBMEVEZGlJS1FlOERjV290QUFCQkFuUnFJZ2tvQWdBaUJ5Z0NBQ0lHYXlFQkFuOGdCaUFDUVJCMlRRUkFJQUlnQmtFUWRHc2hBaUFCUVlDQUFuRUVRQ0FIS0FJRURBSUxJQWNvQWdRaERDQUpJQWRCREVFSUlBRWdCa2tpRXh0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUhRUUZxSVFVZ0J5MEFBU0VHSUFjdEFBQkIvd0ZIQkVBZ0JDQUZOZ0lRUVFnaEJTQUdRUWgwSUFKcUlRSU1BUXNnQmtHUEFVMEVRQ0FFSUFVMkFoQWdCa0VKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkN5QUZRUUZySVFVZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQXhGSUF3Z0V4c01BUXNnQnlnQ0JDRU1JQWtnQjBFSVFRd2dBU0FHU1NJVEcyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ2RCQVdvaEJTQUhMUUFCSVFFZ0J5MEFBRUgvQVVjRVFDQUVJQVUyQWhCQkNDRUZJQUZCQ0hRZ0Ftb2hBZ3dCQ3lBQlFZOEJUUVJBSUFRZ0JUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0JrRUJkQ0lHUVlDQUFra05BQXNnQmlFQklBd2dERVVnRXhzTFJRMEFJQUVnRWlBSUtBSUVRUlIyUVFSeElBaEJCR3NpRENnQ0FFRVdka0VCY1NBRFFROTJRUkJ4SUFOQkUzWkJ3QUJ4SUFwQnFnRnhjbkp5Y2lJVFFkQzVBV290QUFCQkFuUnFJZ2tvQWdBaUJ5Z0NBQ0lHYXlFQkFuOGdCaUFDUVJCMlRRUkFJQUlnQmtFUWRHc2hBaUFCUVlDQUFuRUVRQ0FIS0FJRURBSUxJQWNvQWdRaENpQUpJQWRCREVFSUlBRWdCa2tpSEJ0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUhRUUZxSVFVZ0J5MEFBU0VHSUFjdEFBQkIvd0ZIQkVBZ0JDQUZOZ0lRUVFnaEJTQUdRUWgwSUFKcUlRSU1BUXNnQmtHUEFVMEVRQ0FFSUFVMkFoQWdCa0VKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkN5QUZRUUZySVFVZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQXBGSUFvZ0hCc01BUXNnQnlnQ0JDRUtJQWtnQjBFSVFRd2dBU0FHU1NJY0cyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ2RCQVdvaEJTQUhMUUFCSVFFZ0J5MEFBRUgvQVVjRVFDQUVJQVUyQWhCQkNDRUZJQUZCQ0hRZ0Ftb2hBZ3dCQ3lBQlFZOEJUUVJBSUFRZ0JUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0JrRUJkQ0lHUVlDQUFra05BQXNnQmlFQklBb2dDa1VnSEJzTElRWWdDeUFVUVFKMGFpQVZJQTRnQmlBVFFkQzdBV290QUFCeklnWWJOZ0lBSUF3Z0RDZ0NBRUdBQW5JMkFnQWdDQ0FJS0FJRVFjQUFjallDQkNBRElBWkJGblJ5UVlBQmNpRURDd0pBSUFOQmdJaUF3QUJ4RFFBZ0FTQVNJQVFvQW13Z0EwRUdkaUlLUWU4RGNXb3RBQUJCQW5ScUlna29BZ0FpQnlnQ0FDSUdheUVCQW44Z0JpQUNRUkIyVFFSQUlBSWdCa0VRZEdzaEFpQUJRWUNBQW5FRVFDQUhLQUlFREFJTElBY29BZ1FoRENBSklBZEJERUVJSUFFZ0Jra2lFeHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSFFRRnFJUVVnQnkwQUFTRUdJQWN0QUFCQi93RkhCRUFnQkNBRk5nSVFRUWdoQlNBR1FRaDBJQUpxSVFJTUFRc2dCa0dQQVUwRVFDQUVJQVUyQWhBZ0JrRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBeEZJQXdnRXhzTUFRc2dCeWdDQkNFTUlBa2dCMEVJUVF3Z0FTQUdTU0lURzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnZEJBV29oQlNBSExRQUJJUUVnQnkwQUFFSC9BVWNFUUNBRUlBVTJBaEJCQ0NFRklBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQlRZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTElBVkJBV3NoQlNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUF3Z0RFVWdFeHNMUlEwQUlBRWdFaUFJS0FJRVFSZDJRUVJ4SUFoQkJHc2lEQ2dDQUVFWmRrRUJjU0FEUVJKMlFSQnhJQU5CRm5aQndBQnhJQXBCcWdGeGNuSnljaUlUUWRDNUFXb3RBQUJCQW5ScUlna29BZ0FpQnlnQ0FDSUdheUVCQW44Z0JpQUNRUkIyVFFSQUlBSWdCa0VRZEdzaEFpQUJRWUNBQW5FRVFDQUhLQUlFREFJTElBY29BZ1FoQ2lBSklBZEJERUVJSUFFZ0Jra2lIQnRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSFFRRnFJUVVnQnkwQUFTRUdJQWN0QUFCQi93RkhCRUFnQkNBRk5nSVFRUWdoQlNBR1FRaDBJQUpxSVFJTUFRc2dCa0dQQVUwRVFDQUVJQVUyQWhBZ0JrRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBcEZJQW9nSEJzTUFRc2dCeWdDQkNFS0lBa2dCMEVJUVF3Z0FTQUdTU0ljRzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnZEJBV29oQlNBSExRQUJJUUVnQnkwQUFFSC9BVWNFUUNBRUlBVTJBaEJCQ0NFRklBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQlRZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTElBVkJBV3NoQlNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUFvZ0NrVWdIQnNMSVFZZ0N5QWtRUUowYWlBVklBNGdCaUFUUWRDN0FXb3RBQUJ6SWdZYk5nSUFJQXdnRENnQ0FFR0FFSEkyQWdBZ0NDQUlLQUlFUVlBRWNqWUNCQ0FESUFaQkdYUnlRWUFJY2lFREN5QURRWURBZ0lBRWNRMERJQUVnRWlBRUtBSnNJQU5CQ1hZaUNrSHZBM0ZxTFFBQVFRSjBhaUlKS0FJQUlnRW9BZ0FpQm1zaEJ3Si9JQVlnQWtFUWRrMEVRQ0FDSUFaQkVIUnJJUUlnQjBHQWdBSnhCRUFnQVNnQ0JBd0NDeUFCS0FJRUlRd2dDU0FCUVF4QkNDQUdJQWRMSWhNYmFpZ0NBRFlDQUFOQUFrQWdCUTBBSUFRb0FoQWlCa0VCYWlFRklBWXRBQUVoQVNBR0xRQUFRZjhCUndSQUlBUWdCVFlDRUVFSUlRVWdBVUVJZENBQ2FpRUNEQUVMSUFGQmp3Rk5CRUFnQkNBRk5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRc2dCVUVCYXlFRklBSkJBWFFoQWlBSFFRRjBJZ2RCZ0lBQ1NRMEFDeUFNUlNBTUlCTWJEQUVMSUFFb0FnUWhEQ0FKSUFGQkNFRU1JQVlnQjBzaUV4dHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFQklBY3RBQUJCL3dGSEJFQWdCQ0FGTmdJUVFRZ2hCU0FCUVFoMElBSnFJUUlNQVFzZ0FVR1BBVTBFUUNBRUlBVTJBaEFnQVVFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZDeUFGUVFGcklRVWdBa0VCZENFQ0lBWkJBWFFpQmtHQWdBSkpEUUFMSUFZaEJ5QU1JQXhGSUJNYkMwVUVRQ0FISVFFTUJBc2dCeUFTSUFnb0FnUkJHblpCQkhFZ0NFRUVheUlNS0FJQVFSeDJRUUZ4SUFOQkZYWkJFSEVnQTBFWmRrSEFBSEVnQ2tHcUFYRnljbkp5SWhOQjBMa0JhaTBBQUVFQ2RHb2lDU2dDQUNJS0tBSUFJZ0ZySVFZZ0FTQUNRUkIyVFFSQUlBSWdBVUVRZEdzaEFpQUdRWUNBQW5FRVFDQUdJUUVNQXdzZ0NpZ0NCQ0VISUFrZ0NrRU1RUWdnQVNBR1N5SWNHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdWQkFXb2hDaUFGTFFBQklRRWdCUzBBQUVIL0FVY0VRQ0FFSUFvMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWd3QkN5QUJRWThCVFFSQUlBUWdDallDRUNBQlFRbDBJQUpxSVFKQkJ5RUZEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVMSUFWQkFXc2hCU0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQWRGSUFjZ0hCc01Bd3NnQ2lnQ0JDRUhJQWtnQ2tFSVFRd2dBU0FHU3lJY0cyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ1ZCQVdvaENpQUZMUUFCSVFZZ0JTMEFBRUgvQVVjRVFDQUVJQW8yQWhCQkNDRUZJQVpCQ0hRZ0Ftb2hBZ3dCQ3lBR1FZOEJUUVJBSUFRZ0NqWUNFQ0FHUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQnlBSFJTQWNHd3dDQ3lBQklBMG9BZ0FpQmlnQ0FDSURheUVCQW44Z0F5QUNRUkIyVFFSQUlBSWdBMEVRZEdzaEFpQUJRWUNBQW5FRVFDQUdLQUlFREFJTElBWW9BZ1FoQnlBTklBWkJERUVJSUFFZ0Ewa2lEQnRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJR1FRRnFJUWtnQmkwQUFTRURJQVl0QUFCQi93RkhCRUFnQkNBSk5nSVFRUWdoQlNBRFFRaDBJQUpxSVFJTUFRc2dBMEdQQVUwRVFDQUVJQWsyQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBZEZJQWNnREJzTUFRc2dCaWdDQkNFSElBMGdCa0VJUVF3Z0FTQURTU0lNRzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnWkJBV29oQ1NBR0xRQUJJUUVnQmkwQUFFSC9BVWNFUUNBRUlBazJBaEJCQ0NFRklBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQ1RZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTElBVkJBV3NoQlNBQ1FRRjBJUUlnQTBFQmRDSURRWUNBQWtrTkFBc2dBeUVCSUFjZ0IwVWdEQnNMUlFSQUlBMGhDUXdFQ3lBQklCQW9BZ0FpQmlnQ0FDSURheUVCQW44Z0F5QUNRUkIyVFFSQUlBSWdBMEVRZEdzaEFpQUJRWUNBQW5FRVFDQUdLQUlFREFJTElBWW9BZ1FoQnlBUUlBWkJERUVJSUFFZ0Ewa2lEQnRxS0FJQUlnWTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnbEJBV29oQlNBSkxRQUJJUU1nQ1MwQUFFSC9BVWNFUUNBRUlBVTJBaEJCQ0NFRklBTkJDSFFnQW1vaEFnd0JDeUFEUVk4QlRRUkFJQVFnQlRZQ0VDQURRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTElBVkJBV3NoQlNBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dCMFVnQnlBTUd3d0JDeUFHS0FJRUlRY2dFQ0FHUVFoQkRDQUJJQU5KSWd3YmFpZ0NBQ0lHTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lKUVFGcUlRVWdDUzBBQVNFQklBa3RBQUJCL3dGSEJFQWdCQ0FGTmdJUVFRZ2hCU0FCUVFoMElBSnFJUUlNQVFzZ0FVR1BBVTBFUUNBRUlBVTJBaEFnQVVFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZDeUFGUVFGcklRVWdBa0VCZENFQ0lBTkJBWFFpQTBHQWdBSkpEUUFMSUFNaEFTQUhJQWRGSUF3YkN5RU1JQUVnQmlnQ0FDSURheUVCQW44Z0F5QUNRUkIyVFFSQUlBSWdBMEVRZEdzaEFpQUJRWUNBQW5FRVFDQUdLQUlFREFJTElBWW9BZ1FoQnlBUUlBWkJERUVJSUFFZ0Ewa2lDaHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJR1FRRnFJUWtnQmkwQUFTRURJQVl0QUFCQi93RkhCRUFnQkNBSk5nSVFRUWdoQlNBRFFRaDBJQUpxSVFJTUFRc2dBMEdQQVUwRVFDQUVJQWsyQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBZEZJQWNnQ2hzTUFRc2dCaWdDQkNFSElCQWdCa0VJUVF3Z0FTQURTU0lLRzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnWkJBV29oQ1NBR0xRQUJJUUVnQmkwQUFFSC9BVWNFUUNBRUlBazJBaEJCQ0NFRklBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQ1RZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTElBVkJBV3NoQlNBQ1FRRjBJUUlnQTBFQmRDSURRWUNBQWtrTkFBc2dBeUVCSUFjZ0IwVWdDaHNMSVFaQkFDRURJQkFoQ1FKQUFrQUNRQUovQWtBQ1FDQUdJQXhCQVhSeURnUUFBUU1GQ0FzZ0FTQVNJQWdvQWdSQkVYWkJCSEVnQ0VFRWF5SUhLQUlBUVJOMlFRRnhjaUlLUWRDNUFXb3RBQUJCQW5ScUlna29BZ0FpQmlnQ0FDSURheUVCQW44Z0F5QUNRUkIyVFFSQUlBSWdBMEVRZEdzaEFpQUJRWUNBQW5FRVFDQUdLQUlFREFJTElBWW9BZ1FoRENBSklBWkJERUVJSUFFZ0Ewa2lFeHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJR1FRRnFJUWtnQmkwQUFTRURJQVl0QUFCQi93RkhCRUFnQkNBSk5nSVFRUWdoQlNBRFFRaDBJQUpxSVFJTUFRc2dBMEdQQVUwRVFDQUVJQWsyQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBUW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VGQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBeEZJQXdnRXhzTUFRc2dCaWdDQkNFTUlBa2dCa0VJUVF3Z0FTQURTU0lURzJvb0FnQTJBZ0FEUUFKQUlBVU5BQ0FFS0FJUUlnWkJBV29oQ1NBR0xRQUJJUUVnQmkwQUFFSC9BVWNFUUNBRUlBazJBaEJCQ0NFRklBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQVFnQ1RZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTElBVkJBV3NoQlNBQ1FRRjBJUUlnQTBFQmRDSURRWUNBQWtrTkFBc2dBeUVCSUF3Z0RFVWdFeHNMSVFNZ0N5QVZJQTRnQXlBS1FkQzdBV290QUFCeklnWWJOZ0lBSUFjZ0J5Z0NBRUVnY2pZQ0FDQUlJQWdvQWdSQkNISTJBZ1FnQ0VGK0lBUW9BbnhyUVFKMGFpSURJQU1vQWdSQmdJQUNjallDQkNBRElBTW9BZ0FnQmtFZmRISkJnSUFFY2pZQ0FDQURRUVJySWdNZ0F5Z0NBRUdBZ0FoeU5nSUFJQVpCRTNRaFdpQUJJQklnQkNnQ2JDMEFBa0VDZEdvaUJ5Z0NBQ0lHS0FJQUlnTnJJUUVDZnlBRElBSkJFSFpOQkVBZ0FpQURRUkIwYXlFQ0lBRkJnSUFDY1FSQUlBWW9BZ1FNQWdzZ0JpZ0NCQ0VKSUFjZ0JrRU1RUWdnQVNBRFNTSUtHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdaQkFXb2hCeUFHTFFBQklRTWdCaTBBQUVIL0FVY0VRQ0FFSUFjMkFoQkJDQ0VGSUFOQkNIUWdBbW9oQWd3QkN5QURRWThCVFFSQUlBUWdCellDRUNBRFFRbDBJQUpxSVFKQkJ5RUZEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVMSUFWQkFXc2hCU0FDUVFGMElRSWdBVUVCZENJQlFZQ0FBa2tOQUFzZ0NVVWdDU0FLR3d3QkN5QUdLQUlFSVFrZ0J5QUdRUWhCRENBQklBTkpJZ29iYWlnQ0FEWUNBQU5BQWtBZ0JRMEFJQVFvQWhBaUJrRUJhaUVISUFZdEFBRWhBU0FHTFFBQVFmOEJSd1JBSUFRZ0J6WUNFRUVJSVFVZ0FVRUlkQ0FDYWlFQ0RBRUxJQUZCandGTkJFQWdCQ0FITmdJUUlBRkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQlFzZ0JVRUJheUVGSUFKQkFYUWhBaUFEUVFGMElnTkJnSUFDU1EwQUN5QURJUUVnQ1NBSlJTQUtHd3NoQmlCYVFSQnlJZ01nQmtVTkFSb0xJQUVnRWlBSUtBSUVRUlIyUVFSeElBaEJCR3NpQ1NnQ0FFRVdka0VCY1NBRFFROTJRUkJ4SUFOQkUzWkJ3QUJ4SUFOQkEzWkJxZ0Z4Y25KeWNpSVRRZEM1QVdvdEFBQkJBblJxSWd3b0FnQWlCeWdDQUNJR2F5RUJBbjhnQmlBQ1FSQjJUUVJBSUFJZ0JrRVFkR3NoQWlBQlFZQ0FBbkVFUUNBSEtBSUVEQUlMSUFjb0FnUWhDaUFNSUFkQkRFRUlJQUVnQmtraURCdHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFR0lBY3RBQUJCL3dGSEJFQWdCQ0FGTmdJUVFRZ2hCU0FHUVFoMElBSnFJUUlNQVFzZ0JrR1BBVTBFUUNBRUlBVTJBaEFnQmtFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZDeUFGUVFGcklRVWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFwRklBb2dEQnNNQVFzZ0J5Z0NCQ0VLSUF3Z0IwRUlRUXdnQVNBR1NTSU1HMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRRWdCeTBBQUVIL0FVY0VRQ0FFSUFVMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWd3QkN5QUJRWThCVFFSQUlBUWdCVFlDRUNBQlFRbDBJQUpxSVFKQkJ5RUZEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVMSUFWQkFXc2hCU0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQW9nQ2tVZ0RCc0xJUVlnQ3lBVVFRSjBhaUFWSUE0Z0JpQVRRZEM3QVdvdEFBQnpJZ1liTmdJQUlBa2dDU2dDQUVHQUFuSTJBZ0FnQ0NBSUtBSUVRY0FBY2pZQ0JDQURJQVpCRm5SeVFZQUJjZ3NoQXlBQklCSWdCQ2dDYkNBRFFRWjJRZThEY1dvdEFBQkJBblJxSWdrb0FnQWlCeWdDQUNJR2F5RUJBbjhnQmlBQ1FSQjJUUVJBSUFJZ0JrRVFkR3NoQWlBQlFZQ0FBbkVFUUNBSEtBSUVEQUlMSUFjb0FnUWhEQ0FKSUFkQkRFRUlJQUVnQmtraUNodHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRa2dCeTBBQVNFR0lBY3RBQUJCL3dGSEJFQWdCQ0FKTmdJUVFRZ2hCU0FHUVFoMElBSnFJUUlNQVFzZ0JrR1BBVTBFUUNBRUlBazJBaEFnQmtFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZDeUFGUVFGcklRVWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUF4RklBd2dDaHNNQVFzZ0J5Z0NCQ0VNSUFrZ0IwRUlRUXdnQVNBR1NTSUtHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hDU0FITFFBQklRRWdCeTBBQUVIL0FVY0VRQ0FFSUFrMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWd3QkN5QUJRWThCVFFSQUlBUWdDVFlDRUNBQlFRbDBJQUpxSVFKQkJ5RUZEQUVMSUFRZ0JDZ0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVVMSUFWQkFXc2hCU0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQXdnREVVZ0Noc0xSUTBCQ3lBQklCSWdDQ2dDQkVFWGRrRUVjU0FJUVFScklna29BZ0JCR1haQkFYRWdBMEVTZGtFUWNTQURRUloyUWNBQWNTQURRUVoyUWFvQmNYSnljbklpRTBIUXVRRnFMUUFBUVFKMGFpSU1LQUlBSWdjb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGswRVFDQUNJQVpCRUhScklRSWdBVUdBZ0FKeEJFQWdCeWdDQkF3Q0N5QUhLQUlFSVFvZ0RDQUhRUXhCQ0NBQklBWkpJZ3diYWlnQ0FEWUNBQU5BQWtBZ0JRMEFJQVFvQWhBaUIwRUJhaUVGSUFjdEFBRWhCaUFITFFBQVFmOEJSd1JBSUFRZ0JUWUNFRUVJSVFVZ0JrRUlkQ0FDYWlFQ0RBRUxJQVpCandGTkJFQWdCQ0FGTmdJUUlBWkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQlFzZ0JVRUJheUVGSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUtSU0FLSUF3YkRBRUxJQWNvQWdRaENpQU1JQWRCQ0VFTUlBRWdCa2tpREJ0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUhRUUZxSVFVZ0J5MEFBU0VCSUFjdEFBQkIvd0ZIQkVBZ0JDQUZOZ0lRUVFnaEJTQUJRUWgwSUFKcUlRSU1BUXNnQVVHUEFVMEVRQ0FFSUFVMkFoQWdBVUVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkN5QUZRUUZySVFVZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBS0lBcEZJQXdiQ3lFR0lBc2dKRUVDZEdvZ0ZTQU9JQVlnRTBIUXV3RnFMUUFBY3lJR0d6WUNBQ0FKSUFrb0FnQkJnQkJ5TmdJQUlBZ2dDQ2dDQkVHQUJISTJBZ1FnQXlBR1FSbDBja0dBQ0hJaEF3c2dBU0FTSUFRb0Ftd2dBMEVKZGtIdkEzRnFMUUFBUVFKMGFpSUpLQUlBSWdjb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGswRVFDQUNJQVpCRUhScklRSWdBVUdBZ0FKeEJFQWdCeWdDQkF3Q0N5QUhLQUlFSVF3Z0NTQUhRUXhCQ0NBQklBWkpJZ29iYWlnQ0FEWUNBQU5BQWtBZ0JRMEFJQVFvQWhBaUIwRUJhaUVGSUFjdEFBRWhCaUFITFFBQVFmOEJSd1JBSUFRZ0JUWUNFRUVJSVFVZ0JrRUlkQ0FDYWlFQ0RBRUxJQVpCandGTkJFQWdCQ0FGTmdJUUlBWkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQlFzZ0JVRUJheUVGSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QU1SU0FNSUFvYkRBRUxJQWNvQWdRaERDQUpJQWRCQ0VFTUlBRWdCa2tpQ2h0cUtBSUFOZ0lBQTBBQ1FDQUZEUUFnQkNnQ0VDSUhRUUZxSVFVZ0J5MEFBU0VCSUFjdEFBQkIvd0ZIQkVBZ0JDQUZOZ0lRUVFnaEJTQUJRUWgwSUFKcUlRSU1BUXNnQVVHUEFVMEVRQ0FFSUFVMkFoQWdBVUVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkN5QUZRUUZySVFVZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBTUlBeEZJQW9iQzBVTkF3c2dBU0FTSUFnb0FnUkJHblpCQkhFZ0NFRUVheUlNS0FJQVFSeDJRUUZ4SUFOQkZYWkJFSEVnQTBFWmRrSEFBSEVnQTBFSmRrR3FBWEZ5Y25KeUloTkIwTGtCYWkwQUFFRUNkR29pQ1NnQ0FDSUtLQUlBSWdacklRRWdCaUFDUVJCMlRRUkFJQUlnQmtFUWRHc2hBaUFCUVlDQUFuRU5BU0FLS0FJRUlRY2dDU0FLUVF4QkNDQUJJQVpKSWh3YmFpZ0NBRFlDQUFOQUFrQWdCUTBBSUFRb0FoQWlCVUVCYWlFS0lBVXRBQUVoQmlBRkxRQUFRZjhCUndSQUlBUWdDallDRUVFSUlRVWdCa0VJZENBQ2FpRUNEQUVMSUFaQmp3Rk5CRUFnQkNBS05nSVFJQVpCQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRc2dCVUVCYXlFRklBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFIUlNBSElCd2JEQUlMSUFvb0FnUWhCeUFKSUFwQkNFRU1JQUVnQmtraUhCdHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lGUVFGcUlRb2dCUzBBQVNFQklBVXRBQUJCL3dGSEJFQWdCQ0FLTmdJUVFRZ2hCU0FCUVFoMElBSnFJUUlNQVFzZ0FVR1BBVTBFUUNBRUlBbzJBaEFnQVVFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZDeUFGUVFGcklRVWdBa0VCZENFQ0lBWkJBWFFpQmtHQWdBSkpEUUFMSUFZaEFTQUhJQWRGSUJ3YkRBRUxJQW9vQWdRTElRWWdDeUFiUVFKMGFpQVZJQTRnQmlBVFFkQzdBV290QUFCeklnY2JOZ0lBSUF3Z0RDZ0NBRUdBZ0FGeU5nSUFJQWdnQ0NnQ0JFR0FJSEkyQWdRZ0JDZ0NmRUVDZENBSWFpSUdJQVlvQWdSQkJISTJBZ1FnQmlBR0tBSU1RUUZ5TmdJTUlBWWdCaWdDQ0NBSFFSSjBja0VDY2pZQ0NDQURJQWRCSEhSeVFZREFBSEloQXdzZ0NDQURRZi8vLzdaN2NUWUNBQXNnQ0VFRWFpRURJQXRCQkdvaEN5QVlRUUZxSWhnZ0ZFY05BQXNnQ0VFTWFpRURJQXNnRzBFQ2RHb2hDeUFSUVFScUloRWdCQ2dDZ0FFaUJrRjhjVWtOQUFzTUFRdEJCQ0FHUVh4eElnTWdBMEVFVFJ0QkFXc2lBMEY4Y1VFRWFpRVJJQWNnQTBFQmRFRjRjV3BCRkdvaEF3c2dCQ0FGTmdJSUlBUWdBVFlDQkNBRUlBSTJBZ0FnQkNBSk5nSm9JQlJGRFFRZ0JpQVJUUTBFQTBCQkFDRUZJQkVnQkNnQ2dBRkhCRUFEUUNBRUlBTWdDeUFGSUJSc1FRSjBhaUFPSUFWQkFCQllJQVZCQVdvaUJTQUVLQUtBQVNBUmEwa05BQXNMSUFNZ0F5Z0NBRUgvLy8rMmUzRTJBZ0FnQzBFRWFpRUxJQU5CQkdvaEF5QVhRUUZxSWhjZ0ZFY05BQXNNQkF0QkJDQUdRWHh4SWdNZ0EwRUVUUnRCQVdzaUEwRjhjVUVFYWlFUklBY2dBMEVCZEVGNGNXcEJGR29oQXdzZ0JDQUZOZ0lJSUFRZ0FUWUNCQ0FFSUFJMkFnQWdCQ0FKTmdKb0lCUkZEUUlnQmlBUlRRMENBMEJCQUNFRklCRWdCQ2dDZ0FGSEJFQURRQ0FFSUFNZ0N5QUZJQlJzUVFKMGFpQU9JQVZCQVJCWUlBVkJBV29pQlNBRUtBS0FBU0FSYTBrTkFBc0xJQU1nQXlnQ0FFSC8vLysyZTNFMkFnQWdDMEVFYWlFTElBTkJCR29oQXlBWFFRRnFJaGNnRkVjTkFBc01BZ3NEUUVFQUlRd0RRQ0FESVJFQ1FBSkFBbjhDUUFKQUlBWWlEU2dDQUNJR1JRUkFJQUVnRUNnQ0FDSURLQUlBSWdacklRRUNmeUFHSUFKQkVIWkxCRUFnQXlnQ0JDRUhJQkFnQTBFSVFRd2dBU0FHU1NJS0cyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ05CQVdvaENTQURMUUFCSVFFZ0F5MEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTUFnc2dCQ0FKTmdJUUlBRkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUpOZ0lRUVFnaEJTQUJRUWgwSUFKcUlRSUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0JrRUJkQ0lHUVlDQUFra05BQXNnQmlFQklBY2dCMFVnQ2hzTUFRc2dBaUFHUVJCMGF5RUNJQUZCZ0lBQ2NVVUVRQ0FES0FJRUlRY2dFQ0FEUVF4QkNDQUJJQVpKSWdvYmFpZ0NBRFlDQUFOQUFrQWdCUTBBSUFRb0FoQWlCa0VCYWlFSklBWXRBQUVoQXlBR0xRQUFRZjhCUmdSQUlBTkJrQUZQQkVBZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQlF3Q0N5QUVJQWsyQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBazJBaEJCQ0NFRklBTkJDSFFnQW1vaEFnc2dCVUVCYXlFRklBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFIUlNBSElBb2JEQUVMSUFNb0FnUUxSUVJBSUJBaENRd0dDeUFCSUFnb0FnQWlBeWdDQUNJR2F5RUJBbjhnQmlBQ1FSQjJTd1JBSUFNb0FnUWhCeUFJSUFOQkNFRU1JQUVnQmtraUNodHFLQUlBSWdNMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdsQkFXb2hCU0FKTFFBQklRRWdDUzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVU1BZ3NnQkNBRk5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FGTmdJUVFRZ2hCU0FCUVFoMElBSnFJUUlMSUFWQkFXc2hCU0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQWNnQjBVZ0Noc01BUXNnQWlBR1FSQjBheUVDSUFGQmdJQUNjVVVFUUNBREtBSUVJUWNnQ0NBRFFReEJDQ0FCSUFaSklnb2JhaWdDQUNJRE5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSlFRRnFJUVVnQ1MwQUFTRUdJQWt0QUFCQi93RkdCRUFnQmtHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0JUWUNFQ0FHUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQlRZQ0VFRUlJUVVnQmtFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBZEZJQWNnQ2hzTUFRc2dBeWdDQkFzaENpQUJJQU1vQWdBaUJtc2hBUUovSUFZZ0FrRVFka3NFUUNBREtBSUVJUWNnQ0NBRFFRaEJEQ0FCSUFaSklnNGJhaWdDQURZQ0FBTkFBa0FnQlEwQUlBUW9BaEFpQTBFQmFpRUpJQU10QUFFaEFTQURMUUFBUWY4QlJnUkFJQUZCa0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRd0NDeUFFSUFrMkFoQWdBVUVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQWsyQWhCQkNDRUZJQUZCQ0hRZ0Ftb2hBZ3NnQlVFQmF5RUZJQUpCQVhRaEFpQUdRUUYwSWdaQmdJQUNTUTBBQ3lBR0lRRWdCeUFIUlNBT0d3d0JDeUFDSUFaQkVIUnJJUUlnQVVHQWdBSnhSUVJBSUFNb0FnUWhCeUFJSUFOQkRFRUlJQUVnQmtraURodHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lHUVFGcUlRa2dCaTBBQVNFRElBWXRBQUJCL3dGR0JFQWdBMEdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkRBSUxJQVFnQ1RZQ0VDQURRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdDVFlDRUVFSUlRVWdBMEVJZENBQ2FpRUNDeUFGUVFGcklRVWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFkRklBY2dEaHNNQVFzZ0F5Z0NCQXNoQTBFQUlRWWdDQ0VKQWtBQ1FBSkFBbjhDUUFKQUlBTWdDa0VCZEhJT0JBQUJBd1VLQ3lBQklBc2dEU2dDQkVFUmRrRUVjU0FOUVFScklnY29BZ0JCRTNaQkFYRnlJZzVCMExrQmFpMEFBRUVDZEdvaUNTZ0NBQ0lES0FJQUlnWnJJUUVDZnlBR0lBSkJFSFpMQkVBZ0F5Z0NCQ0VLSUFrZ0EwRUlRUXdnQVNBR1NTSVNHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdOQkFXb2hDU0FETFFBQklRRWdBeTBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVU1BZ3NnQkNBSk5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FKTmdJUVFRZ2hCU0FCUVFoMElBSnFJUUlMSUFWQkFXc2hCU0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQW9nQ2tVZ0Voc01BUXNnQWlBR1FSQjBheUVDSUFGQmdJQUNjVVVFUUNBREtBSUVJUW9nQ1NBRFFReEJDQ0FCSUFaSkloSWJhaWdDQURZQ0FBTkFBa0FnQlEwQUlBUW9BaEFpQmtFQmFpRUpJQVl0QUFFaEF5QUdMUUFBUWY4QlJnUkFJQU5Ca0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRd0NDeUFFSUFrMkFoQWdBMEVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQWsyQWhCQkNDRUZJQU5CQ0hRZ0Ftb2hBZ3NnQlVFQmF5RUZJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBS1JTQUtJQkliREFFTElBTW9BZ1FMSVFNZ0VTQVRJQlFnQXlBT1FkQzdBV290QUFCeklnTWJOZ0lBSUFjZ0J5Z0NBRUVnY2pZQ0FDQU5JQTBvQWdSQkNISTJBZ1FnQTBFVGRDRmJJQUVnQ3lBRUtBSnNMUUFDUVFKMGFpSUhLQUlBSWdNb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGtzRVFDQURLQUlFSVFrZ0J5QURRUWhCRENBQklBWkpJZzRiYWlnQ0FEWUNBQU5BQWtBZ0JRMEFJQVFvQWhBaUEwRUJhaUVISUFNdEFBRWhBU0FETFFBQVFmOEJSZ1JBSUFGQmtBRlBCRUFnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCUXdDQ3lBRUlBYzJBaEFnQVVFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFjMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWdzZ0JVRUJheUVGSUFKQkFYUWhBaUFHUVFGMElnWkJnSUFDU1EwQUN5QUdJUUVnQ1NBSlJTQU9Hd3dCQ3lBQ0lBWkJFSFJySVFJZ0FVR0FnQUp4UlFSQUlBTW9BZ1FoQ1NBSElBTkJERUVJSUFFZ0Jra2lEaHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJR1FRRnFJUWNnQmkwQUFTRURJQVl0QUFCQi93RkdCRUFnQTBHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0J6WUNFQ0FEUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQnpZQ0VFRUlJUVVnQTBFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBbEZJQWtnRGhzTUFRc2dBeWdDQkFzaEF5QmJRUkJ5SWdZZ0EwVU5BUm9MSUFFZ0N5QU5LQUlFUVJSMlFRUnhJQTFCQkdzaUNTZ0NBRUVXZGtFQmNTQUdRUTkyUVJCeElBWkJFM1pCd0FCeElBWkJBM1pCcWdGeGNuSnljaUlTUWRDNUFXb3RBQUJCQW5ScUlnb29BZ0FpQnlnQ0FDSURheUVCQW44Z0F5QUNRUkIyU3dSQUlBY29BZ1FoRGlBS0lBZEJDRUVNSUFFZ0Ewa2lDaHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSFFRRnFJUVVnQnkwQUFTRUJJQWN0QUFCQi93RkdCRUFnQVVHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0JUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQlRZQ0VFRUlJUVVnQVVFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQU5CQVhRaUEwR0FnQUpKRFFBTElBTWhBU0FPSUE1RklBb2JEQUVMSUFJZ0EwRVFkR3NoQWlBQlFZQ0FBbkZGQkVBZ0J5Z0NCQ0VPSUFvZ0IwRU1RUWdnQVNBRFNTSUtHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRTWdCeTBBQUVIL0FVWUVRQ0FEUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVU1BZ3NnQkNBRk5nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FGTmdJUVFRZ2hCU0FEUVFoMElBSnFJUUlMSUFWQkFXc2hCU0FDUVFGMElRSWdBVUVCZENJQlFZQ0FBa2tOQUFzZ0RrVWdEaUFLR3d3QkN5QUhLQUlFQ3lFRElCRWdFeUFVSUFNZ0VrSFF1d0ZxTFFBQWN5SURHellDZ0FJZ0NTQUpLQUlBUVlBQ2NqWUNBQ0FOSUEwb0FnUkJ3QUJ5TmdJRUlBWWdBMEVXZEhKQmdBRnlDeUVHSUFFZ0N5QUVLQUpzSUFaQkJuWkI3d054YWkwQUFFRUNkR29pQ1NnQ0FDSUhLQUlBSWdOcklRRUNmeUFESUFKQkVIWkxCRUFnQnlnQ0JDRUtJQWtnQjBFSVFRd2dBU0FEU1NJT0cyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ2RCQVdvaENTQUhMUUFCSVFFZ0J5MEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTUFnc2dCQ0FKTmdJUUlBRkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUpOZ0lRUVFnaEJTQUJRUWgwSUFKcUlRSUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0EwRUJkQ0lEUVlDQUFra05BQXNnQXlFQklBb2dDa1VnRGhzTUFRc2dBaUFEUVJCMGF5RUNJQUZCZ0lBQ2NVVUVRQ0FIS0FJRUlRb2dDU0FIUVF4QkNDQUJJQU5KSWc0YmFpZ0NBRFlDQUFOQUFrQWdCUTBBSUFRb0FoQWlCMEVCYWlFSklBY3RBQUVoQXlBSExRQUFRZjhCUmdSQUlBTkJrQUZQQkVBZ0JDQUVLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQlF3Q0N5QUVJQWsyQWhBZ0EwRUpkQ0FDYWlFQ1FRY2hCUXdCQ3lBRUlBazJBaEJCQ0NFRklBTkJDSFFnQW1vaEFnc2dCVUVCYXlFRklBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFLUlNBS0lBNGJEQUVMSUFjb0FnUUxSUTBCQ3lBQklBc2dEU2dDQkVFWGRrRUVjU0FOUVFScklna29BZ0JCR1haQkFYRWdCa0VTZGtFUWNTQUdRUloyUWNBQWNTQUdRUVoyUWFvQmNYSnljbklpRWtIUXVRRnFMUUFBUVFKMGFpSUtLQUlBSWdjb0FnQWlBMnNoQVFKL0lBTWdBa0VRZGtzRVFDQUhLQUlFSVE0Z0NpQUhRUWhCRENBQklBTkpJZ29iYWlnQ0FEWUNBQU5BQWtBZ0JRMEFJQVFvQWhBaUIwRUJhaUVGSUFjdEFBRWhBU0FITFFBQVFmOEJSZ1JBSUFGQmtBRlBCRUFnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCUXdDQ3lBRUlBVTJBaEFnQVVFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFVMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWdzZ0JVRUJheUVGSUFKQkFYUWhBaUFEUVFGMElnTkJnSUFDU1EwQUN5QURJUUVnRGlBT1JTQUtHd3dCQ3lBQ0lBTkJFSFJySVFJZ0FVR0FnQUp4UlFSQUlBY29BZ1FoRGlBS0lBZEJERUVJSUFFZ0Ewa2lDaHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSFFRRnFJUVVnQnkwQUFTRURJQWN0QUFCQi93RkdCRUFnQTBHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0JUWUNFQ0FEUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQlRZQ0VFRUlJUVVnQTBFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBNUZJQTRnQ2hzTUFRc2dCeWdDQkFzaEF5QVJJQk1nRkNBRElCSkIwTHNCYWkwQUFITWlBeHMyQW9BRUlBa2dDU2dDQUVHQUVISTJBZ0FnRFNBTktBSUVRWUFFY2pZQ0JDQUdJQU5CR1hSeVFZQUljaUVHQ3lBQklBc2dCQ2dDYkNBR1FRbDJRZThEY1dvdEFBQkJBblJxSWdrb0FnQWlCeWdDQUNJRGF5RUJBbjhnQXlBQ1FSQjJTd1JBSUFjb0FnUWhDaUFKSUFkQkNFRU1JQUVnQTBraURodHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFQklBY3RBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkRBSUxJQVFnQlRZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCVFlDRUVFSUlRVWdBVUVJZENBQ2FpRUNDeUFGUVFGcklRVWdBa0VCZENFQ0lBTkJBWFFpQTBHQWdBSkpEUUFMSUFNaEFTQUtJQXBGSUE0YkRBRUxJQUlnQTBFUWRHc2hBaUFCUVlDQUFuRkZCRUFnQnlnQ0JDRUtJQWtnQjBFTVFRZ2dBU0FEU1NJT0cyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ2RCQVdvaEJTQUhMUUFCSVFNZ0J5MEFBRUgvQVVZRVFDQURRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTUFnc2dCQ0FGTmdJUUlBTkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUZOZ0lRUVFnaEJTQURRUWgwSUFKcUlRSUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQ2tVZ0NpQU9Hd3dCQ3lBSEtBSUVDMFVOQlFzZ0FTQUxJQTBvQWdSQkduWkJCSEVnRFVFRWF5SU9LQUlBUVJ4MlFRRnhJQVpCRlhaQkVIRWdCa0VaZGtIQUFIRWdCa0VKZGtHcUFYRnljbkp5SWdwQjBMa0JhaTBBQUVFQ2RHb2lDU2dDQUNJSEtBSUFJZ05ySVFFZ0F5QUNRUkIyU3dSQUlBY29BZ1FoRWlBSklBZEJDRUVNSUFFZ0Ewa2lGUnRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSFFRRnFJUVVnQnkwQUFTRUJJQWN0QUFCQi93RkdCRUFnQVVHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0JUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQlRZQ0VFRUlJUVVnQVVFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQU5CQVhRaUEwR0FnQUpKRFFBTElBTWhBU0FTSUJKRklCVWJEQVFMSUFJZ0EwRVFkR3NoQWlBQlFZQ0FBbkVOQVNBSEtBSUVJUklnQ1NBSFFReEJDQ0FCSUFOSkloVWJhaWdDQURZQ0FBTkFBa0FnQlEwQUlBUW9BaEFpQjBFQmFpRUZJQWN0QUFFaEF5QUhMUUFBUWY4QlJnUkFJQU5Ca0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRd0NDeUFFSUFVMkFoQWdBMEVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVUyQWhCQkNDRUZJQU5CQ0hRZ0Ftb2hBZ3NnQlVFQmF5RUZJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBU1JTQVNJQlViREFNTEFrQWdCa0dRZ0lBQmNRMEFJQUVnQ3lBRUtBSnNJQVpCN3dOeGFpMEFBRUVDZEdvaUNTZ0NBQ0lIS0FJQUlnTnJJUUVDZnlBRElBSkJFSFpMQkVBZ0J5Z0NCQ0VLSUFrZ0IwRUlRUXdnQVNBRFNTSU9HMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRRWdCeTBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVU1BZ3NnQkNBRk5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FGTmdJUVFRZ2hCU0FCUVFoMElBSnFJUUlMSUFWQkFXc2hCU0FDUVFGMElRSWdBMEVCZENJRFFZQ0FBa2tOQUFzZ0F5RUJJQW9nQ2tVZ0Roc01BUXNnQWlBRFFSQjBheUVDSUFGQmdJQUNjVVVFUUNBSEtBSUVJUW9nQ1NBSFFReEJDQ0FCSUFOSklnNGJhaWdDQURZQ0FBTkFBa0FnQlEwQUlBUW9BaEFpQjBFQmFpRUZJQWN0QUFFaEF5QUhMUUFBUWY4QlJnUkFJQU5Ca0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRd0NDeUFFSUFVMkFoQWdBMEVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVUyQWhCQkNDRUZJQU5CQ0hRZ0Ftb2hBZ3NnQlVFQmF5RUZJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBS1JTQUtJQTRiREFFTElBY29BZ1FMUlEwQUlBRWdDeUFOS0FJRVFSRjJRUVJ4SUExQkJHc2lDaWdDQUVFVGRrRUJjU0FHUVE1MlFSQnhJQVpCRUhaQndBQnhJQVpCcWdGeGNuSnljaUlTUWRDNUFXb3RBQUJCQW5ScUlna29BZ0FpQnlnQ0FDSURheUVCQW44Z0F5QUNRUkIyU3dSQUlBY29BZ1FoRGlBSklBZEJDRUVNSUFFZ0Ewa2lGUnRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSFFRRnFJUVVnQnkwQUFTRUJJQWN0QUFCQi93RkdCRUFnQVVHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0JUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQlRZQ0VFRUlJUVVnQVVFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQU5CQVhRaUEwR0FnQUpKRFFBTElBTWhBU0FPSUE1RklCVWJEQUVMSUFJZ0EwRVFkR3NoQWlBQlFZQ0FBbkZGQkVBZ0J5Z0NCQ0VPSUFrZ0IwRU1RUWdnQVNBRFNTSVZHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRTWdCeTBBQUVIL0FVWUVRQ0FEUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVU1BZ3NnQkNBRk5nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FGTmdJUVFRZ2hCU0FEUVFoMElBSnFJUUlMSUFWQkFXc2hCU0FDUVFGMElRSWdBVUVCZENJQlFZQ0FBa2tOQUFzZ0RrVWdEaUFWR3d3QkN5QUhLQUlFQ3lFRElCRWdFeUFVSUFNZ0VrSFF1d0ZxTFFBQWN5SURHellDQUNBS0lBb29BZ0JCSUhJMkFnQWdEU0FOS0FJRVFRaHlOZ0lFSUFZZ0EwRVRkSEpCRUhJaEJnc0NRQ0FHUVlDQmdBaHhEUUFnQVNBTElBUW9BbXdnQmtFRGRpSU9RZThEY1dvdEFBQkJBblJxSWdrb0FnQWlCeWdDQUNJRGF5RUJBbjhnQXlBQ1FSQjJTd1JBSUFjb0FnUWhDaUFKSUFkQkNFRU1JQUVnQTBraUVodHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFQklBY3RBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkRBSUxJQVFnQlRZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCVFlDRUVFSUlRVWdBVUVJZENBQ2FpRUNDeUFGUVFGcklRVWdBa0VCZENFQ0lBTkJBWFFpQTBHQWdBSkpEUUFMSUFNaEFTQUtJQXBGSUJJYkRBRUxJQUlnQTBFUWRHc2hBaUFCUVlDQUFuRkZCRUFnQnlnQ0JDRUtJQWtnQjBFTVFRZ2dBU0FEU1NJU0cyb29BZ0EyQWdBRFFBSkFJQVVOQUNBRUtBSVFJZ2RCQVdvaEJTQUhMUUFCSVFNZ0J5MEFBRUgvQVVZRVFDQURRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFVTUFnc2dCQ0FGTmdJUUlBTkJDWFFnQW1vaEFrRUhJUVVNQVFzZ0JDQUZOZ0lRUVFnaEJTQURRUWgwSUFKcUlRSUxJQVZCQVdzaEJTQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQ2tVZ0NpQVNHd3dCQ3lBSEtBSUVDMFVOQUNBQklBc2dEU2dDQkVFVWRrRUVjU0FOUVFScklnb29BZ0JCRm5aQkFYRWdCa0VQZGtFUWNTQUdRUk4yUWNBQWNTQU9RYW9CY1hKeWNuSWlFa0hRdVFGcUxRQUFRUUowYWlJSktBSUFJZ2NvQWdBaUEyc2hBUUovSUFNZ0FrRVFka3NFUUNBSEtBSUVJUTRnQ1NBSFFRaEJEQ0FCSUFOSkloVWJhaWdDQURZQ0FBTkFBa0FnQlEwQUlBUW9BaEFpQjBFQmFpRUZJQWN0QUFFaEFTQUhMUUFBUWY4QlJnUkFJQUZCa0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRd0NDeUFFSUFVMkFoQWdBVUVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVUyQWhCQkNDRUZJQUZCQ0hRZ0Ftb2hBZ3NnQlVFQmF5RUZJQUpCQVhRaEFpQURRUUYwSWdOQmdJQUNTUTBBQ3lBRElRRWdEaUFPUlNBVkd3d0JDeUFDSUFOQkVIUnJJUUlnQVVHQWdBSnhSUVJBSUFjb0FnUWhEaUFKSUFkQkRFRUlJQUVnQTBraUZSdHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFRElBY3RBQUJCL3dGR0JFQWdBMEdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkRBSUxJQVFnQlRZQ0VDQURRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCVFlDRUVFSUlRVWdBMEVJZENBQ2FpRUNDeUFGUVFGcklRVWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUE1RklBNGdGUnNNQVFzZ0J5Z0NCQXNoQXlBUklCTWdGQ0FESUJKQjBMc0JhaTBBQUhNaUF4czJBb0FDSUFvZ0NpZ0NBRUdBQW5JMkFnQWdEU0FOS0FJRVFjQUFjallDQkNBR0lBTkJGblJ5UVlBQmNpRUdDd0pBSUFaQmdJaUF3QUJ4RFFBZ0FTQUxJQVFvQW13Z0JrRUdkaUlPUWU4RGNXb3RBQUJCQW5ScUlna29BZ0FpQnlnQ0FDSURheUVCQW44Z0F5QUNRUkIyU3dSQUlBY29BZ1FoQ2lBSklBZEJDRUVNSUFFZ0Ewa2lFaHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSFFRRnFJUVVnQnkwQUFTRUJJQWN0QUFCQi93RkdCRUFnQVVHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0JUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQlRZQ0VFRUlJUVVnQVVFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQU5CQVhRaUEwR0FnQUpKRFFBTElBTWhBU0FLSUFwRklCSWJEQUVMSUFJZ0EwRVFkR3NoQWlBQlFZQ0FBbkZGQkVBZ0J5Z0NCQ0VLSUFrZ0IwRU1RUWdnQVNBRFNTSVNHMm9vQWdBMkFnQURRQUpBSUFVTkFDQUVLQUlRSWdkQkFXb2hCU0FITFFBQklRTWdCeTBBQUVIL0FVWUVRQ0FEUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRVU1BZ3NnQkNBRk5nSVFJQU5CQ1hRZ0Ftb2hBa0VISVFVTUFRc2dCQ0FGTmdJUVFRZ2hCU0FEUVFoMElBSnFJUUlMSUFWQkFXc2hCU0FDUVFGMElRSWdBVUVCZENJQlFZQ0FBa2tOQUFzZ0NrVWdDaUFTR3d3QkN5QUhLQUlFQzBVTkFDQUJJQXNnRFNnQ0JFRVhka0VFY1NBTlFRUnJJZ29vQWdCQkdYWkJBWEVnQmtFU2RrRVFjU0FHUVJaMlFjQUFjU0FPUWFvQmNYSnljbklpRWtIUXVRRnFMUUFBUVFKMGFpSUpLQUlBSWdjb0FnQWlBMnNoQVFKL0lBTWdBa0VRZGtzRVFDQUhLQUlFSVE0Z0NTQUhRUWhCRENBQklBTkpJaFViYWlnQ0FEWUNBQU5BQWtBZ0JRMEFJQVFvQWhBaUIwRUJhaUVGSUFjdEFBRWhBU0FITFFBQVFmOEJSZ1JBSUFGQmtBRlBCRUFnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCUXdDQ3lBRUlBVTJBaEFnQVVFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFVMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWdzZ0JVRUJheUVGSUFKQkFYUWhBaUFEUVFGMElnTkJnSUFDU1EwQUN5QURJUUVnRGlBT1JTQVZHd3dCQ3lBQ0lBTkJFSFJySVFJZ0FVR0FnQUp4UlFSQUlBY29BZ1FoRGlBSklBZEJERUVJSUFFZ0Ewa2lGUnRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJSFFRRnFJUVVnQnkwQUFTRURJQWN0QUFCQi93RkdCRUFnQTBHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0JUWUNFQ0FEUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQlRZQ0VFRUlJUVVnQTBFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBNUZJQTRnRlJzTUFRc2dCeWdDQkFzaEF5QVJJQk1nRkNBRElCSkIwTHNCYWkwQUFITWlBeHMyQW9BRUlBb2dDaWdDQUVHQUVISTJBZ0FnRFNBTktBSUVRWUFFY2pZQ0JDQUdJQU5CR1hSeVFZQUljaUVHQ3lBR1FZREFnSUFFY1EwRElBRWdDeUFFS0FKc0lBWkJDWFlpRWtIdkEzRnFMUUFBUVFKMGFpSUpLQUlBSWdFb0FnQWlBMnNoQndKL0lBTWdBa0VRZGtzRVFDQUJLQUlFSVFvZ0NTQUJRUWhCRENBRElBZExJZzRiYWlnQ0FEWUNBQU5BQWtBZ0JRMEFJQVFvQWhBaUIwRUJhaUVGSUFjdEFBRWhBU0FITFFBQVFmOEJSZ1JBSUFGQmtBRlBCRUFnQkNBRUtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCUXdDQ3lBRUlBVTJBaEFnQVVFSmRDQUNhaUVDUVFjaEJRd0JDeUFFSUFVMkFoQkJDQ0VGSUFGQkNIUWdBbW9oQWdzZ0JVRUJheUVGSUFKQkFYUWhBaUFEUVFGMElnTkJnSUFDU1EwQUN5QURJUWNnQ2lBS1JTQU9Hd3dCQ3lBQ0lBTkJFSFJySVFJZ0IwR0FnQUp4UlFSQUlBRW9BZ1FoQ2lBSklBRkJERUVJSUFNZ0Iwc2lEaHRxS0FJQU5nSUFBMEFDUUNBRkRRQWdCQ2dDRUNJRFFRRnFJUVVnQXkwQUFTRUJJQU10QUFCQi93RkdCRUFnQVVHUUFVOEVRQ0FFSUFRb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUZEQUlMSUFRZ0JUWUNFQ0FCUVFsMElBSnFJUUpCQnlFRkRBRUxJQVFnQlRZQ0VFRUlJUVVnQVVFSWRDQUNhaUVDQ3lBRlFRRnJJUVVnQWtFQmRDRUNJQWRCQVhRaUIwR0FnQUpKRFFBTElBcEZJQW9nRGhzTUFRc2dBU2dDQkF0RkJFQWdCeUVCREFRTElBY2dDeUFOS0FJRVFScDJRUVJ4SUExQkJHc2lEaWdDQUVFY2RrRUJjU0FHUVJWMlFSQnhJQVpCR1haQndBQnhJQkpCcWdGeGNuSnljaUlLUWRDNUFXb3RBQUJCQW5ScUlna29BZ0FpQnlnQ0FDSUJheUVESUFFZ0FrRVFka3NFUUNBSEtBSUVJUklnQ1NBSFFRaEJEQ0FCSUFOTEloVWJhaWdDQURZQ0FBTkFBa0FnQlEwQUlBUW9BaEFpQjBFQmFpRUZJQWN0QUFFaEF5QUhMUUFBUWY4QlJnUkFJQU5Ca0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJRd0NDeUFFSUFVMkFoQWdBMEVKZENBQ2FpRUNRUWNoQlF3QkN5QUVJQVUyQWhCQkNDRUZJQU5CQ0hRZ0Ftb2hBZ3NnQlVFQmF5RUZJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBU0lCSkZJQlViREFNTElBSWdBVUVRZEdzaEFpQURRWUNBQW5GRkRRRWdBeUVCQ3lBSEtBSUVEQUVMSUFjb0FnUWhFaUFKSUFkQkRFRUlJQUVnQTBzaUZSdHFLQUlBTmdJQUEwQUNRQ0FGRFFBZ0JDZ0NFQ0lIUVFGcUlRVWdCeTBBQVNFQklBY3RBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQUVJQVFvQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRkRBSUxJQVFnQlRZQ0VDQUJRUWwwSUFKcUlRSkJCeUVGREFFTElBUWdCVFlDRUVFSUlRVWdBVUVJZENBQ2FpRUNDeUFGUVFGcklRVWdBa0VCZENFQ0lBTkJBWFFpQTBHQWdBSkpEUUFMSUFNaEFTQVNSU0FTSUJVYkN5RURJQkVnRXlBVUlBTWdDa0hRdXdGcUxRQUFjeUlER3pZQ2dBWWdEaUFPS0FJQVFZQ0FBWEkyQWdBZ0RTQU5LQUlFUVlBZ2NqWUNCQ0FOSUEwb0FvUUNRUVJ5TmdLRUFpQU5JQTBvQW93Q1FRRnlOZ0tNQWlBTklBMG9Bb2dDSUFOQkVuUnlRUUp5TmdLSUFpQUdJQU5CSEhSeVFZREFBSEloQmdzZ0RTQUdRZi8vLzdaN2NUWUNBQXNnRFVFRWFpRUdJQkZCQkdvaEF5QU1RUUZxSWd4QndBQkhEUUFMSUExQkRHb2hCaUFSUVlRR2FpRURJQmRCUEVraFhDQVhRUVJxSVJjZ1hBMEFDd3NnQkNBRk5nSUlJQVFnQVRZQ0JDQUVJQUkyQWdBZ0JDQUpOZ0pvQ3dKQUlCWkJJSEZGRFFBZ0JDQUVRZVFBYWpZQ2FDQUVJQVFvQWdRZ0JDZ0NaQ0lHS0FJQUlnRnJJZ0kyQWdRQ1FDQUJJQVFvQWdBaUJVRVFka3NFUUNBRUlBRTJBZ1FnQkNBR1FRaEJEQ0FCSUFKTEcyb29BZ0FpQmpZQ1pDQUVLQUlJSVFJRFFBSkFJQUlOQUNBRUtBSVFJZ2RCQVdvaENTQUhMUUFCSVFNZ0J5MEFBRUgvQVVZRVFDQURRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FGUVlEK0Eyb2hCVUVJSVFJTUFnc2dCQ0FKTmdJUUlBTkJDWFFnQldvaEJVRUhJUUlNQVFzZ0JDQUpOZ0lRUVFnaEFpQURRUWgwSUFWcUlRVUxJQVFnQWtFQmF5SUNOZ0lJSUFRZ0JVRUJkQ0lGTmdJQUlBUWdBVUVCZENJQk5nSUVJQUZCZ0lBQ1NRMEFDeUFCSVFJTUFRc2dCQ0FGSUFGQkVIUnJJZ1UyQWdBZ0FrR0FnQUp4RFFBZ0JDQUdRUXhCQ0NBQklBSkxHMm9vQWdBaUJqWUNaQ0FFS0FJSUlRRURRQUpBSUFFTkFDQUVLQUlRSWdGQkFXb2hCeUFCTFFBQklRTWdBUzBBQUVIL0FVWUVRQ0FEUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBRlFZRCtBMm9oQlVFSUlRRU1BZ3NnQkNBSE5nSVFJQU5CQ1hRZ0JXb2hCVUVISVFFTUFRc2dCQ0FITmdJUVFRZ2hBU0FEUVFoMElBVnFJUVVMSUFRZ0FVRUJheUlCTmdJSUlBUWdCVUVCZENJRk5nSUFJQVFnQWtFQmRDSUNOZ0lFSUFKQmdJQUNTUTBBQ3dzZ0JDQUNJQVlvQWdBaUFXc2lBallDQkFKQUlBRWdCVUVRZGtzRVFDQUVJQUUyQWdRZ0JDQUdRUWhCRENBQklBSkxHMm9vQWdBaUJqWUNaQ0FFS0FJSUlRSURRQUpBSUFJTkFDQUVLQUlRSWdkQkFXb2hDU0FITFFBQklRTWdCeTBBQUVIL0FVWUVRQ0FEUVpBQlR3UkFJQVFnQkNnQ0RFRUJhallDRENBRlFZRCtBMm9oQlVFSUlRSU1BZ3NnQkNBSk5nSVFJQU5CQ1hRZ0JXb2hCVUVISVFJTUFRc2dCQ0FKTmdJUVFRZ2hBaUFEUVFoMElBVnFJUVVMSUFRZ0FrRUJheUlDTmdJSUlBUWdCVUVCZENJRk5nSUFJQVFnQVVFQmRDSUJOZ0lFSUFGQmdJQUNTUTBBQ3lBQklRSU1BUXNnQkNBRklBRkJFSFJySWdVMkFnQWdBa0dBZ0FKeERRQWdCQ0FHUVF4QkNDQUJJQUpMRzJvb0FnQWlCallDWkNBRUtBSUlJUUVEUUFKQUlBRU5BQ0FFS0FJUUlnRkJBV29oQnlBQkxRQUJJUU1nQVMwQUFFSC9BVVlFUUNBRFFaQUJUd1JBSUFRZ0JDZ0NERUVCYWpZQ0RDQUZRWUQrQTJvaEJVRUlJUUVNQWdzZ0JDQUhOZ0lRSUFOQkNYUWdCV29oQlVFSElRRU1BUXNnQkNBSE5nSVFRUWdoQVNBRFFRaDBJQVZxSVFVTElBUWdBVUVCYXlJQk5nSUlJQVFnQlVFQmRDSUZOZ0lBSUFRZ0FrRUJkQ0lDTmdJRUlBSkJnSUFDU1EwQUN3c2dCQ0FDSUFZb0FnQWlBV3NpQWpZQ0JBSkFJQUVnQlVFUWRrc0VRQ0FFSUFFMkFnUWdCQ0FHUVFoQkRDQUJJQUpMRzJvb0FnQWlCallDWkNBRUtBSUlJUUlEUUFKQUlBSU5BQ0FFS0FJUUlnZEJBV29oQ1NBSExRQUJJUU1nQnkwQUFFSC9BVVlFUUNBRFFaQUJUd1JBSUFRZ0JDZ0NERUVCYWpZQ0RDQUZRWUQrQTJvaEJVRUlJUUlNQWdzZ0JDQUpOZ0lRSUFOQkNYUWdCV29oQlVFSElRSU1BUXNnQkNBSk5nSVFRUWdoQWlBRFFRaDBJQVZxSVFVTElBUWdBa0VCYXlJQ05nSUlJQVFnQlVFQmRDSUZOZ0lBSUFRZ0FVRUJkQ0lCTmdJRUlBRkJnSUFDU1EwQUN5QUJJUUlNQVFzZ0JDQUZJQUZCRUhScklnVTJBZ0FnQWtHQWdBSnhEUUFnQkNBR1FReEJDQ0FCSUFKTEcyb29BZ0FpQmpZQ1pDQUVLQUlJSVFFRFFBSkFJQUVOQUNBRUtBSVFJZ0ZCQVdvaEJ5QUJMUUFCSVFNZ0FTMEFBRUgvQVVZRVFDQURRWkFCVHdSQUlBUWdCQ2dDREVFQmFqWUNEQ0FGUVlEK0Eyb2hCVUVJSVFFTUFnc2dCQ0FITmdJUUlBTkJDWFFnQldvaEJVRUhJUUVNQVFzZ0JDQUhOZ0lRUVFnaEFTQURRUWgwSUFWcUlRVUxJQVFnQVVFQmF5SUJOZ0lJSUFRZ0JVRUJkQ0lGTmdJQUlBUWdBa0VCZENJQ05nSUVJQUpCZ0lBQ1NRMEFDd3NnQkNBQ0lBWW9BZ0FpQVdzaUFqWUNCQ0FCSUFWQkVIWkxCRUFnQkNBQk5nSUVJQVFnQmtFSVFRd2dBU0FDU3h0cUtBSUFOZ0prSUFRb0FnZ2hBZ05BQWtBZ0FnMEFJQVFvQWhBaUJrRUJhaUVISUFZdEFBRWhBeUFHTFFBQVFmOEJSZ1JBSUFOQmtBRlBCRUFnQkNBRUtBSU1RUUZxTmdJTUlBVkJnUDREYWlFRlFRZ2hBZ3dDQ3lBRUlBYzJBaEFnQTBFSmRDQUZhaUVGUVFjaEFnd0JDeUFFSUFjMkFoQkJDQ0VDSUFOQkNIUWdCV29oQlFzZ0JDQUNRUUZySWdJMkFnZ2dCQ0FGUVFGMElnVTJBZ0FnQkNBQlFRRjBJZ0UyQWdRZ0FVR0FnQUpKRFFBTERBRUxJQVFnQlNBQlFSQjBheUlITmdJQUlBSkJnSUFDY1EwQUlBUWdCa0VNUVFnZ0FTQUNTeHRxS0FJQU5nSmtJQVFvQWdnaEJRTkFBa0FnQlEwQUlBUW9BaEFpQTBFQmFpRUdJQU10QUFFaEFTQURMUUFBUWY4QlJnUkFJQUZCa0FGUEJFQWdCQ0FFS0FJTVFRRnFOZ0lNSUFkQmdQNERhaUVIUVFnaEJRd0NDeUFFSUFZMkFoQWdBVUVKZENBSGFpRUhRUWNoQlF3QkN5QUVJQVkyQWhCQkNDRUZJQUZCQ0hRZ0Iyb2hCd3NnQkNBRlFRRnJJZ1UyQWdnZ0JDQUhRUUYwSWdjMkFnQWdCQ0FDUVFGMElnSTJBZ1FnQWtHQWdBSkpEUUFMQ3dzZ0p3MEFJQVFRV2lBRVFiQ3BBVFlDWkNBRVFkQ2VBVFlDWUNBRVFmQ2VBVFlDSEF0QkFDQWZRUUZxSWdFZ0FVRURSaUlCR3lFZklCa2dBV3NoR1NBbVFRRnFJaVlnSUNnQ0NFOE5BU0FaUVFCS0RRQUxDeUFvSUNwcUlTZ2dCQ2dDR0NBRUx3RndPd0FBSUNsQkFXb2lLU0FhS0FJc1NRMEFDd3NDUUNBclJRMEFBa0FnQkNnQ0dDSUJJQVFvQWhBaUEwRUNha3NFUUNBaFJRMEJJQ01nQVNBRUtBSVVJZ1pyTmdJNElDTWdBeUFHYXpZQ05DQWpJQUVnQTJ0QkFtczJBakFnSFVFQ1FaRHlBQ0FqUVRCcUVBOE1BZ3NnQkNnQ0RDSUJRUU5KRFFFZ0lRUkFJQ01nQVRZQ1VDQWRRUUpCNlRVZ0kwSFFBR29RRHd3Q0N5QWpJQUUyQWtBZ0hVRUNRZWsxSUNOQlFHc1FEd3dCQ3lBaklBRWdCQ2dDRkNJR2F6WUNLQ0FqSUFNZ0JtczJBaVFnSXlBQklBTnJRUUpyTmdJZ0lCMUJBa0dROGdBZ0kwRWdhaEFQQ3lBYUtBSThSUTBBSUFRZ0xEWUNkQXNnTUNnQ0JDRUJJQm9vQWd3aFhTQWFLQUlJSURBb0FnQnJJUWdnTUNnQ0VDSUdRUUZ4QkVBZ01pZ0NIQ0EzUVpnQmJHb2lCMEdRQVdzb0FnQWdDR29nQjBHWUFXc29BZ0JySVFnTElGMGdBV3NoQXlBR1FRSnhCRUFnTWlnQ0hDQTNRWmdCYkdvaUFVR01BV3NvQWdBZ0Eyb2dBVUdVQVdzb0FnQnJJUU1MSUJvb0Fqd2lCaUVDSUFaRkJFQWdCQ2dDZENFQ0N5QUVLQUtBQVNFV0lBUW9BbndoRFFKQUlDOG9BcWdHSWdkRkRRQWdGa1VnRFVWeUlRRWdCMEVlVEFSQUlBRU5BVUVBSVJBRFFDQU5JQkJzSVFSQkFDRUJBMEFnQWlBQklBUnFRUUowYWlJUktBSUFJZ2tnQ1VFZmRTSUZjeUFGYXlJRklBZDJCRUFnRVVFQUlBVWdMeWdDcUFaMkloRnJJQkVnQ1VFQVNCczJBZ0FMSUFGQkFXb2lBU0FOUncwQUN5QVFRUUZxSWhBZ0ZrY05BQXNNQVFzZ0FRMEFJQUpCQUNBTklCWnNRUUowRUJVYUN5QUdCRUFnRFNBV2JDRUdJQzhvQWhSQkFVWUVRQ0FHUlEwRlFRQWhBU0FHUVFSUEJFQWdCa0Y4Y1NFQlFRQWhCQU5BSUFJZ0JFRUNkR29pQXlBRC9RQUNBQ0plL1JzQVFRSnQvUkVnWHYwYkFVRUNiZjBjQVNCZS9Sc0NRUUp0L1J3Q0lGNzlHd05CQW0zOUhBUDlDd0lBSUFSQkJHb2lCQ0FCUncwQUN5QUJJQVpHRFFZTEEwQWdBaUFCUVFKMGFpSURJQU1vQWdCQkFtMDJBZ0FnQVVFQmFpSUJJQVpIRFFBTERBVUxJQVpGRFFRZ01Db0NJRU1BQUFBL2xDRm1RUUFoQkFKQUlBWkJCRWtFUUNBQ0lRRU1BUXNnQWlBR1FYeHhJZ1JCQW5ScUlRRWdadjBUSVY1QkFDRURBMEFnQWlBRFFRSjBhaUlISUY0Z0IvMEFBZ0Q5K2dIOTVnSDlDd0lBSUFOQkJHb2lBeUFFUncwQUN5QUVJQVpHRFFVTEEwQWdBU0JtSUFFb0FnQ3lsRGdDQUNBQlFRUnFJUUVnQkVFQmFpSUVJQVpIRFFBTERBUUxJRFlnTldzaEVTQXZLQUlVUVFGSERRSWdGa1VOQXlBeUtBSWtJZ1lnQXlBUmJDSURRUUowYWlBSVFRSjBhaUVKSUExQmZIRWlERUVCYXlJQlFRUnhJUXNnTmlBTklEVnFhMEVDZENFYUlBRkJBblpCQVdwQi92Ly8vd2R4SVIwZ0F5QUlha0VDZENBR2FpQUNheUVLUVFBaENDQUJRUU5ISVJRRFFFRUFJUUVDUUNBTVJRMEFJQWdnRFd3aEF5QUpJQWdnRVd4QkFuUnFJUVpCQUNFSElCUUVRQU5BSUFZZ0FVRUNkR29nQWlBQklBTnFRUUowYXYwQUFnQWlYdjBiQUVFQ2JmMFJJRjc5R3dGQkFtMzlIQUVnWHYwYkFrRUNiZjBjQWlCZS9Sc0RRUUp0L1J3RC9Rc0NBQ0FHSUFGQkJISWlCRUVDZEdvZ0FpQURJQVJxUVFKMGF2MEFBZ0FpWHYwYkFFRUNiZjBSSUY3OUd3RkJBbTM5SEFFZ1h2MGJBa0VDYmYwY0FpQmUvUnNEUVFKdC9Sd0QvUXNDQUNBQlFRaHFJUUVnQjBFQ2FpSUhJQjFIRFFBTEN5QUxEUUFnQmlBQlFRSjBhaUFDSUFFZ0EycEJBblJxL1FBQ0FDSmUvUnNBUVFKdC9SRWdYdjBiQVVFQ2JmMGNBU0JlL1JzQ1FRSnQvUndDSUY3OUd3TkJBbTM5SEFQOUN3SUFJQUZCQkdvaEFRc0NRQ0FCSUExUERRQWdDQ0FOYkNFRElBa2dDQ0FSYkVFQ2RHb2hCd0pBSUEwZ0FXc2lFRUVFU1FSQUlBRWhCQXdCQ3lBS0lBZ2dHbXhxUVJCSkJFQWdBU0VFREFFTElBRWdFRUY4Y1NJRmFpRUVRUUFoQmdOQUlBY2dBU0FHYWlJaFFRSjBhaUFDSUFNZ0lXcEJBblJxL1FBQ0FDSmUvUnNBUVFKdC9SRWdYdjBiQVVFQ2JmMGNBU0JlL1JzQ1FRSnQvUndDSUY3OUd3TkJBbTM5SEFQOUN3SUFJQVpCQkdvaUJpQUZSdzBBQ3lBRklCQkdEUUVMSUFSQkFXb2hBU0FOSUFSclFRRnhCRUFnQnlBRVFRSjBhaUFDSUFNZ0JHcEJBblJxS0FJQVFRSnROZ0lBSUFFaEJBc2dBU0FOUmcwQUEwQWdCeUFFUVFKMGFpQUNJQU1nQkdwQkFuUnFLQUlBUVFKdE5nSUFJQWNnQkVFQmFpSUJRUUowYWlBQ0lBRWdBMnBCQW5ScUtBSUFRUUp0TmdJQUlBUkJBbW9pQkNBTlJ3MEFDd3NnQ0VFQmFpSUlJQlpIRFFBTERBTUxJQ01nR1RZQ0FDQWRRUUpCMWNFQUlDTVFEd3NnRUNnQ0FFRUFOZ0lBREFFTElCWkZEUUFnRFVVTkFDQXlLQUlrSUFNZ0VXeEJBblJxSUFoQkFuUnFJUWNnRFVGOGNTSURRUUowSVFZZ01Db0NJRU1BQUFBL2xDSm0vUk1oWGtFQUlSQWdEVUVFU1NFSUEwQUNRQUpBSUFnRVFDQUNJUWtnQnlFQlFRQWhCQXdCQ3lBR0lBZHFJUUVnQWlBR2FpRUpRUUFoQkFOQUlBY2dCRUVDZENJRmFpQmVJQUlnQldyOUFBSUEvZm9CL2VZQi9Rc0NBQ0FFUVFScUlnUWdBMGNOQUFzZ0NTRUNJQU1pQkNBTlJnMEJDeUFKSVFJRFFDQUJJR1lnQWlnQ0FMS1VPQUlBSUFGQkJHb2hBU0FDUVFScUlRSWdCRUVCYWlJRUlBMUhEUUFMQ3lBSElCRkJBblJxSVFjZ0VFRUJhaUlRSUJaSERRQUxDeUFBRUJBZ0kwSGdBR29rQUF2V0JBRUpmeUFBS0FJc1FRaFBCRUFnQUNnQ0tDRUZRUWdoQ2dOQUlBQW9BZ3hCQlhRaENDQUFLQUlBSVFRZ0FDZ0NKQ0VEQWtBZ0FDZ0NGQ0lHSUFBb0FoQWlBVTBOQUNBRUlBaHFJUWNnQVVFQmFpRUNJQVlnQVd0QkFYRUVRQ0FISUFGQkJuUnFJZ2tnQlNBQklBTnNRUUowYWlJQi9RQUNBUDBMQWdBZ0NTQUIvUUFDRVAwTEFoQWdBaUVCQ3lBQ0lBWkdEUUFEUUNBSElBRkJCblJxSWdJZ0JTQUJJQU5zUVFKMGFpSUovUUFDQVAwTEFnQWdBaUFKL1FBQ0VQMExBaEFnQnlBQlFRRnFJZ0pCQm5ScUlna2dCU0FDSUFOc1FRSjBhaUlDL1FBQ0VQMExBaEFnQ1NBQy9RQUNBUDBMQWdBZ0FVRUNhaUlCSUFaSERRQUxDd0pBSUFBb0Fod2lCaUFBS0FJWUlnRk5EUUFnQkNBSWEwRWdhaUVISUFVZ0FDZ0NDQ0FEYkVFQ2RHb2hDQ0FCUVFGcUlRSWdCaUFCYTBFQmNRUkFJQWNnQVVFR2RHb2lCQ0FJSUFFZ0EyeEJBblJxSWdIOUFBSUEvUXNDQUNBRUlBSDlBQUlRL1FzQ0VDQUNJUUVMSUFJZ0JrWU5BQU5BSUFjZ0FVRUdkR29pQWlBSUlBRWdBMnhCQW5ScUlnVDlBQUlBL1FzQ0FDQUNJQVQ5QUFJUS9Rc0NFQ0FISUFGQkFXb2lBa0VHZEdvaUJDQUlJQUlnQTJ4QkFuUnFJZ0w5QUFJUS9Rc0NFQ0FFSUFMOUFBSUEvUXNDQUNBQlFRSnFJZ0VnQmtjTkFBc0xJQUFRSWtFQUlRRWdBQ2dDSUFSQUEwQWdCU0FBS0FJa0lBRnNRUUowYWlJQ0lBQW9BZ0FnQVVFRmRHb2lBLzBBQWdEOUN3SUFJQUlnQS8wQUFoRDlDd0lRSUFGQkFXb2lBU0FBS0FJZ1NRMEFDd3NnQlVFZ2FpRUZJQXBCQ0dvaUNpQUFLQUlzVFEwQUN3c2dBQ2dDQUJBUUlBQVFFQXYzRFFFbGZ5QUFLQUlzUVFoUEJFQWdBQ2dDSkNJS1FRVjBJUjRnQ2tFSGJDRVdJQXBCQm13aEZ5QUtRUVZzSVJnZ0NrRURiQ0VaSUFwQkFYUWhHaUFBS0FJb0lnRWdDa0VjYkdvaEh5QUJJQXBCR0d4cUlTQWdBU0FLUVJSc2FpRWhJQUVnQ2tFRWRHb2hJaUFCSUFwQkRHeHFJU01nQVNBS1FRTjBJaVJxSVNVZ0FTQUtRUUowSWh0cUlTWkJDQ0VjQTBBZ0FDQUJJQUFvQWlSQkNCQTdJQUFRSWdKQUlBQW9BaUFpQzBVTkFDQWRJQjVzSVFnZ0FDZ0NBQ0VHUVFBaEJBSkFBa0FnQzBIb0Fra05BQ0FHUVF4cUlnNGdDMEVCYXlJQ1FRVjBJZ05xSUE1SkRRQWdCa0VJYWlJUElBTnFJQTlKRFFBZ0F5QUdhaUFHU1EwQUlBWkJCR29pRUNBRGFpQVFTUTBBSUFKQi8vLy9QMHNOQUNBQklBZ2dKbW9pQXlBTFFRSjBJZ1ZxSWd4SklBTWdBU0FGYWlJSFNYRU5BQ0FCSUFnZ0pXb2lBaUFGYWlJTlNTQUNJQWRKY1EwQUlBRWdCU0FJSUNOcUlnbHFJZ1ZKSUFjZ0NVdHhEUUFnQmlBSFNTQUJJQVlnQzBFRmRHb2lFVUVjYXlJU1NYRU5BQ0FCSUJGQkdHc2lFMGtnQnlBUVMzRU5BQ0FCSUJGQkZHc2lGRWtnQnlBUFMzRU5BQ0FISUE1TElBRWdFVUVRYXlJSFNYRU5BQ0FESUExSklBSWdERWx4RFFBZ0F5QUZTU0FKSUF4SmNRMEFJQU1nRWtrZ0JpQU1TWEVOQUNBRElCTkpJQXdnRUV0eERRQWdBeUFVU1NBTUlBOUxjUTBBSUFNZ0Iwa2dEQ0FPUzNFTkFDQUNJQVZKSUFrZ0RVbHhEUUFnQWlBU1NTQUdJQTFKY1EwQUlBSWdFMGtnRFNBUVMzRU5BQ0FDSUJSSklBMGdEMHR4RFFBZ0FpQUhTU0FOSUE1TGNRMEFJQWtnRWtrZ0JTQUdTM0VOQUNBSklCTkpJQVVnRUV0eERRQWdDU0FVU1NBRklBOUxjUTBBSUFjZ0NVc2dCU0FPUzNFTkFDQUxRZnovLy84QWNTRUVRUUFoQXdOQUlBRWdBMEVDZEdvZ0JpQURRUVYwYWlJQy9Ra0NBQ0FDS2dJZy9TQUJJQUpCUUdzcUFnRDlJQUlnQWlvQ1lQMGdBLzBMQWdBZ0FTQURJQXBxUVFKMGFpQUMvUWtDQkNBQ0tnSWsvU0FCSUFJcUFrVDlJQUlnQWlvQ1pQMGdBLzBMQWdBZ0FTQURJQnBxUVFKMGFpQUMvUWtDQ0NBQ0tnSW8vU0FCSUFJcUFrajlJQUlnQWlvQ2FQMGdBLzBMQWdBZ0FTQURJQmxxUVFKMGFpQUMvUWtDRENBQ0tnSXMvU0FCSUFJcUFrejlJQUlnQWlvQ2JQMGdBLzBMQWdBZ0EwRUVhaUlESUFSSERRQUxJQVFnQzBZTkFRc0RRQ0FCSUFSQkFuUnFJQVlnQkVFRmRHb2lBeW9DQURnQ0FDQUJJQVFnQ21wQkFuUnFJQU1xQWdRNEFnQWdBU0FFSUJwcVFRSjBhaUFES2dJSU9BSUFJQUVnQkNBWmFrRUNkR29nQXlvQ0REZ0NBQ0FFUVFGcUlnUWdDMGNOQUFzTElBQW9BZ0FoQmtFQUlRUUNRQ0FMUWR3QVNRMEFJQVpCSEdvaUR5QUxRUUZySWdKQkJYUWlBMm9nRDBrTkFDQUdRUmhxSWhBZ0Eyb2dFRWtOQUNBR1FSQnFJaEVnQTJvZ0VVa05BQ0FHUVJScUloSWdBMm9nRWtrTkFDQUNRZi8vL3o5TERRQWdDQ0FpYWlJRElBZ2dJV29pQWlBTFFRSjBJZ1ZxSWd4SklBSWdBeUFGYWlJSFNYRU5BQ0FESUFnZ0lHb2lDU0FGYWlJTlNTQUhJQWxMY1EwQUlBTWdDQ0FmYWlJSUlBVnFJZ1ZKSUFjZ0NFdHhEUUFnQXlBR0lBdEJCWFJxSWc1QkRHc2lFMGtnQnlBUlMzRU5BQ0FESUE1QkNHc2lGRWtnQnlBU1MzRU5BQ0FESUE1QkJHc2lGVWtnQnlBUVMzRU5BQ0FESUE1SklBY2dEMHR4RFFBZ0FpQU5TU0FKSUF4SmNRMEFJQUlnQlVrZ0NDQU1TWEVOQUNBQ0lCTkpJQXdnRVV0eERRQWdBaUFVU1NBTUlCSkxjUTBBSUFJZ0ZVa2dEQ0FRUzNFTkFDQUNJQTVKSUF3Z0QwdHhEUUFnQ0NBTlNTQUZJQWxMY1EwQUlBa2dFMGtnRFNBUlMzRU5BQ0FKSUJSSklBMGdFa3R4RFFBZ0NTQVZTU0FOSUJCTGNRMEFJQWtnRGtrZ0RTQVBTM0VOQUNBSUlCTkpJQVVnRVV0eERRQWdDQ0FVU1NBRklCSkxjUTBBSUFnZ0ZVa2dCU0FRUzNFTkFDQUlJQTVKSUFVZ0QwdHhEUUFnQzBIOC8vLy9BSEVoQkVFQUlRTURRQ0FCSUFNZ0cycEJBblJxSUFZZ0EwRUZkR29pQXYwSkFoQWdBaW9DTVAwZ0FTQUNLZ0pRL1NBQ0lBSXFBbkQ5SUFQOUN3SUFJQUVnQXlBWWFrRUNkR29nQXYwSkFoUWdBaW9DTlAwZ0FTQUNLZ0pVL1NBQ0lBSXFBblQ5SUFQOUN3SUFJQUVnQXlBWGFrRUNkR29nQXYwSkFoZ2dBaW9DT1AwZ0FTQUNLZ0pZL1NBQ0lBSXFBbmo5SUFQOUN3SUFJQUVnQXlBV2FrRUNkR29nQXYwSkFod2dBaW9DUFAwZ0FTQUNLZ0pjL1NBQ0lBSXFBbno5SUFQOUN3SUFJQU5CQkdvaUF5QUVSdzBBQ3lBRUlBdEdEUUVMQTBBZ0FTQUVJQnRxUVFKMGFpQUdJQVJCQlhScUlnTXFBaEE0QWdBZ0FTQUVJQmhxUVFKMGFpQURLZ0lVT0FJQUlBRWdCQ0FYYWtFQ2RHb2dBeW9DR0RnQ0FDQUJJQVFnRm1wQkFuUnFJQU1xQWh3NEFnQWdCRUVCYWlJRUlBdEhEUUFMQ3lBZFFRRnFJUjBnQVNBa1FRSjBhaUVCSUJ4QkNHb2lIQ0FBS0FJc1RRMEFDd3NnQUNnQ0FCQVFJQUFRRUF0ekFRSi9JQUFvQWh3aUFVRUlhaUlESUFBb0FpQWlBazBFUUFOQUlBQWdBQ2dDR0NBQlFRSjBhaUFBS0FJVVFRZ1FNQ0FESWdGQkNHb2lBeUFBS0FJZ0lnSk5EUUFMQ3lBQklBSkpCRUFnQUNBQUtBSVlJQUZCQW5ScUlBQW9BaFFnQWlBQmF4QXdDeUFBS0FJQUVCQWdBQkFRQzBRQUlBQW9BaHdpQVNBQUtBSWdTUVJBQTBBZ0FDQUFLQUlZSUFBb0FoUWdBV3hCQW5ScUVGMGdBVUVCYWlJQklBQW9BaUJKRFFBTEN5QUFLQUlBRUJBZ0FCQVFDNmdCQVFWL0lBQW9BbFFpQXlnQ0FDRUZJQU1vQWdRaUJDQUFLQUlVSUFBb0Fod2lCMnNpQmlBRUlBWkpHeUlHQkVBZ0JTQUhJQVlRRWhvZ0F5QURLQUlBSUFacUlnVTJBZ0FnQXlBREtBSUVJQVpySWdRMkFnUUxJQVFnQWlBQ0lBUkxHeUlFQkVBZ0JTQUJJQVFRRWhvZ0F5QURLQUlBSUFScUlnVTJBZ0FnQXlBREtBSUVJQVJyTmdJRUN5QUZRUUE2QUFBZ0FDQUFLQUlzSWdFMkFod2dBQ0FCTmdJVUlBSUxuZ1VDQm40RWZ5QUJJQUVvQWdCQkIycEJlSEVpQVVFUWFqWUNBQ0FBSVFzZ0FTa0RBQ0VESUFFcEF3Z2hCeU1BUVNCcklnZ2tBQ0FIUXYvLy8vLy8veitESVFRQ2ZpQUhRakNJUXYvL0FZTWlCYWNpQ2tHQitBQnJRZjBQVFFSQUlBUkNCSVlnQTBJOGlJUWhBaUFLUVlENEFHdXRJUVVDUUNBRFF2Ly8vLy8vLy8vL0Q0TWlBMEtCZ0lDQWdJQ0FnQWhhQkVBZ0FrSUJmQ0VDREFFTElBTkNnSUNBZ0lDQWdJQUlVZzBBSUFKQ0FZTWdBbndoQWd0Q0FDQUNJQUpDLy8vLy8vLy8vd2RXSWdBYklRSWdBSzBnQlh3TUFRc0NRQ0FESUFTRVVBMEFJQVZDLy84QlVnMEFJQVJDQklZZ0EwSThpSVJDZ0lDQWdJQ0FnQVNFSVFKQy93OE1BUXRDL3c4Z0NrSCtod0ZMRFFBYVFnQkJnUGdBUVlINEFDQUZVQ0lCR3lJQUlBcHJJZ2xCOEFCS0RRQWFJQU1oQWlBRUlBUkNnSUNBZ0lDQXdBQ0VJQUViSWdZaEJBSkFRWUFCSUFscklnRkJ3QUJ4QkVBZ0F5QUJRVUJxcllZaEJFSUFJUUlNQVFzZ0FVVU5BQ0FFSUFHdElnV0dJQUpCd0FBZ0FXdXRpSVFoQkNBQ0lBV0dJUUlMSUFnZ0FqY0RFQ0FJSUFRM0F4Z0NRQ0FKUWNBQWNRUkFJQVlnQ1VGQWFxMklJUU5DQUNFR0RBRUxJQWxGRFFBZ0JrSEFBQ0FKYTYyR0lBTWdDYTBpQW9pRUlRTWdCaUFDaUNFR0N5QUlJQU0zQXdBZ0NDQUdOd01JSUFncEF3aENCSVlnQ0NrREFDSUNRanlJaENFREFrQWdBQ0FLUnlBSUtRTVFJQWdwQXhpRVFnQlNjYTBnQWtMLy8vLy8vLy8vL3crRGhDSUNRb0dBZ0lDQWdJQ0FDRm9FUUNBRFFnRjhJUU1NQVFzZ0FrS0FnSUNBZ0lDQWdBaFNEUUFnQTBJQmd5QURmQ0VEQ3lBRFFvQ0FnSUNBZ0lBSWhTQURJQU5DLy8vLy8vLy8vd2RXSWdBYklRSWdBSzBMSVFNZ0NFRWdhaVFBSUFzZ0IwS0FnSUNBZ0lDQWdJQi9neUFEUWpTR2hDQUNoTDg1QXdBTGhoZ0RFMzhCZkFOK0l3QkJzQVJySWd3a0FDQU1RUUEyQWl3Q1FDQUJ2U0lhUWdCVEJFQkJBU0VSUWJvSUlSTWdBWm9pQWIwaEdnd0JDeUFFUVlBUWNRUkFRUUVoRVVHOUNDRVREQUVMUWNBSVFic0lJQVJCQVhFaUVSc2hFeUFSUlNFVkN3SkFJQnBDZ0lDQWdJQ0FnUGovQUlOQ2dJQ0FnSUNBZ1BqL0FGRUVRQ0FBUVNBZ0FpQVJRUU5xSWdNZ0JFSC8vM3R4RUJ3Z0FDQVRJQkVRR1NBQVFaSUpRZllLSUFWQklIRWlCUnRCK3dsQitnb2dCUnNnQVNBQllodEJBeEFaSUFCQklDQUNJQU1nQkVHQXdBQnpFQndnQXlBQ0lBSWdBMGdiSVFvTUFRc2dERUVRYWlFU0FrQUNmd0pBSUFFZ0RFRXNhaEJsSWdFZ0FhQWlBVVFBQUFBQUFBQUFBR0lFUUNBTUlBd29BaXdpQmtFQmF6WUNMQ0FGUVNCeUlnNUI0UUJIRFFFTUF3c2dCVUVnY2lJT1FlRUFSZzBDSUF3b0Fpd2hDVUVHSUFNZ0EwRUFTQnNNQVFzZ0RDQUdRUjFySWdrMkFpd2dBVVFBQUFBQUFBQ3dRYUloQVVFR0lBTWdBMEVBU0JzTElRc2dERUV3YWtHZ0FrRUFJQWxCQUU0YmFpSU5JUWNEUUNBSEFuOGdBVVFBQUFBQUFBRHdRV01nQVVRQUFBQUFBQUFBQUdaeEJFQWdBYXNNQVF0QkFBc2lBellDQUNBSFFRUnFJUWNnQVNBRHVLRkVBQUFBQUdYTnpVR2lJZ0ZFQUFBQUFBQUFBQUJpRFFBTEFrQWdDVUVBVEFSQUlBa2hBeUFISVFZZ0RTRUlEQUVMSUEwaENDQUpJUU1EUUVFZElBTWdBMEVkVHhzaEF3SkFJQWRCQkdzaUJpQUlTUTBBSUFPdElSeENBQ0VhQTBBZ0JpQWFRdi8vLy84UGd5QUdOUUlBSUJ5R2ZDSWJRb0NVNjl3RGdDSWFRb0RzbEtNTWZpQWJmRDRDQUNBR1FRUnJJZ1lnQ0U4TkFBc2dHMEtBbE92Y0ExUU5BQ0FJUVFScklnZ2dHajRDQUFzRFFDQUlJQWNpQmtrRVFDQUdRUVJySWdjb0FnQkZEUUVMQ3lBTUlBd29BaXdnQTJzaUF6WUNMQ0FHSVFjZ0EwRUFTZzBBQ3dzZ0EwRUFTQVJBSUF0QkdXcEJDVzVCQVdvaER5QU9RZVlBUmlFUUEwQkJDVUVBSUFOcklnTWdBMEVKVHhzaENnSkFJQVlnQ0UwRVFDQUlLQUlBUlVFQ2RDRUhEQUVMUVlDVTY5d0RJQXAySVJSQmZ5QUtkRUYvY3lFV1FRQWhBeUFJSVFjRFFDQUhJQU1nQnlnQ0FDSVhJQXAyYWpZQ0FDQVdJQmR4SUJSc0lRTWdCMEVFYWlJSElBWkpEUUFMSUFnb0FnQkZRUUowSVFjZ0EwVU5BQ0FHSUFNMkFnQWdCa0VFYWlFR0N5QU1JQXdvQWl3Z0Ntb2lBellDTENBTklBY2dDR29pQ0NBUUd5SUhJQTlCQW5ScUlBWWdCaUFIYTBFQ2RTQVBTaHNoQmlBRFFRQklEUUFMQzBFQUlRTUNRQ0FHSUFoTkRRQWdEU0FJYTBFQ2RVRUpiQ0VEUVFvaEJ5QUlLQUlBSWdwQkNra05BQU5BSUFOQkFXb2hBeUFLSUFkQkNtd2lCMDhOQUFzTElBc2dBMEVBSUE1QjVnQkhHMnNnRGtIbkFFWWdDMEVBUjNGcklnY2dCaUFOYTBFQ2RVRUpiRUVKYTBnRVFDQU1RVEJxUVlSZ1FhUmlJQWxCQUVnYmFpQUhRWURJQUdvaUNrRUpiU0lQUVFKMGFpRUpRUW9oQnlBUFFYZHNJQXBxSWdwQkIwd0VRQU5BSUFkQkNtd2hCeUFLUVFGcUlncEJDRWNOQUFzTEFrQWdDU2dDQUNJUUlCQWdCMjRpRHlBSGJDSUtSaUFKUVFScUloUWdCa1p4RFFBZ0VDQUtheUVRQWtBZ0QwRUJjVVVFUUVRQUFBQUFBQUJBUXlFQklBZEJnSlRyM0FOSERRRWdDQ0FKVHcwQklBbEJCR3N0QUFCQkFYRkZEUUVMUkFFQUFBQUFBRUJESVFFTFJBQUFBQUFBQU9BL1JBQUFBQUFBQVBBL1JBQUFBQUFBQVBnL0lBWWdGRVliUkFBQUFBQUFBUGcvSUJBZ0IwRUJkaUlVUmhzZ0VDQVVTUnNoR1FKQUlCVU5BQ0FUTFFBQVFTMUhEUUFnR1pvaEdTQUJtaUVCQ3lBSklBbzJBZ0FnQVNBWm9DQUJZUTBBSUFrZ0J5QUthaUlETmdJQUlBTkJnSlRyM0FOUEJFQURRQ0FKUVFBMkFnQWdDQ0FKUVFScklnbExCRUFnQ0VFRWF5SUlRUUEyQWdBTElBa2dDU2dDQUVFQmFpSUROZ0lBSUFOQi81UHIzQU5MRFFBTEN5QU5JQWhyUVFKMVFRbHNJUU5CQ2lFSElBZ29BZ0FpQ2tFS1NRMEFBMEFnQTBFQmFpRURJQW9nQjBFS2JDSUhUdzBBQ3dzZ0NVRUVhaUlISUFZZ0JpQUhTeHNoQmdzRFFDQUdJZ2NnQ0UwaUNrVUVRQ0FHUVFScklnWW9BZ0JGRFFFTEN3SkFJQTVCNXdCSEJFQWdCRUVJY1NFSkRBRUxJQU5CZjNOQmZ5QUxRUUVnQ3hzaUJpQURTaUFEUVh0S2NTSUpHeUFHYWlFTFFYOUJmaUFKR3lBRmFpRUZJQVJCQ0hFaUNRMEFRWGNoQmdKQUlBb05BQ0FIUVFScktBSUFJZzVGRFFCQkNpRUtRUUFoQmlBT1FRcHdEUUFEUUNBR0lnbEJBV29oQmlBT0lBcEJDbXdpQ25CRkRRQUxJQWxCZjNNaEJnc2dCeUFOYTBFQ2RVRUpiQ0VLSUFWQlgzRkJ4Z0JHQkVCQkFDRUpJQXNnQmlBS2FrRUpheUlHUVFBZ0JrRUFTaHNpQmlBR0lBdEtHeUVMREFFTFFRQWhDU0FMSUFNZ0Ntb2dCbXBCQ1dzaUJrRUFJQVpCQUVvYklnWWdCaUFMU2hzaEN3dEJmeUVLSUF0Qi9mLy8vd2RCL3YvLy93Y2dDU0FMY2lJUUcwb05BU0FMSUJCQkFFZHFRUUZxSVE0Q1FDQUZRVjl4SWhWQnhnQkdCRUFnQXlBT1FmLy8vLzhIYzBvTkF5QURRUUFnQTBFQVNoc2hCZ3dCQ3lBU0lBTWdBMEVmZFNJR2N5QUdhNjBnRWhBcUlnWnJRUUZNQkVBRFFDQUdRUUZySWdaQk1Eb0FBQ0FTSUFaclFRSklEUUFMQ3lBR1FRSnJJZzhnQlRvQUFDQUdRUUZyUVMxQkt5QURRUUJJR3pvQUFDQVNJQTlySWdZZ0RrSC8vLy8vQjNOS0RRSUxJQVlnRG1vaUF5QVJRZi8vLy84SGMwb05BU0FBUVNBZ0FpQURJQkZxSWdNZ0JCQWNJQUFnRXlBUkVCa2dBRUV3SUFJZ0F5QUVRWUNBQkhNUUhBSkFBa0FDUUNBVlFjWUFSZ1JBSUF4QkVHcEJDWEloQlNBTklBZ2dDQ0FOU3hzaUNTRUlBMEFnQ0RVQ0FDQUZFQ29oQmdKQUlBZ2dDVWNFUUNBR0lBeEJFR3BORFFFRFFDQUdRUUZySWdaQk1Eb0FBQ0FHSUF4QkVHcExEUUFMREFFTElBVWdCa2NOQUNBR1FRRnJJZ1pCTURvQUFBc2dBQ0FHSUFVZ0Jtc1FHU0FJUVFScUlnZ2dEVTBOQUFzZ0VBUkFJQUJCZ2d4QkFSQVpDeUFISUFoTkRRRWdDMEVBVEEwQkEwQWdDRFVDQUNBRkVDb2lCaUFNUVJCcVN3UkFBMEFnQmtFQmF5SUdRVEE2QUFBZ0JpQU1RUkJxU3cwQUN3c2dBQ0FHUVFrZ0N5QUxRUWxPR3hBWklBdEJDV3NoQmlBSVFRUnFJZ2dnQjA4TkF5QUxRUWxLSVJnZ0JpRUxJQmdOQUFzTUFnc0NRQ0FMUVFCSURRQWdCeUFJUVFScUlBY2dDRXNiSVEwZ0RFRVFha0VKY2lFRklBZ2hCd05BSUFVZ0J6VUNBQ0FGRUNvaUJrWUVRQ0FHUVFGcklnWkJNRG9BQUFzQ1FDQUhJQWhIQkVBZ0JpQU1RUkJxVFEwQkEwQWdCa0VCYXlJR1FUQTZBQUFnQmlBTVFSQnFTdzBBQ3d3QkN5QUFJQVpCQVJBWklBWkJBV29oQmlBSklBdHlSUTBBSUFCQmdneEJBUkFaQ3lBQUlBWWdCU0FHYXlJR0lBc2dCaUFMU0JzUUdTQUxJQVpySVFzZ0IwRUVhaUlISUExUERRRWdDMEVBVGcwQUN3c2dBRUV3SUF0QkVtcEJFa0VBRUJ3Z0FDQVBJQklnRDJzUUdRd0NDeUFMSVFZTElBQkJNQ0FHUVFscVFRbEJBQkFjQ3lBQVFTQWdBaUFESUFSQmdNQUFjeEFjSUFNZ0FpQUNJQU5JR3lFS0RBRUxJQk1nQlVFYWRFRWZkVUVKY1dvaENBSkFJQU5CQzBzTkFFRU1JQU5ySVFaRUFBQUFBQUFBTUVBaEdRTkFJQmxFQUFBQUFBQUFNRUNpSVJrZ0JrRUJheUlHRFFBTElBZ3RBQUJCTFVZRVFDQVpJQUdhSUJtaG9Kb2hBUXdCQ3lBQklCbWdJQm1oSVFFTElCSWdEQ2dDTENJSElBZEJIM1VpQm5NZ0JtdXRJQklRS2lJR1JnUkFJQVpCQVdzaUJrRXdPZ0FBQ3lBUlFRSnlJUXNnQlVFZ2NTRU5JQVpCQW1zaUNTQUZRUTlxT2dBQUlBWkJBV3RCTFVFcklBZEJBRWdiT2dBQUlBUkJDSEVoQmlBTVFSQnFJUWNEUUNBSElnVUNmeUFCbVVRQUFBQUFBQURnUVdNRVFDQUJxZ3dCQzBHQWdJQ0FlQXNpQjBIUXhBRnFMUUFBSUExeU9nQUFJQUVnQjdlaFJBQUFBQUFBQURCQW9pRUJBa0FnQlVFQmFpSUhJQXhCRUdwclFRRkhEUUFDUUNBR0RRQWdBMEVBU2cwQUlBRkVBQUFBQUFBQUFBQmhEUUVMSUFWQkxqb0FBU0FGUVFKcUlRY0xJQUZFQUFBQUFBQUFBQUJpRFFBTFFYOGhDa0g5Ly8vL0J5QUxJQklnQ1dzaUJtb2lEV3NnQTBnTkFDQUFRU0FnQWlBTklBTkJBbW9nQnlBTVFSQnFJZ2RySWdVZ0JVRUNheUFEU0JzZ0JTQURHeUlLYWlJRElBUVFIQ0FBSUFnZ0N4QVpJQUJCTUNBQ0lBTWdCRUdBZ0FSekVCd2dBQ0FISUFVUUdTQUFRVEFnQ2lBRmEwRUFRUUFRSENBQUlBa2dCaEFaSUFCQklDQUNJQU1nQkVHQXdBQnpFQndnQXlBQ0lBSWdBMGdiSVFvTElBeEJzQVJxSkFBZ0Nnc0VBRUlBQ3dRQVFRQUxud01CQ1g5QjVnb2hBQUpBQTBBZ0FDMEFBQ0lCUlEwQklBRkJQVVlOQVNBQVFRRnFJZ0JCQTNFTkFBc0NRQUpBUVlDQ2hBZ2dBQ2dDQUNJQ2F5QUNja0dBZ1lLRWVIRkJnSUdDaEhoSERRQURRRUdBZ29RSUlBSkJ2ZnIwNlFOeklnRnJJQUZ5UVlDQmdvUjRjVUdBZ1lLRWVFY05BU0FBS0FJRUlRSWdBRUVFYWlJQklRQWdBa0dBZ29RSUlBSnJja0dBZ1lLRWVIRkJnSUdDaEhoR0RRQUxEQUVMSUFBaEFRc0RRQ0FCSWdBdEFBQWlBa1VOQVNBQVFRRnFJUUVnQWtFOVJ3MEFDd3NnQUNJQlFlWUtSZ1JBUVFBUEN3SkFJQUZCNWdwcklnQkI1Z3BxTFFBQURRQkJzTThCS0FJQUlnUkZEUUFnQkNnQ0FDSUZSUTBBQTBBQ1FBSi9JQVVoQWtIbUNpRUdRUUFnQUNJQlJRMEFHa0htQ2kwQUFDSURCSDhDUUFOQUlBTWdBaTBBQUNJSFJ3MEJJQWRGRFFFZ0FVRUJheUlCUlEwQklBSkJBV29oQWlBR0xRQUJJUU1nQmtFQmFpRUdJQU1OQUF0QkFDRURDeUFEQlVFQUN5QUNMUUFBYXd0RkJFQWdBQ0FGYWlJQkxRQUFRVDFHRFFFTElBUW9BZ1FoQlNBRVFRUnFJUVFnQlEwQkRBSUxDeUFCUVFGcUlRZ0xJQWdMQ1FBZ0FDZ0NQQkFOQzg0Q0FRaC9Jd0JCSUdzaUF5UUFJQU1nQUNnQ0hDSUVOZ0lRSUFBb0FoUWhCU0FESUFJMkFod2dBeUFCTmdJWUlBTWdCU0FFYXlJQk5nSVVJQUVnQW1vaEJVRUNJUVlnQTBFUWFpRUJBbjhEUUFKQUFrQUNRQ0FBS0FJOElBRWdCaUFEUVF4cUVBRWlCQVIvUVpUSEFTQUVOZ0lBUVg4RlFRQUxSUVJBSUFVZ0F5Z0NEQ0lIUmcwQklBZEJBRTROQWd3REN5QUZRWDlIRFFJTElBQWdBQ2dDTENJQk5nSWNJQUFnQVRZQ0ZDQUFJQUVnQUNnQ01HbzJBaEFnQWd3REN5QUJJQWNnQVNnQ0JDSUlTeUlKUVFOMGFpSUVJQWNnQ0VFQUlBa2JheUlJSUFRb0FnQnFOZ0lBSUFGQkRFRUVJQWtiYWlJQklBRW9BZ0FnQ0dzMkFnQWdCU0FIYXlFRklBWWdDV3NoQmlBRUlRRU1BUXNMSUFCQkFEWUNIQ0FBUWdBM0F4QWdBQ0FBS0FJQVFTQnlOZ0lBUVFBZ0JrRUNSZzBBR2lBQ0lBRW9BZ1JyQ3lFS0lBTkJJR29rQUNBS0MxWUJBbjhnQUNnQ1BDRUVJd0JCRUdzaUFDUUFJQVFnQWFjZ0FVSWdpS2NnQWtIL0FYRWdBRUVJYWhBSklnSUVmMEdVeHdFZ0FqWUNBRUYvQlVFQUN5RUNJQUFwQXdnaEFTQUFRUkJxSkFCQ2Z5QUJJQUliQ3dZQUlBQVFBQXNHQUNBQUVBTUw4bjRGQW53MmZ3aDdBMzRHZlNNQVFlREFBR3NpR0NRQUlCaEJBRFlDSUVFQ0lRd0NRQUpBSUFBb0FnQWlCMEdObEp6VUFFWU5BQ0FIUWYrZi9ZOEZSd1JBQWtBZ0IwR0FnSURnQUVjTkFDQUFLQUlFUWVxZ2dZRUNSdzBBSUFBb0FnaEJqWlNjMUFCR0RRSUxRYzBJRUFCQkFTRU1EQUlMUVFBaERBc0NmMEVBUVFGQjRBQVFFeUlIUlEwQUdpQUhRUUUyQWt3Q1FBSkFBa0FDUUNBTURnTUFBd0VEQ3lBSFFjTUFOZ0pZSUFkQnhBQTJBbFFnQjBIRkFEWUNVQ0FIUWNZQU5nSVFJQWRCeHdBMkFnUWdCMEhJQURZQ0hDQUhRY2tBTmdJWUlBZEJ5Z0EyQWhRZ0IwSExBRFlDQUNBSFFjd0FOZ0pjSUFkQnpRQTJBaXdnQjBIT0FEWUNLQ0FIUWM4QU5nSWtJQWRCMEFBMkFpQWdCMEhSQURZQ0RDQUhRZElBTmdJSUlBY1FUU0lJTmdJd0lBZ05BUXdDQ3lBSFFkTUFOZ0pZSUFkQjFBQTJBbFFnQjBIVkFEWUNVQ0FIUWRZQU5nSVFJQWRCMXdBMkFnUWdCMEhZQURZQ1hDQUhRZGtBTmdJc0lBZEIyZ0EyQWlnZ0IwSGJBRFlDSkNBSFFkd0FOZ0lnSUFkQjNRQTJBaHdnQjBIZUFEWUNHQ0FIUWQ4QU5nSVVJQWRCNEFBMkFnd2dCMEhoQURZQ0NDQUhRZUlBTmdJQUlBY0NmMEVCUVlnQkVCTWlDQVJBSUFnUVRTSU9OZ0lBQWtBZ0RrVU5BQ0FJL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1FzQ2JDQUlRUUE2QUh3Z0NCQXpJZzQyQWdRZ0RrVU5BQ0FJRURNaURqWUNDQ0FPUlEwQUlBZ01BZ3NnQ0JCd0MwRUFDeUlJTmdJd0lBaEZEUUVMSUFkQkFUWUNTQ0FIUVFFMkFrQWdCMEVBTmdJOElBZENBRGNDTkNBSFFRRTJBa1FnQnd3QkN5QUhFQkJCQUFzaUNBUkFJQWhCQURZQ1BDQUlRZU1BTmdKSUN5QUlCRUFnQ0VFQU5nSTRJQWhCNUFBMkFrUUxJQWdFUUNBSVFRQTJBalFnQ0VIbEFEWUNRQXNnR0VFa2FpSUhCRUFnQjBFQVFiakFBQkFWSWdkQkFEWUN1RUFnQjBKL053S0lRQXNnQXdSQUlCZ2dHQ2dDM0VCQkFYSTJBdHhBQ3lBWUlBRTJBaHdnR0NBQU5nSVlJQmdnQURZQ0ZFRUJJUXhCQUNFQkFrQWdHRUVVYWlJSFJRMEFRUUZCeUFBUUV5SUFCSDhDZnlBQVFZQ0F3QUEyQWtBZ0FFR0FnTUFBRUJRaURqWUNJQ0FPUlFSQUlBQVFFRUVBREFFTElBQWdEallDSkNBQVFRSTJBaHdnQUVFRE5nSVlJQUJCQkRZQ0ZDQUFRUVUyQWhBZ0FFRUdOZ0lzSUFCQkNEWUNLQ0FBSUFBb0FrUkJBbkkyQWtRZ0FBc0ZRUUFMSWdCRkRRQWdBQVJBSUFCQkFEWUNCQ0FBSUFjMkFnQUxJQWMxQWdnaFJTQUFCRUFnQUNCRk53TUlDd0pBSUFCRkRRQWdBQzBBUkVFQ2NVVU5BQ0FBUVQ4MkFoQUxJQUFFUUNBQVFjRUFOZ0lZQ3lBQUJFQWdBRUhDQURZQ0hBc2dBQ0VCQ3lBQklRQUNmeUFZUVNScUlRRUNRQ0FJUlEwQUlBRkZEUUFnQ0NnQ1RFVUVRQ0FJUVRScVFRRkJ0TWtBUVFBUUQwRUFEQUlMSUFnb0FqQWdBU0FJS0FJWUVRTUFRUUVoQ3dzZ0N3dEZCRUJCM0FnUUFDQUFFRFFnQ0JBMURBRUxBbjhnR0VFZ2FpRUJRUUFoQndKQUlBQkZEUUFnQ0VVTkFDQUlLQUpNUlFSQUlBaEJOR3BCQVVHRnlnQkJBQkFQUVFBTUFnc2dBQ0FJS0FJd0lBRWdDRUUwYWlBSUtBSUFFUUVBSVFjTElBY0xSUVJBUWZnSUVBQWdBQkEwSUFnUU5TQVlLQUlnRUNFTUFRc2dHQ2dDSUNFQlFRQWhCd0pBSUFoRkRRQWdBRVVOQUNBSUtBSk1SUTBBSUFnb0FqQWdBQ0FCSUFoQk5Hb2dDQ2dDQkJFQkFDRUhDd0pBSUFjRVFFRUFJUWNDUUNBSVJRMEFJQUJGRFFBZ0NDZ0NURVVOQUNBSUtBSXdJQUFnQ0VFMGFpQUlLQUlRRVFBQUlRY0xJQWNOQVF0Qi93a1FBQ0FJRURVZ0FCQTBJQmdvQWlBUUlRd0JDeUFBRURRZ0NCQTFJQmdvQWlBaURTZ0NIQ0lBQkVBZ0FCQVFJQmdvQWlBaURVSUFOd0ljQ3lBTktBSVFJU0VDUUFKQUlBSkZCRUFDUUNBRVJRMEFJQ0ZCQkVjTkFFRUJJUmxCQkNFaERBTUxBa0FDUUNBTktBSVVJZ0ZCQTBZTkFDQWhRUU5IRFFBZ0RTZ0NHQ0lBS0FJQUlBQW9BZ1JIRFFFZ0FDZ0NORUVCUmcwQklBMUJBellDRkF3REN5QWhRUUpMRFFBZ0RVRUNOZ0lVREFNTEFrQUNRQ0FCUVFOckRnTURBUUFFQ3lNQVFSQnJJZzRrQUFKQUFrQUNRQ0FOS0FJUVFRUkpEUUFnRFNnQ0dDSUFLQUlBSWdFZ0FDZ0NORWNOQUNBQklBQW9BbWhIRFFBZ0FTQUFLQUtjQVVjTkFDQUFLQUlFSWdFZ0FDZ0NPRWNOQUNBQklBQW9BbXhIRFFBZ0FTQUFLQUtnQVVZTkFRc2dEa0dIQ0RZQ0JDQU9RYmdLTmdJQVFlakVBVUh0UFNBT0VCWU1BUXNDUUNBQUtBSU1JQUFvQWdoc0lnaEZCRUFnQUNnQ3lBRWhBUXdCQzBNQUFJQS9RWDhnQUNnQ3RBRjBRWDl6czVVaFNFTUFBSUEvUVg4Z0FDZ0NnQUYwUVg5enM1VWhTa01BQUlBL1FYOGdBQ2dDVEhSQmYzT3psU0ZMUXdBQWdEOUJmeUFBS0FJWWRFRi9jN09WSVVrZ0FDZ0N5QUVoQVNBQUtBS1VBU0VDSUFBb0FtQWhDaUFBS0FJc0lRZEJBQ0VBQWtBZ0NFRUlTUTBBSUFjZ0NpQUlRUUowSWd0cUlnOUpJQW9nQnlBTGFpSVhTWEVOQUNBQ0lCZEpJQWNnQWlBTGFpSUpTWEVOQUNBQklCZEpJQWNnQVNBTGFpSUxTWEVOQUNBQ0lBOUpJQWtnQ2t0eERRQWdBU0FQU1NBS0lBdEpjUTBBSUFFZ0NVa2dBaUFMU1hFTkFDQUlRWHh4SVFBZ1NQMFRJVDBnU3YwVElUNGdTLzBUSVVNZ1NmMFRJVUJCQUNFTEEwQWdBaUFMUVFKMElnOXFJaGY5QUFJQUlVRWdDaUFQYWlJSi9RQUNBQ0ZDSUFjZ0Qyb2lFUDBNQUFDQVB3QUFnRDhBQUlBL0FBQ0FQeUJBSUJEOUFBSUEvZm9CL2VZQi9lVUIvUXdBQUg5REFBQi9Rd0FBZjBNQUFIOUQvZVlCL1F3QUFJQS9BQUNBUHdBQWdEOEFBSUEvSUQwZ0FTQVBhdjBBQWdEOStnSDk1Z0g5NVFFaVAvM21BZjM0QWYwTEFnQWdDZjBNQUFDQVB3QUFnRDhBQUlBL0FBQ0FQeUJESUVMOStnSDk1Z0g5NVFIOURBQUFmME1BQUg5REFBQi9Rd0FBZjBQOTVnRWdQLzNtQWYzNEFmMExBZ0FnRi8wTUFBQ0FQd0FBZ0Q4QUFJQS9BQUNBUHlBK0lFSDkrZ0g5NWdIOTVRSDlEQUFBZjBNQUFIOURBQUIvUXdBQWYwUDk1Z0VnUC8zbUFmMzRBZjBMQWdBZ0MwRUVhaUlMSUFCSERRQUxJQUFnQ0VZTkFRc0RRQUovUXdBQWdEOGdTU0FISUFCQkFuUWlDMm9pRHlnQ0FMS1VrME1BQUg5RGxFTUFBSUEvSUVnZ0FTQUxhaWdDQUxLVWt5Sk1sQ0pOaTBNQUFBQlBYUVJBSUUyb0RBRUxRWUNBZ0lCNEN5RVhJQUlnQzJvaUNTZ0NBQ0VRSUFvZ0Myb2lDeWdDQUNFTUlBOGdGellDQUNBTEFuOURBQUNBUHlCTElBeXlsSk5EQUFCL1E1UWdUSlFpVFl0REFBQUFUMTBFUUNCTnFBd0JDMEdBZ0lDQWVBczJBZ0FnQ1FKL1F3QUFnRDhnU2lBUXNwU1RRd0FBZjBPVUlFeVVJa3lMUXdBQUFFOWRCRUFnVEtnTUFRdEJnSUNBZ0hnTE5nSUFJQUJCQVdvaUFDQUlSdzBBQ3dzZ0FSQVFJQTBvQWhnaUFFRUlOZ0tBQVNBQVFRZzJBa3dnQUVFSU5nSVlJQUJCQURZQ3lBRWdEVUVCTmdJVUlBMGdEU2dDRUVFQmF5SUFOZ0lRSUFCQkJFa05BRUVESVFBRFFDQU5LQUlZSUFCQk5HeHFJZ0VnQVNnQ1pEWUNNQ0FCSUFIOUFBSlUvUXNDSUNBQklBSDlBQUpFL1FzQ0VDQUJJQUg5QUFJMC9Rc0NBQ0FBUVFGcUlnQWdEU2dDRUVrTkFBc0xJQTVCRUdva0FBd0RDeU1BUVJCcklnc2tBQUpBQWtBQ1FDQU5LQUlRUVFOSkRRQWdEU2dDR0NJQUtBSUFJZ0VnQUNnQ05FY05BQ0FCSUFBb0FtaEhEUUFnQUNnQ0JDSUJJQUFvQWpoSERRQWdBU0FBS0FKc1JnMEJDeUFMUWNVSU5nSUVJQXRCdUFvMkFnQkI2TVFCUVpjK0lBc1FGZ3dCQ3dKQUlBQW9BZ3dnQUNnQ0NHd2lBa1VOQUVGL0lBQW9BaGdpQ25SQmYzTWhBVUVBUVFFZ0NrRUJhM1FpQ2lBQUtBS0lBUnNoRDBFQUlBb2dBQ2dDVkJzaEZ5QUFLQUtVQVNFS0lBQW9BbUFoQnlBQUtBSXNJUTVCQUNFQUFrQWdBa0VFU1EwQUlBNGdCeUFDUVFKMElnaHFJZ2xKSUFjZ0NDQU9haUlRU1hFTkFDQUtJQkJKSUE0Z0NDQUthaUlJU1hFTkFDQUhJQWhKSUFrZ0NrdHhEUUFnQWtGOGNTRUFJQUg5RVNFL0lBLzlFU0ZBSUJmOUVTRkJRUUFoQ0FOQUlBNGdDRUVDZENJSmFpSVFJRDhnQ1NBS2FpSU0vUUFDQUNCQS9iRUIvZm9CSWozOURHbDBzejlwZExNL2FYU3pQMmwwc3ovOTVnRWdCeUFKYWlJSi9RQUNBQ0JCL2JFQi9mb0JJajc5RExOWkdyaXpXUnE0czFrYXVMTlpHcmo5NWdFZ0VQMEFBZ0Q5K2dFaVEvM2tBZjNrQWYwTUFBQUFQd0FBQUQ4QUFBQS9BQUFBUC8za0FmMzRBU0pDL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL2JnQklEOGdRdjA1L1ZMOUN3SUFJQWtnUHlBOS9Rd1owRGEvR2RBMnZ4blFOcjhaMERhLy9lWUJJRVA5RE5VSmdEL1ZDWUEvMVFtQVA5VUpnRC85NWdFZ1B2ME1Kekd3dmljeHNMNG5NYkMrSnpHd3Z2M21BZjNrQWYza0FmME1BQUFBUHdBQUFEOEFBQUEvQUFBQVAvM2tBZjM0QVNKQy9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9iZ0JJRDhnUXYwNS9WTDlDd0lBSUF3Z1B5QTkvUXk5TndhM3ZUY0d0NzAzQnJlOU53YTMvZVlCSUVQOURHYjBmejltOUg4L1p2Ui9QMmIwZnovOTVnRWdQdjBNTmRMaVB6WFM0ajgxMHVJL05kTGlQLzNtQWYza0FmM2tBZjBNQUFBQVB3QUFBRDhBQUFBL0FBQUFQLzNrQWYzNEFTSTkvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvYmdCSUQ4Z1BmMDUvVkw5Q3dJQUlBaEJCR29pQ0NBQVJ3MEFDeUFBSUFKR0RRRUxBMEFDZnlBS0lBQkJBblFpQ0dvaUNTZ0NBQ0FQYTdJaVNFTnBkTE0vbENBSElBaHFJaEFvQWdBZ0YydXlJa3BEczFrYXVKUWdDQ0FPYWlJTUtBSUFzaUpMa3BKREFBQUFQNUlpU1l0REFBQUFUMTBFUUNCSnFBd0JDMEdBZ0lDQWVBc2hDQ0FNSUFFZ0NFRUFJQWhCQUVvYklBRWdDRWdiTmdJQUlCQWdBUUovSUVoREdkQTJ2NVFnUzBQVkNZQS9sQ0JLUXljeHNMNlVrcEpEQUFBQVA1SWlTWXREQUFBQVQxMEVRQ0JKcUF3QkMwR0FnSUNBZUFzaUNFRUFJQWhCQUVvYklBRWdDRWdiTmdJQUlBa2dBUUovSUVoRHZUY0d0NVFnUzBObTlIOC9sQ0JLUXpYUzRqK1VrcEpEQUFBQVA1SWlTSXREQUFBQVQxMEVRQ0JJcUF3QkMwR0FnSUNBZUFzaUNFRUFJQWhCQUVvYklBRWdDRWdiTmdJQUlBQkJBV29pQUNBQ1J3MEFDd3NnRFVFQk5nSVVDeUFMUVJCcUpBQU1BZ3NnSVNBQ0lBSWdJVXNiSVNGQkFTRVpEQUVMQWtBQ1FBSi9Ba0FDUUNBTktBSVlJZ0VvQWdCQkFVY05BQUpBQWtBZ0FTZ0NORUVCYXc0Q0FRQUNDeUFCS0FKb1FRSkhEUUVDUUNBQktBSUVRUUZIRFFBZ0FTZ0NPRUVDUncwQUlBRW9BbXhCQWtjTkFFRUFJUXNnRFNJWEtBSVlJZ0FvQWhnaEFTQUFLQUtVQVNFUklBQW9BbUFoQ2lBQUtBSXNJUkFnQUNnQ0NDSU5JQUFvQWd3aUFteEJBblFpQUJBWUlRY2dBQkFZSVFnZ0FCQVlJUTRDUUFKQUFrQUNRQUpBQWtBZ0IwVU5BQ0FJUlEwQUlBNUZEUUJCZnlBQmRFRi9jeUVKUVFFZ0FVRUJhM1FoRENBQ0lCY29BZ1JCQVhFaUFHc2hIaUFYS0FJQVFRRnhJUnNnQUVVTkF5QU5SUTBEQW45QkFDQU1hN0s3SWdWRWFyeDBreGdFMWoraUlBVkVEQUlyaHhiWjVqK2lvQ0lHbVVRQUFBQUFBQURnUVdNRVFDQUdxZ3dCQzBHQWdJQ0FlQXNoRkFKL0lBVkVKekVJckJ4YS9EK2lJZ2FaUkFBQUFBQUFBT0JCWXdSQUlBYXFEQUVMUVlDQWdJQjRDeUVhSUExQkNFa2hPQUovSUFWRU85OVBqWmR1OWoraUlnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEN5RWRJRGdOQVNBSUlBZHJRUkJKRFFFZ0RpQUhhMEVRU1EwQklBY2dFR3RCRUVrTkFTQU9JQWhyUVJCSkRRRWdDQ0FRYTBFUVNRMEJJQTRnRUd0QkVFa05BU0FPSUExQmZIRWlDMEVDZENJQ2FpRUJJQUlnQjJvaEFDQWEvUkVoUGlBVS9SRWhReUFKL1JFaFB5QWQvUkVoUUFOQUlBY2dEMEVDZENJVGF2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFDQVFJQk5xL1FBQ0FDSTlJRUQ5cmdFaVFTQS8vYllCSUVIOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOU9mMVMvUXNDQUNBSUlCTnEvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFJRDBnUS8yeEFTSkJJRC85dGdFZ1FmME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMDUvVkw5Q3dJQUlBNGdFMnI5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnUFNBKy9hNEJJajBnUC8yMkFTQTkvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvVG45VXYwTEFnQWdEMEVFYWlJUElBdEhEUUFMSUFJZ0VHb2hFQ0FDSUFocUlRSWdDeUFOUmcwRURBSUxJQWNRRUNBSUVCQWdEaEFRREFRTElBY2hBQ0FJSVFJZ0RpRUJDd05BSUFBZ0VDZ0NBQ0lQSUIxcUloTWdDU0FKSUJOS0cwRUFJQk5CQUU0Yk5nSUFJQUlnRHlBVWF5SVRJQWtnQ1NBVFNodEJBQ0FUUVFCT0d6WUNBQ0FCSUE4Z0dtb2lEeUFKSUFrZ0Qwb2JRUUFnRDBFQVRoczJBZ0FnQVVFRWFpRUJJQUpCQkdvaEFpQUFRUVJxSVFBZ0VFRUVhaUVRSUF0QkFXb2lDeUFOUncwQUN3d0JDeUFPSVFFZ0NDRUNJQWNoQUFzZ0RTQWJheUVhQWtBZ0hrRitjU0lkQkg4Q2YwRUFJQXhyc3JzaUJVUnF2SFNUR0FUV1A2SWdCVVFNQWl1SEZ0bm1QNktnSWdhWlJBQUFBQUFBQU9CQll3UkFJQWFxREFFTFFZQ0FnSUI0Q3lFaUlCcEJmbkVpSEVFQmF5RTVBbjhnQlVRbk1RaXNIRnI4UDZJaUJwbEVBQUFBQUFBQTRFRmpCRUFnQnFvTUFRdEJnSUNBZ0hnTElTTWdPVUYrY1NFNkFuOGdCVVE3MzArTmwyNzJQNklpQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdMSVNRZ0hVRUJheUVsSURwQkFtb2hKaUFOUVFKMElRMERRQ0FCSUExcUlROGdBaUFOYWlFVElBQWdEV29oQ3lBTklCQnFJUlFnR3dSQUlBQWdFQ2dDQUNJVklDUnFJaElnQ1NBSklCSktHMEVBSUJKQkFFNGJOZ0lBSUFJZ0ZTQWlheUlTSUFrZ0NTQVNTaHRCQUNBU1FRQk9HellDQUNBQklCVWdJMm9pRlNBSklBa2dGVW9iUVFBZ0ZVRUFUaHMyQWdBZ0NpZ0NBQ0VXSUFzQ2Z5QVJLQUlBSUF4cnNyc2lCVVE3MzArTmwyNzJQNklpQnBsRUFBQUFBQUFBNEVGakJFQWdCcW9NQVF0QmdJQ0FnSGdMSUJRb0FnQWlGV29pRWlBSklBa2dFa29iUVFBZ0VrRUFUaHMyQWdBZ0V5QVZBbjhnRmlBTWE3SzdJZ1pFYXJ4MGt4Z0UxaitpSUFWRURBSXJoeGJaNWoraW9DSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBdHJJaElnQ1NBSklCSktHMEVBSUJKQkFFNGJOZ0lBSUE4Q2Z5QUdSQ2N4Q0t3Y1d2dy9vaUlGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXNnRldvaUZTQUpJQWtnRlVvYlFRQWdGVUVBVGhzMkFnQWdEMEVFYWlFUElCTkJCR29oRXlBTFFRUnFJUXNnRkVFRWFpRVVJQUpCQkdvaEFpQVFRUVJxSVJBZ0FVRUVhaUVCSUFCQkJHb2hBQXRCQUNFVklCd0Vmd05BSUFvb0FnQWhIeUFBQW44Z0VTZ0NBQ0FNYTdLN0lnVkVPOTlQalpkdTlqK2lJZ2FaUkFBQUFBQUFBT0JCWXdSQUlBYXFEQUVMUVlDQWdJQjRDeUFRS0FJQUloSnFJaFlnQ1NBSklCWktHMEVBSUJaQkFFNGJOZ0lBSUFJZ0VnSi9JQjhnREd1eXV5SUdSR3E4ZEpNWUJOWS9vaUFGUkF3Q0s0Y1cyZVkvb3FBaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTGF5SVdJQWtnQ1NBV1NodEJBQ0FXUVFCT0d6WUNBQ0FCQW44Z0JrUW5NUWlzSEZyOFA2SWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0xJQkpxSWhJZ0NTQUpJQkpLRzBFQUlCSkJBRTRiTmdJQUlBb29BZ0FoSHlBQUFuOGdFU2dDQUNBTWE3SzdJZ1ZFTzk5UGpaZHU5aitpSWdhWlJBQUFBQUFBQU9CQll3UkFJQWFxREFFTFFZQ0FnSUI0Q3lBUUtBSUVJaEpxSWhZZ0NTQUpJQlpLRzBFQUlCWkJBRTRiTmdJRUlBSWdFZ0ovSUI4Z0RHdXl1eUlHUkdxOGRKTVlCTlkvb2lBRlJBd0NLNGNXMmVZL29xQWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0xheUlXSUFrZ0NTQVdTaHRCQUNBV1FRQk9HellDQkNBQkFuOGdCa1FuTVFpc0hGcjhQNklpQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdMSUJKcUloSWdDU0FKSUJKS0cwRUFJQkpCQUU0Yk5nSUVJQW9vQWdBaEh5QUxBbjhnRVNnQ0FDQU1hN0s3SWdWRU85OVBqWmR1OWoraUlnYVpSQUFBQUFBQUFPQkJZd1JBSUFhcURBRUxRWUNBZ0lCNEN5QVVLQUlBSWhKcUloWWdDU0FKSUJaS0cwRUFJQlpCQUU0Yk5nSUFJQk1nRWdKL0lCOGdER3V5dXlJR1JHcThkSk1ZQk5ZL29pQUZSQXdDSzRjVzJlWS9vcUFpQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdMYXlJV0lBa2dDU0FXU2h0QkFDQVdRUUJPR3pZQ0FDQVBBbjhnQmtRbk1RaXNIRnI4UDZJaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTElCSnFJaElnQ1NBSklCSktHMEVBSUJKQkFFNGJOZ0lBSUFvb0FnQWhIeUFMQW44Z0VTZ0NBQ0FNYTdLN0lnVkVPOTlQalpkdTlqK2lJZ2FaUkFBQUFBQUFBT0JCWXdSQUlBYXFEQUVMUVlDQWdJQjRDeUFVS0FJRUloSnFJaFlnQ1NBSklCWktHMEVBSUJaQkFFNGJOZ0lFSUJNZ0VnSi9JQjhnREd1eXV5SUdSR3E4ZEpNWUJOWS9vaUFGUkF3Q0s0Y1cyZVkvb3FBaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTGF5SVdJQWtnQ1NBV1NodEJBQ0FXUVFCT0d6WUNCQ0FQQW44Z0JrUW5NUWlzSEZyOFA2SWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0xJQkpxSWhJZ0NTQUpJQkpLRzBFQUlCSkJBRTRiTmdJRUlCRkJCR29oRVNBS1FRUnFJUW9nRDBFSWFpRVBJQk5CQ0dvaEV5QUxRUWhxSVFzZ0ZFRUlhaUVVSUFGQkNHb2hBU0FDUVFocUlRSWdBRUVJYWlFQUlCQkJDR29oRUNBVlFRSnFJaFVnSEVrTkFBc2dKZ1ZCQUFzZ0dra0VmeUFLS0FJQUlSWWdBQUovSUJFb0FnQWdER3V5dXlJRlJEdmZUNDJYYnZZL29pSUdtVVFBQUFBQUFBRGdRV01FUUNBR3Fnd0JDMEdBZ0lDQWVBc2dFQ2dDQUNJVmFpSVNJQWtnQ1NBU1NodEJBQ0FTUVFCT0d6WUNBQ0FDSUJVQ2Z5QVdJQXhyc3JzaUJrUnF2SFNUR0FUV1A2SWdCVVFNQWl1SEZ0bm1QNktnSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0QzJzaUVpQUpJQWtnRWtvYlFRQWdFa0VBVGhzMkFnQWdBUUovSUFaRUp6RUlyQnhhL0QraUlnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEN5QVZhaUlWSUFrZ0NTQVZTaHRCQUNBVlFRQk9HellDQUNBS0tBSUFJUlVnQ3dKL0lCRW9BZ0FnREd1eXV5SUZSRHZmVDQyWGJ2WS9vaUlHbVVRQUFBQUFBQURnUVdNRVFDQUdxZ3dCQzBHQWdJQ0FlQXNnRkNnQ0FDSUxhaUlVSUFrZ0NTQVVTaHRCQUNBVVFRQk9HellDQUNBVElBc0NmeUFWSUF4cnNyc2lCa1JxdkhTVEdBVFdQNklnQlVRTUFpdUhGdG5tUDZLZ0lnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEMyc2lFeUFKSUFrZ0Uwb2JRUUFnRTBFQVRoczJBZ0FnRHdKL0lBWkVKekVJckJ4YS9EK2lJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDeUFMYWlJTElBa2dDU0FMU2h0QkFDQUxRUUJPR3pZQ0FDQVJRUVJxSVJFZ0NrRUVhaUVLSUFKQkJHb2hBaUFRUVFScUlSQWdBRUVFYWlFQUlBRkJCR29GSUFFTElBMXFJUUVnQWlBTmFpRUNJQUFnRFdvaEFDQU5JQkJxSVJBZ0lFRUNhaUlnSUIxSkRRQUxJQ1ZCZm5GQkFtb0ZRUUFMSUI1UERRQWdHd1JBSUFBQ2YwRUFJQXhyc3JzaUJVUTczMCtObDI3MlA2SWlCcGxFQUFBQUFBQUE0RUZqQkVBZ0Jxb01BUXRCZ0lDQWdIZ0xJQkFvQWdBaUMyb2lEU0FKSUFrZ0RVb2JRUUFnRFVFQVRoczJBZ0FnQWlBTEFuOGdCVVJxdkhTVEdBVFdQNklnQlVRTUFpdUhGdG5tUDZLZ0lnYVpSQUFBQUFBQUFPQkJZd1JBSUFhcURBRUxRWUNBZ0lCNEMyc2lEU0FKSUFrZ0RVb2JRUUFnRFVFQVRoczJBZ0FnQVFKL0lBVkVKekVJckJ4YS9EK2lJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDeUFMYWlJTElBa2dDU0FMU2h0QkFDQUxRUUJPR3pZQ0FDQUNRUVJxSVFJZ0VFRUVhaUVRSUFGQkJHb2hBU0FBUVFScUlRQUxJQnBCZm5FaUlBUi9JQ0JCQVdzaUMwRitjU0U3QWtBQ2YwRUFJQ0JCRDBrTkFCcEJBQ0FBSUFJZ0MwRUJkaUlVUVFOMFFRaHFJaE5xSWd0SklBSWdBQ0FUYWlJTlNYRU5BQnBCQUNBQklBMUpJQUFnQVNBVGFpSVBTWEVOQUJwQkFDQUFJQkFnRTJvaUUwa2dEU0FRUzNFTkFCcEJBQ0FLSUExSklBQWdDaUFVUVFKMFFRUnFJaDVxSWh0SmNRMEFHa0VBSUEwZ0VVc2dBQ0FSSUI1cUlnMUpjUTBBR2tFQUlBSWdEMGtnQVNBTFNYRU5BQnBCQUNBQ0lCTkpJQXNnRUV0eERRQWFRUUFnQ2lBTFNTQUNJQnRKY1EwQUdrRUFJQUlnRFVrZ0N5QVJTM0VOQUJwQkFDQUJJQk5KSUE4Z0VFdHhEUUFhUVFBZ0NpQVBTU0FCSUJ0SmNRMEFHa0VBSUFFZ0RVa2dEeUFSUzNFTkFCb2dDaUFVUVFGcUloWkIvUC8vL3dkeElodEJBblFpSW1vaEN5QUJJQnRCQTNRaUhtb2hEU0FBSUI1cUlROGdDZjBSSVQ4Z0RQMFJJVU5CQUNFVEEwQWdFQ0FUUVFOMEloUkJHSElpSFdvaUl5QVFJQlJCRUhJaUhHb2lKQ0FRSUJSQkNISWlGV29pSlNBUUlCUnFJaWI5Q1FJQS9WWUNBQUg5VmdJQUF2MVdBZ0FESVQwQ2Z5QVJJQk5CQW5RaUgycjlBQUlBSUVQOXNRSDkrZ0VpUHYxZklrRDlERHZmVDQyWGJ2WS9POTlQalpkdTlqLzk4Z0VpUWYwaEFTSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBc2hKeUFLSUI5cS9RQUNBQ0ZDSUFBZ0ZHb2lILzBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0E5QW44Z1FmMGhBQ0lGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXY5RVNBbi9Sd0JBbjhnUGlBKy9RMElDUW9MREEwT0R3QUJBZ01BQVFJRC9WOGlRZjBNTzk5UGpaZHU5ajg3MzArTmwyNzJQLzN5QVNJKy9TRUFJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDLzBjQWdKL0lENzlJUUVpQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdML1J3RElrVDlyZ0VpUGlBLy9iWUJJRDc5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5T2YxU0lqNzlXZ0lBQUNBQUlCVnFJaWNnUHYxYUFnQUJJQUFnSEdvaUtTQSsvVm9DQUFJZ0FDQWRhaUlxSUQ3OVdnSUFBd0ovSUVJZ1EvMnhBZjM2QVNJKy9WOGlRdjBNYXJ4MGt4Z0UxajlxdkhTVEdBVFdQLzN5QVNCQS9Rd01BaXVIRnRubVB3d0NLNGNXMmVZLy9mSUIvZkFCSWtEOUlRRWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0xJU2dnQWlBVWFpSXIvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFJRDBDZnlCQS9TRUFJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDLzBSSUNqOUhBRUNmeUErL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1EwSUNRb0xEQTBPRHdBQkFnTUFBUUlEL1Y4aVFQME1hcngwa3hnRTFqOXF2SFNUR0FUV1AvM3lBU0JCL1F3TUFpdUhGdG5tUHd3Q0s0Y1cyZVkvL2ZJQi9mQUJJajc5SVFBaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTC9Sd0NBbjhnUHYwaEFTSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBdjlIQU1pUWYyeEFTSStJRC85dGdFZ1B2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMDUvVklpUHYxYUFnQUFJQUlnRldvaUtDQSsvVm9DQUFFZ0FpQWNhaUlzSUQ3OVdnSUFBaUFDSUIxcUlpMGdQdjFhQWdBREFuOGdRdjBNSnpFSXJCeGEvRDhuTVFpc0hGcjhQLzN5QVNJKy9TRUJJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDeUV1SUFFZ0ZHb2lGUDBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0E5QW44Z1B2MGhBQ0lGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXY5RVNBdS9Sd0JBbjhnUVAwTUp6RUlyQnhhL0Q4bk1RaXNIRnI4UC8zeUFTSTkvU0VBSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0Qy8wY0FnSi9JRDM5SVFFaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTC9Sd0RJa0Q5cmdFaVBTQS8vYllCSUQzOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOU9mMVNJajM5V2dJQUFDQUJJQlZxSWhVZ1BmMWFBZ0FCSUFFZ0hHb2lIQ0E5L1ZvQ0FBSWdBU0FkYWlJZElEMzlXZ0lBQXlBZi9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUlDTkJCR29nSkVFRWFpQWxRUVJxSUNiOUNRSUUvVllDQUFIOVZnSUFBdjFXQWdBRElqNGdSUDJ1QVNJOUlELzl0Z0VnUGYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwNS9WSWlQZjFhQWdRQUlDY2dQZjFhQWdRQklDa2dQZjFhQWdRQ0lDb2dQZjFhQWdRRElDdjlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdQaUJCL2JFQklqMGdQLzIyQVNBOS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9UbjlVaUk5L1ZvQ0JBQWdLQ0E5L1ZvQ0JBRWdMQ0E5L1ZvQ0JBSWdMU0E5L1ZvQ0JBTWdGUDBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0ErSUVEOXJnRWlQU0EvL2JZQklEMzlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlPZjFTSWozOVdnSUVBQ0FWSUQzOVdnSUVBU0FjSUQzOVdnSUVBaUFkSUQzOVdnSUVBeUFUUVFScUloTWdHMGNOQUFzZ0VTQWlhaUVSSUJBZ0htb2hFQ0FDSUI1cUlRSWdGaUFiUmdSQUlBOGhBQ0FOSVFFZ0N5RUtEQUlMSUE4aEFDQU5JUUVnQ3lFS0lCdEJBWFFMSVFzRFFDQUtLQUlBSVJNZ0FBSi9JQkVvQWdBZ0RHdXl1eUlGUkR2ZlQ0Mlhidlkvb2lJR21VUUFBQUFBQUFEZ1FXTUVRQ0FHcWd3QkMwR0FnSUNBZUFzZ0VDZ0NBQ0lOYWlJUElBa2dDU0FQU2h0QkFDQVBRUUJPR3pZQ0FDQUNJQTBDZnlBVElBeHJzcnNpQmtScXZIU1RHQVRXUDZJZ0JVUU1BaXVIRnRubVA2S2dJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDMnNpRHlBSklBa2dEMG9iUVFBZ0QwRUFUaHMyQWdBZ0FRSi9JQVpFSnpFSXJCeGEvRCtpSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0Q3lBTmFpSU5JQWtnQ1NBTlNodEJBQ0FOUVFCT0d6WUNBQ0FLS0FJQUlSTWdBQUovSUJFb0FnQWdER3V5dXlJRlJEdmZUNDJYYnZZL29pSUdtVVFBQUFBQUFBRGdRV01FUUNBR3Fnd0JDMEdBZ0lDQWVBc2dFQ2dDQkNJTmFpSVBJQWtnQ1NBUFNodEJBQ0FQUVFCT0d6WUNCQ0FDSUEwQ2Z5QVRJQXhyc3JzaUJrUnF2SFNUR0FUV1A2SWdCVVFNQWl1SEZ0bm1QNktnSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0QzJzaUR5QUpJQWtnRDBvYlFRQWdEMEVBVGhzMkFnUWdBUUovSUFaRUp6RUlyQnhhL0QraUlnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEN5QU5haUlOSUFrZ0NTQU5TaHRCQUNBTlFRQk9HellDQkNBUlFRUnFJUkVnQ2tFRWFpRUtJQUZCQ0dvaEFTQUNRUWhxSVFJZ0FFRUlhaUVBSUJCQkNHb2hFQ0FMUVFKcUlnc2dJRWtOQUFzTElEdEJBbW9GUVFBTElCcFBEUUFnQ2lnQ0FDRUxJQUFDZnlBUktBSUFJQXhyc3JzaUJVUTczMCtObDI3MlA2SWlCcGxFQUFBQUFBQUE0RUZqQkVBZ0Jxb01BUXRCZ0lDQWdIZ0xJQkFvQWdBaUFHb2lDaUFKSUFrZ0Nrb2JRUUFnQ2tFQVRoczJBZ0FnQWlBQUFuOGdDeUFNYTdLN0lnWkVhcngwa3hnRTFqK2lJQVZFREFJcmh4Ylo1aitpb0NJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUF0cklnSWdDU0FDSUFsSUcwRUFJQUpCQUU0Yk5nSUFJQUVDZnlBR1JDY3hDS3djV3Z3L29pSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBc2dBR29pQUNBSklBQWdDVWdiUVFBZ0FFRUFUaHMyQWdBTElCY29BaGdvQWl3UUVDQVhLQUlZSWdBZ0J6WUNMQ0FBS0FKZ0VCQWdGeWdDR0NJQUlBZzJBbUFnQUNnQ2xBRVFFQ0FYS0FJWUlnQWdEallDbEFFZ0FDQUEvUUFDQUNJLy9Rc0NhQ0FBSUQvOUN3STBJQmRCQVRZQ0ZBc01Cd3NnQVNnQ0JFRUJSdzBCSUFFb0FqaEJBVWNOQVNBQktBSnNRUUZIRFFFZ0FTZ0NHQ0VBSUFFb0FwUUJJUUlnQVNnQ1lDRUhJQUVvQWl3aERDQUJLQUlJSWdvZ0FTZ0NEQ0lXYkVFQ2RDSUJFQmdoRHlBQkVCZ2hGeUFCRUJnaENTQVBSUTBGSUJkRkRRVWdDVVVOQlNBV0JFQWdDaUFOS0FJQVFRRnhJaDlySVNJQ2YwRUFRUUVnQUVFQmEzUWlGR3V5dXlJRlJHcThkSk1ZQk5ZL29pQUZSQXdDSzRjVzJlWS9vcUFpQnBsRUFBQUFBQUFBNEVGakJFQWdCcW9NQVF0QmdJQ0FnSGdMSVNkQmZ5QUFkQ0U4SUNKQmZuRWlIVUVCYXlJS1FRRjJJZ0JCQVdvaEl3Si9JQVZFSnpFSXJCeGEvRCtpSWdhWlJBQUFBQUFBQU9CQll3UkFJQWFxREFFTFFZQ0FnSUI0Q3lFcElBcEJmbkVoQ2lBQVFRSjBJUWdnQUVFRGRDRUFJQ05CZkhFaEd5QThRWDl6SVJFQ2Z5QUZSRHZmVDQyWGJ2WS9vaUlGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXNoS2lBS1FRSnFJU1FnQ0VFRWFpRWxJQUJCQ0dvaElDQWJRUUowSVNZZ0cwRURkQ0VlSUJ0QkFYUWhFQ0FSL1JFaFB5QVUvUkVoUXlBZFFRZEpJU2dnRHlFS0lCY2hBQ0FKSVE0RFFDQWZCRUFnQ2lBTUtBSUFJZ0VnS21vaUNDQVJJQWdnRVVnYlFRQWdDRUVBVGhzMkFnQWdBQ0FCSUNkcklnZ2dFU0FJSUJGSUcwRUFJQWhCQUU0Yk5nSUFJQTRnQVNBcGFpSUJJQkVnQVNBUlNCdEJBQ0FCUVFCT0d6WUNBQ0FPUVFScUlRNGdDa0VFYWlFS0lBeEJCR29oRENBQVFRUnFJUUFMQW44Q2Z5QWRSUVJBSUFjaEFTQU9JUXNnQ2lFSVFRQU1BUXRCQUNFWkFrQUNRQ0FvRFFBZ0NpQUFJQ0JxSWdGSklBQWdDaUFnYWlJSVNYRU5BQ0FLSUE0Z0lHb2lDMGtnQ0NBT1MzRU5BQ0FLSUF3Z0lHb2lHa2tnQ0NBTVMzRU5BQ0FISUFoSklBb2dCeUFsYWlJY1NYRU5BQ0FDSUFoSklBb2dBaUFsYWlJSVNYRU5BQ0FBSUF0SklBRWdEa3R4RFFBZ0FDQWFTU0FCSUF4TGNRMEFJQUFnSEVrZ0FTQUhTM0VOQUNBQUlBaEpJQUVnQWt0eERRQWdEaUFhU1NBTElBeExjUTBBSUE0Z0hFa2dCeUFMU1hFTkFDQUNJQXRKSUFnZ0RrdHhEUUFnQnlBbWFpRUJJQTRnSG1vaEN5QUtJQjVxSVFnRFFDQU1JQmxCQTNRaUdrRVljaUljYWlJcklBd2dHa0VRY2lJVmFpSXNJQXdnR2tFSWNpSVNhaUl0SUF3Z0dtb2lMdjBKQWdEOVZnSUFBZjFXQWdBQy9WWUNBQU1oUFFKL0lBSWdHVUVDZENJdmF2MEFBZ0FnUS8yeEFmMzZBU0krL1Y4aVFQME1POTlQalpkdTlqODczMCtObDI3MlAvM3lBU0pCL1NFQklnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEN5RXdJQWNnTDJyOUFBSUFJVUlnQ2lBYWFpSXYvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFJRDBDZnlCQi9TRUFJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDLzBSSUREOUhBRUNmeUErSUQ3OURRZ0pDZ3NNRFE0UEFBRUNBd0FCQWdQOVh5SkIvUXc3MzArTmwyNzJQenZmVDQyWGJ2WS8vZklCSWo3OUlRQWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0wvUndDQW44Z1B2MGhBU0lGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXY5SEFNaVJQMnVBU0krSUQvOXRnRWdQdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDA1L1ZJaVB2MWFBZ0FBSUFvZ0Vtb2lNQ0ErL1ZvQ0FBRWdDaUFWYWlJeUlENzlXZ0lBQWlBS0lCeHFJak1nUHYxYUFnQURBbjhnUWlCRC9iRUIvZm9CSWo3OVh5SkMvUXhxdkhTVEdBVFdQMnE4ZEpNWUJOWS8vZklCSUVEOURBd0NLNGNXMmVZL0RBSXJoeGJaNWovOThnSDk4QUVpUVAwaEFTSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBc2hNU0FBSUJwcUlqVDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdQUUovSUVEOUlRQWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0wvUkVnTWYwY0FRSi9JRDc5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5RFFnSkNnc01EUTRQQUFFQ0F3QUJBZ1A5WHlKQS9ReHF2SFNUR0FUV1AycThkSk1ZQk5ZLy9mSUJJRUg5REF3Q0s0Y1cyZVkvREFJcmh4Ylo1ai85OGdIOThBRWlQdjBoQUNJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUF2OUhBSUNmeUErL1NFQklnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEMvMGNBeUpCL2JFQklqNGdQLzIyQVNBKy9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9UbjlVaUkrL1ZvQ0FBQWdBQ0FTYWlJeElENzlXZ0lBQVNBQUlCVnFJalVnUHYxYUFnQUNJQUFnSEdvaU5pQSsvVm9DQUFNQ2Z5QkMvUXduTVFpc0hGcjhQeWN4Q0t3Y1d2dy8vZklCSWo3OUlRRWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0xJVGNnRGlBYWFpSWEvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFJRDBDZnlBKy9TRUFJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDLzBSSURmOUhBRUNmeUJBL1F3bk1RaXNIRnI4UHljeENLd2NXdncvL2ZJQklqMzlJUUFpQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdML1J3Q0FuOGdQZjBoQVNJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUF2OUhBTWlRUDJ1QVNJOUlELzl0Z0VnUGYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwNS9WSWlQZjFhQWdBQUlBNGdFbW9pRWlBOS9Wb0NBQUVnRGlBVmFpSVZJRDM5V2dJQUFpQU9JQnhxSWh3Z1BmMWFBZ0FESUMvOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0swRUVhaUFzUVFScUlDMUJCR29nTHYwSkFnVDlWZ0lBQWYxV0FnQUMvVllDQUFNaVBpQkUvYTRCSWowZ1AvMjJBU0E5L1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1RuOVVpSTkvVm9DQkFBZ01DQTkvVm9DQkFFZ01pQTkvVm9DQkFJZ015QTkvVm9DQkFNZ05QME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFDQStJRUg5c1FFaVBTQS8vYllCSUQzOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOU9mMVNJajM5V2dJRUFDQXhJRDM5V2dJRUFTQTFJRDM5V2dJRUFpQTJJRDM5V2dJRUF5QWEvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFJRDRnUVAydUFTSTlJRC85dGdFZ1BmME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMDUvVklpUGYxYUFnUUFJQklnUGYxYUFnUUJJQlVnUGYxYUFnUUNJQndnUGYxYUFnUURJQmxCQkdvaUdTQWJSdzBBQ3lBQ0lDWnFJUUlnRENBZWFpRU1JQUFnSG1vaEFDQVFJUmtnSkNBYklDTkdEUUlhREFFTElBb2hDQ0FPSVFzZ0J5RUJDd05BSUFFb0FnQWhEaUFJQW44Z0FpZ0NBQ0FVYTdLN0lnVkVPOTlQalpkdTlqK2lJZ2FaUkFBQUFBQUFBT0JCWXdSQUlBYXFEQUVMUVlDQWdJQjRDeUFNS0FJQUlncHFJZ2NnRVNBSElCRklHMEVBSUFkQkFFNGJOZ0lBSUFBZ0NnSi9JQTRnRkd1eXV5SUdSR3E4ZEpNWUJOWS9vaUFGUkF3Q0s0Y1cyZVkvb3FBaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTGF5SUhJQkVnQnlBUlNCdEJBQ0FIUVFCT0d6WUNBQ0FMQW44Z0JrUW5NUWlzSEZyOFA2SWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0xJQXBxSWdvZ0VTQUtJQkZJRzBFQUlBcEJBRTRiTmdJQUlBRW9BZ0FoRGlBSUFuOGdBaWdDQUNBVWE3SzdJZ1ZFTzk5UGpaZHU5aitpSWdhWlJBQUFBQUFBQU9CQll3UkFJQWFxREFFTFFZQ0FnSUI0Q3lBTUtBSUVJZ3BxSWdjZ0VTQUhJQkZJRzBFQUlBZEJBRTRiTmdJRUlBQWdDZ0ovSUE0Z0ZHdXl1eUlHUkdxOGRKTVlCTlkvb2lBRlJBd0NLNGNXMmVZL29xQWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0xheUlISUJFZ0J5QVJTQnRCQUNBSFFRQk9HellDQkNBTEFuOGdCa1FuTVFpc0hGcjhQNklpQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdMSUFwcUlnb2dFU0FLSUJGSUcwRUFJQXBCQUU0Yk5nSUVJQUpCQkdvaEFpQUJRUVJxSVFFZ0MwRUlhaUVMSUFCQkNHb2hBQ0FJUVFocUlRZ2dERUVJYWlFTUlCbEJBbW9pR1NBZFNRMEFDeUFrQ3lBaVR3UkFJQUVoQnlBSUlRb2dDd3dCQ3lBQktBSUFJUTRnQ0FKL0lBSW9BZ0FnRkd1eXV5SUZSRHZmVDQyWGJ2WS9vaUlHbVVRQUFBQUFBQURnUVdNRVFDQUdxZ3dCQzBHQWdJQ0FlQXNnRENnQ0FDSUthaUlISUJFZ0J5QVJTQnRCQUNBSFFRQk9HellDQUNBQUlBb0NmeUFPSUJScnNyc2lCa1JxdkhTVEdBVFdQNklnQlVRTUFpdUhGdG5tUDZLZ0lnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEMyc2lCeUFSSUFjZ0VVZ2JRUUFnQjBFQVRoczJBZ0FnQ3dKL0lBWkVKekVJckJ4YS9EK2lJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDeUFLYWlJS0lCRWdDaUFSU0J0QkFDQUtRUUJPR3pZQ0FDQUNRUVJxSVFJZ0FVRUVhaUVISUFCQkJHb2hBQ0FJUVFScUlRb2dERUVFYWlFTUlBdEJCR29MSVE0Z0UwRUJhaUlUSUJaSERRQUxDeUFOS0FJWUtBSXNFQkFnRFNnQ0dDSUFJQTgyQWl3Z0FDZ0NZQkFRSUEwb0FoZ2lBQ0FYTmdKZ0lBQW9BcFFCRUJBZ0RTZ0NHQ0lBSUFrMkFwUUJJQUFnQVAwQUFnQWlQLzBMQW1nZ0FDQS8vUXNDTkNBTlFRRTJBaFJCQUNFWkRBWUxJQUVvQW1oQkFVY05BQ0FCS0FJRVFRRkhEUUFnQVNnQ09FRUJSdzBBSUFFb0FteEJBVWNOQUNBQktBSVlJUUlnQVNnQ2xBRWhDQ0FCS0FKZ0lRd2dBU2dDTENFQUlBRW9BZ3dnQVNnQ0NHd2lGMEVDZENJQkVCZ2hCeUFCRUJnaER5QUJFQmdoRGdKQUlBZEZEUUFnRDBVTkFDQU9SUTBBSUJkRkRRUkJmeUFDZEVGL2N5RVpRUUVnQWtFQmEzUWhFU0FYUVFoSkRRSWdEeUFIYTBFUVNRMENJQTRnQjJ0QkVFa05BaUFISUFCclFSQkpEUUlnQnlBTWEwRVFTUTBDSUFjZ0NHdEJFRWtOQWlBT0lBOXJRUkJKRFFJZ0R5QUFhMEVRU1EwQ0lBOGdER3RCRUVrTkFpQVBJQWhyUVJCSkRRSWdEaUFBYTBFUVNRMENJQTRnREd0QkVFa05BaUFPSUFoclFSQkpEUUlnQ0NBWFFYeHhJZ3BCQW5RaUNXb2hDeUFKSUE1cUlRRWdCeUFKYWlFQ0lCbjlFU0UvSUJIOUVTRTlBMEFDZnlBSUlCTkJBblFpRUdyOUFBSUFJRDM5c1FIOStnRWlQdjFmSWtEOUREdmZUNDJYYnZZL085OVBqWmR1OWovOThnRWlRZjBoQVNJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUFzaEZDQU1JQkJxL1FBQ0FDRkNJQWNnRUdyOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FDQVFhdjBBQWdBaVF3Si9JRUg5SVFBaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTC9SRWdGUDBjQVFKL0lENGdQdjBOQ0FrS0N3d05EZzhBQVFJREFBRUNBLzFmSWo3OUREdmZUNDJYYnZZL085OVBqWmR1OWovOThnRWlRZjBoQUNJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUF2OUhBSUNmeUJCL1NFQklnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEMvMGNBLzJ1QVNKQklELzl0Z0VnUWYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwNS9WTDlDd0lBQW44Z1FpQTkvYkVCL2ZvQklrSDlYeUpDL1F4cXZIU1RHQVRXUDJxOGRKTVlCTlkvL2ZJQklFRDlEQXdDSzRjVzJlWS9EQUlyaHhiWjVqLzk4Z0g5OEFFaVFQMGhBU0lGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXNoRkNBUElCQnEvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFJRU1DZnlCQS9TRUFJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDLzBSSUJUOUhBRUNmeUJCL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1EwSUNRb0xEQTBPRHdBQkFnTUFBUUlEL1Y4aVFQME1hcngwa3hnRTFqOXF2SFNUR0FUV1AvM3lBU0ErL1F3TUFpdUhGdG5tUHd3Q0s0Y1cyZVkvL2ZJQi9mQUJJajc5SVFBaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTC9Sd0NBbjhnUHYwaEFTSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBdjlIQVA5c1FFaVBpQS8vYllCSUQ3OURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOU9mMVMvUXNDQUFKL0lFTDlEQ2N4Q0t3Y1d2dy9KekVJckJ4YS9ELzk4Z0VpUHYwaEFTSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBc2hGQ0FPSUJCcS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUlFTUNmeUErL1NFQUlnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEMvMFJJQlQ5SEFFQ2Z5QkEvUXduTVFpc0hGcjhQeWN4Q0t3Y1d2dy8vZklCSWo3OUlRQWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0wvUndDQW44Z1B2MGhBU0lGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXY5SEFQOXJnRWlQaUEvL2JZQklENzlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlPZjFTL1FzQ0FDQVRRUVJxSWhNZ0NrY05BQXNnQ2lBWFJnMEVJQWtnREdvaERDQUFJQWxxSVFBZ0NTQVBhZ3dEQ3lBSEVCQWdEeEFRSUE0UUVBd0ZDeUFZUWJrRE5nSUVJQmhCdUFvMkFnQkI2TVFCUWNJK0lCZ1FGZ3dFQ3lBSElRSWdEaUVCSUFnaEN5QVBDeUVJQTBBZ0RDZ0NBQ0VUSUFJQ2Z5QUxLQUlBSUJGcnNyc2lCVVE3MzArTmwyNzJQNklpQnBsRUFBQUFBQUFBNEVGakJFQWdCcW9NQVF0QmdJQ0FnSGdMSUFBb0FnQWlDV29pRUNBWklCQWdHVWdiUVFBZ0VFRUFUaHMyQWdBZ0NDQUpBbjhnRXlBUmE3SzdJZ1pFYXJ4MGt4Z0UxaitpSUFWRURBSXJoeGJaNWoraW9DSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBdHJJaEFnR1NBUUlCbElHMEVBSUJCQkFFNGJOZ0lBSUFFQ2Z5QUdSQ2N4Q0t3Y1d2dy9vaUlGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXNnQ1dvaUNTQVpJQWtnR1VnYlFRQWdDVUVBVGhzMkFnQWdBVUVFYWlFQklBaEJCR29oQ0NBQ1FRUnFJUUlnQzBFRWFpRUxJQXhCQkdvaERDQUFRUVJxSVFBZ0NrRUJhaUlLSUJkSERRQUxDeUFOS0FJWUtBSXNFQkFnRFNnQ0dDSUFJQWMyQWl3Z0FDZ0NZQkFRSUEwb0FoZ2lBQ0FQTmdKZ0lBQW9BcFFCRUJBZ0RTZ0NHQ0FPTmdLVUFTQU5RUUUyQWhSQkFDRVpEQUVMSUE4UUVDQVhFQkFnQ1JBUUN5QVlLQUlnSVFBQ1FDQUREUUFnSVVVTkFDQUFLQUlZSVE1QkFDRVRBMEFnRGlBVFFUUnNhaUlES0FJWUlnSkJDRWNFUUFKQUlBSkJCMDBFUUNBREtBSU1JQU1vQWdoc0lRRWdBeWdDTENFS0lBTW9BaUFFUUNBQlJRMENRUUVnQWtFQmEzU3RJVVZCQUNFSElBRkJCRThFUUNBQlFYeHhJUWNnUmYwU0lUOUJBQ0VNQTBBZ0NpQU1RUUowYWlJQ0lBTDlBQUlBSWozOXh3RkJCLzNMQVNJKy9SMEFJRC85SFFBaVJuLzlFaUErL1IwQklELzlIUUVpUjMvOUhnRWdQU0EvL1EwSUNRb0xEQTBPRHdBQkFnTUFBUUlEL2NjQlFRZjl5d0VpUGYwZEFDQkdmLzBTSUQzOUhRRWdSMy85SGdIOURRQUJBZ01JQ1FvTEVCRVNFeGdaR2h2OUN3SUFJQXhCQkdvaURDQUhSdzBBQ3lBQklBZEdEUU1MQTBBZ0NpQUhRUUowYWlJQ0lBSTBBZ0JDQjRZZ1JYOCtBZ0FnQjBFQmFpSUhJQUZIRFFBTERBSUxJQUZGRFFGQmZ5QUNkRUYvYzYwaFJVRUFJUWNnQVVFRVR3UkFJQUZCZkhFaEJ5QkYvUkloUDBFQUlRd0RRQ0FLSUF4QkFuUnFJZ0lnQXYwQUFnQWlQZjNKQWYwTS93QUFBQUFBQUFEL0FBQUFBQUFBQVAzVkFTSSsvUjBBSUQvOUhRQWlSb0Q5RWlBKy9SMEJJRC85SFFFaVI0RDlIZ0VnUFNBLy9RMElDUW9MREEwT0R3QUJBZ01BQVFJRC9ja0IvUXovQUFBQUFBQUFBUDhBQUFBQUFBQUEvZFVCSWozOUhRQWdSb0Q5RWlBOS9SMEJJRWVBL1I0Qi9RMEFBUUlEQ0FrS0N4QVJFaE1ZR1JvYi9Rc0NBQ0FNUVFScUlnd2dCMGNOQUFzZ0FTQUhSZzBDQ3dOQUlBb2dCMEVDZEdvaUFpQUNOUUlBUXY4QmZpQkZnRDRDQUNBSFFRRnFJZ2NnQVVjTkFBc01BUXNnQWtFSWF5RUtJQU1vQWd3Z0F5Z0NDR3doQVNBREtBSXNJUWdnQXlnQ0lBUkFJQUZGRFFGQkFDRUhJQUZCQkU4RVFDQUJRWHh4SVFkQkFDRUNBMEFnQ0NBQ1FRSjBhaUlMSUF2OUFBSUFJQXI5ckFIOUN3SUFJQUpCQkdvaUFpQUhSdzBBQ3lBQklBZEdEUUlMQTBBZ0NDQUhRUUowYWlJQ0lBSW9BZ0FnQ25VMkFnQWdCMEVCYWlJSElBRkhEUUFMREFFTElBRkZEUUJCQUNFSElBRkJCRThFUUNBQlFYeHhJUWRCQUNFQ0EwQWdDQ0FDUVFKMGFpSUxJQXY5QUFJQUlBcjlyUUg5Q3dJQUlBSkJCR29pQWlBSFJ3MEFDeUFCSUFkR0RRRUxBMEFnQ0NBSFFRSjBhaUlDSUFJb0FnQWdDblkyQWdBZ0IwRUJhaUlISUFGSERRQUxDeUFEUVFnMkFoZ0xJQk5CQVdvaUV5QWhSdzBBQ3dzZ0FDZ0NEQ0FBS0FJSWJDRUJBa0FnR1VVRVFDQUFLQUlVUVFKR0JFQWdBQ2dDRUVFQlJnUkFJQUFvQWhnb0Fpd2dBUkFPREFNTElBUkZEUUlnQUNnQ0dDSUFLQUlzSUFBb0FtQWdBUkFJREFJTElBQW9BaGdpQUNnQ0xDQUFLQUpnSUFBb0FwUUJJQUVRQnd3QkN3SkFBa0FDUUNBaFFRRnJEZ1FBQXdFQ0F3c2dBQ2dDR0NnQ0xDQUJFQVlNQWdzZ0FDZ0NHQ0lBS0FJc0lBQW9BbUFnQUNnQ2xBRWdBUkFGREFFTElBQW9BaGdpQUNnQ0xDQUFLQUpnSUFBb0FwUUJJQUFvQXNnQklBRVFCQXNnR0NnQ0lCQWhRUUFoREFzZ0dFSGd3QUJxSkFBZ0RBc0lBRUVJSUFBUUpRdXJBZ0lDZmdKL1FuOGhBeUFBTFFCRVFRaHhSUVJBSUFBZ0FDZ0NJQ0lHTmdJa0FrQUNRQUpBSUFBZ0FDZ0NNQ0lGQkg4RFFDQUdJQVVnQUNnQ0FDQUFLQUlVRVFBQUlnVkJmMFlOQWlBQUlBQW9BaVFnQldvaUJqWUNKQ0FBSUFBb0FqQWdCV3NpQlRZQ01DQUZEUUFMSUFBb0FpQUZJQVlMTmdJa0lBRkNBRlVOQVVJQUlRTU1BZ3NnQUNBQUtBSkVRUWh5TmdKRUlBSkJCRUdCOVFCQkFCQVBJQUJCQURZQ01DQUFJQUFvQWtSQkNISTJBa1JDZnc4TFFnQWhBd05BSUFFZ0FDZ0NBQ0FBS0FJWUVRc0FJZ1JDZjFFRVFDQUNRUVJCOHZRQVFRQVFEeUFBSUFBb0FrUkJDSEkyQWtRZ0FDQUFLUU00SUFOOE53TTRRbjhnQXlBRFVCc1BDeUFESUFSOElRTWdBU0FFZlNJQlFnQlZEUUFMQ3lBQUlBQXBBemdnQTN3M0F6Z0xJQU1MSXdFQmZ5QUJJQUVvQWdBZ0FTZ0NDQ0lCSUFDbklnSWdBU0FDU1J0cU5nSUVRUUVMUEFJQ2Z3RitJQUVvQWdBZ0FTZ0NDR29pQXlBQktBSUVJZ0pHQkVCQ2Z3OExJQUVnQWlBQXAybzJBZ1FnQXlBQ2E2d2lCQ0FBSUFBZ0JGVWJDNWdEQWdKK0FuOGdBQ2dDTUNJRklBR25JZ1pQQkVBZ0FDQUZJQVpyTmdJd0lBQWdBQ2dDSkNBR2FqWUNKQ0FBSUFBcEF6Z2dBWHczQXpnZ0FROExJQUF0QUVSQkJIRUVRQ0FBUVFBMkFqQWdBQ0FBS0FJa0lBVnFOZ0lrSUFBZ0JhMGlBU0FBS1FNNGZEY0RPQ0FCUW44Z0JSc1BDd0pBSUFWRkJFQU1BUXNnQUVFQU5nSXdJQUFnQUNnQ0lEWUNKQ0FCSUFXdElnTjlJUUVMSUFGQ0FGVUVRQU5BSUFBcEF3Z2dBQ2tET0NBQklBTjhmRlFFUUNBQ1FRUkJtL1VBUVFBUUR5QUFRUUEyQWpBZ0FDQUFLQUlnTmdJa0lBQWdBQ2tET0NBRGZDSUROd000SUFBcEF3Z2lBU0FEZlNFRUlBRWdBQ2dDQUNBQUtBSWNFUW9BSVFVZ0FDZ0NSQ0VDSUFBZ0JRUi9JQUFnQVRjRE9DQUNRWHR4QlNBQ0MwRUVjallDUkVKL0lBUWdBU0FEVVJzUEN5QUJJQUFvQWdBZ0FDZ0NHQkVMQUNJRVFuOVJCRUFnQWtFRVFadjFBRUVBRUE4Z0FDQUFLQUpFUVFSeU5nSkVJQUFnQUNrRE9DQURmRGNET0VKL0lBTWdBMUFiRHdzZ0F5QUVmQ0VESUFFZ0JIMGlBVUlBVlEwQUN3c2dBQ0FBS1FNNElBTjhOd000SUFNTG13RUJCWDlCQVNBQ0tBSUlJZ2NnQjBFQlRSc2hCQ0FDS0FJRUlnTWdBaWdDQUdzaEJnTkFJQVFpQlVFQmRDRUVJQVVnQm1zZ0FVa05BQXNnQlNBSFJ3UkFJQVVRRkNJRFJRUkFRWDhQQ3lBQ0tBSUFJZ1FFUUNBRElBUWdCaEFTR2lBQ0tBSUFFQkFMSUFJZ0JUWUNDQ0FDSUFNMkFnQWdBaUFESUFacUlnTTJBZ1FMSUFNZ0FDQUJFQklhSUFJZ0FpZ0NCQ0FCYWpZQ0JDQUJDMFlCQW44Z0FpZ0NBQ0FDS0FJSWFpSUVJQUlvQWdRaUEwWUVRRUYvRHdzZ0FDQURJQVFnQTJzaUFDQUJJQUFnQVVrYklnQVFFaG9nQWlBQ0tBSUVJQUJxTmdJRUlBQUxxZ0lCQkg4akFFRVFheUlFSkFBQ1FDQUFLQUowRFFBZ0FrRUJUUVJBSUFOQkFVSDd3Z0JCQUJBUERBRUxJQUVnQkVFTWFrRUNFQkVnQkNnQ0RDSUdRZi8vQTNFaUIwVUVRQ0FEUVFGQm5NTUFRUUFRRHd3QkN5QUNJQWRCQm14QkFtcEpCRUFnQTBFQlFmdkNBRUVBRUE4TUFRc2dCa0VHYkJBVUlnTkZEUUFnQUVFSUVCUWlBallDZENBQ1JRUkFJQU1RRUF3QkN5QUNJQU0yQWdBZ0FpQUVMd0VNSWdJN0FRUWdBa1VFUUVFQklRVU1BUXRCQUNFQ0EwQWdBVUVDYWlBRVFReHFJZ1ZCQWhBUklBTWdBa0VHYkdvaUJpQUVLQUlNT3dFQUlBRkJCR29nQlVFQ0VCRWdCaUFFS0FJTU93RUNJQUZCQm1vaUFTQUZRUUlRRVNBR0lBUW9BZ3c3QVFSQkFTRUZJQUpCQVdvaUFpQUFLQUowTHdFRVNRMEFDd3NnQkVFUWFpUUFJQVVMOEFFQkJYOGpBRUVRYXlJRUpBQUNmeUFBS0FKNElnVkZCRUFnQTBFQlFjM0NBRUVBRUE5QkFBd0JDeUFGS0FJTUJFQWdBMEVCUWR2VkFFRUFFQTlCQUF3QkN5QUNJQVV0QUJJaUJVRUNkQ0lHU1FSQUlBTkJBVUdzd2dCQkFCQVBRUUFNQVF0QkFDQUdFQlFpQWtVTkFCb2dCUVJBUVFBaEF3TkFJQUVnQkVFTWFpSUhRUUlRRVNBQ0lBTkJBblJxSWdZZ0JDZ0NERHNCQUNBQlFRSnFJQWRCQVJBUklBWWdCQ2dDRERvQUFpQUJRUU5xSUFkQkFSQVJJQVlnQkNnQ0REb0FBeUFCUVFScUlRRWdBMEVCYWlJRElBVkhEUUFMQ3lBQUtBSjRJQUkyQWd4QkFRc2hDQ0FFUVJCcUpBQWdDQXZ3QXdFSmZ5TUFRUkJySWdVa0FBSkFJQUpCQTBrTkFDQUFLQUo0RFFBZ0FTQUZRUXhxUVFJUUVTQUZMd0VNSWdsQmdRaHJRZjkzVFFSQUlBVWdDVFlDQUNBRFFRRkJ0Qm9nQlJBUERBRUxJQUZCQW1vZ0JVRU1ha0VCRUJFZ0JTOEJEQ0lJUlFSQUlBTkJBVUhVRjBFQUVBOE1BUXNnQ0VFRGFpQUNTdzBBSUFnZ0NXeEJBblFRRkNJSFJRMEFJQWdRRkNJS1JRUkFJQWNRRUF3QkN5QUlFQlFpQzBVRVFDQUhFQkFnQ2hBUURBRUxRUlFRRkNJR1JRUkFJQWNRRUNBS0VCQWdDeEFRREFFTElBRkJBMm9oQXlBR0lBbzJBZ2dnQmlBTE5nSUVJQVlnQ1RzQkVDQUdJQWMyQWdBZ0JTZ0NEQ0VNSUFaQkFEWUNEQ0FHSUF3NkFCSWdBQ0FHTmdKNEEwQWdBeUFGUVF4cVFRRVFFU0FFSUFwcUlBVXRBQXhCL3dCeFFRRnFPZ0FBSUFRZ0Myb2dCU2dDREVHQUFYRkJCM1k2QUFBZ0EwRUJhaUVESUFSQkFXb2lCQ0FJUncwQUN5QUpSUVJBUVFFaEJBd0JDMEVBSVFZRFFFRUFJUVJCQUNFQUEwQWdBa0VFSUFRZ0Ntb3RBQUJCQjJwQkEzWWlCQ0FFUVFSUEd5SUVJQU1nQVd0cVNBUkFRUUFoQkF3REN5QURJQVZCREdvZ0JCQVJJQWNnQlNnQ0REWUNBQ0FIUVFScUlRY2dBeUFFYWlFRElBQkJBV29pQUVILy93TnhJZ1FnQ0VrTkFBdEJBU0VFSUFaQkFXb2lCa0gvL3dOeElBbEpEUUFMQ3lBRlFSQnFKQUFnQkF1WUFRRUNmeU1BUVJCcklnVWtBQ0FBS0FJWUlnUkIvd0ZIQkVBZ0JTQUVOZ0lBSUFOQkFrSGtFeUFGRUE4TEFrQUNRQ0FDSUFBb0FoUkdCRUFnQWcwQlFRRWhCQXdDQzBFQUlRUWdBMEVCUWJ2c0FFRUFFQThNQVF0QkFDRUNBMEJCQVNFRUlBRWdBQ2dDU0NBQ1FReHNha0VJYWtFQkVCRWdBVUVCYWlFQklBSkJBV29pQWlBQUtBSVVTUTBBQ3dzZ0JVRVFhaVFBSUFRTGpnWUJCbjhqQUVIUUFHc2lCQ1FBQWtBZ0FrRUNUUVJBSUFOQkFVR2I3QUJCQUJBUERBRUxJQUF0QUh3RVFDQURRUVJCN3RJQVFRQVFEMEVCSVFZTUFRdEJBU0VHSUFFZ0FFRW9ha0VCRUJFZ0FVRUJhaUFBUVRScVFRRVFFU0FCUVFKcUlBQkJMR3BCQVJBUklBRkJBMm9oQlFKQUFrQUNRQUpBQWtBZ0FDZ0NLQ0lIUVFGckRnSUFBUUlMSUFKQkJrMEVRQ0FFSUFJMkFoQWdBMEVCUWNEeEFDQUVRUkJxRUE5QkFDRUdEQVVMQWtBZ0FrRUhSZzBBSUFBb0FqQkJEa1lOQUNBRUlBSTJBakFnQTBFQ1FjRHhBQ0FFUVRCcUVBOExJQVVnQUVFd2FrRUVFQkVnQUNnQ01FRU9SdzBEUVNRUUZDSUZSUVJBUVFBaEJpQURRUUZCc3p4QkFCQVBEQVVMSUFWQkRqWUNBQ0FFUVFBMkFrQWdCRUVBTmdJNElBUkJBRFlDU0NBRVFRQTJBandnQkVFQU5nSkVJQVJCQURZQ1RFR3c2cEFDSVFZZ0JFR3c2cEFDTmdJMElBVkJnSXlWb2dRMkFnUUNmeUFDUVFkSEJFQWdBa0VqUmdSQUlBRkJCMm9nQkVITUFHcEJCQkFSSUFGQkMyb2dCRUhJQUdwQkJCQVJJQUZCRDJvZ0JFSEVBR3BCQkJBUklBRkJFMm9nQkVGQWEwRUVFQkVnQVVFWGFpQUVRVHhxUVFRUUVTQUJRUnRxSUFSQk9HcEJCQkFSSUFGQkgyb2dCRUUwYWtFRUVCRWdCVUVBTmdJRUlBUW9BalFoQmlBRUtBSTRJUUlnQkNnQ1FDRURJQVFvQWp3aEJ5QUVLQUpFSVFnZ0JDZ0NUQ0VKSUFRb0FrZ01BZ3NnQkNBQ05nSWdJQU5CQWtIazhRQWdCRUVnYWhBUEMwRUFJUUpCQUNFRFFRQWhCMEVBQ3lFQklBVWdCellDR0NBRklBZzJBaEFnQlNBSk5nSUlJQVVnQmpZQ0lDQUZJQUkyQWh3Z0JTQUROZ0lVSUFVZ0FUWUNEQ0FBUVFBMkFuQWdBQ0FGTmdKc0RBTUxJQUFnQWtFRGF5SUJOZ0p3SUFCQkFTQUJFQk1pQXpZQ2JDQURSUTBCSUFKQkEwd05Ba0VBSVFJRFFDQUZJQVJCekFCcVFRRVFFU0FBS0FKc0lBSnFJQVFvQWt3NkFBQWdCVUVCYWlFRklBSkJBV29pQWlBQlJ3MEFDd3dDQ3lBSFFRTkpEUUlnQkNBSE5nSUFJQU5CQkVIYjl3QWdCQkFQREFJTFFRQWhCaUFBUVFBMkFuQU1BUXRCQVNFR0lBQkJBVG9BZkFzZ0JFSFFBR29rQUNBR0M3UURBUU4vSXdCQklHc2lCQ1FBQWtBZ0FDZ0NTQVJBSUFOQkFrR05OVUVBRUE5QkFTRUNEQUVMSUFKQkRrY0VRRUVBSVFJZ0EwRUJRZnJyQUVFQUVBOE1BUXNnQVNBQVFSQnFRUVFRRVNBQlFRUnFJQUJCREdwQkJCQVJJQUZCQ0dvZ0FFRVVha0VDRUJFZ0FDZ0NEQ0VGQWtBZ0JBSi9JQUFvQWhBaUJrVUVRQ0FBS0FJVURBRUxJQUFvQWhRaUFpQUZSUTBBR2lBQ0RRRkJBQXMyQWdnZ0JDQUdOZ0lFSUFRZ0JUWUNBQ0FEUVFGQjN1b0FJQVFRRDBFQUlRSU1BUXNnQWtHQmdBRnJRZi8vZmswRVFFRUFJUUlnQTBFQlFZanFBRUVBRUE4TUFRc2dBQ0FDUVF3UUV5SUNOZ0pJSUFKRkJFQkJBQ0VDSUFOQkFVR3Q2Z0JCQUJBUERBRUxRUUVoQWlBQlFRcHFJQUJCR0dwQkFSQVJJQUZCQzJvZ0FFRWNha0VCRUJFZ0FDZ0NIQ0lGUVFkSEJFQWdCQ0FGTmdJUUlBTkJCRUdkK2dBZ0JFRVFhaEFQQ3lBQlFReHFJQUJCSUdwQkFSQVJJQUZCRFdvZ0FFRWtha0VCRUJFZ0FDZ0NBQ0lCSUFFdEFMd0JRZnNCY1NBQUtBSVlRZjhCUmtFQ2RISTZBTHdCSUFBb0FnQWlBU0FBS0FJTU5nTFlBU0FCSUFBb0FoQTJBdHdCSUFCQkFUb0FoUUVMSUFSQklHb2tBQ0FDQzdvRUFRWi9Jd0JCRUdzaUJpUUFBbjhnQUMwQVpFRUNjVVVFUUNBRFFRRkJrZFFBUVFBUUQwRUFEQUVMSUFCQkFEWUNhQUpBQWtBQ1FDQUNCRUFEUUNBQ1FRZE5CRUFnQTBFQlFia1pRUUFRRHd3RkN5QUJJQVpCREdvaUJVRUVFQkVnQmlnQ0RDRUVJQUZCQkdvZ0JVRUVFQkZCQ0NFSElBWW9BZ3doQlFKQUFrQUNRQUpBSUFRT0FnRUFBd3NnQWtFUVNRUkFRZUVaSVFRTUJ3c2dBVUVJYWlBR1FRaHFRUVFRRVNBR0tBSUlCRUJCeWo4aEJBd0hDeUFCUVF4cUlBWkJER3BCQkJBUklBWW9BZ3dpQkEwQlFiSVlJUVFNQmdzZ0EwRUJRYklZUVFBUUR3d0dDMEVRSVFjTElBUWdCMGtFUUNBRFFRRkJoY1VBUVFBUUR3d0ZDeUFDSUFSSkJFQWdBMEVCUWIzRUFFRUFFQTlCQUF3R0N3SkFBa0FnQUNBQklBZHFJQVFnQjJzZ0F3Si9Ba0FDUUFKQUlBVkI4ZGk5bXdaTUJFQWdCVUhqeHNHVEJrWU5BU0FGUWViS2tac0dSZzBESUFWQjhNSzFtd1pIRFFWQjRNQUJEQVFMSUFWQjh0aU5nd2RHRFFGQndNQUJJQVZCOHNpaHl3WkdEUU1hSUFWQjh0aTltd1pIRFFSQnlNQUJEQU1MUWREQUFRd0NDMEhZd0FFTUFRdEI2TUFCQ3lnQ0JCRUJBQTBCUVFBTUJ3c2dBQ0FBS0FKb1FmLy8vLzhIY2pZQ2FBdEJBU0FJSUFWQjhzaWh5d1pHR3lFSUlBRWdCR29oQVNBQ0lBUnJJZ0lOQUFzZ0NBMEJDeUFEUVFGQjJjTUFRUUFRRDBFQURBTUxJQUJCQVRvQWhBRWdBQ0FBS0FKa1FRUnlOZ0prUVFFTUFnc2dBMEVCSUFSQkFCQVBDeUFEUVFGQm5nNUJBQkFQUVFBTElRa2dCa0VRYWlRQUlBa0w0Z0VCQVg4Z0FDZ0NaRUVCUndSQUlBTkJBVUcrMUFCQkFCQVBRUUFQQ3dKQUlBSkJCMDBFUUF3QkN5QUJJQUJCT0dwQkJCQVJJQUZCQkdvZ0FFRThha0VFRUJFZ0FrRURjUVJBREFFTElBQWdBa0VJYXlJQ1FRSjJJZ1EyQWtBQ1FDQUNSUTBBSUFBZ0JFRUVFQk1pQWpZQ1JDQUNSUVJBSUFOQkFVR3BFRUVBRUE5QkFBOExJQUFvQWtCRkRRQWdBVUVJYWlFRFFRQWhBZ05BSUFNZ0FDZ0NSQ0FDUVFKMGFrRUVFQkVnQTBFRWFpRURJQUpCQVdvaUFpQUFLQUpBU1EwQUN3c2dBQ0FBS0FKa1FRSnlOZ0prUVFFUEN5QURRUUZCcWkxQkFCQVBRUUFMeEFFQkFuOGdBQ0FBS0FJZ0lnUTJBaVFDUUNBQUtBSXdJZ01FUUFOQUlBUWdBeUFBS0FJQUlBQW9BaFFSQUFBaUEwRi9SZzBDSUFBZ0FDZ0NKQ0FEYWlJRU5nSWtJQUFnQUNnQ01DQURheUlETmdJd0lBTU5BQXNnQUNnQ0lDRUVDeUFBUVFBMkFqQWdBQ0FFTmdJa0lBRWdBQ2dDQUNBQUtBSWNFUW9BUlFSQUlBQWdBQ2dDUkVFSWNqWUNSRUVBRHdzZ0FDQUJOd000UVFFUEN5QUFJQUFvQWtSQkNISTJBa1FnQWtFRVFZSDFBRUVBRUE4Z0FDQUFLQUpFUVFoeU5nSkVRUUFMZ2dFQkFuOGpBRUVRYXlJRUpBQUNmeUFBS0FKa0JFQWdBMEVCUWR2VEFFRUFFQTlCQUF3QkN5QUNRUVJIQkVBZ0EwRUJRYzR0UVFBUUQwRUFEQUVMSUFFZ0JFRU1ha0VFRUJFZ0JDZ0NERUdLanFyb0FFY0VRQ0FEUVFGQjlpVkJBQkFQUVFBTUFRc2dBQ0FBS0FKa1FRRnlOZ0prUVFFTElRVWdCRUVRYWlRQUlBVUxEUUFnQUNnQ0FDQUJJQUlRUlFzSkFDQUFLQUlBRUVvTENRQWdBQ2dDQUJCSkN3MEFJQUFvQWdBZ0FTQUNFRXdMUVFFQmZ5QUNCSDhnQTBFQ1FkdkxBRUVBRUE4Z0FDZ0NBQ0FCSUFJZ0F5QUVFRVpGQkVBZ0EwRUJRYWt2UVFBUUQwRUFEd3NnQUNBQ0lBTVFjUVZCQUFzTEZRQWdBQ2dDQUNBQklBSWdBeUFFSUFVZ0JoQk9DdzhBSUFBb0FnQWdBU0FDSUFNUVR3c1RBQ0FBS0FJQUlBRWdBaUFESUFRZ0JSQXJDeDBBSUFBb0FnQWdBU0FDSUFNZ0JDQUZJQVlnQnlBSUlBa2dDaEFuQytvRUFRZC9Ba0FnQVNnQ0NFRTFJQU1RSkVVTkFDQUJLQUlFSWdjb0FnQWhCU0FIS0FJSUlRUUNRQ0FGQkVCQkFTRUdJQVZCQVVjRVFDQUZRWDV4SVFvRFFBSi9RUUFnQmtVTkFCcEJBQ0FCSUFBZ0F5QUVLQUlBRVFBQVJRMEFHaUFCSUFBZ0F5QUVLQUlFRVFBQVFRQkhDeUVHSUFSQkNHb2hCQ0FKUVFKcUlna2dDa2NOQUFzTEFrQWdCVUVCY1FSQUlBWkZEUUVnQVNBQUlBTWdCQ2dDQUJFQUFFRUFSeUVHQ3lBSFFRQTJBZ0FnQmtVTkF3d0NDeUFIUVFBMkFnQkJBQThMSUFkQkFEWUNBQXNnQVNnQ0NDSUhLQUlBSVFVZ0J5Z0NDQ0VFQWtBQ1FBSi9Ba0FnQlFSQVFRRWhCaUFGUVFGeElRZ2dCVUVCUncwQlFRQU1BZ3NnQjBFQU5nSUFEQUlMSUFWQmZuRWhCVUVBSVFrRFFBSi9RUUFnQmtVTkFCcEJBQ0FCSUFBZ0F5QUVLQUlBRVFBQVJRMEFHaUFCSUFBZ0F5QUVLQUlFRVFBQVFRQkhDeUVHSUFSQkNHb2hCQ0FKUVFKcUlna2dCVWNOQUFzZ0JrVUxJUVVnQ0FSQUlBVU5BaUFCSUFBZ0F5QUVLQUlBRVFBQVFRQkhJUVlMSUFkQkFEWUNBRUVBSVFnZ0JrVU5BZ3NnQVMwQWhBRkZCRUFnQTBFQlFiM1dBRUVBRUE5QkFBOExJQUV0QUlVQlJRUkFJQU5CQVVHZzFnQkJBQkFQUVFBUEN5QUFJQUVvQWdBZ0FpQURFRkFoQ0NBQ1JRMEJJQUlvQWdBaUFFVU5BVUVCSVFRQ1FBSkFBa0FDUUFKQUFrQWdBU2dDTUVFTWF3NE5Bd1FFQkFVQUFRUUVCQVFFQWdRTFFRSWhCQXdFQzBFRElRUU1Bd3RCQkNFRURBSUxRUVVoQkF3QkMwRi9JUVFMSUFBZ0JEWUNGQ0FCS0FKc0lnTkZEUUVnQUNBRE5nSWNJQUlvQWdBZ0FTZ0NjRFlDSUNBQlFRQTJBbXdnQ0E4TElBZEJBRFlDQUVFQUlRZ0xJQWdMNUFrQ0NuOEJmaU1BUWZBQWF5SURKQUJCZ0FnaENBSi9Ba0JCQVVHQUNCQVRJZ1lFUUNBRFFkd0FhaUVMSUFOQjdBQnFJUWtEUUFKQUFrQUNRQ0FCSUFOQjZBQnFJZ1JCQ0NBQ0VCcEJDRWNOQUNBRUlBTkIyQUJxUVFRUUVTQUpJQXRCQkJBUlFRZ2hCUUpBQWtBQ1FBSkFBa0FnQXlnQ1dBNENBQUVFQ3lBQktRTUlJZzFRQkg1Q0FBVWdEU0FCS1FNNGZRc2lEVUw0Ly8vL0QxTU5BU0FDUVFGQnlqOUJBQkFQREFRTElBRWdBMEhvQUdvaUJFRUlJQUlRR2tFSVJ3MERJQVFnQTBIa0FHcEJCQkFSSUFNb0FtUkZEUUVnQWtFQlFjby9RUUFRRHd3REN5QURJQTJuUVFocU5nSllEQUVMSUFrZ0EwSFlBR3BCQkJBUlFSQWhCUXNnQXlnQ1hDSUVRZVBrd05NR1JnUkFJQUFvQW1RaUFVRUVjUVJBSUFBZ0FVRUljallDWkF3Q0N5QUNRUUZCclN0QkFCQVBJQVlRRUVFQURBY0xJQU1vQWxnaUIwVUVRQ0FDUVFGQnNoaEJBQkFQSUFZUUVFRUFEQWNMSUFVZ0Iwc0VRQ0FESUFRMkFnUWdBeUFITmdJQUlBSkJBVUg2NXdBZ0F4QVBEQVlMQWtBQ2Z3Si9Ba0FDZndKQUFrQUNRQUpBQWtBZ0JFSHgyTDJiQmt3RVFDQUVRZVBHd1pNR1JnMENJQVJCNXNxUm13WkdEUVFnQkVId3dyV2JCa2NOQVVIZ3dBRU1CZ3NnQkVHZndNRFNCa3dFUUNBRVFmTFl2WnNHUmcwRlFjREFBU0FFUWZMSW9jc0dSZzBHR2lBRVFmRHkwYk1HUncwQlFhakFBUXdJQ3lBRVFmTFlqWU1IUmcwQ0lBUkJvTURBMGdaR0RRWkJzTUFCSUFSQjZPVEEwd1pHRFFjYUN5QUFLQUprSWdSQkFYRU5DQ0FDUVFGQi9BNUJBQkFQSUFZUUVFRUFEQThMUWREQUFRd0RDMEhZd0FFTUFndEI2TUFCREFFTFFjakFBUXNoQ2lBRElBUkIvd0Z4TmdKTUlBTWdCRUVZZGpZQ1FDQURJQVJCQ0haQi93RnhOZ0pJSUFNZ0JFRVFka0gvQVhFMkFrUWdBa0VDUWNrT0lBTkJRR3NRRHlBSElBVnJJZ1VnQUMwQVpFRUVjUTBDR2lBRElBTW9BbHdpQkVFWWRqWUNNQ0FESUFSQi93RnhOZ0k4SUFNZ0JFRVFka0gvQVhFMkFqUWdBeUFFUVFoMlFmOEJjVFlDT0NBQ1FRSkIyak1nQTBFd2FoQVBJQUFnQUNnQ1pFSC8vLy8vQjNJMkFtUWdBU0FGclNJTklBSWdBU2dDS0JFSUFDQU5VUTBISUFKQkFVR1NIRUVBRUE4Z0JoQVFRUUFNQ2d0Qm9NQUJDeUVLSUFjZ0JXc0xJUVVnQVNrRENDSU5VQVIrUWdBRklBMGdBU2tET0gwTElBV3RVd1JBSUFNb0FsZ2hCQ0FES0FKY0lRQWdBeUFCS1FNSUlnMVFCSDVDQUFVZ0RTQUJLUU00ZlFzK0FpZ2dBeUFGTmdJa0lBTWdBRUgvQVhFMkFpQWdBeUFBUVJoMk5nSVVJQU1nQkRZQ0VDQURJQUJCQ0haQi93RnhOZ0ljSUFNZ0FFRVFka0gvQVhFMkFoZ2dBa0VCUWMzMUFDQURRUkJxRUE4TUJ3c2dCU0FJVFFSQUlBWWhCQXdFQ3lBRklRZ2dCaUFGRUJjaUJBMERJQVlRRUNBQ1FRRkIvdzlCQUJBUFFRQU1Cd3NnQkVFQ2NVVUVRQ0FDUVFGQndnOUJBQkFQSUFZUUVFRUFEQWNMSUFBZ0JFSC8vLy8vQjNJMkFtUWdBU0FISUFWcnJTSU5JQUlnQVNnQ0tCRUlBQ0FOVVEwRElBQXRBR1JCQ0hGRkRRRWdBa0VDUVpJY1FRQVFEd3NnQmhBUVFRRU1CUXNnQWtFQlFaSWNRUUFRRHlBR0VCQkJBQXdFQ3lBQklBUWdCU0FDRUJvZ0JVY0VRQ0FDUVFGQnhCeEJBQkFQSUFRUUVFRUFEQVFMSUFBZ0JDSUdJQVVnQWlBS0tBSUVFUUVBRFFBTElBUVFFRUVBREFJTElBSkJBVUdpSlVFQUVBOUJBQXdCQ3lBR0VCQkJBQXNoRENBRFFmQUFhaVFBSUF3TDVnRUJCbjhnQUNnQ0NFRTFJQUlRSkFSQUFrQWdBQ2dDQ0NJR0tBSUFJUU1nQmlnQ0NDRUZBa0FDUUFKL0FrQWdBd1JBUVFFaEJDQURRUUZ4SVFjZ0EwRUJSdzBCUVFBTUFnc2dCa0VBTmdJQURBSUxJQU5CZm5FaEF3TkFBbjlCQUNBRVJRMEFHa0VBSUFBZ0FTQUNJQVVvQWdBUkFBQkZEUUFhSUFBZ0FTQUNJQVVvQWdRUkFBQkJBRWNMSVFRZ0JVRUlhaUVGSUFoQkFtb2lDQ0FEUncwQUN5QUVSUXNoQXlBSEJFQWdBdzBDSUFBZ0FTQUNJQVVvQWdBUkFBQkJBRWNoQkFzZ0JrRUFOZ0lBSUFSRkRRSUxJQUFvQWdBYVFRRVBDeUFHUVFBMkFnQUxDMEVBQ3dvQUlBQW9BZ0FhUVFBTEZBQWdBQ2dDQUNJQUJFQWdBQ0FCTmdLNEFRc0xJUUFnQUNnQ0FDQUJFRk1nQUVFQU9nQjhJQUFnQVNnQ3VFQkJBWEUyQW9BQkN6SUFJQUpGQkVCQkFBOExJQUFvQWdBZ0FTQUNJQU1RU0VVRVFDQURRUUZCcVM5QkFCQVBRUUFQQ3lBQUlBSWdBeEJ4QzJrQ0FuOEJmQ01BUVJCcklnTWtBQ0FDQkVBRFFDQUFJQU5CQ0dvUVJDQUJBbjhnQXlzRENDSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBczJBZ0FnQVVFRWFpRUJJQUJCQ0dvaEFDQUVRUUZxSWdRZ0FrY05BQXNMSUFOQkVHb2tBQXVFQVFJQ2Z3RjlJd0JCRUdzaUF5UUFJQUlFUUFOQUlBTWdBQzBBQURvQUR5QURJQUF0QUFFNkFBNGdBeUFBTFFBQ09nQU5JQU1nQUMwQUF6b0FEQ0FCQW44Z0F5b0NEQ0lGaTBNQUFBQlBYUVJBSUFXb0RBRUxRWUNBZ0lCNEN6WUNBQ0FCUVFScUlRRWdBRUVFYWlFQUlBUkJBV29pQkNBQ1J3MEFDd3NnQTBFUWFpUUFDMHNCQW44akFFRVFheUlESkFBZ0FnUkFBMEFnQUNBRFFReHFRUVFRRVNBQklBTW9BZ3cyQWdBZ0FVRUVhaUVCSUFCQkJHb2hBQ0FFUVFGcUlnUWdBa2NOQUFzTElBTkJFR29rQUF0TEFRSi9Jd0JCRUdzaUF5UUFJQUlFUUFOQUlBQWdBMEVNYWtFQ0VCRWdBU0FES0FJTU5nSUFJQUZCQkdvaEFTQUFRUUpxSVFBZ0JFRUJhaUlFSUFKSERRQUxDeUFEUVJCcUpBQUxTZ0VDZnlNQVFSQnJJZ01rQUNBQ0JFQURRQ0FBSUFOQkNHb1FSQ0FCSUFNckF3aTJPQUlBSUFGQkJHb2hBU0FBUVFocUlRQWdCRUVCYWlJRUlBSkhEUUFMQ3lBRFFSQnFKQUFMYUFFQ2Z5TUFRUkJySWdNa0FDQUNCRUFEUUNBRElBQXRBQUE2QUE4Z0F5QUFMUUFCT2dBT0lBTWdBQzBBQWpvQURTQURJQUF0QUFNNkFBd2dBU0FES2dJTU9BSUFJQUZCQkdvaEFTQUFRUVJxSVFBZ0JFRUJhaUlFSUFKSERRQUxDeUFEUVJCcUpBQUxUQUVDZnlNQVFSQnJJZ01rQUNBQ0JFQURRQ0FBSUFOQkRHcEJCQkFSSUFFZ0F5Z0NETE00QWdBZ0FVRUVhaUVCSUFCQkJHb2hBQ0FFUVFGcUlnUWdBa2NOQUFzTElBTkJFR29rQUF0TUFRSi9Jd0JCRUdzaUF5UUFJQUlFUUFOQUlBQWdBMEVNYWtFQ0VCRWdBU0FES0FJTXN6Z0NBQ0FCUVFScUlRRWdBRUVDYWlFQUlBUkJBV29pQkNBQ1J3MEFDd3NnQTBFUWFpUUFDNm9JQWcxL0FYc2pBRUVRYXlJSUpBQUNmeUFBS0FJSVFSQkdCRUFnQUNnQ25BRWdBQ2dDekFGQmpDeHNhZ3dCQ3lBQUtBSU1DeUVKQWtBZ0FrVUVRQ0FEUVFGQjhCOUJBQkFQREFFTElBQW9Ba2doQmtFQklRUWdBU0FJUVFocVFRRVFFU0FJS0FJSUlnVkJBazhFUUNBRFFRSkJ4c2dBUVFBUUR3d0JDeUFDSUFWQkFXcEhCRUJCQUNFRUlBTkJBa0h3SDBFQUVBOE1BUXNDUUNBR0tBSVFJZ05GRFFBZ0NTZ0MwQ3NoQkNBRFFRaFBCRUFnQTBGNGNTRUdRUUFoQWdOQUlBUkJBRFlDdkVNZ0JFRUFOZ0tFT3lBRVFRQTJBc3d5SUFSQkFEWUNsQ29nQkVFQU5nTGNJU0FFUVFBMkFxUVpJQVJCQURZQzdCQWdCRUVBTmdLMENDQUVRY0REQUdvaEJDQUNRUWhxSWdJZ0JrY05BQXNMSUFOQkIzRWlBMFVOQUVFQUlRSURRQ0FFUVFBMkFyUUlJQVJCdUFocUlRUWdBa0VCYWlJQ0lBTkhEUUFMQ3lBSktBTG9LeUlDQkg4Z0FoQVFJQWxCQURZQzZDc2dDQ2dDQ0FVZ0JRdEZCRUJCQVNFRURBRUxBMEFnQVVFQmFpSUJJQWhCREdwQkFSQVJBa0FnQ1NnQ2dDeEZEUUFnQ1NnQy9Dc2lBeWdDQUNBSUtBSU1SdzBBSUFNb0FnUWlCU0FBS0FKSUlnWW9BaEJIRFFBZ0F5Z0NDQ0lDQkVCQkFDRUVJQUlvQWhBZ0JTQUZiQ0lGSUFJb0FnQkJBblJCMEwwQmFpZ0NBR3hIRFFNZ0NTQUZRUUowRUJRaUJ6WUM2Q3NnQjBVTkF5QUNLQUlNSUFjZ0JTQUNLQUlBUVFKMFFZREFBV29vQWdBUkJRQUxJQU1vQWd3aUFrVU5BRUVBSVFRZ0FpZ0NFQ0FHS0FJUUlnTWdBaWdDQUVFQ2RFSFF2UUZxS0FJQWJFY05BaUFEUVFKMEVCUWlCVVVOQWlBQ0tBSU1JQVVnQXlBQ0tBSUFRUUowUVpEQUFXb29BZ0FSQlFBQ1FDQUdLQUlRSWdkRkRRQWdDU2dDMENzaEJFRUFJUXNDUUFKQUlBZEJCRWtOQUNBRVFiUUlhaUlNSUFVZ0IwRUNkR3BKQkVBZ0JTQUVJQWRCdUFoc2Fra05BUXNnQkVIY0lXb2hEU0FFUWFRWmFpRU9JQVJCN0JCcUlROGdCU0FIUVh4eElnWkJBblJxSVFJZ0JDQUdRYmdJYkdvaEJFRUFJUU1EUUNBTUlBTkJ1QWhzSWdwcUlBVWdBMEVDZEdyOUFBSUFJaEg5V2dJQUFDQUtJQTlxSUJIOVdnSUFBU0FLSUE1cUlCSDlXZ0lBQWlBS0lBMXFJQkg5V2dJQUF5QURRUVJxSWdNZ0JrY05BQXNnQmlBSFJnMENEQUVMSUFVaEFrRUFJUVlMSUFjZ0JpSURhMEVIY1NJS0JFQURRQ0FFSUFJb0FnQTJBclFJSUFOQkFXb2hBeUFFUWJnSWFpRUVJQUpCQkdvaEFpQUxRUUZxSWdzZ0NrY05BQXNMSUFZZ0IydEJlRXNOQUFOQUlBUWdBaWdDQURZQ3RBZ2dCQ0FDS0FJRU5nTHNFQ0FFSUFJb0FnZzJBcVFaSUFRZ0FpZ0NERFlDM0NFZ0JDQUNLQUlRTmdLVUtpQUVJQUlvQWhRMkFzd3lJQVFnQWlnQ0dEWUNoRHNnQkNBQ0tBSWNOZ0s4UXlBRVFjRERBR29oQkNBQ1FTQnFJUUlnQTBFSWFpSURJQWRIRFFBTEN5QUZFQkFMUVFFaEJDQVFRUUZxSWhBZ0NDZ0NDRWtOQUFzTElBaEJFR29rQUNBRUN3UUFRbjhMdndrQkMzOGpBRUVRYXlJRkpBQUNmeUFBS0FJSVFSQkdCRUFnQUNnQ25BRWdBQ2dDekFGQmpDeHNhZ3dCQ3lBQUtBSU1DeUVIQW44Z0FrRUJUUVJBSUFOQkFVSFlJMEVBRUE5QkFBd0JDeUFCSUFWQkRHcEJBaEFSSUFVb0Fnd0VRQ0FEUVFKQjhDeEJBQkFQUVFFTUFRc2dBa0VHVFFSQUlBTkJBVUhZSTBFQUVBOUJBQXdCQ3lBQlFRSnFJQVZCQ0dwQkFSQVJJQWNvQXZ3cklna2hBQUpBQWtBQ1FDQUhLQUtBTENJR1JRMEFJQVVvQWdnaENBTkFJQUFvQWdBZ0NFWU5BU0FBUVJScUlRQWdCRUVCYWlJRUlBWkhEUUFMREFFTElBUWdCa2NOQVFzZ0J5Z0NoQ3dnQmtZRWZ5QUhJQVpCQ21vaUFEWUNoQ3dnQ1NBQVFSUnNFQmNpQUVVRVFDQUhLQUw4S3hBUUlBZEJBRFlDaEN3Z0IwSUFOd0w4S3lBRFFRRkI4aU5CQUJBUFFRQU1Bd3NnQnlBQU5nTDhLeUFBSUFjb0FvQXNJZ1JCRkd4cVFRQWdCeWdDaEN3Z0JHdEJGR3dRRlJvZ0J5Z0MvQ3NoQ1NBSEtBS0FMQVVnQmd0QkZHd2dDV29oQUVFQklRc0xJQUFnQlNnQ0NEWUNBQ0FCUVFOcUlBVkJER3BCQWhBUklBVW9BZ3dFUUNBRFFRSkI4Q3hCQUJBUFFRRU1BUXNnQVVFRmFpQUZRUVJxUVFJUUVTQUZLQUlFSWdSQkFrOEVRQ0FEUVFKQnFCZEJBQkFQUVFFTUFRc2dBa0VIYXlFR0lBUUVRQ0FCUVFkcUlRSkJBQ0VKQTBBZ0JrRUNUUVJBSUFOQkFVSFlJMEVBRUE5QkFBd0RDeUFDSUFWQkRHcEJBUkFSSUFVb0FneEJBVWNFUUNBRFFRSkJzaXBCQUJBUFFRRU1Bd3NnQWtFQmFpQUZRUUlRRVNBQUlBVW9BZ0FpQkVILy93RnhJZ0UyQWdRZ0JrRURheUlJSUFSQkQzWkJBV29pQmlBQmJFRUNhaUlLU1FSQUlBTkJBVUhZSTBFQUVBOUJBQXdEQ3lBQ1FRTnFJUUpCQUNFRUlBRUVRQU5BSUFJZ0JVRU1haUFHRUJFZ0JDQUZLQUlNUndSQUlBTkJBa0hhTDBFQUVBOUJBUXdGQ3lBQ0lBWnFJUUlnQkVFQmFpSUVJQUFvQWdSSkRRQUxDeUFDSUFWQkFoQVJJQVVnQlNnQ0FDSUVRZi8vQVhFaUFUWUNBQ0FBS0FJRUlBRkhCRUFnQTBFQ1FkZ1lRUUFRRDBFQkRBTUxJQWdnQ21zaUNpQUVRUTkyUVFGcUlnWWdBV3hCQTJvaURFa0VRQ0FEUVFGQjJDTkJBQkFQUVFBTUF3c2dBa0VDYWlFQ1FRQWhCQ0FCQkVBRFFDQUNJQVZCREdvZ0JoQVJJQVFnQlNnQ0RFY0VRQ0FEUVFKQjJpOUJBQkFQUVFFTUJRc2dBaUFHYWlFQ0lBUkJBV29pQkNBQUtBSUVTUTBBQ3dzZ0FpQUZRUXhxUVFNUUVTQUZLQUlNSVFZZ0FFSUFOd0lJSUFBZ0JrR0FnQVJ4UlNBQUxRQVFRZjRCY1hJNkFCQWdCU0FHUWY4QmNTSUlOZ0lJQWtBZ0NFVU5BQ0FIS0FMMEt5SU5CRUFnQnlnQzhDc2hCRUVBSVFFRFFDQUlJQVFvQWdoR0JFQWdBQ0FFTmdJSURBTUxJQVJCRkdvaEJDQUJRUUZxSWdFZ0RVY05BQXNMSUFOQkFVSFlJMEVBRUE5QkFBd0RDeUFGSUFaQkNIWkIvd0Z4SWdZMkFnZ0NRQ0FHUlEwQUlBY29BdlFySWdnRVFDQUhLQUx3S3lFRVFRQWhBUU5BSUFZZ0JDZ0NDRVlFUUNBQUlBUTJBZ3dNQXdzZ0JFRVVhaUVFSUFGQkFXb2lBU0FJUncwQUN3c2dBMEVCUWRnalFRQVFEMEVBREFNTElBb2dER3NoQmlBQ1FRTnFJUUlnQ1VFQmFpSUpJQVVvQWdSSkRRQUxDeUFHQkVBZ0EwRUJRZGdqUVFBUUQwRUFEQUVMUVFFZ0MwVU5BQm9nQnlBSEtBS0FMRUVCYWpZQ2dDeEJBUXNoRGlBRlFSQnFKQUFnRGd2MUFRRUZmeU1BUVJCcklnUWtBQUpBSUFJZ0FDZ0NTQ2dDRUNJR1FRSnFSd1JBSUFOQkFVSHdJa0VBRUE4TUFRc2dBU0FFUVF4cVFRSVFFU0FHSUFRb0FneEhCRUFnQTBFQlFmQWlRUUFRRHd3QkN5QUdSUVJBUVFFaEJRd0JDeUFCUVFKcUlRSWdBQ2dDU0NnQ0dDRUFRUUFoQVFOQUlBSWdCRUVJYWtFQkVCRWdBQ0FFS0FJSUlnVkIvd0J4SWdkQkFXb2lDRFlDR0NBQUlBVkJCM1pCQVhFMkFpQWdCMEVmVHdSQUlBUWdDRFlDQkNBRUlBRTJBZ0FnQTBFQlFiZnpBQ0FFRUE5QkFDRUZEQUlMSUFCQk5Hb2hBRUVCSVFVZ0FrRUJhaUVDSUFGQkFXb2lBU0FHUncwQUN3c2dCRUVRYWlRQUlBVUxtQVVCQ244akFFRVFheUlISkFBQ2Z5QUFLQUlJUVJCR0JFQWdBQ2dDbkFFZ0FDZ0N6QUZCakN4c2Fnd0JDeUFBS0FJTUN5RUZBbjhnQWtFQlRRUkFJQU5CQVVIeEhrRUFFQTlCQUF3QkN5QUJJQWRCREdwQkFoQVJBa0FnQnlnQ0RBUkFJQU5CQWtHR0cwRUFFQThNQVFzZ0FrRUdUUVJBSUFOQkFVSHhIa0VBRUE5QkFBd0NDeUFCUVFKcUlBZEJER3BCQWhBUklBVW9BdkFySVFRZ0J5MEFEQ0VLQWtBQ1FBSkFJQVVvQXZRcklnWkZCRUFnQkNFQURBRUxJQVFoQUFOQUlBQW9BZ2dnQ2tZTkFTQUFRUlJxSVFBZ0NFRUJhaUlJSUFaSERRQUxEQUVMSUFZZ0NFY05BUXNnQlNnQytDc2dCa1lFUUNBRklBWkJDbW9pQURZQytDc2dCQ0FBUVJSc0VCY2hBQ0FGS0FMd0t5RUVJQUJGQkVBZ0JCQVFJQVZCQURZQytDc2dCVUlBTndMd0t5QURRUUZCaXg5QkFCQVBRUUFNQkFzQ1FDQUFJQVJHRFFBZ0JTZ0NnQ3dpQzBVTkFDQUZLQUw4S3lFTVFRQWhDQU5BSUF3Z0NFRVViR29pQmlnQ0NDSUpCRUFnQmlBQUlBa2dCR3RxTmdJSUN5QUdLQUlNSWdrRVFDQUdJQUFnQ1NBRWEybzJBZ3dMSUFoQkFXb2lDQ0FMUncwQUN3c2dCU0FBTmdMd0t5QUFJQVVvQXZRcklnUkJGR3hxUVFBZ0JTZ0MrQ3NnQkd0QkZHd1FGUm9nQlNnQzlDc2hCaUFGS0FMd0t5RUVDeUFGSUFaQkFXbzJBdlFySUFRZ0JrRVViR29oQUFzZ0FDZ0NEQ0lFQkVBZ0JCQVFJQUJDQURjQ0RBc2dBQ0FLTmdJSUlBQWdCeWdDRENJRVFRcDJRUU54TmdJQUlBQWdCRUVJZGtFRGNUWUNCQ0FCUVFScUlBZEJER3BCQWhBUklBY29BZ3dFUUNBRFFRSkJ2UlpCQUJBUERBRUxJQUFnQWtFR2F5SUNFQlFpQkRZQ0RDQUVSUVJBSUFOQkFVSHhIa0VBRUE5QkFBd0NDeUFFSUFGQkJtb2dBaEFTR2lBQUlBSTJBaEFMUVFFTElRMGdCMEVRYWlRQUlBMExKd0JCQVNFQklBSWdBQ2dDU0NnQ0VFRUNkRWNFZnlBRFFRRkIxeUZCQUJBUFFRQUZRUUVMQzZzREFRVi9Jd0JCRUdzaUJpUUFBbjhnQWtFQlRRUkFJQU5CQVVIOUhVRUFFQTlCQUF3QkN5QUFMUUM4QVVFQmNRUkFJQU5CQVVHSjNnQkJBQkFQUVFBTUFRc2dBQ2dDbkFFZ0FDZ0N6QUZCakN4c2FpSUFJQUF0QUlnc1FRSnlPZ0NJTENBQklBWkJER3BCQVJBUkFrQWdBQ2dDckNnaUJFVUVRQ0FBSUFZb0FneEJBV29pQlVFSUVCTWlCRFlDckNnZ0JFVUVRQ0FEUVFGQmx4NUJBQkFQUVFBTUF3c2dBQ0FGTmdLb0tBd0JDeUFHS0FJTUlnVWdBQ2dDcUNoSkRRQWdCQ0FGUVFGcUlnUkJBM1FRRnlJRlJRUkFJQU5CQVVHWEhrRUFFQTlCQUF3Q0N5QUFJQVUyQXF3b0lBVWdBQ2dDcUNnaUIwRURkR3BCQUNBRUlBZHJRUU4wRUJVYUlBQWdCRFlDcUNnZ0FDZ0NyQ2doQkFzZ0JDQUdLQUlNSWdWQkEzUnFLQUlBQkVBZ0JpQUZOZ0lBSUFOQkFVRzlOU0FHRUE5QkFBd0JDeUFDUVFGcklnSVFGQ0VFSUFBb0Fxd29JZ0FnQmlnQ0RDSUZRUU4wYWlBRU5nSUFJQVJGQkVBZ0EwRUJRWmNlUVFBUUQwRUFEQUVMSUFBZ0JVRURkR29nQWpZQ0JDQUFJQVlvQWd4QkEzUnFLQUlBSUFGQkFXb2dBaEFTR2tFQkN5RUlJQVpCRUdva0FDQUlDL1VDQVFWL0l3QkJFR3NpQmlRQUFuOGdBa0VCVFFSQUlBTkJBVUdrSUVFQUVBOUJBQXdCQ3lBQUlBQXRBTHdCUVFGeU9nQzhBU0FCSUFaQkRHcEJBUkFSQWtBZ0FDZ0NkQ0lFUlFSQUlBQWdCaWdDREVFQmFpSUZRUWdRRXlJRU5nSjBJQVJGQkVBZ0EwRUJRYjRnUVFBUUQwRUFEQU1MSUFBZ0JUWUNjQXdCQ3lBR0tBSU1JZ1VnQUNnQ2NFa05BQ0FFSUFWQkFXb2lCRUVEZEJBWElnVkZCRUFnQTBFQlFiNGdRUUFRRDBFQURBSUxJQUFnQlRZQ2RDQUZJQUFvQW5BaUIwRURkR3BCQUNBRUlBZHJRUU4wRUJVYUlBQWdCRFlDY0NBQUtBSjBJUVFMSUFRZ0JpZ0NEQ0lGUVFOMGFpZ0NBQVJBSUFZZ0JUWUNBQ0FEUVFGQjB6VWdCaEFQUVFBTUFRc2dBa0VCYXlJQ0VCUWhCQ0FBS0FKMElnQWdCaWdDRENJRlFRTjBhaUFFTmdJQUlBUkZCRUFnQTBFQlFiNGdRUUFRRDBFQURBRUxJQUFnQlVFRGRHb2dBallDQkNBQUlBWW9BZ3hCQTNScUtBSUFJQUZCQVdvZ0FoQVNHa0VCQ3lFSUlBWkJFR29rQUNBSUM2QUJBUVIvSXdCQkVHc2lCQ1FBQW44Z0FrVUVRQ0FEUVFGQjF4NUJBQkFQUVFBTUFRc2dBU0FFUVF4cVFRRVFFVUVCSUFKQkFXc2lCVVVOQUJwQkFDRUFRUUFoQWdOQUlBRkJBV29pQVNBRVFRaHFRUUVRRVNBRUtBSUlJZ1pCR0hSQkgzVWdCa0gvQUhFZ0FuSkJCM1J4SVFJZ0FFRUJhaUlBSUFWSERRQUxRUUVnQWtVTkFCb2dBMEVCUWRjZVFRQVFEMEVBQ3lFSElBUkJFR29rQUNBSEN4c0FRUUVoQUNBQ0JIOUJBUVVnQTBFQlFmNGdRUUFRRDBFQUN3dUFBUUVCZnlNQVFSQnJJZ0FrQUVFQklRUUNRQ0FDUVFGTkJFQkJBQ0VFSUFOQkFVSGtJRUVBRUE4TUFRc2dBU0FBUVF4cVFRRVFFU0FCUVFGcUlBQkJDR3BCQVJBUklBSkJBbXNnQUNnQ0NDSUJRUVYyUVFKeElBRkJCSFpCQTNGcVFRSnFjRVVOQUVFQUlRUWdBMEVCUWVRZ1FRQVFEd3NnQUVFUWFpUUFJQVFMQkFCQkFBc0xvcndCSVFCQmdBZ0xrWFZqWVc1dWIzUWdZV3hzYjJOaGRHVWdiM0JxWDNSalpGOXpaV2RmWkdGMFlWOWphSFZ1YTE5MEtpQmhjbkpoZVFBdEt5QWdJREJZTUhnQUxUQllLekJZSURCWUxUQjRLekI0SURCNEFGVnVhMjV2ZDI0Z1ptOXliV0YwQUVaaGFXeGxaQ0IwYnlCelpYUjFjQ0IwYUdVZ1pHVmpiMlJsY2dCR1lXbHNaV1FnZEc4Z2NtVmhaQ0IwYUdVZ2FHVmhaR1Z5QUc1aGJnQXFiRjkwYVd4bFgyeGxiaUErSUZWSlRsUmZUVUZZSUMwZ1QxQktYME5QVFUxUFRsOURRa3hMWDBSQlZFRmZSVmhVVWtFZ0xTQndYMm95YXkwK2JWOXpjR1ZqYVdacFkxOXdZWEpoYlM1dFgyUmxZMjlrWlhJdWJWOXpiM1JmYkdWdVozUm9BR2x1WmdCR1lXbHNaV1FnZEc4Z1pHVmpiMlJsSUhSb1pTQnBiV0ZuWlFCSmJuWmhiR2xrSUdGalkyVnpjeUIwYnlCd2FTMCthVzVqYkhWa1pRQXZkRzF3TDI5d1pXNXFjR1ZuTDNOeVl5OWlhVzR2WTI5dGJXOXVMMk52Ykc5eUxtTUFRVXhNWDBOUVZWTUFUMUJLWDA1VlRWOVVTRkpGUVVSVEFFNUJUZ0JKVGtZQWNGOXFNbXN0UG0xZmMzQmxZMmxtYVdOZmNHRnlZVzB1YlY5a1pXTnZaR1Z5TG0xZmMyOTBYMnhsYm1kMGFDQStJRlZKVGxSZlRVRllJQzBnVDFCS1gwTlBUVTFQVGw5RFFreExYMFJCVkVGZlJWaFVVa0VBQ1FrSklIQnlaV05qYVc1MGMybDZaU0FvZHl4b0tUMEFDUWtKSUhOMFpYQnphWHBsY3lBb2JTeGxLVDBBTGdBb2JuVnNiQ2tBS0NWa0xDVmtLU0FBSlhOOUNnQUpDU0I5Q2dCYlJFVldYU0JFZFcxd0lHRnVJR2x0WVdkbFgyTnZiWEJmYUdWaFpHVnlJSE4wY25WamRDQjdDZ0JiUkVWV1hTQkVkVzF3SUdGdUlHbHRZV2RsWDJobFlXUmxjaUJ6ZEhKMVkzUWdld29BU1cxaFoyVWdhVzVtYnlCN0NnQUpJR1JsWm1GMWJIUWdkR2xzWlNCN0NnQWxjd2tnWTI5dGNHOXVaVzUwSUNWa0lIc0tBQWtKSUdOdmJYQWdKV1FnZXdvQUNTQlVhV3hsSUdsdVpHVjRPaUI3Q2dBSklFMWhjbXRsY2lCc2FYTjBPaUI3Q2dCRGIyUmxjM1J5WldGdElHbHVaR1Y0SUdaeWIyMGdiV0ZwYmlCb1pXRmtaWEk2SUhzS0FFTnZaR1Z6ZEhKbFlXMGdhVzVtYnlCbWNtOXRJRzFoYVc0Z2FHVmhaR1Z5T2lCN0NnQlRkSEpsWVcwZ1pYSnliM0lnZDJocGJHVWdjbVZoWkdsdVp5QktVRElnU0dWaFpHVnlJR0p2ZUFvQVJtOTFibVFnWVNCdGFYTndiR0ZqWldRZ0p5VmpKV01sWXlWakp5QmliM2dnYjNWMGMybGtaU0JxY0RKb0lHSnZlQW9BVFdGc1ptOXliV1ZrSUVwUU1pQm1hV3hsSUdadmNtMWhkRG9nWm1seWMzUWdZbTk0SUcxMWMzUWdZbVVnU2xCRlJ5QXlNREF3SUhOcFoyNWhkSFZ5WlNCaWIzZ0tBRTFoYkdadmNtMWxaQ0JLVURJZ1ptbHNaU0JtYjNKdFlYUTZJSE5sWTI5dVpDQmliM2dnYlhWemRDQmlaU0JtYVd4bElIUjVjR1VnWW05NENnQk9iM1FnWlc1dmRXZG9JRzFsYlc5eWVTQjBieUJvWVc1a2JHVWdhbkJsWnpJd01EQWdZbTk0Q2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCM2FYUm9JRVpVV1ZBZ1FtOTRDZ0JCSUcxaGNtdGxjaUJKUkNCM1lYTWdaWGh3WldOMFpXUWdLREI0Wm1ZdExTa2dhVzV6ZEdWaFpDQnZaaUFsTGpoNENnQUpDU0J0WTNROUpYZ0tBQWtKQ1NCallteHJjM1I1UFNVamVBb0FDUWtKSUdOemRIazlKU040Q2dBSkNTQndjbWM5SlNONENnQkpiblJsWjJWeUlHOTJaWEptYkc5M0NnQUpJSFJrZUQwbGRTd2dkR1I1UFNWMUNnQUpJSFIzUFNWMUxDQjBhRDBsZFFvQUNTQjBlREE5SlhVc0lIUjVNRDBsZFFvQVNXNTJZV3hwWkNCamIyMXdiMjVsYm5RZ2FXNWtaWGc2SUNWMUNnQlRkSEpsWVcwZ2RHOXZJSE5vYjNKMENnQk5ZWEpyWlhJZ2FHRnVaR3hsY2lCbWRXNWpkR2x2YmlCbVlXbHNaV1FnZEc4Z2NtVmhaQ0IwYUdVZ2JXRnlhMlZ5SUhObFoyMWxiblFLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUdadmNpQmpkWEp5Wlc1MElIQnlaV05wYm1OMElHTnZaR1ZpYkc5amF5QmxiR1Z0Wlc1MENnQkZjbkp2Y2lCeVpXRmthVzVuSUZOUVEyOWtJRk5RUTI5aklHVnNaVzFsYm5RS0FFVnljbTl5SUhKbFlXUnBibWNnVTFGalpDQnZjaUJUVVdOaklHVnNaVzFsYm5RS0FFRWdRbEJEUXlCb1pXRmtaWElnWW05NElHbHpJR0YyWVdsc1lXSnNaU0JoYkhSb2IzVm5hQ0JDVUVNZ1oybDJaVzRnWW5rZ2RHaGxJRWxJUkZJZ1ltOTRJQ2dsWkNrZ2FXNWthV05oZEdVZ1kyOXRjRzl1Wlc1MGN5QmlhWFFnWkdWd2RHZ2dhWE1nWTI5dWMzUmhiblFLQUVWeWNtOXlJSGRwZEdnZ1UwbGFJRzFoY210bGNqb2dhV3hzWldkaGJDQjBhV3hsSUc5bVpuTmxkQW9BU1c1MllXeHBaQ0J3Y21WamFXNWpkQW9BVG05MElHVnViM1ZuYUNCdFpXMXZjbmtnZEc4Z2FHRnVaR3hsSUdKaGJtUWdjSEpsWTJsdWRITUtBRVpoYVd4bFpDQjBieUJrWldOdlpHVWdZV3hzSUhWelpXUWdZMjl0Y0c5dVpXNTBjd29BVTJsNlpTQnZaaUJqYjJSbElHSnNiMk5ySUdSaGRHRWdaWGhqWldWa2N5QnplWE4wWlcwZ2JHbHRhWFJ6Q2dCVGFYcGxJRzltSUhScGJHVWdaR0YwWVNCbGVHTmxaV1J6SUhONWMzUmxiU0JzYVcxcGRITUtBRU5oYm01dmRDQjBZV3RsSUdsdUlHTm9ZWEpuWlNCdGRXeDBhWEJzWlNCTlExUWdiV0Z5YTJWeWN3b0FRMjl5Y25Wd2RHVmtJRkJRVFNCdFlYSnJaWEp6Q2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCbWIzSWdkR2xzWlNCeVpYTnZiSFYwYVc5dWN3b0FRMkZ1Ym05MElIUmhhMlVnYVc0Z1kyaGhjbWRsSUcxMWJIUnBjR3hsSUdOdmJHeGxZM1JwYjI1ekNnQkpiblpoYkdsa0lGQkRURklnWW05NExpQlNaWEJ2Y25SeklEQWdjR0ZzWlhSMFpTQmpiMngxYlc1ekNnQlhaU0JrYnlCdWIzUWdjM1Z3Y0c5eWRDQlNUMGtnYVc0Z1pHVmpiMlJwYm1jZ1NGUWdZMjlrWldKc2IyTnJjd29BUTJGdWJtOTBJR2hoYm1Sc1pTQmliM2dnYjJZZ2RXNWtaV1pwYm1Wa0lITnBlbVZ6Q2dCRFlXNXViM1FnZEdGclpTQnBiaUJqYUdGeVoyVWdZMjlzYkdWamRHbHZibk1nZDJsMGFHOTFkQ0J6WVcxbElHNTFiV0psY2lCdlppQnBibVJwZUdWekNnQkpiblpoYkdsa0lIUnBiR1ZqTFQ1M2FXNWZlSGg0SUhaaGJIVmxjd29BUTJGdWJtOTBJR2hoYm1Sc1pTQmliM2dnYjJZZ2JHVnpjeUIwYUdGdUlEZ2dZbmwwWlhNS0FFTmhibTV2ZENCb1lXNWtiR1VnV0V3Z1ltOTRJRzltSUd4bGMzTWdkR2hoYmlBeE5pQmllWFJsY3dvQVEyOXRjRzl1Wlc1MElHbHVaR1Y0SUNWMUlIVnpaV1FnYzJWMlpYSmhiQ0IwYVcxbGN3b0FTVzUyWVd4cFpDQlFRMHhTSUdKdmVDNGdVbVZ3YjNKMGN5QWxaQ0JsYm5SeWFXVnpDZ0JPYjNRZ1pXNXZkV2RvSUcxbGJXOXllU0IwYnlCamNtVmhkR1VnVkdGbkxYUnlaV1VnYm05a1pYTUtBRU5oYm01dmRDQjBZV3RsSUdsdUlHTm9ZWEpuWlNCdFkzUWdaR0YwWVNCM2FYUm9hVzRnYlhWc2RHbHdiR1VnVFVOVUlISmxZMjl5WkhNS0FFTmhibTV2ZENCa1pXTnZaR1VnZEdsc1pTd2diV1Z0YjNKNUlHVnljbTl5Q2dCdmNHcGZhakpyWDJGd2NHeDVYMjVpWDNScGJHVmZjR0Z5ZEhOZlkyOXljbVZqZEdsdmJpQmxjbkp2Y2dvQVVISnZZbXhsYlNCM2FYUm9JSE5yYVhCd2FXNW5JRXBRUlVjeU1EQXdJR0p2ZUN3Z2MzUnlaV0Z0SUdWeWNtOXlDZ0JRY205aWJHVnRJSGRwZEdnZ2NtVmhaR2x1WnlCS1VFVkhNakF3TUNCaWIzZ3NJSE4wY21WaGJTQmxjbkp2Y2dvQVZXNXJibTkzYmlCdFlYSnJaWElLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUhSdklHRmtaQ0IwYkNCdFlYSnJaWElLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUhSdklHRmtaQ0J0YUNCdFlYSnJaWElLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUhSdklIUmhhMlVnYVc0Z1kyaGhjbWRsSUZOSldpQnRZWEpyWlhJS0FFVnljbTl5SUhKbFlXUnBibWNnVUZCVUlHMWhjbXRsY2dvQVRtOTBJR1Z1YjNWbmFDQnRaVzF2Y25rZ2RHOGdjbVZoWkNCUVVGUWdiV0Z5YTJWeUNnQkZjbkp2Y2lCeVpXRmthVzVuSUZOUFZDQnRZWEpyWlhJS0FFVnljbTl5SUhKbFlXUnBibWNnVUV4VUlHMWhjbXRsY2dvQVJYSnliM0lnY21WaFpHbHVaeUJOUTFRZ2JXRnlhMlZ5Q2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCMGJ5QnlaV0ZrSUUxRFZDQnRZWEpyWlhJS0FFNXZkQ0JsYm05MVoyZ2djM0JoWTJVZ1ptOXlJR1Y0Y0dWamRHVmtJRk5QVUNCdFlYSnJaWElLQUVWNGNHVmpkR1ZrSUZOUFVDQnRZWEpyWlhJS0FFVnljbTl5SUhKbFlXUnBibWNnVFVOUElHMWhjbXRsY2dvQVJYSnliM0lnY21WaFpHbHVaeUJTUjA0Z2JXRnlhMlZ5Q2dCRmNuSnZjaUJ5WldGa2FXNW5JRkJRVFNCdFlYSnJaWElLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUhSdklISmxZV1FnVUZCTklHMWhjbXRsY2dvQVJYSnliM0lnY21WaFpHbHVaeUJVVEUwZ2JXRnlhMlZ5Q2dCRmNuSnZjaUJ5WldGa2FXNW5JRkJNVFNCdFlYSnJaWElLQUU1dmRDQmxibTkxWjJnZ2MzQmhZMlVnWm05eUlHVjRjR1ZqZEdWa0lFVlFTQ0J0WVhKclpYSUtBRVY0Y0dWamRHVmtJRVZRU0NCdFlYSnJaWElLQUVWeWNtOXlJSEpsWVdScGJtY2dRMUpISUcxaGNtdGxjZ29BVlc1cmJtOTNiaUJ3Y205bmNtVnpjMmx2YmlCdmNtUmxjaUJwYmlCRFQwUWdiV0Z5YTJWeUNnQlZibXR1YjNkdUlGTmpiMlFnZG1Gc2RXVWdhVzRnUTA5RUlHMWhjbXRsY2dvQVJYSnliM0lnY21WaFpHbHVaeUJEVDBRZ2JXRnlhMlZ5Q2dCRmNuSnZjaUJ5WldGa2FXNW5JRkZEUkNCdFlYSnJaWElLQUVOeWNtOXlJSEpsWVdScGJtY2dRMEpFSUcxaGNtdGxjZ29BUlhKeWIzSWdjbVZoWkdsdVp5QlFUME1nYldGeWEyVnlDZ0JGY25KdmNpQnlaV0ZrYVc1bklFTlBReUJ0WVhKclpYSUtBRVZ5Y205eUlISmxZV1JwYm1jZ1VVTkRJRzFoY210bGNnb0FSWEp5YjNJZ2NtVmhaR2x1WnlCTlEwTWdiV0Z5YTJWeUNnQk9iM1FnWlc1dmRXZG9JRzFsYlc5eWVTQjBieUJ5WldGa0lFMURReUJ0WVhKclpYSUtBSEpsY1hWcGNtVmtJRk5KV2lCdFlYSnJaWElnYm05MElHWnZkVzVrSUdsdUlHMWhhVzRnYUdWaFpHVnlDZ0J5WlhGMWFYSmxaQ0JEVDBRZ2JXRnlhMlZ5SUc1dmRDQm1iM1Z1WkNCcGJpQnRZV2x1SUdobFlXUmxjZ29BY21WeGRXbHlaV1FnVVVORUlHMWhjbXRsY2lCdWIzUWdabTkxYm1RZ2FXNGdiV0ZwYmlCb1pXRmtaWElLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUhSdklHaGhibVJzWlNCcWNHVm5NakF3TUNCbWFXeGxJR2hsWVdSbGNnb0FUbTkwSUdWdWIzVm5hQ0J0WlcxdmNua2dkRzhnY21WaFpDQm9aV0ZrWlhJS0FFVnljbTl5SUhkcGRHZ2dTbEFnVTJsbmJtRjBkWEpsSURvZ1ltRmtJRzFoWjJsaklHNTFiV0psY2dvQVNXNGdVMDlVSUcxaGNtdGxjaXdnVkZCVGIzUWdLQ1ZrS1NCcGN5QnViM1FnZG1Gc2FXUWdjbVZuWVhKa2N5QjBieUIwYUdVZ1kzVnljbVZ1ZENCdWRXMWlaWElnYjJZZ2RHbHNaUzF3WVhKMElDZ2xaQ2tzSUdkcGRtbHVaeUIxY0FvQVNXNGdVMDlVSUcxaGNtdGxjaXdnVkZCVGIzUWdLQ1ZrS1NCcGN5QnViM1FnZG1Gc2FXUWdjbVZuWVhKa2N5QjBieUIwYUdVZ2NISmxkbWx2ZFhNZ2JuVnRZbVZ5SUc5bUlIUnBiR1V0Y0dGeWRDQW9KV1FwTENCbmFYWnBibWNnZFhBS0FFbHVJRk5QVkNCdFlYSnJaWElzSUZSUVUyOTBJQ2dsWkNrZ2FYTWdibTkwSUhaaGJHbGtJSEpsWjJGeVpITWdkRzhnZEdobElHTjFjbkpsYm5RZ2JuVnRZbVZ5SUc5bUlIUnBiR1V0Y0dGeWRDQW9hR1ZoWkdWeUtTQW9KV1FwTENCbmFYWnBibWNnZFhBS0FIUnBiR1Z6SUhKbGNYVnBjbVVnWVhRZ2JHVmhjM1FnYjI1bElISmxjMjlzZFhScGIyNEtBRTFoY210bGNpQnBjeUJ1YjNRZ1kyOXRjR3hwWVc1MElIZHBkR2dnYVhSeklIQnZjMmwwYVc5dUNnQlFjbTlpYkdWdElIZHBkR2dnYzJWbGF5Qm1kVzVqZEdsdmJnb0FSWEp5YjNJZ2NtVmhaR2x1WnlCVFVFTnZaQ0JUVUVOdll5QmxiR1Z0Wlc1MExDQkpiblpoYkdsa0lHTmliR3QzTDJOaWJHdG9JR052YldKcGJtRjBhVzl1Q2dCSmJuWmhiR2xrSUcxMWJIUnBjR3hsSUdOdmJYQnZibVZ1ZENCMGNtRnVjMlp2Y20xaGRHbHZiZ29BUTJGdWJtOTBJSFJoYTJVZ2FXNGdZMmhoY21kbElHTnZiR3hsWTNScGIyNXpJRzkwYUdWeUlIUm9ZVzRnWVhKeVlYa2daR1ZqYjNKeVpXeGhkR2x2YmdvQVZHOXZJR3hoY21kbElIWmhiSFZsSUdadmNpQk9jSEJ0Q2dCT2IzUWdaVzV2ZFdkb0lHSjVkR1Z6SUhSdklISmxZV1FnVG5Cd2JRb0FZbUZrSUhCc1lXTmxaQ0JxY0dWbklHTnZaR1Z6ZEhKbFlXMEtBQWtnVFdGcGJpQm9aV0ZrWlhJZ2MzUmhjblFnY0c5emFYUnBiMjQ5Sld4c2FRb0pJRTFoYVc0Z2FHVmhaR1Z5SUdWdVpDQndiM05wZEdsdmJqMGxiR3hwQ2dCTllYSnJaWElnYzJsNlpTQnBibU52Ym5OcGMzUmxiblFnZDJsMGFDQnpkSEpsWVcwZ2JHVnVaM1JvQ2dCVWFXeGxJSEJoY25RZ2JHVnVaM1JvSUhOcGVtVWdhVzVqYjI1emFYTjBaVzUwSUhkcGRHZ2djM1J5WldGdElHeGxibWQwYUFvQVEyRnVibTkwSUhSaGEyVWdhVzRnWTJoaGNtZGxJRzExYkhScGNHeGxJR1JoZEdFZ2MzQmhibTVwYm1jS0FGZHliMjVuSUdac1lXY0tBRVZ5Y205eUlIZHBkR2dnUmxSWlVDQnphV2R1WVhSMWNtVWdRbTk0SUhOcGVtVUtBRVZ5Y205eUlIZHBkR2dnU2xBZ2MybG5ibUYwZFhKbElFSnZlQ0J6YVhwbENnQkpiblpoYkdsa0lIQnlaV05wYm1OMElITnBlbVVLQUVsdVkyOXVjMmx6ZEdWdWRDQnRZWEpyWlhJZ2MybDZaUW9BU1c1MllXeHBaQ0J0WVhKclpYSWdjMmw2WlFvQVJYSnliM0lnZDJsMGFDQlRTVm9nYldGeWEyVnlJSE5wZW1VS0FFNXZkQ0JsYm05MVoyZ2diV1Z0YjNKNUlIUnZJR0ZrWkNCaElHNWxkeUIyWVd4cFpHRjBhVzl1SUhCeWIyTmxaSFZ5WlFvQVRtOTBJR1Z1YjNWbmFDQnRaVzF2Y25rZ2RHOGdaR1ZqYjJSbElIUnBiR1VLQUVaaGFXeGxaQ0IwYnlCa1pXTnZaR1VnZEdobElHTnZaR1Z6ZEhKbFlXMGdhVzRnZEdobElFcFFNaUJtYVd4bENnQkRZVzV1YjNRZ2RHRnJaU0JwYmlCamFHRnlaMlVnWTI5c2JHVmpkR2x2Ym5NZ2QybDBhQ0JwYm1ScGVDQnphSFZtWm14bENnQkRZVzV1YjNRZ1lXeHNiMk5oZEdVZ1ZHbGxjaUF4SUdoaGJtUnNaUW9BVG04Z1pHVmpiMlJsWkNCaGNtVmhJSEJoY21GdFpYUmxjbk1zSUhObGRDQjBhR1VnWkdWamIyUmxaQ0JoY21WaElIUnZJSFJvWlNCM2FHOXNaU0JwYldGblpRb0FUbTkwSUdWdWIzVm5hQ0J0WlcxdmNua2dkRzhnWTNKbFlYUmxJRlJoWnkxMGNtVmxDZ0JPYjNRZ1pXNXZkV2RvSUcxbGJXOXllU0IwYnlCeVpXbHVhWFJwWVd4cGVtVWdkR2hsSUhSaFp5QjBjbVZsQ2dCRmNuSnZjaUJ5WldGa2FXNW5JRk5RUTI5a0lGTlFRMjlqSUdWc1pXMWxiblFzSUVsdWRtRnNhV1FnZEhKaGJuTm1iM0p0WVhScGIyNGdabTkxYm1RS0FFVnljbTl5SUhKbFlXUnBibWNnVTFCRGIyUWdVMUJEYjJNZ1pXeGxiV1Z1ZEM0Z1ZXNXpkWEJ3YjNKMFpXUWdUV2w0WldRZ1NGUWdZMjlrWlMxaWJHOWpheUJ6ZEhsc1pTQm1iM1Z1WkFvQVZHbHNaU0JaSUdOdmIzSmthVzVoZEdWeklHRnlaU0J1YjNRZ2MzVndjRzl5ZEdWa0NnQlVhV3hsSUZnZ1kyOXZjbVJwYm1GMFpYTWdZWEpsSUc1dmRDQnpkWEJ3YjNKMFpXUUtBRWx0WVdkbElHTnZiM0prYVc1aGRHVnpJR0ZpYjNabElFbE9WRjlOUVZnZ1lYSmxJRzV2ZENCemRYQndiM0owWldRS0FFcFFSVWN5TURBd0lFaGxZV1JsY2lCaWIzZ2dibTkwSUhKbFlXUWdlV1YwTENBbkpXTWxZeVZqSldNbklHSnZlQ0IzYVd4c0lHSmxJR2xuYm05eVpXUUtBRzl3YWw5cU1tdGZiV1Z5WjJWZmNIQjBLQ2tnYUdGeklHRnNjbVZoWkhrZ1ltVmxiaUJqWVd4c1pXUUtBRTV2ZENCbGJtOTFaMmdnYldWdGIzSjVJSFJ2SUhKbFlXUWdVMDlVSUcxaGNtdGxjaTRnVkdsc1pTQnBibVJsZUNCaGJHeHZZMkYwYVc5dUlHWmhhV3hsWkFvQVNXZHViM0pwYm1jZ2FXaGtjaUJpYjNndUlFWnBjbk4wSUdsb1pISWdZbTk0SUdGc2NtVmhaSGtnY21WaFpBb0FXbkJ3ZENBbGRTQmhiSEpsWVdSNUlISmxZV1FLQUZwd2NHMGdKWFVnWVd4eVpXRmtlU0J5WldGa0NnQlFWRVZTVFNCamFHVmpheUJtWVdsc2RYSmxPaUFsWkNCemVXNTBhR1YwYVhwbFpDQXdlRVpHSUcxaGNtdGxjbk1nY21WaFpBb0FDUWtKSUdOaWJHdDNQVEplSldRS0FBa0pDU0JqWW14cmFEMHlYaVZrQ2dBSkNRa2djVzUwYzNSNVBTVmtDZ0FsY3lCa2VEMGxaQ3dnWkhrOUpXUUtBQWtKQ1NCeWIybHphR2xtZEQwbFpBb0FDUWtKSUc1MWJXZGlhWFJ6UFNWa0NnQUpDU0J1ZFcxc1lYbGxjbk05SldRS0FDVnpJRzUxYldOdmJYQnpQU1ZrQ2dCdmNHcGZhbkF5WDJGd2NHeDVYMk5rWldZNklHRmpiajBsWkN3Z2JuVnRZMjl0Y0hNOUpXUUtBRzl3YWw5cWNESmZZWEJ3YkhsZlkyUmxaam9nWTI0OUpXUXNJRzUxYldOdmJYQnpQU1ZrQ2dBSkNRa2diblZ0Y21WemIyeDFkR2x2Ym5NOUpXUUtBQWtKSUhSNWNHVTlKU040TENCd2IzTTlKV3hzYVN3Z2JHVnVQU1ZrQ2dBbGN5QnpaMjVrUFNWa0NnQUpDUWtnY1cxbVltbGtQU1ZrQ2dBbGN5QndjbVZqUFNWa0NnQUpDU0J1WWlCdlppQjBhV3hsTFhCaGNuUWdhVzRnZEdsc1pTQmJKV1JkUFNWa0NnQWxjeUI0TVQwbFpDd2dlVEU5SldRS0FDVnpJSGd3UFNWa0xDQjVNRDBsWkFvQVJtRnBiR1ZrSUhSdklHUmxZMjlrWlNCMGFXeGxJQ1ZrTHlWa0NnQlRaWFIwYVc1bklHUmxZMjlrYVc1bklHRnlaV0VnZEc4Z0pXUXNKV1FzSldRc0pXUUtBRVpoYVd4bFpDQjBieUJrWldOdlpHVWdZMjl0Y0c5dVpXNTBJQ1ZrQ2dCSmJuWmhiR2xrSUhaaGJIVmxJR1p2Y2lCdWRXMXlaWE52YkhWMGFXOXVjeUE2SUNWa0xDQnRZWGdnZG1Gc2RXVWdhWE1nYzJWMElHbHVJRzl3Wlc1cWNHVm5MbWdnWVhRZ0pXUUtBRWx1ZG1Gc2FXUWdZMjl0Y0c5dVpXNTBJRzUxYldKbGNqb2dKV1FzSUhKbFoyRnlaR2x1WnlCMGFHVWdiblZ0WW1WeUlHOW1JR052YlhCdmJtVnVkSE1nSldRS0FGUnZieUJ0WVc1NUlGQlBRM01nSldRS0FFbHVkbUZzYVdRZ2RHbHNaU0J1ZFcxaVpYSWdKV1FLQUVsdWRtRnNhV1FnZEdsc1pTQndZWEowSUdsdVpHVjRJR1p2Y2lCMGFXeGxJRzUxYldKbGNpQWxaQzRnUjI5MElDVmtMQ0JsZUhCbFkzUmxaQ0FsWkFvQVJYSnliM0lnZDJsMGFDQlRTVm9nYldGeWEyVnlPaUJ1ZFcxaVpYSWdiMllnWTI5dGNHOXVaVzUwSUdseklHbHNiR1ZuWVd3Z0xUNGdKV1FLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUdadmNpQmphV1ZzWVdJS0FFTmhibTV2ZENCaGJHeHZZMkYwWlNCallteHJMVDVrWldOdlpHVmtYMlJoZEdFS0FFWmhhV3hsWkNCMGJ5QnRaWEpuWlNCUVVGUWdaR0YwWVFvQVJtRnBiR1ZrSUhSdklHMWxjbWRsSUZCUVRTQmtZWFJoQ2dCSmJuWmhiR2xrSUc1MWJXSmxjaUJ2WmlCc1lYbGxjbk1nYVc0Z1EwOUVJRzFoY210bGNpQTZJQ1ZrSUc1dmRDQnBiaUJ5WVc1blpTQmJNUzAyTlRVek5WMEtBQ1Z6T2lWa09tTnZiRzl5WDJOdGVXdGZkRzlmY21kaUNnbERRVTRnVGs5VUlFTlBUbFpGVWxRS0FDVnpPaVZrT21OdmJHOXlYMlZ6ZVdOalgzUnZYM0puWWdvSlEwRk9JRTVQVkNCRFQwNVdSVkpVQ2dBbGN6b2xaRHBqYjJ4dmNsOXplV05qWDNSdlgzSm5ZZ29KUTBGT0lFNVBWQ0JEVDA1V1JWSlVDZ0JUZEhKbFlXMGdkRzl2SUhOb2IzSjBMQ0JsZUhCbFkzUmxaQ0JUVDFRS0FGVnVZV0pzWlNCMGJ5QnpaWFFnZERFZ2FHRnVaR3hsSUdGeklGUk1Vd29BVTNSeVpXRnRJR1J2WlhNZ2JtOTBJR1Z1WkNCM2FYUm9JRVZQUXdvQVEyRnVibTkwSUdoaGJtUnNaU0JpYjNnZ2MybDZaWE1nYUdsbmFHVnlJSFJvWVc0Z01sNHpNZ29BYjNCcVgzQnBYMjVsZUhSZmJISmpjQ2dwT2lCcGJuWmhiR2xrSUdOdmJYQnViekF2WTI5dGNHNXZNUW9BYjNCcVgzQnBYMjVsZUhSZmNteGpjQ2dwT2lCcGJuWmhiR2xrSUdOdmJYQnViekF2WTI5dGNHNXZNUW9BYjNCcVgzQnBYMjVsZUhSZlkzQnliQ2dwT2lCcGJuWmhiR2xrSUdOdmJYQnViekF2WTI5dGNHNXZNUW9BYjNCcVgzQnBYMjVsZUhSZmNHTnliQ2dwT2lCcGJuWmhiR2xrSUdOdmJYQnViekF2WTI5dGNHNXZNUW9BYjNCcVgzQnBYMjVsZUhSZmNuQmpiQ2dwT2lCcGJuWmhiR2xrSUdOdmJYQnViekF2WTI5dGNHNXZNUW9BYjNCcVgzUXhYMlJsWTI5a1pWOWpZbXhyS0NrNklIVnVjM1Z3Y0c5eWRHVmtJR0p3Ym05ZmNHeDFjMTl2Ym1VZ1BTQWxaQ0ErUFNBek1Rb0FSbUZwYkdWa0lIUnZJR1JsWTI5a1pTQjBhV3hsSURFdk1Rb0FTVzV6ZFdabWFXTnBaVzUwSUdSaGRHRWdabTl5SUVOTlFWQWdZbTk0TGdvQVRtVmxaQ0IwYnlCeVpXRmtJR0VnVUVOTVVpQmliM2dnWW1WbWIzSmxJSFJvWlNCRFRVRlFJR0p2ZUM0S0FFbHVjM1ZtWm1samFXVnVkQ0JrWVhSaElHWnZjaUJEUkVWR0lHSnZlQzRLQUU1MWJXSmxjaUJ2WmlCamFHRnVibVZzSUdSbGMyTnlhWEIwYVc5dUlHbHpJR1Z4ZFdGc0lIUnZJSHBsY204Z2FXNGdRMFJGUmlCaWIzZ3VDZ0JUZEhKbFlXMGdaWEp5YjNJZ2QyaHBiR1VnY21WaFpHbHVaeUJLVURJZ1NHVmhaR1Z5SUdKdmVEb2dibThnSjJsb1pISW5JR0p2ZUM0S0FFNXZiaUJqYjI1bWIzSnRZVzUwSUdOdlpHVnpkSEpsWVcwZ1ZGQnpiM1E5UFZST2MyOTBMZ29BVTNSeVpXRnRJR1Z5Y205eUlIZG9hV3hsSUhKbFlXUnBibWNnU2xBeUlFaGxZV1JsY2lCaWIzZzZJR0p2ZUNCc1pXNW5kR2dnYVhNZ2FXNWpiMjV6YVhOMFpXNTBMZ29BUW05NElHeGxibWQwYUNCcGN5QnBibU52Ym5OcGMzUmxiblF1Q2dCU1pYTnZiSFYwYVc5dUlHWmhZM1J2Y2lCcGN5Qm5jbVZoZEdWeUlIUm9ZVzRnZEdobElHMWhlR2x0ZFcwZ2NtVnpiMngxZEdsdmJpQnBiaUIwYUdVZ1kyOXRjRzl1Wlc1MExnb0FRMjl0Y0c5dVpXNTBJRzFoY0hCcGJtY2djMlZsYlhNZ2QzSnZibWN1SUZSeWVXbHVaeUIwYnlCamIzSnlaV04wTGdvQVNXNWpiMjF3YkdWMFpTQmphR0Z1Ym1Wc0lHUmxabWx1YVhScGIyNXpMZ29BVFdGc1ptOXliV1ZrSUVoVUlHTnZaR1ZpYkc5amF5NGdTVzUyWVd4cFpDQmpiMlJsWW14dlkyc2diR1Z1WjNSb0lIWmhiSFZsY3k0S0FGZGxJR1J2SUc1dmRDQnpkWEJ3YjNKMElHMXZjbVVnZEdoaGJpQXpJR052WkdsdVp5QndZWE56WlhNZ2FXNGdZVzRnU0ZRZ1kyOWtaV0pzYjJOck95QlVhR2x6SUdOdlpHVmliRzlqYTNNZ2FHRnpJQ1ZrSUhCaGMzTmxjeTRLQUUxaGJHWnZjbTFsWkNCSVZDQmpiMlJsWW14dlkyc3VJRVJsWTI5a2FXNW5JSFJvYVhNZ1kyOWtaV0pzYjJOcklHbHpJSE4wYjNCd1pXUXVJRlJvWlhKbElHRnlaU0FsWkNCNlpYSnZJR0pwZEhCc1lXNWxjeUJwYmlBbFpDQmlhWFJ3YkdGdVpYTXVDZ0JEWVc1dWIzUWdkR0ZyWlNCcGJpQmphR0Z5WjJVZ2JYVnNkR2x3YkdVZ2RISmhibk5tYjNKdFlYUnBiMjRnYzNSaFoyVnpMZ29BVlc1cmJtOTNiaUJ0WVhKclpYSWdhR0Z6SUdKbFpXNGdaR1YwWldOMFpXUWdZVzVrSUdkbGJtVnlZWFJsWkNCbGNuSnZjaTRLQUVOdlpHVmpJSEJ5YjNacFpHVmtJSFJ2SUhSb1pTQnZjR3BmYzJWMGRYQmZaR1ZqYjJSbGNpQm1kVzVqZEdsdmJpQnBjeUJ1YjNRZ1lTQmtaV052YlhCeVpYTnpiM0lnYUdGdVpHeGxjaTRLQUVOdlpHVmpJSEJ5YjNacFpHVmtJSFJ2SUhSb1pTQnZjR3BmY21WaFpGOW9aV0ZrWlhJZ1puVnVZM1JwYjI0Z2FYTWdibTkwSUdFZ1pHVmpiMjF3Y21WemMyOXlJR2hoYm1Sc1pYSXVDZ0JVYVd4bGN5QmtiMjRuZENCaGJHd2dhR0YyWlNCMGFHVWdjMkZ0WlNCa2FXMWxibk5wYjI0dUlGTnJhWEFnZEdobElFMURWQ0J6ZEdWd0xnb0FUblZ0WW1WeUlHOW1JR052YlhCdmJtVnVkSE1nS0NWa0tTQnBjeUJwYm1OdmJuTnBjM1JsYm5RZ2QybDBhQ0JoSUUxRFZDNGdVMnRwY0NCMGFHVWdUVU5VSUhOMFpYQXVDZ0JLVURJZ1ltOTRJSGRvYVdOb0lHRnlaU0JoWm5SbGNpQjBhR1VnWTI5a1pYTjBjbVZoYlNCM2FXeHNJRzV2ZENCaVpTQnlaV0ZrSUdKNUlIUm9hWE1nWm5WdVkzUnBiMjR1Q2dCTllXeG1iM0p0WldRZ1NGUWdZMjlrWldKc2IyTnJMaUJYYUdWdUlIUm9aU0J1ZFcxaVpYSWdiMllnZW1WeWJ5QndiR0Z1WlhNZ1ltbDBjR3hoYm1WeklHbHpJR1Z4ZFdGc0lIUnZJSFJvWlNCdWRXMWlaWElnYjJZZ1ltbDBjR3hoYm1WekxDQnZibXg1SUhSb1pTQmpiR1ZoYm5Wd0lIQmhjM01nYldGclpYTWdjMlZ1YzJVc0lHSjFkQ0IzWlNCb1lYWmxJQ1ZrSUhCaGMzTmxjeUJwYmlCMGFHbHpJR052WkdWaWJHOWpheTRnVkdobGNtVm1iM0psTENCdmJteDVJSFJvWlNCamJHVmhiblZ3SUhCaGMzTWdkMmxzYkNCaVpTQmtaV052WkdWa0xpQlVhR2x6SUcxbGMzTmhaMlVnZDJsc2JDQnViM1FnWW1VZ1pHbHpjR3hoZVdWa0lHRm5ZV2x1TGdvQVNXMWhaMlVnYUdGeklHeGxjM01nWTI5dGNHOXVaVzUwY3lCMGFHRnVJR052WkdWemRISmxZVzB1Q2dCT1pXVmtJSFJ2SUdSbFkyOWtaU0IwYUdVZ2JXRnBiaUJvWldGa1pYSWdZbVZtYjNKbElHSmxaMmx1SUhSdklHUmxZMjlrWlNCMGFHVWdjbVZ0WVdsdWFXNW5JR052WkdWemRISmxZVzB1Q2dCUWMyOTBJSFpoYkhWbElHOW1JSFJvWlNCamRYSnlaVzUwSUhScGJHVXRjR0Z5ZENCcGN5QmxjWFZoYkNCMGJ5QjZaWEp2TENCM1pTQmhjM04xYldsdVp5QnBkQ0JwY3lCMGFHVWdiR0Z6ZENCMGFXeGxMWEJoY25RZ2IyWWdkR2hsSUdOdlpHVnpkSEpsWVcwdUNnQkJJRzFoYkdadmNtMWxaQ0JqYjJSbFlteHZZMnNnZEdoaGRDQm9ZWE1nYlc5eVpTQjBhR0Z1SUc5dVpTQmpiMlJwYm1jZ2NHRnpjeXdnWW5WMElIcGxjbThnYkdWdVozUm9JR1p2Y2lBeWJtUWdZVzVrSUhCdmRHVnVkR2xoYkd4NUlIUm9aU0F6Y21RZ2NHRnpjeUJwYmlCaGJpQklWQ0JqYjJSbFlteHZZMnN1Q2dBSkNRa2dkR2xzWlMxd1lYSjBXeVZrWFRvZ2MzUmhjbDl3YjNNOUpXeHNhU3dnWlc1a1gyaGxZV1JsY2owbGJHeHBMQ0JsYm1SZmNHOXpQU1ZzYkdrdUNnQlVhV3hsSUNWMUlHaGhjeUJVVUhOdmRDQTlQU0F3SUdGdVpDQlVUbk52ZENBOVBTQXdMQ0JpZFhRZ2JtOGdiM1JvWlhJZ2RHbHNaUzF3WVhKMGN5QjNaWEpsSUdadmRXNWtMaUJGVDBNZ2FYTWdZV3h6YnlCdGFYTnphVzVuTGdvQVEyOXRjRzl1Wlc1MElDVmtJR1J2WlhOdUozUWdhR0YyWlNCaElHMWhjSEJwYm1jdUNnQkJJR052Ym1admNtMXBibWNnU2xBeUlISmxZV1JsY2lCemFHRnNiQ0JwWjI1dmNtVWdZV3hzSUVOdmJHOTFjaUJUY0dWamFXWnBZMkYwYVc5dUlHSnZlR1Z6SUdGbWRHVnlJSFJvWlNCbWFYSnpkQ3dnYzI4Z2QyVWdhV2R1YjNKbElIUm9hWE1nYjI1bExnb0FWR2hsSUhOcFoyNWhkSFZ5WlNCaWIzZ2diWFZ6ZENCaVpTQjBhR1VnWm1seWMzUWdZbTk0SUdsdUlIUm9aU0JtYVd4bExnb0FWR2hsSUNCaWIzZ2diWFZ6ZENCaVpTQjBhR1VnWm1seWMzUWdZbTk0SUdsdUlIUm9aU0JtYVd4bExnb0FWR2hsSUdaMGVYQWdZbTk0SUcxMWMzUWdZbVVnZEdobElITmxZMjl1WkNCaWIzZ2dhVzRnZEdobElHWnBiR1V1Q2dCR1lXbHNaV1FnZEc4Z1pHVmpiMlJsTGdvQVRXRnNabTl5YldWa0lFaFVJR052WkdWaWJHOWpheTRnU1c1amIzSnlaV04wSUUxRlRDQnpaV2R0Wlc1MElITmxjWFZsYm1ObExnb0FRMjl0Y0c5dVpXNTBJQ1ZrSUdseklHMWhjSEJsWkNCMGQybGpaUzRLQUU5dWJIa2diMjVsSUVOTlFWQWdZbTk0SUdseklHRnNiRzkzWldRdUNnQlhaU0J1WldWa0lHRnVJR2x0WVdkbElIQnlaWFpwYjNWemJIa2dZM0psWVhSbFpDNEtBRWxJUkZJZ1ltOTRYMjFwYzNOcGJtY3VJRkpsY1hWcGNtVmtMZ29BU2xBeVNDQmliM2dnYldsemMybHVaeTRnVW1WeGRXbHlaV1F1Q2dCT2IzUWdjM1Z5WlNCb2IzY2dkR2hoZENCb1lYQndaVzVsWkM0S0FFMWhhVzRnYUdWaFpHVnlJR2hoY3lCaVpXVnVJR052Y25KbFkzUnNlU0JrWldOdlpHVmtMZ29BVkdsc1pTQWxaQzhsWkNCb1lYTWdZbVZsYmlCa1pXTnZaR1ZrTGdvQVNHVmhaR1Z5SUc5bUlIUnBiR1VnSldRZ0x5QWxaQ0JvWVhNZ1ltVmxiaUJ5WldGa0xnb0FSVzF3ZEhrZ1UwOVVJRzFoY210bGNpQmtaWFJsWTNSbFpEb2dVSE52ZEQwbFpDNEtBRVJwY21WamRDQjFjMlVnWVhRZ0l5VmtJR2h2ZDJWMlpYSWdjR052YkQwbFpDNEtBRWx0Y0d4bGJXVnVkR0YwYVc5dUlHeHBiV2wwWVhScGIyNDZJR1p2Y2lCd1lXeGxkSFJsSUcxaGNIQnBibWNzSUhCamIyeGJKV1JkSUhOb2IzVnNaQ0JpWlNCbGNYVmhiQ0IwYnlBbFpDd2dZblYwSUdseklHVnhkV0ZzSUhSdklDVmtMZ29BU1c1MllXeHBaQ0JqYjIxd2IyNWxiblF2Y0dGc1pYUjBaU0JwYm1SbGVDQm1iM0lnWkdseVpXTjBJRzFoY0hCcGJtY2dKV1F1Q2dCSmJuWmhiR2xrSUhaaGJIVmxJR1p2Y2lCamJXRndXeVZrWFM1dGRIbHdJRDBnSldRdUNnQlFjMjkwSUhaaGJIVmxJR2x6SUc1dmRDQmpiM0p5WldOMElISmxaMkZ5WkhNZ2RHOGdkR2hsSUVwUVJVY3lNREF3SUc1dmNtMDZJQ1ZrTGdvQVRXRnNabTl5YldWa0lFaFVJR052WkdWaWJHOWpheTRnVmt4RElHTnZaR1VnY0hKdlpIVmpaWE1nYzJsbmJtbG1hV05oYm5RZ2MyRnRjR3hsY3lCdmRYUnphV1JsSUhSb1pTQmpiMlJsWW14dlkyc2dZWEpsWVM0S0FGVnVaWGh3WldOMFpXUWdUMDlOTGdvQU16SWdZbWwwY3lCaGNtVWdibTkwSUdWdWIzVm5hQ0IwYnlCa1pXTnZaR1VnZEdocGN5QmpiMlJsWW14dlkyc3NJSE5wYm1ObElIUm9aU0J1ZFcxaVpYSWdiMllnWW1sMGNHeGhibVVzSUNWa0xDQnBjeUJzWVhKblpYSWdkR2hoYmlBek1DNEtBRUp2ZEhSdmJTQndiM05wZEdsdmJpQnZaaUIwYUdVZ1pHVmpiMlJsWkNCaGNtVmhJQ2h5WldkcGIyNWZlVEU5SldRcElITm9iM1ZzWkNCaVpTQStJREF1Q2dCU2FXZG9kQ0J3YjNOcGRHbHZiaUJ2WmlCMGFHVWdaR1ZqYjJSbFpDQmhjbVZoSUNoeVpXZHBiMjVmZURFOUpXUXBJSE5vYjNWc1pDQmlaU0ErSURBdUNnQlZjQ0J3YjNOcGRHbHZiaUJ2WmlCMGFHVWdaR1ZqYjJSbFpDQmhjbVZoSUNoeVpXZHBiMjVmZVRBOUpXUXBJSE5vYjNWc1pDQmlaU0ErUFNBd0xnb0FUR1ZtZENCd2IzTnBkR2x2YmlCdlppQjBhR1VnWkdWamIyUmxaQ0JoY21WaElDaHlaV2RwYjI1ZmVEQTlKV1FwSUhOb2IzVnNaQ0JpWlNBK1BTQXdMZ29BUlhKeWIzSWdjbVZoWkdsdVp5QlFVRlFnYldGeWEyVnlPaUJ3WVdOclpYUWdhR1ZoWkdWeUlHaGhkbVVnWW1WbGJpQndjbVYyYVc5MWMyeDVJR1p2ZFc1a0lHbHVJSFJvWlNCdFlXbHVJR2hsWVdSbGNpQW9VRkJOSUcxaGNtdGxjaWt1Q2dCVGRHRnlkQ0IwYnlCeVpXRmtJR295YXlCdFlXbHVJR2hsWVdSbGNpQW9KV3hzWkNrdUNnQkNiM1IwYjIwZ2NHOXphWFJwYjI0Z2IyWWdkR2hsSUdSbFkyOWtaV1FnWVhKbFlTQW9jbVZuYVc5dVgza3hQU1ZrS1NCcGN5QnZkWFJ6YVdSbElIUm9aU0JwYldGblpTQmhjbVZoSUNoWmMybDZQU1ZrS1M0S0FGVndJSEJ2YzJsMGFXOXVJRzltSUhSb1pTQmtaV052WkdWa0lHRnlaV0VnS0hKbFoybHZibDk1TUQwbFpDa2dhWE1nYjNWMGMybGtaU0IwYUdVZ2FXMWhaMlVnWVhKbFlTQW9XWE5wZWowbFpDa3VDZ0JTYVdkb2RDQndiM05wZEdsdmJpQnZaaUIwYUdVZ1pHVmpiMlJsWkNCaGNtVmhJQ2h5WldkcGIyNWZlREU5SldRcElHbHpJRzkxZEhOcFpHVWdkR2hsSUdsdFlXZGxJR0Z5WldFZ0tGaHphWG85SldRcExnb0FUR1ZtZENCd2IzTnBkR2x2YmlCdlppQjBhR1VnWkdWamIyUmxaQ0JoY21WaElDaHlaV2RwYjI1ZmVEQTlKV1FwSUdseklHOTFkSE5wWkdVZ2RHaGxJR2x0WVdkbElHRnlaV0VnS0ZoemFYbzlKV1FwTGdvQVFtOTBkRzl0SUhCdmMybDBhVzl1SUc5bUlIUm9aU0JrWldOdlpHVmtJR0Z5WldFZ0tISmxaMmx2Ymw5NU1UMGxaQ2tnYVhNZ2IzVjBjMmxrWlNCMGFHVWdhVzFoWjJVZ1lYSmxZU0FvV1U5emFYbzlKV1FwTGdvQVZYQWdjRzl6YVhScGIyNGdiMllnZEdobElHUmxZMjlrWldRZ1lYSmxZU0FvY21WbmFXOXVYM2t3UFNWa0tTQnBjeUJ2ZFhSemFXUmxJSFJvWlNCcGJXRm5aU0JoY21WaElDaFpUM05wZWowbFpDa3VDZ0JTYVdkb2RDQndiM05wZEdsdmJpQnZaaUIwYUdVZ1pHVmpiMlJsWkNCaGNtVmhJQ2h5WldkcGIyNWZlREU5SldRcElHbHpJRzkxZEhOcFpHVWdkR2hsSUdsdFlXZGxJR0Z5WldFZ0tGaFBjMmw2UFNWa0tTNEtBRXhsWm5RZ2NHOXphWFJwYjI0Z2IyWWdkR2hsSUdSbFkyOWtaV1FnWVhKbFlTQW9jbVZuYVc5dVgzZ3dQU1ZrS1NCcGN5QnZkWFJ6YVdSbElIUm9aU0JwYldGblpTQmhjbVZoSUNoWVQzTnBlajBsWkNrdUNnQlRhWHBsSUhnZ2IyWWdkR2hsSUdSbFkyOWtaV1FnWTI5dGNHOXVaVzUwSUdsdFlXZGxJR2x6SUdsdVkyOXljbVZqZENBb1kyOXRjRnNsWkYwdWR6MGxaQ2t1Q2dCVGFYcGxJSGtnYjJZZ2RHaGxJR1JsWTI5a1pXUWdZMjl0Y0c5dVpXNTBJR2x0WVdkbElHbHpJR2x1WTI5eWNtVmpkQ0FvWTI5dGNGc2xaRjB1YUQwbFpDa3VDZ0JVYVd4bElISmxZV1FzSUdSbFkyOWtaV1FnWVc1a0lIVndaR0YwWldRZ2FYTWdibTkwSUhSb1pTQmtaWE5wY21Wa0lHOXVaU0FvSldRZ2RuTWdKV1FwTGdvQVNXNTJZV3hwWkNCamIyMXdiMjVsYm5RZ2FXNWtaWGdnSldRZ0tENDlJQ1ZrS1M0S0FHOXdhbDl5WldGa1gyaGxZV1JsY2lncElITm9iM1ZzWkNCaVpTQmpZV3hzWldRZ1ltVm1iM0psSUc5d2FsOXpaWFJmWkdWamIyUmxaRjlqYjIxd2IyNWxiblJ6S0NrdUNnQk5aVzF2Y25rZ1lXeHNiMk5oZEdsdmJpQm1ZV2xzZFhKbElHbHVJRzl3YWw5cWNESmZZWEJ3YkhsZmNHTnNjaWdwTGdvQWFXMWhaMlV0UG1OdmJYQnpXeVZrWFM1a1lYUmhJRDA5SUU1VlRFd2dhVzRnYjNCcVgycHdNbDloY0hCc2VWOXdZMnh5S0NrdUNnQnBiblpoYkdsa0lHSnZlQ0J6YVhwbElDVmtJQ2dsZUNrS0FFWmhhV3dnZEc4Z2NtVmhaQ0IwYUdVZ1kzVnljbVZ1ZENCdFlYSnJaWElnYzJWbmJXVnVkQ0FvSlNONEtRb0FSWEp5YjNJZ2QybDBhQ0JUU1ZvZ2JXRnlhMlZ5T2lCSlNFUlNJSGNvSlhVcElHZ29KWFVwSUhaekxpQlRTVm9nZHlnbGRTa2dhQ2dsZFNrS0FFVnljbTl5SUhKbFlXUnBibWNnUTA5RElHMWhjbXRsY2lBb1ltRmtJRzUxYldKbGNpQnZaaUJqYjIxd2IyNWxiblJ6S1FvQVNXNTJZV3hwWkNCdWRXMWlaWElnYjJZZ2RHbHNaWE1nT2lBbGRTQjRJQ1YxSUNodFlYaHBiWFZ0SUdacGVHVmtJR0o1SUdwd1pXY3lNREF3SUc1dmNtMGdhWE1nTmpVMU16VWdkR2xzWlhNcENnQkpiblpoYkdsa0lHNTFiV0psY2lCdlppQmpiMjF3YjI1bGJuUnpJQ2hwYUdSeUtRb0FUbTkwSUdWdWIzVm5hQ0J0WlcxdmNua2dkRzhnYUdGdVpHeGxJR2x0WVdkbElHaGxZV1JsY2lBb2FXaGtjaWtLQUZkeWIyNW5JSFpoYkhWbGN5Qm1iM0k2SUhjb0pXUXBJR2dvSldRcElHNTFiV052YlhCektDVmtLU0FvYVdoa2Npa0tBRWx1ZG1Gc2FXUWdkbUZzZFdWeklHWnZjaUJqYjIxd0lEMGdKV1FnT2lCa2VEMGxkU0JrZVQwbGRTQW9jMmh2ZFd4a0lHSmxJR0psZEhkbFpXNGdNU0JoYm1RZ01qVTFJR0ZqWTI5eVpHbHVaeUIwYnlCMGFHVWdTbEJGUnpJd01EQWdibTl5YlNrS0FFSmhaQ0JwYldGblpTQm9aV0ZrWlhJZ1ltOTRJQ2hpWVdRZ2MybDZaU2tLQUVKaFpDQkRUMHhTSUdobFlXUmxjaUJpYjNnZ0tHSmhaQ0J6YVhwbEtRb0FRbUZrSUVKUVEwTWdhR1ZoWkdWeUlHSnZlQ0FvWW1Ga0lITnBlbVVwQ2dCRmNuSnZjaUIzYVhSb0lGTkpXaUJ0WVhKclpYSTZJRzVsWjJGMGFYWmxJRzl5SUhwbGNtOGdhVzFoWjJVZ2MybDZaU0FvSld4c1pDQjRJQ1ZzYkdRcENnQnphMmx3T2lCelpXZHRaVzUwSUhSdmJ5QnNiMjVuSUNnbFpDa2dkMmwwYUNCdFlYZ2dLQ1ZrS1NCbWIzSWdZMjlrWldKc2IyTnJJQ1ZrSUNod1BTVmtMQ0JpUFNWa0xDQnlQU1ZrTENCalBTVmtLUW9BY21WaFpEb2djMlZuYldWdWRDQjBiMjhnYkc5dVp5QW9KV1FwSUhkcGRHZ2diV0Y0SUNnbFpDa2dabTl5SUdOdlpHVmliRzlqYXlBbFpDQW9jRDBsWkN3Z1lqMGxaQ3dnY2owbFpDd2dZejBsWkNrS0FFUmxjM0JwZEdVZ1NsQXlJRUpRUXlFOU1qVTFMQ0J3Y21WamFYTnBiMjRnWVc1a0wyOXlJSE5uYm1RZ2RtRnNkV1Z6SUdadmNpQmpiMjF3V3lWa1hTQnBjeUJrYVdabVpYSmxiblFnZEdoaGJpQmpiMjF3V3pCZE9nb2dJQ0FnSUNBZ0lGc3dYU0J3Y21WaktDVmtLU0J6WjI1a0tDVmtLU0JiSldSZElIQnlaV01vSldRcElITm5ibVFvSldRcENnQmlZV1FnWTI5dGNHOXVaVzUwSUc1MWJXSmxjaUJwYmlCU1IwNGdLQ1ZrSUhkb1pXNGdkR2hsY21VZ1lYSmxJRzl1YkhrZ0pXUXBDZ0JGY25KdmNpQjNhWFJvSUZOSldpQnRZWEpyWlhJNklHNTFiV0psY2lCdlppQmpiMjF3YjI1bGJuUWdhWE1nYm05MElHTnZiWEJoZEdsaWJHVWdkMmwwYUNCMGFHVWdjbVZ0WVdsdWFXNW5JRzUxYldKbGNpQnZaaUJ3WVhKaGJXVjBaWEp6SUNnZ0pXUWdkbk1nSldRcENnQkZjbkp2Y2lCM2FYUm9JRk5KV2lCdFlYSnJaWEk2SUdsdWRtRnNhV1FnZEdsc1pTQnphWHBsSUNoMFpIZzZJQ1ZrTENCMFpIazZJQ1ZrS1FvQVFtRmtJRU5QVEZJZ2FHVmhaR1Z5SUdKdmVDQW9ZbUZrSUhOcGVtVTZJQ1ZrS1FvQVFtRmtJRU5QVEZJZ2FHVmhaR1Z5SUdKdmVDQW9RMGxGVEdGaUxDQmlZV1FnYzJsNlpUb2dKV1FwQ2dCUVZFVlNUU0JqYUdWamF5Qm1ZV2xzZFhKbE9pQWxaQ0J5WlcxaGFXNXBibWNnWW5sMFpYTWdhVzRnWTI5a1pTQmliRzlqYXlBb0pXUWdkWE5sWkNBdklDVmtLUW9BVFdGc1ptOXliV1ZrSUVoVUlHTnZaR1ZpYkc5amF5NGdUMjVsSUc5bUlIUm9aU0JtYjJ4c2IzZHBibWNnWTI5dVpHbDBhVzl1SUdseklHNXZkQ0J0WlhRNklESWdQRDBnVTJOMWNDQThQU0J0YVc0b1RHTjFjQ3dnTkRBM09Ta0tBRWx1ZG1Gc2FXUWdkbUZzZFdWeklHWnZjaUJqYjIxd0lEMGdKV1FnT2lCd2NtVmpQU1YxSUNoemFHOTFiR1FnWW1VZ1ltVjBkMlZsYmlBeElHRnVaQ0F6T0NCaFkyTnZjbVJwYm1jZ2RHOGdkR2hsSUVwUVJVY3lNREF3SUc1dmNtMHVJRTl3Wlc1S2NHVm5JRzl1YkhrZ2MzVndjRzl5ZEhNZ2RYQWdkRzhnTXpFcENnQkpiblpoYkdsa0lHSnBkQ0J1ZFcxaVpYSWdKV1FnYVc0Z2IzQnFYM1F5WDNKbFlXUmZjR0ZqYTJWMFgyaGxZV1JsY2lncENnQlRkSEpsWVcwZ1pYSnliM0loQ2dCRmNuSnZjaUJ2YmlCM2NtbDBhVzVuSUhOMGNtVmhiU0VLQUZOMGNtVmhiU0J5WldGamFHVmtJR2wwY3lCbGJtUWdJUW9BUlhod1pXTjBaV1FnWVNCVFQwTWdiV0Z5YTJWeUlBb0FTVzUyWVd4cFpDQmliM2dnYzJsNlpTQWxaQ0JtYjNJZ1ltOTRJQ2NsWXlWakpXTWxZeWN1SUU1bFpXUWdKV1FnWW5sMFpYTXNJQ1ZrSUdKNWRHVnpJSEpsYldGcGJtbHVaeUFLQUUxaGJHWnZjbTFsWkNCSVZDQmpiMlJsWW14dlkyc3VJRVJsWTI5a2FXNW5JSFJvYVhNZ1kyOWtaV0pzYjJOcklHbHpJSE4wYjNCd1pXUXVJRlZmY1NCcGN5QnNZWEpuWlhJZ2RHaGhiaUI2WlhKdklHSnBkSEJzWVc1bGN5QXJJREVnQ2dCTllXeG1iM0p0WldRZ1NGUWdZMjlrWldKc2IyTnJMaUJFWldOdlpHbHVaeUIwYUdseklHTnZaR1ZpYkc5amF5QnBjeUJ6ZEc5d2NHVmtMaUJWWDNFZ2FYTnNZWEpuWlhJZ2RHaGhiaUJpYVhSd2JHRnVaWE1nS3lBeElBb0FRMDlNVWlCQ1QxZ2diV1YwYUNCMllXeDFaU0JwY3lCdWIzUWdZU0J5WldkMWJHRnlJSFpoYkhWbElDZ2xaQ2tzSUhOdklIZGxJSGRwYkd3Z2FXZHViM0psSUhSb1pTQmxiblJwY21VZ1EyOXNiM1Z5SUZOd1pXTnBabWxqWVhScGIyNGdZbTk0TGlBS0FGZG9hV3hsSUhKbFlXUnBibWNnUTBOUVgxRk9WRk5VV1NCbGJHVnRaVzUwSUdsdWMybGtaU0JSUTBRZ2IzSWdVVU5ESUcxaGNtdGxjaUJ6WldkdFpXNTBMQ0J1ZFcxaVpYSWdiMllnYzNWaVltRnVaSE1nS0NWa0tTQnBjeUJuY21WaGRHVnlJSFJ2SUU5UVNsOUtNa3RmVFVGWVFrRk9SRk1nS0NWa0tTNGdVMjhnZDJVZ2JHbHRhWFFnZEdobElHNTFiV0psY2lCdlppQmxiR1Z0Wlc1MGN5QnpkRzl5WldRZ2RHOGdUMUJLWDBveVMxOU5RVmhDUVU1RVV5QW9KV1FwSUdGdVpDQnphMmx3SUhSb1pTQnlaWE4wTGlBS0FFcFFNaUJKU0VSU0lHSnZlRG9nWTI5dGNISmxjM05wYjI0Z2RIbHdaU0JwYm1ScFkyRjBaU0IwYUdGMElIUm9aU0JtYVd4bElHbHpJRzV2ZENCaElHTnZibVp2Y20xcGJtY2dTbEF5SUdacGJHVWdLQ1ZrS1NBS0FGUnBiR1VnYVc1a1pYZ2djSEp2ZG1sa1pXUWdZbmtnZEdobElIVnpaWElnYVhNZ2FXNWpiM0p5WldOMElDVmtJQ2h0WVhnZ1BTQWxaQ2tnQ2dCRmNuSnZjaUJrWldOdlpHbHVaeUJqYjIxd2IyNWxiblFnSldRdUNsUm9aU0J1ZFcxaVpYSWdiMllnY21WemIyeDFkR2x2Ym5NZ2RHOGdjbVZ0YjNabElDZ2xaQ2tnYVhNZ1ozSmxZWFJsY2lCdmNpQmxjWFZoYkNCMGFHRnVJSFJvWlNCdWRXMWlaWElnYjJZZ2NtVnpiMngxZEdsdmJuTWdiMllnZEdocGN5QmpiMjF3YjI1bGJuUWdLQ1ZrS1FwTmIyUnBabmtnZEdobElHTndYM0psWkhWalpTQndZWEpoYldWMFpYSXVDZ29BU1cxaFoyVWdaR0YwWVNCb1lYTWdZbVZsYmlCMWNHUmhkR1ZrSUhkcGRHZ2dkR2xzWlNBbFpDNEtDZ0JCb1AwQUM0QWdJd0NsQUVNQVpnQ0RBTzZvRkFEZjJDTUF2aEJEQVAvMWd3QitJRlVBWDFFakFEVUFRd0JPUklNQXpzUVVBTS9NSXdEKzRrTUEvNW1EQUpZQXhRQS9NU01BcFFCREFGNUVnd0RPeUJRQTN4RWpBUDcwUXdELy9JTUFuZ0JWQUhjQUl3QTFBRU1BLy9HREFLNklGQUMzQUNNQS92aERBTy9rZ3dDT2lNVUFIeEVqQUtVQVF3Qm1BSU1BN3FnVUFOOVVJd0MrRUVNQTd5S0RBSDRnVlFCL0lpTUFOUUJEQUU1RWd3RE94QlFBdnhFakFQN2lRd0QzQUlNQWxnREZBRDhpSXdDbEFFTUFYa1NEQU03SUZBRFhBQ01BL3ZSREFQKzZnd0NlQUZVQWJ3QWpBRFVBUXdELzVvTUFyb2dVQUsraUl3RCsrRU1BNXdDREFJNkl4UUF2SWdJQXhRQ0VBSDRnQWdET3hDUUE5d0FDQVA2aVJBQldBQUlBbmdBVUFOY0FBZ0MrRUlRQVpnQUNBSzZJSkFEZkVRSUE3cWhFQURZQUFnQ09pQlFBSHhFQ0FNVUFoQUJ1QUFJQXpvZ2tBUCtJQWdEK3VFUUFUa1FDQUpZQUZBQzNBQUlBL3VTRUFGNUVBZ0NtQUNRQTV3QUNBTjVVUkFBdUlnSUFQZ0FVQUhjQUFnREZBSVFBZmlBQ0FNN0VKQUQvOFFJQS9xSkVBRllBQWdDZUFCUUF2eEVDQUw0UWhBQm1BQUlBcm9na0FPOGlBZ0R1cUVRQU5nQUNBSTZJRkFCL0lnSUF4UUNFQUc0QUFnRE9pQ1FBNytRQ0FQNjRSQUJPUkFJQWxnQVVBSytpQWdEKzVJUUFYa1FDQUtZQUpBRGYyQUlBM2xSRUFDNGlBZ0ErQUJRQVgxRUNBRlVBaEFCbUFBSUEzb2drQVA4eUFnRCtFVVFBVGtRQ0FLNEFGQUMzQUFJQWZqR0VBRjVSQWdER0FDUUExd0FDQU80Z1JBQWVFUUlBbmdBVUFIY0FBZ0JWQUlRQVhsUUNBTTVFSkFEbkFBSUEvdkZFQURZQUFnQ21BQlFBWDFVQ0FQNTBoQUErRVFJQXZpQWtBSDkwQWdEZXhFUUEvL2dDQUpZQUZBQXZJZ0lBVlFDRUFHWUFBZ0RlaUNRQTl3QUNBUDRSUkFCT1JBSUFyZ0FVQUkrSUFnQitNWVFBWGxFQ0FNWUFKQURQeUFJQTdpQkVBQjRSQWdDZUFCUUFid0FDQUZVQWhBQmVWQUlBemtRa0FOL1JBZ0QrOFVRQU5nQUNBS1lBRkFCL0lnSUEvblNFQUQ0UkFnQytJQ1FBdnlJQ0FON0VSQUR2SWdJQWxnQVVBRDh5QXdEZTFQMzAvL3dVQUQ0UlZRQ1BpQU1BdmpLRkFPY0FKUUJlVWY2cWYzSURBTTVFL2ZqdlJCUUFmbVJGQUsraUF3Q21BRjFWMzVuOThUWUEvdlZ2WWdNQTN0SDk5UC9tRkFCK2NWVUF2N0VEQUs2SWhRRGYxU1VBVGtUKzhuOW1Bd0RHQVAzNDcrSVVBRjVVUlFDZkVRTUFsZ0JkVmMvSS9mRWVFZTdJWndBREFON1UvZlQvOHhRQVBoRlZBTDhSQXdDK01vVUEzOWdsQUY1Ui9xb3ZJZ01BemtUOStQY0FGQUIrWkVVQW41Z0RBS1lBWFZYWEFQM3hOZ0QrOVc5RUF3RGUwZjMwLzdrVUFINXhWUUMzQUFNQXJvaUZBTi9jSlFCT1JQN3lkd0FEQU1ZQS9manY1QlFBWGxSRkFIOXpBd0NXQUYxVnY3ajk4UjRSN3NnL01nSUFwUUNFQUg1QUFnRGVFQ1FBM3hFQ0FQNXlSQUJXQUFJQXJxZ1VBTCt5QWdDV0FJUUFaZ0FDQU1ZQUpBRG5BQUlBN3NoRUFDNGlBZ0NPaUJRQWR3QUNBS1VBaEFCdUFBSUF6b2drQVBjQUFnRCtrVVFBTmdBQ0FLNmlGQUN2cWdJQS9yaUVBRjRBQWdDK0FDUUF6OFFDQU81RVJBRC85QUlBUGlJVUFCOFJBZ0NsQUlRQWZrQUNBTjRRSkFEL21RSUEvbkpFQUZZQUFnQ3VxQlFBdHdBQ0FKWUFoQUJtQUFJQXhnQWtBTmNBQWdEdXlFUUFMaUlDQUk2SUZBQlBSQUlBcFFDRUFHNEFBZ0RPaUNRQTcrSUNBUDZSUkFBMkFBSUFycUlVQUg5RUFnRCt1SVFBWGdBQ0FMNEFKQUNmQUFJQTdrUkVBUDkyQWdBK0loUUFQekVEQU1ZQWhRRC8yZjN5Zm1UKzhiK1pBd0N1b2lVQTcyYjk5RllBN3VKL2N3TUF2cGhGQVBjQS9maG1BUDUybjRnREFJNklGUURmMWFVQUxpTGVtRTlFQXdDK3NvVUEvL3o5OG00aWxnQzNBQU1BcnFvbEFOL1IvZlEyQU43VWIyUURBSzZvUlFEdjZ2MzRYa1R1Nkg5eEF3QStNaFVBejhTbEFQLzZ6b2cvTVFNQXhnQ0ZBUDkzL2ZKK1pQN3h2N01EQUs2aUpRRG5BUDMwVmdEdTRuY0FBd0MrbUVVQTcrVDkrR1lBL25aL1pnTUFqb2dWQU5jQXBRQXVJdDZZUHpNREFMNnloUUQvZGYzeWJpS1dBSitSQXdDdXFpVUEzNW45OURZQTN0UmZVUU1BcnFoRkFPL3MvZmhlUk83b2YzSURBRDR5RlFDL3NhVUEvL1BPaUI4UkF3RGVWUDN5SGhFVUFINWsvdmpQekFNQXZwRkZBTzhpSlFBdUl2N3pqNGdEQU1ZQWhRRDNBQlFBWGhIKy9LK29Bd0NtQURVQTM4ajk4VDR4L21adlpBTUF6c2o5OHYvMUZBQm1BUDcwdjdvREFLNGlSUURuQUNVQVBqTCs2bjl6QXdDK3NvVUEzMVVVQUZZQWZuR2ZFUU1BbGdBMUFNL0UvZkUrTSs3b1QwUURBTjVVL2ZJZUVSUUFmbVQrK0wrWkF3QytrVVVBNytJbEFDNGkvdk4vWmdNQXhnQ0ZBTy9rRkFCZUVmNzhuNWdEQUtZQU5RRFhBUDN4UGpIK1ptOGlBd0RPeVAzeS83a1VBR1lBL3ZTM0FBTUFyaUpGQU4vUkpRQStNdjdxZHdBREFMNnloUUR2N0JRQVZnQitjWDl5QXdDV0FEVUF2N2o5OFQ0ejd1aGZWUHp4M3RIOSt0Y0EvUGdXQVAzL2YzVDg5SDV4L2ZPL3Mvenk3K3J1NkU5RS9QR3VJZ1VBdjdqOCtQY0EvdngzQVB6MFhoSDk5WDkxL1BMZjJPN2lQelA4OGI2eS9mclBpUHo0Ly92OS8zOXovUFJ1QVAzenR3RDg4dTltL3ZrL01menhuZ0FGQUwrNi9Qai8vZjcyWndEODlDWUEvZldQaVB6eTM5emUxQzhpL1BIZTBmMzZ6OFQ4K0JZQS9mOS9jdnowZm5IOTg3K1ovUEx2N083b1J3RDg4YTRpQlFDbkFQejQvL2YrL0ZjQS9QUmVFZjMxbHdEODh0L1Y3dUkzQVB6eHZyTDkrc2NBL1BqLy92My9mMmI4OUc0QS9mT3ZxUHp5NXdEKytUOHkvUEdlQUFVQXY3SDgrTy9rL3ZaZlZQejBKZ0Q5OVljQS9QTGZtZDdVSHhFVEFHVUFRd0RlQUlNQWpZZ2pBRTVFRXdDbEFFTUFyb2lEQURVQUl3RFhBQk1BeFFCREFKNEFnd0JWQUNNQUxpSVRBSlVBUXdCK0FJTUEvaEFqQUhjQUV3QmxBRU1Bem9pREFJMklJd0FlRVJNQXBRQkRBRjRBZ3dBMUFDTUE1d0FUQU1VQVF3QytBSU1BVlFBakFQOFJFd0NWQUVNQVBnQ0RBTzVBSXdDdm9oTUFaUUJEQU40QWd3Q05pQ01BVGtRVEFLVUFRd0N1aUlNQU5RQWpBTzlFRXdERkFFTUFuZ0NEQUZVQUl3QXVJaE1BbFFCREFINEFnd0QrRUNNQXR3QVRBR1VBUXdET2lJTUFqWWdqQUI0UkV3Q2xBRU1BWGdDREFEVUFJd0RQeEJNQXhRQkRBTDRBZ3dCVkFDTUE5d0FUQUpVQVF3QStBSU1BN2tBakFHOEFBUUNFQUFFQVZnQUJBQlFBQVFEWEFBRUFKQUFCQUpZQUFRQkZBQUVBZHdBQkFJUUFBUURHQUFFQUZBQUJBSStJQVFBa0FBRUE5d0FCQURVQUFRQXZJZ0VBaEFBQkFQNUFBUUFVQUFFQXR3QUJBQ1FBQVFDL0FBRUFSUUFCQUdjQUFRQ0VBQUVBcGdBQkFCUUFBUUJQUkFFQUpBQUJBT2NBQVFBMUFBRUFQeEVCQUlRQUFRQldBQUVBRkFBQkFNOEFBUUFrQUFFQWxnQUJBRVVBQVFCdkFBRUFoQUFCQU1ZQUFRQVVBQUVBbndBQkFDUUFBUUR2QUFFQU5RQUJBRDh5QVFDRUFBRUEva0FCQUJRQUFRQ3ZBQUVBSkFBQkFQOUVBUUJGQUFFQVh3QUJBSVFBQVFDbUFBRUFGQUFCQUg4QUFRQWtBQUVBM3dBQkFEVUFBUUFmRVFFQUpBQUJBRllBQVFDRkFBRUF2d0FCQUJRQUFRRDNBQUVBeGdBQkFIY0FBUUFrQUFFQS8vZ0JBRVVBQVFCL0FBRUFGQUFCQU44QUFRQ21BQUVBUHpFQkFDUUFBUUF1SWdFQWhRQUJBTGNBQVFBVUFBRUE3MFFCQUs2aUFRQm5BQUVBSkFBQkFQOVJBUUJGQUFFQWx3QUJBQlFBQVFEUEFBRUFOZ0FCQUQ4aUFRQWtBQUVBVmdBQkFJVUFBUUMvc2dFQUZBQUJBTzlBQVFER0FBRUFid0FCQUNRQUFRRC9jZ0VBUlFBQkFKOEFBUUFVQUFFQTF3QUJBS1lBQVFCUFJBRUFKQUFCQUM0aUFRQ0ZBQUVBcjZnQkFCUUFBUURuQUFFQXJxSUJBRjhBQVFBa0FBRUEvMFFCQUVVQUFRQ1BpQUVBRkFBQkFLK3FBUUEyQUFFQUh4RUNBUDc0SkFCV0FBSUF0Z0NGQVA5bUFnRE9BQlFBSGhFQ0FKWUFOUUN2cUFJQTlnQWtBRDR4QWdDbUFFVUF2N01DQUw2eUZBRC85UUlBWmdCK1VWOVVBZ0QrOGlRQUxpSUNBSzRpaFFEdlJBSUF4Z0FVQVAvMEFnQjJBRFVBZjBRQ0FONUFKQUErTWdJQW5nQkZBTmNBQWdDK2lCUUEvL29DQUY0Ui92RlBSQUlBL3Zna0FGWUFBZ0MyQUlVQTc4Z0NBTTRBRkFBZUVRSUFsZ0ExQUkrSUFnRDJBQ1FBUGpFQ0FLWUFSUURmUkFJQXZySVVBUCtvQWdCbUFINVJid0FDQVA3eUpBQXVJZ0lBcmlLRkFPY0FBZ0RHQUJRQTcrSUNBSFlBTlFCL2NnSUEza0FrQUQ0eUFnQ2VBRVVBdjdFQ0FMNklGQUQvY3dJQVhoSCs4VDh6QVFDRUFBRUE3aUFCQU1VQUFRRFB4QUVBUkFBQkFQOHlBUUFWQUFFQWo0Z0JBSVFBQVFCbUFBRUFKUUFCQUs4QUFRQkVBQUVBN3lJQkFLWUFBUUJmQUFFQWhBQUJBRTVFQVFERkFBRUF6OHdCQUVRQUFRRDNBQUVBRlFBQkFHOEFBUUNFQUFFQVZnQUJBQ1VBQVFDZkFBRUFSQUFCQU44QUFRRCtNQUVBTHlJQkFJUUFBUUR1SUFFQXhRQUJBTS9JQVFCRUFBRUEveEVCQUJVQUFRQjNBQUVBaEFBQkFHWUFBUUFsQUFFQWZ3QUJBRVFBQVFEbkFBRUFwZ0FCQURjQUFRQ0VBQUVBVGtRQkFNVUFBUUMzQUFFQVJBQUJBTDhBQVFBVkFBRUFQd0FCQUlRQUFRQldBQUVBSlFBQkFKY0FBUUJFQUFFQTF3QUJBUDR3QVFBZkVRSUE3cWhFQUk2SUFnRFdBTVVBLy9NQ0FQNzhKUUErQUFJQXRnQlZBTi9ZQWdEKytFUUFaZ0FDQUg0Z2hRRC9tUUlBNWdEMUFEWUFBZ0NtQUJVQW53QUNBUDd5UkFCMkFBSUF6a1RGQVA5MkFnRCs4U1VBVGtRQ0FLNEFWUURQeUFJQS92UkVBRjVFQWdDK0VJVUE3K1FDQU41VTlRQWVFUUlBbGdBVkFDOGlBZ0R1cUVRQWpvZ0NBTllBeFFELytnSUEvdndsQUQ0QUFnQzJBRlVBdnhFQ0FQNzRSQUJtQUFJQWZpQ0ZBTzhpQWdEbUFQVUFOZ0FDQUtZQUZRQi9JZ0lBL3ZKRUFIWUFBZ0RPUk1VQS85VUNBUDd4SlFCT1JBSUFyZ0JWQUc4QUFnRCs5RVFBWGtRQ0FMNFFoUURmRVFJQTNsVDFBQjRSQWdDV0FCVUFYMUVEQVBZQUZBQWVFVVFBam9pbEFOL1VBd0N1b2xVQS8zWWtBRDRpdGdDdnFnTUE1Z0FVQVAvMVJBQm1BSVVBejh3REFKNEF4UUR2UkNRQU5nRCsrSDh4QXdEdTZCUUEvL0ZFQUhZQXBRRFB4QU1BZmlKVkFOL1JKQUJPUlA3MFgxRURBTllBRkFEdjRrUUFYa1NGQUw4aUF3Q1dBTVVBMzhna0FDNGkvdkp2SWdNQTlnQVVBQjRSUkFDT2lLVUF2N0VEQUs2aVZRRC9NeVFBUGlLMkFLK29Bd0RtQUJRQS83bEVBR1lBaFFDL3FBTUFuZ0RGQU8va0pBQTJBUDc0YjJRREFPN29GQUQvL0VRQWRnQ2xBTS9JQXdCK0lsVUE3K29rQUU1RS92Ui9kQU1BMWdBVUFQLzZSQUJlUklVQXY3SURBSllBeFFEZlJDUUFMaUwrOGo4eDh3RCsrdjN4TmdBRUFMNHlkUURmRWZNQTNsVDk4dS9rMVFCK2NmNzhmM1B6QVA3ei9mZ2VFUVFBbGdCVkFMK3g4d0RPQUxVQTM5ajk5R1lBL3JsZlZQTUEvbmI5OFNZQUJBQ21BSFVBbndEekFLNEEvZkwvOTlVQVJnRCs5WDkwOHdEbUFQMzRGZ0FFQUlZQVZRQ1BpUE1BeGdDMUFPL2kvZlJlRWU2b1B4SHpBUDc2L2ZFMkFBUUF2akoxQU4vUjh3RGVWUDN5Ly92VkFINXgvdngvUlBNQS92UDkrQjRSQkFDV0FGVUFmM0x6QU00QXRRRHZJdjMwWmdEK3VVOUU4d0QrZHYzeEpnQUVBS1lBZFFDL0VmTUFyZ0Q5OHYvLzFRQkdBUDcxUHpMekFPWUEvZmdXQUFRQWhnQlZBRzhBOHdER0FMVUF2N2o5OUY0UjdxZ3ZJZ0JCckowQkM2UWVBUUFBQUFFQUFBQUJBQUFBQWdBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCUUFBQUxjaFFpRm5JVUloRVJFUkVUTXpNek4zZDNkM0FBQUFBQUFBQUFBQlZnQUFBQUFBQUJCUEFBQWdUd0FBQVZZQUFBRUFBQUFnVHdBQUVFOEFBQUUwQUFBQUFBQUFNRThBQUxCUEFBQUJOQUFBQVFBQUFFQlBBQURBVHdBQUFSZ0FBQUFBQUFCUVR3QUFFRkFBQUFFWUFBQUJBQUFBWUU4QUFDQlFBQURCQ2dBQUFBQUFBSEJQQUFCd1VBQUF3UW9BQUFFQUFBQ0FUd0FBZ0ZBQUFDRUZBQUFBQUFBQWtFOEFBSkJTQUFBaEJRQUFBUUFBQUtCUEFBQ2dVZ0FBSVFJQUFBQUFBQUN3VXdBQUVGTUFBQ0VDQUFBQkFBQUF3Rk1BQUNCVEFBQUJWZ0FBQUFBQUFOQlBBQURBVHdBQUFWWUFBQUVBQUFEZ1R3QUFzRThBQUFGVUFBQUFBQUFBOEU4QUFMQlFBQUFCVkFBQUFRQUFBQUJRQUFEQVVBQUFBVWdBQUFBQUFBQVFVQUFBc0ZBQUFBRklBQUFCQUFBQUlGQUFBTUJRQUFBQk9BQUFBQUFBQURCUUFBQ3dVQUFBQVRnQUFBRUFBQUJBVUFBQXdGQUFBQUV3QUFBQUFBQUFVRkFBQUJCUkFBQUJNQUFBQVFBQUFHQlFBQUFnVVFBQUFTUUFBQUFBQUFCd1VBQUFNRkVBQUFFa0FBQUJBQUFBZ0ZBQUFFQlJBQUFCSEFBQUFBQUFBSkJRQUFCd1VRQUFBUndBQUFFQUFBQ2dVQUFBZ0ZFQUFBRVdBQUFBQUFBQWtGSUFBSkJSQUFBQkZnQUFBUUFBQUtCU0FBQ2dVUUFBQVZZQUFBQUFBQURRVUFBQXdGQUFBQUZXQUFBQkFBQUE0RkFBQUxCUUFBQUJWQUFBQUFBQUFQQlFBQUN3VUFBQUFWUUFBQUVBQUFBQVVRQUF3RkFBQUFGUkFBQUFBQUFBRUZFQUFOQlFBQUFCVVFBQUFRQUFBQ0JSQUFEZ1VBQUFBVWdBQUFBQUFBQXdVUUFBOEZBQUFBRklBQUFCQUFBQVFGRUFBQUJSQUFBQk9BQUFBQUFBQUZCUkFBQVFVUUFBQVRnQUFBRUFBQUJnVVFBQUlGRUFBQUUwQUFBQUFBQUFjRkVBQURCUkFBQUJOQUFBQVFBQUFJQlJBQUJBVVFBQUFUQUFBQUFBQUFDUVVRQUFVRkVBQUFFd0FBQUJBQUFBb0ZFQUFHQlJBQUFCS0FBQUFBQUFBTEJSQUFCUVVRQUFBU2dBQUFFQUFBREFVUUFBWUZFQUFBRWtBQUFBQUFBQTBGRUFBSEJSQUFBQkpBQUFBUUFBQU9CUkFBQ0FVUUFBQVNJQUFBQUFBQUR3VVFBQWtGRUFBQUVpQUFBQkFBQUFBRklBQUtCUkFBQUJIQUFBQUFBQUFCQlNBQUN3VVFBQUFSd0FBQUVBQUFBZ1VnQUF3RkVBQUFFWUFBQUFBQUFBTUZJQUFOQlJBQUFCR0FBQUFRQUFBRUJTQUFEZ1VRQUFBUllBQUFBQUFBQlFVZ0FBOEZFQUFBRVdBQUFCQUFBQVlGSUFBQUJTQUFBQkZBQUFBQUFBQUhCU0FBQVFVZ0FBQVJRQUFBRUFBQUNBVWdBQUlGSUFBQUVTQUFBQUFBQUFrRklBQURCU0FBQUJFZ0FBQVFBQUFLQlNBQUJBVWdBQUFSRUFBQUFBQUFDd1VnQUFVRklBQUFFUkFBQUJBQUFBd0ZJQUFHQlNBQURCQ2dBQUFBQUFBTkJTQUFCd1VnQUF3UW9BQUFFQUFBRGdVZ0FBZ0ZJQUFNRUpBQUFBQUFBQThGSUFBSkJTQUFEQkNRQUFBUUFBQUFCVEFBQ2dVZ0FBb1FnQUFBQUFBQUFRVXdBQXNGSUFBS0VJQUFBQkFBQUFJRk1BQU1CU0FBQWhCUUFBQUFBQUFEQlRBQURRVWdBQUlRVUFBQUVBQUFCQVV3QUE0RklBQUVFRUFBQUFBQUFBVUZNQUFQQlNBQUJCQkFBQUFRQUFBR0JUQUFBQVV3QUFvUUlBQUFBQUFBQndVd0FBRUZNQUFLRUNBQUFCQUFBQWdGTUFBQ0JUQUFBaEFnQUFBQUFBQUpCVEFBQXdVd0FBSVFJQUFBRUFBQUNnVXdBQVFGTUFBRUVCQUFBQUFBQUFzRk1BQUZCVEFBQkJBUUFBQVFBQUFNQlRBQUJnVXdBQUVRRUFBQUFBQUFEUVV3QUFjRk1BQUJFQkFBQUJBQUFBNEZNQUFJQlRBQUNGQUFBQUFBQUFBUEJUQUFDUVV3QUFoUUFBQUFFQUFBQUFWQUFBb0ZNQUFFa0FBQUFBQUFBQUVGUUFBTEJUQUFCSkFBQUFBUUFBQUNCVUFBREFVd0FBSlFBQUFBQUFBQUF3VkFBQTBGTUFBQ1VBQUFBQkFBQUFRRlFBQU9CVEFBQVZBQUFBQUFBQUFGQlVBQUR3VXdBQUZRQUFBQUVBQUFCZ1ZBQUFBRlFBQUFrQUFBQUFBQUFBY0ZRQUFCQlVBQUFKQUFBQUFRQUFBSUJVQUFBZ1ZBQUFCUUFBQUFBQUFBQ1FWQUFBTUZRQUFBVUFBQUFCQUFBQW9GUUFBRUJVQUFBQkFBQUFBQUFBQUpCVUFBQlFWQUFBQVFBQUFBRUFBQUNnVkFBQVlGUUFBQUZXQUFBQUFBQUFzRlFBQUxCVUFBQUJWZ0FBQVFBQUFNQlVBQURBVkFBQUFBRURBd0VDQXdNRkJnY0hCZ1lIQndBQkF3TUJBZ01EQlFZSEJ3WUdCd2NGQmdjSEJnWUhCd2dJQ0FnSUNBZ0lCUVlIQndZR0J3Y0lDQWdJQ0FnSUNBRUNBd01DQWdNREJnWUhCd1lHQndjQkFnTURBZ0lEQXdZR0J3Y0dCZ2NIQmdZSEJ3WUdCd2NJQ0FnSUNBZ0lDQVlHQndjR0JnY0hDQWdJQ0FnSUNBZ0RBd1FFQXdNRUJBY0hCd2NIQndjSEF3TUVCQU1EQkFRSEJ3Y0hCd2NIQndjSEJ3Y0hCd2NIQ0FnSUNBZ0lDQWdIQndjSEJ3Y0hCd2dJQ0FnSUNBZ0lBd01FQkFNREJBUUhCd2NIQndjSEJ3TURCQVFEQXdRRUJ3Y0hCd2NIQndjSEJ3Y0hCd2NIQndnSUNBZ0lDQWdJQndjSEJ3Y0hCd2NJQ0FnSUNBZ0lDQUVDQXdNQ0FnTURCZ1lIQndZR0J3Y0JBZ01EQWdJREF3WUdCd2NHQmdjSEJnWUhCd1lHQndjSUNBZ0lDQWdJQ0FZR0J3Y0dCZ2NIQ0FnSUNBZ0lDQWdDQWdNREFnSURBd1lHQndjR0JnY0hBZ0lEQXdJQ0F3TUdCZ2NIQmdZSEJ3WUdCd2NHQmdjSENBZ0lDQWdJQ0FnR0JnY0hCZ1lIQndnSUNBZ0lDQWdJQXdNRUJBTURCQVFIQndjSEJ3Y0hCd01EQkFRREF3UUVCd2NIQndjSEJ3Y0hCd2NIQndjSEJ3Z0lDQWdJQ0FnSUJ3Y0hCd2NIQndjSUNBZ0lDQWdJQ0FNREJBUURBd1FFQndjSEJ3Y0hCd2NEQXdRRUF3TUVCQWNIQndjSEJ3Y0hCd2NIQndjSEJ3Y0lDQWdJQ0FnSUNBY0hCd2NIQndjSENBZ0lDQWdJQ0FnQUFRVUdBUUlHQmdNREJ3Y0RBd2NIQUFFRkJnRUNCZ1lEQXdjSEF3TUhCd01EQndjREF3Y0hCQVFIQndRRUJ3Y0RBd2NIQXdNSEJ3UUVCd2NFQkFjSEFRSUdCZ0lDQmdZREF3Y0hBd01IQndFQ0JnWUNBZ1lHQXdNSEJ3TURCd2NEQXdjSEF3TUhCd1FFQndjRUJBY0hBd01IQndNREJ3Y0VCQWNIQkFRSEJ3VUdDQWdHQmdnSUJ3Y0lDQWNIQ0FnRkJnZ0lCZ1lJQ0FjSENBZ0hCd2dJQndjSUNBY0hDQWdIQndnSUJ3Y0lDQWNIQ0FnSEJ3Z0lCd2NJQ0FjSENBZ0dCZ2dJQmdZSUNBY0hDQWdIQndnSUJnWUlDQVlHQ0FnSEJ3Z0lCd2NJQ0FjSENBZ0hCd2dJQndjSUNBY0hDQWdIQndnSUJ3Y0lDQWNIQ0FnSEJ3Z0lBUUlHQmdJQ0JnWURBd2NIQXdNSEJ3RUNCZ1lDQWdZR0F3TUhCd01EQndjREF3Y0hBd01IQndRRUJ3Y0VCQWNIQXdNSEJ3TURCd2NFQkFjSEJBUUhCd0lDQmdZQ0FnWUdBd01IQndNREJ3Y0NBZ1lHQWdJR0JnTURCd2NEQXdjSEF3TUhCd01EQndjRUJBY0hCQVFIQndNREJ3Y0RBd2NIQkFRSEJ3UUVCd2NHQmdnSUJnWUlDQWNIQ0FnSEJ3Z0lCZ1lJQ0FZR0NBZ0hCd2dJQndjSUNBY0hDQWdIQndnSUJ3Y0lDQWNIQ0FnSEJ3Z0lCd2NJQ0FjSENBZ0hCd2dJQmdZSUNBWUdDQWdIQndnSUJ3Y0lDQVlHQ0FnR0JnZ0lCd2NJQ0FjSENBZ0hCd2dJQndjSUNBY0hDQWdIQndnSUJ3Y0lDQWNIQ0FnSEJ3Z0lCd2NJQ0FBQkF3TUJBZ01EQlFZSEJ3WUdCd2NBQVFNREFRSURBd1VHQndjR0JnY0hCUVlIQndZR0J3Y0lDQWdJQ0FnSUNBVUdCd2NHQmdjSENBZ0lDQWdJQ0FnQkFnTURBZ0lEQXdZR0J3Y0dCZ2NIQVFJREF3SUNBd01HQmdjSEJnWUhCd1lHQndjR0JnY0hDQWdJQ0FnSUNBZ0dCZ2NIQmdZSEJ3Z0lDQWdJQ0FnSUF3TUVCQU1EQkFRSEJ3Y0hCd2NIQndNREJBUURBd1FFQndjSEJ3Y0hCd2NIQndjSEJ3Y0hCd2dJQ0FnSUNBZ0lCd2NIQndjSEJ3Y0lDQWdJQ0FnSUNBTURCQVFEQXdRRUJ3Y0hCd2NIQndjREF3UUVBd01FQkFjSEJ3Y0hCd2NIQndjSEJ3Y0hCd2NJQ0FnSUNBZ0lDQWNIQndjSEJ3Y0hDQWdJQ0FnSUNBZ0JBZ01EQWdJREF3WUdCd2NHQmdjSEFRSURBd0lDQXdNR0JnY0hCZ1lIQndZR0J3Y0dCZ2NIQ0FnSUNBZ0lDQWdHQmdjSEJnWUhCd2dJQ0FnSUNBZ0lBZ0lEQXdJQ0F3TUdCZ2NIQmdZSEJ3SUNBd01DQWdNREJnWUhCd1lHQndjR0JnY0hCZ1lIQndnSUNBZ0lDQWdJQmdZSEJ3WUdCd2NJQ0FnSUNBZ0lDQU1EQkFRREF3UUVCd2NIQndjSEJ3Y0RBd1FFQXdNRUJBY0hCd2NIQndjSEJ3Y0hCd2NIQndjSUNBZ0lDQWdJQ0FjSEJ3Y0hCd2NIQ0FnSUNBZ0lDQWdEQXdRRUF3TUVCQWNIQndjSEJ3Y0hBd01FQkFNREJBUUhCd2NIQndjSEJ3Y0hCd2NIQndjSENBZ0lDQWdJQ0FnSEJ3Y0hCd2NIQndnSUNBZ0lDQWdJQUFNQkJBTUdCQWNCQkFJRkJBY0ZCd0FEQVFRREJnUUhBUVFDQlFRSEJRY0JCQUlGQkFjRkJ3SUZBZ1VGQndVSEFRUUNCUVFIQlFjQ0JRSUZCUWNGQndNR0JBY0dDQWNJQkFjRkJ3Y0lCd2dEQmdRSEJnZ0hDQVFIQlFjSENBY0lCQWNGQndjSUJ3Z0ZCd1VIQndnSENBUUhCUWNIQ0FjSUJRY0ZCd2NJQndnQkJBSUZCQWNGQndJRkFnVUZCd1VIQVFRQ0JRUUhCUWNDQlFJRkJRY0ZCd0lGQWdVRkJ3VUhBZ1VDQlFVSEJRY0NCUUlGQlFjRkJ3SUZBZ1VGQndVSEJBY0ZCd2NJQndnRkJ3VUhCd2dIQ0FRSEJRY0hDQWNJQlFjRkJ3Y0lCd2dGQndVSEJ3Z0hDQVVIQlFjSENBY0lCUWNGQndjSUJ3Z0ZCd1VIQndnSENBTUdCQWNHQ0FjSUJBY0ZCd2NJQndnREJnUUhCZ2dIQ0FRSEJRY0hDQWNJQkFjRkJ3Y0lCd2dGQndVSEJ3Z0hDQVFIQlFjSENBY0lCUWNGQndjSUJ3Z0dDQWNJQ0FnSUNBY0lCd2dJQ0FnSUJnZ0hDQWdJQ0FnSENBY0lDQWdJQ0FjSUJ3Z0lDQWdJQndnSENBZ0lDQWdIQ0FjSUNBZ0lDQWNJQndnSUNBZ0lCQWNGQndjSUJ3Z0ZCd1VIQndnSENBUUhCUWNIQ0FjSUJRY0ZCd2NJQndnRkJ3VUhCd2dIQ0FVSEJRY0hDQWNJQlFjRkJ3Y0lCd2dGQndVSEJ3Z0hDQWNJQndnSUNBZ0lCd2dIQ0FnSUNBZ0hDQWNJQ0FnSUNBY0lCd2dJQ0FnSUJ3Z0hDQWdJQ0FnSENBY0lDQWdJQ0FjSUJ3Z0lDQWdJQndnSENBZ0lDQWdKQ1FvS0NRa0tDZ3dNRFFzTURBMExDUWtLQ2drSkNnb01EQXNOREF3TERRd01EUTBNREFzTERBa05DZ2tNQ2dzTURBc0xEQXdORFF3SkN3b0pEQW9OQ1FrS0Nna0pDZ29NREEwTERBd05Dd2tKQ2dvSkNRb0tEQXdMRFF3TUN3ME1EQTBOREF3TEN3d0pEUW9KREFvTERBd0xDd3dNRFEwTUNRc0tDUXdLRFFvS0Nnb0tDZ29LRFFzTkN3MExEUXNLQ2drSkNnb0pDUTBMREF3TkN3d01EUTBORFFzTEN3c05DZzBLQ2dzS0N3ME5EQXdMQ3d3TURRb01DUW9MQ1F3S0Nna0pDZ29KQ1FzTkRBd0xEUXdNQ2dvS0Nnb0tDZ29MRFFzTkN3MExEUXNMREF3TkRRd01Dd29NQ1FvTkNRd0xDd3NMRFEwTkRRc0tDd29LRFFvTkFFSFp1d0VMTndFQUFRQUJBQUVBQUFFQkFBQUJBUUFCQUFFQUFRQUJBQUFBQUFFQkFRRUFBQUFBQUFFQUFRQUFBQUFCQVFFQkFBQUFBUUFCQVFFQVFabThBUXMzQVFBQkFBRUFBUUFBQVFFQUFBRUJBQUVBQVFBQkFBRUFBQUFBQVFFQkFRQUFBQUFBQVFBQkFBQUFBQUVCQVFFQUFBQUJBQUVCQVFCQjJid0JDd2NCQUFFQUFRQUJBRUhwdkFFTGxRSUJBQUVBQVFBQkFBQUFBQUVCQVFFQUFBQUFBQUVBQVFBQUFBQUJBUUVCQUFBQUFBQUJBQUVCQVFBQUFRRUFBQUFCQUFFQUFRQUJBUUVCQVFFQkFRRUFBUUFCQUFFQUFRQUFBQUFCQVFFQkFBRUFBQUVCQUFFQUFBQUFBUUVCQVFBQkFBRUJBUUVCQWdBQUFBUUFBQUFFQUFBQUNBQUFBSkQvQUFBTUFBQUFHQUFBQUZML0FBQVVBQUFBR1FBQUFGUC9BQUFVQUFBQUdnQUFBRjcvQUFBVUFBQUFHd0FBQUZ6L0FBQVVBQUFBSEFBQUFGMy9BQUFVQUFBQUhRQUFBRi8vQUFBVUFBQUFIZ0FBQUZIL0FBQUNBQUFBSHdBQUFGWC9BQUFFQUFBQUlBQUFBRmYvQUFBRUFBQUFJUUFBQUZqL0FBQVFBQUFBSWdBQUFHRC9BQUFFQUFBQUl3QUFBR0gvQUFBUUFBQUFKQUFBQUpIL0FFR0l2d0VMWldQL0FBQUVBQUFBSlFBQUFHVC9BQUFVQUFBQUpnQUFBSFQvQUFBVUFBQUFKd0FBQUhqL0FBQUVBQUFBS0FBQUFGRC9BQUFFQUFBQUtRQUFBRm4vQUFBRUFBQUFLZ0FBQUhYL0FBQVVBQUFBS3dBQUFIZi9BQUFVQUFBQUxBQUFBQUFBQUFBVUFFR0F3QUVMTlMwQUFBQXVBQUFBTHdBQUFEQUFBQUF4QUFBQU1nQUFBRE1BQUFBMEFBQUFJQ0JRYWpZQUFBQndlWFJtTndBQUFHZ3ljR280QUVIQXdBRUxNbkprYUdrNUFBQUFjbXh2WXpvQUFBQmpZM0JpT3dBQUFISnNZM0E4QUFBQWNHRnRZejBBQUFCbVpXUmpQZ0FBQVBoaUFFR0F3UUVMUVJrQUN3QVpHUmtBQUFBQUJRQUFBQUFBQUFrQUFBQUFDd0FBQUFBQUFBQUFHUUFLQ2hrWkdRTUtCd0FCQUFrTEdBQUFDUVlMQUFBTEFBWVpBQUFBR1JrWkFFSFJ3UUVMSVE0QUFBQUFBQUFBQUJrQUN3MFpHUmtBRFFBQUFnQUpEZ0FBQUFrQURnQUFEZ0JCaThJQkN3RU1BRUdYd2dFTEZSTUFBQUFBRXdBQUFBQUpEQUFBQUFBQURBQUFEQUJCeGNJQkN3RVFBRUhSd2dFTEZROEFBQUFFRHdBQUFBQUpFQUFBQUFBQUVBQUFFQUJCLzhJQkN3RVNBRUdMd3dFTEhoRUFBQUFBRVFBQUFBQUpFZ0FBQUFBQUVnQUFFZ0FBR2dBQUFCb2FHZ0JCd3NNQkN3NGFBQUFBR2hvYUFBQUFBQUFBQ1FCQjg4TUJDd0VVQUVIL3d3RUxGUmNBQUFBQUZ3QUFBQUFKRkFBQUFBQUFGQUFBRkFCQnJjUUJDd0VXQUVHNXhBRUxKeFVBQUFBQUZRQUFBQUFKRmdBQUFBQUFGZ0FBRmdBQU1ERXlNelExTmpjNE9VRkNRMFJGUmdCQjRNUUJDd21RYkFFQUFBQUFBQVVBUWZURUFRc0JhUUJCak1VQkN3cHFBQUFBYXdBQUFIaG9BRUdreFFFTEFRSUFRYlRGQVFzSS8vLy8vLy8vLy84QVFmakZBUXNCQlFCQmhNWUJDd0ZzQUVHY3hnRUxEbW9BQUFCdEFBQUFpR2dBQUFBRUFFRzB4Z0VMQVFFQVFjVEdBUXNGLy8vLy93bz0iKTtyZXR1cm4gcmVjZWl2ZUluc3RhbmNlKGluc3RhbnRpYXRlU3luYyh1LGUpWzBdKX0oKTtHLnEsYS5fbWFsbG9jPUcucixhLl9mcmVlPUcucyxhLl9qcDJfZGVjb2RlPUcudTt3PWZ1bmN0aW9uIHJ1bkNhbGxlcigpe0R8fHJ1bigpO0R8fCh3PXJ1bkNhbGxlcil9O2Z1bmN0aW9uIHJ1bigpe2lmKCEobT4wKSl7IWZ1bmN0aW9uIHByZVJ1bigpe2lmKGEucHJlUnVuKXsiZnVuY3Rpb24iPT10eXBlb2YgYS5wcmVSdW4mJihhLnByZVJ1bj1bYS5wcmVSdW5dKTtmb3IoO2EucHJlUnVuLmxlbmd0aDspZT1hLnByZVJ1bi5zaGlmdCgpLGQudW5zaGlmdChlKX12YXIgZTtjYWxsUnVudGltZUNhbGxiYWNrcyhkKX0oKTtpZighKG0+MCkpaWYoYS5zZXRTdGF0dXMpe2Euc2V0U3RhdHVzKCJSdW5uaW5nLi4uIik7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe2Euc2V0U3RhdHVzKCIiKX0pLDEpO2RvUnVuKCl9KSwxKX1lbHNlIGRvUnVuKCl9ZnVuY3Rpb24gZG9SdW4oKXtpZighRCl7RD0hMDthLmNhbGxlZFJ1bj0hMDshZnVuY3Rpb24gaW5pdFJ1bnRpbWUoKXtjYWxsUnVudGltZUNhbGxiYWNrcyhmKX0oKTt0KGEpO2Eub25SdW50aW1lSW5pdGlhbGl6ZWQmJmEub25SdW50aW1lSW5pdGlhbGl6ZWQoKTshZnVuY3Rpb24gcG9zdFJ1bigpe2lmKGEucG9zdFJ1bil7ImZ1bmN0aW9uIj09dHlwZW9mIGEucG9zdFJ1biYmKGEucG9zdFJ1bj1bYS5wb3N0UnVuXSk7Zm9yKDthLnBvc3RSdW4ubGVuZ3RoOyllPWEucG9zdFJ1bi5zaGlmdCgpLHAudW5zaGlmdChlKX12YXIgZTtjYWxsUnVudGltZUNhbGxiYWNrcyhwKX0oKX19fWlmKGEucHJlSW5pdCl7ImZ1bmN0aW9uIj09dHlwZW9mIGEucHJlSW5pdCYmKGEucHJlSW5pdD1bYS5wcmVJbml0XSk7Zm9yKDthLnByZUluaXQubGVuZ3RoPjA7KWEucHJlSW5pdC5wb3AoKSgpfXJ1bigpO3JldHVybiBhfSk7Y29uc3QgQmk9bGk7Y2xhc3MgSnB4RXJyb3IgZXh0ZW5kcyBjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJKcHhFcnJvciIpfX1jbGFzcyBKcHhJbWFnZXtzdGF0aWMjeT1udWxsO3N0YXRpYyBkZWNvZGUoZSx0KXt0fHw9e307dGhpcy4jeXx8PUJpKHt3YXJufSk7Y29uc3QgaT10aGlzLiN5LmRlY29kZShlLHQpO2lmKCJzdHJpbmciPT10eXBlb2YgaSl0aHJvdyBuZXcgSnB4RXJyb3IoaSk7cmV0dXJuIGl9c3RhdGljIGNsZWFudXAoKXt0aGlzLiN5PW51bGx9c3RhdGljIHBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGUpe2xldCB0PWUuZ2V0Qnl0ZSgpO2Zvcig7dD49MDspe2NvbnN0IGk9dDt0PWUuZ2V0Qnl0ZSgpO2lmKDY1MzYxPT09KGk8PDh8dCkpe2Uuc2tpcCg0KTtjb25zdCB0PWUuZ2V0SW50MzIoKT4+PjAsaT1lLmdldEludDMyKCk+Pj4wLGE9ZS5nZXRJbnQzMigpPj4+MCxyPWUuZ2V0SW50MzIoKT4+PjA7ZS5za2lwKDE2KTtyZXR1cm57d2lkdGg6dC1hLGhlaWdodDppLXIsYml0c1BlckNvbXBvbmVudDo4LGNvbXBvbmVudHNDb3VudDplLmdldFVpbnQxNigpfX19dGhyb3cgbmV3IEpweEVycm9yKCJObyBzaXplIG1hcmtlciBmb3VuZCBpbiBKUFggc3RyZWFtIil9fWNsYXNzIEpweFN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIodCk7dGhpcy5zdHJlYW09ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMubWF5YmVMZW5ndGg9dDt0aGlzLnBhcmFtcz1pfWdldCBieXRlcygpe3JldHVybiBzaGFkb3codGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jayhlKXt0aGlzLmRlY29kZUltYWdlKG51bGwsZSl9ZGVjb2RlSW1hZ2UoZSx0KXtpZih0aGlzLmVvZilyZXR1cm4gdGhpcy5idWZmZXI7ZXx8PXRoaXMuYnl0ZXM7dGhpcy5idWZmZXI9SnB4SW1hZ2UuZGVjb2RlKGUsdCk7dGhpcy5idWZmZXJMZW5ndGg9dGhpcy5idWZmZXIubGVuZ3RoO3RoaXMuZW9mPSEwO3JldHVybiB0aGlzLmJ1ZmZlcn1nZXQgY2FuQXN5bmNEZWNvZGVJbWFnZUZyb21CdWZmZXIoKXtyZXR1cm4gdGhpcy5zdHJlYW0uaXNBc3luY319Y2xhc3MgTFpXU3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxpKXtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5jYWNoZWREYXRhPTA7dGhpcy5iaXRzQ2FjaGVkPTA7Y29uc3QgYT00MDk2LHI9e2Vhcmx5Q2hhbmdlOmksY29kZUxlbmd0aDo5LG5leHRDb2RlOjI1OCxkaWN0aW9uYXJ5VmFsdWVzOm5ldyBVaW50OEFycmF5KGEpLGRpY3Rpb25hcnlMZW5ndGhzOm5ldyBVaW50MTZBcnJheShhKSxkaWN0aW9uYXJ5UHJldkNvZGVzOm5ldyBVaW50MTZBcnJheShhKSxjdXJyZW50U2VxdWVuY2U6bmV3IFVpbnQ4QXJyYXkoYSksY3VycmVudFNlcXVlbmNlTGVuZ3RoOjB9O2ZvcihsZXQgZT0wO2U8MjU2OysrZSl7ci5kaWN0aW9uYXJ5VmFsdWVzW2VdPWU7ci5kaWN0aW9uYXJ5TGVuZ3Roc1tlXT0xfXRoaXMubHp3U3RhdGU9cn1yZWFkQml0cyhlKXtsZXQgdD10aGlzLmJpdHNDYWNoZWQsaT10aGlzLmNhY2hlZERhdGE7Zm9yKDt0PGU7KXtjb25zdCBlPXRoaXMuc3RyLmdldEJ5dGUoKTtpZigtMT09PWUpe3RoaXMuZW9mPSEwO3JldHVybiBudWxsfWk9aTw8OHxlO3QrPTh9dGhpcy5iaXRzQ2FjaGVkPXQtPWU7dGhpcy5jYWNoZWREYXRhPWk7dGhpcy5sYXN0Q29kZT1udWxsO3JldHVybiBpPj4+dCYoMTw8ZSktMX1yZWFkQmxvY2soKXtsZXQgZSx0LGksYT0xMDI0O2NvbnN0IHI9dGhpcy5sendTdGF0ZTtpZighcilyZXR1cm47Y29uc3Qgcz1yLmVhcmx5Q2hhbmdlO2xldCBuPXIubmV4dENvZGU7Y29uc3Qgbz1yLmRpY3Rpb25hcnlWYWx1ZXMsZz1yLmRpY3Rpb25hcnlMZW5ndGhzLGM9ci5kaWN0aW9uYXJ5UHJldkNvZGVzO2xldCBDPXIuY29kZUxlbmd0aCxoPXIucHJldkNvZGU7Y29uc3QgbD1yLmN1cnJlbnRTZXF1ZW5jZTtsZXQgUT1yLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aCxFPTAsdT10aGlzLmJ1ZmZlckxlbmd0aCxkPXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK2EpO2ZvcihlPTA7ZTw1MTI7ZSsrKXtjb25zdCBlPXRoaXMucmVhZEJpdHMoQykscj1RPjA7aWYoZTwyNTYpe2xbMF09ZTtRPTF9ZWxzZXtpZighKGU+PTI1OCkpe2lmKDI1Nj09PWUpe0M9OTtuPTI1ODtRPTA7Y29udGludWV9dGhpcy5lb2Y9ITA7ZGVsZXRlIHRoaXMubHp3U3RhdGU7YnJlYWt9aWYoZTxuKXtRPWdbZV07Zm9yKHQ9US0xLGk9ZTt0Pj0wO3QtLSl7bFt0XT1vW2ldO2k9Y1tpXX19ZWxzZSBsW1ErK109bFswXX1pZihyKXtjW25dPWg7Z1tuXT1nW2hdKzE7b1tuXT1sWzBdO24rKztDPW4rcyZuK3MtMT9DOjB8TWF0aC5taW4oTWF0aC5sb2cobitzKS8uNjkzMTQ3MTgwNTU5OTQ1MysxLDEyKX1oPWU7RSs9UTtpZihhPEUpe2Rve2ErPTUxMn13aGlsZShhPEUpO2Q9dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrYSl9Zm9yKHQ9MDt0PFE7dCsrKWRbdSsrXT1sW3RdfXIubmV4dENvZGU9bjtyLmNvZGVMZW5ndGg9QztyLnByZXZDb2RlPWg7ci5jdXJyZW50U2VxdWVuY2VMZW5ndGg9UTt0aGlzLmJ1ZmZlckxlbmd0aD11fX1jbGFzcyBQcmVkaWN0b3JTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKHQpO2lmKCEoaSBpbnN0YW5jZW9mIERpY3QpKXJldHVybiBlO2NvbnN0IGE9dGhpcy5wcmVkaWN0b3I9aS5nZXQoIlByZWRpY3RvciIpfHwxO2lmKGE8PTEpcmV0dXJuIGU7aWYoMiE9PWEmJihhPDEwfHxhPjE1KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVuc3VwcG9ydGVkIHByZWRpY3RvcjogJHthfWApO3RoaXMucmVhZEJsb2NrPTI9PT1hP3RoaXMucmVhZEJsb2NrVGlmZjp0aGlzLnJlYWRCbG9ja1BuZzt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7Y29uc3Qgcj10aGlzLmNvbG9ycz1pLmdldCgiQ29sb3JzIil8fDEscz10aGlzLmJpdHM9aS5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKXx8OCxuPXRoaXMuY29sdW1ucz1pLmdldCgiQ29sdW1ucyIpfHwxO3RoaXMucGl4Qnl0ZXM9cipzKzc+PjM7dGhpcy5yb3dCeXRlcz1uKnIqcys3Pj4zO3JldHVybiB0aGlzfXJlYWRCbG9ja1RpZmYoKXtjb25zdCBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLmJ1ZmZlckxlbmd0aCxpPXRoaXMuZW5zdXJlQnVmZmVyKHQrZSksYT10aGlzLmJpdHMscj10aGlzLmNvbG9ycyxzPXRoaXMuc3RyLmdldEJ5dGVzKGUpO3RoaXMuZW9mPSFzLmxlbmd0aDtpZih0aGlzLmVvZilyZXR1cm47bGV0IG4sbz0wLGc9MCxjPTAsQz0wLGg9dDtpZigxPT09YSYmMT09PXIpZm9yKG49MDtuPGU7KytuKXtsZXQgZT1zW25dXm87ZV49ZT4+MTtlXj1lPj4yO2VePWU+PjQ7bz0oMSZlKTw8NztpW2grK109ZX1lbHNlIGlmKDg9PT1hKXtmb3Iobj0wO248cjsrK24paVtoKytdPXNbbl07Zm9yKDtuPGU7KytuKXtpW2hdPWlbaC1yXStzW25dO2grK319ZWxzZSBpZigxNj09PWEpe2NvbnN0IHQ9MipyO2ZvcihuPTA7bjx0OysrbilpW2grK109c1tuXTtmb3IoO248ZTtuKz0yKXtjb25zdCBlPSgoMjU1JnNbbl0pPDw4KSsoMjU1JnNbbisxXSkrKCgyNTUmaVtoLXRdKTw8OCkrKDI1NSZpW2gtdCsxXSk7aVtoKytdPWU+PjgmMjU1O2lbaCsrXT0yNTUmZX19ZWxzZXtjb25zdCBlPW5ldyBVaW50OEFycmF5KHIrMSksaD0oMTw8YSktMTtsZXQgbD0wLFE9dDtjb25zdCBFPXRoaXMuY29sdW1ucztmb3Iobj0wO248RTsrK24pZm9yKGxldCB0PTA7dDxyOysrdCl7aWYoYzxhKXtvPW88PDh8MjU1JnNbbCsrXTtjKz04fWVbdF09ZVt0XSsobz4+Yy1hKSZoO2MtPWE7Zz1nPDxhfGVbdF07Qys9YTtpZihDPj04KXtpW1ErK109Zz4+Qy04JjI1NTtDLT04fX1DPjAmJihpW1ErK109KGc8PDgtQykrKG8mKDE8PDgtQyktMSkpfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfXJlYWRCbG9ja1BuZygpe2NvbnN0IGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMucGl4Qnl0ZXMsaT10aGlzLnN0ci5nZXRCeXRlKCksYT10aGlzLnN0ci5nZXRCeXRlcyhlKTt0aGlzLmVvZj0hYS5sZW5ndGg7aWYodGhpcy5lb2YpcmV0dXJuO2NvbnN0IHI9dGhpcy5idWZmZXJMZW5ndGgscz10aGlzLmVuc3VyZUJ1ZmZlcihyK2UpO2xldCBuPXMuc3ViYXJyYXkoci1lLHIpOzA9PT1uLmxlbmd0aCYmKG49bmV3IFVpbnQ4QXJyYXkoZSkpO2xldCBvLGcsYyxDPXI7c3dpdGNoKGkpe2Nhc2UgMDpmb3Iobz0wO288ZTsrK28pc1tDKytdPWFbb107YnJlYWs7Y2FzZSAxOmZvcihvPTA7bzx0OysrbylzW0MrK109YVtvXTtmb3IoO288ZTsrK28pe3NbQ109c1tDLXRdK2Fbb10mMjU1O0MrK31icmVhaztjYXNlIDI6Zm9yKG89MDtvPGU7KytvKXNbQysrXT1uW29dK2Fbb10mMjU1O2JyZWFrO2Nhc2UgMzpmb3Iobz0wO288dDsrK28pc1tDKytdPShuW29dPj4xKSthW29dO2Zvcig7bzxlOysrbyl7c1tDXT0obltvXStzW0MtdF0+PjEpK2Fbb10mMjU1O0MrK31icmVhaztjYXNlIDQ6Zm9yKG89MDtvPHQ7KytvKXtnPW5bb107Yz1hW29dO3NbQysrXT1nK2N9Zm9yKDtvPGU7KytvKXtnPW5bb107Y29uc3QgZT1uW28tdF0saT1zW0MtdF0scj1pK2ctZTtsZXQgaD1yLWk7aDwwJiYoaD0taCk7bGV0IGw9ci1nO2w8MCYmKGw9LWwpO2xldCBRPXItZTtRPDAmJihRPS1RKTtjPWFbb107c1tDKytdPWg8PWwmJmg8PVE/aStjOmw8PVE/ZytjOmUrY31icmVhaztkZWZhdWx0OnRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5zdXBwb3J0ZWQgcHJlZGljdG9yOiAke2l9YCl9dGhpcy5idWZmZXJMZW5ndGgrPWV9fWNsYXNzIFJ1bkxlbmd0aFN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdH1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyLmdldEJ5dGVzKDIpO2lmKCFlfHxlLmxlbmd0aDwyfHwxMjg9PT1lWzBdKXt0aGlzLmVvZj0hMDtyZXR1cm59bGV0IHQsaT10aGlzLmJ1ZmZlckxlbmd0aCxhPWVbMF07aWYoYTwxMjgpe3Q9dGhpcy5lbnN1cmVCdWZmZXIoaSthKzEpO3RbaSsrXT1lWzFdO2lmKGE+MCl7Y29uc3QgZT10aGlzLnN0ci5nZXRCeXRlcyhhKTt0LnNldChlLGkpO2krPWF9fWVsc2V7YT0yNTctYTtjb25zdCByPWVbMV07dD10aGlzLmVuc3VyZUJ1ZmZlcihpK2ErMSk7Zm9yKGxldCBlPTA7ZTxhO2UrKyl0W2krK109cn10aGlzLmJ1ZmZlckxlbmd0aD1pfX1jbGFzcyBQYXJzZXJ7Y29uc3RydWN0b3Ioe2xleGVyOmUseHJlZjp0LGFsbG93U3RyZWFtczppPSExLHJlY292ZXJ5TW9kZTphPSExfSl7dGhpcy5sZXhlcj1lO3RoaXMueHJlZj10O3RoaXMuYWxsb3dTdHJlYW1zPWk7dGhpcy5yZWNvdmVyeU1vZGU9YTt0aGlzLmltYWdlQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLl9pbWFnZUlkPTA7dGhpcy5yZWZpbGwoKX1yZWZpbGwoKXt0aGlzLmJ1ZjE9dGhpcy5sZXhlci5nZXRPYmooKTt0aGlzLmJ1ZjI9dGhpcy5sZXhlci5nZXRPYmooKX1zaGlmdCgpe2lmKHRoaXMuYnVmMiBpbnN0YW5jZW9mIENtZCYmIklEIj09PXRoaXMuYnVmMi5jbWQpe3RoaXMuYnVmMT10aGlzLmJ1ZjI7dGhpcy5idWYyPW51bGx9ZWxzZXt0aGlzLmJ1ZjE9dGhpcy5idWYyO3RoaXMuYnVmMj10aGlzLmxleGVyLmdldE9iaigpfX10cnlTaGlmdCgpe3RyeXt0aGlzLnNoaWZ0KCk7cmV0dXJuITB9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuITF9fWdldE9iaihlPW51bGwpe2NvbnN0IHQ9dGhpcy5idWYxO3RoaXMuc2hpZnQoKTtpZih0IGluc3RhbmNlb2YgQ21kKXN3aXRjaCh0LmNtZCl7Y2FzZSJCSSI6cmV0dXJuIHRoaXMubWFrZUlubGluZUltYWdlKGUpO2Nhc2UiWyI6Y29uc3QgaT1bXTtmb3IoOyFpc0NtZCh0aGlzLmJ1ZjEsIl0iKSYmdGhpcy5idWYxIT09RHQ7KWkucHVzaCh0aGlzLmdldE9iaihlKSk7aWYodGhpcy5idWYxPT09RHQpe2lmKHRoaXMucmVjb3ZlcnlNb2RlKXJldHVybiBpO3Rocm93IG5ldyBQYXJzZXJFT0ZFeGNlcHRpb24oIkVuZCBvZiBmaWxlIGluc2lkZSBhcnJheS4iKX10aGlzLnNoaWZ0KCk7cmV0dXJuIGk7Y2FzZSI8PCI6Y29uc3QgYT1uZXcgRGljdCh0aGlzLnhyZWYpO2Zvcig7IWlzQ21kKHRoaXMuYnVmMSwiPj4iKSYmdGhpcy5idWYxIT09RHQ7KXtpZighKHRoaXMuYnVmMSBpbnN0YW5jZW9mIE5hbWUpKXtpbmZvKCJNYWxmb3JtZWQgZGljdGlvbmFyeToga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpO3RoaXMuc2hpZnQoKTtjb250aW51ZX1jb25zdCB0PXRoaXMuYnVmMS5uYW1lO3RoaXMuc2hpZnQoKTtpZih0aGlzLmJ1ZjE9PT1EdClicmVhazthLnNldCh0LHRoaXMuZ2V0T2JqKGUpKX1pZih0aGlzLmJ1ZjE9PT1EdCl7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIGE7dGhyb3cgbmV3IFBhcnNlckVPRkV4Y2VwdGlvbigiRW5kIG9mIGZpbGUgaW5zaWRlIGRpY3Rpb25hcnkuIil9aWYoaXNDbWQodGhpcy5idWYyLCJzdHJlYW0iKSlyZXR1cm4gdGhpcy5hbGxvd1N0cmVhbXM/dGhpcy5tYWtlU3RyZWFtKGEsZSk6YTt0aGlzLnNoaWZ0KCk7cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdH1pZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXtpZihOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuYnVmMSkmJmlzQ21kKHRoaXMuYnVmMiwiUiIpKXtjb25zdCBlPVJlZi5nZXQodCx0aGlzLmJ1ZjEpO3RoaXMuc2hpZnQoKTt0aGlzLnNoaWZ0KCk7cmV0dXJuIGV9cmV0dXJuIHR9cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiZlP2UuZGVjcnlwdFN0cmluZyh0KTp0fWZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0e2tub3duQ29tbWFuZHM6dH09dGhpcy5sZXhlcixpPWUucG9zO2xldCBhLHIscz0wO2Zvcig7LTEhPT0oYT1lLmdldEJ5dGUoKSk7KWlmKDA9PT1zKXM9Njk9PT1hPzE6MDtlbHNlIGlmKDE9PT1zKXM9NzM9PT1hPzI6MDtlbHNlIGlmKDMyPT09YXx8MTA9PT1hfHwxMz09PWEpe3I9ZS5wb3M7Y29uc3QgaT1lLnBlZWtCeXRlcygxNSksbj1pLmxlbmd0aDtpZigwPT09bilicmVhaztmb3IobGV0IGU9MDtlPG47ZSsrKXthPWlbZV07aWYoKDAhPT1hfHwwPT09aVtlKzFdKSYmKDEwIT09YSYmMTMhPT1hJiYoYTwzMnx8YT4xMjcpKSl7cz0wO2JyZWFrfX1pZigyIT09cyljb250aW51ZTtpZighdCl7d2FybigiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQgLSBgbGV4ZXIua25vd25Db21tYW5kc2AgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWNvbnN0IG89bmV3IExleGVyKG5ldyBTdHJlYW0oaS5zbGljZSgpKSx0KTtvLl9oZXhTdHJpbmdXYXJuPSgpPT57fTtsZXQgZz0wO2Zvcig7Oyl7Y29uc3QgZT1vLmdldE9iaigpO2lmKGU9PT1EdCl7cz0wO2JyZWFrfWlmKGUgaW5zdGFuY2VvZiBDbWQpe2NvbnN0IGk9dFtlLmNtZF07aWYoIWkpe3M9MDticmVha31pZihpLnZhcmlhYmxlQXJncz9nPD1pLm51bUFyZ3M6Zz09PWkubnVtQXJncylicmVhaztnPTB9ZWxzZSBnKyt9aWYoMj09PXMpYnJlYWt9ZWxzZSBzPTA7aWYoLTE9PT1hKXt3YXJuKCJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZDogUmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aG91dCBmaW5kaW5nIGEgdmFsaWQgRUkgbWFya2VyIik7aWYocil7d2FybignLi4uIHRyeWluZyB0byByZWNvdmVyIGJ5IHVzaW5nIHRoZSBsYXN0ICJFSSIgb2NjdXJyZW5jZS4nKTtlLnNraXAoLShlLnBvcy1yKSl9fWxldCBuPTQ7ZS5za2lwKC1uKTthPWUucGVla0J5dGUoKTtlLnNraXAobik7aXNXaGl0ZVNwYWNlKGEpfHxuLS07cmV0dXJuIGUucG9zLW4taX1maW5kRENURGVjb2RlSW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0IHQ9ZS5wb3M7bGV0IGksYSxyPSExO2Zvcig7LTEhPT0oaT1lLmdldEJ5dGUoKSk7KWlmKDI1NT09PWkpe3N3aXRjaChlLmdldEJ5dGUoKSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMjU1OmUuc2tpcCgtMSk7YnJlYWs7Y2FzZSAyMTc6cj0hMDticmVhaztjYXNlIDE5MjpjYXNlIDE5MzpjYXNlIDE5NDpjYXNlIDE5NTpjYXNlIDE5NzpjYXNlIDE5ODpjYXNlIDE5OTpjYXNlIDIwMTpjYXNlIDIwMjpjYXNlIDIwMzpjYXNlIDIwNTpjYXNlIDIwNjpjYXNlIDIwNzpjYXNlIDE5NjpjYXNlIDIwNDpjYXNlIDIxODpjYXNlIDIxOTpjYXNlIDIyMDpjYXNlIDIyMTpjYXNlIDIyMjpjYXNlIDIyMzpjYXNlIDIyNDpjYXNlIDIyNTpjYXNlIDIyNjpjYXNlIDIyNzpjYXNlIDIyODpjYXNlIDIyOTpjYXNlIDIzMDpjYXNlIDIzMTpjYXNlIDIzMjpjYXNlIDIzMzpjYXNlIDIzNDpjYXNlIDIzNTpjYXNlIDIzNjpjYXNlIDIzNzpjYXNlIDIzODpjYXNlIDIzOTpjYXNlIDI1NDphPWUuZ2V0VWludDE2KCk7YT4yP2Uuc2tpcChhLTIpOmUuc2tpcCgtMil9aWYocilicmVha31jb25zdCBzPWUucG9zLXQ7aWYoLTE9PT1pKXt3YXJuKCJJbmxpbmUgRENURGVjb2RlIGltYWdlIHN0cmVhbTogRU9JIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtcyk7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIHN9ZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQoZSl7Y29uc3QgdD1lLnBvcztsZXQgaTtmb3IoOy0xIT09KGk9ZS5nZXRCeXRlKCkpOylpZigxMjY9PT1pKXtjb25zdCB0PWUucG9zO2k9ZS5wZWVrQnl0ZSgpO2Zvcig7aXNXaGl0ZVNwYWNlKGkpOyl7ZS5za2lwKCk7aT1lLnBlZWtCeXRlKCl9aWYoNjI9PT1pKXtlLnNraXAoKTticmVha31pZihlLnBvcz50KXtjb25zdCB0PWUucGVla0J5dGVzKDIpO2lmKDY5PT09dFswXSYmNzM9PT10WzFdKWJyZWFrfX1jb25zdCBhPWUucG9zLXQ7aWYoLTE9PT1pKXt3YXJuKCJJbmxpbmUgQVNDSUk4NURlY29kZSBpbWFnZSBzdHJlYW06IEVPRCBtYXJrZXIgbm90IGZvdW5kLCBzZWFyY2hpbmcgZm9yIC9FSS8gaW5zdGVhZC4iKTtlLnNraXAoLWEpO3JldHVybiB0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpfXRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpO3JldHVybiBhfWZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZChlKXtjb25zdCB0PWUucG9zO2xldCBpO2Zvcig7LTEhPT0oaT1lLmdldEJ5dGUoKSkmJjYyIT09aTspO2NvbnN0IGE9ZS5wb3MtdDtpZigtMT09PWkpe3dhcm4oIklubGluZSBBU0NJSUhleERlY29kZSBpbWFnZSBzdHJlYW06IEVPRCBtYXJrZXIgbm90IGZvdW5kLCBzZWFyY2hpbmcgZm9yIC9FSS8gaW5zdGVhZC4iKTtlLnNraXAoLWEpO3JldHVybiB0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpfXRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpO3JldHVybiBhfWlubGluZVN0cmVhbVNraXBFSShlKXtsZXQgdCxpPTA7Zm9yKDstMSE9PSh0PWUuZ2V0Qnl0ZSgpKTspaWYoMD09PWkpaT02OT09PXQ/MTowO2Vsc2UgaWYoMT09PWkpaT03Mz09PXQ/MjowO2Vsc2UgaWYoMj09PWkpYnJlYWt9bWFrZUlubGluZUltYWdlKGUpe2NvbnN0IHQ9dGhpcy5sZXhlcixpPXQuc3RyZWFtLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgcjtmb3IoOyFpc0NtZCh0aGlzLmJ1ZjEsIklEIikmJnRoaXMuYnVmMSE9PUR0Oyl7aWYoISh0aGlzLmJ1ZjEgaW5zdGFuY2VvZiBOYW1lKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkRpY3Rpb25hcnkga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpO2NvbnN0IHQ9dGhpcy5idWYxLm5hbWU7dGhpcy5zaGlmdCgpO2lmKHRoaXMuYnVmMT09PUR0KWJyZWFrO2FbdF09dGhpcy5nZXRPYmooZSl9LTEhPT10LmJlZ2luSW5saW5lSW1hZ2VQb3MmJihyPWkucG9zLXQuYmVnaW5JbmxpbmVJbWFnZVBvcyk7Y29uc3Qgcz10aGlzLnhyZWYuZmV0Y2hJZlJlZihhLkZ8fGEuRmlsdGVyKTtsZXQgbjtpZihzIGluc3RhbmNlb2YgTmFtZSluPXMubmFtZTtlbHNlIGlmKEFycmF5LmlzQXJyYXkocykpe2NvbnN0IGU9dGhpcy54cmVmLmZldGNoSWZSZWYoc1swXSk7ZSBpbnN0YW5jZW9mIE5hbWUmJihuPWUubmFtZSl9Y29uc3Qgbz1pLnBvcztsZXQgZyxjO3N3aXRjaChuKXtjYXNlIkRDVCI6Y2FzZSJEQ1REZWNvZGUiOmc9dGhpcy5maW5kRENURGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2Nhc2UiQTg1IjpjYXNlIkFTQ0lJODVEZWNvZGUiOmc9dGhpcy5maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChpKTticmVhaztjYXNlIkFIeCI6Y2FzZSJBU0NJSUhleERlY29kZSI6Zz10aGlzLmZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZChpKTticmVhaztkZWZhdWx0Omc9dGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChpKX1pZihnPDFlMyYmcj4wKXtjb25zdCBlPWkucG9zO2kucG9zPXQuYmVnaW5JbmxpbmVJbWFnZVBvcztjPWZ1bmN0aW9uIGdldElubGluZUltYWdlQ2FjaGVLZXkoZSl7Y29uc3QgdD1bXSxpPWUubGVuZ3RoO2xldCBhPTA7Zm9yKDthPGktMTspdC5wdXNoKGVbYSsrXTw8OHxlW2ErK10pO2E8aSYmdC5wdXNoKGVbYV0pO3JldHVybiBpKyJfIitTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdCl9KGkuZ2V0Qnl0ZXMocitnKSk7aS5wb3M9ZTtjb25zdCBhPXRoaXMuaW1hZ2VDYWNoZVtjXTtpZih2b2lkIDAhPT1hKXt0aGlzLmJ1ZjI9Q21kLmdldCgiRUkiKTt0aGlzLnNoaWZ0KCk7YS5yZXNldCgpO3JldHVybiBhfX1jb25zdCBDPW5ldyBEaWN0KHRoaXMueHJlZik7Zm9yKGNvbnN0IGUgaW4gYSlDLnNldChlLGFbZV0pO2xldCBoPWkubWFrZVN1YlN0cmVhbShvLGcsQyk7ZSYmKGg9ZS5jcmVhdGVTdHJlYW0oaCxnKSk7aD10aGlzLmZpbHRlcihoLEMsZyk7aC5kaWN0PUM7aWYodm9pZCAwIT09Yyl7aC5jYWNoZUtleT0iaW5saW5lX2ltZ18iKyArK3RoaXMuX2ltYWdlSWQ7dGhpcy5pbWFnZUNhY2hlW2NdPWh9dGhpcy5idWYyPUNtZC5nZXQoIkVJIik7dGhpcy5zaGlmdCgpO3JldHVybiBofSN3KGUpe2NvbnN0e3N0cmVhbTp0fT10aGlzLmxleGVyO3QucG9zPWU7Y29uc3QgaT1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDBdKSxhPWkubGVuZ3RoLHI9W25ldyBVaW50OEFycmF5KFsxMTUsMTE2LDExNCwxMDEsOTcsMTA5XSksbmV3IFVpbnQ4QXJyYXkoWzExNSwxMTYsMTAxLDk3LDEwOV0pLG5ldyBVaW50OEFycmF5KFsxMTUsMTE2LDExNCwxMDEsOTddKV0scz05LWE7Zm9yKDt0LnBvczx0LmVuZDspe2NvbnN0IG49dC5wZWVrQnl0ZXMoMjA0OCksbz1uLmxlbmd0aC05O2lmKG88PTApYnJlYWs7bGV0IGc9MDtmb3IoO2c8bzspe2xldCBvPTA7Zm9yKDtvPGEmJm5bZytvXT09PWlbb107KW8rKztpZihvPj1hKXtsZXQgYT0hMTtmb3IoY29uc3QgZSBvZiByKXtjb25zdCB0PWUubGVuZ3RoO2xldCByPTA7Zm9yKDtyPHQmJm5bZytvK3JdPT09ZVtyXTspcisrO2lmKHI+PXMpe2E9ITA7YnJlYWt9aWYocj49dCl7aWYoaXNXaGl0ZVNwYWNlKG5bZytvK3JdKSl7aW5mbyhgRm91bmQgIiR7Ynl0ZXNUb1N0cmluZyhbLi4uaSwuLi5lXSl9IiB3aGVuIHNlYXJjaGluZyBmb3IgZW5kc3RyZWFtIGNvbW1hbmQuYCk7YT0hMH1icmVha319aWYoYSl7dC5wb3MrPWc7cmV0dXJuIHQucG9zLWV9fWcrK310LnBvcys9b31yZXR1cm4tMX1tYWtlU3RyZWFtKGUsdCl7Y29uc3QgaT10aGlzLmxleGVyO2xldCBhPWkuc3RyZWFtO2kuc2tpcFRvTmV4dExpbmUoKTtjb25zdCByPWEucG9zLTE7bGV0IHM9ZS5nZXQoIkxlbmd0aCIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHMpKXtpbmZvKGBCYWQgbGVuZ3RoICIke3MmJnMudG9TdHJpbmcoKX0iIGluIHN0cmVhbS5gKTtzPTB9YS5wb3M9citzO2kubmV4dENoYXIoKTtpZih0aGlzLnRyeVNoaWZ0KCkmJmlzQ21kKHRoaXMuYnVmMiwiZW5kc3RyZWFtIikpdGhpcy5zaGlmdCgpO2Vsc2V7cz10aGlzLiN3KHIpO2lmKHM8MCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk1pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuIik7aS5uZXh0Q2hhcigpO3RoaXMuc2hpZnQoKTt0aGlzLnNoaWZ0KCl9dGhpcy5zaGlmdCgpO2E9YS5tYWtlU3ViU3RyZWFtKHIscyxlKTt0JiYoYT10LmNyZWF0ZVN0cmVhbShhLHMpKTthPXRoaXMuZmlsdGVyKGEsZSxzKTthLmRpY3Q9ZTtyZXR1cm4gYX1maWx0ZXIoZSx0LGkpe2xldCBhPXQuZ2V0KCJGIiwiRmlsdGVyIikscj10LmdldCgiRFAiLCJEZWNvZGVQYXJtcyIpO2lmKGEgaW5zdGFuY2VvZiBOYW1lKXtBcnJheS5pc0FycmF5KHIpJiZ3YXJuKCIvRGVjb2RlUGFybXMgc2hvdWxkIG5vdCBiZSBhbiBBcnJheSwgd2hlbiAvRmlsdGVyIGlzIGEgTmFtZS4iKTtyZXR1cm4gdGhpcy5tYWtlRmlsdGVyKGUsYS5uYW1lLGkscil9bGV0IHM9aTtpZihBcnJheS5pc0FycmF5KGEpKXtjb25zdCB0PWEsaT1yO2ZvcihsZXQgbj0wLG89dC5sZW5ndGg7bjxvOysrbil7YT10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W25dKTtpZighKGEgaW5zdGFuY2VvZiBOYW1lKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEJhZCBmaWx0ZXIgbmFtZSAiJHthfSJgKTtyPW51bGw7QXJyYXkuaXNBcnJheShpKSYmbiBpbiBpJiYocj10aGlzLnhyZWYuZmV0Y2hJZlJlZihpW25dKSk7ZT10aGlzLm1ha2VGaWx0ZXIoZSxhLm5hbWUscyxyKTtzPW51bGx9fXJldHVybiBlfW1ha2VGaWx0ZXIoZSx0LGksYSl7aWYoMD09PWkpe3dhcm4oYEVtcHR5ICIke3R9IiBzdHJlYW0uYCk7cmV0dXJuIG5ldyBOdWxsU3RyZWFtfXRyeXtzd2l0Y2godCl7Y2FzZSJGbCI6Y2FzZSJGbGF0ZURlY29kZSI6cmV0dXJuIGE/bmV3IFByZWRpY3RvclN0cmVhbShuZXcgRmxhdGVTdHJlYW0oZSxpKSxpLGEpOm5ldyBGbGF0ZVN0cmVhbShlLGkpO2Nhc2UiTFpXIjpjYXNlIkxaV0RlY29kZSI6bGV0IHQ9MTtpZihhKXthLmhhcygiRWFybHlDaGFuZ2UiKSYmKHQ9YS5nZXQoIkVhcmx5Q2hhbmdlIikpO3JldHVybiBuZXcgUHJlZGljdG9yU3RyZWFtKG5ldyBMWldTdHJlYW0oZSxpLHQpLGksYSl9cmV0dXJuIG5ldyBMWldTdHJlYW0oZSxpLHQpO2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6cmV0dXJuIG5ldyBKcGVnU3RyZWFtKGUsaSxhKTtjYXNlIkpQWCI6Y2FzZSJKUFhEZWNvZGUiOnJldHVybiBuZXcgSnB4U3RyZWFtKGUsaSxhKTtjYXNlIkE4NSI6Y2FzZSJBU0NJSTg1RGVjb2RlIjpyZXR1cm4gbmV3IEFzY2lpODVTdHJlYW0oZSxpKTtjYXNlIkFIeCI6Y2FzZSJBU0NJSUhleERlY29kZSI6cmV0dXJuIG5ldyBBc2NpaUhleFN0cmVhbShlLGkpO2Nhc2UiQ0NGIjpjYXNlIkNDSVRURmF4RGVjb2RlIjpyZXR1cm4gbmV3IENDSVRURmF4U3RyZWFtKGUsaSxhKTtjYXNlIlJMIjpjYXNlIlJ1bkxlbmd0aERlY29kZSI6cmV0dXJuIG5ldyBSdW5MZW5ndGhTdHJlYW0oZSxpKTtjYXNlIkpCSUcyRGVjb2RlIjpyZXR1cm4gbmV3IEpiaWcyU3RyZWFtKGUsaSxhKX13YXJuKGBGaWx0ZXIgIiR7dH0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7cmV0dXJuIGV9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybihgSW52YWxpZCBzdHJlYW06ICIke2V9ImApO3JldHVybiBuZXcgTnVsbFN0cmVhbX19fWNvbnN0IFFpPVsxLDAsMCwwLDAsMCwwLDAsMCwxLDEsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDIsMCwwLDIsMiwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXTtmdW5jdGlvbiB0b0hleERpZ2l0KGUpe3JldHVybiBlPj00OCYmZTw9NTc/MTUmZTplPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDI/OSsoMTUmZSk6LTF9Y2xhc3MgTGV4ZXJ7Y29uc3RydWN0b3IoZSx0PW51bGwpe3RoaXMuc3RyZWFtPWU7dGhpcy5uZXh0Q2hhcigpO3RoaXMuc3RyQnVmPVtdO3RoaXMua25vd25Db21tYW5kcz10O3RoaXMuX2hleFN0cmluZ051bVdhcm49MDt0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3M9LTF9bmV4dENoYXIoKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9cGVla0NoYXIoKXtyZXR1cm4gdGhpcy5zdHJlYW0ucGVla0J5dGUoKX1nZXROdW1iZXIoKXtsZXQgZT10aGlzLmN1cnJlbnRDaGFyLHQ9ITEsaT0wLGE9MTtpZig0NT09PWUpe2E9LTE7ZT10aGlzLm5leHRDaGFyKCk7NDU9PT1lJiYoZT10aGlzLm5leHRDaGFyKCkpfWVsc2UgNDM9PT1lJiYoZT10aGlzLm5leHRDaGFyKCkpO2lmKDEwPT09ZXx8MTM9PT1lKWRve2U9dGhpcy5uZXh0Q2hhcigpfXdoaWxlKDEwPT09ZXx8MTM9PT1lKTtpZig0Nj09PWUpe2k9MTA7ZT10aGlzLm5leHRDaGFyKCl9aWYoZTw0OHx8ZT41Nyl7Y29uc3QgdD1gSW52YWxpZCBudW1iZXI6ICR7U3RyaW5nLmZyb21DaGFyQ29kZShlKX0gKGNoYXJDb2RlICR7ZX0pYDtpZihpc1doaXRlU3BhY2UoZSl8fC0xPT09ZSl7aW5mbyhgTGV4ZXIuZ2V0TnVtYmVyIC0gIiR7dH0iLmApO3JldHVybiAwfXRocm93IG5ldyBGb3JtYXRFcnJvcih0KX1sZXQgcj1lLTQ4LHM9MCxuPTE7Zm9yKDsoZT10aGlzLm5leHRDaGFyKCkpPj0wOylpZihlPj00OCYmZTw9NTcpe2NvbnN0IGE9ZS00ODtpZih0KXM9MTAqcythO2Vsc2V7MCE9PWkmJihpKj0xMCk7cj0xMCpyK2F9fWVsc2UgaWYoNDY9PT1lKXtpZigwIT09aSlicmVhaztpPTF9ZWxzZSBpZig0NT09PWUpd2FybigiQmFkbHkgZm9ybWF0dGVkIG51bWJlcjogbWludXMgc2lnbiBpbiB0aGUgbWlkZGxlIik7ZWxzZXtpZig2OSE9PWUmJjEwMSE9PWUpYnJlYWs7ZT10aGlzLnBlZWtDaGFyKCk7aWYoNDM9PT1lfHw0NT09PWUpe249NDU9PT1lPy0xOjE7dGhpcy5uZXh0Q2hhcigpfWVsc2UgaWYoZTw0OHx8ZT41NylicmVhazt0PSEwfTAhPT1pJiYoci89aSk7dCYmKHIqPTEwKioobipzKSk7cmV0dXJuIGEqcn1nZXRTdHJpbmcoKXtsZXQgZT0xLHQ9ITE7Y29uc3QgaT10aGlzLnN0ckJ1ZjtpLmxlbmd0aD0wO2xldCBhPXRoaXMubmV4dENoYXIoKTtmb3IoOzspe2xldCByPSExO3N3aXRjaCgwfGEpe2Nhc2UtMTp3YXJuKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIik7dD0hMDticmVhaztjYXNlIDQwOisrZTtpLnB1c2goIigiKTticmVhaztjYXNlIDQxOmlmKDA9PS0tZSl7dGhpcy5uZXh0Q2hhcigpO3Q9ITB9ZWxzZSBpLnB1c2goIikiKTticmVhaztjYXNlIDkyOmE9dGhpcy5uZXh0Q2hhcigpO3N3aXRjaChhKXtjYXNlLTE6d2FybigiVW50ZXJtaW5hdGVkIHN0cmluZyIpO3Q9ITA7YnJlYWs7Y2FzZSAxMTA6aS5wdXNoKCJcbiIpO2JyZWFrO2Nhc2UgMTE0OmkucHVzaCgiXHIiKTticmVhaztjYXNlIDExNjppLnB1c2goIlx0Iik7YnJlYWs7Y2FzZSA5ODppLnB1c2goIlxiIik7YnJlYWs7Y2FzZSAxMDI6aS5wdXNoKCJcZiIpO2JyZWFrO2Nhc2UgOTI6Y2FzZSA0MDpjYXNlIDQxOmkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGEpKTticmVhaztjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6bGV0IGU9MTUmYTthPXRoaXMubmV4dENoYXIoKTtyPSEwO2lmKGE+PTQ4JiZhPD01NSl7ZT0oZTw8MykrKDE1JmEpO2E9dGhpcy5uZXh0Q2hhcigpO2lmKGE+PTQ4JiZhPD01NSl7cj0hMTtlPShlPDwzKSsoMTUmYSl9fWkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTticmVhaztjYXNlIDEzOjEwPT09dGhpcy5wZWVrQ2hhcigpJiZ0aGlzLm5leHRDaGFyKCk7YnJlYWs7Y2FzZSAxMDpicmVhaztkZWZhdWx0OmkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGEpKX1icmVhaztkZWZhdWx0OmkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGEpKX1pZih0KWJyZWFrO3J8fChhPXRoaXMubmV4dENoYXIoKSl9cmV0dXJuIGkuam9pbigiIil9Z2V0TmFtZSgpe2xldCBlLHQ7Y29uc3QgaT10aGlzLnN0ckJ1ZjtpLmxlbmd0aD0wO2Zvcig7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmIVFpW2VdOylpZigzNT09PWUpe2U9dGhpcy5uZXh0Q2hhcigpO2lmKFFpW2VdKXt3YXJuKCJMZXhlcl9nZXROYW1lOiBOVU1CRVIgU0lHTiAoIykgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgaGV4YWRlY2ltYWwgbnVtYmVyLiIpO2kucHVzaCgiIyIpO2JyZWFrfWNvbnN0IGE9dG9IZXhEaWdpdChlKTtpZigtMSE9PWEpe3Q9ZTtlPXRoaXMubmV4dENoYXIoKTtjb25zdCByPXRvSGV4RGlnaXQoZSk7aWYoLTE9PT1yKXt3YXJuKGBMZXhlcl9nZXROYW1lOiBJbGxlZ2FsIGRpZ2l0ICgke1N0cmluZy5mcm9tQ2hhckNvZGUoZSl9KSBpbiBoZXhhZGVjaW1hbCBudW1iZXIuYCk7aS5wdXNoKCIjIixTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKTtpZihRaVtlXSlicmVhaztpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7Y29udGludWV9aS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYTw8NHxyKSl9ZWxzZSBpLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfWVsc2UgaS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO2kubGVuZ3RoPjEyNyYmd2FybihgTmFtZSB0b2tlbiBpcyBsb25nZXIgdGhhbiBhbGxvd2VkIGJ5IHRoZSBzcGVjOiAke2kubGVuZ3RofWApO3JldHVybiBOYW1lLmdldChpLmpvaW4oIiIpKX1faGV4U3RyaW5nV2FybihlKXs1IT10aGlzLl9oZXhTdHJpbmdOdW1XYXJuKys/dGhpcy5faGV4U3RyaW5nTnVtV2Fybj41fHx3YXJuKGBnZXRIZXhTdHJpbmcgLSBpZ25vcmluZyBpbnZhbGlkIGNoYXJhY3RlcjogJHtlfWApOndhcm4oImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGFkZGl0aW9uYWwgaW52YWxpZCBjaGFyYWN0ZXJzLiIpfWdldEhleFN0cmluZygpe2NvbnN0IGU9dGhpcy5zdHJCdWY7ZS5sZW5ndGg9MDtsZXQgdD10aGlzLmN1cnJlbnRDaGFyLGk9LTEsYT0tMTt0aGlzLl9oZXhTdHJpbmdOdW1XYXJuPTA7Zm9yKDs7KXtpZih0PDApe3dhcm4oIlVudGVybWluYXRlZCBoZXggc3RyaW5nIik7YnJlYWt9aWYoNjI9PT10KXt0aGlzLm5leHRDaGFyKCk7YnJlYWt9aWYoMSE9PVFpW3RdKXthPXRvSGV4RGlnaXQodCk7aWYoLTE9PT1hKXRoaXMuX2hleFN0cmluZ1dhcm4odCk7ZWxzZSBpZigtMT09PWkpaT1hO2Vsc2V7ZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaTw8NHxhKSk7aT0tMX10PXRoaXMubmV4dENoYXIoKX1lbHNlIHQ9dGhpcy5uZXh0Q2hhcigpfS0xIT09aSYmZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaTw8NCkpO3JldHVybiBlLmpvaW4oIiIpfWdldE9iaigpe2xldCBlPSExLHQ9dGhpcy5jdXJyZW50Q2hhcjtmb3IoOzspe2lmKHQ8MClyZXR1cm4gRHQ7aWYoZSkxMCE9PXQmJjEzIT09dHx8KGU9ITEpO2Vsc2UgaWYoMzc9PT10KWU9ITA7ZWxzZSBpZigxIT09UWlbdF0pYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gdGhpcy5nZXROdW1iZXIoKTtjYXNlIDQwOnJldHVybiB0aGlzLmdldFN0cmluZygpO2Nhc2UgNDc6cmV0dXJuIHRoaXMuZ2V0TmFtZSgpO2Nhc2UgOTE6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBDbWQuZ2V0KCJbIik7Y2FzZSA5Mzp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIENtZC5nZXQoIl0iKTtjYXNlIDYwOnQ9dGhpcy5uZXh0Q2hhcigpO2lmKDYwPT09dCl7dGhpcy5uZXh0Q2hhcigpO3JldHVybiBDbWQuZ2V0KCI8PCIpfXJldHVybiB0aGlzLmdldEhleFN0cmluZygpO2Nhc2UgNjI6dD10aGlzLm5leHRDaGFyKCk7aWYoNjI9PT10KXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIENtZC5nZXQoIj4+Iil9cmV0dXJuIENtZC5nZXQoIj4iKTtjYXNlIDEyMzp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIENtZC5nZXQoInsiKTtjYXNlIDEyNTp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIENtZC5nZXQoIn0iKTtjYXNlIDQxOnRoaXMubmV4dENoYXIoKTt0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYElsbGVnYWwgY2hhcmFjdGVyOiAke3R9YCl9bGV0IGk9U3RyaW5nLmZyb21DaGFyQ29kZSh0KTtpZih0PDMyfHx0PjEyNyl7Y29uc3QgZT10aGlzLnBlZWtDaGFyKCk7aWYoZT49MzImJmU8PTEyNyl7dGhpcy5uZXh0Q2hhcigpO3JldHVybiBDbWQuZ2V0KGkpfX1jb25zdCBhPXRoaXMua25vd25Db21tYW5kcztsZXQgcj12b2lkIDAhPT1hPy5baV07Zm9yKDsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYhUWlbdF07KXtjb25zdCBlPWkrU3RyaW5nLmZyb21DaGFyQ29kZSh0KTtpZihyJiZ2b2lkIDA9PT1hW2VdKWJyZWFrO2lmKDEyOD09PWkubGVuZ3RoKXRocm93IG5ldyBGb3JtYXRFcnJvcihgQ29tbWFuZCB0b2tlbiB0b28gbG9uZzogJHtpLmxlbmd0aH1gKTtpPWU7cj12b2lkIDAhPT1hPy5baV19aWYoInRydWUiPT09aSlyZXR1cm4hMDtpZigiZmFsc2UiPT09aSlyZXR1cm4hMTtpZigibnVsbCI9PT1pKXJldHVybiBudWxsOyJCSSI9PT1pJiYodGhpcy5iZWdpbklubGluZUltYWdlUG9zPXRoaXMuc3RyZWFtLnBvcyk7cmV0dXJuIENtZC5nZXQoaSl9c2tpcFRvTmV4dExpbmUoKXtsZXQgZT10aGlzLmN1cnJlbnRDaGFyO2Zvcig7ZT49MDspe2lmKDEzPT09ZSl7ZT10aGlzLm5leHRDaGFyKCk7MTA9PT1lJiZ0aGlzLm5leHRDaGFyKCk7YnJlYWt9aWYoMTA9PT1lKXt0aGlzLm5leHRDaGFyKCk7YnJlYWt9ZT10aGlzLm5leHRDaGFyKCl9fX1jbGFzcyBMaW5lYXJpemF0aW9ue3N0YXRpYyBjcmVhdGUoZSl7ZnVuY3Rpb24gZ2V0SW50KGUsdCxpPSExKXtjb25zdCBhPWUuZ2V0KHQpO2lmKE51bWJlci5pc0ludGVnZXIoYSkmJihpP2E+PTA6YT4wKSlyZXR1cm4gYTt0aHJvdyBuZXcgRXJyb3IoYFRoZSAiJHt0fSIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC5gKX1jb25zdCB0PW5ldyBQYXJzZXIoe2xleGVyOm5ldyBMZXhlcihlKSx4cmVmOm51bGx9KSxpPXQuZ2V0T2JqKCksYT10LmdldE9iaigpLHI9dC5nZXRPYmooKSxzPXQuZ2V0T2JqKCk7bGV0IG4sbztpZighKE51bWJlci5pc0ludGVnZXIoaSkmJk51bWJlci5pc0ludGVnZXIoYSkmJmlzQ21kKHIsIm9iaiIpJiZzIGluc3RhbmNlb2YgRGljdCYmIm51bWJlciI9PXR5cGVvZihuPXMuZ2V0KCJMaW5lYXJpemVkIikpJiZuPjApKXJldHVybiBudWxsO2lmKChvPWdldEludChzLCJMIikpIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdUaGUgIkwiIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXMgbm90IGVxdWFsIHRoZSBzdHJlYW0gbGVuZ3RoLicpO3JldHVybntsZW5ndGg6byxoaW50czpmdW5jdGlvbiBnZXRIaW50cyhlKXtjb25zdCB0PWUuZ2V0KCJIIik7bGV0IGk7aWYoQXJyYXkuaXNBcnJheSh0KSYmKDI9PT0oaT10Lmxlbmd0aCl8fDQ9PT1pKSl7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7Y29uc3QgaT10W2VdO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihpKSYmaT4wKSl0aHJvdyBuZXcgRXJyb3IoYEhpbnQgKCR7ZX0pIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC5gKX1yZXR1cm4gdH10aHJvdyBuZXcgRXJyb3IoIkhpbnQgYXJyYXkgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLiIpfShzKSxvYmplY3ROdW1iZXJGaXJzdDpnZXRJbnQocywiTyIpLGVuZEZpcnN0OmdldEludChzLCJFIiksbnVtUGFnZXM6Z2V0SW50KHMsIk4iKSxtYWluWFJlZkVudHJpZXNPZmZzZXQ6Z2V0SW50KHMsIlQiKSxwYWdlRmlyc3Q6cy5oYXMoIlAiKT9nZXRJbnQocywiUCIsITApOjB9fX1jb25zdCBFaT1bIkFkb2JlLUdCMS1VQ1MyIiwiQWRvYmUtQ05TMS1VQ1MyIiwiQWRvYmUtSmFwYW4xLVVDUzIiLCJBZG9iZS1Lb3JlYTEtVUNTMiIsIjc4LUVVQy1IIiwiNzgtRVVDLVYiLCI3OC1IIiwiNzgtUktTSi1IIiwiNzgtUktTSi1WIiwiNzgtViIsIjc4bXMtUktTSi1IIiwiNzhtcy1SS1NKLVYiLCI4M3B2LVJLU0otSCIsIjkwbXMtUktTSi1IIiwiOTBtcy1SS1NKLVYiLCI5MG1zcC1SS1NKLUgiLCI5MG1zcC1SS1NKLVYiLCI5MHB2LVJLU0otSCIsIjkwcHYtUktTSi1WIiwiQWRkLUgiLCJBZGQtUktTSi1IIiwiQWRkLVJLU0otViIsIkFkZC1WIiwiQWRvYmUtQ05TMS0wIiwiQWRvYmUtQ05TMS0xIiwiQWRvYmUtQ05TMS0yIiwiQWRvYmUtQ05TMS0zIiwiQWRvYmUtQ05TMS00IiwiQWRvYmUtQ05TMS01IiwiQWRvYmUtQ05TMS02IiwiQWRvYmUtR0IxLTAiLCJBZG9iZS1HQjEtMSIsIkFkb2JlLUdCMS0yIiwiQWRvYmUtR0IxLTMiLCJBZG9iZS1HQjEtNCIsIkFkb2JlLUdCMS01IiwiQWRvYmUtSmFwYW4xLTAiLCJBZG9iZS1KYXBhbjEtMSIsIkFkb2JlLUphcGFuMS0yIiwiQWRvYmUtSmFwYW4xLTMiLCJBZG9iZS1KYXBhbjEtNCIsIkFkb2JlLUphcGFuMS01IiwiQWRvYmUtSmFwYW4xLTYiLCJBZG9iZS1Lb3JlYTEtMCIsIkFkb2JlLUtvcmVhMS0xIiwiQWRvYmUtS29yZWExLTIiLCJCNS1IIiwiQjUtViIsIkI1cGMtSCIsIkI1cGMtViIsIkNOUy1FVUMtSCIsIkNOUy1FVUMtViIsIkNOUzEtSCIsIkNOUzEtViIsIkNOUzItSCIsIkNOUzItViIsIkVUSEstQjUtSCIsIkVUSEstQjUtViIsIkVUZW4tQjUtSCIsIkVUZW4tQjUtViIsIkVUZW5tcy1CNS1IIiwiRVRlbm1zLUI1LVYiLCJFVUMtSCIsIkVVQy1WIiwiRXh0LUgiLCJFeHQtUktTSi1IIiwiRXh0LVJLU0otViIsIkV4dC1WIiwiR0ItRVVDLUgiLCJHQi1FVUMtViIsIkdCLUgiLCJHQi1WIiwiR0JLLUVVQy1IIiwiR0JLLUVVQy1WIiwiR0JLMkstSCIsIkdCSzJLLVYiLCJHQktwLUVVQy1IIiwiR0JLcC1FVUMtViIsIkdCVC1FVUMtSCIsIkdCVC1FVUMtViIsIkdCVC1IIiwiR0JULVYiLCJHQlRwYy1FVUMtSCIsIkdCVHBjLUVVQy1WIiwiR0JwYy1FVUMtSCIsIkdCcGMtRVVDLVYiLCJIIiwiSEtkbGEtQjUtSCIsIkhLZGxhLUI1LVYiLCJIS2RsYi1CNS1IIiwiSEtkbGItQjUtViIsIkhLZ2Njcy1CNS1IIiwiSEtnY2NzLUI1LVYiLCJIS20zMTQtQjUtSCIsIkhLbTMxNC1CNS1WIiwiSEttNDcxLUI1LUgiLCJIS200NzEtQjUtViIsIkhLc2NzLUI1LUgiLCJIS3Njcy1CNS1WIiwiSGFua2FrdSIsIkhpcmFnYW5hIiwiS1NDLUVVQy1IIiwiS1NDLUVVQy1WIiwiS1NDLUgiLCJLU0MtSm9oYWItSCIsIktTQy1Kb2hhYi1WIiwiS1NDLVYiLCJLU0Ntcy1VSEMtSCIsIktTQ21zLVVIQy1IVy1IIiwiS1NDbXMtVUhDLUhXLVYiLCJLU0Ntcy1VSEMtViIsIktTQ3BjLUVVQy1IIiwiS1NDcGMtRVVDLVYiLCJLYXRha2FuYSIsIk5XUC1IIiwiTldQLVYiLCJSS1NKLUgiLCJSS1NKLVYiLCJSb21hbiIsIlVuaUNOUy1VQ1MyLUgiLCJVbmlDTlMtVUNTMi1WIiwiVW5pQ05TLVVURjE2LUgiLCJVbmlDTlMtVVRGMTYtViIsIlVuaUNOUy1VVEYzMi1IIiwiVW5pQ05TLVVURjMyLVYiLCJVbmlDTlMtVVRGOC1IIiwiVW5pQ05TLVVURjgtViIsIlVuaUdCLVVDUzItSCIsIlVuaUdCLVVDUzItViIsIlVuaUdCLVVURjE2LUgiLCJVbmlHQi1VVEYxNi1WIiwiVW5pR0ItVVRGMzItSCIsIlVuaUdCLVVURjMyLVYiLCJVbmlHQi1VVEY4LUgiLCJVbmlHQi1VVEY4LVYiLCJVbmlKSVMtVUNTMi1IIiwiVW5pSklTLVVDUzItSFctSCIsIlVuaUpJUy1VQ1MyLUhXLVYiLCJVbmlKSVMtVUNTMi1WIiwiVW5pSklTLVVURjE2LUgiLCJVbmlKSVMtVVRGMTYtViIsIlVuaUpJUy1VVEYzMi1IIiwiVW5pSklTLVVURjMyLVYiLCJVbmlKSVMtVVRGOC1IIiwiVW5pSklTLVVURjgtViIsIlVuaUpJUzIwMDQtVVRGMTYtSCIsIlVuaUpJUzIwMDQtVVRGMTYtViIsIlVuaUpJUzIwMDQtVVRGMzItSCIsIlVuaUpJUzIwMDQtVVRGMzItViIsIlVuaUpJUzIwMDQtVVRGOC1IIiwiVW5pSklTMjAwNC1VVEY4LVYiLCJVbmlKSVNQcm8tVUNTMi1IVy1WIiwiVW5pSklTUHJvLVVDUzItViIsIlVuaUpJU1Byby1VVEY4LVYiLCJVbmlKSVNYMDIxMy1VVEYzMi1IIiwiVW5pSklTWDAyMTMtVVRGMzItViIsIlVuaUpJU1gwMjEzMjAwNC1VVEYzMi1IIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLVYiLCJVbmlLUy1VQ1MyLUgiLCJVbmlLUy1VQ1MyLVYiLCJVbmlLUy1VVEYxNi1IIiwiVW5pS1MtVVRGMTYtViIsIlVuaUtTLVVURjMyLUgiLCJVbmlLUy1VVEYzMi1WIiwiVW5pS1MtVVRGOC1IIiwiVW5pS1MtVVRGOC1WIiwiViIsIldQLVN5bWJvbCJdLHVpPTIqKjI0LTE7Y2xhc3MgQ01hcHtjb25zdHJ1Y3RvcihlPSExKXt0aGlzLmNvZGVzcGFjZVJhbmdlcz1bW10sW10sW10sW11dO3RoaXMubnVtQ29kZXNwYWNlUmFuZ2VzPTA7dGhpcy5fbWFwPVtdO3RoaXMubmFtZT0iIjt0aGlzLnZlcnRpY2FsPSExO3RoaXMudXNlQ01hcD1udWxsO3RoaXMuYnVpbHRJbkNNYXA9ZX1hZGRDb2Rlc3BhY2VSYW5nZShlLHQsaSl7dGhpcy5jb2Rlc3BhY2VSYW5nZXNbZS0xXS5wdXNoKHQsaSk7dGhpcy5udW1Db2Rlc3BhY2VSYW5nZXMrK31tYXBDaWRSYW5nZShlLHQsaSl7aWYodC1lPnVpKXRocm93IG5ldyBFcnJvcigibWFwQ2lkUmFuZ2UgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuIik7Zm9yKDtlPD10Oyl0aGlzLl9tYXBbZSsrXT1pKyt9bWFwQmZSYW5nZShlLHQsaSl7aWYodC1lPnVpKXRocm93IG5ldyBFcnJvcigibWFwQmZSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtjb25zdCBhPWkubGVuZ3RoLTE7Zm9yKDtlPD10Oyl7dGhpcy5fbWFwW2UrK109aTtjb25zdCB0PWkuY2hhckNvZGVBdChhKSsxO3Q+MjU1P2k9aS5zdWJzdHJpbmcoMCxhLTEpK1N0cmluZy5mcm9tQ2hhckNvZGUoaS5jaGFyQ29kZUF0KGEtMSkrMSkrIlwwIjppPWkuc3Vic3RyaW5nKDAsYSkrU3RyaW5nLmZyb21DaGFyQ29kZSh0KX19bWFwQmZSYW5nZVRvQXJyYXkoZSx0LGkpe2lmKHQtZT51aSl0aHJvdyBuZXcgRXJyb3IoIm1hcEJmUmFuZ2VUb0FycmF5IC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2NvbnN0IGE9aS5sZW5ndGg7bGV0IHI9MDtmb3IoO2U8PXQmJnI8YTspe3RoaXMuX21hcFtlXT1pW3IrK107KytlfX1tYXBPbmUoZSx0KXt0aGlzLl9tYXBbZV09dH1sb29rdXAoZSl7cmV0dXJuIHRoaXMuX21hcFtlXX1jb250YWlucyhlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbWFwW2VdfWZvckVhY2goZSl7Y29uc3QgdD10aGlzLl9tYXAsaT10Lmxlbmd0aDtpZihpPD02NTUzNilmb3IobGV0IGE9MDthPGk7YSsrKXZvaWQgMCE9PXRbYV0mJmUoYSx0W2FdKTtlbHNlIGZvcihjb25zdCBpIGluIHQpZShpLHRbaV0pfWNoYXJDb2RlT2YoZSl7Y29uc3QgdD10aGlzLl9tYXA7aWYodC5sZW5ndGg8PTY1NTM2KXJldHVybiB0LmluZGV4T2YoZSk7Zm9yKGNvbnN0IGkgaW4gdClpZih0W2ldPT09ZSlyZXR1cm4gMHxpO3JldHVybi0xfWdldE1hcCgpe3JldHVybiB0aGlzLl9tYXB9cmVhZENoYXJDb2RlKGUsdCxpKXtsZXQgYT0wO2NvbnN0IHI9dGhpcy5jb2Rlc3BhY2VSYW5nZXM7Zm9yKGxldCBzPTAsbj1yLmxlbmd0aDtzPG47cysrKXthPShhPDw4fGUuY2hhckNvZGVBdCh0K3MpKT4+PjA7Y29uc3Qgbj1yW3NdO2ZvcihsZXQgZT0wLHQ9bi5sZW5ndGg7ZTx0Oyl7Y29uc3QgdD1uW2UrK10scj1uW2UrK107aWYoYT49dCYmYTw9cil7aS5jaGFyY29kZT1hO2kubGVuZ3RoPXMrMTtyZXR1cm59fX1pLmNoYXJjb2RlPTA7aS5sZW5ndGg9MX1nZXRDaGFyQ29kZUxlbmd0aChlKXtjb25zdCB0PXRoaXMuY29kZXNwYWNlUmFuZ2VzO2ZvcihsZXQgaT0wLGE9dC5sZW5ndGg7aTxhO2krKyl7Y29uc3QgYT10W2ldO2ZvcihsZXQgdD0wLHI9YS5sZW5ndGg7dDxyOyl7Y29uc3Qgcj1hW3QrK10scz1hW3QrK107aWYoZT49ciYmZTw9cylyZXR1cm4gaSsxfX1yZXR1cm4gMX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX21hcC5sZW5ndGh9Z2V0IGlzSWRlbnRpdHlDTWFwKCl7aWYoIklkZW50aXR5LUgiIT09dGhpcy5uYW1lJiYiSWRlbnRpdHktViIhPT10aGlzLm5hbWUpcmV0dXJuITE7aWYoNjU1MzYhPT10aGlzLl9tYXAubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wO2U8NjU1MzY7ZSsrKWlmKHRoaXMuX21hcFtlXSE9PWUpcmV0dXJuITE7cmV0dXJuITB9fWNsYXNzIElkZW50aXR5Q01hcCBleHRlbmRzIENNYXB7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpO3RoaXMudmVydGljYWw9ZTt0aGlzLmFkZENvZGVzcGFjZVJhbmdlKHQsMCw2NTUzNSl9bWFwQ2lkUmFuZ2UoZSx0LGkpe3VucmVhY2hhYmxlKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkUmFuZ2UiKX1tYXBCZlJhbmdlKGUsdCxpKXt1bnJlYWNoYWJsZSgic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2UiKX1tYXBCZlJhbmdlVG9BcnJheShlLHQsaSl7dW5yZWFjaGFibGUoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlVG9BcnJheSIpfW1hcE9uZShlLHQpe3VucmVhY2hhYmxlKCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkT25lIil9bG9va3VwKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNT9lOnZvaWQgMH1jb250YWlucyhlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzV9Zm9yRWFjaChlKXtmb3IobGV0IHQ9MDt0PD02NTUzNTt0KyspZSh0LHQpfWNoYXJDb2RlT2YoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1P2U6LTF9Z2V0TWFwKCl7Y29uc3QgZT1uZXcgQXJyYXkoNjU1MzYpO2ZvcihsZXQgdD0wO3Q8PTY1NTM1O3QrKyllW3RdPXQ7cmV0dXJuIGV9Z2V0IGxlbmd0aCgpe3JldHVybiA2NTUzNn1nZXQgaXNJZGVudGl0eUNNYXAoKXt1bnJlYWNoYWJsZSgic2hvdWxkIG5vdCBhY2Nlc3MgLmlzSWRlbnRpdHlDTWFwIil9fWZ1bmN0aW9uIHN0clRvSW50KGUpe2xldCB0PTA7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdD10PDw4fGUuY2hhckNvZGVBdChpKTtyZXR1cm4gdD4+PjB9ZnVuY3Rpb24gZXhwZWN0U3RyaW5nKGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBzdHJpbmcuIil9ZnVuY3Rpb24gZXhwZWN0SW50KGUpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiTWFsZm9ybWVkIENNYXA6IGV4cGVjdGVkIGludC4iKX1mdW5jdGlvbiBwYXJzZUJmQ2hhcihlLHQpe2Zvcig7Oyl7bGV0IGk9dC5nZXRPYmooKTtpZihpPT09RHQpYnJlYWs7aWYoaXNDbWQoaSwiZW5kYmZjaGFyIikpcmV0dXJuO2V4cGVjdFN0cmluZyhpKTtjb25zdCBhPXN0clRvSW50KGkpO2k9dC5nZXRPYmooKTtleHBlY3RTdHJpbmcoaSk7Y29uc3Qgcj1pO2UubWFwT25lKGEscil9fWZ1bmN0aW9uIHBhcnNlQmZSYW5nZShlLHQpe2Zvcig7Oyl7bGV0IGk9dC5nZXRPYmooKTtpZihpPT09RHQpYnJlYWs7aWYoaXNDbWQoaSwiZW5kYmZyYW5nZSIpKXJldHVybjtleHBlY3RTdHJpbmcoaSk7Y29uc3QgYT1zdHJUb0ludChpKTtpPXQuZ2V0T2JqKCk7ZXhwZWN0U3RyaW5nKGkpO2NvbnN0IHI9c3RyVG9JbnQoaSk7aT10LmdldE9iaigpO2lmKE51bWJlci5pc0ludGVnZXIoaSl8fCJzdHJpbmciPT10eXBlb2YgaSl7Y29uc3QgdD1OdW1iZXIuaXNJbnRlZ2VyKGkpP1N0cmluZy5mcm9tQ2hhckNvZGUoaSk6aTtlLm1hcEJmUmFuZ2UoYSxyLHQpfWVsc2V7aWYoIWlzQ21kKGksIlsiKSlicmVhazt7aT10LmdldE9iaigpO2NvbnN0IHM9W107Zm9yKDshaXNDbWQoaSwiXSIpJiZpIT09RHQ7KXtzLnB1c2goaSk7aT10LmdldE9iaigpfWUubWFwQmZSYW5nZVRvQXJyYXkoYSxyLHMpfX19dGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIGJmIHJhbmdlLiIpfWZ1bmN0aW9uIHBhcnNlQ2lkQ2hhcihlLHQpe2Zvcig7Oyl7bGV0IGk9dC5nZXRPYmooKTtpZihpPT09RHQpYnJlYWs7aWYoaXNDbWQoaSwiZW5kY2lkY2hhciIpKXJldHVybjtleHBlY3RTdHJpbmcoaSk7Y29uc3QgYT1zdHJUb0ludChpKTtpPXQuZ2V0T2JqKCk7ZXhwZWN0SW50KGkpO2NvbnN0IHI9aTtlLm1hcE9uZShhLHIpfX1mdW5jdGlvbiBwYXJzZUNpZFJhbmdlKGUsdCl7Zm9yKDs7KXtsZXQgaT10LmdldE9iaigpO2lmKGk9PT1EdClicmVhaztpZihpc0NtZChpLCJlbmRjaWRyYW5nZSIpKXJldHVybjtleHBlY3RTdHJpbmcoaSk7Y29uc3QgYT1zdHJUb0ludChpKTtpPXQuZ2V0T2JqKCk7ZXhwZWN0U3RyaW5nKGkpO2NvbnN0IHI9c3RyVG9JbnQoaSk7aT10LmdldE9iaigpO2V4cGVjdEludChpKTtjb25zdCBzPWk7ZS5tYXBDaWRSYW5nZShhLHIscyl9fWZ1bmN0aW9uIHBhcnNlQ29kZXNwYWNlUmFuZ2UoZSx0KXtmb3IoOzspe2xldCBpPXQuZ2V0T2JqKCk7aWYoaT09PUR0KWJyZWFrO2lmKGlzQ21kKGksImVuZGNvZGVzcGFjZXJhbmdlIikpcmV0dXJuO2lmKCJzdHJpbmciIT10eXBlb2YgaSlicmVhaztjb25zdCBhPXN0clRvSW50KGkpO2k9dC5nZXRPYmooKTtpZigic3RyaW5nIiE9dHlwZW9mIGkpYnJlYWs7Y29uc3Qgcj1zdHJUb0ludChpKTtlLmFkZENvZGVzcGFjZVJhbmdlKGkubGVuZ3RoLGEscil9dGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIGNvZGVzcGFjZSByYW5nZS4iKX1mdW5jdGlvbiBwYXJzZVdNb2RlKGUsdCl7Y29uc3QgaT10LmdldE9iaigpO051bWJlci5pc0ludGVnZXIoaSkmJihlLnZlcnRpY2FsPSEhaSl9ZnVuY3Rpb24gcGFyc2VDTWFwTmFtZShlLHQpe2NvbnN0IGk9dC5nZXRPYmooKTtpIGluc3RhbmNlb2YgTmFtZSYmKGUubmFtZT1pLm5hbWUpfWFzeW5jIGZ1bmN0aW9uIHBhcnNlQ01hcChlLHQsaSxhKXtsZXQgcixzO0E6Zm9yKDs7KXRyeXtjb25zdCBpPXQuZ2V0T2JqKCk7aWYoaT09PUR0KWJyZWFrO2lmKGkgaW5zdGFuY2VvZiBOYW1lKXsiV01vZGUiPT09aS5uYW1lP3BhcnNlV01vZGUoZSx0KToiQ01hcE5hbWUiPT09aS5uYW1lJiZwYXJzZUNNYXBOYW1lKGUsdCk7cj1pfWVsc2UgaWYoaSBpbnN0YW5jZW9mIENtZClzd2l0Y2goaS5jbWQpe2Nhc2UiZW5kY21hcCI6YnJlYWsgQTtjYXNlInVzZWNtYXAiOnIgaW5zdGFuY2VvZiBOYW1lJiYocz1yLm5hbWUpO2JyZWFrO2Nhc2UiYmVnaW5jb2Rlc3BhY2VyYW5nZSI6cGFyc2VDb2Rlc3BhY2VSYW5nZShlLHQpO2JyZWFrO2Nhc2UiYmVnaW5iZmNoYXIiOnBhcnNlQmZDaGFyKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmNpZGNoYXIiOnBhcnNlQ2lkQ2hhcihlLHQpO2JyZWFrO2Nhc2UiYmVnaW5iZnJhbmdlIjpwYXJzZUJmUmFuZ2UoZSx0KTticmVhaztjYXNlImJlZ2luY2lkcmFuZ2UiOnBhcnNlQ2lkUmFuZ2UoZSx0KX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybigiSW52YWxpZCBjTWFwIGRhdGE6ICIrZSk7Y29udGludWV9IWEmJnMmJihhPXMpO3JldHVybiBhP2V4dGVuZENNYXAoZSxpLGEpOmV9YXN5bmMgZnVuY3Rpb24gZXh0ZW5kQ01hcChlLHQsaSl7ZS51c2VDTWFwPWF3YWl0IGNyZWF0ZUJ1aWx0SW5DTWFwKGksdCk7aWYoMD09PWUubnVtQ29kZXNwYWNlUmFuZ2VzKXtjb25zdCB0PWUudXNlQ01hcC5jb2Rlc3BhY2VSYW5nZXM7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspZS5jb2Rlc3BhY2VSYW5nZXNbaV09dFtpXS5zbGljZSgpO2UubnVtQ29kZXNwYWNlUmFuZ2VzPWUudXNlQ01hcC5udW1Db2Rlc3BhY2VSYW5nZXN9ZS51c2VDTWFwLmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7ZS5jb250YWlucyh0KXx8ZS5tYXBPbmUodCxlLnVzZUNNYXAubG9va3VwKHQpKX0pKTtyZXR1cm4gZX1hc3luYyBmdW5jdGlvbiBjcmVhdGVCdWlsdEluQ01hcChlLHQpe2lmKCJJZGVudGl0eS1IIj09PWUpcmV0dXJuIG5ldyBJZGVudGl0eUNNYXAoITEsMik7aWYoIklkZW50aXR5LVYiPT09ZSlyZXR1cm4gbmV3IElkZW50aXR5Q01hcCghMCwyKTtpZighRWkuaW5jbHVkZXMoZSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIENNYXAgbmFtZTogIitlKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkJ1aWx0LWluIENNYXAgcGFyYW1ldGVycyBhcmUgbm90IHByb3ZpZGVkLiIpO2NvbnN0e2NNYXBEYXRhOmksY29tcHJlc3Npb25UeXBlOmF9PWF3YWl0IHQoZSkscj1uZXcgQ01hcCghMCk7aWYoYT09PWJBLkJJTkFSWSlyZXR1cm4obmV3IEJpbmFyeUNNYXBSZWFkZXIpLnByb2Nlc3MoaSxyLChlPT5leHRlbmRDTWFwKHIsdCxlKSkpO2lmKGE9PT1iQS5OT05FKXtjb25zdCBlPW5ldyBMZXhlcihuZXcgU3RyZWFtKGkpKTtyZXR1cm4gcGFyc2VDTWFwKHIsZSx0LG51bGwpfXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBDTWFwICJjb21wcmVzc2lvblR5cGUiIHZhbHVlOiAke2F9YCl9Y2xhc3MgQ01hcEZhY3Rvcnl7c3RhdGljIGFzeW5jIGNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnQsdXNlQ01hcDppfSl7aWYoZSBpbnN0YW5jZW9mIE5hbWUpcmV0dXJuIGNyZWF0ZUJ1aWx0SW5DTWFwKGUubmFtZSx0KTtpZihlIGluc3RhbmNlb2YgQmFzZVN0cmVhbSl7Y29uc3QgYT1hd2FpdCBwYXJzZUNNYXAobmV3IENNYXAsbmV3IExleGVyKGUpLHQsaSk7cmV0dXJuIGEuaXNJZGVudGl0eUNNYXA/Y3JlYXRlQnVpbHRJbkNNYXAoYS5uYW1lLHQpOmF9dGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyByZXF1aXJlZC4iKX19X193ZWJwYWNrX3JlcXVpcmVfXygxNzk1KTtjb25zdCBkaT1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiJdLGZpPVsiLm5vdGRlZiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCJEb3RhY2NlbnRzbWFsbCIsIk1hY3JvbnNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCJdLHBpPVsiLm5vdGRlZiIsInNwYWNlIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsImh5cGhlbnN1cGVyaW9yIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsImNlbnRvbGRzdHlsZSIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciJdLG1pPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiIiwiIiwiIiwiaXN1cGVyaW9yIiwiIiwiIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwiIiwiIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCIiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiIiwiIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIiIsIkRvdGFjY2VudHNtYWxsIiwiIiwiIiwiTWFjcm9uc21hbGwiLCIiLCIiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCIiLCIiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIl0seWk9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJjZW50b2xkc3R5bGUiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsIiIsInF1ZXN0aW9uc21hbGwiLCIiLCIiLCIiLCIiLCJFdGhzbWFsbCIsIiIsIiIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCIiLCIiLCIiLCIiLCIiLCIiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsIiIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbmluZmVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiIiwiIiwiYXN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiQWFjdXRlc21hbGwiLCJBZ3JhdmVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQXJpbmdzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWFjdXRlc21hbGwiLCJJZ3JhdmVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk90aWxkZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIiIsImVpZ2h0c3VwZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsIlNjYXJvbnNtYWxsIiwiIiwiY2VudGluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCIiLCJEaWVyZXNpc3NtYWxsIiwiIiwiQ2Fyb25zbWFsbCIsIm9zdXBlcmlvciIsImZpdmVpbmZlcmlvciIsIiIsImNvbW1haW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsIllhY3V0ZXNtYWxsIiwiIiwiZG9sbGFyaW5mZXJpb3IiLCIiLCIiLCJUaG9ybnNtYWxsIiwiIiwibmluZWluZmVyaW9yIiwiemVyb2luZmVyaW9yIiwiWmNhcm9uc21hbGwiLCJBRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWluZmVyaW9yIiwiTHNsYXNoc21hbGwiLCIiLCIiLCIiLCIiLCIiLCIiLCJDZWRpbGxhc21hbGwiLCIiLCIiLCIiLCIiLCIiLCJPRXNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbnN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiZXhjbGFtZG93bnNtYWxsIiwiIiwiWWRpZXJlc2lzc21hbGwiLCIiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9zdXBlcmlvciIsIiIsImVzdXBlcmlvciIsInJzdXBlcmlvciIsInRzdXBlcmlvciIsIiIsIiIsImlzdXBlcmlvciIsInNzdXBlcmlvciIsImRzdXBlcmlvciIsIiIsIiIsIiIsIiIsIiIsImxzdXBlcmlvciIsIk9nb25la3NtYWxsIiwiQnJldmVzbWFsbCIsIk1hY3JvbnNtYWxsIiwiYnN1cGVyaW9yIiwibnN1cGVyaW9yIiwibXN1cGVyaW9yIiwiY29tbWFzdXBlcmlvciIsInBlcmlvZHN1cGVyaW9yIiwiRG90YWNjZW50c21hbGwiLCJSaW5nc21hbGwiLCIiLCIiLCIiLCIiXSx3aT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCIiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwic3BhY2UiLCJBZ3JhdmUiLCJBdGlsZGUiLCJPdGlsZGUiLCJPRSIsIm9lIiwiZW5kYXNoIiwiZW1kYXNoIiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsInF1b3RlbGVmdCIsInF1b3RlcmlnaHQiLCJkaXZpZGUiLCJsb3plbmdlIiwieWRpZXJlc2lzIiwiWWRpZXJlc2lzIiwiZnJhY3Rpb24iLCJjdXJyZW5jeSIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicGVydGhvdXNhbmQiLCJBY2lyY3VtZmxleCIsIkVjaXJjdW1mbGV4IiwiQWFjdXRlIiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsImFwcGxlIiwiT2dyYXZlIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZ3JhdmUiLCJkb3RsZXNzaSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiJdLGJpPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCIiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsIiIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsIiIsInF1ZXN0aW9uZG93biIsIiIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwiIiwicmluZyIsImNlZGlsbGEiLCIiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIkFFIiwiIiwib3JkZmVtaW5pbmUiLCIiLCIiLCIiLCIiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsIiIsIiIsIiIsIiIsIiIsImFlIiwiIiwiIiwiIiwiZG90bGVzc2kiLCIiLCIiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCIiLCIiLCIiLCIiXSxEaT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJidWxsZXQiLCJFdXJvIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJmbG9yaW4iLCJxdW90ZWRibGJhc2UiLCJlbGxpcHNpcyIsImRhZ2dlciIsImRhZ2dlcmRibCIsImNpcmN1bWZsZXgiLCJwZXJ0aG91c2FuZCIsIlNjYXJvbiIsImd1aWxzaW5nbGxlZnQiLCJPRSIsImJ1bGxldCIsIlpjYXJvbiIsImJ1bGxldCIsImJ1bGxldCIsInF1b3RlbGVmdCIsInF1b3RlcmlnaHQiLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwiYnVsbGV0IiwiZW5kYXNoIiwiZW1kYXNoIiwidGlsZGUiLCJ0cmFkZW1hcmsiLCJzY2Fyb24iLCJndWlsc2luZ2xyaWdodCIsIm9lIiwiYnVsbGV0IiwiemNhcm9uIiwiWWRpZXJlc2lzIiwic3BhY2UiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiY3VycmVuY3kiLCJ5ZW4iLCJicm9rZW5iYXIiLCJzZWN0aW9uIiwiZGllcmVzaXMiLCJjb3B5cmlnaHQiLCJvcmRmZW1pbmluZSIsImd1aWxsZW1vdGxlZnQiLCJsb2dpY2Fsbm90IiwiaHlwaGVuIiwicmVnaXN0ZXJlZCIsIm1hY3JvbiIsImRlZ3JlZSIsInBsdXNtaW51cyIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImFjdXRlIiwibXUiLCJwYXJhZ3JhcGgiLCJwZXJpb2RjZW50ZXJlZCIsImNlZGlsbGEiLCJvbmVzdXBlcmlvciIsIm9yZG1hc2N1bGluZSIsImd1aWxsZW1vdHJpZ2h0Iiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duIiwiQWdyYXZlIiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkFFIiwiQ2NlZGlsbGEiLCJFZ3JhdmUiLCJFYWN1dGUiLCJFY2lyY3VtZmxleCIsIkVkaWVyZXNpcyIsIklncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiRXRoIiwiTnRpbGRlIiwiT2dyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJPdGlsZGUiLCJPZGllcmVzaXMiLCJtdWx0aXBseSIsIk9zbGFzaCIsIlVncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiWWFjdXRlIiwiVGhvcm4iLCJnZXJtYW5kYmxzIiwiYWdyYXZlIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhdGlsZGUiLCJhZGllcmVzaXMiLCJhcmluZyIsImFlIiwiY2NlZGlsbGEiLCJlZ3JhdmUiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImlncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiZXRoIiwibnRpbGRlIiwib2dyYXZlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvdGlsZGUiLCJvZGllcmVzaXMiLCJkaXZpZGUiLCJvc2xhc2giLCJ1Z3JhdmUiLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInlhY3V0ZSIsInRob3JuIiwieWRpZXJlc2lzIl0sRmk9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInVuaXZlcnNhbCIsIm51bWJlcnNpZ24iLCJleGlzdGVudGlhbCIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJzdWNodGhhdCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3Rlcmlza21hdGgiLCJwbHVzIiwiY29tbWEiLCJtaW51cyIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiY29uZ3J1ZW50IiwiQWxwaGEiLCJCZXRhIiwiQ2hpIiwiRGVsdGEiLCJFcHNpbG9uIiwiUGhpIiwiR2FtbWEiLCJFdGEiLCJJb3RhIiwidGhldGExIiwiS2FwcGEiLCJMYW1iZGEiLCJNdSIsIk51IiwiT21pY3JvbiIsIlBpIiwiVGhldGEiLCJSaG8iLCJTaWdtYSIsIlRhdSIsIlVwc2lsb24iLCJzaWdtYTEiLCJPbWVnYSIsIlhpIiwiUHNpIiwiWmV0YSIsImJyYWNrZXRsZWZ0IiwidGhlcmVmb3JlIiwiYnJhY2tldHJpZ2h0IiwicGVycGVuZGljdWxhciIsInVuZGVyc2NvcmUiLCJyYWRpY2FsZXgiLCJhbHBoYSIsImJldGEiLCJjaGkiLCJkZWx0YSIsImVwc2lsb24iLCJwaGkiLCJnYW1tYSIsImV0YSIsImlvdGEiLCJwaGkxIiwia2FwcGEiLCJsYW1iZGEiLCJtdSIsIm51Iiwib21pY3JvbiIsInBpIiwidGhldGEiLCJyaG8iLCJzaWdtYSIsInRhdSIsInVwc2lsb24iLCJvbWVnYTEiLCJvbWVnYSIsInhpIiwicHNpIiwiemV0YSIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJzaW1pbGFyIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiRXVybyIsIlVwc2lsb24xIiwibWludXRlIiwibGVzc2VxdWFsIiwiZnJhY3Rpb24iLCJpbmZpbml0eSIsImZsb3JpbiIsImNsdWIiLCJkaWFtb25kIiwiaGVhcnQiLCJzcGFkZSIsImFycm93Ym90aCIsImFycm93bGVmdCIsImFycm93dXAiLCJhcnJvd3JpZ2h0IiwiYXJyb3dkb3duIiwiZGVncmVlIiwicGx1c21pbnVzIiwic2Vjb25kIiwiZ3JlYXRlcmVxdWFsIiwibXVsdGlwbHkiLCJwcm9wb3J0aW9uYWwiLCJwYXJ0aWFsZGlmZiIsImJ1bGxldCIsImRpdmlkZSIsIm5vdGVxdWFsIiwiZXF1aXZhbGVuY2UiLCJhcHByb3hlcXVhbCIsImVsbGlwc2lzIiwiYXJyb3d2ZXJ0ZXgiLCJhcnJvd2hvcml6ZXgiLCJjYXJyaWFnZXJldHVybiIsImFsZXBoIiwiSWZyYWt0dXIiLCJSZnJha3R1ciIsIndlaWVyc3RyYXNzIiwiY2lyY2xlbXVsdGlwbHkiLCJjaXJjbGVwbHVzIiwiZW1wdHlzZXQiLCJpbnRlcnNlY3Rpb24iLCJ1bmlvbiIsInByb3BlcnN1cGVyc2V0IiwicmVmbGV4c3VwZXJzZXQiLCJub3RzdWJzZXQiLCJwcm9wZXJzdWJzZXQiLCJyZWZsZXhzdWJzZXQiLCJlbGVtZW50Iiwibm90ZWxlbWVudCIsImFuZ2xlIiwiZ3JhZGllbnQiLCJyZWdpc3RlcnNlcmlmIiwiY29weXJpZ2h0c2VyaWYiLCJ0cmFkZW1hcmtzZXJpZiIsInByb2R1Y3QiLCJyYWRpY2FsIiwiZG90bWF0aCIsImxvZ2ljYWxub3QiLCJsb2dpY2FsYW5kIiwibG9naWNhbG9yIiwiYXJyb3dkYmxib3RoIiwiYXJyb3dkYmxsZWZ0IiwiYXJyb3dkYmx1cCIsImFycm93ZGJscmlnaHQiLCJhcnJvd2RibGRvd24iLCJsb3plbmdlIiwiYW5nbGVsZWZ0IiwicmVnaXN0ZXJzYW5zIiwiY29weXJpZ2h0c2FucyIsInRyYWRlbWFya3NhbnMiLCJzdW1tYXRpb24iLCJwYXJlbmxlZnR0cCIsInBhcmVubGVmdGV4IiwicGFyZW5sZWZ0YnQiLCJicmFja2V0bGVmdHRwIiwiYnJhY2tldGxlZnRleCIsImJyYWNrZXRsZWZ0YnQiLCJicmFjZWxlZnR0cCIsImJyYWNlbGVmdG1pZCIsImJyYWNlbGVmdGJ0IiwiYnJhY2VleCIsIiIsImFuZ2xlcmlnaHQiLCJpbnRlZ3JhbCIsImludGVncmFsdHAiLCJpbnRlZ3JhbGV4IiwiaW50ZWdyYWxidCIsInBhcmVucmlnaHR0cCIsInBhcmVucmlnaHRleCIsInBhcmVucmlnaHRidCIsImJyYWNrZXRyaWdodHRwIiwiYnJhY2tldHJpZ2h0ZXgiLCJicmFja2V0cmlnaHRidCIsImJyYWNlcmlnaHR0cCIsImJyYWNlcmlnaHRtaWQiLCJicmFjZXJpZ2h0YnQiLCIiXSxTaT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiYTEiLCJhMiIsImEyMDIiLCJhMyIsImE0IiwiYTUiLCJhMTE5IiwiYTExOCIsImExMTciLCJhMTEiLCJhMTIiLCJhMTMiLCJhMTQiLCJhMTUiLCJhMTYiLCJhMTA1IiwiYTE3IiwiYTE4IiwiYTE5IiwiYTIwIiwiYTIxIiwiYTIyIiwiYTIzIiwiYTI0IiwiYTI1IiwiYTI2IiwiYTI3IiwiYTI4IiwiYTYiLCJhNyIsImE4IiwiYTkiLCJhMTAiLCJhMjkiLCJhMzAiLCJhMzEiLCJhMzIiLCJhMzMiLCJhMzQiLCJhMzUiLCJhMzYiLCJhMzciLCJhMzgiLCJhMzkiLCJhNDAiLCJhNDEiLCJhNDIiLCJhNDMiLCJhNDQiLCJhNDUiLCJhNDYiLCJhNDciLCJhNDgiLCJhNDkiLCJhNTAiLCJhNTEiLCJhNTIiLCJhNTMiLCJhNTQiLCJhNTUiLCJhNTYiLCJhNTciLCJhNTgiLCJhNTkiLCJhNjAiLCJhNjEiLCJhNjIiLCJhNjMiLCJhNjQiLCJhNjUiLCJhNjYiLCJhNjciLCJhNjgiLCJhNjkiLCJhNzAiLCJhNzEiLCJhNzIiLCJhNzMiLCJhNzQiLCJhMjAzIiwiYTc1IiwiYTIwNCIsImE3NiIsImE3NyIsImE3OCIsImE3OSIsImE4MSIsImE4MiIsImE4MyIsImE4NCIsImE5NyIsImE5OCIsImE5OSIsImExMDAiLCIiLCJhODkiLCJhOTAiLCJhOTMiLCJhOTQiLCJhOTEiLCJhOTIiLCJhMjA1IiwiYTg1IiwiYTIwNiIsImE4NiIsImE4NyIsImE4OCIsImE5NSIsImE5NiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImExMDEiLCJhMTAyIiwiYTEwMyIsImExMDQiLCJhMTA2IiwiYTEwNyIsImExMDgiLCJhMTEyIiwiYTExMSIsImExMTAiLCJhMTA5IiwiYTEyMCIsImExMjEiLCJhMTIyIiwiYTEyMyIsImExMjQiLCJhMTI1IiwiYTEyNiIsImExMjciLCJhMTI4IiwiYTEyOSIsImExMzAiLCJhMTMxIiwiYTEzMiIsImExMzMiLCJhMTM0IiwiYTEzNSIsImExMzYiLCJhMTM3IiwiYTEzOCIsImExMzkiLCJhMTQwIiwiYTE0MSIsImExNDIiLCJhMTQzIiwiYTE0NCIsImExNDUiLCJhMTQ2IiwiYTE0NyIsImExNDgiLCJhMTQ5IiwiYTE1MCIsImExNTEiLCJhMTUyIiwiYTE1MyIsImExNTQiLCJhMTU1IiwiYTE1NiIsImExNTciLCJhMTU4IiwiYTE1OSIsImExNjAiLCJhMTYxIiwiYTE2MyIsImExNjQiLCJhMTk2IiwiYTE2NSIsImExOTIiLCJhMTY2IiwiYTE2NyIsImExNjgiLCJhMTY5IiwiYTE3MCIsImExNzEiLCJhMTcyIiwiYTE3MyIsImExNjIiLCJhMTc0IiwiYTE3NSIsImExNzYiLCJhMTc3IiwiYTE3OCIsImExNzkiLCJhMTkzIiwiYTE4MCIsImExOTkiLCJhMTgxIiwiYTIwMCIsImExODIiLCIiLCJhMjAxIiwiYTE4MyIsImExODQiLCJhMTk3IiwiYTE4NSIsImExOTQiLCJhMTk4IiwiYTE4NiIsImExOTUiLCJhMTg3IiwiYTE4OCIsImExODkiLCJhMTkwIiwiYTE5MSIsIiJdO2Z1bmN0aW9uIGdldEVuY29kaW5nKGUpe3N3aXRjaChlKXtjYXNlIldpbkFuc2lFbmNvZGluZyI6cmV0dXJuIERpO2Nhc2UiU3RhbmRhcmRFbmNvZGluZyI6cmV0dXJuIGJpO2Nhc2UiTWFjUm9tYW5FbmNvZGluZyI6cmV0dXJuIHdpO2Nhc2UiU3ltYm9sU2V0RW5jb2RpbmciOnJldHVybiBGaTtjYXNlIlphcGZEaW5nYmF0c0VuY29kaW5nIjpyZXR1cm4gU2k7Y2FzZSJFeHBlcnRFbmNvZGluZyI6cmV0dXJuIG1pO2Nhc2UiTWFjRXhwZXJ0RW5jb2RpbmciOnJldHVybiB5aTtkZWZhdWx0OnJldHVybiBudWxsfX1jb25zdCBraT1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuc3VwZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCJleGNsYW1kb3duc21hbGwiLCJjZW50b2xkc3R5bGUiLCJMc2xhc2hzbWFsbCIsIlNjYXJvbnNtYWxsIiwiWmNhcm9uc21hbGwiLCJEaWVyZXNpc3NtYWxsIiwiQnJldmVzbWFsbCIsIkNhcm9uc21hbGwiLCJEb3RhY2NlbnRzbWFsbCIsIk1hY3JvbnNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwiT2dvbmVrc21hbGwiLCJSaW5nc21hbGwiLCJDZWRpbGxhc21hbGwiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiLCIwMDEuMDAwIiwiMDAxLjAwMSIsIjAwMS4wMDIiLCIwMDEuMDAzIiwiQmxhY2siLCJCb2xkIiwiQm9vayIsIkxpZ2h0IiwiTWVkaXVtIiwiUmVndWxhciIsIlJvbWFuIiwiU2VtaWJvbGQiXSxSaT0zOTEsTmk9W251bGwse2lkOiJoc3RlbSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSxudWxsLHtpZDoidnN0ZW0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0se2lkOiJ2bW92ZXRvIixtaW46MSxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InJsaW5ldG8iLG1pbjoyLHJlc2V0U3RhY2s6ITB9LHtpZDoiaGxpbmV0byIsbWluOjEscmVzZXRTdGFjazohMH0se2lkOiJ2bGluZXRvIixtaW46MSxyZXNldFN0YWNrOiEwfSx7aWQ6InJyY3VydmV0byIsbWluOjYscmVzZXRTdGFjazohMH0sbnVsbCx7aWQ6ImNhbGxzdWJyIixtaW46MSx1bmRlZlN0YWNrOiEwfSx7aWQ6InJldHVybiIsbWluOjAsdW5kZWZTdGFjazohMH0sbnVsbCxudWxsLHtpZDoiZW5kY2hhciIsbWluOjAsc3RhY2tDbGVhcmluZzohMH0sbnVsbCxudWxsLG51bGwse2lkOiJoc3RlbWhtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoiaGludG1hc2siLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoiY250cm1hc2siLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoicm1vdmV0byIsbWluOjIsc3RhY2tDbGVhcmluZzohMH0se2lkOiJobW92ZXRvIixtaW46MSxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InZzdGVtaG0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0se2lkOiJyY3VydmVsaW5lIixtaW46OCxyZXNldFN0YWNrOiEwfSx7aWQ6InJsaW5lY3VydmUiLG1pbjo4LHJlc2V0U3RhY2s6ITB9LHtpZDoidnZjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSx7aWQ6ImhoY3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0sbnVsbCx7aWQ6ImNhbGxnc3ViciIsbWluOjEsdW5kZWZTdGFjazohMH0se2lkOiJ2aGN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LHtpZDoiaHZjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfV0sR2k9W251bGwsbnVsbCxudWxsLHtpZDoiYW5kIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im9yIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im5vdCIsbWluOjEsc3RhY2tEZWx0YTowfSxudWxsLG51bGwsbnVsbCx7aWQ6ImFicyIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImFkZCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXStlW3QtMV19fSx7aWQ6InN1YiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXS1lW3QtMV19fSx7aWQ6ImRpdiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXS9lW3QtMV19fSxudWxsLHtpZDoibmVnIixtaW46MSxzdGFja0RlbHRhOjAsc3RhY2tGbihlLHQpe2VbdC0xXT0tZVt0LTFdfX0se2lkOiJlcSIsbWluOjIsc3RhY2tEZWx0YTotMX0sbnVsbCxudWxsLHtpZDoiZHJvcCIsbWluOjEsc3RhY2tEZWx0YTotMX0sbnVsbCx7aWQ6InB1dCIsbWluOjIsc3RhY2tEZWx0YTotMn0se2lkOiJnZXQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJpZmVsc2UiLG1pbjo0LHN0YWNrRGVsdGE6LTN9LHtpZDoicmFuZG9tIixtaW46MCxzdGFja0RlbHRhOjF9LHtpZDoibXVsIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdKmVbdC0xXX19LG51bGwse2lkOiJzcXJ0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiZHVwIixtaW46MSxzdGFja0RlbHRhOjF9LHtpZDoiZXhjaCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6ImluZGV4IixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoicm9sbCIsbWluOjMsc3RhY2tEZWx0YTotMn0sbnVsbCxudWxsLG51bGwse2lkOiJoZmxleCIsbWluOjcscmVzZXRTdGFjazohMH0se2lkOiJmbGV4IixtaW46MTMscmVzZXRTdGFjazohMH0se2lkOiJoZmxleDEiLG1pbjo5LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleDEiLG1pbjoxMSxyZXNldFN0YWNrOiEwfV07Y2xhc3MgQ0ZGUGFyc2Vye2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLmJ5dGVzPWUuZ2V0Qnl0ZXMoKTt0aGlzLnByb3BlcnRpZXM9dDt0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQ9ISFpfXBhcnNlKCl7Y29uc3QgZT10aGlzLnByb3BlcnRpZXMsdD1uZXcgQ0ZGO3RoaXMuY2ZmPXQ7Y29uc3QgaT10aGlzLnBhcnNlSGVhZGVyKCksYT10aGlzLnBhcnNlSW5kZXgoaS5lbmRQb3MpLHI9dGhpcy5wYXJzZUluZGV4KGEuZW5kUG9zKSxzPXRoaXMucGFyc2VJbmRleChyLmVuZFBvcyksbj10aGlzLnBhcnNlSW5kZXgocy5lbmRQb3MpLG89dGhpcy5wYXJzZURpY3Qoci5vYmouZ2V0KDApKSxnPXRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LG8sdC5zdHJpbmdzKTt0LmhlYWRlcj1pLm9iajt0Lm5hbWVzPXRoaXMucGFyc2VOYW1lSW5kZXgoYS5vYmopO3Quc3RyaW5ncz10aGlzLnBhcnNlU3RyaW5nSW5kZXgocy5vYmopO3QudG9wRGljdD1nO3QuZ2xvYmFsU3VickluZGV4PW4ub2JqO3RoaXMucGFyc2VQcml2YXRlRGljdCh0LnRvcERpY3QpO3QuaXNDSURGb250PWcuaGFzTmFtZSgiUk9TIik7Y29uc3QgYz1nLmdldEJ5TmFtZSgiQ2hhclN0cmluZ3MiKSxDPXRoaXMucGFyc2VJbmRleChjKS5vYmosaD1nLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpO2gmJihlLmZvbnRNYXRyaXg9aCk7Y29uc3QgbD1nLmdldEJ5TmFtZSgiRm9udEJCb3giKTtpZihsKXtlLmFzY2VudD1NYXRoLm1heChsWzNdLGxbMV0pO2UuZGVzY2VudD1NYXRoLm1pbihsWzFdLGxbM10pO2UuYXNjZW50U2NhbGVkPSEwfWxldCBRLEU7aWYodC5pc0NJREZvbnQpe2NvbnN0IGU9dGhpcy5wYXJzZUluZGV4KGcuZ2V0QnlOYW1lKCJGREFycmF5IikpLm9iajtmb3IobGV0IGk9MCxhPWUuY291bnQ7aTxhOysraSl7Y29uc3QgYT1lLmdldChpKSxyPXRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LHRoaXMucGFyc2VEaWN0KGEpLHQuc3RyaW5ncyk7dGhpcy5wYXJzZVByaXZhdGVEaWN0KHIpO3QuZmRBcnJheS5wdXNoKHIpfUU9bnVsbDtRPXRoaXMucGFyc2VDaGFyc2V0cyhnLmdldEJ5TmFtZSgiY2hhcnNldCIpLEMuY291bnQsdC5zdHJpbmdzLCEwKTt0LmZkU2VsZWN0PXRoaXMucGFyc2VGRFNlbGVjdChnLmdldEJ5TmFtZSgiRkRTZWxlY3QiKSxDLmNvdW50KX1lbHNle1E9dGhpcy5wYXJzZUNoYXJzZXRzKGcuZ2V0QnlOYW1lKCJjaGFyc2V0IiksQy5jb3VudCx0LnN0cmluZ3MsITEpO0U9dGhpcy5wYXJzZUVuY29kaW5nKGcuZ2V0QnlOYW1lKCJFbmNvZGluZyIpLGUsdC5zdHJpbmdzLFEuY2hhcnNldCl9dC5jaGFyc2V0PVE7dC5lbmNvZGluZz1FO2NvbnN0IHU9dGhpcy5wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczpDLGxvY2FsU3VickluZGV4OmcucHJpdmF0ZURpY3Quc3VicnNJbmRleCxnbG9iYWxTdWJySW5kZXg6bi5vYmosZmRTZWxlY3Q6dC5mZFNlbGVjdCxmZEFycmF5OnQuZmRBcnJheSxwcml2YXRlRGljdDpnLnByaXZhdGVEaWN0fSk7dC5jaGFyU3RyaW5ncz11LmNoYXJTdHJpbmdzO3Quc2VhY3M9dS5zZWFjczt0LndpZHRocz11LndpZHRocztyZXR1cm4gdH1wYXJzZUhlYWRlcigpe2xldCBlPXRoaXMuYnl0ZXM7Y29uc3QgdD1lLmxlbmd0aDtsZXQgaT0wO2Zvcig7aTx0JiYxIT09ZVtpXTspKytpO2lmKGk+PXQpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIENGRiBoZWFkZXIiKTtpZigwIT09aSl7aW5mbygiY2ZmIGRhdGEgaXMgc2hpZnRlZCIpO2U9ZS5zdWJhcnJheShpKTt0aGlzLmJ5dGVzPWV9Y29uc3QgYT1lWzBdLHI9ZVsxXSxzPWVbMl0sbj1lWzNdO3JldHVybntvYmo6bmV3IENGRkhlYWRlcihhLHIscyxuKSxlbmRQb3M6c319cGFyc2VEaWN0KGUpe2xldCB0PTA7ZnVuY3Rpb24gcGFyc2VPcGVyYW5kKCl7bGV0IGk9ZVt0KytdO2lmKDMwPT09aSlyZXR1cm4gZnVuY3Rpb24gcGFyc2VGbG9hdE9wZXJhbmQoKXtsZXQgaT0iIjtjb25zdCBhPTE1LHI9WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiLiIsIkUiLCJFLSIsbnVsbCwiLSJdLHM9ZS5sZW5ndGg7Zm9yKDt0PHM7KXtjb25zdCBzPWVbdCsrXSxuPXM+PjQsbz0xNSZzO2lmKG49PT1hKWJyZWFrO2krPXJbbl07aWYobz09PWEpYnJlYWs7aSs9cltvXX1yZXR1cm4gcGFyc2VGbG9hdChpKX0oKTtpZigyOD09PWkpe2k9ZVt0KytdO2k9KGk8PDI0fGVbdCsrXTw8MTYpPj4xNjtyZXR1cm4gaX1pZigyOT09PWkpe2k9ZVt0KytdO2k9aTw8OHxlW3QrK107aT1pPDw4fGVbdCsrXTtpPWk8PDh8ZVt0KytdO3JldHVybiBpfWlmKGk+PTMyJiZpPD0yNDYpcmV0dXJuIGktMTM5O2lmKGk+PTI0NyYmaTw9MjUwKXJldHVybiAyNTYqKGktMjQ3KStlW3QrK10rMTA4O2lmKGk+PTI1MSYmaTw9MjU0KXJldHVybi0yNTYqKGktMjUxKS1lW3QrK10tMTA4O3dhcm4oJ0NGRlBhcnNlcl9wYXJzZURpY3Q6ICInK2krJyIgaXMgYSByZXNlcnZlZCBjb21tYW5kLicpO3JldHVybiBOYU59bGV0IGk9W107Y29uc3QgYT1bXTt0PTA7Y29uc3Qgcj1lLmxlbmd0aDtmb3IoO3Q8cjspe2xldCByPWVbdF07aWYocjw9MjEpezEyPT09ciYmKHI9cjw8OHxlWysrdF0pO2EucHVzaChbcixpXSk7aT1bXTsrK3R9ZWxzZSBpLnB1c2gocGFyc2VPcGVyYW5kKCkpfXJldHVybiBhfXBhcnNlSW5kZXgoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXgsaT10aGlzLmJ5dGVzLGE9aVtlKytdPDw4fGlbZSsrXSxyPVtdO2xldCBzLG4sbz1lO2lmKDAhPT1hKXtjb25zdCB0PWlbZSsrXSxnPWUrKGErMSkqdC0xO2ZvcihzPTAsbj1hKzE7czxuOysrcyl7bGV0IGE9MDtmb3IobGV0IHI9MDtyPHQ7KytyKXthPDw9ODthKz1pW2UrK119ci5wdXNoKGcrYSl9bz1yW2FdfWZvcihzPTAsbj1yLmxlbmd0aC0xO3M8bjsrK3Mpe2NvbnN0IGU9cltzXSxhPXJbcysxXTt0LmFkZChpLnN1YmFycmF5KGUsYSkpfXJldHVybntvYmo6dCxlbmRQb3M6b319cGFyc2VOYW1lSW5kZXgoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGk9MCxhPWUuY291bnQ7aTxhOysraSl7Y29uc3QgYT1lLmdldChpKTt0LnB1c2goYnl0ZXNUb1N0cmluZyhhKSl9cmV0dXJuIHR9cGFyc2VTdHJpbmdJbmRleChlKXtjb25zdCB0PW5ldyBDRkZTdHJpbmdzO2ZvcihsZXQgaT0wLGE9ZS5jb3VudDtpPGE7KytpKXtjb25zdCBhPWUuZ2V0KGkpO3QuYWRkKGJ5dGVzVG9TdHJpbmcoYSkpfXJldHVybiB0fWNyZWF0ZURpY3QoZSx0LGkpe2NvbnN0IGE9bmV3IGUoaSk7Zm9yKGNvbnN0W2UsaV1vZiB0KWEuc2V0QnlLZXkoZSxpKTtyZXR1cm4gYX1wYXJzZUNoYXJTdHJpbmcoZSx0LGksYSl7aWYoIXR8fGUuY2FsbERlcHRoPjEwKXJldHVybiExO2xldCByPWUuc3RhY2tTaXplO2NvbnN0IHM9ZS5zdGFjaztsZXQgbj10Lmxlbmd0aDtmb3IobGV0IG89MDtvPG47KXtjb25zdCBnPXRbbysrXTtsZXQgYz1udWxsO2lmKDEyPT09Zyl7Y29uc3QgZT10W28rK107aWYoMD09PWUpe3Rbby0yXT0xMzk7dFtvLTFdPTIyO3I9MH1lbHNlIGM9R2lbZV19ZWxzZSBpZigyOD09PWcpe3Nbcl09KHRbb108PDI0fHRbbysxXTw8MTYpPj4xNjtvKz0yO3IrK31lbHNlIGlmKDE0PT09Zyl7aWYocj49NCl7ci09NDtpZih0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpe2Uuc2VhYz1zLnNsaWNlKHIscis0KTtyZXR1cm4hMX19Yz1OaVtnXX1lbHNlIGlmKGc+PTMyJiZnPD0yNDYpe3Nbcl09Zy0xMzk7cisrfWVsc2UgaWYoZz49MjQ3JiZnPD0yNTQpe3Nbcl09ZzwyNTE/KGctMjQ3PDw4KSt0W29dKzEwODotKGctMjUxPDw4KS10W29dLTEwODtvKys7cisrfWVsc2UgaWYoMjU1PT09Zyl7c1tyXT0odFtvXTw8MjR8dFtvKzFdPDwxNnx0W28rMl08PDh8dFtvKzNdKS82NTUzNjtvKz00O3IrK31lbHNlIGlmKDE5PT09Z3x8MjA9PT1nKXtlLmhpbnRzKz1yPj4xO2lmKDA9PT1lLmhpbnRzKXt0LmNvcHlXaXRoaW4oby0xLG8sLTEpO28tPTE7bi09MTtjb250aW51ZX1vKz1lLmhpbnRzKzc+PjM7ciU9MjtjPU5pW2ddfWVsc2V7aWYoMTA9PT1nfHwyOT09PWcpe2NvbnN0IHQ9MTA9PT1nP2k6YTtpZighdCl7Yz1OaVtnXTt3YXJuKCJNaXNzaW5nIHN1YnJzSW5kZXggZm9yICIrYy5pZCk7cmV0dXJuITF9bGV0IG49MzI3Njg7dC5jb3VudDwxMjQwP249MTA3OnQuY291bnQ8MzM5MDAmJihuPTExMzEpO2NvbnN0IG89c1stLXJdK247aWYobzwwfHxvPj10LmNvdW50fHxpc05hTihvKSl7Yz1OaVtnXTt3YXJuKCJPdXQgb2YgYm91bmRzIHN1YnJJbmRleCBmb3IgIitjLmlkKTtyZXR1cm4hMX1lLnN0YWNrU2l6ZT1yO2UuY2FsbERlcHRoKys7aWYoIXRoaXMucGFyc2VDaGFyU3RyaW5nKGUsdC5nZXQobyksaSxhKSlyZXR1cm4hMTtlLmNhbGxEZXB0aC0tO3I9ZS5zdGFja1NpemU7Y29udGludWV9aWYoMTE9PT1nKXtlLnN0YWNrU2l6ZT1yO3JldHVybiEwfWlmKDA9PT1nJiZvPT09dC5sZW5ndGgpe3Rbby0xXT0xNDtjPU5pWzE0XX1lbHNle2lmKDk9PT1nKXt0LmNvcHlXaXRoaW4oby0xLG8sLTEpO28tPTE7bi09MTtjb250aW51ZX1jPU5pW2ddfX1pZihjKXtpZihjLnN0ZW0pe2UuaGludHMrPXI+PjE7aWYoMz09PWd8fDIzPT09ZyllLmhhc1ZTdGVtcz0hMDtlbHNlIGlmKGUuaGFzVlN0ZW1zJiYoMT09PWd8fDE4PT09Zykpe3dhcm4oIkNGRiBzdGVtIGhpbnRzIGFyZSBpbiB3cm9uZyBvcmRlciIpO3Rbby0xXT0xPT09Zz8zOjIzfX1pZigibWluImluIGMmJiFlLnVuZGVmU3RhY2smJnI8Yy5taW4pe3dhcm4oIk5vdCBlbm91Z2ggcGFyYW1ldGVycyBmb3IgIitjLmlkKyI7IGFjdHVhbDogIityKyIsIGV4cGVjdGVkOiAiK2MubWluKTtpZigwPT09cil7dFtvLTFdPTE0O3JldHVybiEwfXJldHVybiExfWlmKGUuZmlyc3RTdGFja0NsZWFyaW5nJiZjLnN0YWNrQ2xlYXJpbmcpe2UuZmlyc3RTdGFja0NsZWFyaW5nPSExO3ItPWMubWluO3I+PTImJmMuc3RlbT9yJT0yOnI+MSYmd2FybigiRm91bmQgdG9vIG1hbnkgcGFyYW1ldGVycyBmb3Igc3RhY2stY2xlYXJpbmcgY29tbWFuZCIpO3I+MCYmKGUud2lkdGg9c1tyLTFdKX1pZigic3RhY2tEZWx0YSJpbiBjKXsic3RhY2tGbiJpbiBjJiZjLnN0YWNrRm4ocyxyKTtyKz1jLnN0YWNrRGVsdGF9ZWxzZSBpZihjLnN0YWNrQ2xlYXJpbmcpcj0wO2Vsc2UgaWYoYy5yZXNldFN0YWNrKXtyPTA7ZS51bmRlZlN0YWNrPSExfWVsc2UgaWYoYy51bmRlZlN0YWNrKXtyPTA7ZS51bmRlZlN0YWNrPSEwO2UuZmlyc3RTdGFja0NsZWFyaW5nPSExfX19bjx0Lmxlbmd0aCYmdC5maWxsKDE0LG4pO2Uuc3RhY2tTaXplPXI7cmV0dXJuITB9cGFyc2VDaGFyU3RyaW5ncyh7Y2hhclN0cmluZ3M6ZSxsb2NhbFN1YnJJbmRleDp0LGdsb2JhbFN1YnJJbmRleDppLGZkU2VsZWN0OmEsZmRBcnJheTpyLHByaXZhdGVEaWN0OnN9KXtjb25zdCBuPVtdLG89W10sZz1lLmNvdW50O2ZvcihsZXQgYz0wO2M8ZztjKyspe2NvbnN0IGc9ZS5nZXQoYyksQz17Y2FsbERlcHRoOjAsc3RhY2tTaXplOjAsc3RhY2s6W10sdW5kZWZTdGFjazohMCxoaW50czowLGZpcnN0U3RhY2tDbGVhcmluZzohMCxzZWFjOm51bGwsd2lkdGg6bnVsbCxoYXNWU3RlbXM6ITF9O2xldCBoPSEwLGw9bnVsbCxRPXM7aWYoYSYmci5sZW5ndGgpe2NvbnN0IGU9YS5nZXRGREluZGV4KGMpO2lmKC0xPT09ZSl7d2FybigiR2x5cGggaW5kZXggaXMgbm90IGluIGZkIHNlbGVjdC4iKTtoPSExfWlmKGU+PXIubGVuZ3RoKXt3YXJuKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKTtoPSExfWlmKGgpe1E9cltlXS5wcml2YXRlRGljdDtsPVEuc3VicnNJbmRleH19ZWxzZSB0JiYobD10KTtoJiYoaD10aGlzLnBhcnNlQ2hhclN0cmluZyhDLGcsbCxpKSk7aWYobnVsbCE9PUMud2lkdGgpe2NvbnN0IGU9US5nZXRCeU5hbWUoIm5vbWluYWxXaWR0aFgiKTtvW2NdPWUrQy53aWR0aH1lbHNle2NvbnN0IGU9US5nZXRCeU5hbWUoImRlZmF1bHRXaWR0aFgiKTtvW2NdPWV9bnVsbCE9PUMuc2VhYyYmKG5bY109Qy5zZWFjKTtofHxlLnNldChjLG5ldyBVaW50OEFycmF5KFsxNF0pKX1yZXR1cm57Y2hhclN0cmluZ3M6ZSxzZWFjczpuLHdpZHRoczpvfX1lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpe2NvbnN0IHQ9dGhpcy5jcmVhdGVEaWN0KENGRlByaXZhdGVEaWN0LFtdLGUuc3RyaW5ncyk7ZS5zZXRCeUtleSgxOCxbMCwwXSk7ZS5wcml2YXRlRGljdD10fXBhcnNlUHJpdmF0ZURpY3QoZSl7aWYoIWUuaGFzTmFtZSgiUHJpdmF0ZSIpKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IHQ9ZS5nZXRCeU5hbWUoIlByaXZhdGUiKTtpZighQXJyYXkuaXNBcnJheSh0KXx8MiE9PXQubGVuZ3RoKXtlLnJlbW92ZUJ5TmFtZSgiUHJpdmF0ZSIpO3JldHVybn1jb25zdCBpPXRbMF0sYT10WzFdO2lmKDA9PT1pfHxhPj10aGlzLmJ5dGVzLmxlbmd0aCl7dGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO3JldHVybn1jb25zdCByPWEraSxzPXRoaXMuYnl0ZXMuc3ViYXJyYXkoYSxyKSxuPXRoaXMucGFyc2VEaWN0KHMpLG89dGhpcy5jcmVhdGVEaWN0KENGRlByaXZhdGVEaWN0LG4sZS5zdHJpbmdzKTtlLnByaXZhdGVEaWN0PW87MD09PW8uZ2V0QnlOYW1lKCJFeHBhbnNpb25GYWN0b3IiKSYmby5zZXRCeU5hbWUoIkV4cGFuc2lvbkZhY3RvciIsLjA2KTtpZighby5nZXRCeU5hbWUoIlN1YnJzIikpcmV0dXJuO2NvbnN0IGc9by5nZXRCeU5hbWUoIlN1YnJzIiksYz1hK2c7aWYoMD09PWd8fGM+PXRoaXMuYnl0ZXMubGVuZ3RoKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IEM9dGhpcy5wYXJzZUluZGV4KGMpO28uc3VicnNJbmRleD1DLm9ian1wYXJzZUNoYXJzZXRzKGUsdCxpLGEpe2lmKDA9PT1lKXJldHVybiBuZXcgQ0ZGQ2hhcnNldCghMCxIaS5JU09fQURPQkUsZGkpO2lmKDE9PT1lKXJldHVybiBuZXcgQ0ZGQ2hhcnNldCghMCxIaS5FWFBFUlQsZmkpO2lmKDI9PT1lKXJldHVybiBuZXcgQ0ZGQ2hhcnNldCghMCxIaS5FWFBFUlRfU1VCU0VULHBpKTtjb25zdCByPXRoaXMuYnl0ZXMscz1lLG49cltlKytdLG89W2E/MDoiLm5vdGRlZiJdO2xldCBnLGMsQzt0LT0xO3N3aXRjaChuKXtjYXNlIDA6Zm9yKEM9MDtDPHQ7QysrKXtnPXJbZSsrXTw8OHxyW2UrK107by5wdXNoKGE/ZzppLmdldChnKSl9YnJlYWs7Y2FzZSAxOmZvcig7by5sZW5ndGg8PXQ7KXtnPXJbZSsrXTw8OHxyW2UrK107Yz1yW2UrK107Zm9yKEM9MDtDPD1jO0MrKylvLnB1c2goYT9nKys6aS5nZXQoZysrKSl9YnJlYWs7Y2FzZSAyOmZvcig7by5sZW5ndGg8PXQ7KXtnPXJbZSsrXTw8OHxyW2UrK107Yz1yW2UrK108PDh8cltlKytdO2ZvcihDPTA7Qzw9YztDKyspby5wdXNoKGE/ZysrOmkuZ2V0KGcrKykpfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIGNoYXJzZXQgZm9ybWF0Iil9Y29uc3QgaD1lLGw9ci5zdWJhcnJheShzLGgpO3JldHVybiBuZXcgQ0ZGQ2hhcnNldCghMSxuLG8sbCl9cGFyc2VFbmNvZGluZyhlLHQsaSxhKXtjb25zdCByPU9iamVjdC5jcmVhdGUobnVsbCkscz10aGlzLmJ5dGVzO2xldCBuLG8sZyxjPSExLEM9bnVsbDtpZigwPT09ZXx8MT09PWUpe2M9ITA7bj1lO2NvbnN0IHQ9ZT9taTpiaTtmb3Iobz0wLGc9YS5sZW5ndGg7bzxnO28rKyl7Y29uc3QgZT10LmluZGV4T2YoYVtvXSk7LTEhPT1lJiYocltlXT1vKX19ZWxzZXtjb25zdCB0PWU7bj1zW2UrK107c3dpdGNoKDEyNyZuKXtjYXNlIDA6Y29uc3QgdD1zW2UrK107Zm9yKG89MTtvPD10O28rKylyW3NbZSsrXV09bzticmVhaztjYXNlIDE6Y29uc3QgaT1zW2UrK107bGV0IGE9MTtmb3Iobz0wO288aTtvKyspe2NvbnN0IHQ9c1tlKytdLGk9c1tlKytdO2ZvcihsZXQgZT10O2U8PXQraTtlKyspcltlXT1hKyt9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVua25vd24gZW5jb2RpbmcgZm9ybWF0OiAke259IGluIENGRmApfWNvbnN0IGc9ZTtpZigxMjgmbil7c1t0XSY9MTI3OyFmdW5jdGlvbiByZWFkU3VwcGxlbWVudCgpe2NvbnN0IHQ9c1tlKytdO2ZvcihvPTA7bzx0O28rKyl7Y29uc3QgdD1zW2UrK10sbj0oc1tlKytdPDw4KSsoMjU1JnNbZSsrXSk7clt0XT1hLmluZGV4T2YoaS5nZXQobikpfX0oKX1DPXMuc3ViYXJyYXkodCxnKX1uJj0xMjc7cmV0dXJuIG5ldyBDRkZFbmNvZGluZyhjLG4scixDKX1wYXJzZUZEU2VsZWN0KGUsdCl7Y29uc3QgaT10aGlzLmJ5dGVzLGE9aVtlKytdLHI9W107bGV0IHM7c3dpdGNoKGEpe2Nhc2UgMDpmb3Iocz0wO3M8dDsrK3Mpe2NvbnN0IHQ9aVtlKytdO3IucHVzaCh0KX1icmVhaztjYXNlIDM6Y29uc3Qgbj1pW2UrK108PDh8aVtlKytdO2ZvcihzPTA7czxuOysrcyl7bGV0IHQ9aVtlKytdPDw4fGlbZSsrXTtpZigwPT09cyYmMCE9PXQpe3dhcm4oInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKTt0PTB9Y29uc3QgYT1pW2UrK10sbj1pW2VdPDw4fGlbZSsxXTtmb3IobGV0IGU9dDtlPG47KytlKXIucHVzaChhKX1lKz0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCAiJHthfSIuYCl9aWYoci5sZW5ndGghPT10KXRocm93IG5ldyBGb3JtYXRFcnJvcigicGFyc2VGRFNlbGVjdDogSW52YWxpZCBmb250IGRhdGEuIik7cmV0dXJuIG5ldyBDRkZGRFNlbGVjdChhLHIpfX1jbGFzcyBDRkZ7Y29uc3RydWN0b3IoKXt0aGlzLmhlYWRlcj1udWxsO3RoaXMubmFtZXM9W107dGhpcy50b3BEaWN0PW51bGw7dGhpcy5zdHJpbmdzPW5ldyBDRkZTdHJpbmdzO3RoaXMuZ2xvYmFsU3VickluZGV4PW51bGw7dGhpcy5lbmNvZGluZz1udWxsO3RoaXMuY2hhcnNldD1udWxsO3RoaXMuY2hhclN0cmluZ3M9bnVsbDt0aGlzLmZkQXJyYXk9W107dGhpcy5mZFNlbGVjdD1udWxsO3RoaXMuaXNDSURGb250PSExfWR1cGxpY2F0ZUZpcnN0R2x5cGgoKXtpZih0aGlzLmNoYXJTdHJpbmdzLmNvdW50Pj02NTUzNSl7d2FybigiTm90IGVub3VnaCBzcGFjZSBpbiBjaGFyc3RyaW5ncyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIik7cmV0dXJufWNvbnN0IGU9dGhpcy5jaGFyU3RyaW5ncy5nZXQoMCk7dGhpcy5jaGFyU3RyaW5ncy5hZGQoZSk7dGhpcy5pc0NJREZvbnQmJnRoaXMuZmRTZWxlY3QuZmRTZWxlY3QucHVzaCh0aGlzLmZkU2VsZWN0LmZkU2VsZWN0WzBdKX1oYXNHbHlwaElkKGUpe2lmKGU8MHx8ZT49dGhpcy5jaGFyU3RyaW5ncy5jb3VudClyZXR1cm4hMTtyZXR1cm4gdGhpcy5jaGFyU3RyaW5ncy5nZXQoZSkubGVuZ3RoPjB9fWNsYXNzIENGRkhlYWRlcntjb25zdHJ1Y3RvcihlLHQsaSxhKXt0aGlzLm1ham9yPWU7dGhpcy5taW5vcj10O3RoaXMuaGRyU2l6ZT1pO3RoaXMub2ZmU2l6ZT1hfX1jbGFzcyBDRkZTdHJpbmdze2NvbnN0cnVjdG9yKCl7dGhpcy5zdHJpbmdzPVtdfWdldChlKXtyZXR1cm4gZT49MCYmZTw9MzkwP2tpW2VdOmUtUmk8PXRoaXMuc3RyaW5ncy5sZW5ndGg/dGhpcy5zdHJpbmdzW2UtUmldOmtpWzBdfWdldFNJRChlKXtsZXQgdD1raS5pbmRleE9mKGUpO2lmKC0xIT09dClyZXR1cm4gdDt0PXRoaXMuc3RyaW5ncy5pbmRleE9mKGUpO3JldHVybi0xIT09dD90K1JpOi0xfWFkZChlKXt0aGlzLnN0cmluZ3MucHVzaChlKX1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5zdHJpbmdzLmxlbmd0aH19Y2xhc3MgQ0ZGSW5kZXh7Y29uc3RydWN0b3IoKXt0aGlzLm9iamVjdHM9W107dGhpcy5sZW5ndGg9MH1hZGQoZSl7dGhpcy5sZW5ndGgrPWUubGVuZ3RoO3RoaXMub2JqZWN0cy5wdXNoKGUpfXNldChlLHQpe3RoaXMubGVuZ3RoKz10Lmxlbmd0aC10aGlzLm9iamVjdHNbZV0ubGVuZ3RoO3RoaXMub2JqZWN0c1tlXT10fWdldChlKXtyZXR1cm4gdGhpcy5vYmplY3RzW2VdfWdldCBjb3VudCgpe3JldHVybiB0aGlzLm9iamVjdHMubGVuZ3RofX1jbGFzcyBDRkZEaWN0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5rZXlUb05hbWVNYXA9ZS5rZXlUb05hbWVNYXA7dGhpcy5uYW1lVG9LZXlNYXA9ZS5uYW1lVG9LZXlNYXA7dGhpcy5kZWZhdWx0cz1lLmRlZmF1bHRzO3RoaXMudHlwZXM9ZS50eXBlczt0aGlzLm9wY29kZXM9ZS5vcGNvZGVzO3RoaXMub3JkZXI9ZS5vcmRlcjt0aGlzLnN0cmluZ3M9dDt0aGlzLnZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpfXNldEJ5S2V5KGUsdCl7aWYoIShlIGluIHRoaXMua2V5VG9OYW1lTWFwKSlyZXR1cm4hMTtpZigwPT09dC5sZW5ndGgpcmV0dXJuITA7Zm9yKGNvbnN0IGkgb2YgdClpZihpc05hTihpKSl7d2FybihgSW52YWxpZCBDRkZEaWN0IHZhbHVlOiAiJHt0fSIgZm9yIGtleSAiJHtlfSIuYCk7cmV0dXJuITB9Y29uc3QgaT10aGlzLnR5cGVzW2VdOyJudW0iIT09aSYmInNpZCIhPT1pJiYib2Zmc2V0IiE9PWl8fCh0PXRbMF0pO3RoaXMudmFsdWVzW2VdPXQ7cmV0dXJuITB9c2V0QnlOYW1lKGUsdCl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgZGljdGlvbmFyeSBuYW1lICIke2V9ImApO3RoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW2VdXT10fWhhc05hbWUoZSl7cmV0dXJuIHRoaXMubmFtZVRvS2V5TWFwW2VdaW4gdGhpcy52YWx1ZXN9Z2V0QnlOYW1lKGUpe2lmKCEoZSBpbiB0aGlzLm5hbWVUb0tleU1hcCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAke2V9ImApO2NvbnN0IHQ9dGhpcy5uYW1lVG9LZXlNYXBbZV07cmV0dXJuIHQgaW4gdGhpcy52YWx1ZXM/dGhpcy52YWx1ZXNbdF06dGhpcy5kZWZhdWx0c1t0XX1yZW1vdmVCeU5hbWUoZSl7ZGVsZXRlIHRoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW2VdXX1zdGF0aWMgY3JlYXRlVGFibGVzKGUpe2NvbnN0IHQ9e2tleVRvTmFtZU1hcDp7fSxuYW1lVG9LZXlNYXA6e30sZGVmYXVsdHM6e30sdHlwZXM6e30sb3Bjb2Rlczp7fSxvcmRlcjpbXX07Zm9yKGNvbnN0IGkgb2YgZSl7Y29uc3QgZT1BcnJheS5pc0FycmF5KGlbMF0pPyhpWzBdWzBdPDw4KStpWzBdWzFdOmlbMF07dC5rZXlUb05hbWVNYXBbZV09aVsxXTt0Lm5hbWVUb0tleU1hcFtpWzFdXT1lO3QudHlwZXNbZV09aVsyXTt0LmRlZmF1bHRzW2VdPWlbM107dC5vcGNvZGVzW2VdPUFycmF5LmlzQXJyYXkoaVswXSk/aVswXTpbaVswXV07dC5vcmRlci5wdXNoKGUpfXJldHVybiB0fX1jb25zdCB4aT1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dO2NsYXNzIENGRlRvcERpY3QgZXh0ZW5kcyBDRkZEaWN0e3N0YXRpYyBnZXQgdGFibGVzKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKHhpKSl9Y29uc3RydWN0b3IoZSl7c3VwZXIoQ0ZGVG9wRGljdC50YWJsZXMsZSk7dGhpcy5wcml2YXRlRGljdD1udWxsfX1jb25zdCBNaT1bWzYsIkJsdWVWYWx1ZXMiLCJkZWx0YSIsbnVsbF0sWzcsIk90aGVyQmx1ZXMiLCJkZWx0YSIsbnVsbF0sWzgsIkZhbWlseUJsdWVzIiwiZGVsdGEiLG51bGxdLFs5LCJGYW1pbHlPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFtbMTIsOV0sIkJsdWVTY2FsZSIsIm51bSIsLjAzOTYyNV0sW1sxMiwxMF0sIkJsdWVTaGlmdCIsIm51bSIsN10sW1sxMiwxMV0sIkJsdWVGdXp6IiwibnVtIiwxXSxbMTAsIlN0ZEhXIiwibnVtIixudWxsXSxbMTEsIlN0ZFZXIiwibnVtIixudWxsXSxbWzEyLDEyXSwiU3RlbVNuYXBIIiwiZGVsdGEiLG51bGxdLFtbMTIsMTNdLCJTdGVtU25hcFYiLCJkZWx0YSIsbnVsbF0sW1sxMiwxNF0sIkZvcmNlQm9sZCIsIm51bSIsMF0sW1sxMiwxN10sIkxhbmd1YWdlR3JvdXAiLCJudW0iLDBdLFtbMTIsMThdLCJFeHBhbnNpb25GYWN0b3IiLCJudW0iLC4wNl0sW1sxMiwxOV0sImluaXRpYWxSYW5kb21TZWVkIiwibnVtIiwwXSxbMjAsImRlZmF1bHRXaWR0aFgiLCJudW0iLDBdLFsyMSwibm9taW5hbFdpZHRoWCIsIm51bSIsMF0sWzE5LCJTdWJycyIsIm9mZnNldCIsbnVsbF1dO2NsYXNzIENGRlByaXZhdGVEaWN0IGV4dGVuZHMgQ0ZGRGljdHtzdGF0aWMgZ2V0IHRhYmxlcygpe3JldHVybiBzaGFkb3codGhpcywidGFibGVzIix0aGlzLmNyZWF0ZVRhYmxlcyhNaSkpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKENGRlByaXZhdGVEaWN0LnRhYmxlcyxlKTt0aGlzLnN1YnJzSW5kZXg9bnVsbH19Y29uc3QgSGk9e0lTT19BRE9CRTowLEVYUEVSVDoxLEVYUEVSVF9TVUJTRVQ6Mn07Y2xhc3MgQ0ZGQ2hhcnNldHtjb25zdHJ1Y3RvcihlLHQsaSxhKXt0aGlzLnByZWRlZmluZWQ9ZTt0aGlzLmZvcm1hdD10O3RoaXMuY2hhcnNldD1pO3RoaXMucmF3PWF9fWNsYXNzIENGRkVuY29kaW5ne2NvbnN0cnVjdG9yKGUsdCxpLGEpe3RoaXMucHJlZGVmaW5lZD1lO3RoaXMuZm9ybWF0PXQ7dGhpcy5lbmNvZGluZz1pO3RoaXMucmF3PWF9fWNsYXNzIENGRkZEU2VsZWN0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mb3JtYXQ9ZTt0aGlzLmZkU2VsZWN0PXR9Z2V0RkRJbmRleChlKXtyZXR1cm4gZTwwfHxlPj10aGlzLmZkU2VsZWN0Lmxlbmd0aD8tMTp0aGlzLmZkU2VsZWN0W2VdfX1jbGFzcyBDRkZPZmZzZXRUcmFja2Vye2NvbnN0cnVjdG9yKCl7dGhpcy5vZmZzZXRzPU9iamVjdC5jcmVhdGUobnVsbCl9aXNUcmFja2luZyhlKXtyZXR1cm4gZSBpbiB0aGlzLm9mZnNldHN9dHJhY2soZSx0KXtpZihlIGluIHRoaXMub2Zmc2V0cyl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEFscmVhZHkgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtlfWApO3RoaXMub2Zmc2V0c1tlXT10fW9mZnNldChlKXtmb3IoY29uc3QgdCBpbiB0aGlzLm9mZnNldHMpdGhpcy5vZmZzZXRzW3RdKz1lfXNldEVudHJ5TG9jYXRpb24oZSx0LGkpe2lmKCEoZSBpbiB0aGlzLm9mZnNldHMpKXRocm93IG5ldyBGb3JtYXRFcnJvcihgTm90IHRyYWNraW5nIGxvY2F0aW9uIG9mICR7ZX1gKTtjb25zdCBhPWkuZGF0YSxyPXRoaXMub2Zmc2V0c1tlXTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTsrK2Upe2NvbnN0IGk9NSplK3Iscz1pKzEsbj1pKzIsbz1pKzMsZz1pKzQ7aWYoMjkhPT1hW2ldfHwwIT09YVtzXXx8MCE9PWFbbl18fDAhPT1hW29dfHwwIT09YVtnXSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIndyaXRpbmcgdG8gYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGVtcHR5Iik7Y29uc3QgYz10W2VdO2FbaV09Mjk7YVtzXT1jPj4yNCYyNTU7YVtuXT1jPj4xNiYyNTU7YVtvXT1jPj44JjI1NTthW2ddPTI1NSZjfX19Y2xhc3MgQ0ZGQ29tcGlsZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5jZmY9ZX1jb21waWxlKCl7Y29uc3QgZT10aGlzLmNmZix0PXtkYXRhOltdLGxlbmd0aDowLGFkZChlKXt0cnl7dGhpcy5kYXRhLnB1c2goLi4uZSl9Y2F0Y2h7dGhpcy5kYXRhPXRoaXMuZGF0YS5jb25jYXQoZSl9dGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aH19LGk9dGhpcy5jb21waWxlSGVhZGVyKGUuaGVhZGVyKTt0LmFkZChpKTtjb25zdCBhPXRoaXMuY29tcGlsZU5hbWVJbmRleChlLm5hbWVzKTt0LmFkZChhKTtpZihlLmlzQ0lERm9udCYmZS50b3BEaWN0Lmhhc05hbWUoIkZvbnRNYXRyaXgiKSl7Y29uc3QgdD1lLnRvcERpY3QuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7ZS50b3BEaWN0LnJlbW92ZUJ5TmFtZSgiRm9udE1hdHJpeCIpO2Zvcihjb25zdCBpIG9mIGUuZmRBcnJheSl7bGV0IGU9dC5zbGljZSgwKTtpLmhhc05hbWUoIkZvbnRNYXRyaXgiKSYmKGU9VXRpbC50cmFuc2Zvcm0oZSxpLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpKSk7aS5zZXRCeU5hbWUoIkZvbnRNYXRyaXgiLGUpfX1jb25zdCByPWUudG9wRGljdC5nZXRCeU5hbWUoIlhVSUQiKTtyPy5sZW5ndGg+MTYmJmUudG9wRGljdC5yZW1vdmVCeU5hbWUoIlhVSUQiKTtlLnRvcERpY3Quc2V0QnlOYW1lKCJjaGFyc2V0IiwwKTtsZXQgcz10aGlzLmNvbXBpbGVUb3BEaWN0cyhbZS50b3BEaWN0XSx0Lmxlbmd0aCxlLmlzQ0lERm9udCk7dC5hZGQocy5vdXRwdXQpO2NvbnN0IG49cy50cmFja2Vyc1swXSxvPXRoaXMuY29tcGlsZVN0cmluZ0luZGV4KGUuc3RyaW5ncy5zdHJpbmdzKTt0LmFkZChvKTtjb25zdCBnPXRoaXMuY29tcGlsZUluZGV4KGUuZ2xvYmFsU3VickluZGV4KTt0LmFkZChnKTtpZihlLmVuY29kaW5nJiZlLnRvcERpY3QuaGFzTmFtZSgiRW5jb2RpbmciKSlpZihlLmVuY29kaW5nLnByZWRlZmluZWQpbi5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW2UuZW5jb2RpbmcuZm9ybWF0XSx0KTtlbHNle2NvbnN0IGk9dGhpcy5jb21waWxlRW5jb2RpbmcoZS5lbmNvZGluZyk7bi5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW3QubGVuZ3RoXSx0KTt0LmFkZChpKX1jb25zdCBjPXRoaXMuY29tcGlsZUNoYXJzZXQoZS5jaGFyc2V0LGUuY2hhclN0cmluZ3MuY291bnQsZS5zdHJpbmdzLGUuaXNDSURGb250KTtuLnNldEVudHJ5TG9jYXRpb24oImNoYXJzZXQiLFt0Lmxlbmd0aF0sdCk7dC5hZGQoYyk7Y29uc3QgQz10aGlzLmNvbXBpbGVDaGFyU3RyaW5ncyhlLmNoYXJTdHJpbmdzKTtuLnNldEVudHJ5TG9jYXRpb24oIkNoYXJTdHJpbmdzIixbdC5sZW5ndGhdLHQpO3QuYWRkKEMpO2lmKGUuaXNDSURGb250KXtuLnNldEVudHJ5TG9jYXRpb24oIkZEU2VsZWN0IixbdC5sZW5ndGhdLHQpO2NvbnN0IGk9dGhpcy5jb21waWxlRkRTZWxlY3QoZS5mZFNlbGVjdCk7dC5hZGQoaSk7cz10aGlzLmNvbXBpbGVUb3BEaWN0cyhlLmZkQXJyYXksdC5sZW5ndGgsITApO24uc2V0RW50cnlMb2NhdGlvbigiRkRBcnJheSIsW3QubGVuZ3RoXSx0KTt0LmFkZChzLm91dHB1dCk7Y29uc3QgYT1zLnRyYWNrZXJzO3RoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhlLmZkQXJyYXksYSx0KX10aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoW2UudG9wRGljdF0sW25dLHQpO3QuYWRkKFswXSk7cmV0dXJuIHQuZGF0YX1lbmNvZGVOdW1iZXIoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSk/dGhpcy5lbmNvZGVJbnRlZ2VyKGUpOnRoaXMuZW5jb2RlRmxvYXQoZSl9c3RhdGljIGdldCBFbmNvZGVGbG9hdFJlZ0V4cCgpe3JldHVybiBzaGFkb3codGhpcywiRW5jb2RlRmxvYXRSZWdFeHAiLC9cLihcZCo/KSg/Ojl7NSwyMH18MHs1LDIwfSlcZHswLDJ9KD86ZSguKyl8JCkvKX1lbmNvZGVGbG9hdChlKXtsZXQgdD1lLnRvU3RyaW5nKCk7Y29uc3QgaT1DRkZDb21waWxlci5FbmNvZGVGbG9hdFJlZ0V4cC5leGVjKHQpO2lmKGkpe2NvbnN0IGE9cGFyc2VGbG9hdCgiMWUiKygoaVsyXT8raVsyXTowKStpWzFdLmxlbmd0aCkpO3Q9KE1hdGgucm91bmQoZSphKS9hKS50b1N0cmluZygpfWxldCBhLHIscz0iIjtmb3IoYT0wLHI9dC5sZW5ndGg7YTxyOysrYSl7Y29uc3QgZT10W2FdO3MrPSJlIj09PWU/Ii0iPT09dFsrK2FdPyJjIjoiYiI6Ii4iPT09ZT8iYSI6Ii0iPT09ZT8iZSI6ZX1zKz0xJnMubGVuZ3RoPyJmIjoiZmYiO2NvbnN0IG49WzMwXTtmb3IoYT0wLHI9cy5sZW5ndGg7YTxyO2ErPTIpbi5wdXNoKHBhcnNlSW50KHMuc3Vic3RyaW5nKGEsYSsyKSwxNikpO3JldHVybiBufWVuY29kZUludGVnZXIoZSl7bGV0IHQ7dD1lPj0tMTA3JiZlPD0xMDc/W2UrMTM5XTplPj0xMDgmJmU8PTExMzE/WzI0NysoKGUtPTEwOCk+PjgpLDI1NSZlXTplPj0tMTEzMSYmZTw9LTEwOD9bMjUxKygoZT0tZS0xMDgpPj44KSwyNTUmZV06ZT49LTMyNzY4JiZlPD0zMjc2Nz9bMjgsZT4+OCYyNTUsMjU1JmVdOlsyOSxlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlXTtyZXR1cm4gdH1jb21waWxlSGVhZGVyKGUpe3JldHVybltlLm1ham9yLGUubWlub3IsNCxlLm9mZlNpemVdfWNvbXBpbGVOYW1lSW5kZXgoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGNvbnN0IGkgb2YgZSl7Y29uc3QgZT1NYXRoLm1pbihpLmxlbmd0aCwxMjcpO2xldCBhPW5ldyBBcnJheShlKTtmb3IobGV0IHQ9MDt0PGU7dCsrKXtsZXQgZT1pW3RdOyhlPCIhInx8ZT4ifiJ8fCJbIj09PWV8fCJdIj09PWV8fCIoIj09PWV8fCIpIj09PWV8fCJ7Ij09PWV8fCJ9Ij09PWV8fCI8Ij09PWV8fCI+Ij09PWV8fCIvIj09PWV8fCIlIj09PWUpJiYoZT0iXyIpO2FbdF09ZX1hPWEuam9pbigiIik7IiI9PT1hJiYoYT0iQmFkX0ZvbnRfTmFtZSIpO3QuYWRkKHN0cmluZ1RvQnl0ZXMoYSkpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX1jb21waWxlVG9wRGljdHMoZSx0LGkpe2NvbnN0IGE9W107bGV0IHI9bmV3IENGRkluZGV4O2Zvcihjb25zdCBzIG9mIGUpe2lmKGkpe3MucmVtb3ZlQnlOYW1lKCJDSURGb250VmVyc2lvbiIpO3MucmVtb3ZlQnlOYW1lKCJDSURGb250UmV2aXNpb24iKTtzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFR5cGUiKTtzLnJlbW92ZUJ5TmFtZSgiQ0lEQ291bnQiKTtzLnJlbW92ZUJ5TmFtZSgiVUlEQmFzZSIpfWNvbnN0IGU9bmV3IENGRk9mZnNldFRyYWNrZXIsbj10aGlzLmNvbXBpbGVEaWN0KHMsZSk7YS5wdXNoKGUpO3IuYWRkKG4pO2Uub2Zmc2V0KHQpfXI9dGhpcy5jb21waWxlSW5kZXgocixhKTtyZXR1cm57dHJhY2tlcnM6YSxvdXRwdXQ6cn19Y29tcGlsZVByaXZhdGVEaWN0cyhlLHQsaSl7Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7KythKXtjb25zdCByPWVbYV0scz1yLnByaXZhdGVEaWN0O2lmKCFzfHwhci5oYXNOYW1lKCJQcml2YXRlIikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJUaGVyZSBtdXN0IGJlIGEgcHJpdmF0ZSBkaWN0aW9uYXJ5LiIpO2NvbnN0IG49bmV3IENGRk9mZnNldFRyYWNrZXIsbz10aGlzLmNvbXBpbGVEaWN0KHMsbik7bGV0IGc9aS5sZW5ndGg7bi5vZmZzZXQoZyk7by5sZW5ndGh8fChnPTApO3RbYV0uc2V0RW50cnlMb2NhdGlvbigiUHJpdmF0ZSIsW28ubGVuZ3RoLGddLGkpO2kuYWRkKG8pO2lmKHMuc3VicnNJbmRleCYmcy5oYXNOYW1lKCJTdWJycyIpKXtjb25zdCBlPXRoaXMuY29tcGlsZUluZGV4KHMuc3VicnNJbmRleCk7bi5zZXRFbnRyeUxvY2F0aW9uKCJTdWJycyIsW28ubGVuZ3RoXSxpKTtpLmFkZChlKX19fWNvbXBpbGVEaWN0KGUsdCl7Y29uc3QgaT1bXTtmb3IoY29uc3QgYSBvZiBlLm9yZGVyKXtpZighKGEgaW4gZS52YWx1ZXMpKWNvbnRpbnVlO2xldCByPWUudmFsdWVzW2FdLHM9ZS50eXBlc1thXTtBcnJheS5pc0FycmF5KHMpfHwocz1bc10pO0FycmF5LmlzQXJyYXkocil8fChyPVtyXSk7aWYoMCE9PXIubGVuZ3RoKXtmb3IobGV0IG49MCxvPXMubGVuZ3RoO248bzsrK24pe2NvbnN0IG89c1tuXSxnPXJbbl07c3dpdGNoKG8pe2Nhc2UibnVtIjpjYXNlInNpZCI6aS5wdXNoKC4uLnRoaXMuZW5jb2RlTnVtYmVyKGcpKTticmVhaztjYXNlIm9mZnNldCI6Y29uc3Qgcz1lLmtleVRvTmFtZU1hcFthXTt0LmlzVHJhY2tpbmcocyl8fHQudHJhY2socyxpLmxlbmd0aCk7aS5wdXNoKDI5LDAsMCwwLDApO2JyZWFrO2Nhc2UiYXJyYXkiOmNhc2UiZGVsdGEiOmkucHVzaCguLi50aGlzLmVuY29kZU51bWJlcihnKSk7Zm9yKGxldCBlPTEsdD1yLmxlbmd0aDtlPHQ7KytlKWkucHVzaCguLi50aGlzLmVuY29kZU51bWJlcihyW2VdKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVua25vd24gZGF0YSB0eXBlIG9mICR7b31gKX19aS5wdXNoKC4uLmUub3Bjb2Rlc1thXSl9fXJldHVybiBpfWNvbXBpbGVTdHJpbmdJbmRleChlKXtjb25zdCB0PW5ldyBDRkZJbmRleDtmb3IoY29uc3QgaSBvZiBlKXQuYWRkKHN0cmluZ1RvQnl0ZXMoaSkpO3JldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX1jb21waWxlQ2hhclN0cmluZ3MoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGxldCBpPTA7aTxlLmNvdW50O2krKyl7Y29uc3QgYT1lLmdldChpKTswIT09YS5sZW5ndGg/dC5hZGQoYSk6dC5hZGQobmV3IFVpbnQ4QXJyYXkoWzEzOSwxNF0pKX1yZXR1cm4gdGhpcy5jb21waWxlSW5kZXgodCl9Y29tcGlsZUNoYXJzZXQoZSx0LGksYSl7bGV0IHI7Y29uc3Qgcz10LTE7aWYoYSlyPW5ldyBVaW50OEFycmF5KFsyLDAsMCxzPj44JjI1NSwyNTUmc10pO2Vsc2V7cj1uZXcgVWludDhBcnJheSgxKzIqcyk7clswXT0wO2xldCB0PTA7Y29uc3QgYT1lLmNoYXJzZXQubGVuZ3RoO2xldCBuPSExO2ZvcihsZXQgcz0xO3M8ci5sZW5ndGg7cys9Mil7bGV0IG89MDtpZih0PGEpe2NvbnN0IGE9ZS5jaGFyc2V0W3QrK107bz1pLmdldFNJRChhKTtpZigtMT09PW8pe289MDtpZighbil7bj0hMDt3YXJuKGBDb3VsZG4ndCBmaW5kICR7YX0gaW4gQ0ZGIHN0cmluZ3NgKX19fXJbc109bz4+OCYyNTU7cltzKzFdPTI1NSZvfX1yZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShyKX1jb21waWxlRW5jb2RpbmcoZSl7cmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoZS5yYXcpfWNvbXBpbGVGRFNlbGVjdChlKXtjb25zdCB0PWUuZm9ybWF0O2xldCBpLGE7c3dpdGNoKHQpe2Nhc2UgMDppPW5ldyBVaW50OEFycmF5KDErZS5mZFNlbGVjdC5sZW5ndGgpO2lbMF09dDtmb3IoYT0wO2E8ZS5mZFNlbGVjdC5sZW5ndGg7YSsrKWlbYSsxXT1lLmZkU2VsZWN0W2FdO2JyZWFrO2Nhc2UgMzpjb25zdCByPTA7bGV0IHM9ZS5mZFNlbGVjdFswXTtjb25zdCBuPVt0LDAsMCxyPj44JjI1NSwyNTUmcixzXTtmb3IoYT0xO2E8ZS5mZFNlbGVjdC5sZW5ndGg7YSsrKXtjb25zdCB0PWUuZmRTZWxlY3RbYV07aWYodCE9PXMpe24ucHVzaChhPj44JjI1NSwyNTUmYSx0KTtzPXR9fWNvbnN0IG89KG4ubGVuZ3RoLTMpLzM7blsxXT1vPj44JjI1NTtuWzJdPTI1NSZvO24ucHVzaChhPj44JjI1NSwyNTUmYSk7aT1uZXcgVWludDhBcnJheShuKX1yZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShpKX1jb21waWxlVHlwZWRBcnJheShlKXtyZXR1cm4gQXJyYXkuZnJvbShlKX1jb21waWxlSW5kZXgoZSx0PVtdKXtjb25zdCBpPWUub2JqZWN0cyxhPWkubGVuZ3RoO2lmKDA9PT1hKXJldHVyblswLDBdO2NvbnN0IHI9W2E+PjgmMjU1LDI1NSZhXTtsZXQgcyxuLG89MTtmb3Iocz0wO3M8YTsrK3Mpbys9aVtzXS5sZW5ndGg7bj1vPDI1Nj8xOm88NjU1MzY/MjpvPDE2Nzc3MjE2PzM6NDtyLnB1c2gobik7bGV0IGc9MTtmb3Iocz0wO3M8YSsxO3MrKyl7MT09PW4/ci5wdXNoKDI1NSZnKToyPT09bj9yLnB1c2goZz4+OCYyNTUsMjU1JmcpOjM9PT1uP3IucHVzaChnPj4xNiYyNTUsZz4+OCYyNTUsMjU1JmcpOnIucHVzaChnPj4+MjQmMjU1LGc+PjE2JjI1NSxnPj44JjI1NSwyNTUmZyk7aVtzXSYmKGcrPWlbc10ubGVuZ3RoKX1mb3Iocz0wO3M8YTtzKyspe3Rbc10mJnRbc10ub2Zmc2V0KHIubGVuZ3RoKTtyLnB1c2goLi4uaVtzXSl9cmV0dXJuIHJ9fWNvbnN0IEppPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5BPTY1O2UuQUU9MTk4O2UuQUVhY3V0ZT01MDg7ZS5BRW1hY3Jvbj00ODI7ZS5BRXNtYWxsPTYzNDYyO2UuQWFjdXRlPTE5MztlLkFhY3V0ZXNtYWxsPTYzNDU3O2UuQWJyZXZlPTI1ODtlLkFicmV2ZWFjdXRlPTc4NTQ7ZS5BYnJldmVjeXJpbGxpYz0xMjMyO2UuQWJyZXZlZG90YmVsb3c9Nzg2MjtlLkFicmV2ZWdyYXZlPTc4NTY7ZS5BYnJldmVob29rYWJvdmU9Nzg1ODtlLkFicmV2ZXRpbGRlPTc4NjA7ZS5BY2Fyb249NDYxO2UuQWNpcmNsZT05Mzk4O2UuQWNpcmN1bWZsZXg9MTk0O2UuQWNpcmN1bWZsZXhhY3V0ZT03ODQ0O2UuQWNpcmN1bWZsZXhkb3RiZWxvdz03ODUyO2UuQWNpcmN1bWZsZXhncmF2ZT03ODQ2O2UuQWNpcmN1bWZsZXhob29rYWJvdmU9Nzg0ODtlLkFjaXJjdW1mbGV4c21hbGw9NjM0NTg7ZS5BY2lyY3VtZmxleHRpbGRlPTc4NTA7ZS5BY3V0ZT02MzE3NztlLkFjdXRlc21hbGw9NjM0MTI7ZS5BY3lyaWxsaWM9MTA0MDtlLkFkYmxncmF2ZT01MTI7ZS5BZGllcmVzaXM9MTk2O2UuQWRpZXJlc2lzY3lyaWxsaWM9MTIzNDtlLkFkaWVyZXNpc21hY3Jvbj00Nzg7ZS5BZGllcmVzaXNzbWFsbD02MzQ2MDtlLkFkb3RiZWxvdz03ODQwO2UuQWRvdG1hY3Jvbj00ODA7ZS5BZ3JhdmU9MTkyO2UuQWdyYXZlc21hbGw9NjM0NTY7ZS5BaG9va2Fib3ZlPTc4NDI7ZS5BaWVjeXJpbGxpYz0xMjM2O2UuQWludmVydGVkYnJldmU9NTE0O2UuQWxwaGE9OTEzO2UuQWxwaGF0b25vcz05MDI7ZS5BbWFjcm9uPTI1NjtlLkFtb25vc3BhY2U9NjUzMTM7ZS5Bb2dvbmVrPTI2MDtlLkFyaW5nPTE5NztlLkFyaW5nYWN1dGU9NTA2O2UuQXJpbmdiZWxvdz03NjgwO2UuQXJpbmdzbWFsbD02MzQ2MTtlLkFzbWFsbD02MzMyOTtlLkF0aWxkZT0xOTU7ZS5BdGlsZGVzbWFsbD02MzQ1OTtlLkF5YmFybWVuaWFuPTEzMjk7ZS5CPTY2O2UuQmNpcmNsZT05Mzk5O2UuQmRvdGFjY2VudD03NjgyO2UuQmRvdGJlbG93PTc2ODQ7ZS5CZWN5cmlsbGljPTEwNDE7ZS5CZW5hcm1lbmlhbj0xMzMwO2UuQmV0YT05MTQ7ZS5CaG9vaz0zODU7ZS5CbGluZWJlbG93PTc2ODY7ZS5CbW9ub3NwYWNlPTY1MzE0O2UuQnJldmVzbWFsbD02MzIyMDtlLkJzbWFsbD02MzMzMDtlLkJ0b3BiYXI9Mzg2O2UuQz02NztlLkNhYXJtZW5pYW49MTM0MjtlLkNhY3V0ZT0yNjI7ZS5DYXJvbj02MzE3ODtlLkNhcm9uc21hbGw9NjMyMjE7ZS5DY2Fyb249MjY4O2UuQ2NlZGlsbGE9MTk5O2UuQ2NlZGlsbGFhY3V0ZT03Njg4O2UuQ2NlZGlsbGFzbWFsbD02MzQ2MztlLkNjaXJjbGU9OTQwMDtlLkNjaXJjdW1mbGV4PTI2NDtlLkNkb3Q9MjY2O2UuQ2RvdGFjY2VudD0yNjY7ZS5DZWRpbGxhc21hbGw9NjM0MTY7ZS5DaGFhcm1lbmlhbj0xMzUzO2UuQ2hlYWJraGFzaWFuY3lyaWxsaWM9MTIxMjtlLkNoZWN5cmlsbGljPTEwNjM7ZS5DaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYz0xMjE0O2UuQ2hlZGVzY2VuZGVyY3lyaWxsaWM9MTIwNjtlLkNoZWRpZXJlc2lzY3lyaWxsaWM9MTI2ODtlLkNoZWhhcm1lbmlhbj0xMzQ3O2UuQ2hla2hha2Fzc2lhbmN5cmlsbGljPTEyMjc7ZS5DaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljPTEyMDg7ZS5DaGk9OTM1O2UuQ2hvb2s9MzkxO2UuQ2lyY3VtZmxleHNtYWxsPTYzMjIyO2UuQ21vbm9zcGFjZT02NTMxNTtlLkNvYXJtZW5pYW49MTM2MTtlLkNzbWFsbD02MzMzMTtlLkQ9Njg7ZS5EWj00OTc7ZS5EWmNhcm9uPTQ1MjtlLkRhYXJtZW5pYW49MTMzMjtlLkRhZnJpY2FuPTM5MztlLkRjYXJvbj0yNzA7ZS5EY2VkaWxsYT03Njk2O2UuRGNpcmNsZT05NDAxO2UuRGNpcmN1bWZsZXhiZWxvdz03Njk4O2UuRGNyb2F0PTI3MjtlLkRkb3RhY2NlbnQ9NzY5MDtlLkRkb3RiZWxvdz03NjkyO2UuRGVjeXJpbGxpYz0xMDQ0O2UuRGVpY29wdGljPTEwMDY7ZS5EZWx0YT04NzEwO2UuRGVsdGFncmVlaz05MTY7ZS5EaG9vaz0zOTQ7ZS5EaWVyZXNpcz02MzE3OTtlLkRpZXJlc2lzQWN1dGU9NjMxODA7ZS5EaWVyZXNpc0dyYXZlPTYzMTgxO2UuRGllcmVzaXNzbWFsbD02MzQwMDtlLkRpZ2FtbWFncmVlaz05ODg7ZS5EamVjeXJpbGxpYz0xMDI2O2UuRGxpbmViZWxvdz03Njk0O2UuRG1vbm9zcGFjZT02NTMxNjtlLkRvdGFjY2VudHNtYWxsPTYzMjIzO2UuRHNsYXNoPTI3MjtlLkRzbWFsbD02MzMzMjtlLkR0b3BiYXI9Mzk1O2UuRHo9NDk4O2UuRHpjYXJvbj00NTM7ZS5EemVhYmtoYXNpYW5jeXJpbGxpYz0xMjQ4O2UuRHplY3lyaWxsaWM9MTAyOTtlLkR6aGVjeXJpbGxpYz0xMDM5O2UuRT02OTtlLkVhY3V0ZT0yMDE7ZS5FYWN1dGVzbWFsbD02MzQ2NTtlLkVicmV2ZT0yNzY7ZS5FY2Fyb249MjgyO2UuRWNlZGlsbGFicmV2ZT03NzA4O2UuRWNoYXJtZW5pYW49MTMzMztlLkVjaXJjbGU9OTQwMjtlLkVjaXJjdW1mbGV4PTIwMjtlLkVjaXJjdW1mbGV4YWN1dGU9Nzg3MDtlLkVjaXJjdW1mbGV4YmVsb3c9NzcwNDtlLkVjaXJjdW1mbGV4ZG90YmVsb3c9Nzg3ODtlLkVjaXJjdW1mbGV4Z3JhdmU9Nzg3MjtlLkVjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NzQ7ZS5FY2lyY3VtZmxleHNtYWxsPTYzNDY2O2UuRWNpcmN1bWZsZXh0aWxkZT03ODc2O2UuRWN5cmlsbGljPTEwMjg7ZS5FZGJsZ3JhdmU9NTE2O2UuRWRpZXJlc2lzPTIwMztlLkVkaWVyZXNpc3NtYWxsPTYzNDY3O2UuRWRvdD0yNzg7ZS5FZG90YWNjZW50PTI3ODtlLkVkb3RiZWxvdz03ODY0O2UuRWZjeXJpbGxpYz0xMDYwO2UuRWdyYXZlPTIwMDtlLkVncmF2ZXNtYWxsPTYzNDY0O2UuRWhhcm1lbmlhbj0xMzM1O2UuRWhvb2thYm92ZT03ODY2O2UuRWlnaHRyb21hbj04NTUxO2UuRWludmVydGVkYnJldmU9NTE4O2UuRWlvdGlmaWVkY3lyaWxsaWM9MTEyNDtlLkVsY3lyaWxsaWM9MTA1MTtlLkVsZXZlbnJvbWFuPTg1NTQ7ZS5FbWFjcm9uPTI3NDtlLkVtYWNyb25hY3V0ZT03NzAyO2UuRW1hY3JvbmdyYXZlPTc3MDA7ZS5FbWN5cmlsbGljPTEwNTI7ZS5FbW9ub3NwYWNlPTY1MzE3O2UuRW5jeXJpbGxpYz0xMDUzO2UuRW5kZXNjZW5kZXJjeXJpbGxpYz0xMTg2O2UuRW5nPTMzMDtlLkVuZ2hlY3lyaWxsaWM9MTE4ODtlLkVuaG9va2N5cmlsbGljPTEyMjM7ZS5Fb2dvbmVrPTI4MDtlLkVvcGVuPTQwMDtlLkVwc2lsb249OTE3O2UuRXBzaWxvbnRvbm9zPTkwNDtlLkVyY3lyaWxsaWM9MTA1NjtlLkVyZXZlcnNlZD0zOTg7ZS5FcmV2ZXJzZWRjeXJpbGxpYz0xMDY5O2UuRXNjeXJpbGxpYz0xMDU3O2UuRXNkZXNjZW5kZXJjeXJpbGxpYz0xMTk0O2UuRXNoPTQyNTtlLkVzbWFsbD02MzMzMztlLkV0YT05MTk7ZS5FdGFybWVuaWFuPTEzMzY7ZS5FdGF0b25vcz05MDU7ZS5FdGg9MjA4O2UuRXRoc21hbGw9NjM0NzI7ZS5FdGlsZGU9Nzg2ODtlLkV0aWxkZWJlbG93PTc3MDY7ZS5FdXJvPTgzNjQ7ZS5Femg9NDM5O2UuRXpoY2Fyb249NDk0O2UuRXpocmV2ZXJzZWQ9NDQwO2UuRj03MDtlLkZjaXJjbGU9OTQwMztlLkZkb3RhY2NlbnQ9NzcxMDtlLkZlaGFybWVuaWFuPTEzNjY7ZS5GZWljb3B0aWM9OTk2O2UuRmhvb2s9NDAxO2UuRml0YWN5cmlsbGljPTExMzg7ZS5GaXZlcm9tYW49ODU0ODtlLkZtb25vc3BhY2U9NjUzMTg7ZS5Gb3Vycm9tYW49ODU0NztlLkZzbWFsbD02MzMzNDtlLkc9NzE7ZS5HQnNxdWFyZT0xMzE5MTtlLkdhY3V0ZT01MDA7ZS5HYW1tYT05MTU7ZS5HYW1tYWFmcmljYW49NDA0O2UuR2FuZ2lhY29wdGljPTEwMDI7ZS5HYnJldmU9Mjg2O2UuR2Nhcm9uPTQ4NjtlLkdjZWRpbGxhPTI5MDtlLkdjaXJjbGU9OTQwNDtlLkdjaXJjdW1mbGV4PTI4NDtlLkdjb21tYWFjY2VudD0yOTA7ZS5HZG90PTI4ODtlLkdkb3RhY2NlbnQ9Mjg4O2UuR2VjeXJpbGxpYz0xMDQzO2UuR2hhZGFybWVuaWFuPTEzNDY7ZS5HaGVtaWRkbGVob29rY3lyaWxsaWM9MTE3MjtlLkdoZXN0cm9rZWN5cmlsbGljPTExNzA7ZS5HaGV1cHR1cm5jeXJpbGxpYz0xMTY4O2UuR2hvb2s9NDAzO2UuR2ltYXJtZW5pYW49MTMzMTtlLkdqZWN5cmlsbGljPTEwMjc7ZS5HbWFjcm9uPTc3MTI7ZS5HbW9ub3NwYWNlPTY1MzE5O2UuR3JhdmU9NjMxODI7ZS5HcmF2ZXNtYWxsPTYzMzI4O2UuR3NtYWxsPTYzMzM1O2UuR3NtYWxsaG9vaz02Njc7ZS5Hc3Ryb2tlPTQ4NDtlLkg9NzI7ZS5IMTg1MzM9OTY3OTtlLkgxODU0Mz05NjQyO2UuSDE4NTUxPTk2NDM7ZS5IMjIwNzM9OTYzMztlLkhQc3F1YXJlPTEzMjU5O2UuSGFhYmtoYXNpYW5jeXJpbGxpYz0xMTkyO2UuSGFkZXNjZW5kZXJjeXJpbGxpYz0xMjAyO2UuSGFyZHNpZ25jeXJpbGxpYz0xMDY2O2UuSGJhcj0yOTQ7ZS5IYnJldmViZWxvdz03NzIyO2UuSGNlZGlsbGE9NzcyMDtlLkhjaXJjbGU9OTQwNTtlLkhjaXJjdW1mbGV4PTI5MjtlLkhkaWVyZXNpcz03NzE4O2UuSGRvdGFjY2VudD03NzE0O2UuSGRvdGJlbG93PTc3MTY7ZS5IbW9ub3NwYWNlPTY1MzIwO2UuSG9hcm1lbmlhbj0xMzQ0O2UuSG9yaWNvcHRpYz0xZTM7ZS5Ic21hbGw9NjMzMzY7ZS5IdW5nYXJ1bWxhdXQ9NjMxODM7ZS5IdW5nYXJ1bWxhdXRzbWFsbD02MzIyNDtlLkh6c3F1YXJlPTEzMjAwO2UuST03MztlLklBY3lyaWxsaWM9MTA3MTtlLklKPTMwNjtlLklVY3lyaWxsaWM9MTA3MDtlLklhY3V0ZT0yMDU7ZS5JYWN1dGVzbWFsbD02MzQ2OTtlLklicmV2ZT0zMDA7ZS5JY2Fyb249NDYzO2UuSWNpcmNsZT05NDA2O2UuSWNpcmN1bWZsZXg9MjA2O2UuSWNpcmN1bWZsZXhzbWFsbD02MzQ3MDtlLkljeXJpbGxpYz0xMDMwO2UuSWRibGdyYXZlPTUyMDtlLklkaWVyZXNpcz0yMDc7ZS5JZGllcmVzaXNhY3V0ZT03NzI2O2UuSWRpZXJlc2lzY3lyaWxsaWM9MTI1MjtlLklkaWVyZXNpc3NtYWxsPTYzNDcxO2UuSWRvdD0zMDQ7ZS5JZG90YWNjZW50PTMwNDtlLklkb3RiZWxvdz03ODgyO2UuSWVicmV2ZWN5cmlsbGljPTEyMzg7ZS5JZWN5cmlsbGljPTEwNDU7ZS5JZnJha3R1cj04NDY1O2UuSWdyYXZlPTIwNDtlLklncmF2ZXNtYWxsPTYzNDY4O2UuSWhvb2thYm92ZT03ODgwO2UuSWljeXJpbGxpYz0xMDQ4O2UuSWludmVydGVkYnJldmU9NTIyO2UuSWlzaG9ydGN5cmlsbGljPTEwNDk7ZS5JbWFjcm9uPTI5ODtlLkltYWNyb25jeXJpbGxpYz0xMjUwO2UuSW1vbm9zcGFjZT02NTMyMTtlLkluaWFybWVuaWFuPTEzMzk7ZS5Jb2N5cmlsbGljPTEwMjU7ZS5Jb2dvbmVrPTMwMjtlLklvdGE9OTIxO2UuSW90YWFmcmljYW49NDA2O2UuSW90YWRpZXJlc2lzPTkzODtlLklvdGF0b25vcz05MDY7ZS5Jc21hbGw9NjMzMzc7ZS5Jc3Ryb2tlPTQwNztlLkl0aWxkZT0yOTY7ZS5JdGlsZGViZWxvdz03NzI0O2UuSXpoaXRzYWN5cmlsbGljPTExNDA7ZS5JemhpdHNhZGJsZ3JhdmVjeXJpbGxpYz0xMTQyO2UuSj03NDtlLkphYXJtZW5pYW49MTM0NTtlLkpjaXJjbGU9OTQwNztlLkpjaXJjdW1mbGV4PTMwODtlLkplY3lyaWxsaWM9MTAzMjtlLkpoZWhhcm1lbmlhbj0xMzU1O2UuSm1vbm9zcGFjZT02NTMyMjtlLkpzbWFsbD02MzMzODtlLks9NzU7ZS5LQnNxdWFyZT0xMzE4OTtlLktLc3F1YXJlPTEzMjYxO2UuS2FiYXNoa2lyY3lyaWxsaWM9MTE4NDtlLkthY3V0ZT03NzI4O2UuS2FjeXJpbGxpYz0xMDUwO2UuS2FkZXNjZW5kZXJjeXJpbGxpYz0xMTc4O2UuS2Fob29rY3lyaWxsaWM9MTIxOTtlLkthcHBhPTkyMjtlLkthc3Ryb2tlY3lyaWxsaWM9MTE4MjtlLkthdmVydGljYWxzdHJva2VjeXJpbGxpYz0xMTgwO2UuS2Nhcm9uPTQ4ODtlLktjZWRpbGxhPTMxMDtlLktjaXJjbGU9OTQwODtlLktjb21tYWFjY2VudD0zMTA7ZS5LZG90YmVsb3c9NzczMDtlLktlaGFybWVuaWFuPTEzNjQ7ZS5LZW5hcm1lbmlhbj0xMzQzO2UuS2hhY3lyaWxsaWM9MTA2MTtlLktoZWljb3B0aWM9OTk4O2UuS2hvb2s9NDA4O2UuS2plY3lyaWxsaWM9MTAzNjtlLktsaW5lYmVsb3c9NzczMjtlLkttb25vc3BhY2U9NjUzMjM7ZS5Lb3BwYWN5cmlsbGljPTExNTI7ZS5Lb3BwYWdyZWVrPTk5MDtlLktzaWN5cmlsbGljPTExMzQ7ZS5Lc21hbGw9NjMzMzk7ZS5MPTc2O2UuTEo9NDU1O2UuTEw9NjMxNjc7ZS5MYWN1dGU9MzEzO2UuTGFtYmRhPTkyMztlLkxjYXJvbj0zMTc7ZS5MY2VkaWxsYT0zMTU7ZS5MY2lyY2xlPTk0MDk7ZS5MY2lyY3VtZmxleGJlbG93PTc3NDA7ZS5MY29tbWFhY2NlbnQ9MzE1O2UuTGRvdD0zMTk7ZS5MZG90YWNjZW50PTMxOTtlLkxkb3RiZWxvdz03NzM0O2UuTGRvdGJlbG93bWFjcm9uPTc3MzY7ZS5MaXduYXJtZW5pYW49MTM0MDtlLkxqPTQ1NjtlLkxqZWN5cmlsbGljPTEwMzM7ZS5MbGluZWJlbG93PTc3Mzg7ZS5MbW9ub3NwYWNlPTY1MzI0O2UuTHNsYXNoPTMyMTtlLkxzbGFzaHNtYWxsPTYzMjI1O2UuTHNtYWxsPTYzMzQwO2UuTT03NztlLk1Cc3F1YXJlPTEzMTkwO2UuTWFjcm9uPTYzMTg0O2UuTWFjcm9uc21hbGw9NjM0MDc7ZS5NYWN1dGU9Nzc0MjtlLk1jaXJjbGU9OTQxMDtlLk1kb3RhY2NlbnQ9Nzc0NDtlLk1kb3RiZWxvdz03NzQ2O2UuTWVuYXJtZW5pYW49MTM0ODtlLk1tb25vc3BhY2U9NjUzMjU7ZS5Nc21hbGw9NjMzNDE7ZS5NdHVybmVkPTQxMjtlLk11PTkyNDtlLk49Nzg7ZS5OSj00NTg7ZS5OYWN1dGU9MzIzO2UuTmNhcm9uPTMyNztlLk5jZWRpbGxhPTMyNTtlLk5jaXJjbGU9OTQxMTtlLk5jaXJjdW1mbGV4YmVsb3c9Nzc1NDtlLk5jb21tYWFjY2VudD0zMjU7ZS5OZG90YWNjZW50PTc3NDg7ZS5OZG90YmVsb3c9Nzc1MDtlLk5ob29rbGVmdD00MTM7ZS5OaW5lcm9tYW49ODU1MjtlLk5qPTQ1OTtlLk5qZWN5cmlsbGljPTEwMzQ7ZS5ObGluZWJlbG93PTc3NTI7ZS5ObW9ub3NwYWNlPTY1MzI2O2UuTm93YXJtZW5pYW49MTM1MDtlLk5zbWFsbD02MzM0MjtlLk50aWxkZT0yMDk7ZS5OdGlsZGVzbWFsbD02MzQ3MztlLk51PTkyNTtlLk89Nzk7ZS5PRT0zMzg7ZS5PRXNtYWxsPTYzMjI2O2UuT2FjdXRlPTIxMTtlLk9hY3V0ZXNtYWxsPTYzNDc1O2UuT2JhcnJlZGN5cmlsbGljPTEyNTY7ZS5PYmFycmVkZGllcmVzaXNjeXJpbGxpYz0xMjU4O2UuT2JyZXZlPTMzNDtlLk9jYXJvbj00NjU7ZS5PY2VudGVyZWR0aWxkZT00MTU7ZS5PY2lyY2xlPTk0MTI7ZS5PY2lyY3VtZmxleD0yMTI7ZS5PY2lyY3VtZmxleGFjdXRlPTc4ODg7ZS5PY2lyY3VtZmxleGRvdGJlbG93PTc4OTY7ZS5PY2lyY3VtZmxleGdyYXZlPTc4OTA7ZS5PY2lyY3VtZmxleGhvb2thYm92ZT03ODkyO2UuT2NpcmN1bWZsZXhzbWFsbD02MzQ3NjtlLk9jaXJjdW1mbGV4dGlsZGU9Nzg5NDtlLk9jeXJpbGxpYz0xMDU0O2UuT2RibGFjdXRlPTMzNjtlLk9kYmxncmF2ZT01MjQ7ZS5PZGllcmVzaXM9MjE0O2UuT2RpZXJlc2lzY3lyaWxsaWM9MTI1NDtlLk9kaWVyZXNpc3NtYWxsPTYzNDc4O2UuT2RvdGJlbG93PTc4ODQ7ZS5PZ29uZWtzbWFsbD02MzIyNztlLk9ncmF2ZT0yMTA7ZS5PZ3JhdmVzbWFsbD02MzQ3NDtlLk9oYXJtZW5pYW49MTM2NTtlLk9obT04NDg2O2UuT2hvb2thYm92ZT03ODg2O2UuT2hvcm49NDE2O2UuT2hvcm5hY3V0ZT03ODk4O2UuT2hvcm5kb3RiZWxvdz03OTA2O2UuT2hvcm5ncmF2ZT03OTAwO2UuT2hvcm5ob29rYWJvdmU9NzkwMjtlLk9ob3JudGlsZGU9NzkwNDtlLk9odW5nYXJ1bWxhdXQ9MzM2O2UuT2k9NDE4O2UuT2ludmVydGVkYnJldmU9NTI2O2UuT21hY3Jvbj0zMzI7ZS5PbWFjcm9uYWN1dGU9Nzc2MjtlLk9tYWNyb25ncmF2ZT03NzYwO2UuT21lZ2E9ODQ4NjtlLk9tZWdhY3lyaWxsaWM9MTEyMDtlLk9tZWdhZ3JlZWs9OTM3O2UuT21lZ2Fyb3VuZGN5cmlsbGljPTExNDY7ZS5PbWVnYXRpdGxvY3lyaWxsaWM9MTE0ODtlLk9tZWdhdG9ub3M9OTExO2UuT21pY3Jvbj05Mjc7ZS5PbWljcm9udG9ub3M9OTA4O2UuT21vbm9zcGFjZT02NTMyNztlLk9uZXJvbWFuPTg1NDQ7ZS5Pb2dvbmVrPTQ5MDtlLk9vZ29uZWttYWNyb249NDkyO2UuT29wZW49MzkwO2UuT3NsYXNoPTIxNjtlLk9zbGFzaGFjdXRlPTUxMDtlLk9zbGFzaHNtYWxsPTYzNDgwO2UuT3NtYWxsPTYzMzQzO2UuT3N0cm9rZWFjdXRlPTUxMDtlLk90Y3lyaWxsaWM9MTE1MDtlLk90aWxkZT0yMTM7ZS5PdGlsZGVhY3V0ZT03NzU2O2UuT3RpbGRlZGllcmVzaXM9Nzc1ODtlLk90aWxkZXNtYWxsPTYzNDc3O2UuUD04MDtlLlBhY3V0ZT03NzY0O2UuUGNpcmNsZT05NDEzO2UuUGRvdGFjY2VudD03NzY2O2UuUGVjeXJpbGxpYz0xMDU1O2UuUGVoYXJtZW5pYW49MTM1NDtlLlBlbWlkZGxlaG9va2N5cmlsbGljPTExOTA7ZS5QaGk9OTM0O2UuUGhvb2s9NDIwO2UuUGk9OTI4O2UuUGl3cmFybWVuaWFuPTEzNjM7ZS5QbW9ub3NwYWNlPTY1MzI4O2UuUHNpPTkzNjtlLlBzaWN5cmlsbGljPTExMzY7ZS5Qc21hbGw9NjMzNDQ7ZS5RPTgxO2UuUWNpcmNsZT05NDE0O2UuUW1vbm9zcGFjZT02NTMyOTtlLlFzbWFsbD02MzM0NTtlLlI9ODI7ZS5SYWFybWVuaWFuPTEzNTY7ZS5SYWN1dGU9MzQwO2UuUmNhcm9uPTM0NDtlLlJjZWRpbGxhPTM0MjtlLlJjaXJjbGU9OTQxNTtlLlJjb21tYWFjY2VudD0zNDI7ZS5SZGJsZ3JhdmU9NTI4O2UuUmRvdGFjY2VudD03NzY4O2UuUmRvdGJlbG93PTc3NzA7ZS5SZG90YmVsb3dtYWNyb249Nzc3MjtlLlJlaGFybWVuaWFuPTEzNjA7ZS5SZnJha3R1cj04NDc2O2UuUmhvPTkyOTtlLlJpbmdzbWFsbD02MzIyODtlLlJpbnZlcnRlZGJyZXZlPTUzMDtlLlJsaW5lYmVsb3c9Nzc3NDtlLlJtb25vc3BhY2U9NjUzMzA7ZS5Sc21hbGw9NjMzNDY7ZS5Sc21hbGxpbnZlcnRlZD02NDE7ZS5Sc21hbGxpbnZlcnRlZHN1cGVyaW9yPTY5NDtlLlM9ODM7ZS5TRjAxMDAwMD05NDg0O2UuU0YwMjAwMDA9OTQ5MjtlLlNGMDMwMDAwPTk0ODg7ZS5TRjA0MDAwMD05NDk2O2UuU0YwNTAwMDA9OTUzMjtlLlNGMDYwMDAwPTk1MTY7ZS5TRjA3MDAwMD05NTI0O2UuU0YwODAwMDA9OTUwMDtlLlNGMDkwMDAwPTk1MDg7ZS5TRjEwMDAwMD05NDcyO2UuU0YxMTAwMDA9OTQ3NDtlLlNGMTkwMDAwPTk1Njk7ZS5TRjIwMDAwMD05NTcwO2UuU0YyMTAwMDA9OTU1ODtlLlNGMjIwMDAwPTk1NTc7ZS5TRjIzMDAwMD05NTcxO2UuU0YyNDAwMDA9OTU1MztlLlNGMjUwMDAwPTk1NTk7ZS5TRjI2MDAwMD05NTY1O2UuU0YyNzAwMDA9OTU2NDtlLlNGMjgwMDAwPTk1NjM7ZS5TRjM2MDAwMD05NTY2O2UuU0YzNzAwMDA9OTU2NztlLlNGMzgwMDAwPTk1NjI7ZS5TRjM5MDAwMD05NTU2O2UuU0Y0MDAwMDA9OTU3NztlLlNGNDEwMDAwPTk1NzQ7ZS5TRjQyMDAwMD05NTY4O2UuU0Y0MzAwMDA9OTU1MjtlLlNGNDQwMDAwPTk1ODA7ZS5TRjQ1MDAwMD05NTc1O2UuU0Y0NjAwMDA9OTU3NjtlLlNGNDcwMDAwPTk1NzI7ZS5TRjQ4MDAwMD05NTczO2UuU0Y0OTAwMDA9OTU2MTtlLlNGNTAwMDAwPTk1NjA7ZS5TRjUxMDAwMD05NTU0O2UuU0Y1MjAwMDA9OTU1NTtlLlNGNTMwMDAwPTk1Nzk7ZS5TRjU0MDAwMD05NTc4O2UuU2FjdXRlPTM0NjtlLlNhY3V0ZWRvdGFjY2VudD03NzgwO2UuU2FtcGlncmVlaz05OTI7ZS5TY2Fyb249MzUyO2UuU2Nhcm9uZG90YWNjZW50PTc3ODI7ZS5TY2Fyb25zbWFsbD02MzIyOTtlLlNjZWRpbGxhPTM1MDtlLlNjaHdhPTM5OTtlLlNjaHdhY3lyaWxsaWM9MTI0MDtlLlNjaHdhZGllcmVzaXNjeXJpbGxpYz0xMjQyO2UuU2NpcmNsZT05NDE2O2UuU2NpcmN1bWZsZXg9MzQ4O2UuU2NvbW1hYWNjZW50PTUzNjtlLlNkb3RhY2NlbnQ9Nzc3NjtlLlNkb3RiZWxvdz03Nzc4O2UuU2RvdGJlbG93ZG90YWNjZW50PTc3ODQ7ZS5TZWhhcm1lbmlhbj0xMzU3O2UuU2V2ZW5yb21hbj04NTUwO2UuU2hhYXJtZW5pYW49MTM1MTtlLlNoYWN5cmlsbGljPTEwNjQ7ZS5TaGNoYWN5cmlsbGljPTEwNjU7ZS5TaGVpY29wdGljPTk5NDtlLlNoaGFjeXJpbGxpYz0xMjEwO2UuU2hpbWFjb3B0aWM9MTAwNDtlLlNpZ21hPTkzMTtlLlNpeHJvbWFuPTg1NDk7ZS5TbW9ub3NwYWNlPTY1MzMxO2UuU29mdHNpZ25jeXJpbGxpYz0xMDY4O2UuU3NtYWxsPTYzMzQ3O2UuU3RpZ21hZ3JlZWs9OTg2O2UuVD04NDtlLlRhdT05MzI7ZS5UYmFyPTM1ODtlLlRjYXJvbj0zNTY7ZS5UY2VkaWxsYT0zNTQ7ZS5UY2lyY2xlPTk0MTc7ZS5UY2lyY3VtZmxleGJlbG93PTc3OTI7ZS5UY29tbWFhY2NlbnQ9MzU0O2UuVGRvdGFjY2VudD03Nzg2O2UuVGRvdGJlbG93PTc3ODg7ZS5UZWN5cmlsbGljPTEwNTg7ZS5UZWRlc2NlbmRlcmN5cmlsbGljPTExOTY7ZS5UZW5yb21hbj04NTUzO2UuVGV0c2VjeXJpbGxpYz0xMjA0O2UuVGhldGE9OTIwO2UuVGhvb2s9NDI4O2UuVGhvcm49MjIyO2UuVGhvcm5zbWFsbD02MzQ4NjtlLlRocmVlcm9tYW49ODU0NjtlLlRpbGRlc21hbGw9NjMyMzA7ZS5UaXduYXJtZW5pYW49MTM1OTtlLlRsaW5lYmVsb3c9Nzc5MDtlLlRtb25vc3BhY2U9NjUzMzI7ZS5Ub2FybWVuaWFuPTEzMzc7ZS5Ub25lZml2ZT00NDQ7ZS5Ub25lc2l4PTM4ODtlLlRvbmV0d289NDIzO2UuVHJldHJvZmxleGhvb2s9NDMwO2UuVHNlY3lyaWxsaWM9MTA2MjtlLlRzaGVjeXJpbGxpYz0xMDM1O2UuVHNtYWxsPTYzMzQ4O2UuVHdlbHZlcm9tYW49ODU1NTtlLlR3b3JvbWFuPTg1NDU7ZS5VPTg1O2UuVWFjdXRlPTIxODtlLlVhY3V0ZXNtYWxsPTYzNDgyO2UuVWJyZXZlPTM2NDtlLlVjYXJvbj00Njc7ZS5VY2lyY2xlPTk0MTg7ZS5VY2lyY3VtZmxleD0yMTk7ZS5VY2lyY3VtZmxleGJlbG93PTc3OTg7ZS5VY2lyY3VtZmxleHNtYWxsPTYzNDgzO2UuVWN5cmlsbGljPTEwNTk7ZS5VZGJsYWN1dGU9MzY4O2UuVWRibGdyYXZlPTUzMjtlLlVkaWVyZXNpcz0yMjA7ZS5VZGllcmVzaXNhY3V0ZT00NzE7ZS5VZGllcmVzaXNiZWxvdz03Nzk0O2UuVWRpZXJlc2lzY2Fyb249NDczO2UuVWRpZXJlc2lzY3lyaWxsaWM9MTI2NDtlLlVkaWVyZXNpc2dyYXZlPTQ3NTtlLlVkaWVyZXNpc21hY3Jvbj00Njk7ZS5VZGllcmVzaXNzbWFsbD02MzQ4NDtlLlVkb3RiZWxvdz03OTA4O2UuVWdyYXZlPTIxNztlLlVncmF2ZXNtYWxsPTYzNDgxO2UuVWhvb2thYm92ZT03OTEwO2UuVWhvcm49NDMxO2UuVWhvcm5hY3V0ZT03OTEyO2UuVWhvcm5kb3RiZWxvdz03OTIwO2UuVWhvcm5ncmF2ZT03OTE0O2UuVWhvcm5ob29rYWJvdmU9NzkxNjtlLlVob3JudGlsZGU9NzkxODtlLlVodW5nYXJ1bWxhdXQ9MzY4O2UuVWh1bmdhcnVtbGF1dGN5cmlsbGljPTEyNjY7ZS5VaW52ZXJ0ZWRicmV2ZT01MzQ7ZS5Va2N5cmlsbGljPTExNDQ7ZS5VbWFjcm9uPTM2MjtlLlVtYWNyb25jeXJpbGxpYz0xMjYyO2UuVW1hY3JvbmRpZXJlc2lzPTc4MDI7ZS5VbW9ub3NwYWNlPTY1MzMzO2UuVW9nb25laz0zNzA7ZS5VcHNpbG9uPTkzMztlLlVwc2lsb24xPTk3ODtlLlVwc2lsb25hY3V0ZWhvb2tzeW1ib2xncmVlaz05Nzk7ZS5VcHNpbG9uYWZyaWNhbj00MzM7ZS5VcHNpbG9uZGllcmVzaXM9OTM5O2UuVXBzaWxvbmRpZXJlc2lzaG9va3N5bWJvbGdyZWVrPTk4MDtlLlVwc2lsb25ob29rc3ltYm9sPTk3ODtlLlVwc2lsb250b25vcz05MTA7ZS5VcmluZz0zNjY7ZS5Vc2hvcnRjeXJpbGxpYz0xMDM4O2UuVXNtYWxsPTYzMzQ5O2UuVXN0cmFpZ2h0Y3lyaWxsaWM9MTE5ODtlLlVzdHJhaWdodHN0cm9rZWN5cmlsbGljPTEyMDA7ZS5VdGlsZGU9MzYwO2UuVXRpbGRlYWN1dGU9NzgwMDtlLlV0aWxkZWJlbG93PTc3OTY7ZS5WPTg2O2UuVmNpcmNsZT05NDE5O2UuVmRvdGJlbG93PTc4MDY7ZS5WZWN5cmlsbGljPTEwNDI7ZS5WZXdhcm1lbmlhbj0xMzU4O2UuVmhvb2s9NDM0O2UuVm1vbm9zcGFjZT02NTMzNDtlLlZvYXJtZW5pYW49MTM1MjtlLlZzbWFsbD02MzM1MDtlLlZ0aWxkZT03ODA0O2UuVz04NztlLldhY3V0ZT03ODEwO2UuV2NpcmNsZT05NDIwO2UuV2NpcmN1bWZsZXg9MzcyO2UuV2RpZXJlc2lzPTc4MTI7ZS5XZG90YWNjZW50PTc4MTQ7ZS5XZG90YmVsb3c9NzgxNjtlLldncmF2ZT03ODA4O2UuV21vbm9zcGFjZT02NTMzNTtlLldzbWFsbD02MzM1MTtlLlg9ODg7ZS5YY2lyY2xlPTk0MjE7ZS5YZGllcmVzaXM9NzgyMDtlLlhkb3RhY2NlbnQ9NzgxODtlLlhlaGFybWVuaWFuPTEzNDE7ZS5YaT05MjY7ZS5YbW9ub3NwYWNlPTY1MzM2O2UuWHNtYWxsPTYzMzUyO2UuWT04OTtlLllhY3V0ZT0yMjE7ZS5ZYWN1dGVzbWFsbD02MzQ4NTtlLllhdGN5cmlsbGljPTExMjI7ZS5ZY2lyY2xlPTk0MjI7ZS5ZY2lyY3VtZmxleD0zNzQ7ZS5ZZGllcmVzaXM9Mzc2O2UuWWRpZXJlc2lzc21hbGw9NjM0ODc7ZS5ZZG90YWNjZW50PTc4MjI7ZS5ZZG90YmVsb3c9NzkyNDtlLlllcmljeXJpbGxpYz0xMDY3O2UuWWVydWRpZXJlc2lzY3lyaWxsaWM9MTI3MjtlLllncmF2ZT03OTIyO2UuWWhvb2s9NDM1O2UuWWhvb2thYm92ZT03OTI2O2UuWWlhcm1lbmlhbj0xMzQ5O2UuWWljeXJpbGxpYz0xMDMxO2UuWWl3bmFybWVuaWFuPTEzNjI7ZS5ZbW9ub3NwYWNlPTY1MzM3O2UuWXNtYWxsPTYzMzUzO2UuWXRpbGRlPTc5Mjg7ZS5ZdXNiaWdjeXJpbGxpYz0xMTMwO2UuWXVzYmlnaW90aWZpZWRjeXJpbGxpYz0xMTMyO2UuWXVzbGl0dGxlY3lyaWxsaWM9MTEyNjtlLll1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWM9MTEyODtlLlo9OTA7ZS5aYWFybWVuaWFuPTEzMzQ7ZS5aYWN1dGU9Mzc3O2UuWmNhcm9uPTM4MTtlLlpjYXJvbnNtYWxsPTYzMjMxO2UuWmNpcmNsZT05NDIzO2UuWmNpcmN1bWZsZXg9NzgyNDtlLlpkb3Q9Mzc5O2UuWmRvdGFjY2VudD0zNzk7ZS5aZG90YmVsb3c9NzgyNjtlLlplY3lyaWxsaWM9MTA0NztlLlplZGVzY2VuZGVyY3lyaWxsaWM9MTE3NjtlLlplZGllcmVzaXNjeXJpbGxpYz0xMjQ2O2UuWmV0YT05MTg7ZS5aaGVhcm1lbmlhbj0xMzM4O2UuWmhlYnJldmVjeXJpbGxpYz0xMjE3O2UuWmhlY3lyaWxsaWM9MTA0NjtlLlpoZWRlc2NlbmRlcmN5cmlsbGljPTExNzQ7ZS5aaGVkaWVyZXNpc2N5cmlsbGljPTEyNDQ7ZS5abGluZWJlbG93PTc4Mjg7ZS5abW9ub3NwYWNlPTY1MzM4O2UuWnNtYWxsPTYzMzU0O2UuWnN0cm9rZT00Mzc7ZS5hPTk3O2UuYWFiZW5nYWxpPTI0Mzg7ZS5hYWN1dGU9MjI1O2UuYWFkZXZhPTIzMTA7ZS5hYWd1amFyYXRpPTI2OTQ7ZS5hYWd1cm11a2hpPTI1NjY7ZS5hYW1hdHJhZ3VybXVraGk9MjYyMjtlLmFhcnVzcXVhcmU9MTMwNTk7ZS5hYXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NDtlLmFhdm93ZWxzaWduZGV2YT0yMzY2O2UuYWF2b3dlbHNpZ25ndWphcmF0aT0yNzUwO2UuYWJicmV2aWF0aW9ubWFya2FybWVuaWFuPTEzNzU7ZS5hYmJyZXZpYXRpb25zaWduZGV2YT0yNDE2O2UuYWJlbmdhbGk9MjQzNztlLmFib3BvbW9mbz0xMjU3MDtlLmFicmV2ZT0yNTk7ZS5hYnJldmVhY3V0ZT03ODU1O2UuYWJyZXZlY3lyaWxsaWM9MTIzMztlLmFicmV2ZWRvdGJlbG93PTc4NjM7ZS5hYnJldmVncmF2ZT03ODU3O2UuYWJyZXZlaG9va2Fib3ZlPTc4NTk7ZS5hYnJldmV0aWxkZT03ODYxO2UuYWNhcm9uPTQ2MjtlLmFjaXJjbGU9OTQyNDtlLmFjaXJjdW1mbGV4PTIyNjtlLmFjaXJjdW1mbGV4YWN1dGU9Nzg0NTtlLmFjaXJjdW1mbGV4ZG90YmVsb3c9Nzg1MztlLmFjaXJjdW1mbGV4Z3JhdmU9Nzg0NztlLmFjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NDk7ZS5hY2lyY3VtZmxleHRpbGRlPTc4NTE7ZS5hY3V0ZT0xODA7ZS5hY3V0ZWJlbG93Y21iPTc5MTtlLmFjdXRlY21iPTc2OTtlLmFjdXRlY29tYj03Njk7ZS5hY3V0ZWRldmE9MjM4ODtlLmFjdXRlbG93bW9kPTcxOTtlLmFjdXRldG9uZWNtYj04MzM7ZS5hY3lyaWxsaWM9MTA3MjtlLmFkYmxncmF2ZT01MTM7ZS5hZGRha2d1cm11a2hpPTI2NzM7ZS5hZGV2YT0yMzA5O2UuYWRpZXJlc2lzPTIyODtlLmFkaWVyZXNpc2N5cmlsbGljPTEyMzU7ZS5hZGllcmVzaXNtYWNyb249NDc5O2UuYWRvdGJlbG93PTc4NDE7ZS5hZG90bWFjcm9uPTQ4MTtlLmFlPTIzMDtlLmFlYWN1dGU9NTA5O2UuYWVrb3JlYW49MTI2MjQ7ZS5hZW1hY3Jvbj00ODM7ZS5hZmlpMDAyMDg9ODIxMztlLmFmaWkwODk0MT04MzU2O2UuYWZpaTEwMDE3PTEwNDA7ZS5hZmlpMTAwMTg9MTA0MTtlLmFmaWkxMDAxOT0xMDQyO2UuYWZpaTEwMDIwPTEwNDM7ZS5hZmlpMTAwMjE9MTA0NDtlLmFmaWkxMDAyMj0xMDQ1O2UuYWZpaTEwMDIzPTEwMjU7ZS5hZmlpMTAwMjQ9MTA0NjtlLmFmaWkxMDAyNT0xMDQ3O2UuYWZpaTEwMDI2PTEwNDg7ZS5hZmlpMTAwMjc9MTA0OTtlLmFmaWkxMDAyOD0xMDUwO2UuYWZpaTEwMDI5PTEwNTE7ZS5hZmlpMTAwMzA9MTA1MjtlLmFmaWkxMDAzMT0xMDUzO2UuYWZpaTEwMDMyPTEwNTQ7ZS5hZmlpMTAwMzM9MTA1NTtlLmFmaWkxMDAzND0xMDU2O2UuYWZpaTEwMDM1PTEwNTc7ZS5hZmlpMTAwMzY9MTA1ODtlLmFmaWkxMDAzNz0xMDU5O2UuYWZpaTEwMDM4PTEwNjA7ZS5hZmlpMTAwMzk9MTA2MTtlLmFmaWkxMDA0MD0xMDYyO2UuYWZpaTEwMDQxPTEwNjM7ZS5hZmlpMTAwNDI9MTA2NDtlLmFmaWkxMDA0Mz0xMDY1O2UuYWZpaTEwMDQ0PTEwNjY7ZS5hZmlpMTAwNDU9MTA2NztlLmFmaWkxMDA0Nj0xMDY4O2UuYWZpaTEwMDQ3PTEwNjk7ZS5hZmlpMTAwNDg9MTA3MDtlLmFmaWkxMDA0OT0xMDcxO2UuYWZpaTEwMDUwPTExNjg7ZS5hZmlpMTAwNTE9MTAyNjtlLmFmaWkxMDA1Mj0xMDI3O2UuYWZpaTEwMDUzPTEwMjg7ZS5hZmlpMTAwNTQ9MTAyOTtlLmFmaWkxMDA1NT0xMDMwO2UuYWZpaTEwMDU2PTEwMzE7ZS5hZmlpMTAwNTc9MTAzMjtlLmFmaWkxMDA1OD0xMDMzO2UuYWZpaTEwMDU5PTEwMzQ7ZS5hZmlpMTAwNjA9MTAzNTtlLmFmaWkxMDA2MT0xMDM2O2UuYWZpaTEwMDYyPTEwMzg7ZS5hZmlpMTAwNjM9NjMxNzI7ZS5hZmlpMTAwNjQ9NjMxNzM7ZS5hZmlpMTAwNjU9MTA3MjtlLmFmaWkxMDA2Nj0xMDczO2UuYWZpaTEwMDY3PTEwNzQ7ZS5hZmlpMTAwNjg9MTA3NTtlLmFmaWkxMDA2OT0xMDc2O2UuYWZpaTEwMDcwPTEwNzc7ZS5hZmlpMTAwNzE9MTEwNTtlLmFmaWkxMDA3Mj0xMDc4O2UuYWZpaTEwMDczPTEwNzk7ZS5hZmlpMTAwNzQ9MTA4MDtlLmFmaWkxMDA3NT0xMDgxO2UuYWZpaTEwMDc2PTEwODI7ZS5hZmlpMTAwNzc9MTA4MztlLmFmaWkxMDA3OD0xMDg0O2UuYWZpaTEwMDc5PTEwODU7ZS5hZmlpMTAwODA9MTA4NjtlLmFmaWkxMDA4MT0xMDg3O2UuYWZpaTEwMDgyPTEwODg7ZS5hZmlpMTAwODM9MTA4OTtlLmFmaWkxMDA4ND0xMDkwO2UuYWZpaTEwMDg1PTEwOTE7ZS5hZmlpMTAwODY9MTA5MjtlLmFmaWkxMDA4Nz0xMDkzO2UuYWZpaTEwMDg4PTEwOTQ7ZS5hZmlpMTAwODk9MTA5NTtlLmFmaWkxMDA5MD0xMDk2O2UuYWZpaTEwMDkxPTEwOTc7ZS5hZmlpMTAwOTI9MTA5ODtlLmFmaWkxMDA5Mz0xMDk5O2UuYWZpaTEwMDk0PTExMDA7ZS5hZmlpMTAwOTU9MTEwMTtlLmFmaWkxMDA5Nj0xMTAyO2UuYWZpaTEwMDk3PTExMDM7ZS5hZmlpMTAwOTg9MTE2OTtlLmFmaWkxMDA5OT0xMTA2O2UuYWZpaTEwMTAwPTExMDc7ZS5hZmlpMTAxMDE9MTEwODtlLmFmaWkxMDEwMj0xMTA5O2UuYWZpaTEwMTAzPTExMTA7ZS5hZmlpMTAxMDQ9MTExMTtlLmFmaWkxMDEwNT0xMTEyO2UuYWZpaTEwMTA2PTExMTM7ZS5hZmlpMTAxMDc9MTExNDtlLmFmaWkxMDEwOD0xMTE1O2UuYWZpaTEwMTA5PTExMTY7ZS5hZmlpMTAxMTA9MTExODtlLmFmaWkxMDE0NT0xMDM5O2UuYWZpaTEwMTQ2PTExMjI7ZS5hZmlpMTAxNDc9MTEzODtlLmFmaWkxMDE0OD0xMTQwO2UuYWZpaTEwMTkyPTYzMTc0O2UuYWZpaTEwMTkzPTExMTk7ZS5hZmlpMTAxOTQ9MTEyMztlLmFmaWkxMDE5NT0xMTM5O2UuYWZpaTEwMTk2PTExNDE7ZS5hZmlpMTA4MzE9NjMxNzU7ZS5hZmlpMTA4MzI9NjMxNzY7ZS5hZmlpMTA4NDY9MTI0MTtlLmFmaWkyOTk9ODIwNjtlLmFmaWkzMDA9ODIwNztlLmFmaWkzMDE9ODIwNTtlLmFmaWk1NzM4MT0xNjQyO2UuYWZpaTU3Mzg4PTE1NDg7ZS5hZmlpNTczOTI9MTYzMjtlLmFmaWk1NzM5Mz0xNjMzO2UuYWZpaTU3Mzk0PTE2MzQ7ZS5hZmlpNTczOTU9MTYzNTtlLmFmaWk1NzM5Nj0xNjM2O2UuYWZpaTU3Mzk3PTE2Mzc7ZS5hZmlpNTczOTg9MTYzODtlLmFmaWk1NzM5OT0xNjM5O2UuYWZpaTU3NDAwPTE2NDA7ZS5hZmlpNTc0MDE9MTY0MTtlLmFmaWk1NzQwMz0xNTYzO2UuYWZpaTU3NDA3PTE1Njc7ZS5hZmlpNTc0MDk9MTU2OTtlLmFmaWk1NzQxMD0xNTcwO2UuYWZpaTU3NDExPTE1NzE7ZS5hZmlpNTc0MTI9MTU3MjtlLmFmaWk1NzQxMz0xNTczO2UuYWZpaTU3NDE0PTE1NzQ7ZS5hZmlpNTc0MTU9MTU3NTtlLmFmaWk1NzQxNj0xNTc2O2UuYWZpaTU3NDE3PTE1Nzc7ZS5hZmlpNTc0MTg9MTU3ODtlLmFmaWk1NzQxOT0xNTc5O2UuYWZpaTU3NDIwPTE1ODA7ZS5hZmlpNTc0MjE9MTU4MTtlLmFmaWk1NzQyMj0xNTgyO2UuYWZpaTU3NDIzPTE1ODM7ZS5hZmlpNTc0MjQ9MTU4NDtlLmFmaWk1NzQyNT0xNTg1O2UuYWZpaTU3NDI2PTE1ODY7ZS5hZmlpNTc0Mjc9MTU4NztlLmFmaWk1NzQyOD0xNTg4O2UuYWZpaTU3NDI5PTE1ODk7ZS5hZmlpNTc0MzA9MTU5MDtlLmFmaWk1NzQzMT0xNTkxO2UuYWZpaTU3NDMyPTE1OTI7ZS5hZmlpNTc0MzM9MTU5MztlLmFmaWk1NzQzND0xNTk0O2UuYWZpaTU3NDQwPTE2MDA7ZS5hZmlpNTc0NDE9MTYwMTtlLmFmaWk1NzQ0Mj0xNjAyO2UuYWZpaTU3NDQzPTE2MDM7ZS5hZmlpNTc0NDQ9MTYwNDtlLmFmaWk1NzQ0NT0xNjA1O2UuYWZpaTU3NDQ2PTE2MDY7ZS5hZmlpNTc0NDg9MTYwODtlLmFmaWk1NzQ0OT0xNjA5O2UuYWZpaTU3NDUwPTE2MTA7ZS5hZmlpNTc0NTE9MTYxMTtlLmFmaWk1NzQ1Mj0xNjEyO2UuYWZpaTU3NDUzPTE2MTM7ZS5hZmlpNTc0NTQ9MTYxNDtlLmFmaWk1NzQ1NT0xNjE1O2UuYWZpaTU3NDU2PTE2MTY7ZS5hZmlpNTc0NTc9MTYxNztlLmFmaWk1NzQ1OD0xNjE4O2UuYWZpaTU3NDcwPTE2MDc7ZS5hZmlpNTc1MDU9MTcwMDtlLmFmaWk1NzUwNj0xNjYyO2UuYWZpaTU3NTA3PTE2NzA7ZS5hZmlpNTc1MDg9MTY4ODtlLmFmaWk1NzUwOT0xNzExO2UuYWZpaTU3NTExPTE2NTc7ZS5hZmlpNTc1MTI9MTY3MjtlLmFmaWk1NzUxMz0xNjgxO2UuYWZpaTU3NTE0PTE3MjI7ZS5hZmlpNTc1MTk9MTc0NjtlLmFmaWk1NzUzND0xNzQ5O2UuYWZpaTU3NjM2PTgzNjI7ZS5hZmlpNTc2NDU9MTQ3MDtlLmFmaWk1NzY1OD0xNDc1O2UuYWZpaTU3NjY0PTE0ODg7ZS5hZmlpNTc2NjU9MTQ4OTtlLmFmaWk1NzY2Nj0xNDkwO2UuYWZpaTU3NjY3PTE0OTE7ZS5hZmlpNTc2Njg9MTQ5MjtlLmFmaWk1NzY2OT0xNDkzO2UuYWZpaTU3NjcwPTE0OTQ7ZS5hZmlpNTc2NzE9MTQ5NTtlLmFmaWk1NzY3Mj0xNDk2O2UuYWZpaTU3NjczPTE0OTc7ZS5hZmlpNTc2NzQ9MTQ5ODtlLmFmaWk1NzY3NT0xNDk5O2UuYWZpaTU3Njc2PTE1MDA7ZS5hZmlpNTc2Nzc9MTUwMTtlLmFmaWk1NzY3OD0xNTAyO2UuYWZpaTU3Njc5PTE1MDM7ZS5hZmlpNTc2ODA9MTUwNDtlLmFmaWk1NzY4MT0xNTA1O2UuYWZpaTU3NjgyPTE1MDY7ZS5hZmlpNTc2ODM9MTUwNztlLmFmaWk1NzY4ND0xNTA4O2UuYWZpaTU3Njg1PTE1MDk7ZS5hZmlpNTc2ODY9MTUxMDtlLmFmaWk1NzY4Nz0xNTExO2UuYWZpaTU3Njg4PTE1MTI7ZS5hZmlpNTc2ODk9MTUxMztlLmFmaWk1NzY5MD0xNTE0O2UuYWZpaTU3Njk0PTY0Mjk4O2UuYWZpaTU3Njk1PTY0Mjk5O2UuYWZpaTU3NzAwPTY0MzMxO2UuYWZpaTU3NzA1PTY0Mjg3O2UuYWZpaTU3NzE2PTE1MjA7ZS5hZmlpNTc3MTc9MTUyMTtlLmFmaWk1NzcxOD0xNTIyO2UuYWZpaTU3NzIzPTY0MzA5O2UuYWZpaTU3NzkzPTE0NjA7ZS5hZmlpNTc3OTQ9MTQ2MTtlLmFmaWk1Nzc5NT0xNDYyO2UuYWZpaTU3Nzk2PTE0Njc7ZS5hZmlpNTc3OTc9MTQ2NDtlLmFmaWk1Nzc5OD0xNDYzO2UuYWZpaTU3Nzk5PTE0NTY7ZS5hZmlpNTc4MDA9MTQ1ODtlLmFmaWk1NzgwMT0xNDU3O2UuYWZpaTU3ODAyPTE0NTk7ZS5hZmlpNTc4MDM9MTQ3NDtlLmFmaWk1NzgwND0xNDczO2UuYWZpaTU3ODA2PTE0NjU7ZS5hZmlpNTc4MDc9MTQ2ODtlLmFmaWk1NzgzOT0xNDY5O2UuYWZpaTU3ODQxPTE0NzE7ZS5hZmlpNTc4NDI9MTQ3MjtlLmFmaWk1NzkyOT03MDA7ZS5hZmlpNjEyNDg9ODQ1MztlLmFmaWk2MTI4OT04NDY3O2UuYWZpaTYxMzUyPTg0NzA7ZS5hZmlpNjE1NzM9ODIzNjtlLmFmaWk2MTU3ND04MjM3O2UuYWZpaTYxNTc1PTgyMzg7ZS5hZmlpNjE2NjQ9ODIwNDtlLmFmaWk2MzE2Nz0xNjQ1O2UuYWZpaTY0OTM3PTcwMTtlLmFncmF2ZT0yMjQ7ZS5hZ3VqYXJhdGk9MjY5MztlLmFndXJtdWtoaT0yNTY1O2UuYWhpcmFnYW5hPTEyMzU0O2UuYWhvb2thYm92ZT03ODQzO2UuYWliZW5nYWxpPTI0NDg7ZS5haWJvcG9tb2ZvPTEyNTc0O2UuYWlkZXZhPTIzMjA7ZS5haWVjeXJpbGxpYz0xMjM3O2UuYWlndWphcmF0aT0yNzA0O2UuYWlndXJtdWtoaT0yNTc2O2UuYWltYXRyYWd1cm11a2hpPTI2MzI7ZS5haW5hcmFiaWM9MTU5MztlLmFpbmZpbmFsYXJhYmljPTY1MjI2O2UuYWluaW5pdGlhbGFyYWJpYz02NTIyNztlLmFpbm1lZGlhbGFyYWJpYz02NTIyODtlLmFpbnZlcnRlZGJyZXZlPTUxNTtlLmFpdm93ZWxzaWduYmVuZ2FsaT0yNTA0O2UuYWl2b3dlbHNpZ25kZXZhPTIzNzY7ZS5haXZvd2Vsc2lnbmd1amFyYXRpPTI3NjA7ZS5ha2F0YWthbmE9MTI0NTA7ZS5ha2F0YWthbmFoYWxmd2lkdGg9NjUzOTM7ZS5ha29yZWFuPTEyNjIzO2UuYWxlZj0xNDg4O2UuYWxlZmFyYWJpYz0xNTc1O2UuYWxlZmRhZ2VzaGhlYnJldz02NDMwNDtlLmFsZWZmaW5hbGFyYWJpYz02NTE2NjtlLmFsZWZoYW16YWFib3ZlYXJhYmljPTE1NzE7ZS5hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTU2O2UuYWxlZmhhbXphYmVsb3dhcmFiaWM9MTU3MztlLmFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWM9NjUxNjA7ZS5hbGVmaGVicmV3PTE0ODg7ZS5hbGVmbGFtZWRoZWJyZXc9NjQzMzU7ZS5hbGVmbWFkZGFhYm92ZWFyYWJpYz0xNTcwO2UuYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYz02NTE1NDtlLmFsZWZtYWtzdXJhYXJhYmljPTE2MDk7ZS5hbGVmbWFrc3VyYWZpbmFsYXJhYmljPTY1MjY0O2UuYWxlZm1ha3N1cmFpbml0aWFsYXJhYmljPTY1MjY3O2UuYWxlZm1ha3N1cmFtZWRpYWxhcmFiaWM9NjUyNjg7ZS5hbGVmcGF0YWhoZWJyZXc9NjQzMDI7ZS5hbGVmcWFtYXRzaGVicmV3PTY0MzAzO2UuYWxlcGg9ODUwMTtlLmFsbGVxdWFsPTg3ODA7ZS5hbHBoYT05NDU7ZS5hbHBoYXRvbm9zPTk0MDtlLmFtYWNyb249MjU3O2UuYW1vbm9zcGFjZT02NTM0NTtlLmFtcGVyc2FuZD0zODtlLmFtcGVyc2FuZG1vbm9zcGFjZT02NTI4NjtlLmFtcGVyc2FuZHNtYWxsPTYzMjcwO2UuYW1zcXVhcmU9MTMyNTA7ZS5hbmJvcG9tb2ZvPTEyNTc4O2UuYW5nYm9wb21vZm89MTI1ODA7ZS5hbmdicmFja2V0bGVmdD0xMjI5NjtlLmFuZ2JyYWNrZXRyaWdodD0xMjI5NztlLmFuZ2toYW5raHV0aGFpPTM2NzQ7ZS5hbmdsZT04NzM2O2UuYW5nbGVicmFja2V0bGVmdD0xMjI5NjtlLmFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NztlLmFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk3O2UuYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4ODtlLmFuZ2xlbGVmdD05MDAxO2UuYW5nbGVyaWdodD05MDAyO2UuYW5nc3Ryb209ODQ5MTtlLmFub3RlbGVpYT05MDM7ZS5hbnVkYXR0YWRldmE9MjM4NjtlLmFudXN2YXJhYmVuZ2FsaT0yNDM0O2UuYW51c3ZhcmFkZXZhPTIzMDY7ZS5hbnVzdmFyYWd1amFyYXRpPTI2OTA7ZS5hb2dvbmVrPTI2MTtlLmFwYWF0b3NxdWFyZT0xMzA1NjtlLmFwYXJlbj05MzcyO2UuYXBvc3Ryb3BoZWFybWVuaWFuPTEzNzA7ZS5hcG9zdHJvcGhlbW9kPTcwMDtlLmFwcGxlPTYzNzQzO2UuYXBwcm9hY2hlcz04Nzg0O2UuYXBwcm94ZXF1YWw9ODc3NjtlLmFwcHJveGVxdWFsb3JpbWFnZT04Nzg2O2UuYXBwcm94aW1hdGVseWVxdWFsPTg3NzM7ZS5hcmFlYWVrb3JlYW49MTI2ODY7ZS5hcmFlYWtvcmVhbj0xMjY4NTtlLmFyYz04OTc4O2UuYXJpZ2h0aGFsZnJpbmc9NzgzNDtlLmFyaW5nPTIyOTtlLmFyaW5nYWN1dGU9NTA3O2UuYXJpbmdiZWxvdz03NjgxO2UuYXJyb3dib3RoPTg1OTY7ZS5hcnJvd2Rhc2hkb3duPTg2NzU7ZS5hcnJvd2Rhc2hsZWZ0PTg2NzI7ZS5hcnJvd2Rhc2hyaWdodD04Njc0O2UuYXJyb3dkYXNodXA9ODY3MztlLmFycm93ZGJsYm90aD04NjYwO2UuYXJyb3dkYmxkb3duPTg2NTk7ZS5hcnJvd2RibGxlZnQ9ODY1NjtlLmFycm93ZGJscmlnaHQ9ODY1ODtlLmFycm93ZGJsdXA9ODY1NztlLmFycm93ZG93bj04NTk1O2UuYXJyb3dkb3dubGVmdD04NjAxO2UuYXJyb3dkb3ducmlnaHQ9ODYwMDtlLmFycm93ZG93bndoaXRlPTg2ODE7ZS5hcnJvd2hlYWRkb3dubW9kPTcwOTtlLmFycm93aGVhZGxlZnRtb2Q9NzA2O2UuYXJyb3doZWFkcmlnaHRtb2Q9NzA3O2UuYXJyb3doZWFkdXBtb2Q9NzA4O2UuYXJyb3dob3JpemV4PTYzNzE5O2UuYXJyb3dsZWZ0PTg1OTI7ZS5hcnJvd2xlZnRkYmw9ODY1NjtlLmFycm93bGVmdGRibHN0cm9rZT04NjUzO2UuYXJyb3dsZWZ0b3ZlcnJpZ2h0PTg2NDY7ZS5hcnJvd2xlZnR3aGl0ZT04Njc4O2UuYXJyb3dyaWdodD04NTk0O2UuYXJyb3dyaWdodGRibHN0cm9rZT04NjU1O2UuYXJyb3dyaWdodGhlYXZ5PTEwMTQyO2UuYXJyb3dyaWdodG92ZXJsZWZ0PTg2NDQ7ZS5hcnJvd3JpZ2h0d2hpdGU9ODY4MDtlLmFycm93dGFibGVmdD04Njc2O2UuYXJyb3d0YWJyaWdodD04Njc3O2UuYXJyb3d1cD04NTkzO2UuYXJyb3d1cGRuPTg1OTc7ZS5hcnJvd3VwZG5ic2U9ODYxNjtlLmFycm93dXBkb3duYmFzZT04NjE2O2UuYXJyb3d1cGxlZnQ9ODU5ODtlLmFycm93dXBsZWZ0b2Zkb3duPTg2NDU7ZS5hcnJvd3VwcmlnaHQ9ODU5OTtlLmFycm93dXB3aGl0ZT04Njc5O2UuYXJyb3d2ZXJ0ZXg9NjM3MTg7ZS5hc2NpaWNpcmN1bT05NDtlLmFzY2lpY2lyY3VtbW9ub3NwYWNlPTY1MzQyO2UuYXNjaWl0aWxkZT0xMjY7ZS5hc2NpaXRpbGRlbW9ub3NwYWNlPTY1Mzc0O2UuYXNjcmlwdD01OTM7ZS5hc2NyaXB0dHVybmVkPTU5NDtlLmFzbWFsbGhpcmFnYW5hPTEyMzUzO2UuYXNtYWxsa2F0YWthbmE9MTI0NDk7ZS5hc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4MztlLmFzdGVyaXNrPTQyO2UuYXN0ZXJpc2thbHRvbmVhcmFiaWM9MTY0NTtlLmFzdGVyaXNrYXJhYmljPTE2NDU7ZS5hc3Rlcmlza21hdGg9ODcyNztlLmFzdGVyaXNrbW9ub3NwYWNlPTY1MjkwO2UuYXN0ZXJpc2tzbWFsbD02NTEyMTtlLmFzdGVyaXNtPTgyNTg7ZS5hc3VwZXJpb3I9NjMyMDk7ZS5hc3ltcHRvdGljYWxseWVxdWFsPTg3NzE7ZS5hdD02NDtlLmF0aWxkZT0yMjc7ZS5hdG1vbm9zcGFjZT02NTMxMjtlLmF0c21hbGw9NjUxMzE7ZS5hdHVybmVkPTU5MjtlLmF1YmVuZ2FsaT0yNDUyO2UuYXVib3BvbW9mbz0xMjU3NjtlLmF1ZGV2YT0yMzI0O2UuYXVndWphcmF0aT0yNzA4O2UuYXVndXJtdWtoaT0yNTgwO2UuYXVsZW5ndGhtYXJrYmVuZ2FsaT0yNTE5O2UuYXVtYXRyYWd1cm11a2hpPTI2MzY7ZS5hdXZvd2Vsc2lnbmJlbmdhbGk9MjUwODtlLmF1dm93ZWxzaWduZGV2YT0yMzgwO2UuYXV2b3dlbHNpZ25ndWphcmF0aT0yNzY0O2UuYXZhZ3JhaGFkZXZhPTIzNjU7ZS5heWJhcm1lbmlhbj0xMzc3O2UuYXlpbj0xNTA2O2UuYXlpbmFsdG9uZWhlYnJldz02NDI4ODtlLmF5aW5oZWJyZXc9MTUwNjtlLmI9OTg7ZS5iYWJlbmdhbGk9MjQ3NjtlLmJhY2tzbGFzaD05MjtlLmJhY2tzbGFzaG1vbm9zcGFjZT02NTM0MDtlLmJhZGV2YT0yMzQ4O2UuYmFndWphcmF0aT0yNzMyO2UuYmFndXJtdWtoaT0yNjA0O2UuYmFoaXJhZ2FuYT0xMjQwMDtlLmJhaHR0aGFpPTM2NDc7ZS5iYWthdGFrYW5hPTEyNDk2O2UuYmFyPTEyNDtlLmJhcm1vbm9zcGFjZT02NTM3MjtlLmJib3BvbW9mbz0xMjU0OTtlLmJjaXJjbGU9OTQyNTtlLmJkb3RhY2NlbnQ9NzY4MztlLmJkb3RiZWxvdz03Njg1O2UuYmVhbWVkc2l4dGVlbnRobm90ZXM9OTgzNjtlLmJlY2F1c2U9ODc1NztlLmJlY3lyaWxsaWM9MTA3MztlLmJlaGFyYWJpYz0xNTc2O2UuYmVoZmluYWxhcmFiaWM9NjUxNjg7ZS5iZWhpbml0aWFsYXJhYmljPTY1MTY5O2UuYmVoaXJhZ2FuYT0xMjQwOTtlLmJlaG1lZGlhbGFyYWJpYz02NTE3MDtlLmJlaG1lZW1pbml0aWFsYXJhYmljPTY0NjcxO2UuYmVobWVlbWlzb2xhdGVkYXJhYmljPTY0NTIwO2UuYmVobm9vbmZpbmFsYXJhYmljPTY0NjIxO2UuYmVrYXRha2FuYT0xMjUwNTtlLmJlbmFybWVuaWFuPTEzNzg7ZS5iZXQ9MTQ4OTtlLmJldGE9OTQ2O2UuYmV0YXN5bWJvbGdyZWVrPTk3NjtlLmJldGRhZ2VzaD02NDMwNTtlLmJldGRhZ2VzaGhlYnJldz02NDMwNTtlLmJldGhlYnJldz0xNDg5O2UuYmV0cmFmZWhlYnJldz02NDMzMjtlLmJoYWJlbmdhbGk9MjQ3NztlLmJoYWRldmE9MjM0OTtlLmJoYWd1amFyYXRpPTI3MzM7ZS5iaGFndXJtdWtoaT0yNjA1O2UuYmhvb2s9NTk1O2UuYmloaXJhZ2FuYT0xMjQwMztlLmJpa2F0YWthbmE9MTI0OTk7ZS5iaWxhYmlhbGNsaWNrPTY2NDtlLmJpbmRpZ3VybXVraGk9MjU2MjtlLmJpcnVzcXVhcmU9MTMxMDU7ZS5ibGFja2NpcmNsZT05Njc5O2UuYmxhY2tkaWFtb25kPTk2NzA7ZS5ibGFja2Rvd25wb2ludGluZ3RyaWFuZ2xlPTk2NjA7ZS5ibGFja2xlZnRwb2ludGluZ3BvaW50ZXI9OTY2ODtlLmJsYWNrbGVmdHBvaW50aW5ndHJpYW5nbGU9OTY2NDtlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRsZWZ0PTEyMzA0O2UuYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4MztlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodD0xMjMwNTtlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDg0O2UuYmxhY2tsb3dlcmxlZnR0cmlhbmdsZT05Njk5O2UuYmxhY2tsb3dlcnJpZ2h0dHJpYW5nbGU9OTY5ODtlLmJsYWNrcmVjdGFuZ2xlPTk2NDQ7ZS5ibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyPTk2NTg7ZS5ibGFja3JpZ2h0cG9pbnRpbmd0cmlhbmdsZT05NjU0O2UuYmxhY2tzbWFsbHNxdWFyZT05NjQyO2UuYmxhY2tzbWlsaW5nZmFjZT05Nzg3O2UuYmxhY2tzcXVhcmU9OTYzMjtlLmJsYWNrc3Rhcj05NzMzO2UuYmxhY2t1cHBlcmxlZnR0cmlhbmdsZT05NzAwO2UuYmxhY2t1cHBlcnJpZ2h0dHJpYW5nbGU9OTcwMTtlLmJsYWNrdXBwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY1MjtlLmJsYWNrdXBwb2ludGluZ3RyaWFuZ2xlPTk2NTA7ZS5ibGFuaz05MjUxO2UuYmxpbmViZWxvdz03Njg3O2UuYmxvY2s9OTYwODtlLmJtb25vc3BhY2U9NjUzNDY7ZS5ib2JhaW1haXRoYWk9MzYxMDtlLmJvaGlyYWdhbmE9MTI0MTI7ZS5ib2thdGFrYW5hPTEyNTA4O2UuYnBhcmVuPTkzNzM7ZS5icXNxdWFyZT0xMzI1MTtlLmJyYWNlZXg9NjM3MzI7ZS5icmFjZWxlZnQ9MTIzO2UuYnJhY2VsZWZ0YnQ9NjM3MzE7ZS5icmFjZWxlZnRtaWQ9NjM3MzA7ZS5icmFjZWxlZnRtb25vc3BhY2U9NjUzNzE7ZS5icmFjZWxlZnRzbWFsbD02NTExNTtlLmJyYWNlbGVmdHRwPTYzNzI5O2UuYnJhY2VsZWZ0dmVydGljYWw9NjUwNzk7ZS5icmFjZXJpZ2h0PTEyNTtlLmJyYWNlcmlnaHRidD02Mzc0MjtlLmJyYWNlcmlnaHRtaWQ9NjM3NDE7ZS5icmFjZXJpZ2h0bW9ub3NwYWNlPTY1MzczO2UuYnJhY2VyaWdodHNtYWxsPTY1MTE2O2UuYnJhY2VyaWdodHRwPTYzNzQwO2UuYnJhY2VyaWdodHZlcnRpY2FsPTY1MDgwO2UuYnJhY2tldGxlZnQ9OTE7ZS5icmFja2V0bGVmdGJ0PTYzNzI4O2UuYnJhY2tldGxlZnRleD02MzcyNztlLmJyYWNrZXRsZWZ0bW9ub3NwYWNlPTY1MzM5O2UuYnJhY2tldGxlZnR0cD02MzcyNjtlLmJyYWNrZXRyaWdodD05MztlLmJyYWNrZXRyaWdodGJ0PTYzNzM5O2UuYnJhY2tldHJpZ2h0ZXg9NjM3Mzg7ZS5icmFja2V0cmlnaHRtb25vc3BhY2U9NjUzNDE7ZS5icmFja2V0cmlnaHR0cD02MzczNztlLmJyZXZlPTcyODtlLmJyZXZlYmVsb3djbWI9ODE0O2UuYnJldmVjbWI9Nzc0O2UuYnJldmVpbnZlcnRlZGJlbG93Y21iPTgxNTtlLmJyZXZlaW52ZXJ0ZWRjbWI9Nzg1O2UuYnJldmVpbnZlcnRlZGRvdWJsZWNtYj04NjU7ZS5icmlkZ2ViZWxvd2NtYj04MTA7ZS5icmlkZ2VpbnZlcnRlZGJlbG93Y21iPTgyNjtlLmJyb2tlbmJhcj0xNjY7ZS5ic3Ryb2tlPTM4NDtlLmJzdXBlcmlvcj02MzIxMDtlLmJ0b3BiYXI9Mzg3O2UuYnVoaXJhZ2FuYT0xMjQwNjtlLmJ1a2F0YWthbmE9MTI1MDI7ZS5idWxsZXQ9ODIyNjtlLmJ1bGxldGludmVyc2U9OTY4ODtlLmJ1bGxldG9wZXJhdG9yPTg3Mjk7ZS5idWxsc2V5ZT05Njc4O2UuYz05OTtlLmNhYXJtZW5pYW49MTM5MDtlLmNhYmVuZ2FsaT0yNDU4O2UuY2FjdXRlPTI2MztlLmNhZGV2YT0yMzMwO2UuY2FndWphcmF0aT0yNzE0O2UuY2FndXJtdWtoaT0yNTg2O2UuY2Fsc3F1YXJlPTEzMTkyO2UuY2FuZHJhYmluZHViZW5nYWxpPTI0MzM7ZS5jYW5kcmFiaW5kdWNtYj03ODQ7ZS5jYW5kcmFiaW5kdWRldmE9MjMwNTtlLmNhbmRyYWJpbmR1Z3VqYXJhdGk9MjY4OTtlLmNhcHNsb2NrPTg2ODI7ZS5jYXJlb2Y9ODQ1MztlLmNhcm9uPTcxMTtlLmNhcm9uYmVsb3djbWI9ODEyO2UuY2Fyb25jbWI9NzgwO2UuY2FycmlhZ2VyZXR1cm49ODYyOTtlLmNib3BvbW9mbz0xMjU2ODtlLmNjYXJvbj0yNjk7ZS5jY2VkaWxsYT0yMzE7ZS5jY2VkaWxsYWFjdXRlPTc2ODk7ZS5jY2lyY2xlPTk0MjY7ZS5jY2lyY3VtZmxleD0yNjU7ZS5jY3VybD01OTc7ZS5jZG90PTI2NztlLmNkb3RhY2NlbnQ9MjY3O2UuY2RzcXVhcmU9MTMyNTM7ZS5jZWRpbGxhPTE4NDtlLmNlZGlsbGFjbWI9ODA3O2UuY2VudD0xNjI7ZS5jZW50aWdyYWRlPTg0NTE7ZS5jZW50aW5mZXJpb3I9NjMxOTk7ZS5jZW50bW9ub3NwYWNlPTY1NTA0O2UuY2VudG9sZHN0eWxlPTYzMzk0O2UuY2VudHN1cGVyaW9yPTYzMjAwO2UuY2hhYXJtZW5pYW49MTQwMTtlLmNoYWJlbmdhbGk9MjQ1OTtlLmNoYWRldmE9MjMzMTtlLmNoYWd1amFyYXRpPTI3MTU7ZS5jaGFndXJtdWtoaT0yNTg3O2UuY2hib3BvbW9mbz0xMjU2NDtlLmNoZWFia2hhc2lhbmN5cmlsbGljPTEyMTM7ZS5jaGVja21hcms9MTAwMDM7ZS5jaGVjeXJpbGxpYz0xMDk1O2UuY2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWM9MTIxNTtlLmNoZWRlc2NlbmRlcmN5cmlsbGljPTEyMDc7ZS5jaGVkaWVyZXNpc2N5cmlsbGljPTEyNjk7ZS5jaGVoYXJtZW5pYW49MTM5NTtlLmNoZWtoYWthc3NpYW5jeXJpbGxpYz0xMjI4O2UuY2hldmVydGljYWxzdHJva2VjeXJpbGxpYz0xMjA5O2UuY2hpPTk2NztlLmNoaWV1Y2hhY2lyY2xla29yZWFuPTEyOTE5O2UuY2hpZXVjaGFwYXJlbmtvcmVhbj0xMjgyMztlLmNoaWV1Y2hjaXJjbGVrb3JlYW49MTI5MDU7ZS5jaGlldWNoa29yZWFuPTEyNjE4O2UuY2hpZXVjaHBhcmVua29yZWFuPTEyODA5O2UuY2hvY2hhbmd0aGFpPTM1OTQ7ZS5jaG9jaGFudGhhaT0zNTkyO2UuY2hvY2hpbmd0aGFpPTM1OTM7ZS5jaG9jaG9ldGhhaT0zNTk2O2UuY2hvb2s9MzkyO2UuY2lldWNhY2lyY2xla29yZWFuPTEyOTE4O2UuY2lldWNhcGFyZW5rb3JlYW49MTI4MjI7ZS5jaWV1Y2NpcmNsZWtvcmVhbj0xMjkwNDtlLmNpZXVja29yZWFuPTEyNjE2O2UuY2lldWNwYXJlbmtvcmVhbj0xMjgwODtlLmNpZXVjdXBhcmVua29yZWFuPTEyODI4O2UuY2lyY2xlPTk2NzU7ZS5jaXJjbGVjb3B5cnQ9MTY5O2UuY2lyY2xlbXVsdGlwbHk9ODg1NTtlLmNpcmNsZW90PTg4NTc7ZS5jaXJjbGVwbHVzPTg4NTM7ZS5jaXJjbGVwb3N0YWxtYXJrPTEyMzQyO2UuY2lyY2xld2l0aGxlZnRoYWxmYmxhY2s9OTY4MDtlLmNpcmNsZXdpdGhyaWdodGhhbGZibGFjaz05NjgxO2UuY2lyY3VtZmxleD03MTA7ZS5jaXJjdW1mbGV4YmVsb3djbWI9ODEzO2UuY2lyY3VtZmxleGNtYj03NzA7ZS5jbGVhcj04OTk5O2UuY2xpY2thbHZlb2xhcj00NTA7ZS5jbGlja2RlbnRhbD00NDg7ZS5jbGlja2xhdGVyYWw9NDQ5O2UuY2xpY2tyZXRyb2ZsZXg9NDUxO2UuY2x1Yj05ODI3O2UuY2x1YnN1aXRibGFjaz05ODI3O2UuY2x1YnN1aXR3aGl0ZT05ODMxO2UuY21jdWJlZHNxdWFyZT0xMzIyMDtlLmNtb25vc3BhY2U9NjUzNDc7ZS5jbXNxdWFyZWRzcXVhcmU9MTMyMTY7ZS5jb2FybWVuaWFuPTE0MDk7ZS5jb2xvbj01ODtlLmNvbG9ubW9uZXRhcnk9ODM1MztlLmNvbG9ubW9ub3NwYWNlPTY1MzA2O2UuY29sb25zaWduPTgzNTM7ZS5jb2xvbnNtYWxsPTY1MTA5O2UuY29sb250cmlhbmd1bGFyaGFsZm1vZD03MjE7ZS5jb2xvbnRyaWFuZ3VsYXJtb2Q9NzIwO2UuY29tbWE9NDQ7ZS5jb21tYWFib3ZlY21iPTc4NztlLmNvbW1hYWJvdmVyaWdodGNtYj03ODk7ZS5jb21tYWFjY2VudD02MzE3MTtlLmNvbW1hYXJhYmljPTE1NDg7ZS5jb21tYWFybWVuaWFuPTEzNzM7ZS5jb21tYWluZmVyaW9yPTYzMjAxO2UuY29tbWFtb25vc3BhY2U9NjUyOTI7ZS5jb21tYXJldmVyc2VkYWJvdmVjbWI9Nzg4O2UuY29tbWFyZXZlcnNlZG1vZD03MDE7ZS5jb21tYXNtYWxsPTY1MTA0O2UuY29tbWFzdXBlcmlvcj02MzIwMjtlLmNvbW1hdHVybmVkYWJvdmVjbWI9Nzg2O2UuY29tbWF0dXJuZWRtb2Q9Njk5O2UuY29tcGFzcz05Nzg4O2UuY29uZ3J1ZW50PTg3NzM7ZS5jb250b3VyaW50ZWdyYWw9ODc1MDtlLmNvbnRyb2w9ODk2MztlLmNvbnRyb2xBQ0s9NjtlLmNvbnRyb2xCRUw9NztlLmNvbnRyb2xCUz04O2UuY29udHJvbENBTj0yNDtlLmNvbnRyb2xDUj0xMztlLmNvbnRyb2xEQzE9MTc7ZS5jb250cm9sREMyPTE4O2UuY29udHJvbERDMz0xOTtlLmNvbnRyb2xEQzQ9MjA7ZS5jb250cm9sREVMPTEyNztlLmNvbnRyb2xETEU9MTY7ZS5jb250cm9sRU09MjU7ZS5jb250cm9sRU5RPTU7ZS5jb250cm9sRU9UPTQ7ZS5jb250cm9sRVNDPTI3O2UuY29udHJvbEVUQj0yMztlLmNvbnRyb2xFVFg9MztlLmNvbnRyb2xGRj0xMjtlLmNvbnRyb2xGUz0yODtlLmNvbnRyb2xHUz0yOTtlLmNvbnRyb2xIVD05O2UuY29udHJvbExGPTEwO2UuY29udHJvbE5BSz0yMTtlLmNvbnRyb2xOVUxMPTA7ZS5jb250cm9sUlM9MzA7ZS5jb250cm9sU0k9MTU7ZS5jb250cm9sU089MTQ7ZS5jb250cm9sU09UPTI7ZS5jb250cm9sU1RYPTE7ZS5jb250cm9sU1VCPTI2O2UuY29udHJvbFNZTj0yMjtlLmNvbnRyb2xVUz0zMTtlLmNvbnRyb2xWVD0xMTtlLmNvcHlyaWdodD0xNjk7ZS5jb3B5cmlnaHRzYW5zPTYzNzIxO2UuY29weXJpZ2h0c2VyaWY9NjMxOTM7ZS5jb3JuZXJicmFja2V0bGVmdD0xMjMwMDtlLmNvcm5lcmJyYWNrZXRsZWZ0aGFsZndpZHRoPTY1Mzc4O2UuY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4OTtlLmNvcm5lcmJyYWNrZXRyaWdodD0xMjMwMTtlLmNvcm5lcmJyYWNrZXRyaWdodGhhbGZ3aWR0aD02NTM3OTtlLmNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDkwO2UuY29ycG9yYXRpb25zcXVhcmU9MTMxODM7ZS5jb3NxdWFyZT0xMzI1NTtlLmNvdmVya2dzcXVhcmU9MTMyNTQ7ZS5jcGFyZW49OTM3NDtlLmNydXplaXJvPTgzNTQ7ZS5jc3RyZXRjaGVkPTY2MztlLmN1cmx5YW5kPTg5MTE7ZS5jdXJseW9yPTg5MTA7ZS5jdXJyZW5jeT0xNjQ7ZS5jeXJCcmV2ZT02MzE4NTtlLmN5ckZsZXg9NjMxODY7ZS5jeXJicmV2ZT02MzE4ODtlLmN5cmZsZXg9NjMxODk7ZS5kPTEwMDtlLmRhYXJtZW5pYW49MTM4MDtlLmRhYmVuZ2FsaT0yNDcwO2UuZGFkYXJhYmljPTE1OTA7ZS5kYWRldmE9MjM0MjtlLmRhZGZpbmFsYXJhYmljPTY1MjE0O2UuZGFkaW5pdGlhbGFyYWJpYz02NTIxNTtlLmRhZG1lZGlhbGFyYWJpYz02NTIxNjtlLmRhZ2VzaD0xNDY4O2UuZGFnZXNoaGVicmV3PTE0Njg7ZS5kYWdnZXI9ODIyNDtlLmRhZ2dlcmRibD04MjI1O2UuZGFndWphcmF0aT0yNzI2O2UuZGFndXJtdWtoaT0yNTk4O2UuZGFoaXJhZ2FuYT0xMjM4NDtlLmRha2F0YWthbmE9MTI0ODA7ZS5kYWxhcmFiaWM9MTU4MztlLmRhbGV0PTE0OTE7ZS5kYWxldGRhZ2VzaD02NDMwNztlLmRhbGV0ZGFnZXNoaGVicmV3PTY0MzA3O2UuZGFsZXRoZWJyZXc9MTQ5MTtlLmRhbGZpbmFsYXJhYmljPTY1MTk0O2UuZGFtbWFhcmFiaWM9MTYxNTtlLmRhbW1hbG93YXJhYmljPTE2MTU7ZS5kYW1tYXRhbmFsdG9uZWFyYWJpYz0xNjEyO2UuZGFtbWF0YW5hcmFiaWM9MTYxMjtlLmRhbmRhPTI0MDQ7ZS5kYXJnYWhlYnJldz0xNDQ3O2UuZGFyZ2FsZWZ0aGVicmV3PTE0NDc7ZS5kYXNpYXBuZXVtYXRhY3lyaWxsaWNjbWI9MTE1NztlLmRibEdyYXZlPTYzMTg3O2UuZGJsYW5nbGVicmFja2V0bGVmdD0xMjI5ODtlLmRibGFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NTtlLmRibGFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk5O2UuZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4NjtlLmRibGFyY2hpbnZlcnRlZGJlbG93Y21iPTgxMTtlLmRibGFycm93bGVmdD04NjYwO2UuZGJsYXJyb3dyaWdodD04NjU4O2UuZGJsZGFuZGE9MjQwNTtlLmRibGdyYXZlPTYzMTkwO2UuZGJsZ3JhdmVjbWI9NzgzO2UuZGJsaW50ZWdyYWw9ODc0ODtlLmRibGxvd2xpbmU9ODIxNTtlLmRibGxvd2xpbmVjbWI9ODE5O2UuZGJsb3ZlcmxpbmVjbWI9ODMxO2UuZGJscHJpbWVtb2Q9Njk4O2UuZGJsdmVydGljYWxiYXI9ODIxNDtlLmRibHZlcnRpY2FsbGluZWFib3ZlY21iPTc4MjtlLmRib3BvbW9mbz0xMjU1MztlLmRic3F1YXJlPTEzMjU2O2UuZGNhcm9uPTI3MTtlLmRjZWRpbGxhPTc2OTc7ZS5kY2lyY2xlPTk0Mjc7ZS5kY2lyY3VtZmxleGJlbG93PTc2OTk7ZS5kY3JvYXQ9MjczO2UuZGRhYmVuZ2FsaT0yNDY1O2UuZGRhZGV2YT0yMzM3O2UuZGRhZ3VqYXJhdGk9MjcyMTtlLmRkYWd1cm11a2hpPTI1OTM7ZS5kZGFsYXJhYmljPTE2NzI7ZS5kZGFsZmluYWxhcmFiaWM9NjQzOTM7ZS5kZGRoYWRldmE9MjM5NjtlLmRkaGFiZW5nYWxpPTI0NjY7ZS5kZGhhZGV2YT0yMzM4O2UuZGRoYWd1amFyYXRpPTI3MjI7ZS5kZGhhZ3VybXVraGk9MjU5NDtlLmRkb3RhY2NlbnQ9NzY5MTtlLmRkb3RiZWxvdz03NjkzO2UuZGVjaW1hbHNlcGFyYXRvcmFyYWJpYz0xNjQzO2UuZGVjaW1hbHNlcGFyYXRvcnBlcnNpYW49MTY0MztlLmRlY3lyaWxsaWM9MTA3NjtlLmRlZ3JlZT0xNzY7ZS5kZWhpaGVicmV3PTE0NTM7ZS5kZWhpcmFnYW5hPTEyMzkxO2UuZGVpY29wdGljPTEwMDc7ZS5kZWthdGFrYW5hPTEyNDg3O2UuZGVsZXRlbGVmdD05MDAzO2UuZGVsZXRlcmlnaHQ9ODk5ODtlLmRlbHRhPTk0ODtlLmRlbHRhdHVybmVkPTM5NztlLmRlbm9taW5hdG9ybWludXNvbmVudW1lcmF0b3JiZW5nYWxpPTI1NTI7ZS5kZXpoPTY3NjtlLmRoYWJlbmdhbGk9MjQ3MTtlLmRoYWRldmE9MjM0MztlLmRoYWd1amFyYXRpPTI3Mjc7ZS5kaGFndXJtdWtoaT0yNTk5O2UuZGhvb2s9NTk5O2UuZGlhbHl0aWthdG9ub3M9OTAxO2UuZGlhbHl0aWthdG9ub3NjbWI9ODM2O2UuZGlhbW9uZD05ODMwO2UuZGlhbW9uZHN1aXR3aGl0ZT05ODI2O2UuZGllcmVzaXM9MTY4O2UuZGllcmVzaXNhY3V0ZT02MzE5MTtlLmRpZXJlc2lzYmVsb3djbWI9ODA0O2UuZGllcmVzaXNjbWI9Nzc2O2UuZGllcmVzaXNncmF2ZT02MzE5MjtlLmRpZXJlc2lzdG9ub3M9OTAxO2UuZGloaXJhZ2FuYT0xMjM4NjtlLmRpa2F0YWthbmE9MTI0ODI7ZS5kaXR0b21hcms9MTIyOTE7ZS5kaXZpZGU9MjQ3O2UuZGl2aWRlcz04NzM5O2UuZGl2aXNpb25zbGFzaD04NzI1O2UuZGplY3lyaWxsaWM9MTEwNjtlLmRrc2hhZGU9OTYxOTtlLmRsaW5lYmVsb3c9NzY5NTtlLmRsc3F1YXJlPTEzMjA3O2UuZG1hY3Jvbj0yNzM7ZS5kbW9ub3NwYWNlPTY1MzQ4O2UuZG5ibG9jaz05NjA0O2UuZG9jaGFkYXRoYWk9MzU5ODtlLmRvZGVrdGhhaT0zNjA0O2UuZG9oaXJhZ2FuYT0xMjM5MztlLmRva2F0YWthbmE9MTI0ODk7ZS5kb2xsYXI9MzY7ZS5kb2xsYXJpbmZlcmlvcj02MzIwMztlLmRvbGxhcm1vbm9zcGFjZT02NTI4NDtlLmRvbGxhcm9sZHN0eWxlPTYzMjY4O2UuZG9sbGFyc21hbGw9NjUxMjk7ZS5kb2xsYXJzdXBlcmlvcj02MzIwNDtlLmRvbmc9ODM2MztlLmRvcnVzcXVhcmU9MTMwOTQ7ZS5kb3RhY2NlbnQ9NzI5O2UuZG90YWNjZW50Y21iPTc3NTtlLmRvdGJlbG93Y21iPTgwMztlLmRvdGJlbG93Y29tYj04MDM7ZS5kb3RrYXRha2FuYT0xMjUzOTtlLmRvdGxlc3NpPTMwNTtlLmRvdGxlc3NqPTYzMTY2O2UuZG90bGVzc2pzdHJva2Vob29rPTY0NDtlLmRvdG1hdGg9ODkwMTtlLmRvdHRlZGNpcmNsZT05Njc2O2UuZG91YmxleW9kcGF0YWg9NjQyODc7ZS5kb3VibGV5b2RwYXRhaGhlYnJldz02NDI4NztlLmRvd250YWNrYmVsb3djbWI9Nzk4O2UuZG93bnRhY2ttb2Q9NzI1O2UuZHBhcmVuPTkzNzU7ZS5kc3VwZXJpb3I9NjMyMTE7ZS5kdGFpbD01OTg7ZS5kdG9wYmFyPTM5NjtlLmR1aGlyYWdhbmE9MTIzODk7ZS5kdWthdGFrYW5hPTEyNDg1O2UuZHo9NDk5O2UuZHphbHRvbmU9Njc1O2UuZHpjYXJvbj00NTQ7ZS5kemN1cmw9Njc3O2UuZHplYWJraGFzaWFuY3lyaWxsaWM9MTI0OTtlLmR6ZWN5cmlsbGljPTExMDk7ZS5kemhlY3lyaWxsaWM9MTExOTtlLmU9MTAxO2UuZWFjdXRlPTIzMztlLmVhcnRoPTk3OTM7ZS5lYmVuZ2FsaT0yNDQ3O2UuZWJvcG9tb2ZvPTEyNTcyO2UuZWJyZXZlPTI3NztlLmVjYW5kcmFkZXZhPTIzMTc7ZS5lY2FuZHJhZ3VqYXJhdGk9MjcwMTtlLmVjYW5kcmF2b3dlbHNpZ25kZXZhPTIzNzM7ZS5lY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGk9Mjc1NztlLmVjYXJvbj0yODM7ZS5lY2VkaWxsYWJyZXZlPTc3MDk7ZS5lY2hhcm1lbmlhbj0xMzgxO2UuZWNoeWl3bmFybWVuaWFuPTE0MTU7ZS5lY2lyY2xlPTk0Mjg7ZS5lY2lyY3VtZmxleD0yMzQ7ZS5lY2lyY3VtZmxleGFjdXRlPTc4NzE7ZS5lY2lyY3VtZmxleGJlbG93PTc3MDU7ZS5lY2lyY3VtZmxleGRvdGJlbG93PTc4Nzk7ZS5lY2lyY3VtZmxleGdyYXZlPTc4NzM7ZS5lY2lyY3VtZmxleGhvb2thYm92ZT03ODc1O2UuZWNpcmN1bWZsZXh0aWxkZT03ODc3O2UuZWN5cmlsbGljPTExMDg7ZS5lZGJsZ3JhdmU9NTE3O2UuZWRldmE9MjMxOTtlLmVkaWVyZXNpcz0yMzU7ZS5lZG90PTI3OTtlLmVkb3RhY2NlbnQ9Mjc5O2UuZWRvdGJlbG93PTc4NjU7ZS5lZWd1cm11a2hpPTI1NzU7ZS5lZW1hdHJhZ3VybXVraGk9MjYzMTtlLmVmY3lyaWxsaWM9MTA5MjtlLmVncmF2ZT0yMzI7ZS5lZ3VqYXJhdGk9MjcwMztlLmVoYXJtZW5pYW49MTM4MztlLmVoYm9wb21vZm89MTI1NzM7ZS5laGlyYWdhbmE9MTIzNjA7ZS5laG9va2Fib3ZlPTc4Njc7ZS5laWJvcG9tb2ZvPTEyNTc1O2UuZWlnaHQ9NTY7ZS5laWdodGFyYWJpYz0xNjQwO2UuZWlnaHRiZW5nYWxpPTI1NDI7ZS5laWdodGNpcmNsZT05MzE5O2UuZWlnaHRjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI5O2UuZWlnaHRkZXZhPTI0MTQ7ZS5laWdodGVlbmNpcmNsZT05MzI5O2UuZWlnaHRlZW5wYXJlbj05MzQ5O2UuZWlnaHRlZW5wZXJpb2Q9OTM2OTtlLmVpZ2h0Z3VqYXJhdGk9Mjc5ODtlLmVpZ2h0Z3VybXVraGk9MjY3MDtlLmVpZ2h0aGFja2FyYWJpYz0xNjQwO2UuZWlnaHRoYW5nemhvdT0xMjMyODtlLmVpZ2h0aG5vdGViZWFtZWQ9OTgzNTtlLmVpZ2h0aWRlb2dyYXBoaWNwYXJlbj0xMjgzOTtlLmVpZ2h0aW5mZXJpb3I9ODMyODtlLmVpZ2h0bW9ub3NwYWNlPTY1MzA0O2UuZWlnaHRvbGRzdHlsZT02MzI4ODtlLmVpZ2h0cGFyZW49OTMzOTtlLmVpZ2h0cGVyaW9kPTkzNTk7ZS5laWdodHBlcnNpYW49MTc4NDtlLmVpZ2h0cm9tYW49ODU2NztlLmVpZ2h0c3VwZXJpb3I9ODMxMjtlLmVpZ2h0dGhhaT0zNjcyO2UuZWludmVydGVkYnJldmU9NTE5O2UuZWlvdGlmaWVkY3lyaWxsaWM9MTEyNTtlLmVrYXRha2FuYT0xMjQ1NjtlLmVrYXRha2FuYWhhbGZ3aWR0aD02NTM5NjtlLmVrb25rYXJndXJtdWtoaT0yNjc2O2UuZWtvcmVhbj0xMjYyODtlLmVsY3lyaWxsaWM9MTA4MztlLmVsZW1lbnQ9ODcxMjtlLmVsZXZlbmNpcmNsZT05MzIyO2UuZWxldmVucGFyZW49OTM0MjtlLmVsZXZlbnBlcmlvZD05MzYyO2UuZWxldmVucm9tYW49ODU3MDtlLmVsbGlwc2lzPTgyMzA7ZS5lbGxpcHNpc3ZlcnRpY2FsPTg5NDI7ZS5lbWFjcm9uPTI3NTtlLmVtYWNyb25hY3V0ZT03NzAzO2UuZW1hY3JvbmdyYXZlPTc3MDE7ZS5lbWN5cmlsbGljPTEwODQ7ZS5lbWRhc2g9ODIxMjtlLmVtZGFzaHZlcnRpY2FsPTY1MDczO2UuZW1vbm9zcGFjZT02NTM0OTtlLmVtcGhhc2lzbWFya2FybWVuaWFuPTEzNzE7ZS5lbXB0eXNldD04NzA5O2UuZW5ib3BvbW9mbz0xMjU3OTtlLmVuY3lyaWxsaWM9MTA4NTtlLmVuZGFzaD04MjExO2UuZW5kYXNodmVydGljYWw9NjUwNzQ7ZS5lbmRlc2NlbmRlcmN5cmlsbGljPTExODc7ZS5lbmc9MzMxO2UuZW5nYm9wb21vZm89MTI1ODE7ZS5lbmdoZWN5cmlsbGljPTExODk7ZS5lbmhvb2tjeXJpbGxpYz0xMjI0O2UuZW5zcGFjZT04MTk0O2UuZW9nb25laz0yODE7ZS5lb2tvcmVhbj0xMjYyNztlLmVvcGVuPTYwMztlLmVvcGVuY2xvc2VkPTY2NjtlLmVvcGVucmV2ZXJzZWQ9NjA0O2UuZW9wZW5yZXZlcnNlZGNsb3NlZD02MDY7ZS5lb3BlbnJldmVyc2VkaG9vaz02MDU7ZS5lcGFyZW49OTM3NjtlLmVwc2lsb249OTQ5O2UuZXBzaWxvbnRvbm9zPTk0MTtlLmVxdWFsPTYxO2UuZXF1YWxtb25vc3BhY2U9NjUzMDk7ZS5lcXVhbHNtYWxsPTY1MTI2O2UuZXF1YWxzdXBlcmlvcj04MzE2O2UuZXF1aXZhbGVuY2U9ODgwMTtlLmVyYm9wb21vZm89MTI1ODI7ZS5lcmN5cmlsbGljPTEwODg7ZS5lcmV2ZXJzZWQ9NjAwO2UuZXJldmVyc2VkY3lyaWxsaWM9MTEwMTtlLmVzY3lyaWxsaWM9MTA4OTtlLmVzZGVzY2VuZGVyY3lyaWxsaWM9MTE5NTtlLmVzaD02NDM7ZS5lc2hjdXJsPTY0NjtlLmVzaG9ydGRldmE9MjMxODtlLmVzaG9ydHZvd2Vsc2lnbmRldmE9MjM3NDtlLmVzaHJldmVyc2VkbG9vcD00MjY7ZS5lc2hzcXVhdHJldmVyc2VkPTY0NTtlLmVzbWFsbGhpcmFnYW5hPTEyMzU5O2UuZXNtYWxsa2F0YWthbmE9MTI0NTU7ZS5lc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NjtlLmVzdGltYXRlZD04NDk0O2UuZXN1cGVyaW9yPTYzMjEyO2UuZXRhPTk1MTtlLmV0YXJtZW5pYW49MTM4NDtlLmV0YXRvbm9zPTk0MjtlLmV0aD0yNDA7ZS5ldGlsZGU9Nzg2OTtlLmV0aWxkZWJlbG93PTc3MDc7ZS5ldG5haHRhZm91a2hoZWJyZXc9MTQyNTtlLmV0bmFodGFmb3VraGxlZnRoZWJyZXc9MTQyNTtlLmV0bmFodGFoZWJyZXc9MTQyNTtlLmV0bmFodGFsZWZ0aGVicmV3PTE0MjU7ZS5ldHVybmVkPTQ3NztlLmV1a29yZWFuPTEyNjQxO2UuZXVybz04MzY0O2UuZXZvd2Vsc2lnbmJlbmdhbGk9MjUwMztlLmV2b3dlbHNpZ25kZXZhPTIzNzU7ZS5ldm93ZWxzaWduZ3VqYXJhdGk9Mjc1OTtlLmV4Y2xhbT0zMztlLmV4Y2xhbWFybWVuaWFuPTEzNzI7ZS5leGNsYW1kYmw9ODI1MjtlLmV4Y2xhbWRvd249MTYxO2UuZXhjbGFtZG93bnNtYWxsPTYzMzkzO2UuZXhjbGFtbW9ub3NwYWNlPTY1MjgxO2UuZXhjbGFtc21hbGw9NjMyNjU7ZS5leGlzdGVudGlhbD04NzA3O2UuZXpoPTY1ODtlLmV6aGNhcm9uPTQ5NTtlLmV6aGN1cmw9NjU5O2UuZXpocmV2ZXJzZWQ9NDQxO2UuZXpodGFpbD00NDI7ZS5mPTEwMjtlLmZhZGV2YT0yMzk4O2UuZmFndXJtdWtoaT0yNjU0O2UuZmFocmVuaGVpdD04NDU3O2UuZmF0aGFhcmFiaWM9MTYxNDtlLmZhdGhhbG93YXJhYmljPTE2MTQ7ZS5mYXRoYXRhbmFyYWJpYz0xNjExO2UuZmJvcG9tb2ZvPTEyNTUyO2UuZmNpcmNsZT05NDI5O2UuZmRvdGFjY2VudD03NzExO2UuZmVoYXJhYmljPTE2MDE7ZS5mZWhhcm1lbmlhbj0xNDE0O2UuZmVoZmluYWxhcmFiaWM9NjUyMzQ7ZS5mZWhpbml0aWFsYXJhYmljPTY1MjM1O2UuZmVobWVkaWFsYXJhYmljPTY1MjM2O2UuZmVpY29wdGljPTk5NztlLmZlbWFsZT05NzkyO2UuZmY9NjQyNTY7ZS5mX2Y9NjQyNTY7ZS5mZmk9NjQyNTk7ZS5mX2ZfaT02NDI1OTtlLmZmbD02NDI2MDtlLmZfZl9sPTY0MjYwO2UuZmk9NjQyNTc7ZS5mX2k9NjQyNTc7ZS5maWZ0ZWVuY2lyY2xlPTkzMjY7ZS5maWZ0ZWVucGFyZW49OTM0NjtlLmZpZnRlZW5wZXJpb2Q9OTM2NjtlLmZpZ3VyZWRhc2g9ODIxMDtlLmZpbGxlZGJveD05NjMyO2UuZmlsbGVkcmVjdD05NjQ0O2UuZmluYWxrYWY9MTQ5ODtlLmZpbmFsa2FmZGFnZXNoPTY0MzE0O2UuZmluYWxrYWZkYWdlc2hoZWJyZXc9NjQzMTQ7ZS5maW5hbGthZmhlYnJldz0xNDk4O2UuZmluYWxtZW09MTUwMTtlLmZpbmFsbWVtaGVicmV3PTE1MDE7ZS5maW5hbG51bj0xNTAzO2UuZmluYWxudW5oZWJyZXc9MTUwMztlLmZpbmFscGU9MTUwNztlLmZpbmFscGVoZWJyZXc9MTUwNztlLmZpbmFsdHNhZGk9MTUwOTtlLmZpbmFsdHNhZGloZWJyZXc9MTUwOTtlLmZpcnN0dG9uZWNoaW5lc2U9NzEzO2UuZmlzaGV5ZT05NjczO2UuZml0YWN5cmlsbGljPTExMzk7ZS5maXZlPTUzO2UuZml2ZWFyYWJpYz0xNjM3O2UuZml2ZWJlbmdhbGk9MjUzOTtlLmZpdmVjaXJjbGU9OTMxNjtlLmZpdmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI2O2UuZml2ZWRldmE9MjQxMTtlLmZpdmVlaWdodGhzPTg1NDE7ZS5maXZlZ3VqYXJhdGk9Mjc5NTtlLmZpdmVndXJtdWtoaT0yNjY3O2UuZml2ZWhhY2thcmFiaWM9MTYzNztlLmZpdmVoYW5nemhvdT0xMjMyNTtlLmZpdmVpZGVvZ3JhcGhpY3BhcmVuPTEyODM2O2UuZml2ZWluZmVyaW9yPTgzMjU7ZS5maXZlbW9ub3NwYWNlPTY1MzAxO2UuZml2ZW9sZHN0eWxlPTYzMjg1O2UuZml2ZXBhcmVuPTkzMzY7ZS5maXZlcGVyaW9kPTkzNTY7ZS5maXZlcGVyc2lhbj0xNzgxO2UuZml2ZXJvbWFuPTg1NjQ7ZS5maXZlc3VwZXJpb3I9ODMwOTtlLmZpdmV0aGFpPTM2Njk7ZS5mbD02NDI1ODtlLmZfbD02NDI1ODtlLmZsb3Jpbj00MDI7ZS5mbW9ub3NwYWNlPTY1MzUwO2UuZm1zcXVhcmU9MTMyMDk7ZS5mb2ZhbnRoYWk9MzYxNTtlLmZvZmF0aGFpPTM2MTM7ZS5mb25nbWFudGhhaT0zNjYzO2UuZm9yYWxsPTg3MDQ7ZS5mb3VyPTUyO2UuZm91cmFyYWJpYz0xNjM2O2UuZm91cmJlbmdhbGk9MjUzODtlLmZvdXJjaXJjbGU9OTMxNTtlLmZvdXJjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI1O2UuZm91cmRldmE9MjQxMDtlLmZvdXJndWphcmF0aT0yNzk0O2UuZm91cmd1cm11a2hpPTI2NjY7ZS5mb3VyaGFja2FyYWJpYz0xNjM2O2UuZm91cmhhbmd6aG91PTEyMzI0O2UuZm91cmlkZW9ncmFwaGljcGFyZW49MTI4MzU7ZS5mb3VyaW5mZXJpb3I9ODMyNDtlLmZvdXJtb25vc3BhY2U9NjUzMDA7ZS5mb3VybnVtZXJhdG9yYmVuZ2FsaT0yNTUxO2UuZm91cm9sZHN0eWxlPTYzMjg0O2UuZm91cnBhcmVuPTkzMzU7ZS5mb3VycGVyaW9kPTkzNTU7ZS5mb3VycGVyc2lhbj0xNzgwO2UuZm91cnJvbWFuPTg1NjM7ZS5mb3Vyc3VwZXJpb3I9ODMwODtlLmZvdXJ0ZWVuY2lyY2xlPTkzMjU7ZS5mb3VydGVlbnBhcmVuPTkzNDU7ZS5mb3VydGVlbnBlcmlvZD05MzY1O2UuZm91cnRoYWk9MzY2ODtlLmZvdXJ0aHRvbmVjaGluZXNlPTcxNTtlLmZwYXJlbj05Mzc3O2UuZnJhY3Rpb249ODI2MDtlLmZyYW5jPTgzNTU7ZS5nPTEwMztlLmdhYmVuZ2FsaT0yNDU1O2UuZ2FjdXRlPTUwMTtlLmdhZGV2YT0yMzI3O2UuZ2FmYXJhYmljPTE3MTE7ZS5nYWZmaW5hbGFyYWJpYz02NDQwMztlLmdhZmluaXRpYWxhcmFiaWM9NjQ0MDQ7ZS5nYWZtZWRpYWxhcmFiaWM9NjQ0MDU7ZS5nYWd1amFyYXRpPTI3MTE7ZS5nYWd1cm11a2hpPTI1ODM7ZS5nYWhpcmFnYW5hPTEyMzY0O2UuZ2FrYXRha2FuYT0xMjQ2MDtlLmdhbW1hPTk0NztlLmdhbW1hbGF0aW5zbWFsbD02MTE7ZS5nYW1tYXN1cGVyaW9yPTczNjtlLmdhbmdpYWNvcHRpYz0xMDAzO2UuZ2JvcG9tb2ZvPTEyNTU3O2UuZ2JyZXZlPTI4NztlLmdjYXJvbj00ODc7ZS5nY2VkaWxsYT0yOTE7ZS5nY2lyY2xlPTk0MzA7ZS5nY2lyY3VtZmxleD0yODU7ZS5nY29tbWFhY2NlbnQ9MjkxO2UuZ2RvdD0yODk7ZS5nZG90YWNjZW50PTI4OTtlLmdlY3lyaWxsaWM9MTA3NTtlLmdlaGlyYWdhbmE9MTIzNzA7ZS5nZWthdGFrYW5hPTEyNDY2O2UuZ2VvbWV0cmljYWxseWVxdWFsPTg3ODU7ZS5nZXJlc2hhY2NlbnRoZWJyZXc9MTQzNjtlLmdlcmVzaGhlYnJldz0xNTIzO2UuZ2VyZXNobXVxZGFtaGVicmV3PTE0Mzc7ZS5nZXJtYW5kYmxzPTIyMztlLmdlcnNoYXlpbWFjY2VudGhlYnJldz0xNDM4O2UuZ2Vyc2hheWltaGVicmV3PTE1MjQ7ZS5nZXRhbWFyaz0xMjMwNztlLmdoYWJlbmdhbGk9MjQ1NjtlLmdoYWRhcm1lbmlhbj0xMzk0O2UuZ2hhZGV2YT0yMzI4O2UuZ2hhZ3VqYXJhdGk9MjcxMjtlLmdoYWd1cm11a2hpPTI1ODQ7ZS5naGFpbmFyYWJpYz0xNTk0O2UuZ2hhaW5maW5hbGFyYWJpYz02NTIzMDtlLmdoYWluaW5pdGlhbGFyYWJpYz02NTIzMTtlLmdoYWlubWVkaWFsYXJhYmljPTY1MjMyO2UuZ2hlbWlkZGxlaG9va2N5cmlsbGljPTExNzM7ZS5naGVzdHJva2VjeXJpbGxpYz0xMTcxO2UuZ2hldXB0dXJuY3lyaWxsaWM9MTE2OTtlLmdoaGFkZXZhPTIzOTQ7ZS5naGhhZ3VybXVraGk9MjY1MDtlLmdob29rPTYwODtlLmdoenNxdWFyZT0xMzIwMztlLmdpaGlyYWdhbmE9MTIzNjY7ZS5naWthdGFrYW5hPTEyNDYyO2UuZ2ltYXJtZW5pYW49MTM3OTtlLmdpbWVsPTE0OTA7ZS5naW1lbGRhZ2VzaD02NDMwNjtlLmdpbWVsZGFnZXNoaGVicmV3PTY0MzA2O2UuZ2ltZWxoZWJyZXc9MTQ5MDtlLmdqZWN5cmlsbGljPTExMDc7ZS5nbG90dGFsaW52ZXJ0ZWRzdHJva2U9NDQ2O2UuZ2xvdHRhbHN0b3A9NjYwO2UuZ2xvdHRhbHN0b3BpbnZlcnRlZD02NjI7ZS5nbG90dGFsc3RvcG1vZD03MDQ7ZS5nbG90dGFsc3RvcHJldmVyc2VkPTY2MTtlLmdsb3R0YWxzdG9wcmV2ZXJzZWRtb2Q9NzA1O2UuZ2xvdHRhbHN0b3ByZXZlcnNlZHN1cGVyaW9yPTc0MDtlLmdsb3R0YWxzdG9wc3Ryb2tlPTY3MztlLmdsb3R0YWxzdG9wc3Ryb2tlcmV2ZXJzZWQ9Njc0O2UuZ21hY3Jvbj03NzEzO2UuZ21vbm9zcGFjZT02NTM1MTtlLmdvaGlyYWdhbmE9MTIzNzI7ZS5nb2thdGFrYW5hPTEyNDY4O2UuZ3BhcmVuPTkzNzg7ZS5ncGFzcXVhcmU9MTMyMjg7ZS5ncmFkaWVudD04NzExO2UuZ3JhdmU9OTY7ZS5ncmF2ZWJlbG93Y21iPTc5MDtlLmdyYXZlY21iPTc2ODtlLmdyYXZlY29tYj03Njg7ZS5ncmF2ZWRldmE9MjM4NztlLmdyYXZlbG93bW9kPTcxODtlLmdyYXZlbW9ub3NwYWNlPTY1MzQ0O2UuZ3JhdmV0b25lY21iPTgzMjtlLmdyZWF0ZXI9NjI7ZS5ncmVhdGVyZXF1YWw9ODgwNTtlLmdyZWF0ZXJlcXVhbG9ybGVzcz04OTIzO2UuZ3JlYXRlcm1vbm9zcGFjZT02NTMxMDtlLmdyZWF0ZXJvcmVxdWl2YWxlbnQ9ODgxOTtlLmdyZWF0ZXJvcmxlc3M9ODgyMztlLmdyZWF0ZXJvdmVyZXF1YWw9ODgwNztlLmdyZWF0ZXJzbWFsbD02NTEyNTtlLmdzY3JpcHQ9NjA5O2UuZ3N0cm9rZT00ODU7ZS5ndWhpcmFnYW5hPTEyMzY4O2UuZ3VpbGxlbW90bGVmdD0xNzE7ZS5ndWlsbGVtb3RyaWdodD0xODc7ZS5ndWlsc2luZ2xsZWZ0PTgyNDk7ZS5ndWlsc2luZ2xyaWdodD04MjUwO2UuZ3VrYXRha2FuYT0xMjQ2NDtlLmd1cmFtdXNxdWFyZT0xMzA4MDtlLmd5c3F1YXJlPTEzMjU3O2UuaD0xMDQ7ZS5oYWFia2hhc2lhbmN5cmlsbGljPTExOTM7ZS5oYWFsdG9uZWFyYWJpYz0xNzI5O2UuaGFiZW5nYWxpPTI0ODk7ZS5oYWRlc2NlbmRlcmN5cmlsbGljPTEyMDM7ZS5oYWRldmE9MjM2MTtlLmhhZ3VqYXJhdGk9Mjc0NTtlLmhhZ3VybXVraGk9MjYxNztlLmhhaGFyYWJpYz0xNTgxO2UuaGFoZmluYWxhcmFiaWM9NjUxODY7ZS5oYWhpbml0aWFsYXJhYmljPTY1MTg3O2UuaGFoaXJhZ2FuYT0xMjM5OTtlLmhhaG1lZGlhbGFyYWJpYz02NTE4ODtlLmhhaXR1c3F1YXJlPTEzMDk4O2UuaGFrYXRha2FuYT0xMjQ5NTtlLmhha2F0YWthbmFoYWxmd2lkdGg9NjU0MTg7ZS5oYWxhbnRndXJtdWtoaT0yNjM3O2UuaGFtemFhcmFiaWM9MTU2OTtlLmhhbXphbG93YXJhYmljPTE1Njk7ZS5oYW5ndWxmaWxsZXI9MTI2NDQ7ZS5oYXJkc2lnbmN5cmlsbGljPTEwOTg7ZS5oYXJwb29ubGVmdGJhcmJ1cD04NjM2O2UuaGFycG9vbnJpZ2h0YmFyYnVwPTg2NDA7ZS5oYXNxdWFyZT0xMzI1ODtlLmhhdGFmcGF0YWg9MTQ1ODtlLmhhdGFmcGF0YWgxNj0xNDU4O2UuaGF0YWZwYXRhaDIzPTE0NTg7ZS5oYXRhZnBhdGFoMmY9MTQ1ODtlLmhhdGFmcGF0YWhoZWJyZXc9MTQ1ODtlLmhhdGFmcGF0YWhuYXJyb3doZWJyZXc9MTQ1ODtlLmhhdGFmcGF0YWhxdWFydGVyaGVicmV3PTE0NTg7ZS5oYXRhZnBhdGFod2lkZWhlYnJldz0xNDU4O2UuaGF0YWZxYW1hdHM9MTQ1OTtlLmhhdGFmcWFtYXRzMWI9MTQ1OTtlLmhhdGFmcWFtYXRzMjg9MTQ1OTtlLmhhdGFmcWFtYXRzMzQ9MTQ1OTtlLmhhdGFmcWFtYXRzaGVicmV3PTE0NTk7ZS5oYXRhZnFhbWF0c25hcnJvd2hlYnJldz0xNDU5O2UuaGF0YWZxYW1hdHNxdWFydGVyaGVicmV3PTE0NTk7ZS5oYXRhZnFhbWF0c3dpZGVoZWJyZXc9MTQ1OTtlLmhhdGFmc2Vnb2w9MTQ1NztlLmhhdGFmc2Vnb2wxNz0xNDU3O2UuaGF0YWZzZWdvbDI0PTE0NTc7ZS5oYXRhZnNlZ29sMzA9MTQ1NztlLmhhdGFmc2Vnb2xoZWJyZXc9MTQ1NztlLmhhdGFmc2Vnb2xuYXJyb3doZWJyZXc9MTQ1NztlLmhhdGFmc2Vnb2xxdWFydGVyaGVicmV3PTE0NTc7ZS5oYXRhZnNlZ29sd2lkZWhlYnJldz0xNDU3O2UuaGJhcj0yOTU7ZS5oYm9wb21vZm89MTI1NTk7ZS5oYnJldmViZWxvdz03NzIzO2UuaGNlZGlsbGE9NzcyMTtlLmhjaXJjbGU9OTQzMTtlLmhjaXJjdW1mbGV4PTI5MztlLmhkaWVyZXNpcz03NzE5O2UuaGRvdGFjY2VudD03NzE1O2UuaGRvdGJlbG93PTc3MTc7ZS5oZT0xNDkyO2UuaGVhcnQ9OTgyOTtlLmhlYXJ0c3VpdGJsYWNrPTk4Mjk7ZS5oZWFydHN1aXR3aGl0ZT05ODI1O2UuaGVkYWdlc2g9NjQzMDg7ZS5oZWRhZ2VzaGhlYnJldz02NDMwODtlLmhlaGFsdG9uZWFyYWJpYz0xNzI5O2UuaGVoYXJhYmljPTE2MDc7ZS5oZWhlYnJldz0xNDkyO2UuaGVoZmluYWxhbHRvbmVhcmFiaWM9NjQ0MjM7ZS5oZWhmaW5hbGFsdHR3b2FyYWJpYz02NTI1ODtlLmhlaGZpbmFsYXJhYmljPTY1MjU4O2UuaGVoaGFtemFhYm92ZWZpbmFsYXJhYmljPTY0NDIxO2UuaGVoaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljPTY0NDIwO2UuaGVoaW5pdGlhbGFsdG9uZWFyYWJpYz02NDQyNDtlLmhlaGluaXRpYWxhcmFiaWM9NjUyNTk7ZS5oZWhpcmFnYW5hPTEyNDA4O2UuaGVobWVkaWFsYWx0b25lYXJhYmljPTY0NDI1O2UuaGVobWVkaWFsYXJhYmljPTY1MjYwO2UuaGVpc2VpZXJhc3F1YXJlPTEzMTc5O2UuaGVrYXRha2FuYT0xMjUwNDtlLmhla2F0YWthbmFoYWxmd2lkdGg9NjU0MjE7ZS5oZWt1dGFhcnVzcXVhcmU9MTMxMTA7ZS5oZW5naG9vaz02MTU7ZS5oZXJ1dHVzcXVhcmU9MTMxMTM7ZS5oZXQ9MTQ5NTtlLmhldGhlYnJldz0xNDk1O2UuaGhvb2s9NjE0O2UuaGhvb2tzdXBlcmlvcj02ODk7ZS5oaWV1aGFjaXJjbGVrb3JlYW49MTI5MjM7ZS5oaWV1aGFwYXJlbmtvcmVhbj0xMjgyNztlLmhpZXVoY2lyY2xla29yZWFuPTEyOTA5O2UuaGlldWhrb3JlYW49MTI2MjI7ZS5oaWV1aHBhcmVua29yZWFuPTEyODEzO2UuaGloaXJhZ2FuYT0xMjQwMjtlLmhpa2F0YWthbmE9MTI0OTg7ZS5oaWthdGFrYW5haGFsZndpZHRoPTY1NDE5O2UuaGlyaXE9MTQ2MDtlLmhpcmlxMTQ9MTQ2MDtlLmhpcmlxMjE9MTQ2MDtlLmhpcmlxMmQ9MTQ2MDtlLmhpcmlxaGVicmV3PTE0NjA7ZS5oaXJpcW5hcnJvd2hlYnJldz0xNDYwO2UuaGlyaXFxdWFydGVyaGVicmV3PTE0NjA7ZS5oaXJpcXdpZGVoZWJyZXc9MTQ2MDtlLmhsaW5lYmVsb3c9NzgzMDtlLmhtb25vc3BhY2U9NjUzNTI7ZS5ob2FybWVuaWFuPTEzOTI7ZS5ob2hpcHRoYWk9MzYyNztlLmhvaGlyYWdhbmE9MTI0MTE7ZS5ob2thdGFrYW5hPTEyNTA3O2UuaG9rYXRha2FuYWhhbGZ3aWR0aD02NTQyMjtlLmhvbGFtPTE0NjU7ZS5ob2xhbTE5PTE0NjU7ZS5ob2xhbTI2PTE0NjU7ZS5ob2xhbTMyPTE0NjU7ZS5ob2xhbWhlYnJldz0xNDY1O2UuaG9sYW1uYXJyb3doZWJyZXc9MTQ2NTtlLmhvbGFtcXVhcnRlcmhlYnJldz0xNDY1O2UuaG9sYW13aWRlaGVicmV3PTE0NjU7ZS5ob25va2h1a3RoYWk9MzYzMDtlLmhvb2thYm92ZWNvbWI9Nzc3O2UuaG9va2NtYj03Nzc7ZS5ob29rcGFsYXRhbGl6ZWRiZWxvd2NtYj04MDE7ZS5ob29rcmV0cm9mbGV4YmVsb3djbWI9ODAyO2UuaG9vbnNxdWFyZT0xMzEyMjtlLmhvcmljb3B0aWM9MTAwMTtlLmhvcml6b250YWxiYXI9ODIxMztlLmhvcm5jbWI9Nzk1O2UuaG90c3ByaW5ncz05ODMyO2UuaG91c2U9ODk2MjtlLmhwYXJlbj05Mzc5O2UuaHN1cGVyaW9yPTY4ODtlLmh0dXJuZWQ9NjEzO2UuaHVoaXJhZ2FuYT0xMjQwNTtlLmh1aWl0b3NxdWFyZT0xMzEwNztlLmh1a2F0YWthbmE9MTI1MDE7ZS5odWthdGFrYW5haGFsZndpZHRoPTY1NDIwO2UuaHVuZ2FydW1sYXV0PTczMztlLmh1bmdhcnVtbGF1dGNtYj03Nzk7ZS5odj00MDU7ZS5oeXBoZW49NDU7ZS5oeXBoZW5pbmZlcmlvcj02MzIwNTtlLmh5cGhlbm1vbm9zcGFjZT02NTI5MztlLmh5cGhlbnNtYWxsPTY1MTIzO2UuaHlwaGVuc3VwZXJpb3I9NjMyMDY7ZS5oeXBoZW50d289ODIwODtlLmk9MTA1O2UuaWFjdXRlPTIzNztlLmlhY3lyaWxsaWM9MTEwMztlLmliZW5nYWxpPTI0Mzk7ZS5pYm9wb21vZm89MTI1ODM7ZS5pYnJldmU9MzAxO2UuaWNhcm9uPTQ2NDtlLmljaXJjbGU9OTQzMjtlLmljaXJjdW1mbGV4PTIzODtlLmljeXJpbGxpYz0xMTEwO2UuaWRibGdyYXZlPTUyMTtlLmlkZW9ncmFwaGVhcnRoY2lyY2xlPTEyOTQzO2UuaWRlb2dyYXBoZmlyZWNpcmNsZT0xMjkzOTtlLmlkZW9ncmFwaGljYWxsaWFuY2VwYXJlbj0xMjg2MztlLmlkZW9ncmFwaGljY2FsbHBhcmVuPTEyODU4O2UuaWRlb2dyYXBoaWNjZW50cmVjaXJjbGU9MTI5NjU7ZS5pZGVvZ3JhcGhpY2Nsb3NlPTEyMjk0O2UuaWRlb2dyYXBoaWNjb21tYT0xMjI4OTtlLmlkZW9ncmFwaGljY29tbWFsZWZ0PTY1MzgwO2UuaWRlb2dyYXBoaWNjb25ncmF0dWxhdGlvbnBhcmVuPTEyODU1O2UuaWRlb2dyYXBoaWNjb3JyZWN0Y2lyY2xlPTEyOTYzO2UuaWRlb2dyYXBoaWNlYXJ0aHBhcmVuPTEyODQ3O2UuaWRlb2dyYXBoaWNlbnRlcnByaXNlcGFyZW49MTI4NjE7ZS5pZGVvZ3JhcGhpY2V4Y2VsbGVudGNpcmNsZT0xMjk1NztlLmlkZW9ncmFwaGljZmVzdGl2YWxwYXJlbj0xMjg2NDtlLmlkZW9ncmFwaGljZmluYW5jaWFsY2lyY2xlPTEyOTUwO2UuaWRlb2dyYXBoaWNmaW5hbmNpYWxwYXJlbj0xMjg1NDtlLmlkZW9ncmFwaGljZmlyZXBhcmVuPTEyODQzO2UuaWRlb2dyYXBoaWNoYXZlcGFyZW49MTI4NTA7ZS5pZGVvZ3JhcGhpY2hpZ2hjaXJjbGU9MTI5NjQ7ZS5pZGVvZ3JhcGhpY2l0ZXJhdGlvbm1hcms9MTIyOTM7ZS5pZGVvZ3JhcGhpY2xhYm9yY2lyY2xlPTEyOTUyO2UuaWRlb2dyYXBoaWNsYWJvcnBhcmVuPTEyODU2O2UuaWRlb2dyYXBoaWNsZWZ0Y2lyY2xlPTEyOTY3O2UuaWRlb2dyYXBoaWNsb3djaXJjbGU9MTI5NjY7ZS5pZGVvZ3JhcGhpY21lZGljaW5lY2lyY2xlPTEyOTY5O2UuaWRlb2dyYXBoaWNtZXRhbHBhcmVuPTEyODQ2O2UuaWRlb2dyYXBoaWNtb29ucGFyZW49MTI4NDI7ZS5pZGVvZ3JhcGhpY25hbWVwYXJlbj0xMjg1MjtlLmlkZW9ncmFwaGljcGVyaW9kPTEyMjkwO2UuaWRlb2dyYXBoaWNwcmludGNpcmNsZT0xMjk1ODtlLmlkZW9ncmFwaGljcmVhY2hwYXJlbj0xMjg2NztlLmlkZW9ncmFwaGljcmVwcmVzZW50cGFyZW49MTI4NTc7ZS5pZGVvZ3JhcGhpY3Jlc291cmNlcGFyZW49MTI4NjI7ZS5pZGVvZ3JhcGhpY3JpZ2h0Y2lyY2xlPTEyOTY4O2UuaWRlb2dyYXBoaWNzZWNyZXRjaXJjbGU9MTI5NTM7ZS5pZGVvZ3JhcGhpY3NlbGZwYXJlbj0xMjg2NjtlLmlkZW9ncmFwaGljc29jaWV0eXBhcmVuPTEyODUxO2UuaWRlb2dyYXBoaWNzcGFjZT0xMjI4ODtlLmlkZW9ncmFwaGljc3BlY2lhbHBhcmVuPTEyODUzO2UuaWRlb2dyYXBoaWNzdG9ja3BhcmVuPTEyODQ5O2UuaWRlb2dyYXBoaWNzdHVkeXBhcmVuPTEyODU5O2UuaWRlb2dyYXBoaWNzdW5wYXJlbj0xMjg0ODtlLmlkZW9ncmFwaGljc3VwZXJ2aXNlcGFyZW49MTI4NjA7ZS5pZGVvZ3JhcGhpY3dhdGVycGFyZW49MTI4NDQ7ZS5pZGVvZ3JhcGhpY3dvb2RwYXJlbj0xMjg0NTtlLmlkZW9ncmFwaGljemVybz0xMjI5NTtlLmlkZW9ncmFwaG1ldGFsY2lyY2xlPTEyOTQyO2UuaWRlb2dyYXBobW9vbmNpcmNsZT0xMjkzODtlLmlkZW9ncmFwaG5hbWVjaXJjbGU9MTI5NDg7ZS5pZGVvZ3JhcGhzdW5jaXJjbGU9MTI5NDQ7ZS5pZGVvZ3JhcGh3YXRlcmNpcmNsZT0xMjk0MDtlLmlkZW9ncmFwaHdvb2RjaXJjbGU9MTI5NDE7ZS5pZGV2YT0yMzExO2UuaWRpZXJlc2lzPTIzOTtlLmlkaWVyZXNpc2FjdXRlPTc3Mjc7ZS5pZGllcmVzaXNjeXJpbGxpYz0xMjUzO2UuaWRvdGJlbG93PTc4ODM7ZS5pZWJyZXZlY3lyaWxsaWM9MTIzOTtlLmllY3lyaWxsaWM9MTA3NztlLmlldW5nYWNpcmNsZWtvcmVhbj0xMjkxNztlLmlldW5nYXBhcmVua29yZWFuPTEyODIxO2UuaWV1bmdjaXJjbGVrb3JlYW49MTI5MDM7ZS5pZXVuZ2tvcmVhbj0xMjYxNTtlLmlldW5ncGFyZW5rb3JlYW49MTI4MDc7ZS5pZ3JhdmU9MjM2O2UuaWd1amFyYXRpPTI2OTU7ZS5pZ3VybXVraGk9MjU2NztlLmloaXJhZ2FuYT0xMjM1NjtlLmlob29rYWJvdmU9Nzg4MTtlLmlpYmVuZ2FsaT0yNDQwO2UuaWljeXJpbGxpYz0xMDgwO2UuaWlkZXZhPTIzMTI7ZS5paWd1amFyYXRpPTI2OTY7ZS5paWd1cm11a2hpPTI1Njg7ZS5paW1hdHJhZ3VybXVraGk9MjYyNDtlLmlpbnZlcnRlZGJyZXZlPTUyMztlLmlpc2hvcnRjeXJpbGxpYz0xMDgxO2UuaWl2b3dlbHNpZ25iZW5nYWxpPTI0OTY7ZS5paXZvd2Vsc2lnbmRldmE9MjM2ODtlLmlpdm93ZWxzaWduZ3VqYXJhdGk9Mjc1MjtlLmlqPTMwNztlLmlrYXRha2FuYT0xMjQ1MjtlLmlrYXRha2FuYWhhbGZ3aWR0aD02NTM5NDtlLmlrb3JlYW49MTI2NDM7ZS5pbGRlPTczMjtlLmlsdXloZWJyZXc9MTQ1MjtlLmltYWNyb249Mjk5O2UuaW1hY3JvbmN5cmlsbGljPTEyNTE7ZS5pbWFnZW9yYXBwcm94aW1hdGVseWVxdWFsPTg3ODc7ZS5pbWF0cmFndXJtdWtoaT0yNjIzO2UuaW1vbm9zcGFjZT02NTM1MztlLmluY3JlbWVudD04NzEwO2UuaW5maW5pdHk9ODczNDtlLmluaWFybWVuaWFuPTEzODc7ZS5pbnRlZ3JhbD04NzQ3O2UuaW50ZWdyYWxib3R0b209ODk5MztlLmludGVncmFsYnQ9ODk5MztlLmludGVncmFsZXg9NjM3MzM7ZS5pbnRlZ3JhbHRvcD04OTkyO2UuaW50ZWdyYWx0cD04OTkyO2UuaW50ZXJzZWN0aW9uPTg3NDU7ZS5pbnRpc3F1YXJlPTEzMDYxO2UuaW52YnVsbGV0PTk2ODg7ZS5pbnZjaXJjbGU9OTY4OTtlLmludnNtaWxlZmFjZT05Nzg3O2UuaW9jeXJpbGxpYz0xMTA1O2UuaW9nb25laz0zMDM7ZS5pb3RhPTk1MztlLmlvdGFkaWVyZXNpcz05NzA7ZS5pb3RhZGllcmVzaXN0b25vcz05MTI7ZS5pb3RhbGF0aW49NjE3O2UuaW90YXRvbm9zPTk0MztlLmlwYXJlbj05MzgwO2UuaXJpZ3VybXVraGk9MjY3NDtlLmlzbWFsbGhpcmFnYW5hPTEyMzU1O2UuaXNtYWxsa2F0YWthbmE9MTI0NTE7ZS5pc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NDtlLmlzc2hhcmJlbmdhbGk9MjU1NDtlLmlzdHJva2U9NjE2O2UuaXN1cGVyaW9yPTYzMjEzO2UuaXRlcmF0aW9uaGlyYWdhbmE9MTI0NDU7ZS5pdGVyYXRpb25rYXRha2FuYT0xMjU0MTtlLml0aWxkZT0yOTc7ZS5pdGlsZGViZWxvdz03NzI1O2UuaXVib3BvbW9mbz0xMjU4NTtlLml1Y3lyaWxsaWM9MTEwMjtlLml2b3dlbHNpZ25iZW5nYWxpPTI0OTU7ZS5pdm93ZWxzaWduZGV2YT0yMzY3O2UuaXZvd2Vsc2lnbmd1amFyYXRpPTI3NTE7ZS5pemhpdHNhY3lyaWxsaWM9MTE0MTtlLml6aGl0c2FkYmxncmF2ZWN5cmlsbGljPTExNDM7ZS5qPTEwNjtlLmphYXJtZW5pYW49MTM5MztlLmphYmVuZ2FsaT0yNDYwO2UuamFkZXZhPTIzMzI7ZS5qYWd1amFyYXRpPTI3MTY7ZS5qYWd1cm11a2hpPTI1ODg7ZS5qYm9wb21vZm89MTI1NjA7ZS5qY2Fyb249NDk2O2UuamNpcmNsZT05NDMzO2UuamNpcmN1bWZsZXg9MzA5O2UuamNyb3NzZWR0YWlsPTY2OTtlLmpkb3RsZXNzc3Ryb2tlPTYwNztlLmplY3lyaWxsaWM9MTExMjtlLmplZW1hcmFiaWM9MTU4MDtlLmplZW1maW5hbGFyYWJpYz02NTE4MjtlLmplZW1pbml0aWFsYXJhYmljPTY1MTgzO2UuamVlbW1lZGlhbGFyYWJpYz02NTE4NDtlLmplaGFyYWJpYz0xNjg4O2UuamVoZmluYWxhcmFiaWM9NjQzOTU7ZS5qaGFiZW5nYWxpPTI0NjE7ZS5qaGFkZXZhPTIzMzM7ZS5qaGFndWphcmF0aT0yNzE3O2UuamhhZ3VybXVraGk9MjU4OTtlLmpoZWhhcm1lbmlhbj0xNDAzO2UuamlzPTEyMjkyO2Uuam1vbm9zcGFjZT02NTM1NDtlLmpwYXJlbj05MzgxO2UuanN1cGVyaW9yPTY5MDtlLms9MTA3O2Uua2FiYXNoa2lyY3lyaWxsaWM9MTE4NTtlLmthYmVuZ2FsaT0yNDUzO2Uua2FjdXRlPTc3Mjk7ZS5rYWN5cmlsbGljPTEwODI7ZS5rYWRlc2NlbmRlcmN5cmlsbGljPTExNzk7ZS5rYWRldmE9MjMyNTtlLmthZj0xNDk5O2Uua2FmYXJhYmljPTE2MDM7ZS5rYWZkYWdlc2g9NjQzMTU7ZS5rYWZkYWdlc2hoZWJyZXc9NjQzMTU7ZS5rYWZmaW5hbGFyYWJpYz02NTI0MjtlLmthZmhlYnJldz0xNDk5O2Uua2FmaW5pdGlhbGFyYWJpYz02NTI0MztlLmthZm1lZGlhbGFyYWJpYz02NTI0NDtlLmthZnJhZmVoZWJyZXc9NjQzMzM7ZS5rYWd1amFyYXRpPTI3MDk7ZS5rYWd1cm11a2hpPTI1ODE7ZS5rYWhpcmFnYW5hPTEyMzYzO2Uua2Fob29rY3lyaWxsaWM9MTIyMDtlLmtha2F0YWthbmE9MTI0NTk7ZS5rYWthdGFrYW5haGFsZndpZHRoPTY1Mzk4O2Uua2FwcGE9OTU0O2Uua2FwcGFzeW1ib2xncmVlaz0xMDA4O2Uua2FweWVvdW5taWV1bWtvcmVhbj0xMjY1NztlLmthcHllb3VucGhpZXVwaGtvcmVhbj0xMjY3NjtlLmthcHllb3VucGlldXBrb3JlYW49MTI2NjQ7ZS5rYXB5ZW91bnNzYW5ncGlldXBrb3JlYW49MTI2NjU7ZS5rYXJvcmlpc3F1YXJlPTEzMDY5O2Uua2FzaGlkYWF1dG9hcmFiaWM9MTYwMDtlLmthc2hpZGFhdXRvbm9zaWRlYmVhcmluZ2FyYWJpYz0xNjAwO2Uua2FzbWFsbGthdGFrYW5hPTEyNTMzO2Uua2FzcXVhcmU9MTMxODg7ZS5rYXNyYWFyYWJpYz0xNjE2O2Uua2FzcmF0YW5hcmFiaWM9MTYxMztlLmthc3Ryb2tlY3lyaWxsaWM9MTE4MztlLmthdGFoaXJhcHJvbG9uZ21hcmtoYWxmd2lkdGg9NjUzOTI7ZS5rYXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWM9MTE4MTtlLmtib3BvbW9mbz0xMjU1ODtlLmtjYWxzcXVhcmU9MTMxOTM7ZS5rY2Fyb249NDg5O2Uua2NlZGlsbGE9MzExO2Uua2NpcmNsZT05NDM0O2Uua2NvbW1hYWNjZW50PTMxMTtlLmtkb3RiZWxvdz03NzMxO2Uua2VoYXJtZW5pYW49MTQxMjtlLmtlaGlyYWdhbmE9MTIzNjk7ZS5rZWthdGFrYW5hPTEyNDY1O2Uua2VrYXRha2FuYWhhbGZ3aWR0aD02NTQwMTtlLmtlbmFybWVuaWFuPTEzOTE7ZS5rZXNtYWxsa2F0YWthbmE9MTI1MzQ7ZS5rZ3JlZW5sYW5kaWM9MzEyO2Uua2hhYmVuZ2FsaT0yNDU0O2Uua2hhY3lyaWxsaWM9MTA5MztlLmtoYWRldmE9MjMyNjtlLmtoYWd1amFyYXRpPTI3MTA7ZS5raGFndXJtdWtoaT0yNTgyO2Uua2hhaGFyYWJpYz0xNTgyO2Uua2hhaGZpbmFsYXJhYmljPTY1MTkwO2Uua2hhaGluaXRpYWxhcmFiaWM9NjUxOTE7ZS5raGFobWVkaWFsYXJhYmljPTY1MTkyO2Uua2hlaWNvcHRpYz05OTk7ZS5raGhhZGV2YT0yMzkzO2Uua2hoYWd1cm11a2hpPTI2NDk7ZS5raGlldWtoYWNpcmNsZWtvcmVhbj0xMjkyMDtlLmtoaWV1a2hhcGFyZW5rb3JlYW49MTI4MjQ7ZS5raGlldWtoY2lyY2xla29yZWFuPTEyOTA2O2Uua2hpZXVraGtvcmVhbj0xMjYxOTtlLmtoaWV1a2hwYXJlbmtvcmVhbj0xMjgxMDtlLmtob2toYWl0aGFpPTM1ODY7ZS5raG9raG9udGhhaT0zNTg5O2Uua2hva2h1YXR0aGFpPTM1ODc7ZS5raG9raHdhaXRoYWk9MzU4ODtlLmtob211dHRoYWk9MzY3NTtlLmtob29rPTQwOTtlLmtob3Jha2hhbmd0aGFpPTM1OTA7ZS5raHpzcXVhcmU9MTMyMDE7ZS5raWhpcmFnYW5hPTEyMzY1O2Uua2lrYXRha2FuYT0xMjQ2MTtlLmtpa2F0YWthbmFoYWxmd2lkdGg9NjUzOTk7ZS5raXJvZ3VyYW11c3F1YXJlPTEzMDc3O2Uua2lyb21lZXRvcnVzcXVhcmU9MTMwNzg7ZS5raXJvc3F1YXJlPTEzMDc2O2Uua2l5ZW9rYWNpcmNsZWtvcmVhbj0xMjkxMDtlLmtpeWVva2FwYXJlbmtvcmVhbj0xMjgxNDtlLmtpeWVva2NpcmNsZWtvcmVhbj0xMjg5NjtlLmtpeWVva2tvcmVhbj0xMjU5MztlLmtpeWVva3BhcmVua29yZWFuPTEyODAwO2Uua2l5ZW9rc2lvc2tvcmVhbj0xMjU5NTtlLmtqZWN5cmlsbGljPTExMTY7ZS5rbGluZWJlbG93PTc3MzM7ZS5rbHNxdWFyZT0xMzIwODtlLmttY3ViZWRzcXVhcmU9MTMyMjI7ZS5rbW9ub3NwYWNlPTY1MzU1O2Uua21zcXVhcmVkc3F1YXJlPTEzMjE4O2Uua29oaXJhZ2FuYT0xMjM3MTtlLmtvaG1zcXVhcmU9MTMyNDg7ZS5rb2thaXRoYWk9MzU4NTtlLmtva2F0YWthbmE9MTI0Njc7ZS5rb2thdGFrYW5haGFsZndpZHRoPTY1NDAyO2Uua29vcG9zcXVhcmU9MTMwODY7ZS5rb3BwYWN5cmlsbGljPTExNTM7ZS5rb3JlYW5zdGFuZGFyZHN5bWJvbD0xMjkyNztlLmtvcm9uaXNjbWI9ODM1O2Uua3BhcmVuPTkzODI7ZS5rcGFzcXVhcmU9MTMyMjY7ZS5rc2ljeXJpbGxpYz0xMTM1O2Uua3RzcXVhcmU9MTMyNjM7ZS5rdHVybmVkPTY3MDtlLmt1aGlyYWdhbmE9MTIzNjc7ZS5rdWthdGFrYW5hPTEyNDYzO2Uua3VrYXRha2FuYWhhbGZ3aWR0aD02NTQwMDtlLmt2c3F1YXJlPTEzMjQwO2Uua3dzcXVhcmU9MTMyNDY7ZS5sPTEwODtlLmxhYmVuZ2FsaT0yNDgyO2UubGFjdXRlPTMxNDtlLmxhZGV2YT0yMzU0O2UubGFndWphcmF0aT0yNzM4O2UubGFndXJtdWtoaT0yNjEwO2UubGFra2hhbmd5YW90aGFpPTM2NTM7ZS5sYW1hbGVmZmluYWxhcmFiaWM9NjUyNzY7ZS5sYW1hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MjcyO2UubGFtYWxlZmhhbXphYWJvdmVpc29sYXRlZGFyYWJpYz02NTI3MTtlLmxhbWFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWM9NjUyNzQ7ZS5sYW1hbGVmaGFtemFiZWxvd2lzb2xhdGVkYXJhYmljPTY1MjczO2UubGFtYWxlZmlzb2xhdGVkYXJhYmljPTY1Mjc1O2UubGFtYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYz02NTI3MDtlLmxhbWFsZWZtYWRkYWFib3ZlaXNvbGF0ZWRhcmFiaWM9NjUyNjk7ZS5sYW1hcmFiaWM9MTYwNDtlLmxhbWJkYT05NTU7ZS5sYW1iZGFzdHJva2U9NDExO2UubGFtZWQ9MTUwMDtlLmxhbWVkZGFnZXNoPTY0MzE2O2UubGFtZWRkYWdlc2hoZWJyZXc9NjQzMTY7ZS5sYW1lZGhlYnJldz0xNTAwO2UubGFtZmluYWxhcmFiaWM9NjUyNDY7ZS5sYW1oYWhpbml0aWFsYXJhYmljPTY0NzE0O2UubGFtaW5pdGlhbGFyYWJpYz02NTI0NztlLmxhbWplZW1pbml0aWFsYXJhYmljPTY0NzEzO2UubGFta2hhaGluaXRpYWxhcmFiaWM9NjQ3MTU7ZS5sYW1sYW1oZWhpc29sYXRlZGFyYWJpYz02NTAxMDtlLmxhbW1lZGlhbGFyYWJpYz02NTI0ODtlLmxhbW1lZW1oYWhpbml0aWFsYXJhYmljPTY0OTA0O2UubGFtbWVlbWluaXRpYWxhcmFiaWM9NjQ3MTY7ZS5sYXJnZWNpcmNsZT05NzExO2UubGJhcj00MTA7ZS5sYmVsdD02MjA7ZS5sYm9wb21vZm89MTI1NTY7ZS5sY2Fyb249MzE4O2UubGNlZGlsbGE9MzE2O2UubGNpcmNsZT05NDM1O2UubGNpcmN1bWZsZXhiZWxvdz03NzQxO2UubGNvbW1hYWNjZW50PTMxNjtlLmxkb3Q9MzIwO2UubGRvdGFjY2VudD0zMjA7ZS5sZG90YmVsb3c9NzczNTtlLmxkb3RiZWxvd21hY3Jvbj03NzM3O2UubGVmdGFuZ2xlYWJvdmVjbWI9Nzk0O2UubGVmdHRhY2tiZWxvd2NtYj03OTI7ZS5sZXNzPTYwO2UubGVzc2VxdWFsPTg4MDQ7ZS5sZXNzZXF1YWxvcmdyZWF0ZXI9ODkyMjtlLmxlc3Ntb25vc3BhY2U9NjUzMDg7ZS5sZXNzb3JlcXVpdmFsZW50PTg4MTg7ZS5sZXNzb3JncmVhdGVyPTg4MjI7ZS5sZXNzb3ZlcmVxdWFsPTg4MDY7ZS5sZXNzc21hbGw9NjUxMjQ7ZS5sZXpoPTYyMjtlLmxmYmxvY2s9OTYxMjtlLmxob29rcmV0cm9mbGV4PTYyMTtlLmxpcmE9ODM1NjtlLmxpd25hcm1lbmlhbj0xMzg4O2UubGo9NDU3O2UubGplY3lyaWxsaWM9MTExMztlLmxsPTYzMTY4O2UubGxhZGV2YT0yMzU1O2UubGxhZ3VqYXJhdGk9MjczOTtlLmxsaW5lYmVsb3c9NzczOTtlLmxsbGFkZXZhPTIzNTY7ZS5sbHZvY2FsaWNiZW5nYWxpPTI1Mjk7ZS5sbHZvY2FsaWNkZXZhPTI0MDE7ZS5sbHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MzE7ZS5sbHZvY2FsaWN2b3dlbHNpZ25kZXZhPTI0MDM7ZS5sbWlkZGxldGlsZGU9NjE5O2UubG1vbm9zcGFjZT02NTM1NjtlLmxtc3F1YXJlPTEzMjY0O2UubG9jaHVsYXRoYWk9MzYyODtlLmxvZ2ljYWxhbmQ9ODc0MztlLmxvZ2ljYWxub3Q9MTcyO2UubG9naWNhbG5vdHJldmVyc2VkPTg5NzY7ZS5sb2dpY2Fsb3I9ODc0NDtlLmxvbGluZ3RoYWk9MzYyMTtlLmxvbmdzPTM4MztlLmxvd2xpbmVjZW50ZXJsaW5lPTY1MTAyO2UubG93bGluZWNtYj04MTg7ZS5sb3dsaW5lZGFzaGVkPTY1MTAxO2UubG96ZW5nZT05Njc0O2UubHBhcmVuPTkzODM7ZS5sc2xhc2g9MzIyO2UubHNxdWFyZT04NDY3O2UubHN1cGVyaW9yPTYzMjE0O2UubHRzaGFkZT05NjE3O2UubHV0aGFpPTM2MjI7ZS5sdm9jYWxpY2JlbmdhbGk9MjQ0NDtlLmx2b2NhbGljZGV2YT0yMzE2O2UubHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MzA7ZS5sdm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjQwMjtlLmx4c3F1YXJlPTEzMjY3O2UubT0xMDk7ZS5tYWJlbmdhbGk9MjQ3ODtlLm1hY3Jvbj0xNzU7ZS5tYWNyb25iZWxvd2NtYj04MTc7ZS5tYWNyb25jbWI9NzcyO2UubWFjcm9ubG93bW9kPTcxNztlLm1hY3Jvbm1vbm9zcGFjZT02NTUwNztlLm1hY3V0ZT03NzQzO2UubWFkZXZhPTIzNTA7ZS5tYWd1amFyYXRpPTI3MzQ7ZS5tYWd1cm11a2hpPTI2MDY7ZS5tYWhhcGFraGhlYnJldz0xNDQ0O2UubWFoYXBha2hsZWZ0aGVicmV3PTE0NDQ7ZS5tYWhpcmFnYW5hPTEyNDE0O2UubWFpY2hhdHRhd2Fsb3dsZWZ0dGhhaT02MzYzNztlLm1haWNoYXR0YXdhbG93cmlnaHR0aGFpPTYzNjM2O2UubWFpY2hhdHRhd2F0aGFpPTM2NTk7ZS5tYWljaGF0dGF3YXVwcGVybGVmdHRoYWk9NjM2MzU7ZS5tYWlla2xvd2xlZnR0aGFpPTYzNjI4O2UubWFpZWtsb3dyaWdodHRoYWk9NjM2Mjc7ZS5tYWlla3RoYWk9MzY1NjtlLm1haWVrdXBwZXJsZWZ0dGhhaT02MzYyNjtlLm1haWhhbmFrYXRsZWZ0dGhhaT02MzYyMDtlLm1haWhhbmFrYXR0aGFpPTM2MzM7ZS5tYWl0YWlraHVsZWZ0dGhhaT02MzYyNTtlLm1haXRhaWtodXRoYWk9MzY1NTtlLm1haXRob2xvd2xlZnR0aGFpPTYzNjMxO2UubWFpdGhvbG93cmlnaHR0aGFpPTYzNjMwO2UubWFpdGhvdGhhaT0zNjU3O2UubWFpdGhvdXBwZXJsZWZ0dGhhaT02MzYyOTtlLm1haXRyaWxvd2xlZnR0aGFpPTYzNjM0O2UubWFpdHJpbG93cmlnaHR0aGFpPTYzNjMzO2UubWFpdHJpdGhhaT0zNjU4O2UubWFpdHJpdXBwZXJsZWZ0dGhhaT02MzYzMjtlLm1haXlhbW9rdGhhaT0zNjU0O2UubWFrYXRha2FuYT0xMjUxMDtlLm1ha2F0YWthbmFoYWxmd2lkdGg9NjU0MjM7ZS5tYWxlPTk3OTQ7ZS5tYW5zeW9uc3F1YXJlPTEzMTI3O2UubWFxYWZoZWJyZXc9MTQ3MDtlLm1hcnM9OTc5NDtlLm1hc29yYWNpcmNsZWhlYnJldz0xNDU1O2UubWFzcXVhcmU9MTMxODc7ZS5tYm9wb21vZm89MTI1NTE7ZS5tYnNxdWFyZT0xMzI2ODtlLm1jaXJjbGU9OTQzNjtlLm1jdWJlZHNxdWFyZT0xMzIyMTtlLm1kb3RhY2NlbnQ9Nzc0NTtlLm1kb3RiZWxvdz03NzQ3O2UubWVlbWFyYWJpYz0xNjA1O2UubWVlbWZpbmFsYXJhYmljPTY1MjUwO2UubWVlbWluaXRpYWxhcmFiaWM9NjUyNTE7ZS5tZWVtbWVkaWFsYXJhYmljPTY1MjUyO2UubWVlbW1lZW1pbml0aWFsYXJhYmljPTY0NzIxO2UubWVlbW1lZW1pc29sYXRlZGFyYWJpYz02NDU4NDtlLm1lZXRvcnVzcXVhcmU9MTMxMzM7ZS5tZWhpcmFnYW5hPTEyNDE3O2UubWVpemllcmFzcXVhcmU9MTMxODI7ZS5tZWthdGFrYW5hPTEyNTEzO2UubWVrYXRha2FuYWhhbGZ3aWR0aD02NTQyNjtlLm1lbT0xNTAyO2UubWVtZGFnZXNoPTY0MzE4O2UubWVtZGFnZXNoaGVicmV3PTY0MzE4O2UubWVtaGVicmV3PTE1MDI7ZS5tZW5hcm1lbmlhbj0xMzk2O2UubWVya2hhaGVicmV3PTE0NDU7ZS5tZXJraGFrZWZ1bGFoZWJyZXc9MTQ0NjtlLm1lcmtoYWtlZnVsYWxlZnRoZWJyZXc9MTQ0NjtlLm1lcmtoYWxlZnRoZWJyZXc9MTQ0NTtlLm1ob29rPTYyNTtlLm1oenNxdWFyZT0xMzIwMjtlLm1pZGRsZWRvdGthdGFrYW5haGFsZndpZHRoPTY1MzgxO2UubWlkZG90PTE4MztlLm1pZXVtYWNpcmNsZWtvcmVhbj0xMjkxNDtlLm1pZXVtYXBhcmVua29yZWFuPTEyODE4O2UubWlldW1jaXJjbGVrb3JlYW49MTI5MDA7ZS5taWV1bWtvcmVhbj0xMjYwOTtlLm1pZXVtcGFuc2lvc2tvcmVhbj0xMjY1NjtlLm1pZXVtcGFyZW5rb3JlYW49MTI4MDQ7ZS5taWV1bXBpZXVwa29yZWFuPTEyNjU0O2UubWlldW1zaW9za29yZWFuPTEyNjU1O2UubWloaXJhZ2FuYT0xMjQxNTtlLm1pa2F0YWthbmE9MTI1MTE7ZS5taWthdGFrYW5haGFsZndpZHRoPTY1NDI0O2UubWludXM9ODcyMjtlLm1pbnVzYmVsb3djbWI9ODAwO2UubWludXNjaXJjbGU9ODg1NDtlLm1pbnVzbW9kPTcyNztlLm1pbnVzcGx1cz04NzIzO2UubWludXRlPTgyNDI7ZS5taXJpYmFhcnVzcXVhcmU9MTMxMzA7ZS5taXJpc3F1YXJlPTEzMTI5O2UubWxvbmdsZWd0dXJuZWQ9NjI0O2UubWxzcXVhcmU9MTMyMDY7ZS5tbWN1YmVkc3F1YXJlPTEzMjE5O2UubW1vbm9zcGFjZT02NTM1NztlLm1tc3F1YXJlZHNxdWFyZT0xMzIxNTtlLm1vaGlyYWdhbmE9MTI0MTg7ZS5tb2htc3F1YXJlPTEzMjQ5O2UubW9rYXRha2FuYT0xMjUxNDtlLm1va2F0YWthbmFoYWxmd2lkdGg9NjU0Mjc7ZS5tb2xzcXVhcmU9MTMyNzA7ZS5tb21hdGhhaT0zNjE3O2UubW92ZXJzc3F1YXJlPTEzMjIzO2UubW92ZXJzc3F1YXJlZHNxdWFyZT0xMzIyNDtlLm1wYXJlbj05Mzg0O2UubXBhc3F1YXJlPTEzMjI3O2UubXNzcXVhcmU9MTMyMzU7ZS5tc3VwZXJpb3I9NjMyMTU7ZS5tdHVybmVkPTYyMztlLm11PTE4MTtlLm11MT0xODE7ZS5tdWFzcXVhcmU9MTMxODY7ZS5tdWNoZ3JlYXRlcj04ODExO2UubXVjaGxlc3M9ODgxMDtlLm11ZnNxdWFyZT0xMzE5NjtlLm11Z3JlZWs9OTU2O2UubXVnc3F1YXJlPTEzMTk3O2UubXVoaXJhZ2FuYT0xMjQxNjtlLm11a2F0YWthbmE9MTI1MTI7ZS5tdWthdGFrYW5haGFsZndpZHRoPTY1NDI1O2UubXVsc3F1YXJlPTEzMjA1O2UubXVsdGlwbHk9MjE1O2UubXVtc3F1YXJlPTEzMjExO2UubXVuYWhoZWJyZXc9MTQ0MztlLm11bmFobGVmdGhlYnJldz0xNDQzO2UubXVzaWNhbG5vdGU9OTgzNDtlLm11c2ljYWxub3RlZGJsPTk4MzU7ZS5tdXNpY2ZsYXRzaWduPTk4Mzc7ZS5tdXNpY3NoYXJwc2lnbj05ODM5O2UubXVzc3F1YXJlPTEzMjM0O2UubXV2c3F1YXJlPTEzMjM4O2UubXV3c3F1YXJlPTEzMjQ0O2UubXZtZWdhc3F1YXJlPTEzMjQxO2UubXZzcXVhcmU9MTMyMzk7ZS5td21lZ2FzcXVhcmU9MTMyNDc7ZS5td3NxdWFyZT0xMzI0NTtlLm49MTEwO2UubmFiZW5nYWxpPTI0NzI7ZS5uYWJsYT04NzExO2UubmFjdXRlPTMyNDtlLm5hZGV2YT0yMzQ0O2UubmFndWphcmF0aT0yNzI4O2UubmFndXJtdWtoaT0yNjAwO2UubmFoaXJhZ2FuYT0xMjM5NDtlLm5ha2F0YWthbmE9MTI0OTA7ZS5uYWthdGFrYW5haGFsZndpZHRoPTY1NDEzO2UubmFwb3N0cm9waGU9MzI5O2UubmFzcXVhcmU9MTMxODU7ZS5uYm9wb21vZm89MTI1NTU7ZS5uYnNwYWNlPTE2MDtlLm5jYXJvbj0zMjg7ZS5uY2VkaWxsYT0zMjY7ZS5uY2lyY2xlPTk0Mzc7ZS5uY2lyY3VtZmxleGJlbG93PTc3NTU7ZS5uY29tbWFhY2NlbnQ9MzI2O2UubmRvdGFjY2VudD03NzQ5O2UubmRvdGJlbG93PTc3NTE7ZS5uZWhpcmFnYW5hPTEyMzk3O2UubmVrYXRha2FuYT0xMjQ5MztlLm5la2F0YWthbmFoYWxmd2lkdGg9NjU0MTY7ZS5uZXdzaGVxZWxzaWduPTgzNjI7ZS5uZnNxdWFyZT0xMzE5NTtlLm5nYWJlbmdhbGk9MjQ1NztlLm5nYWRldmE9MjMyOTtlLm5nYWd1amFyYXRpPTI3MTM7ZS5uZ2FndXJtdWtoaT0yNTg1O2Uubmdvbmd1dGhhaT0zNTkxO2UubmhpcmFnYW5hPTEyNDM1O2Uubmhvb2tsZWZ0PTYyNjtlLm5ob29rcmV0cm9mbGV4PTYyNztlLm5pZXVuYWNpcmNsZWtvcmVhbj0xMjkxMTtlLm5pZXVuYXBhcmVua29yZWFuPTEyODE1O2UubmlldW5jaWV1Y2tvcmVhbj0xMjU5NztlLm5pZXVuY2lyY2xla29yZWFuPTEyODk3O2UubmlldW5oaWV1aGtvcmVhbj0xMjU5ODtlLm5pZXVua29yZWFuPTEyNTk2O2UubmlldW5wYW5zaW9za29yZWFuPTEyNjQ4O2UubmlldW5wYXJlbmtvcmVhbj0xMjgwMTtlLm5pZXVuc2lvc2tvcmVhbj0xMjY0NztlLm5pZXVudGlrZXV0a29yZWFuPTEyNjQ2O2UubmloaXJhZ2FuYT0xMjM5NTtlLm5pa2F0YWthbmE9MTI0OTE7ZS5uaWthdGFrYW5haGFsZndpZHRoPTY1NDE0O2UubmlraGFoaXRsZWZ0dGhhaT02MzY0MTtlLm5pa2hhaGl0dGhhaT0zNjYxO2UubmluZT01NztlLm5pbmVhcmFiaWM9MTY0MTtlLm5pbmViZW5nYWxpPTI1NDM7ZS5uaW5lY2lyY2xlPTkzMjA7ZS5uaW5lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEzMDtlLm5pbmVkZXZhPTI0MTU7ZS5uaW5lZ3VqYXJhdGk9Mjc5OTtlLm5pbmVndXJtdWtoaT0yNjcxO2UubmluZWhhY2thcmFiaWM9MTY0MTtlLm5pbmVoYW5nemhvdT0xMjMyOTtlLm5pbmVpZGVvZ3JhcGhpY3BhcmVuPTEyODQwO2UubmluZWluZmVyaW9yPTgzMjk7ZS5uaW5lbW9ub3NwYWNlPTY1MzA1O2UubmluZW9sZHN0eWxlPTYzMjg5O2UubmluZXBhcmVuPTkzNDA7ZS5uaW5lcGVyaW9kPTkzNjA7ZS5uaW5lcGVyc2lhbj0xNzg1O2UubmluZXJvbWFuPTg1Njg7ZS5uaW5lc3VwZXJpb3I9ODMxMztlLm5pbmV0ZWVuY2lyY2xlPTkzMzA7ZS5uaW5ldGVlbnBhcmVuPTkzNTA7ZS5uaW5ldGVlbnBlcmlvZD05MzcwO2UubmluZXRoYWk9MzY3MztlLm5qPTQ2MDtlLm5qZWN5cmlsbGljPTExMTQ7ZS5ua2F0YWthbmE9MTI1MzE7ZS5ua2F0YWthbmFoYWxmd2lkdGg9NjU0Mzc7ZS5ubGVncmlnaHRsb25nPTQxNDtlLm5saW5lYmVsb3c9Nzc1MztlLm5tb25vc3BhY2U9NjUzNTg7ZS5ubXNxdWFyZT0xMzIxMDtlLm5uYWJlbmdhbGk9MjQ2NztlLm5uYWRldmE9MjMzOTtlLm5uYWd1amFyYXRpPTI3MjM7ZS5ubmFndXJtdWtoaT0yNTk1O2Uubm5uYWRldmE9MjM0NTtlLm5vaGlyYWdhbmE9MTIzOTg7ZS5ub2thdGFrYW5hPTEyNDk0O2Uubm9rYXRha2FuYWhhbGZ3aWR0aD02NTQxNztlLm5vbmJyZWFraW5nc3BhY2U9MTYwO2Uubm9uZW50aGFpPTM2MDM7ZS5ub251dGhhaT0zNjA5O2Uubm9vbmFyYWJpYz0xNjA2O2Uubm9vbmZpbmFsYXJhYmljPTY1MjU0O2Uubm9vbmdodW5uYWFyYWJpYz0xNzIyO2Uubm9vbmdodW5uYWZpbmFsYXJhYmljPTY0NDE1O2Uubm9vbmluaXRpYWxhcmFiaWM9NjUyNTU7ZS5ub29uamVlbWluaXRpYWxhcmFiaWM9NjQ3MjI7ZS5ub29uamVlbWlzb2xhdGVkYXJhYmljPTY0NTg3O2Uubm9vbm1lZGlhbGFyYWJpYz02NTI1NjtlLm5vb25tZWVtaW5pdGlhbGFyYWJpYz02NDcyNTtlLm5vb25tZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1OTA7ZS5ub29ubm9vbmZpbmFsYXJhYmljPTY0NjUzO2Uubm90Y29udGFpbnM9ODcxNjtlLm5vdGVsZW1lbnQ9ODcxMztlLm5vdGVsZW1lbnRvZj04NzEzO2Uubm90ZXF1YWw9ODgwMDtlLm5vdGdyZWF0ZXI9ODgxNTtlLm5vdGdyZWF0ZXJub3JlcXVhbD04ODE3O2Uubm90Z3JlYXRlcm5vcmxlc3M9ODgyNTtlLm5vdGlkZW50aWNhbD04ODAyO2Uubm90bGVzcz04ODE0O2Uubm90bGVzc25vcmVxdWFsPTg4MTY7ZS5ub3RwYXJhbGxlbD04NzQyO2Uubm90cHJlY2VkZXM9ODgzMjtlLm5vdHN1YnNldD04ODM2O2Uubm90c3VjY2VlZHM9ODgzMztlLm5vdHN1cGVyc2V0PTg4Mzc7ZS5ub3dhcm1lbmlhbj0xMzk4O2UubnBhcmVuPTkzODU7ZS5uc3NxdWFyZT0xMzIzMztlLm5zdXBlcmlvcj04MzE5O2UubnRpbGRlPTI0MTtlLm51PTk1NztlLm51aGlyYWdhbmE9MTIzOTY7ZS5udWthdGFrYW5hPTEyNDkyO2UubnVrYXRha2FuYWhhbGZ3aWR0aD02NTQxNTtlLm51a3RhYmVuZ2FsaT0yNDkyO2UubnVrdGFkZXZhPTIzNjQ7ZS5udWt0YWd1amFyYXRpPTI3NDg7ZS5udWt0YWd1cm11a2hpPTI2MjA7ZS5udW1iZXJzaWduPTM1O2UubnVtYmVyc2lnbm1vbm9zcGFjZT02NTI4MztlLm51bWJlcnNpZ25zbWFsbD02NTExOTtlLm51bWVyYWxzaWduZ3JlZWs9ODg0O2UubnVtZXJhbHNpZ25sb3dlcmdyZWVrPTg4NTtlLm51bWVybz04NDcwO2UubnVuPTE1MDQ7ZS5udW5kYWdlc2g9NjQzMjA7ZS5udW5kYWdlc2hoZWJyZXc9NjQzMjA7ZS5udW5oZWJyZXc9MTUwNDtlLm52c3F1YXJlPTEzMjM3O2UubndzcXVhcmU9MTMyNDM7ZS5ueWFiZW5nYWxpPTI0NjI7ZS5ueWFkZXZhPTIzMzQ7ZS5ueWFndWphcmF0aT0yNzE4O2UubnlhZ3VybXVraGk9MjU5MDtlLm89MTExO2Uub2FjdXRlPTI0MztlLm9hbmd0aGFpPTM2Mjk7ZS5vYmFycmVkPTYyOTtlLm9iYXJyZWRjeXJpbGxpYz0xMjU3O2Uub2JhcnJlZGRpZXJlc2lzY3lyaWxsaWM9MTI1OTtlLm9iZW5nYWxpPTI0NTE7ZS5vYm9wb21vZm89MTI1NzE7ZS5vYnJldmU9MzM1O2Uub2NhbmRyYWRldmE9MjMyMTtlLm9jYW5kcmFndWphcmF0aT0yNzA1O2Uub2NhbmRyYXZvd2Vsc2lnbmRldmE9MjM3NztlLm9jYW5kcmF2b3dlbHNpZ25ndWphcmF0aT0yNzYxO2Uub2Nhcm9uPTQ2NjtlLm9jaXJjbGU9OTQzODtlLm9jaXJjdW1mbGV4PTI0NDtlLm9jaXJjdW1mbGV4YWN1dGU9Nzg4OTtlLm9jaXJjdW1mbGV4ZG90YmVsb3c9Nzg5NztlLm9jaXJjdW1mbGV4Z3JhdmU9Nzg5MTtlLm9jaXJjdW1mbGV4aG9va2Fib3ZlPTc4OTM7ZS5vY2lyY3VtZmxleHRpbGRlPTc4OTU7ZS5vY3lyaWxsaWM9MTA4NjtlLm9kYmxhY3V0ZT0zMzc7ZS5vZGJsZ3JhdmU9NTI1O2Uub2RldmE9MjMyMztlLm9kaWVyZXNpcz0yNDY7ZS5vZGllcmVzaXNjeXJpbGxpYz0xMjU1O2Uub2RvdGJlbG93PTc4ODU7ZS5vZT0zMzk7ZS5vZWtvcmVhbj0xMjYzNDtlLm9nb25laz03MzE7ZS5vZ29uZWtjbWI9ODA4O2Uub2dyYXZlPTI0MjtlLm9ndWphcmF0aT0yNzA3O2Uub2hhcm1lbmlhbj0xNDEzO2Uub2hpcmFnYW5hPTEyMzYyO2Uub2hvb2thYm92ZT03ODg3O2Uub2hvcm49NDE3O2Uub2hvcm5hY3V0ZT03ODk5O2Uub2hvcm5kb3RiZWxvdz03OTA3O2Uub2hvcm5ncmF2ZT03OTAxO2Uub2hvcm5ob29rYWJvdmU9NzkwMztlLm9ob3JudGlsZGU9NzkwNTtlLm9odW5nYXJ1bWxhdXQ9MzM3O2Uub2k9NDE5O2Uub2ludmVydGVkYnJldmU9NTI3O2Uub2thdGFrYW5hPTEyNDU4O2Uub2thdGFrYW5haGFsZndpZHRoPTY1Mzk3O2Uub2tvcmVhbj0xMjYzMTtlLm9sZWhlYnJldz0xNDUxO2Uub21hY3Jvbj0zMzM7ZS5vbWFjcm9uYWN1dGU9Nzc2MztlLm9tYWNyb25ncmF2ZT03NzYxO2Uub21kZXZhPTIzODQ7ZS5vbWVnYT05Njk7ZS5vbWVnYTE9OTgyO2Uub21lZ2FjeXJpbGxpYz0xMTIxO2Uub21lZ2FsYXRpbmNsb3NlZD02MzE7ZS5vbWVnYXJvdW5kY3lyaWxsaWM9MTE0NztlLm9tZWdhdGl0bG9jeXJpbGxpYz0xMTQ5O2Uub21lZ2F0b25vcz05NzQ7ZS5vbWd1amFyYXRpPTI3Njg7ZS5vbWljcm9uPTk1OTtlLm9taWNyb250b25vcz05NzI7ZS5vbW9ub3NwYWNlPTY1MzU5O2Uub25lPTQ5O2Uub25lYXJhYmljPTE2MzM7ZS5vbmViZW5nYWxpPTI1MzU7ZS5vbmVjaXJjbGU9OTMxMjtlLm9uZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjI7ZS5vbmVkZXZhPTI0MDc7ZS5vbmVkb3RlbmxlYWRlcj04MjI4O2Uub25lZWlnaHRoPTg1Mzk7ZS5vbmVmaXR0ZWQ9NjMxOTY7ZS5vbmVndWphcmF0aT0yNzkxO2Uub25lZ3VybXVraGk9MjY2MztlLm9uZWhhY2thcmFiaWM9MTYzMztlLm9uZWhhbGY9MTg5O2Uub25laGFuZ3pob3U9MTIzMjE7ZS5vbmVpZGVvZ3JhcGhpY3BhcmVuPTEyODMyO2Uub25laW5mZXJpb3I9ODMyMTtlLm9uZW1vbm9zcGFjZT02NTI5NztlLm9uZW51bWVyYXRvcmJlbmdhbGk9MjU0ODtlLm9uZW9sZHN0eWxlPTYzMjgxO2Uub25lcGFyZW49OTMzMjtlLm9uZXBlcmlvZD05MzUyO2Uub25lcGVyc2lhbj0xNzc3O2Uub25lcXVhcnRlcj0xODg7ZS5vbmVyb21hbj04NTYwO2Uub25lc3VwZXJpb3I9MTg1O2Uub25ldGhhaT0zNjY1O2Uub25ldGhpcmQ9ODUzMTtlLm9vZ29uZWs9NDkxO2Uub29nb25la21hY3Jvbj00OTM7ZS5vb2d1cm11a2hpPTI1Nzk7ZS5vb21hdHJhZ3VybXVraGk9MjYzNTtlLm9vcGVuPTU5NjtlLm9wYXJlbj05Mzg2O2Uub3BlbmJ1bGxldD05NzAyO2Uub3B0aW9uPTg5OTc7ZS5vcmRmZW1pbmluZT0xNzA7ZS5vcmRtYXNjdWxpbmU9MTg2O2Uub3J0aG9nb25hbD04NzM1O2Uub3Nob3J0ZGV2YT0yMzIyO2Uub3Nob3J0dm93ZWxzaWduZGV2YT0yMzc4O2Uub3NsYXNoPTI0ODtlLm9zbGFzaGFjdXRlPTUxMTtlLm9zbWFsbGhpcmFnYW5hPTEyMzYxO2Uub3NtYWxsa2F0YWthbmE9MTI0NTc7ZS5vc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NztlLm9zdHJva2VhY3V0ZT01MTE7ZS5vc3VwZXJpb3I9NjMyMTY7ZS5vdGN5cmlsbGljPTExNTE7ZS5vdGlsZGU9MjQ1O2Uub3RpbGRlYWN1dGU9Nzc1NztlLm90aWxkZWRpZXJlc2lzPTc3NTk7ZS5vdWJvcG9tb2ZvPTEyNTc3O2Uub3ZlcmxpbmU9ODI1NDtlLm92ZXJsaW5lY2VudGVybGluZT02NTA5ODtlLm92ZXJsaW5lY21iPTc3MztlLm92ZXJsaW5lZGFzaGVkPTY1MDk3O2Uub3ZlcmxpbmVkYmx3YXZ5PTY1MTAwO2Uub3ZlcmxpbmV3YXZ5PTY1MDk5O2Uub3ZlcnNjb3JlPTE3NTtlLm92b3dlbHNpZ25iZW5nYWxpPTI1MDc7ZS5vdm93ZWxzaWduZGV2YT0yMzc5O2Uub3Zvd2Vsc2lnbmd1amFyYXRpPTI3NjM7ZS5wPTExMjtlLnBhYW1wc3NxdWFyZT0xMzE4NDtlLnBhYXNlbnRvc3F1YXJlPTEzMDk5O2UucGFiZW5nYWxpPTI0NzQ7ZS5wYWN1dGU9Nzc2NTtlLnBhZGV2YT0yMzQ2O2UucGFnZWRvd249ODY3MTtlLnBhZ2V1cD04NjcwO2UucGFndWphcmF0aT0yNzMwO2UucGFndXJtdWtoaT0yNjAyO2UucGFoaXJhZ2FuYT0xMjQwMTtlLnBhaXlhbm5vaXRoYWk9MzYzMTtlLnBha2F0YWthbmE9MTI0OTc7ZS5wYWxhdGFsaXphdGlvbmN5cmlsbGljY21iPTExNTY7ZS5wYWxvY2hrYWN5cmlsbGljPTEyMTY7ZS5wYW5zaW9za29yZWFuPTEyNjcxO2UucGFyYWdyYXBoPTE4MjtlLnBhcmFsbGVsPTg3NDE7ZS5wYXJlbmxlZnQ9NDA7ZS5wYXJlbmxlZnRhbHRvbmVhcmFiaWM9NjQ4MzA7ZS5wYXJlbmxlZnRidD02MzcyNTtlLnBhcmVubGVmdGV4PTYzNzI0O2UucGFyZW5sZWZ0aW5mZXJpb3I9ODMzMztlLnBhcmVubGVmdG1vbm9zcGFjZT02NTI4ODtlLnBhcmVubGVmdHNtYWxsPTY1MTEzO2UucGFyZW5sZWZ0c3VwZXJpb3I9ODMxNztlLnBhcmVubGVmdHRwPTYzNzIzO2UucGFyZW5sZWZ0dmVydGljYWw9NjUwNzc7ZS5wYXJlbnJpZ2h0PTQxO2UucGFyZW5yaWdodGFsdG9uZWFyYWJpYz02NDgzMTtlLnBhcmVucmlnaHRidD02MzczNjtlLnBhcmVucmlnaHRleD02MzczNTtlLnBhcmVucmlnaHRpbmZlcmlvcj04MzM0O2UucGFyZW5yaWdodG1vbm9zcGFjZT02NTI4OTtlLnBhcmVucmlnaHRzbWFsbD02NTExNDtlLnBhcmVucmlnaHRzdXBlcmlvcj04MzE4O2UucGFyZW5yaWdodHRwPTYzNzM0O2UucGFyZW5yaWdodHZlcnRpY2FsPTY1MDc4O2UucGFydGlhbGRpZmY9ODcwNjtlLnBhc2VxaGVicmV3PTE0NzI7ZS5wYXNodGFoZWJyZXc9MTQzMztlLnBhc3F1YXJlPTEzMjI1O2UucGF0YWg9MTQ2MztlLnBhdGFoMTE9MTQ2MztlLnBhdGFoMWQ9MTQ2MztlLnBhdGFoMmE9MTQ2MztlLnBhdGFoaGVicmV3PTE0NjM7ZS5wYXRhaG5hcnJvd2hlYnJldz0xNDYzO2UucGF0YWhxdWFydGVyaGVicmV3PTE0NjM7ZS5wYXRhaHdpZGVoZWJyZXc9MTQ2MztlLnBhemVyaGVicmV3PTE0NDE7ZS5wYm9wb21vZm89MTI1NTA7ZS5wY2lyY2xlPTk0Mzk7ZS5wZG90YWNjZW50PTc3Njc7ZS5wZT0xNTA4O2UucGVjeXJpbGxpYz0xMDg3O2UucGVkYWdlc2g9NjQzMjQ7ZS5wZWRhZ2VzaGhlYnJldz02NDMyNDtlLnBlZXppc3F1YXJlPTEzMTE1O2UucGVmaW5hbGRhZ2VzaGhlYnJldz02NDMyMztlLnBlaGFyYWJpYz0xNjYyO2UucGVoYXJtZW5pYW49MTQwMjtlLnBlaGVicmV3PTE1MDg7ZS5wZWhmaW5hbGFyYWJpYz02NDM0MztlLnBlaGluaXRpYWxhcmFiaWM9NjQzNDQ7ZS5wZWhpcmFnYW5hPTEyNDEwO2UucGVobWVkaWFsYXJhYmljPTY0MzQ1O2UucGVrYXRha2FuYT0xMjUwNjtlLnBlbWlkZGxlaG9va2N5cmlsbGljPTExOTE7ZS5wZXJhZmVoZWJyZXc9NjQzMzQ7ZS5wZXJjZW50PTM3O2UucGVyY2VudGFyYWJpYz0xNjQyO2UucGVyY2VudG1vbm9zcGFjZT02NTI4NTtlLnBlcmNlbnRzbWFsbD02NTEzMDtlLnBlcmlvZD00NjtlLnBlcmlvZGFybWVuaWFuPTE0MTc7ZS5wZXJpb2RjZW50ZXJlZD0xODM7ZS5wZXJpb2RoYWxmd2lkdGg9NjUzNzc7ZS5wZXJpb2RpbmZlcmlvcj02MzIwNztlLnBlcmlvZG1vbm9zcGFjZT02NTI5NDtlLnBlcmlvZHNtYWxsPTY1MTA2O2UucGVyaW9kc3VwZXJpb3I9NjMyMDg7ZS5wZXJpc3BvbWVuaWdyZWVrY21iPTgzNDtlLnBlcnBlbmRpY3VsYXI9ODg2OTtlLnBlcnRob3VzYW5kPTgyNDA7ZS5wZXNldGE9ODM1OTtlLnBmc3F1YXJlPTEzMTk0O2UucGhhYmVuZ2FsaT0yNDc1O2UucGhhZGV2YT0yMzQ3O2UucGhhZ3VqYXJhdGk9MjczMTtlLnBoYWd1cm11a2hpPTI2MDM7ZS5waGk9OTY2O2UucGhpMT05ODE7ZS5waGlldXBoYWNpcmNsZWtvcmVhbj0xMjkyMjtlLnBoaWV1cGhhcGFyZW5rb3JlYW49MTI4MjY7ZS5waGlldXBoY2lyY2xla29yZWFuPTEyOTA4O2UucGhpZXVwaGtvcmVhbj0xMjYyMTtlLnBoaWV1cGhwYXJlbmtvcmVhbj0xMjgxMjtlLnBoaWxhdGluPTYzMjtlLnBoaW50aHV0aGFpPTM2NDI7ZS5waGlzeW1ib2xncmVlaz05ODE7ZS5waG9vaz00MjE7ZS5waG9waGFudGhhaT0zNjE0O2UucGhvcGh1bmd0aGFpPTM2MTI7ZS5waG9zYW1waGFvdGhhaT0zNjE2O2UucGk9OTYwO2UucGlldXBhY2lyY2xla29yZWFuPTEyOTE1O2UucGlldXBhcGFyZW5rb3JlYW49MTI4MTk7ZS5waWV1cGNpZXVja29yZWFuPTEyNjYyO2UucGlldXBjaXJjbGVrb3JlYW49MTI5MDE7ZS5waWV1cGtpeWVva2tvcmVhbj0xMjY1ODtlLnBpZXVwa29yZWFuPTEyNjEwO2UucGlldXBwYXJlbmtvcmVhbj0xMjgwNTtlLnBpZXVwc2lvc2tpeWVva2tvcmVhbj0xMjY2MDtlLnBpZXVwc2lvc2tvcmVhbj0xMjYxMjtlLnBpZXVwc2lvc3Rpa2V1dGtvcmVhbj0xMjY2MTtlLnBpZXVwdGhpZXV0aGtvcmVhbj0xMjY2MztlLnBpZXVwdGlrZXV0a29yZWFuPTEyNjU5O2UucGloaXJhZ2FuYT0xMjQwNDtlLnBpa2F0YWthbmE9MTI1MDA7ZS5waXN5bWJvbGdyZWVrPTk4MjtlLnBpd3Jhcm1lbmlhbj0xNDExO2UucGxhbmNrb3ZlcjJwaT04NDYzO2UucGxhbmNrb3ZlcjJwaTE9ODQ2MztlLnBsdXM9NDM7ZS5wbHVzYmVsb3djbWI9Nzk5O2UucGx1c2NpcmNsZT04ODUzO2UucGx1c21pbnVzPTE3NztlLnBsdXNtb2Q9NzI2O2UucGx1c21vbm9zcGFjZT02NTI5MTtlLnBsdXNzbWFsbD02NTEyMjtlLnBsdXNzdXBlcmlvcj04MzE0O2UucG1vbm9zcGFjZT02NTM2MDtlLnBtc3F1YXJlPTEzMjcyO2UucG9oaXJhZ2FuYT0xMjQxMztlLnBvaW50aW5naW5kZXhkb3dud2hpdGU9OTc1OTtlLnBvaW50aW5naW5kZXhsZWZ0d2hpdGU9OTc1NjtlLnBvaW50aW5naW5kZXhyaWdodHdoaXRlPTk3NTg7ZS5wb2ludGluZ2luZGV4dXB3aGl0ZT05NzU3O2UucG9rYXRha2FuYT0xMjUwOTtlLnBvcGxhdGhhaT0zNjExO2UucG9zdGFsbWFyaz0xMjMwNjtlLnBvc3RhbG1hcmtmYWNlPTEyMzIwO2UucHBhcmVuPTkzODc7ZS5wcmVjZWRlcz04ODI2O2UucHJlc2NyaXB0aW9uPTg0Nzg7ZS5wcmltZW1vZD02OTc7ZS5wcmltZXJldmVyc2VkPTgyNDU7ZS5wcm9kdWN0PTg3MTk7ZS5wcm9qZWN0aXZlPTg5NjU7ZS5wcm9sb25nZWRrYW5hPTEyNTQwO2UucHJvcGVsbG9yPTg5ODQ7ZS5wcm9wZXJzdWJzZXQ9ODgzNDtlLnByb3BlcnN1cGVyc2V0PTg4MzU7ZS5wcm9wb3J0aW9uPTg3NTk7ZS5wcm9wb3J0aW9uYWw9ODczMztlLnBzaT05Njg7ZS5wc2ljeXJpbGxpYz0xMTM3O2UucHNpbGlwbmV1bWF0YWN5cmlsbGljY21iPTExNTg7ZS5wc3NxdWFyZT0xMzIzMjtlLnB1aGlyYWdhbmE9MTI0MDc7ZS5wdWthdGFrYW5hPTEyNTAzO2UucHZzcXVhcmU9MTMyMzY7ZS5wd3NxdWFyZT0xMzI0MjtlLnE9MTEzO2UucWFkZXZhPTIzOTI7ZS5xYWRtYWhlYnJldz0xNDQ4O2UucWFmYXJhYmljPTE2MDI7ZS5xYWZmaW5hbGFyYWJpYz02NTIzODtlLnFhZmluaXRpYWxhcmFiaWM9NjUyMzk7ZS5xYWZtZWRpYWxhcmFiaWM9NjUyNDA7ZS5xYW1hdHM9MTQ2NDtlLnFhbWF0czEwPTE0NjQ7ZS5xYW1hdHMxYT0xNDY0O2UucWFtYXRzMWM9MTQ2NDtlLnFhbWF0czI3PTE0NjQ7ZS5xYW1hdHMyOT0xNDY0O2UucWFtYXRzMzM9MTQ2NDtlLnFhbWF0c2RlPTE0NjQ7ZS5xYW1hdHNoZWJyZXc9MTQ2NDtlLnFhbWF0c25hcnJvd2hlYnJldz0xNDY0O2UucWFtYXRzcWF0YW5oZWJyZXc9MTQ2NDtlLnFhbWF0c3FhdGFubmFycm93aGVicmV3PTE0NjQ7ZS5xYW1hdHNxYXRhbnF1YXJ0ZXJoZWJyZXc9MTQ2NDtlLnFhbWF0c3FhdGFud2lkZWhlYnJldz0xNDY0O2UucWFtYXRzcXVhcnRlcmhlYnJldz0xNDY0O2UucWFtYXRzd2lkZWhlYnJldz0xNDY0O2UucWFybmV5cGFyYWhlYnJldz0xNDM5O2UucWJvcG9tb2ZvPTEyNTYxO2UucWNpcmNsZT05NDQwO2UucWhvb2s9NjcyO2UucW1vbm9zcGFjZT02NTM2MTtlLnFvZj0xNTExO2UucW9mZGFnZXNoPTY0MzI3O2UucW9mZGFnZXNoaGVicmV3PTY0MzI3O2UucW9maGVicmV3PTE1MTE7ZS5xcGFyZW49OTM4ODtlLnF1YXJ0ZXJub3RlPTk4MzM7ZS5xdWJ1dHM9MTQ2NztlLnF1YnV0czE4PTE0Njc7ZS5xdWJ1dHMyNT0xNDY3O2UucXVidXRzMzE9MTQ2NztlLnF1YnV0c2hlYnJldz0xNDY3O2UucXVidXRzbmFycm93aGVicmV3PTE0Njc7ZS5xdWJ1dHNxdWFydGVyaGVicmV3PTE0Njc7ZS5xdWJ1dHN3aWRlaGVicmV3PTE0Njc7ZS5xdWVzdGlvbj02MztlLnF1ZXN0aW9uYXJhYmljPTE1Njc7ZS5xdWVzdGlvbmFybWVuaWFuPTEzNzQ7ZS5xdWVzdGlvbmRvd249MTkxO2UucXVlc3Rpb25kb3duc21hbGw9NjM0MjM7ZS5xdWVzdGlvbmdyZWVrPTg5NDtlLnF1ZXN0aW9ubW9ub3NwYWNlPTY1MzExO2UucXVlc3Rpb25zbWFsbD02MzI5NTtlLnF1b3RlZGJsPTM0O2UucXVvdGVkYmxiYXNlPTgyMjI7ZS5xdW90ZWRibGxlZnQ9ODIyMDtlLnF1b3RlZGJsbW9ub3NwYWNlPTY1MjgyO2UucXVvdGVkYmxwcmltZT0xMjMxODtlLnF1b3RlZGJscHJpbWVyZXZlcnNlZD0xMjMxNztlLnF1b3RlZGJscmlnaHQ9ODIyMTtlLnF1b3RlbGVmdD04MjE2O2UucXVvdGVsZWZ0cmV2ZXJzZWQ9ODIxOTtlLnF1b3RlcmV2ZXJzZWQ9ODIxOTtlLnF1b3RlcmlnaHQ9ODIxNztlLnF1b3RlcmlnaHRuPTMyOTtlLnF1b3Rlc2luZ2xiYXNlPTgyMTg7ZS5xdW90ZXNpbmdsZT0zOTtlLnF1b3Rlc2luZ2xlbW9ub3NwYWNlPTY1Mjg3O2Uucj0xMTQ7ZS5yYWFybWVuaWFuPTE0MDQ7ZS5yYWJlbmdhbGk9MjQ4MDtlLnJhY3V0ZT0zNDE7ZS5yYWRldmE9MjM1MjtlLnJhZGljYWw9ODczMDtlLnJhZGljYWxleD02MzcxNztlLnJhZG92ZXJzc3F1YXJlPTEzMjMwO2UucmFkb3ZlcnNzcXVhcmVkc3F1YXJlPTEzMjMxO2UucmFkc3F1YXJlPTEzMjI5O2UucmFmZT0xNDcxO2UucmFmZWhlYnJldz0xNDcxO2UucmFndWphcmF0aT0yNzM2O2UucmFndXJtdWtoaT0yNjA4O2UucmFoaXJhZ2FuYT0xMjQyNTtlLnJha2F0YWthbmE9MTI1MjE7ZS5yYWthdGFrYW5haGFsZndpZHRoPTY1NDMxO2UucmFsb3dlcmRpYWdvbmFsYmVuZ2FsaT0yNTQ1O2UucmFtaWRkbGVkaWFnb25hbGJlbmdhbGk9MjU0NDtlLnJhbXNob3JuPTYxMjtlLnJhdGlvPTg3NTg7ZS5yYm9wb21vZm89MTI1NjY7ZS5yY2Fyb249MzQ1O2UucmNlZGlsbGE9MzQzO2UucmNpcmNsZT05NDQxO2UucmNvbW1hYWNjZW50PTM0MztlLnJkYmxncmF2ZT01Mjk7ZS5yZG90YWNjZW50PTc3Njk7ZS5yZG90YmVsb3c9Nzc3MTtlLnJkb3RiZWxvd21hY3Jvbj03NzczO2UucmVmZXJlbmNlbWFyaz04MjUxO2UucmVmbGV4c3Vic2V0PTg4Mzg7ZS5yZWZsZXhzdXBlcnNldD04ODM5O2UucmVnaXN0ZXJlZD0xNzQ7ZS5yZWdpc3RlcnNhbnM9NjM3MjA7ZS5yZWdpc3RlcnNlcmlmPTYzMTk0O2UucmVoYXJhYmljPTE1ODU7ZS5yZWhhcm1lbmlhbj0xNDA4O2UucmVoZmluYWxhcmFiaWM9NjUxOTg7ZS5yZWhpcmFnYW5hPTEyNDI4O2UucmVrYXRha2FuYT0xMjUyNDtlLnJla2F0YWthbmFoYWxmd2lkdGg9NjU0MzQ7ZS5yZXNoPTE1MTI7ZS5yZXNoZGFnZXNoaGVicmV3PTY0MzI4O2UucmVzaGhlYnJldz0xNTEyO2UucmV2ZXJzZWR0aWxkZT04NzY1O2UucmV2aWFoZWJyZXc9MTQzMTtlLnJldmlhbXVncmFzaGhlYnJldz0xNDMxO2UucmV2bG9naWNhbG5vdD04OTc2O2UucmZpc2hob29rPTYzODtlLnJmaXNoaG9va3JldmVyc2VkPTYzOTtlLnJoYWJlbmdhbGk9MjUyNTtlLnJoYWRldmE9MjM5NztlLnJobz05NjE7ZS5yaG9vaz02Mzc7ZS5yaG9va3R1cm5lZD02MzU7ZS5yaG9va3R1cm5lZHN1cGVyaW9yPTY5MztlLnJob3N5bWJvbGdyZWVrPTEwMDk7ZS5yaG90aWNob29rbW9kPTczNDtlLnJpZXVsYWNpcmNsZWtvcmVhbj0xMjkxMztlLnJpZXVsYXBhcmVua29yZWFuPTEyODE3O2UucmlldWxjaXJjbGVrb3JlYW49MTI4OTk7ZS5yaWV1bGhpZXVoa29yZWFuPTEyNjA4O2UucmlldWxraXllb2trb3JlYW49MTI2MDI7ZS5yaWV1bGtpeWVva3Npb3Nrb3JlYW49MTI2NDk7ZS5yaWV1bGtvcmVhbj0xMjYwMTtlLnJpZXVsbWlldW1rb3JlYW49MTI2MDM7ZS5yaWV1bHBhbnNpb3Nrb3JlYW49MTI2NTI7ZS5yaWV1bHBhcmVua29yZWFuPTEyODAzO2UucmlldWxwaGlldXBoa29yZWFuPTEyNjA3O2UucmlldWxwaWV1cGtvcmVhbj0xMjYwNDtlLnJpZXVscGlldXBzaW9za29yZWFuPTEyNjUxO2UucmlldWxzaW9za29yZWFuPTEyNjA1O2UucmlldWx0aGlldXRoa29yZWFuPTEyNjA2O2UucmlldWx0aWtldXRrb3JlYW49MTI2NTA7ZS5yaWV1bHllb3JpbmhpZXVoa29yZWFuPTEyNjUzO2UucmlnaHRhbmdsZT04NzM1O2UucmlnaHR0YWNrYmVsb3djbWI9NzkzO2UucmlnaHR0cmlhbmdsZT04ODk1O2UucmloaXJhZ2FuYT0xMjQyNjtlLnJpa2F0YWthbmE9MTI1MjI7ZS5yaWthdGFrYW5haGFsZndpZHRoPTY1NDMyO2UucmluZz03MzA7ZS5yaW5nYmVsb3djbWI9ODA1O2UucmluZ2NtYj03Nzg7ZS5yaW5naGFsZmxlZnQ9NzAzO2UucmluZ2hhbGZsZWZ0YXJtZW5pYW49MTM2OTtlLnJpbmdoYWxmbGVmdGJlbG93Y21iPTc5NjtlLnJpbmdoYWxmbGVmdGNlbnRlcmVkPTcyMztlLnJpbmdoYWxmcmlnaHQ9NzAyO2UucmluZ2hhbGZyaWdodGJlbG93Y21iPTgyNTtlLnJpbmdoYWxmcmlnaHRjZW50ZXJlZD03MjI7ZS5yaW52ZXJ0ZWRicmV2ZT01MzE7ZS5yaXR0b3J1c3F1YXJlPTEzMTM3O2UucmxpbmViZWxvdz03Nzc1O2UucmxvbmdsZWc9NjM2O2UucmxvbmdsZWd0dXJuZWQ9NjM0O2Uucm1vbm9zcGFjZT02NTM2MjtlLnJvaGlyYWdhbmE9MTI0Mjk7ZS5yb2thdGFrYW5hPTEyNTI1O2Uucm9rYXRha2FuYWhhbGZ3aWR0aD02NTQzNTtlLnJvcnVhdGhhaT0zNjE5O2UucnBhcmVuPTkzODk7ZS5ycmFiZW5nYWxpPTI1MjQ7ZS5ycmFkZXZhPTIzNTM7ZS5ycmFndXJtdWtoaT0yNjUyO2UucnJlaGFyYWJpYz0xNjgxO2UucnJlaGZpbmFsYXJhYmljPTY0Mzk3O2UucnJ2b2NhbGljYmVuZ2FsaT0yNTI4O2UucnJ2b2NhbGljZGV2YT0yNDAwO2UucnJ2b2NhbGljZ3VqYXJhdGk9Mjc4NDtlLnJydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjUwMDtlLnJydm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjM3MjtlLnJydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpPTI3NTY7ZS5yc3VwZXJpb3I9NjMyMTc7ZS5ydGJsb2NrPTk2MTY7ZS5ydHVybmVkPTYzMztlLnJ0dXJuZWRzdXBlcmlvcj02OTI7ZS5ydWhpcmFnYW5hPTEyNDI3O2UucnVrYXRha2FuYT0xMjUyMztlLnJ1a2F0YWthbmFoYWxmd2lkdGg9NjU0MzM7ZS5ydXBlZW1hcmtiZW5nYWxpPTI1NDY7ZS5ydXBlZXNpZ25iZW5nYWxpPTI1NDc7ZS5ydXBpYWg9NjMxOTc7ZS5ydXRoYWk9MzYyMDtlLnJ2b2NhbGljYmVuZ2FsaT0yNDQzO2UucnZvY2FsaWNkZXZhPTIzMTU7ZS5ydm9jYWxpY2d1amFyYXRpPTI2OTk7ZS5ydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjQ5OTtlLnJ2b2NhbGljdm93ZWxzaWduZGV2YT0yMzcxO2UucnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aT0yNzU1O2Uucz0xMTU7ZS5zYWJlbmdhbGk9MjQ4ODtlLnNhY3V0ZT0zNDc7ZS5zYWN1dGVkb3RhY2NlbnQ9Nzc4MTtlLnNhZGFyYWJpYz0xNTg5O2Uuc2FkZXZhPTIzNjA7ZS5zYWRmaW5hbGFyYWJpYz02NTIxMDtlLnNhZGluaXRpYWxhcmFiaWM9NjUyMTE7ZS5zYWRtZWRpYWxhcmFiaWM9NjUyMTI7ZS5zYWd1amFyYXRpPTI3NDQ7ZS5zYWd1cm11a2hpPTI2MTY7ZS5zYWhpcmFnYW5hPTEyMzczO2Uuc2FrYXRha2FuYT0xMjQ2OTtlLnNha2F0YWthbmFoYWxmd2lkdGg9NjU0MDM7ZS5zYWxsYWxsYWhvdWFsYXloZXdhc2FsbGFtYXJhYmljPTY1MDE4O2Uuc2FtZWtoPTE1MDU7ZS5zYW1la2hkYWdlc2g9NjQzMjE7ZS5zYW1la2hkYWdlc2hoZWJyZXc9NjQzMjE7ZS5zYW1la2hoZWJyZXc9MTUwNTtlLnNhcmFhYXRoYWk9MzYzNDtlLnNhcmFhZXRoYWk9MzY0OTtlLnNhcmFhaW1haW1hbGFpdGhhaT0zNjUyO2Uuc2FyYWFpbWFpbXVhbnRoYWk9MzY1MTtlLnNhcmFhbXRoYWk9MzYzNTtlLnNhcmFhdGhhaT0zNjMyO2Uuc2FyYWV0aGFpPTM2NDg7ZS5zYXJhaWlsZWZ0dGhhaT02MzYyMjtlLnNhcmFpaXRoYWk9MzYzNztlLnNhcmFpbGVmdHRoYWk9NjM2MjE7ZS5zYXJhaXRoYWk9MzYzNjtlLnNhcmFvdGhhaT0zNjUwO2Uuc2FyYXVlZWxlZnR0aGFpPTYzNjI0O2Uuc2FyYXVlZXRoYWk9MzYzOTtlLnNhcmF1ZWxlZnR0aGFpPTYzNjIzO2Uuc2FyYXVldGhhaT0zNjM4O2Uuc2FyYXV0aGFpPTM2NDA7ZS5zYXJhdXV0aGFpPTM2NDE7ZS5zYm9wb21vZm89MTI1Njk7ZS5zY2Fyb249MzUzO2Uuc2Nhcm9uZG90YWNjZW50PTc3ODM7ZS5zY2VkaWxsYT0zNTE7ZS5zY2h3YT02MDE7ZS5zY2h3YWN5cmlsbGljPTEyNDE7ZS5zY2h3YWRpZXJlc2lzY3lyaWxsaWM9MTI0MztlLnNjaHdhaG9vaz02MDI7ZS5zY2lyY2xlPTk0NDI7ZS5zY2lyY3VtZmxleD0zNDk7ZS5zY29tbWFhY2NlbnQ9NTM3O2Uuc2RvdGFjY2VudD03Nzc3O2Uuc2RvdGJlbG93PTc3Nzk7ZS5zZG90YmVsb3dkb3RhY2NlbnQ9Nzc4NTtlLnNlYWd1bGxiZWxvd2NtYj04Mjg7ZS5zZWNvbmQ9ODI0MztlLnNlY29uZHRvbmVjaGluZXNlPTcxNDtlLnNlY3Rpb249MTY3O2Uuc2VlbmFyYWJpYz0xNTg3O2Uuc2VlbmZpbmFsYXJhYmljPTY1MjAyO2Uuc2VlbmluaXRpYWxhcmFiaWM9NjUyMDM7ZS5zZWVubWVkaWFsYXJhYmljPTY1MjA0O2Uuc2Vnb2w9MTQ2MjtlLnNlZ29sMTM9MTQ2MjtlLnNlZ29sMWY9MTQ2MjtlLnNlZ29sMmM9MTQ2MjtlLnNlZ29saGVicmV3PTE0NjI7ZS5zZWdvbG5hcnJvd2hlYnJldz0xNDYyO2Uuc2Vnb2xxdWFydGVyaGVicmV3PTE0NjI7ZS5zZWdvbHRhaGVicmV3PTE0MjY7ZS5zZWdvbHdpZGVoZWJyZXc9MTQ2MjtlLnNlaGFybWVuaWFuPTE0MDU7ZS5zZWhpcmFnYW5hPTEyMzc5O2Uuc2VrYXRha2FuYT0xMjQ3NTtlLnNla2F0YWthbmFoYWxmd2lkdGg9NjU0MDY7ZS5zZW1pY29sb249NTk7ZS5zZW1pY29sb25hcmFiaWM9MTU2MztlLnNlbWljb2xvbm1vbm9zcGFjZT02NTMwNztlLnNlbWljb2xvbnNtYWxsPTY1MTA4O2Uuc2VtaXZvaWNlZG1hcmtrYW5hPTEyNDQ0O2Uuc2VtaXZvaWNlZG1hcmtrYW5haGFsZndpZHRoPTY1NDM5O2Uuc2VudGlzcXVhcmU9MTMwOTA7ZS5zZW50b3NxdWFyZT0xMzA5MTtlLnNldmVuPTU1O2Uuc2V2ZW5hcmFiaWM9MTYzOTtlLnNldmVuYmVuZ2FsaT0yNTQxO2Uuc2V2ZW5jaXJjbGU9OTMxODtlLnNldmVuY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyODtlLnNldmVuZGV2YT0yNDEzO2Uuc2V2ZW5laWdodGhzPTg1NDI7ZS5zZXZlbmd1amFyYXRpPTI3OTc7ZS5zZXZlbmd1cm11a2hpPTI2Njk7ZS5zZXZlbmhhY2thcmFiaWM9MTYzOTtlLnNldmVuaGFuZ3pob3U9MTIzMjc7ZS5zZXZlbmlkZW9ncmFwaGljcGFyZW49MTI4Mzg7ZS5zZXZlbmluZmVyaW9yPTgzMjc7ZS5zZXZlbm1vbm9zcGFjZT02NTMwMztlLnNldmVub2xkc3R5bGU9NjMyODc7ZS5zZXZlbnBhcmVuPTkzMzg7ZS5zZXZlbnBlcmlvZD05MzU4O2Uuc2V2ZW5wZXJzaWFuPTE3ODM7ZS5zZXZlbnJvbWFuPTg1NjY7ZS5zZXZlbnN1cGVyaW9yPTgzMTE7ZS5zZXZlbnRlZW5jaXJjbGU9OTMyODtlLnNldmVudGVlbnBhcmVuPTkzNDg7ZS5zZXZlbnRlZW5wZXJpb2Q9OTM2ODtlLnNldmVudGhhaT0zNjcxO2Uuc2Z0aHlwaGVuPTE3MztlLnNoYWFybWVuaWFuPTEzOTk7ZS5zaGFiZW5nYWxpPTI0ODY7ZS5zaGFjeXJpbGxpYz0xMDk2O2Uuc2hhZGRhYXJhYmljPTE2MTc7ZS5zaGFkZGFkYW1tYWFyYWJpYz02NDYwOTtlLnNoYWRkYWRhbW1hdGFuYXJhYmljPTY0NjA2O2Uuc2hhZGRhZmF0aGFhcmFiaWM9NjQ2MDg7ZS5zaGFkZGFrYXNyYWFyYWJpYz02NDYxMDtlLnNoYWRkYWthc3JhdGFuYXJhYmljPTY0NjA3O2Uuc2hhZGU9OTYxODtlLnNoYWRlZGFyaz05NjE5O2Uuc2hhZGVsaWdodD05NjE3O2Uuc2hhZGVtZWRpdW09OTYxODtlLnNoYWRldmE9MjM1ODtlLnNoYWd1amFyYXRpPTI3NDI7ZS5zaGFndXJtdWtoaT0yNjE0O2Uuc2hhbHNoZWxldGhlYnJldz0xNDI3O2Uuc2hib3BvbW9mbz0xMjU2NTtlLnNoY2hhY3lyaWxsaWM9MTA5NztlLnNoZWVuYXJhYmljPTE1ODg7ZS5zaGVlbmZpbmFsYXJhYmljPTY1MjA2O2Uuc2hlZW5pbml0aWFsYXJhYmljPTY1MjA3O2Uuc2hlZW5tZWRpYWxhcmFiaWM9NjUyMDg7ZS5zaGVpY29wdGljPTk5NTtlLnNoZXFlbD04MzYyO2Uuc2hlcWVsaGVicmV3PTgzNjI7ZS5zaGV2YT0xNDU2O2Uuc2hldmExMTU9MTQ1NjtlLnNoZXZhMTU9MTQ1NjtlLnNoZXZhMjI9MTQ1NjtlLnNoZXZhMmU9MTQ1NjtlLnNoZXZhaGVicmV3PTE0NTY7ZS5zaGV2YW5hcnJvd2hlYnJldz0xNDU2O2Uuc2hldmFxdWFydGVyaGVicmV3PTE0NTY7ZS5zaGV2YXdpZGVoZWJyZXc9MTQ1NjtlLnNoaGFjeXJpbGxpYz0xMjExO2Uuc2hpbWFjb3B0aWM9MTAwNTtlLnNoaW49MTUxMztlLnNoaW5kYWdlc2g9NjQzMjk7ZS5zaGluZGFnZXNoaGVicmV3PTY0MzI5O2Uuc2hpbmRhZ2VzaHNoaW5kb3Q9NjQzMDA7ZS5zaGluZGFnZXNoc2hpbmRvdGhlYnJldz02NDMwMDtlLnNoaW5kYWdlc2hzaW5kb3Q9NjQzMDE7ZS5zaGluZGFnZXNoc2luZG90aGVicmV3PTY0MzAxO2Uuc2hpbmRvdGhlYnJldz0xNDczO2Uuc2hpbmhlYnJldz0xNTEzO2Uuc2hpbnNoaW5kb3Q9NjQyOTg7ZS5zaGluc2hpbmRvdGhlYnJldz02NDI5ODtlLnNoaW5zaW5kb3Q9NjQyOTk7ZS5zaGluc2luZG90aGVicmV3PTY0Mjk5O2Uuc2hvb2s9NjQyO2Uuc2lnbWE9OTYzO2Uuc2lnbWExPTk2MjtlLnNpZ21hZmluYWw9OTYyO2Uuc2lnbWFsdW5hdGVzeW1ib2xncmVlaz0xMDEwO2Uuc2loaXJhZ2FuYT0xMjM3NTtlLnNpa2F0YWthbmE9MTI0NzE7ZS5zaWthdGFrYW5haGFsZndpZHRoPTY1NDA0O2Uuc2lsdXFoZWJyZXc9MTQ2OTtlLnNpbHVxbGVmdGhlYnJldz0xNDY5O2Uuc2ltaWxhcj04NzY0O2Uuc2luZG90aGVicmV3PTE0NzQ7ZS5zaW9zYWNpcmNsZWtvcmVhbj0xMjkxNjtlLnNpb3NhcGFyZW5rb3JlYW49MTI4MjA7ZS5zaW9zY2lldWNrb3JlYW49MTI2NzA7ZS5zaW9zY2lyY2xla29yZWFuPTEyOTAyO2Uuc2lvc2tpeWVva2tvcmVhbj0xMjY2NjtlLnNpb3Nrb3JlYW49MTI2MTM7ZS5zaW9zbmlldW5rb3JlYW49MTI2Njc7ZS5zaW9zcGFyZW5rb3JlYW49MTI4MDY7ZS5zaW9zcGlldXBrb3JlYW49MTI2Njk7ZS5zaW9zdGlrZXV0a29yZWFuPTEyNjY4O2Uuc2l4PTU0O2Uuc2l4YXJhYmljPTE2Mzg7ZS5zaXhiZW5nYWxpPTI1NDA7ZS5zaXhjaXJjbGU9OTMxNztlLnNpeGNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjc7ZS5zaXhkZXZhPTI0MTI7ZS5zaXhndWphcmF0aT0yNzk2O2Uuc2l4Z3VybXVraGk9MjY2ODtlLnNpeGhhY2thcmFiaWM9MTYzODtlLnNpeGhhbmd6aG91PTEyMzI2O2Uuc2l4aWRlb2dyYXBoaWNwYXJlbj0xMjgzNztlLnNpeGluZmVyaW9yPTgzMjY7ZS5zaXhtb25vc3BhY2U9NjUzMDI7ZS5zaXhvbGRzdHlsZT02MzI4NjtlLnNpeHBhcmVuPTkzMzc7ZS5zaXhwZXJpb2Q9OTM1NztlLnNpeHBlcnNpYW49MTc4MjtlLnNpeHJvbWFuPTg1NjU7ZS5zaXhzdXBlcmlvcj04MzEwO2Uuc2l4dGVlbmNpcmNsZT05MzI3O2Uuc2l4dGVlbmN1cnJlbmN5ZGVub21pbmF0b3JiZW5nYWxpPTI1NTM7ZS5zaXh0ZWVucGFyZW49OTM0NztlLnNpeHRlZW5wZXJpb2Q9OTM2NztlLnNpeHRoYWk9MzY3MDtlLnNsYXNoPTQ3O2Uuc2xhc2htb25vc3BhY2U9NjUyOTU7ZS5zbG9uZz0zODM7ZS5zbG9uZ2RvdGFjY2VudD03ODM1O2Uuc21pbGVmYWNlPTk3ODY7ZS5zbW9ub3NwYWNlPTY1MzYzO2Uuc29mcGFzdXFoZWJyZXc9MTQ3NTtlLnNvZnRoeXBoZW49MTczO2Uuc29mdHNpZ25jeXJpbGxpYz0xMTAwO2Uuc29oaXJhZ2FuYT0xMjM4MTtlLnNva2F0YWthbmE9MTI0Nzc7ZS5zb2thdGFrYW5haGFsZndpZHRoPTY1NDA3O2Uuc29saWR1c2xvbmdvdmVybGF5Y21iPTgyNDtlLnNvbGlkdXNzaG9ydG92ZXJsYXljbWI9ODIzO2Uuc29ydXNpdGhhaT0zNjI1O2Uuc29zYWxhdGhhaT0zNjI0O2Uuc29zb3RoYWk9MzU5NTtlLnNvc3VhdGhhaT0zNjI2O2Uuc3BhY2U9MzI7ZS5zcGFjZWhhY2thcmFiaWM9MzI7ZS5zcGFkZT05ODI0O2Uuc3BhZGVzdWl0YmxhY2s9OTgyNDtlLnNwYWRlc3VpdHdoaXRlPTk4Mjg7ZS5zcGFyZW49OTM5MDtlLnNxdWFyZWJlbG93Y21iPTgyNztlLnNxdWFyZWNjPTEzMjUyO2Uuc3F1YXJlY209MTMyMTM7ZS5zcXVhcmVkaWFnb25hbGNyb3NzaGF0Y2hmaWxsPTk2NDE7ZS5zcXVhcmVob3Jpem9udGFsZmlsbD05NjM2O2Uuc3F1YXJla2c9MTMxOTk7ZS5zcXVhcmVrbT0xMzIxNDtlLnNxdWFyZWttY2FwaXRhbD0xMzI2MjtlLnNxdWFyZWxuPTEzMjY1O2Uuc3F1YXJlbG9nPTEzMjY2O2Uuc3F1YXJlbWc9MTMxOTg7ZS5zcXVhcmVtaWw9MTMyNjk7ZS5zcXVhcmVtbT0xMzIxMjtlLnNxdWFyZW1zcXVhcmVkPTEzMjE3O2Uuc3F1YXJlb3J0aG9nb25hbGNyb3NzaGF0Y2hmaWxsPTk2Mzg7ZS5zcXVhcmV1cHBlcmxlZnR0b2xvd2VycmlnaHRmaWxsPTk2Mzk7ZS5zcXVhcmV1cHBlcnJpZ2h0dG9sb3dlcmxlZnRmaWxsPTk2NDA7ZS5zcXVhcmV2ZXJ0aWNhbGZpbGw9OTYzNztlLnNxdWFyZXdoaXRld2l0aHNtYWxsYmxhY2s9OTYzNTtlLnNyc3F1YXJlPTEzMjc1O2Uuc3NhYmVuZ2FsaT0yNDg3O2Uuc3NhZGV2YT0yMzU5O2Uuc3NhZ3VqYXJhdGk9Mjc0MztlLnNzYW5nY2lldWNrb3JlYW49MTI2MTc7ZS5zc2FuZ2hpZXVoa29yZWFuPTEyNjc3O2Uuc3NhbmdpZXVuZ2tvcmVhbj0xMjY3MjtlLnNzYW5na2l5ZW9ra29yZWFuPTEyNTk0O2Uuc3NhbmduaWV1bmtvcmVhbj0xMjY0NTtlLnNzYW5ncGlldXBrb3JlYW49MTI2MTE7ZS5zc2FuZ3Npb3Nrb3JlYW49MTI2MTQ7ZS5zc2FuZ3Rpa2V1dGtvcmVhbj0xMjYwMDtlLnNzdXBlcmlvcj02MzIxODtlLnN0ZXJsaW5nPTE2MztlLnN0ZXJsaW5nbW9ub3NwYWNlPTY1NTA1O2Uuc3Ryb2tlbG9uZ292ZXJsYXljbWI9ODIyO2Uuc3Ryb2tlc2hvcnRvdmVybGF5Y21iPTgyMTtlLnN1YnNldD04ODM0O2Uuc3Vic2V0bm90ZXF1YWw9ODg0MjtlLnN1YnNldG9yZXF1YWw9ODgzODtlLnN1Y2NlZWRzPTg4Mjc7ZS5zdWNodGhhdD04NzE1O2Uuc3VoaXJhZ2FuYT0xMjM3NztlLnN1a2F0YWthbmE9MTI0NzM7ZS5zdWthdGFrYW5haGFsZndpZHRoPTY1NDA1O2Uuc3VrdW5hcmFiaWM9MTYxODtlLnN1bW1hdGlvbj04NzIxO2Uuc3VuPTk3ODg7ZS5zdXBlcnNldD04ODM1O2Uuc3VwZXJzZXRub3RlcXVhbD04ODQzO2Uuc3VwZXJzZXRvcmVxdWFsPTg4Mzk7ZS5zdnNxdWFyZT0xMzI3NjtlLnN5b3V3YWVyYXNxdWFyZT0xMzE4MDtlLnQ9MTE2O2UudGFiZW5nYWxpPTI0Njg7ZS50YWNrZG93bj04ODY4O2UudGFja2xlZnQ9ODg2NztlLnRhZGV2YT0yMzQwO2UudGFndWphcmF0aT0yNzI0O2UudGFndXJtdWtoaT0yNTk2O2UudGFoYXJhYmljPTE1OTE7ZS50YWhmaW5hbGFyYWJpYz02NTIxODtlLnRhaGluaXRpYWxhcmFiaWM9NjUyMTk7ZS50YWhpcmFnYW5hPTEyMzgzO2UudGFobWVkaWFsYXJhYmljPTY1MjIwO2UudGFpc3lvdWVyYXNxdWFyZT0xMzE4MTtlLnRha2F0YWthbmE9MTI0Nzk7ZS50YWthdGFrYW5haGFsZndpZHRoPTY1NDA4O2UudGF0d2VlbGFyYWJpYz0xNjAwO2UudGF1PTk2NDtlLnRhdj0xNTE0O2UudGF2ZGFnZXM9NjQzMzA7ZS50YXZkYWdlc2g9NjQzMzA7ZS50YXZkYWdlc2hoZWJyZXc9NjQzMzA7ZS50YXZoZWJyZXc9MTUxNDtlLnRiYXI9MzU5O2UudGJvcG9tb2ZvPTEyNTU0O2UudGNhcm9uPTM1NztlLnRjY3VybD02ODA7ZS50Y2VkaWxsYT0zNTU7ZS50Y2hlaGFyYWJpYz0xNjcwO2UudGNoZWhmaW5hbGFyYWJpYz02NDM3OTtlLnRjaGVoaW5pdGlhbGFyYWJpYz02NDM4MDtlLnRjaGVobWVkaWFsYXJhYmljPTY0MzgxO2UudGNpcmNsZT05NDQzO2UudGNpcmN1bWZsZXhiZWxvdz03NzkzO2UudGNvbW1hYWNjZW50PTM1NTtlLnRkaWVyZXNpcz03ODMxO2UudGRvdGFjY2VudD03Nzg3O2UudGRvdGJlbG93PTc3ODk7ZS50ZWN5cmlsbGljPTEwOTA7ZS50ZWRlc2NlbmRlcmN5cmlsbGljPTExOTc7ZS50ZWhhcmFiaWM9MTU3ODtlLnRlaGZpbmFsYXJhYmljPTY1MTc0O2UudGVoaGFoaW5pdGlhbGFyYWJpYz02NDY3NDtlLnRlaGhhaGlzb2xhdGVkYXJhYmljPTY0NTI0O2UudGVoaW5pdGlhbGFyYWJpYz02NTE3NTtlLnRlaGlyYWdhbmE9MTIzOTA7ZS50ZWhqZWVtaW5pdGlhbGFyYWJpYz02NDY3MztlLnRlaGplZW1pc29sYXRlZGFyYWJpYz02NDUyMztlLnRlaG1hcmJ1dGFhcmFiaWM9MTU3NztlLnRlaG1hcmJ1dGFmaW5hbGFyYWJpYz02NTE3MjtlLnRlaG1lZGlhbGFyYWJpYz02NTE3NjtlLnRlaG1lZW1pbml0aWFsYXJhYmljPTY0Njc2O2UudGVobWVlbWlzb2xhdGVkYXJhYmljPTY0NTI2O2UudGVobm9vbmZpbmFsYXJhYmljPTY0NjI3O2UudGVrYXRha2FuYT0xMjQ4NjtlLnRla2F0YWthbmFoYWxmd2lkdGg9NjU0MTE7ZS50ZWxlcGhvbmU9ODQ4MTtlLnRlbGVwaG9uZWJsYWNrPTk3NDI7ZS50ZWxpc2hhZ2Vkb2xhaGVicmV3PTE0NDA7ZS50ZWxpc2hhcWV0YW5haGVicmV3PTE0NDk7ZS50ZW5jaXJjbGU9OTMyMTtlLnRlbmlkZW9ncmFwaGljcGFyZW49MTI4NDE7ZS50ZW5wYXJlbj05MzQxO2UudGVucGVyaW9kPTkzNjE7ZS50ZW5yb21hbj04NTY5O2UudGVzaD02Nzk7ZS50ZXQ9MTQ5NjtlLnRldGRhZ2VzaD02NDMxMjtlLnRldGRhZ2VzaGhlYnJldz02NDMxMjtlLnRldGhlYnJldz0xNDk2O2UudGV0c2VjeXJpbGxpYz0xMjA1O2UudGV2aXJoZWJyZXc9MTQzNTtlLnRldmlybGVmdGhlYnJldz0xNDM1O2UudGhhYmVuZ2FsaT0yNDY5O2UudGhhZGV2YT0yMzQxO2UudGhhZ3VqYXJhdGk9MjcyNTtlLnRoYWd1cm11a2hpPTI1OTc7ZS50aGFsYXJhYmljPTE1ODQ7ZS50aGFsZmluYWxhcmFiaWM9NjUxOTY7ZS50aGFudGhha2hhdGxvd2xlZnR0aGFpPTYzNjQwO2UudGhhbnRoYWtoYXRsb3dyaWdodHRoYWk9NjM2Mzk7ZS50aGFudGhha2hhdHRoYWk9MzY2MDtlLnRoYW50aGFraGF0dXBwZXJsZWZ0dGhhaT02MzYzODtlLnRoZWhhcmFiaWM9MTU3OTtlLnRoZWhmaW5hbGFyYWJpYz02NTE3ODtlLnRoZWhpbml0aWFsYXJhYmljPTY1MTc5O2UudGhlaG1lZGlhbGFyYWJpYz02NTE4MDtlLnRoZXJlZXhpc3RzPTg3MDc7ZS50aGVyZWZvcmU9ODc1NjtlLnRoZXRhPTk1MjtlLnRoZXRhMT05Nzc7ZS50aGV0YXN5bWJvbGdyZWVrPTk3NztlLnRoaWV1dGhhY2lyY2xla29yZWFuPTEyOTIxO2UudGhpZXV0aGFwYXJlbmtvcmVhbj0xMjgyNTtlLnRoaWV1dGhjaXJjbGVrb3JlYW49MTI5MDc7ZS50aGlldXRoa29yZWFuPTEyNjIwO2UudGhpZXV0aHBhcmVua29yZWFuPTEyODExO2UudGhpcnRlZW5jaXJjbGU9OTMyNDtlLnRoaXJ0ZWVucGFyZW49OTM0NDtlLnRoaXJ0ZWVucGVyaW9kPTkzNjQ7ZS50aG9uYW5nbW9udGhvdGhhaT0zNjAxO2UudGhvb2s9NDI5O2UudGhvcGh1dGhhb3RoYWk9MzYwMjtlLnRob3JuPTI1NDtlLnRob3RoYWhhbnRoYWk9MzYwNztlLnRob3RoYW50aGFpPTM2MDA7ZS50aG90aG9uZ3RoYWk9MzYwODtlLnRob3RodW5ndGhhaT0zNjA2O2UudGhvdXNhbmRjeXJpbGxpYz0xMTU0O2UudGhvdXNhbmRzc2VwYXJhdG9yYXJhYmljPTE2NDQ7ZS50aG91c2FuZHNzZXBhcmF0b3JwZXJzaWFuPTE2NDQ7ZS50aHJlZT01MTtlLnRocmVlYXJhYmljPTE2MzU7ZS50aHJlZWJlbmdhbGk9MjUzNztlLnRocmVlY2lyY2xlPTkzMTQ7ZS50aHJlZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjQ7ZS50aHJlZWRldmE9MjQwOTtlLnRocmVlZWlnaHRocz04NTQwO2UudGhyZWVndWphcmF0aT0yNzkzO2UudGhyZWVndXJtdWtoaT0yNjY1O2UudGhyZWVoYWNrYXJhYmljPTE2MzU7ZS50aHJlZWhhbmd6aG91PTEyMzIzO2UudGhyZWVpZGVvZ3JhcGhpY3BhcmVuPTEyODM0O2UudGhyZWVpbmZlcmlvcj04MzIzO2UudGhyZWVtb25vc3BhY2U9NjUyOTk7ZS50aHJlZW51bWVyYXRvcmJlbmdhbGk9MjU1MDtlLnRocmVlb2xkc3R5bGU9NjMyODM7ZS50aHJlZXBhcmVuPTkzMzQ7ZS50aHJlZXBlcmlvZD05MzU0O2UudGhyZWVwZXJzaWFuPTE3Nzk7ZS50aHJlZXF1YXJ0ZXJzPTE5MDtlLnRocmVlcXVhcnRlcnNlbWRhc2g9NjMxOTg7ZS50aHJlZXJvbWFuPTg1NjI7ZS50aHJlZXN1cGVyaW9yPTE3OTtlLnRocmVldGhhaT0zNjY3O2UudGh6c3F1YXJlPTEzMjA0O2UudGloaXJhZ2FuYT0xMjM4NTtlLnRpa2F0YWthbmE9MTI0ODE7ZS50aWthdGFrYW5haGFsZndpZHRoPTY1NDA5O2UudGlrZXV0YWNpcmNsZWtvcmVhbj0xMjkxMjtlLnRpa2V1dGFwYXJlbmtvcmVhbj0xMjgxNjtlLnRpa2V1dGNpcmNsZWtvcmVhbj0xMjg5ODtlLnRpa2V1dGtvcmVhbj0xMjU5OTtlLnRpa2V1dHBhcmVua29yZWFuPTEyODAyO2UudGlsZGU9NzMyO2UudGlsZGViZWxvd2NtYj04MTY7ZS50aWxkZWNtYj03NzE7ZS50aWxkZWNvbWI9NzcxO2UudGlsZGVkb3VibGVjbWI9ODY0O2UudGlsZGVvcGVyYXRvcj04NzY0O2UudGlsZGVvdmVybGF5Y21iPTgyMDtlLnRpbGRldmVydGljYWxjbWI9ODMwO2UudGltZXNjaXJjbGU9ODg1NTtlLnRpcGVoYWhlYnJldz0xNDMwO2UudGlwZWhhbGVmdGhlYnJldz0xNDMwO2UudGlwcGlndXJtdWtoaT0yNjcyO2UudGl0bG9jeXJpbGxpY2NtYj0xMTU1O2UudGl3bmFybWVuaWFuPTE0MDc7ZS50bGluZWJlbG93PTc3OTE7ZS50bW9ub3NwYWNlPTY1MzY0O2UudG9hcm1lbmlhbj0xMzg1O2UudG9oaXJhZ2FuYT0xMjM5MjtlLnRva2F0YWthbmE9MTI0ODg7ZS50b2thdGFrYW5haGFsZndpZHRoPTY1NDEyO2UudG9uZWJhcmV4dHJhaGlnaG1vZD03NDE7ZS50b25lYmFyZXh0cmFsb3dtb2Q9NzQ1O2UudG9uZWJhcmhpZ2htb2Q9NzQyO2UudG9uZWJhcmxvd21vZD03NDQ7ZS50b25lYmFybWlkbW9kPTc0MztlLnRvbmVmaXZlPTQ0NTtlLnRvbmVzaXg9Mzg5O2UudG9uZXR3bz00MjQ7ZS50b25vcz05MDA7ZS50b25zcXVhcmU9MTMwOTU7ZS50b3BhdGFrdGhhaT0zNTk5O2UudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0PTEyMzA4O2UudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0c21hbGw9NjUxMTc7ZS50b3J0b2lzZXNoZWxsYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4MTtlLnRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHQ9MTIzMDk7ZS50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0c21hbGw9NjUxMTg7ZS50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0dmVydGljYWw9NjUwODI7ZS50b3Rhb3RoYWk9MzYwNTtlLnRwYWxhdGFsaG9vaz00Mjc7ZS50cGFyZW49OTM5MTtlLnRyYWRlbWFyaz04NDgyO2UudHJhZGVtYXJrc2Fucz02MzcyMjtlLnRyYWRlbWFya3NlcmlmPTYzMTk1O2UudHJldHJvZmxleGhvb2s9NjQ4O2UudHJpYWdkbj05NjYwO2UudHJpYWdsZj05NjY4O2UudHJpYWdydD05NjU4O2UudHJpYWd1cD05NjUwO2UudHM9Njc4O2UudHNhZGk9MTUxMDtlLnRzYWRpZGFnZXNoPTY0MzI2O2UudHNhZGlkYWdlc2hoZWJyZXc9NjQzMjY7ZS50c2FkaWhlYnJldz0xNTEwO2UudHNlY3lyaWxsaWM9MTA5NDtlLnRzZXJlPTE0NjE7ZS50c2VyZTEyPTE0NjE7ZS50c2VyZTFlPTE0NjE7ZS50c2VyZTJiPTE0NjE7ZS50c2VyZWhlYnJldz0xNDYxO2UudHNlcmVuYXJyb3doZWJyZXc9MTQ2MTtlLnRzZXJlcXVhcnRlcmhlYnJldz0xNDYxO2UudHNlcmV3aWRlaGVicmV3PTE0NjE7ZS50c2hlY3lyaWxsaWM9MTExNTtlLnRzdXBlcmlvcj02MzIxOTtlLnR0YWJlbmdhbGk9MjQ2MztlLnR0YWRldmE9MjMzNTtlLnR0YWd1amFyYXRpPTI3MTk7ZS50dGFndXJtdWtoaT0yNTkxO2UudHRlaGFyYWJpYz0xNjU3O2UudHRlaGZpbmFsYXJhYmljPTY0MzU5O2UudHRlaGluaXRpYWxhcmFiaWM9NjQzNjA7ZS50dGVobWVkaWFsYXJhYmljPTY0MzYxO2UudHRoYWJlbmdhbGk9MjQ2NDtlLnR0aGFkZXZhPTIzMzY7ZS50dGhhZ3VqYXJhdGk9MjcyMDtlLnR0aGFndXJtdWtoaT0yNTkyO2UudHR1cm5lZD02NDc7ZS50dWhpcmFnYW5hPTEyMzg4O2UudHVrYXRha2FuYT0xMjQ4NDtlLnR1a2F0YWthbmFoYWxmd2lkdGg9NjU0MTA7ZS50dXNtYWxsaGlyYWdhbmE9MTIzODc7ZS50dXNtYWxsa2F0YWthbmE9MTI0ODM7ZS50dXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzOTE7ZS50d2VsdmVjaXJjbGU9OTMyMztlLnR3ZWx2ZXBhcmVuPTkzNDM7ZS50d2VsdmVwZXJpb2Q9OTM2MztlLnR3ZWx2ZXJvbWFuPTg1NzE7ZS50d2VudHljaXJjbGU9OTMzMTtlLnR3ZW50eWhhbmd6aG91PTIxMzE2O2UudHdlbnR5cGFyZW49OTM1MTtlLnR3ZW50eXBlcmlvZD05MzcxO2UudHdvPTUwO2UudHdvYXJhYmljPTE2MzQ7ZS50d29iZW5nYWxpPTI1MzY7ZS50d29jaXJjbGU9OTMxMztlLnR3b2NpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjM7ZS50d29kZXZhPTI0MDg7ZS50d29kb3RlbmxlYWRlcj04MjI5O2UudHdvZG90bGVhZGVyPTgyMjk7ZS50d29kb3RsZWFkZXJ2ZXJ0aWNhbD02NTA3MjtlLnR3b2d1amFyYXRpPTI3OTI7ZS50d29ndXJtdWtoaT0yNjY0O2UudHdvaGFja2FyYWJpYz0xNjM0O2UudHdvaGFuZ3pob3U9MTIzMjI7ZS50d29pZGVvZ3JhcGhpY3BhcmVuPTEyODMzO2UudHdvaW5mZXJpb3I9ODMyMjtlLnR3b21vbm9zcGFjZT02NTI5ODtlLnR3b251bWVyYXRvcmJlbmdhbGk9MjU0OTtlLnR3b29sZHN0eWxlPTYzMjgyO2UudHdvcGFyZW49OTMzMztlLnR3b3BlcmlvZD05MzUzO2UudHdvcGVyc2lhbj0xNzc4O2UudHdvcm9tYW49ODU2MTtlLnR3b3N0cm9rZT00NDM7ZS50d29zdXBlcmlvcj0xNzg7ZS50d290aGFpPTM2NjY7ZS50d290aGlyZHM9ODUzMjtlLnU9MTE3O2UudWFjdXRlPTI1MDtlLnViYXI9NjQ5O2UudWJlbmdhbGk9MjQ0MTtlLnVib3BvbW9mbz0xMjU4NDtlLnVicmV2ZT0zNjU7ZS51Y2Fyb249NDY4O2UudWNpcmNsZT05NDQ0O2UudWNpcmN1bWZsZXg9MjUxO2UudWNpcmN1bWZsZXhiZWxvdz03Nzk5O2UudWN5cmlsbGljPTEwOTE7ZS51ZGF0dGFkZXZhPTIzODU7ZS51ZGJsYWN1dGU9MzY5O2UudWRibGdyYXZlPTUzMztlLnVkZXZhPTIzMTM7ZS51ZGllcmVzaXM9MjUyO2UudWRpZXJlc2lzYWN1dGU9NDcyO2UudWRpZXJlc2lzYmVsb3c9Nzc5NTtlLnVkaWVyZXNpc2Nhcm9uPTQ3NDtlLnVkaWVyZXNpc2N5cmlsbGljPTEyNjU7ZS51ZGllcmVzaXNncmF2ZT00NzY7ZS51ZGllcmVzaXNtYWNyb249NDcwO2UudWRvdGJlbG93PTc5MDk7ZS51Z3JhdmU9MjQ5O2UudWd1amFyYXRpPTI2OTc7ZS51Z3VybXVraGk9MjU2OTtlLnVoaXJhZ2FuYT0xMjM1ODtlLnVob29rYWJvdmU9NzkxMTtlLnVob3JuPTQzMjtlLnVob3JuYWN1dGU9NzkxMztlLnVob3JuZG90YmVsb3c9NzkyMTtlLnVob3JuZ3JhdmU9NzkxNTtlLnVob3JuaG9va2Fib3ZlPTc5MTc7ZS51aG9ybnRpbGRlPTc5MTk7ZS51aHVuZ2FydW1sYXV0PTM2OTtlLnVodW5nYXJ1bWxhdXRjeXJpbGxpYz0xMjY3O2UudWludmVydGVkYnJldmU9NTM1O2UudWthdGFrYW5hPTEyNDU0O2UudWthdGFrYW5haGFsZndpZHRoPTY1Mzk1O2UudWtjeXJpbGxpYz0xMTQ1O2UudWtvcmVhbj0xMjYzNjtlLnVtYWNyb249MzYzO2UudW1hY3JvbmN5cmlsbGljPTEyNjM7ZS51bWFjcm9uZGllcmVzaXM9NzgwMztlLnVtYXRyYWd1cm11a2hpPTI2MjU7ZS51bW9ub3NwYWNlPTY1MzY1O2UudW5kZXJzY29yZT05NTtlLnVuZGVyc2NvcmVkYmw9ODIxNTtlLnVuZGVyc2NvcmVtb25vc3BhY2U9NjUzNDM7ZS51bmRlcnNjb3JldmVydGljYWw9NjUwNzU7ZS51bmRlcnNjb3Jld2F2eT02NTEwMztlLnVuaW9uPTg3NDY7ZS51bml2ZXJzYWw9ODcwNDtlLnVvZ29uZWs9MzcxO2UudXBhcmVuPTkzOTI7ZS51cGJsb2NrPTk2MDA7ZS51cHBlcmRvdGhlYnJldz0xNDc2O2UudXBzaWxvbj05NjU7ZS51cHNpbG9uZGllcmVzaXM9OTcxO2UudXBzaWxvbmRpZXJlc2lzdG9ub3M9OTQ0O2UudXBzaWxvbmxhdGluPTY1MDtlLnVwc2lsb250b25vcz05NzM7ZS51cHRhY2tiZWxvd2NtYj03OTc7ZS51cHRhY2ttb2Q9NzI0O2UudXJhZ3VybXVraGk9MjY3NTtlLnVyaW5nPTM2NztlLnVzaG9ydGN5cmlsbGljPTExMTg7ZS51c21hbGxoaXJhZ2FuYT0xMjM1NztlLnVzbWFsbGthdGFrYW5hPTEyNDUzO2UudXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODU7ZS51c3RyYWlnaHRjeXJpbGxpYz0xMTk5O2UudXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWM9MTIwMTtlLnV0aWxkZT0zNjE7ZS51dGlsZGVhY3V0ZT03ODAxO2UudXRpbGRlYmVsb3c9Nzc5NztlLnV1YmVuZ2FsaT0yNDQyO2UudXVkZXZhPTIzMTQ7ZS51dWd1amFyYXRpPTI2OTg7ZS51dWd1cm11a2hpPTI1NzA7ZS51dW1hdHJhZ3VybXVraGk9MjYyNjtlLnV1dm93ZWxzaWduYmVuZ2FsaT0yNDk4O2UudXV2b3dlbHNpZ25kZXZhPTIzNzA7ZS51dXZvd2Vsc2lnbmd1amFyYXRpPTI3NTQ7ZS51dm93ZWxzaWduYmVuZ2FsaT0yNDk3O2UudXZvd2Vsc2lnbmRldmE9MjM2OTtlLnV2b3dlbHNpZ25ndWphcmF0aT0yNzUzO2Uudj0xMTg7ZS52YWRldmE9MjM1NztlLnZhZ3VqYXJhdGk9Mjc0MTtlLnZhZ3VybXVraGk9MjYxMztlLnZha2F0YWthbmE9MTI1MzU7ZS52YXY9MTQ5MztlLnZhdmRhZ2VzaD02NDMwOTtlLnZhdmRhZ2VzaDY1PTY0MzA5O2UudmF2ZGFnZXNoaGVicmV3PTY0MzA5O2UudmF2aGVicmV3PTE0OTM7ZS52YXZob2xhbT02NDMzMTtlLnZhdmhvbGFtaGVicmV3PTY0MzMxO2UudmF2dmF2aGVicmV3PTE1MjA7ZS52YXZ5b2RoZWJyZXc9MTUyMTtlLnZjaXJjbGU9OTQ0NTtlLnZkb3RiZWxvdz03ODA3O2UudmVjeXJpbGxpYz0xMDc0O2UudmVoYXJhYmljPTE3MDA7ZS52ZWhmaW5hbGFyYWJpYz02NDM2MztlLnZlaGluaXRpYWxhcmFiaWM9NjQzNjQ7ZS52ZWhtZWRpYWxhcmFiaWM9NjQzNjU7ZS52ZWthdGFrYW5hPTEyNTM3O2UudmVudXM9OTc5MjtlLnZlcnRpY2FsYmFyPTEyNDtlLnZlcnRpY2FsbGluZWFib3ZlY21iPTc4MTtlLnZlcnRpY2FsbGluZWJlbG93Y21iPTgwOTtlLnZlcnRpY2FsbGluZWxvd21vZD03MTY7ZS52ZXJ0aWNhbGxpbmVtb2Q9NzEyO2UudmV3YXJtZW5pYW49MTQwNjtlLnZob29rPTY1MTtlLnZpa2F0YWthbmE9MTI1MzY7ZS52aXJhbWFiZW5nYWxpPTI1MDk7ZS52aXJhbWFkZXZhPTIzODE7ZS52aXJhbWFndWphcmF0aT0yNzY1O2UudmlzYXJnYWJlbmdhbGk9MjQzNTtlLnZpc2FyZ2FkZXZhPTIzMDc7ZS52aXNhcmdhZ3VqYXJhdGk9MjY5MTtlLnZtb25vc3BhY2U9NjUzNjY7ZS52b2FybWVuaWFuPTE0MDA7ZS52b2ljZWRpdGVyYXRpb25oaXJhZ2FuYT0xMjQ0NjtlLnZvaWNlZGl0ZXJhdGlvbmthdGFrYW5hPTEyNTQyO2Uudm9pY2VkbWFya2thbmE9MTI0NDM7ZS52b2ljZWRtYXJra2FuYWhhbGZ3aWR0aD02NTQzODtlLnZva2F0YWthbmE9MTI1Mzg7ZS52cGFyZW49OTM5MztlLnZ0aWxkZT03ODA1O2UudnR1cm5lZD02NTI7ZS52dWhpcmFnYW5hPTEyNDM2O2UudnVrYXRha2FuYT0xMjUzMjtlLnc9MTE5O2Uud2FjdXRlPTc4MTE7ZS53YWVrb3JlYW49MTI2MzM7ZS53YWhpcmFnYW5hPTEyNDMxO2Uud2FrYXRha2FuYT0xMjUyNztlLndha2F0YWthbmFoYWxmd2lkdGg9NjU0MzY7ZS53YWtvcmVhbj0xMjYzMjtlLndhc21hbGxoaXJhZ2FuYT0xMjQzMDtlLndhc21hbGxrYXRha2FuYT0xMjUyNjtlLndhdHRvc3F1YXJlPTEzMTQzO2Uud2F2ZWRhc2g9MTIzMTY7ZS53YXZ5dW5kZXJzY29yZXZlcnRpY2FsPTY1MDc2O2Uud2F3YXJhYmljPTE2MDg7ZS53YXdmaW5hbGFyYWJpYz02NTI2MjtlLndhd2hhbXphYWJvdmVhcmFiaWM9MTU3MjtlLndhd2hhbXphYWJvdmVmaW5hbGFyYWJpYz02NTE1ODtlLndic3F1YXJlPTEzMjc3O2Uud2NpcmNsZT05NDQ2O2Uud2NpcmN1bWZsZXg9MzczO2Uud2RpZXJlc2lzPTc4MTM7ZS53ZG90YWNjZW50PTc4MTU7ZS53ZG90YmVsb3c9NzgxNztlLndlaGlyYWdhbmE9MTI0MzM7ZS53ZWllcnN0cmFzcz04NDcyO2Uud2VrYXRha2FuYT0xMjUyOTtlLndla29yZWFuPTEyNjM4O2Uud2Vva29yZWFuPTEyNjM3O2Uud2dyYXZlPTc4MDk7ZS53aGl0ZWJ1bGxldD05NzAyO2Uud2hpdGVjaXJjbGU9OTY3NTtlLndoaXRlY2lyY2xlaW52ZXJzZT05Njg5O2Uud2hpdGVjb3JuZXJicmFja2V0bGVmdD0xMjMwMjtlLndoaXRlY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA5MTtlLndoaXRlY29ybmVyYnJhY2tldHJpZ2h0PTEyMzAzO2Uud2hpdGVjb3JuZXJicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA5MjtlLndoaXRlZGlhbW9uZD05NjcxO2Uud2hpdGVkaWFtb25kY29udGFpbmluZ2JsYWNrc21hbGxkaWFtb25kPTk2NzI7ZS53aGl0ZWRvd25wb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY2MztlLndoaXRlZG93bnBvaW50aW5ndHJpYW5nbGU9OTY2MTtlLndoaXRlbGVmdHBvaW50aW5nc21hbGx0cmlhbmdsZT05NjY3O2Uud2hpdGVsZWZ0cG9pbnRpbmd0cmlhbmdsZT05NjY1O2Uud2hpdGVsZW50aWN1bGFyYnJhY2tldGxlZnQ9MTIzMTA7ZS53aGl0ZWxlbnRpY3VsYXJicmFja2V0cmlnaHQ9MTIzMTE7ZS53aGl0ZXJpZ2h0cG9pbnRpbmdzbWFsbHRyaWFuZ2xlPTk2NTc7ZS53aGl0ZXJpZ2h0cG9pbnRpbmd0cmlhbmdsZT05NjU1O2Uud2hpdGVzbWFsbHNxdWFyZT05NjQzO2Uud2hpdGVzbWlsaW5nZmFjZT05Nzg2O2Uud2hpdGVzcXVhcmU9OTYzMztlLndoaXRlc3Rhcj05NzM0O2Uud2hpdGV0ZWxlcGhvbmU9OTc0MztlLndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0PTEyMzEyO2Uud2hpdGV0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0PTEyMzEzO2Uud2hpdGV1cHBvaW50aW5nc21hbGx0cmlhbmdsZT05NjUzO2Uud2hpdGV1cHBvaW50aW5ndHJpYW5nbGU9OTY1MTtlLndpaGlyYWdhbmE9MTI0MzI7ZS53aWthdGFrYW5hPTEyNTI4O2Uud2lrb3JlYW49MTI2Mzk7ZS53bW9ub3NwYWNlPTY1MzY3O2Uud29oaXJhZ2FuYT0xMjQzNDtlLndva2F0YWthbmE9MTI1MzA7ZS53b2thdGFrYW5haGFsZndpZHRoPTY1MzgyO2Uud29uPTgzNjE7ZS53b25tb25vc3BhY2U9NjU1MTA7ZS53b3dhZW50aGFpPTM2MjM7ZS53cGFyZW49OTM5NDtlLndyaW5nPTc4MzI7ZS53c3VwZXJpb3I9Njk1O2Uud3R1cm5lZD02NTM7ZS53eW5uPTQ0NztlLng9MTIwO2UueGFib3ZlY21iPTgyOTtlLnhib3BvbW9mbz0xMjU2MjtlLnhjaXJjbGU9OTQ0NztlLnhkaWVyZXNpcz03ODIxO2UueGRvdGFjY2VudD03ODE5O2UueGVoYXJtZW5pYW49MTM4OTtlLnhpPTk1ODtlLnhtb25vc3BhY2U9NjUzNjg7ZS54cGFyZW49OTM5NTtlLnhzdXBlcmlvcj03Mzk7ZS55PTEyMTtlLnlhYWRvc3F1YXJlPTEzMTM0O2UueWFiZW5nYWxpPTI0Nzk7ZS55YWN1dGU9MjUzO2UueWFkZXZhPTIzNTE7ZS55YWVrb3JlYW49MTI2MjY7ZS55YWd1amFyYXRpPTI3MzU7ZS55YWd1cm11a2hpPTI2MDc7ZS55YWhpcmFnYW5hPTEyNDIwO2UueWFrYXRha2FuYT0xMjUxNjtlLnlha2F0YWthbmFoYWxmd2lkdGg9NjU0Mjg7ZS55YWtvcmVhbj0xMjYyNTtlLnlhbWFra2FudGhhaT0zNjYyO2UueWFzbWFsbGhpcmFnYW5hPTEyNDE5O2UueWFzbWFsbGthdGFrYW5hPTEyNTE1O2UueWFzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg4O2UueWF0Y3lyaWxsaWM9MTEyMztlLnljaXJjbGU9OTQ0ODtlLnljaXJjdW1mbGV4PTM3NTtlLnlkaWVyZXNpcz0yNTU7ZS55ZG90YWNjZW50PTc4MjM7ZS55ZG90YmVsb3c9NzkyNTtlLnllaGFyYWJpYz0xNjEwO2UueWVoYmFycmVlYXJhYmljPTE3NDY7ZS55ZWhiYXJyZWVmaW5hbGFyYWJpYz02NDQzMTtlLnllaGZpbmFsYXJhYmljPTY1MjY2O2UueWVoaGFtemFhYm92ZWFyYWJpYz0xNTc0O2UueWVoaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTYyO2UueWVoaGFtemFhYm92ZWluaXRpYWxhcmFiaWM9NjUxNjM7ZS55ZWhoYW16YWFib3ZlbWVkaWFsYXJhYmljPTY1MTY0O2UueWVoaW5pdGlhbGFyYWJpYz02NTI2NztlLnllaG1lZGlhbGFyYWJpYz02NTI2ODtlLnllaG1lZW1pbml0aWFsYXJhYmljPTY0NzMzO2UueWVobWVlbWlzb2xhdGVkYXJhYmljPTY0NjAwO2UueWVobm9vbmZpbmFsYXJhYmljPTY0NjYwO2UueWVodGhyZWVkb3RzYmVsb3dhcmFiaWM9MTc0NTtlLnlla29yZWFuPTEyNjMwO2UueWVuPTE2NTtlLnllbm1vbm9zcGFjZT02NTUwOTtlLnllb2tvcmVhbj0xMjYyOTtlLnllb3JpbmhpZXVoa29yZWFuPTEyNjc4O2UueWVyYWhiZW55b21vaGVicmV3PTE0NTA7ZS55ZXJhaGJlbnlvbW9sZWZ0aGVicmV3PTE0NTA7ZS55ZXJpY3lyaWxsaWM9MTA5OTtlLnllcnVkaWVyZXNpc2N5cmlsbGljPTEyNzM7ZS55ZXNpZXVuZ2tvcmVhbj0xMjY3MztlLnllc2lldW5ncGFuc2lvc2tvcmVhbj0xMjY3NTtlLnllc2lldW5nc2lvc2tvcmVhbj0xMjY3NDtlLnlldGl2aGVicmV3PTE0MzQ7ZS55Z3JhdmU9NzkyMztlLnlob29rPTQzNjtlLnlob29rYWJvdmU9NzkyNztlLnlpYXJtZW5pYW49MTM5NztlLnlpY3lyaWxsaWM9MTExMTtlLnlpa29yZWFuPTEyNjQyO2UueWlueWFuZz05Nzc1O2UueWl3bmFybWVuaWFuPTE0MTA7ZS55bW9ub3NwYWNlPTY1MzY5O2UueW9kPTE0OTc7ZS55b2RkYWdlc2g9NjQzMTM7ZS55b2RkYWdlc2hoZWJyZXc9NjQzMTM7ZS55b2RoZWJyZXc9MTQ5NztlLnlvZHlvZGhlYnJldz0xNTIyO2UueW9keW9kcGF0YWhoZWJyZXc9NjQyODc7ZS55b2hpcmFnYW5hPTEyNDI0O2UueW9pa29yZWFuPTEyNjgxO2UueW9rYXRha2FuYT0xMjUyMDtlLnlva2F0YWthbmFoYWxmd2lkdGg9NjU0MzA7ZS55b2tvcmVhbj0xMjYzNTtlLnlvc21hbGxoaXJhZ2FuYT0xMjQyMztlLnlvc21hbGxrYXRha2FuYT0xMjUxOTtlLnlvc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM5MDtlLnlvdGdyZWVrPTEwMTE7ZS55b3lhZWtvcmVhbj0xMjY4MDtlLnlveWFrb3JlYW49MTI2Nzk7ZS55b3lha3RoYWk9MzYxODtlLnlveWluZ3RoYWk9MzU5NztlLnlwYXJlbj05Mzk2O2UueXBvZ2VncmFtbWVuaT04OTA7ZS55cG9nZWdyYW1tZW5pZ3JlZWtjbWI9ODM3O2UueXI9NDIyO2UueXJpbmc9NzgzMztlLnlzdXBlcmlvcj02OTY7ZS55dGlsZGU9NzkyOTtlLnl0dXJuZWQ9NjU0O2UueXVoaXJhZ2FuYT0xMjQyMjtlLnl1aWtvcmVhbj0xMjY4NDtlLnl1a2F0YWthbmE9MTI1MTg7ZS55dWthdGFrYW5haGFsZndpZHRoPTY1NDI5O2UueXVrb3JlYW49MTI2NDA7ZS55dXNiaWdjeXJpbGxpYz0xMTMxO2UueXVzYmlnaW90aWZpZWRjeXJpbGxpYz0xMTMzO2UueXVzbGl0dGxlY3lyaWxsaWM9MTEyNztlLnl1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWM9MTEyOTtlLnl1c21hbGxoaXJhZ2FuYT0xMjQyMTtlLnl1c21hbGxrYXRha2FuYT0xMjUxNztlLnl1c21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4OTtlLnl1eWVrb3JlYW49MTI2ODM7ZS55dXllb2tvcmVhbj0xMjY4MjtlLnl5YWJlbmdhbGk9MjUyNztlLnl5YWRldmE9MjM5OTtlLno9MTIyO2UuemFhcm1lbmlhbj0xMzgyO2UuemFjdXRlPTM3ODtlLnphZGV2YT0yMzk1O2UuemFndXJtdWtoaT0yNjUxO2UuemFoYXJhYmljPTE1OTI7ZS56YWhmaW5hbGFyYWJpYz02NTIyMjtlLnphaGluaXRpYWxhcmFiaWM9NjUyMjM7ZS56YWhpcmFnYW5hPTEyMzc0O2UuemFobWVkaWFsYXJhYmljPTY1MjI0O2UuemFpbmFyYWJpYz0xNTg2O2UuemFpbmZpbmFsYXJhYmljPTY1MjAwO2UuemFrYXRha2FuYT0xMjQ3MDtlLnphcWVmZ2Fkb2xoZWJyZXc9MTQyOTtlLnphcWVmcWF0YW5oZWJyZXc9MTQyODtlLnphcnFhaGVicmV3PTE0MzI7ZS56YXlpbj0xNDk0O2UuemF5aW5kYWdlc2g9NjQzMTA7ZS56YXlpbmRhZ2VzaGhlYnJldz02NDMxMDtlLnpheWluaGVicmV3PTE0OTQ7ZS56Ym9wb21vZm89MTI1Njc7ZS56Y2Fyb249MzgyO2UuemNpcmNsZT05NDQ5O2UuemNpcmN1bWZsZXg9NzgyNTtlLnpjdXJsPTY1NztlLnpkb3Q9MzgwO2UuemRvdGFjY2VudD0zODA7ZS56ZG90YmVsb3c9NzgyNztlLnplY3lyaWxsaWM9MTA3OTtlLnplZGVzY2VuZGVyY3lyaWxsaWM9MTE3NztlLnplZGllcmVzaXNjeXJpbGxpYz0xMjQ3O2UuemVoaXJhZ2FuYT0xMjM4MDtlLnpla2F0YWthbmE9MTI0NzY7ZS56ZXJvPTQ4O2UuemVyb2FyYWJpYz0xNjMyO2UuemVyb2JlbmdhbGk9MjUzNDtlLnplcm9kZXZhPTI0MDY7ZS56ZXJvZ3VqYXJhdGk9Mjc5MDtlLnplcm9ndXJtdWtoaT0yNjYyO2UuemVyb2hhY2thcmFiaWM9MTYzMjtlLnplcm9pbmZlcmlvcj04MzIwO2UuemVyb21vbm9zcGFjZT02NTI5NjtlLnplcm9vbGRzdHlsZT02MzI4MDtlLnplcm9wZXJzaWFuPTE3NzY7ZS56ZXJvc3VwZXJpb3I9ODMwNDtlLnplcm90aGFpPTM2NjQ7ZS56ZXJvd2lkdGhqb2luZXI9NjUyNzk7ZS56ZXJvd2lkdGhub25qb2luZXI9ODIwNDtlLnplcm93aWR0aHNwYWNlPTgyMDM7ZS56ZXRhPTk1MDtlLnpoYm9wb21vZm89MTI1NjM7ZS56aGVhcm1lbmlhbj0xMzg2O2UuemhlYnJldmVjeXJpbGxpYz0xMjE4O2UuemhlY3lyaWxsaWM9MTA3ODtlLnpoZWRlc2NlbmRlcmN5cmlsbGljPTExNzU7ZS56aGVkaWVyZXNpc2N5cmlsbGljPTEyNDU7ZS56aWhpcmFnYW5hPTEyMzc2O2UuemlrYXRha2FuYT0xMjQ3MjtlLnppbm9yaGVicmV3PTE0NTQ7ZS56bGluZWJlbG93PTc4Mjk7ZS56bW9ub3NwYWNlPTY1MzcwO2Uuem9oaXJhZ2FuYT0xMjM4MjtlLnpva2F0YWthbmE9MTI0Nzg7ZS56cGFyZW49OTM5NztlLnpyZXRyb2ZsZXhob29rPTY1NjtlLnpzdHJva2U9NDM4O2UuenVoaXJhZ2FuYT0xMjM3ODtlLnp1a2F0YWthbmE9MTI0NzQ7ZVsiLm5vdGRlZiJdPTA7ZS5hbmdicmFja2V0bGVmdGJpZz05MDAxO2UuYW5nYnJhY2tldGxlZnRCaWc9OTAwMTtlLmFuZ2JyYWNrZXRsZWZ0YmlnZz05MDAxO2UuYW5nYnJhY2tldGxlZnRCaWdnPTkwMDE7ZS5hbmdicmFja2V0cmlnaHRCaWc9OTAwMjtlLmFuZ2JyYWNrZXRyaWdodGJpZz05MDAyO2UuYW5nYnJhY2tldHJpZ2h0QmlnZz05MDAyO2UuYW5nYnJhY2tldHJpZ2h0YmlnZz05MDAyO2UuYXJyb3dob29rbGVmdD04NjE4O2UuYXJyb3dob29rcmlnaHQ9ODYxNztlLmFycm93bGVmdHRvcGhhbGY9ODYzNjtlLmFycm93bGVmdGJvdGhhbGY9ODYzNztlLmFycm93bm9ydGhlYXN0PTg1OTk7ZS5hcnJvd25vcnRod2VzdD04NTk4O2UuYXJyb3dyaWdodHRvcGhhbGY9ODY0MDtlLmFycm93cmlnaHRib3RoYWxmPTg2NDE7ZS5hcnJvd3NvdXRoZWFzdD04NjAwO2UuYXJyb3dzb3V0aHdlc3Q9ODYwMTtlLmJhY2tzbGFzaGJpZz04NzI2O2UuYmFja3NsYXNoQmlnPTg3MjY7ZS5iYWNrc2xhc2hCaWdnPTg3MjY7ZS5iYWNrc2xhc2hiaWdnPTg3MjY7ZS5iYXJkYmw9ODIxNDtlLmJyYWNlaHRpcGRvd25sZWZ0PTY1MDc5O2UuYnJhY2VodGlwZG93bnJpZ2h0PTY1MDc5O2UuYnJhY2VodGlwdXBsZWZ0PTY1MDgwO2UuYnJhY2VodGlwdXByaWdodD02NTA4MDtlLmJyYWNlbGVmdEJpZz0xMjM7ZS5icmFjZWxlZnRiaWc9MTIzO2UuYnJhY2VsZWZ0YmlnZz0xMjM7ZS5icmFjZWxlZnRCaWdnPTEyMztlLmJyYWNlcmlnaHRCaWc9MTI1O2UuYnJhY2VyaWdodGJpZz0xMjU7ZS5icmFjZXJpZ2h0YmlnZz0xMjU7ZS5icmFjZXJpZ2h0QmlnZz0xMjU7ZS5icmFja2V0bGVmdGJpZz05MTtlLmJyYWNrZXRsZWZ0QmlnPTkxO2UuYnJhY2tldGxlZnRiaWdnPTkxO2UuYnJhY2tldGxlZnRCaWdnPTkxO2UuYnJhY2tldHJpZ2h0QmlnPTkzO2UuYnJhY2tldHJpZ2h0YmlnPTkzO2UuYnJhY2tldHJpZ2h0YmlnZz05MztlLmJyYWNrZXRyaWdodEJpZ2c9OTM7ZS5jZWlsaW5nbGVmdGJpZz04OTY4O2UuY2VpbGluZ2xlZnRCaWc9ODk2ODtlLmNlaWxpbmdsZWZ0QmlnZz04OTY4O2UuY2VpbGluZ2xlZnRiaWdnPTg5Njg7ZS5jZWlsaW5ncmlnaHRiaWc9ODk2OTtlLmNlaWxpbmdyaWdodEJpZz04OTY5O2UuY2VpbGluZ3JpZ2h0YmlnZz04OTY5O2UuY2VpbGluZ3JpZ2h0QmlnZz04OTY5O2UuY2lyY2xlZG90ZGlzcGxheT04ODU3O2UuY2lyY2xlZG90dGV4dD04ODU3O2UuY2lyY2xlbXVsdGlwbHlkaXNwbGF5PTg4NTU7ZS5jaXJjbGVtdWx0aXBseXRleHQ9ODg1NTtlLmNpcmNsZXBsdXNkaXNwbGF5PTg4NTM7ZS5jaXJjbGVwbHVzdGV4dD04ODUzO2UuY29udGludGVncmFsZGlzcGxheT04NzUwO2UuY29udGludGVncmFsdGV4dD04NzUwO2UuY29wcm9kdWN0ZGlzcGxheT04NzIwO2UuY29wcm9kdWN0dGV4dD04NzIwO2UuZmxvb3JsZWZ0QmlnPTg5NzA7ZS5mbG9vcmxlZnRiaWc9ODk3MDtlLmZsb29ybGVmdGJpZ2c9ODk3MDtlLmZsb29ybGVmdEJpZ2c9ODk3MDtlLmZsb29ycmlnaHRiaWc9ODk3MTtlLmZsb29ycmlnaHRCaWc9ODk3MTtlLmZsb29ycmlnaHRCaWdnPTg5NzE7ZS5mbG9vcnJpZ2h0YmlnZz04OTcxO2UuaGF0d2lkZT03NzA7ZS5oYXR3aWRlcj03NzA7ZS5oYXR3aWRlc3Q9NzcwO2UuaW50ZXJjYWw9NzQ4ODtlLmludGVncmFsZGlzcGxheT04NzQ3O2UuaW50ZWdyYWx0ZXh0PTg3NDc7ZS5pbnRlcnNlY3Rpb25kaXNwbGF5PTg4OTg7ZS5pbnRlcnNlY3Rpb250ZXh0PTg4OTg7ZS5sb2dpY2FsYW5kZGlzcGxheT04NzQzO2UubG9naWNhbGFuZHRleHQ9ODc0MztlLmxvZ2ljYWxvcmRpc3BsYXk9ODc0NDtlLmxvZ2ljYWxvcnRleHQ9ODc0NDtlLnBhcmVubGVmdEJpZz00MDtlLnBhcmVubGVmdGJpZz00MDtlLnBhcmVubGVmdEJpZ2c9NDA7ZS5wYXJlbmxlZnRiaWdnPTQwO2UucGFyZW5yaWdodEJpZz00MTtlLnBhcmVucmlnaHRiaWc9NDE7ZS5wYXJlbnJpZ2h0QmlnZz00MTtlLnBhcmVucmlnaHRiaWdnPTQxO2UucHJpbWU9ODI0MjtlLnByb2R1Y3RkaXNwbGF5PTg3MTk7ZS5wcm9kdWN0dGV4dD04NzE5O2UucmFkaWNhbGJpZz04NzMwO2UucmFkaWNhbEJpZz04NzMwO2UucmFkaWNhbEJpZ2c9ODczMDtlLnJhZGljYWxiaWdnPTg3MzA7ZS5yYWRpY2FsYnQ9ODczMDtlLnJhZGljYWx0cD04NzMwO2UucmFkaWNhbHZlcnRleD04NzMwO2Uuc2xhc2hiaWc9NDc7ZS5zbGFzaEJpZz00NztlLnNsYXNoQmlnZz00NztlLnNsYXNoYmlnZz00NztlLnN1bW1hdGlvbmRpc3BsYXk9ODcyMTtlLnN1bW1hdGlvbnRleHQ9ODcyMTtlLnRpbGRld2lkZT03MzI7ZS50aWxkZXdpZGVyPTczMjtlLnRpbGRld2lkZXN0PTczMjtlLnVuaW9uZGlzcGxheT04ODk5O2UudW5pb25tdWx0aWRpc3BsYXk9ODg0NjtlLnVuaW9ubXVsdGl0ZXh0PTg4NDY7ZS51bmlvbnNxZGlzcGxheT04ODUyO2UudW5pb25zcXRleHQ9ODg1MjtlLnVuaW9udGV4dD04ODk5O2UudmV4dGVuZGRvdWJsZT04NzQxO2UudmV4dGVuZHNpbmdsZT04NzM5fSkpLHZpPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0zMjtlLmExPTk5ODU7ZS5hMj05OTg2O2UuYTIwMj05OTg3O2UuYTM9OTk4ODtlLmE0PTk3NDI7ZS5hNT05OTkwO2UuYTExOT05OTkxO2UuYTExOD05OTkyO2UuYTExNz05OTkzO2UuYTExPTk3NTU7ZS5hMTI9OTc1ODtlLmExMz05OTk2O2UuYTE0PTk5OTc7ZS5hMTU9OTk5ODtlLmExNj05OTk5O2UuYTEwNT0xZTQ7ZS5hMTc9MTAwMDE7ZS5hMTg9MTAwMDI7ZS5hMTk9MTAwMDM7ZS5hMjA9MTAwMDQ7ZS5hMjE9MTAwMDU7ZS5hMjI9MTAwMDY7ZS5hMjM9MTAwMDc7ZS5hMjQ9MTAwMDg7ZS5hMjU9MTAwMDk7ZS5hMjY9MTAwMTA7ZS5hMjc9MTAwMTE7ZS5hMjg9MTAwMTI7ZS5hNj0xMDAxMztlLmE3PTEwMDE0O2UuYTg9MTAwMTU7ZS5hOT0xMDAxNjtlLmExMD0xMDAxNztlLmEyOT0xMDAxODtlLmEzMD0xMDAxOTtlLmEzMT0xMDAyMDtlLmEzMj0xMDAyMTtlLmEzMz0xMDAyMjtlLmEzND0xMDAyMztlLmEzNT05NzMzO2UuYTM2PTEwMDI1O2UuYTM3PTEwMDI2O2UuYTM4PTEwMDI3O2UuYTM5PTEwMDI4O2UuYTQwPTEwMDI5O2UuYTQxPTEwMDMwO2UuYTQyPTEwMDMxO2UuYTQzPTEwMDMyO2UuYTQ0PTEwMDMzO2UuYTQ1PTEwMDM0O2UuYTQ2PTEwMDM1O2UuYTQ3PTEwMDM2O2UuYTQ4PTEwMDM3O2UuYTQ5PTEwMDM4O2UuYTUwPTEwMDM5O2UuYTUxPTEwMDQwO2UuYTUyPTEwMDQxO2UuYTUzPTEwMDQyO2UuYTU0PTEwMDQzO2UuYTU1PTEwMDQ0O2UuYTU2PTEwMDQ1O2UuYTU3PTEwMDQ2O2UuYTU4PTEwMDQ3O2UuYTU5PTEwMDQ4O2UuYTYwPTEwMDQ5O2UuYTYxPTEwMDUwO2UuYTYyPTEwMDUxO2UuYTYzPTEwMDUyO2UuYTY0PTEwMDUzO2UuYTY1PTEwMDU0O2UuYTY2PTEwMDU1O2UuYTY3PTEwMDU2O2UuYTY4PTEwMDU3O2UuYTY5PTEwMDU4O2UuYTcwPTEwMDU5O2UuYTcxPTk2Nzk7ZS5hNzI9MTAwNjE7ZS5hNzM9OTYzMjtlLmE3ND0xMDA2MztlLmEyMDM9MTAwNjQ7ZS5hNzU9MTAwNjU7ZS5hMjA0PTEwMDY2O2UuYTc2PTk2NTA7ZS5hNzc9OTY2MDtlLmE3OD05NjcwO2UuYTc5PTEwMDcwO2UuYTgxPTk2ODc7ZS5hODI9MTAwNzI7ZS5hODM9MTAwNzM7ZS5hODQ9MTAwNzQ7ZS5hOTc9MTAwNzU7ZS5hOTg9MTAwNzY7ZS5hOTk9MTAwNzc7ZS5hMTAwPTEwMDc4O2UuYTEwMT0xMDA4MTtlLmExMDI9MTAwODI7ZS5hMTAzPTEwMDgzO2UuYTEwND0xMDA4NDtlLmExMDY9MTAwODU7ZS5hMTA3PTEwMDg2O2UuYTEwOD0xMDA4NztlLmExMTI9OTgyNztlLmExMTE9OTgzMDtlLmExMTA9OTgyOTtlLmExMDk9OTgyNDtlLmExMjA9OTMxMjtlLmExMjE9OTMxMztlLmExMjI9OTMxNDtlLmExMjM9OTMxNTtlLmExMjQ9OTMxNjtlLmExMjU9OTMxNztlLmExMjY9OTMxODtlLmExMjc9OTMxOTtlLmExMjg9OTMyMDtlLmExMjk9OTMyMTtlLmExMzA9MTAxMDI7ZS5hMTMxPTEwMTAzO2UuYTEzMj0xMDEwNDtlLmExMzM9MTAxMDU7ZS5hMTM0PTEwMTA2O2UuYTEzNT0xMDEwNztlLmExMzY9MTAxMDg7ZS5hMTM3PTEwMTA5O2UuYTEzOD0xMDExMDtlLmExMzk9MTAxMTE7ZS5hMTQwPTEwMTEyO2UuYTE0MT0xMDExMztlLmExNDI9MTAxMTQ7ZS5hMTQzPTEwMTE1O2UuYTE0ND0xMDExNjtlLmExNDU9MTAxMTc7ZS5hMTQ2PTEwMTE4O2UuYTE0Nz0xMDExOTtlLmExNDg9MTAxMjA7ZS5hMTQ5PTEwMTIxO2UuYTE1MD0xMDEyMjtlLmExNTE9MTAxMjM7ZS5hMTUyPTEwMTI0O2UuYTE1Mz0xMDEyNTtlLmExNTQ9MTAxMjY7ZS5hMTU1PTEwMTI3O2UuYTE1Nj0xMDEyODtlLmExNTc9MTAxMjk7ZS5hMTU4PTEwMTMwO2UuYTE1OT0xMDEzMTtlLmExNjA9MTAxMzI7ZS5hMTYxPTg1OTQ7ZS5hMTYzPTg1OTY7ZS5hMTY0PTg1OTc7ZS5hMTk2PTEwMTM2O2UuYTE2NT0xMDEzNztlLmExOTI9MTAxMzg7ZS5hMTY2PTEwMTM5O2UuYTE2Nz0xMDE0MDtlLmExNjg9MTAxNDE7ZS5hMTY5PTEwMTQyO2UuYTE3MD0xMDE0MztlLmExNzE9MTAxNDQ7ZS5hMTcyPTEwMTQ1O2UuYTE3Mz0xMDE0NjtlLmExNjI9MTAxNDc7ZS5hMTc0PTEwMTQ4O2UuYTE3NT0xMDE0OTtlLmExNzY9MTAxNTA7ZS5hMTc3PTEwMTUxO2UuYTE3OD0xMDE1MjtlLmExNzk9MTAxNTM7ZS5hMTkzPTEwMTU0O2UuYTE4MD0xMDE1NTtlLmExOTk9MTAxNTY7ZS5hMTgxPTEwMTU3O2UuYTIwMD0xMDE1ODtlLmExODI9MTAxNTk7ZS5hMjAxPTEwMTYxO2UuYTE4Mz0xMDE2MjtlLmExODQ9MTAxNjM7ZS5hMTk3PTEwMTY0O2UuYTE4NT0xMDE2NTtlLmExOTQ9MTAxNjY7ZS5hMTk4PTEwMTY3O2UuYTE4Nj0xMDE2ODtlLmExOTU9MTAxNjk7ZS5hMTg3PTEwMTcwO2UuYTE4OD0xMDE3MTtlLmExODk9MTAxNzI7ZS5hMTkwPTEwMTczO2UuYTE5MT0xMDE3NDtlLmE4OT0xMDA4ODtlLmE5MD0xMDA4OTtlLmE5Mz0xMDA5MDtlLmE5ND0xMDA5MTtlLmE5MT0xMDA5MjtlLmE5Mj0xMDA5MztlLmEyMDU9MTAwOTQ7ZS5hODU9MTAwOTU7ZS5hMjA2PTEwMDk2O2UuYTg2PTEwMDk3O2UuYTg3PTEwMDk4O2UuYTg4PTEwMDk5O2UuYTk1PTEwMTAwO2UuYTk2PTEwMTAxO2VbIi5ub3RkZWYiXT0wfSkpLFlpPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZVs2MzcyMV09MTY5O2VbNjMxOTNdPTE2OTtlWzYzNzIwXT0xNzQ7ZVs2MzE5NF09MTc0O2VbNjM3MjJdPTg0ODI7ZVs2MzE5NV09ODQ4MjtlWzYzNzI5XT05MTI3O2VbNjM3MzBdPTkxMjg7ZVs2MzczMV09OTEyOTtlWzYzNzQwXT05MTMxO2VbNjM3NDFdPTkxMzI7ZVs2Mzc0Ml09OTEzMztlWzYzNzI2XT05MTIxO2VbNjM3MjddPTkxMjI7ZVs2MzcyOF09OTEyMztlWzYzNzM3XT05MTI0O2VbNjM3MzhdPTkxMjU7ZVs2MzczOV09OTEyNjtlWzYzNzIzXT05MTE1O2VbNjM3MjRdPTkxMTY7ZVs2MzcyNV09OTExNztlWzYzNzM0XT05MTE4O2VbNjM3MzVdPTkxMTk7ZVs2MzczNl09OTEyMH0pKTtmdW5jdGlvbiBnZXRVbmljb2RlRm9yR2x5cGgoZSx0KXtsZXQgaT10W2VdO2lmKHZvaWQgMCE9PWkpcmV0dXJuIGk7aWYoIWUpcmV0dXJuLTE7aWYoInUiPT09ZVswXSl7Y29uc3QgdD1lLmxlbmd0aDtsZXQgYTtpZig3PT09dCYmIm4iPT09ZVsxXSYmImkiPT09ZVsyXSlhPWUuc3Vic3RyaW5nKDMpO2Vsc2V7aWYoISh0Pj01JiZ0PD03KSlyZXR1cm4tMTthPWUuc3Vic3RyaW5nKDEpfWlmKGE9PT1hLnRvVXBwZXJDYXNlKCkpe2k9cGFyc2VJbnQoYSwxNik7aWYoaT49MClyZXR1cm4gaX19cmV0dXJuLTF9Y29uc3QgVGk9W1swLDEyN10sWzEyOCwyNTVdLFsyNTYsMzgzXSxbMzg0LDU5MV0sWzU5Miw2ODcsNzQyNCw3NTUxLDc1NTIsNzYxNV0sWzY4OCw3NjcsNDI3NTIsNDI3ODNdLFs3NjgsODc5LDc2MTYsNzY3OV0sWzg4MCwxMDIzXSxbMTEzOTIsMTE1MTldLFsxMDI0LDEyNzksMTI4MCwxMzI3LDExNzQ0LDExNzc1LDQyNTYwLDQyNjU1XSxbMTMyOCwxNDIzXSxbMTQyNCwxNTM1XSxbNDIyNDAsNDI1NTldLFsxNTM2LDE3OTEsMTg3MiwxOTE5XSxbMTk4NCwyMDQ3XSxbMjMwNCwyNDMxXSxbMjQzMiwyNTU5XSxbMjU2MCwyNjg3XSxbMjY4OCwyODE1XSxbMjgxNiwyOTQzXSxbMjk0NCwzMDcxXSxbMzA3MiwzMTk5XSxbMzIwMCwzMzI3XSxbMzMyOCwzNDU1XSxbMzU4NCwzNzExXSxbMzcxMiwzODM5XSxbNDI1Niw0MzUxLDExNTIwLDExNTY3XSxbNjkxMiw3MDM5XSxbNDM1Miw0NjA3XSxbNzY4MCw3OTM1LDExMzYwLDExMzkxLDQyNzg0LDQzMDA3XSxbNzkzNiw4MTkxXSxbODE5Miw4MzAzLDExNzc2LDExOTAzXSxbODMwNCw4MzUxXSxbODM1Miw4Mzk5XSxbODQwMCw4NDQ3XSxbODQ0OCw4NTI3XSxbODUyOCw4NTkxXSxbODU5Miw4NzAzLDEwMjI0LDEwMjM5LDEwNDk2LDEwNjIzLDExMDA4LDExMjYzXSxbODcwNCw4OTU5LDEwNzUyLDExMDA3LDEwMTc2LDEwMjIzLDEwNjI0LDEwNzUxXSxbODk2MCw5MjE1XSxbOTIxNiw5Mjc5XSxbOTI4MCw5MzExXSxbOTMxMiw5NDcxXSxbOTQ3Miw5NTk5XSxbOTYwMCw5NjMxXSxbOTYzMiw5NzI3XSxbOTcyOCw5OTgzXSxbOTk4NCwxMDE3NV0sWzEyMjg4LDEyMzUxXSxbMTIzNTIsMTI0NDddLFsxMjQ0OCwxMjU0MywxMjc4NCwxMjc5OV0sWzEyNTQ0LDEyNTkxLDEyNzA0LDEyNzM1XSxbMTI1OTIsMTI2ODddLFs0MzA3Miw0MzEzNV0sWzEyODAwLDEzMDU1XSxbMTMwNTYsMTMzMTFdLFs0NDAzMiw1NTIxNV0sWzU1Mjk2LDU3MzQzXSxbNjc4NDAsNjc4NzFdLFsxOTk2OCw0MDk1OSwxMTkwNCwxMjAzMSwxMjAzMiwxMjI1NSwxMjI3MiwxMjI4NywxMzMxMiwxOTkwMywxMzEwNzIsMTczNzkxLDEyNjg4LDEyNzAzXSxbNTczNDQsNjM3NDNdLFsxMjczNiwxMjc4Myw2Mzc0NCw2NDI1NSwxOTQ1NjAsMTk1MTAzXSxbNjQyNTYsNjQzMzVdLFs2NDMzNiw2NTAyM10sWzY1MDU2LDY1MDcxXSxbNjUwNDAsNjUwNTVdLFs2NTEwNCw2NTEzNV0sWzY1MTM2LDY1Mjc5XSxbNjUyODAsNjU1MTldLFs2NTUyMCw2NTUzNV0sWzM4NDAsNDA5NV0sWzE3OTIsMTg3MV0sWzE5MjAsMTk4M10sWzM0NTYsMzU4M10sWzQwOTYsNDI1NV0sWzQ2MDgsNDk5MSw0OTkyLDUwMjMsMTE2NDgsMTE3NDNdLFs1MDI0LDUxMTldLFs1MTIwLDU3NTldLFs1NzYwLDU3OTFdLFs1NzkyLDU4ODddLFs2MDE2LDYxNDNdLFs2MTQ0LDYzMTldLFsxMDI0MCwxMDQ5NV0sWzQwOTYwLDQyMTI3XSxbNTg4OCw1OTE5LDU5MjAsNTk1MSw1OTUyLDU5ODMsNTk4NCw2MDE1XSxbNjYzMDQsNjYzNTFdLFs2NjM1Miw2NjM4M10sWzY2NTYwLDY2NjM5XSxbMTE4Nzg0LDExOTAzOSwxMTkwNDAsMTE5Mjk1LDExOTI5NiwxMTkzNzVdLFsxMTk4MDgsMTIwODMxXSxbMTA0NDQ4MCwxMDQ4NTczXSxbNjUwMjQsNjUwMzksOTE3NzYwLDkxNzk5OV0sWzkxNzUwNCw5MTc2MzFdLFs2NDAwLDY0NzldLFs2NDgwLDY1MjddLFs2NTI4LDY2MjNdLFs2NjU2LDY2ODddLFsxMTI2NCwxMTM1OV0sWzExNTY4LDExNjQ3XSxbMTk5MDQsMTk5NjddLFs0MzAwOCw0MzA1NV0sWzY1NTM2LDY1NjYzLDY1NjY0LDY1NzkxLDY1NzkyLDY1ODU1XSxbNjU4NTYsNjU5MzVdLFs2NjQzMiw2NjQ2M10sWzY2NDY0LDY2NTI3XSxbNjY2NDAsNjY2ODddLFs2NjY4OCw2NjczNV0sWzY3NTg0LDY3NjQ3XSxbNjgwOTYsNjgxOTFdLFsxMTk1NTIsMTE5NjQ3XSxbNzM3MjgsNzQ3NTEsNzQ3NTIsNzQ4NzldLFsxMTk2NDgsMTE5Njc5XSxbNzA0MCw3MTAzXSxbNzE2OCw3MjQ3XSxbNzI0OCw3Mjk1XSxbNDMxMzYsNDMyMzFdLFs0MzI2NCw0MzMxMV0sWzQzMzEyLDQzMzU5XSxbNDM1MjAsNDM2MTVdLFs2NTkzNiw2NTk5OV0sWzY2ZTMsNjYwNDddLFs2NjIwOCw2NjI3MSw2NjE3Niw2NjIwNyw2Nzg3Miw2NzkwM10sWzEyNzAyNCwxMjcxMzUsMTI2OTc2LDEyNzAyM11dO2Z1bmN0aW9uIGdldFVuaWNvZGVSYW5nZUZvcihlLHQ9LTEpe2lmKC0xIT09dCl7Y29uc3QgaT1UaVt0XTtmb3IobGV0IGE9MCxyPWkubGVuZ3RoO2E8cjthKz0yKWlmKGU+PWlbYV0mJmU8PWlbYSsxXSlyZXR1cm4gdH1mb3IobGV0IHQ9MCxpPVRpLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPVRpW3RdO2ZvcihsZXQgYT0wLHI9aS5sZW5ndGg7YTxyO2ErPTIpaWYoZT49aVthXSYmZTw9aVthKzFdKXJldHVybiB0fXJldHVybi0xfWNvbnN0IEtpPW5ldyBSZWdFeHAoIl4oXFxzKXwoXFxwe01ufSl8KFxccHtDZn0pJCIsInUiKSxxaT1uZXcgTWFwO2NvbnN0IE9pPSEwLFBpPTEsV2k9MixqaT00LFhpPTMyLFppPVsiLm5vdGRlZiIsIi5udWxsIiwibm9ubWFya2luZ3JldHVybiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwibm9uYnJlYWtpbmdzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiTHNsYXNoIiwibHNsYXNoIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWmNhcm9uIiwiemNhcm9uIiwiYnJva2VuYmFyIiwiRXRoIiwiZXRoIiwiWWFjdXRlIiwieWFjdXRlIiwiVGhvcm4iLCJ0aG9ybiIsIm1pbnVzIiwibXVsdGlwbHkiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsIm9uZWhhbGYiLCJvbmVxdWFydGVyIiwidGhyZWVxdWFydGVycyIsImZyYW5jIiwiR2JyZXZlIiwiZ2JyZXZlIiwiSWRvdGFjY2VudCIsIlNjZWRpbGxhIiwic2NlZGlsbGEiLCJDYWN1dGUiLCJjYWN1dGUiLCJDY2Fyb24iLCJjY2Fyb24iLCJkY3JvYXQiXTtmdW5jdGlvbiByZWNvdmVyR2x5cGhOYW1lKGUsdCl7aWYodm9pZCAwIT09dFtlXSlyZXR1cm4gZTtjb25zdCBpPWdldFVuaWNvZGVGb3JHbHlwaChlLHQpO2lmKC0xIT09aSlmb3IoY29uc3QgZSBpbiB0KWlmKHRbZV09PT1pKXJldHVybiBlO2luZm8oIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6ICIrZSk7cmV0dXJuIGV9ZnVuY3Rpb24gdHlwZTFGb250R2x5cGhNYXBwaW5nKGUsdCxpKXtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHIscyxuO2NvbnN0IG89ISEoZS5mbGFncyZqaSk7aWYoZS5pc0ludGVybmFsRm9udCl7bj10O2ZvcihzPTA7czxuLmxlbmd0aDtzKyspe3I9aS5pbmRleE9mKG5bc10pO2Fbc109cj49MD9yOjB9fWVsc2UgaWYoZS5iYXNlRW5jb2RpbmdOYW1lKXtuPWdldEVuY29kaW5nKGUuYmFzZUVuY29kaW5nTmFtZSk7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrKyl7cj1pLmluZGV4T2YobltzXSk7YVtzXT1yPj0wP3I6MH19ZWxzZSBpZihvKWZvcihzIGluIHQpYVtzXT10W3NdO2Vsc2V7bj1iaTtmb3Iocz0wO3M8bi5sZW5ndGg7cysrKXtyPWkuaW5kZXhPZihuW3NdKTthW3NdPXI+PTA/cjowfX1jb25zdCBnPWUuZGlmZmVyZW5jZXM7bGV0IGM7aWYoZylmb3IocyBpbiBnKXtjb25zdCBlPWdbc107cj1pLmluZGV4T2YoZSk7aWYoLTE9PT1yKXtjfHwoYz1KaSgpKTtjb25zdCB0PXJlY292ZXJHbHlwaE5hbWUoZSxjKTt0IT09ZSYmKHI9aS5pbmRleE9mKHQpKX1hW3NdPXI+PTA/cjowfXJldHVybiBhfWZ1bmN0aW9uIG5vcm1hbGl6ZUZvbnROYW1lKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoL1ssX10vZywiLSIpLnJlcGxhY2VBbGwoL1xzL2csIiIpfWNvbnN0IFZpPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZT0+e2VbODIxMV09NjUwNzQ7ZVs4MjEyXT02NTA3MztlWzgyMjldPTY1MDcyO2VbODIzMF09NjUwNDk7ZVsxMjI4OV09NjUwNDE7ZVsxMjI5MF09NjUwNDI7ZVsxMjI5Nl09NjUwODc7ZVsxMjI5N109NjUwODg7ZVsxMjI5OF09NjUwODU7ZVsxMjI5OV09NjUwODY7ZVsxMjMwMF09NjUwODk7ZVsxMjMwMV09NjUwOTA7ZVsxMjMwMl09NjUwOTE7ZVsxMjMwM109NjUwOTI7ZVsxMjMwNF09NjUwODM7ZVsxMjMwNV09NjUwODQ7ZVsxMjMwOF09NjUwODE7ZVsxMjMwOV09NjUwODI7ZVsxMjMxMF09NjUwNDc7ZVsxMjMxMV09NjUwNDg7ZVs2NTEwM109NjUwNzY7ZVs2NTI4MV09NjUwNDU7ZVs2NTI4OF09NjUwNzc7ZVs2NTI4OV09NjUwNzg7ZVs2NTI5Ml09NjUwNDA7ZVs2NTMwNl09NjUwNDM7ZVs2NTMwN109NjUwNDQ7ZVs2NTMxMV09NjUwNDY7ZVs2NTMzOV09NjUwOTU7ZVs2NTM0MV09NjUwOTY7ZVs2NTM0M109NjUwNzU7ZVs2NTM3MV09NjUwNzk7ZVs2NTM3M109NjUwODB9KSksX2k9Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlWyJUaW1lcy1Sb21hbiJdPSJUaW1lcy1Sb21hbiI7ZS5IZWx2ZXRpY2E9IkhlbHZldGljYSI7ZS5Db3VyaWVyPSJDb3VyaWVyIjtlLlN5bWJvbD0iU3ltYm9sIjtlWyJUaW1lcy1Cb2xkIl09IlRpbWVzLUJvbGQiO2VbIkhlbHZldGljYS1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJDb3VyaWVyLUJvbGQiXT0iQ291cmllci1Cb2xkIjtlLlphcGZEaW5nYmF0cz0iWmFwZkRpbmdiYXRzIjtlWyJUaW1lcy1JdGFsaWMiXT0iVGltZXMtSXRhbGljIjtlWyJIZWx2ZXRpY2EtT2JsaXF1ZSJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiQ291cmllci1PYmxpcXVlIl09IkNvdXJpZXItT2JsaXF1ZSI7ZVsiVGltZXMtQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJDb3VyaWVyLUJvbGRPYmxpcXVlIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2UuQXJpYWxOYXJyb3c9IkhlbHZldGljYSI7ZVsiQXJpYWxOYXJyb3ctQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWxOYXJyb3ctQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsTmFycm93LUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5BcmlhbEJsYWNrPSJIZWx2ZXRpY2EiO2VbIkFyaWFsQmxhY2stQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWxCbGFjay1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWxCbGFjay1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkFyaWFsLUJsYWNrIl09IkhlbHZldGljYSI7ZVsiQXJpYWwtQmxhY2stQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWwtQmxhY2stQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsLUJsYWNrLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5BcmlhbD0iSGVsdmV0aWNhIjtlWyJBcmlhbC1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWwtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkFyaWFsTVQ9IkhlbHZldGljYSI7ZVsiQXJpYWwtQm9sZEl0YWxpY01UIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWwtQm9sZE1UIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbC1JdGFsaWNNVCJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiQXJpYWwtQm9sZEl0YWxpY01ULUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbC1Cb2xkTVQtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWwtSXRhbGljTVQtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkFyaWFsVW5pY29kZU1TPSJIZWx2ZXRpY2EiO2VbIkFyaWFsVW5pY29kZU1TLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsVW5pY29kZU1TLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbFVuaWNvZGVNUy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkNvdXJpZXItQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlWyJDb3VyaWVyLUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiO2UuQ291cmllck5ldz0iQ291cmllciI7ZVsiQ291cmllck5ldy1Cb2xkIl09IkNvdXJpZXItQm9sZCI7ZVsiQ291cmllck5ldy1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2VbIkNvdXJpZXJOZXctSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSI7ZVsiQ291cmllck5ld1BTLUJvbGRJdGFsaWNNVCJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlWyJDb3VyaWVyTmV3UFMtQm9sZE1UIl09IkNvdXJpZXItQm9sZCI7ZVsiQ291cmllck5ld1BTLUl0YWxpY01UIl09IkNvdXJpZXItT2JsaXF1ZSI7ZS5Db3VyaWVyTmV3UFNNVD0iQ291cmllciI7ZVsiSGVsdmV0aWNhLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJIZWx2ZXRpY2EtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJTeW1ib2wtQm9sZCJdPSJTeW1ib2wiO2VbIlN5bWJvbC1Cb2xkSXRhbGljIl09IlN5bWJvbCI7ZVsiU3ltYm9sLUl0YWxpYyJdPSJTeW1ib2wiO2UuVGltZXNOZXdSb21hbj0iVGltZXMtUm9tYW4iO2VbIlRpbWVzTmV3Um9tYW4tQm9sZCJdPSJUaW1lcy1Cb2xkIjtlWyJUaW1lc05ld1JvbWFuLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiVGltZXNOZXdSb21hbi1JdGFsaWMiXT0iVGltZXMtSXRhbGljIjtlLlRpbWVzTmV3Um9tYW5QUz0iVGltZXMtUm9tYW4iO2VbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkIl09IlRpbWVzLUJvbGQiO2VbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiO2VbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljTVQiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGRNVCJdPSJUaW1lcy1Cb2xkIjtlWyJUaW1lc05ld1JvbWFuUFMtSXRhbGljIl09IlRpbWVzLUl0YWxpYyI7ZVsiVGltZXNOZXdSb21hblBTLUl0YWxpY01UIl09IlRpbWVzLUl0YWxpYyI7ZS5UaW1lc05ld1JvbWFuUFNNVD0iVGltZXMtUm9tYW4iO2VbIlRpbWVzTmV3Um9tYW5QU01ULUJvbGQiXT0iVGltZXMtQm9sZCI7ZVsiVGltZXNOZXdSb21hblBTTVQtQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuUFNNVC1JdGFsaWMiXT0iVGltZXMtSXRhbGljIn0pKSx6aT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj0iRm94aXRGaXhlZC5wZmIiO2VbIkNvdXJpZXItQm9sZCJdPSJGb3hpdEZpeGVkQm9sZC5wZmIiO2VbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT0iRm94aXRGaXhlZEJvbGRJdGFsaWMucGZiIjtlWyJDb3VyaWVyLU9ibGlxdWUiXT0iRm94aXRGaXhlZEl0YWxpYy5wZmIiO2UuSGVsdmV0aWNhPSJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiI7ZVsiSGVsdmV0aWNhLUJvbGQiXT0iTGliZXJhdGlvblNhbnMtQm9sZC50dGYiO2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiI7ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0iTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZiI7ZVsiVGltZXMtUm9tYW4iXT0iRm94aXRTZXJpZi5wZmIiO2VbIlRpbWVzLUJvbGQiXT0iRm94aXRTZXJpZkJvbGQucGZiIjtlWyJUaW1lcy1Cb2xkSXRhbGljIl09IkZveGl0U2VyaWZCb2xkSXRhbGljLnBmYiI7ZVsiVGltZXMtSXRhbGljIl09IkZveGl0U2VyaWZJdGFsaWMucGZiIjtlLlN5bWJvbD0iRm94aXRTeW1ib2wucGZiIjtlLlphcGZEaW5nYmF0cz0iRm94aXREaW5nYmF0cy5wZmIiO2VbIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiXT0iTGliZXJhdGlvblNhbnMtUmVndWxhci50dGYiO2VbIkxpYmVyYXRpb25TYW5zLUJvbGQiXT0iTGliZXJhdGlvblNhbnMtQm9sZC50dGYiO2VbIkxpYmVyYXRpb25TYW5zLUl0YWxpYyJdPSJMaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRmIjtlWyJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIl09IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMudHRmIn0pKSwkaT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2UuQ2FsaWJyaT0iSGVsdmV0aWNhIjtlWyJDYWxpYnJpLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkNhbGlicmktQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkNhbGlicmktSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkNlbnR1cnlHb3RoaWM9IkhlbHZldGljYSI7ZVsiQ2VudHVyeUdvdGhpYy1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJDZW50dXJ5R290aGljLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJDZW50dXJ5R290aGljLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5Db21pY1NhbnNNUz0iQ29taWMgU2FucyBNUyI7ZVsiQ29taWNTYW5zTVMtQm9sZCJdPSJDb21pYyBTYW5zIE1TLUJvbGQiO2VbIkNvbWljU2Fuc01TLUJvbGRJdGFsaWMiXT0iQ29taWMgU2FucyBNUy1Cb2xkSXRhbGljIjtlWyJDb21pY1NhbnNNUy1JdGFsaWMiXT0iQ29taWMgU2FucyBNUy1JdGFsaWMiO2UuR2lsbFNhbnNNVD0iSGVsdmV0aWNhIjtlWyJHaWxsU2Fuc01ULUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkdpbGxTYW5zTVQtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkdpbGxTYW5zTVQtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkltcGFjdD0iSGVsdmV0aWNhIjtlWyJJdGNTeW1ib2wtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiSXRjU3ltYm9sLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJJdGNTeW1ib2wtQm9vayJdPSJIZWx2ZXRpY2EiO2VbIkl0Y1N5bWJvbC1Cb29rSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJJdGNTeW1ib2wtTWVkaXVtIl09IkhlbHZldGljYSI7ZVsiSXRjU3ltYm9sLU1lZGl1bUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5MdWNpZGFDb25zb2xlPSJDb3VyaWVyIjtlWyJMdWNpZGFDb25zb2xlLUJvbGQiXT0iQ291cmllci1Cb2xkIjtlWyJMdWNpZGFDb25zb2xlLUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZVsiTHVjaWRhQ29uc29sZS1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIjtlWyJMdWNpZGFTYW5zLURlbWkiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIk1TLUdvdGhpYyJdPSJNUyBHb3RoaWMiO2VbIk1TLUdvdGhpYy1Cb2xkIl09Ik1TIEdvdGhpYy1Cb2xkIjtlWyJNUy1Hb3RoaWMtQm9sZEl0YWxpYyJdPSJNUyBHb3RoaWMtQm9sZEl0YWxpYyI7ZVsiTVMtR290aGljLUl0YWxpYyJdPSJNUyBHb3RoaWMtSXRhbGljIjtlWyJNUy1NaW5jaG8iXT0iTVMgTWluY2hvIjtlWyJNUy1NaW5jaG8tQm9sZCJdPSJNUyBNaW5jaG8tQm9sZCI7ZVsiTVMtTWluY2hvLUJvbGRJdGFsaWMiXT0iTVMgTWluY2hvLUJvbGRJdGFsaWMiO2VbIk1TLU1pbmNoby1JdGFsaWMiXT0iTVMgTWluY2hvLUl0YWxpYyI7ZVsiTVMtUEdvdGhpYyJdPSJNUyBQR290aGljIjtlWyJNUy1QR290aGljLUJvbGQiXT0iTVMgUEdvdGhpYy1Cb2xkIjtlWyJNUy1QR290aGljLUJvbGRJdGFsaWMiXT0iTVMgUEdvdGhpYy1Cb2xkSXRhbGljIjtlWyJNUy1QR290aGljLUl0YWxpYyJdPSJNUyBQR290aGljLUl0YWxpYyI7ZVsiTVMtUE1pbmNobyJdPSJNUyBQTWluY2hvIjtlWyJNUy1QTWluY2hvLUJvbGQiXT0iTVMgUE1pbmNoby1Cb2xkIjtlWyJNUy1QTWluY2hvLUJvbGRJdGFsaWMiXT0iTVMgUE1pbmNoby1Cb2xkSXRhbGljIjtlWyJNUy1QTWluY2hvLUl0YWxpYyJdPSJNUyBQTWluY2hvLUl0YWxpYyI7ZS5OdXB0aWFsU2NyaXB0PSJUaW1lcy1JdGFsaWMiO2UuU2Vnb2VVSVN5bWJvbD0iSGVsdmV0aWNhIn0pKSxBYT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2VbIkFkb2JlIEplbnNvbiJdPSEwO2VbIkFkb2JlIFRleHQiXT0hMDtlLkFsYmVydHVzPSEwO2UuQWxkdXM9ITA7ZS5BbGV4YW5kcmlhPSEwO2UuQWxnZXJpYW49ITA7ZVsiQW1lcmljYW4gVHlwZXdyaXRlciJdPSEwO2UuQW50aXF1YT0hMDtlLkFwZXg9ITA7ZS5Bcm5vPSEwO2UuQXN0ZXI9ITA7ZS5BdXJvcmE9ITA7ZS5CYXNrZXJ2aWxsZT0hMDtlLkJlbGw9ITA7ZS5CZW1ibz0hMDtlWyJCZW1ibyBTY2hvb2xib29rIl09ITA7ZS5CZW5ndWlhdD0hMDtlWyJCZXJrZWxleSBPbGQgU3R5bGUiXT0hMDtlWyJCZXJuaGFyZCBNb2Rlcm4iXT0hMDtlWyJCZXJ0aG9sZCBDaXR5Il09ITA7ZS5Cb2Rvbmk9ITA7ZVsiQmF1ZXIgQm9kb25pIl09ITA7ZVsiQm9vayBBbnRpcXVhIl09ITA7ZS5Cb29rbWFuPSEwO2VbIkJvcmRlYXV4IFJvbWFuIl09ITA7ZVsiQ2FsaWZvcm5pYW4gRkIiXT0hMDtlLkNhbGlzdG89ITA7ZS5DYWx2ZXJ0PSEwO2UuQ2FwaXRhbHM9ITA7ZS5DYW1icmlhPSEwO2UuQ2FydGllcj0hMDtlLkNhc2xvbj0hMDtlLkNhdHVsbD0hMDtlLkNlbnRhdXI9ITA7ZVsiQ2VudHVyeSBPbGQgU3R5bGUiXT0hMDtlWyJDZW50dXJ5IFNjaG9vbGJvb2siXT0hMDtlLkNoYXBhcnJhbD0hMDtlWyJDaGFyaXMgU0lMIl09ITA7ZS5DaGVsdGVuaGFtPSEwO2VbIkNob2xsYSBTbGFiIl09ITA7ZS5DbGFyZW5kb249ITA7ZS5DbGVhcmZhY2U9ITA7ZS5Db2NoaW49ITA7ZS5Db2xvbm5hPSEwO2VbIkNvbXB1dGVyIE1vZGVybiJdPSEwO2VbIkNvbmNyZXRlIFJvbWFuIl09ITA7ZS5Db25zdGFudGlhPSEwO2VbIkNvb3BlciBCbGFjayJdPSEwO2UuQ29yb25hPSEwO2UuRWNvdHlwZT0hMDtlLkVneXB0aWVubmU9ITA7ZS5FbGVwaGFudD0hMDtlLkV4Y2Vsc2lvcj0hMDtlLkZhaXJmaWVsZD0hMDtlWyJGRiBTY2FsYSJdPSEwO2UuRm9sa2FyZD0hMDtlLkZvb3RsaWdodD0hMDtlLkZyZWVTZXJpZj0hMDtlWyJGcml6IFF1YWRyYXRhIl09ITA7ZS5HYXJhbW9uZD0hMDtlLkdlbnRpdW09ITA7ZS5HZW9yZ2lhPSEwO2UuR2xvdWNlc3Rlcj0hMDtlWyJHb3VkeSBPbGQgU3R5bGUiXT0hMDtlWyJHb3VkeSBTY2hvb2xib29rIl09ITA7ZVsiR291ZHkgUHJvIEZvbnQiXT0hMDtlLkdyYW5qb249ITA7ZVsiR3VhcmRpYW4gRWd5cHRpYW4iXT0hMDtlLkhlYXRoZXI9ITA7ZS5IZXJjdWxlcz0hMDtlWyJIaWdoIFRvd2VyIFRleHQiXT0hMDtlLkhpcm9zaGlnZT0hMDtlWyJIb2VmbGVyIFRleHQiXT0hMDtlWyJIdW1hbmEgU2VyaWYiXT0hMDtlLkltcHJpbnQ9ITA7ZVsiSW9uaWMgTm8uIDUiXT0hMDtlLkphbnNvbj0hMDtlLkpvYW5uYT0hMDtlLktvcmlubmE9ITA7ZS5MZXhpY29uPSEwO2UuTGliZXJhdGlvblNlcmlmPSEwO2VbIkxpYmVyYXRpb24gU2VyaWYiXT0hMDtlWyJMaW51eCBMaWJlcnRpbmUiXT0hMDtlLkxpdGVyYXR1cm5heWE9ITA7ZS5MdWNpZGE9ITA7ZVsiTHVjaWRhIEJyaWdodCJdPSEwO2UuTWVsaW9yPSEwO2UuTWVtcGhpcz0hMDtlLk1pbGxlcj0hMDtlLk1pbmlvbj0hMDtlLk1vZGVybj0hMDtlWyJNb25hIExpc2EiXT0hMDtlWyJNcnMgRWF2ZXMiXT0hMDtlWyJNUyBTZXJpZiJdPSEwO2VbIk11c2VvIFNsYWIiXT0hMDtlWyJOZXcgWW9yayJdPSEwO2VbIk5pbWJ1cyBSb21hbiJdPSEwO2VbIk5QUyBSYXdsaW5zb24gUm9hZHdheSJdPSEwO2UuTnVwdGlhbFNjcmlwdD0hMDtlLlBhbGF0aW5vPSEwO2UuUGVycGV0dWE9ITA7ZS5QbGFudGluPSEwO2VbIlBsYW50aW4gU2Nob29sYm9vayJdPSEwO2UuUGxheWJpbGw9ITA7ZVsiUG9vciBSaWNoYXJkIl09ITA7ZVsiUmF3bGluc29uIFJvYWR3YXkiXT0hMDtlLlJlbmF1bHQ9ITA7ZS5SZXF1aWVtPSEwO2UuUm9ja3dlbGw9ITA7ZS5Sb21hbj0hMDtlWyJSb3RpcyBTZXJpZiJdPSEwO2UuU2Fib249ITA7ZS5TY2FsYT0hMDtlLlNlYWd1bGw9ITA7ZS5TaXN0aW5hPSEwO2UuU291dmVuaXI9ITA7ZS5TVElYPSEwO2VbIlN0b25lIEluZm9ybWFsIl09ITA7ZVsiU3RvbmUgU2VyaWYiXT0hMDtlLlN5bGZhZW49ITA7ZS5UaW1lcz0hMDtlLlRyYWphbj0hMDtlWyJUcmluaXTDqSJdPSEwO2VbIlRydW1wIE1lZGlhZXZhbCJdPSEwO2UuVXRvcGlhPSEwO2VbIlZhbGUgVHlwZSJdPSEwO2VbIkJpdHN0cmVhbSBWZXJhIl09ITA7ZVsiVmVyYSBTZXJpZiJdPSEwO2UuVmVyc2FpbGxlcz0hMDtlLldhbnRlZD0hMDtlLldlaXNzPSEwO2VbIldpZGUgTGF0aW4iXT0hMDtlLldpbmRzb3I9ITA7ZS5YSVRTPSEwfSkpLGVhPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5EaW5nYmF0cz0hMDtlLlN5bWJvbD0hMDtlLlphcGZEaW5nYmF0cz0hMDtlLldpbmdkaW5ncz0hMDtlWyJXaW5nZGluZ3MtQm9sZCJdPSEwO2VbIldpbmdkaW5ncy1SZWd1bGFyIl09ITB9KSksdGE9Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlWzJdPTEwO2VbM109MzI7ZVs0XT0zMztlWzVdPTM0O2VbNl09MzU7ZVs3XT0zNjtlWzhdPTM3O2VbOV09Mzg7ZVsxMF09Mzk7ZVsxMV09NDA7ZVsxMl09NDE7ZVsxM109NDI7ZVsxNF09NDM7ZVsxNV09NDQ7ZVsxNl09NDU7ZVsxN109NDY7ZVsxOF09NDc7ZVsxOV09NDg7ZVsyMF09NDk7ZVsyMV09NTA7ZVsyMl09NTE7ZVsyM109NTI7ZVsyNF09NTM7ZVsyNV09NTQ7ZVsyNl09NTU7ZVsyN109NTY7ZVsyOF09NTc7ZVsyOV09NTg7ZVszMF09ODk0O2VbMzFdPTYwO2VbMzJdPTYxO2VbMzNdPTYyO2VbMzRdPTYzO2VbMzVdPTY0O2VbMzZdPTY1O2VbMzddPTY2O2VbMzhdPTY3O2VbMzldPTY4O2VbNDBdPTY5O2VbNDFdPTcwO2VbNDJdPTcxO2VbNDNdPTcyO2VbNDRdPTczO2VbNDVdPTc0O2VbNDZdPTc1O2VbNDddPTc2O2VbNDhdPTc3O2VbNDldPTc4O2VbNTBdPTc5O2VbNTFdPTgwO2VbNTJdPTgxO2VbNTNdPTgyO2VbNTRdPTgzO2VbNTVdPTg0O2VbNTZdPTg1O2VbNTddPTg2O2VbNThdPTg3O2VbNTldPTg4O2VbNjBdPTg5O2VbNjFdPTkwO2VbNjJdPTkxO2VbNjNdPTkyO2VbNjRdPTkzO2VbNjVdPTk0O2VbNjZdPTk1O2VbNjddPTk2O2VbNjhdPTk3O2VbNjldPTk4O2VbNzBdPTk5O2VbNzFdPTEwMDtlWzcyXT0xMDE7ZVs3M109MTAyO2VbNzRdPTEwMztlWzc1XT0xMDQ7ZVs3Nl09MTA1O2VbNzddPTEwNjtlWzc4XT0xMDc7ZVs3OV09MTA4O2VbODBdPTEwOTtlWzgxXT0xMTA7ZVs4Ml09MTExO2VbODNdPTExMjtlWzg0XT0xMTM7ZVs4NV09MTE0O2VbODZdPTExNTtlWzg3XT0xMTY7ZVs4OF09MTE3O2VbODldPTExODtlWzkwXT0xMTk7ZVs5MV09MTIwO2VbOTJdPTEyMTtlWzkzXT0xMjI7ZVs5NF09MTIzO2VbOTVdPTEyNDtlWzk2XT0xMjU7ZVs5N109MTI2O2VbOThdPTE5NjtlWzk5XT0xOTc7ZVsxMDBdPTE5OTtlWzEwMV09MjAxO2VbMTAyXT0yMDk7ZVsxMDNdPTIxNDtlWzEwNF09MjIwO2VbMTA1XT0yMjU7ZVsxMDZdPTIyNDtlWzEwN109MjI2O2VbMTA4XT0yMjg7ZVsxMDldPTIyNztlWzExMF09MjI5O2VbMTExXT0yMzE7ZVsxMTJdPTIzMztlWzExM109MjMyO2VbMTE0XT0yMzQ7ZVsxMTVdPTIzNTtlWzExNl09MjM3O2VbMTE3XT0yMzY7ZVsxMThdPTIzODtlWzExOV09MjM5O2VbMTIwXT0yNDE7ZVsxMjFdPTI0MztlWzEyMl09MjQyO2VbMTIzXT0yNDQ7ZVsxMjRdPTI0NjtlWzEyNV09MjQ1O2VbMTI2XT0yNTA7ZVsxMjddPTI0OTtlWzEyOF09MjUxO2VbMTI5XT0yNTI7ZVsxMzBdPTgyMjQ7ZVsxMzFdPTE3NjtlWzEzMl09MTYyO2VbMTMzXT0xNjM7ZVsxMzRdPTE2NztlWzEzNV09ODIyNjtlWzEzNl09MTgyO2VbMTM3XT0yMjM7ZVsxMzhdPTE3NDtlWzEzOV09MTY5O2VbMTQwXT04NDgyO2VbMTQxXT0xODA7ZVsxNDJdPTE2ODtlWzE0M109ODgwMDtlWzE0NF09MTk4O2VbMTQ1XT0yMTY7ZVsxNDZdPTg3MzQ7ZVsxNDddPTE3NztlWzE0OF09ODgwNDtlWzE0OV09ODgwNTtlWzE1MF09MTY1O2VbMTUxXT0xODE7ZVsxNTJdPTg3MDY7ZVsxNTNdPTg3MjE7ZVsxNTRdPTg3MTk7ZVsxNTZdPTg3NDc7ZVsxNTddPTE3MDtlWzE1OF09MTg2O2VbMTU5XT04NDg2O2VbMTYwXT0yMzA7ZVsxNjFdPTI0ODtlWzE2Ml09MTkxO2VbMTYzXT0xNjE7ZVsxNjRdPTE3MjtlWzE2NV09ODczMDtlWzE2Nl09NDAyO2VbMTY3XT04Nzc2O2VbMTY4XT04NzEwO2VbMTY5XT0xNzE7ZVsxNzBdPTE4NztlWzE3MV09ODIzMDtlWzE3OV09ODIyMDtlWzE4MF09ODIyMTtlWzE4MV09ODIxNjtlWzE4Ml09ODIxNztlWzIwMF09MTkzO2VbMjAzXT0yMDU7ZVsyMDddPTIxMTtlWzIxMF09MjE4O2VbMjIzXT03MTE7ZVsyMjRdPTMyMTtlWzIyNV09MzIyO2VbMjI2XT0zNTI7ZVsyMjddPTM1MztlWzIyOF09MzgxO2VbMjI5XT0zODI7ZVsyMzNdPTIyMTtlWzIzNF09MjUzO2VbMjUyXT0yNjM7ZVsyNTNdPTI2ODtlWzI1NF09MjY5O2VbMjU4XT0yNTg7ZVsyNjBdPTI2MDtlWzI2MV09MjYxO2VbMjY1XT0yODA7ZVsyNjZdPTI4MTtlWzI2N109MjgyO2VbMjY4XT0yODM7ZVsyNjldPTMxMztlWzI3NV09MzIzO2VbMjc2XT0zMjQ7ZVsyNzhdPTMyODtlWzI4M109MzQ0O2VbMjg0XT0zNDU7ZVsyODVdPTM0NjtlWzI4Nl09MzQ3O2VbMjkyXT0zNjc7ZVsyOTVdPTM3NztlWzI5Nl09Mzc4O2VbMjk4XT0zODA7ZVszMDVdPTk2MztlWzMwNl09OTY0O2VbMzA3XT05NjY7ZVszMDhdPTgyMTU7ZVszMDldPTgyNTI7ZVszMTBdPTgzMTk7ZVszMTFdPTgzNTk7ZVszMTJdPTg1OTI7ZVszMTNdPTg1OTM7ZVszMzddPTk1NTI7ZVs0OTNdPTEwMzk7ZVs0OTRdPTEwNDA7ZVs2NzJdPTE0ODg7ZVs2NzNdPTE0ODk7ZVs2NzRdPTE0OTA7ZVs2NzVdPTE0OTE7ZVs2NzZdPTE0OTI7ZVs2NzddPTE0OTM7ZVs2NzhdPTE0OTQ7ZVs2NzldPTE0OTU7ZVs2ODBdPTE0OTY7ZVs2ODFdPTE0OTc7ZVs2ODJdPTE0OTg7ZVs2ODNdPTE0OTk7ZVs2ODRdPTE1MDA7ZVs2ODVdPTE1MDE7ZVs2ODZdPTE1MDI7ZVs2ODddPTE1MDM7ZVs2ODhdPTE1MDQ7ZVs2ODldPTE1MDU7ZVs2OTBdPTE1MDY7ZVs2OTFdPTE1MDc7ZVs2OTJdPTE1MDg7ZVs2OTNdPTE1MDk7ZVs2OTRdPTE1MTA7ZVs2OTVdPTE1MTE7ZVs2OTZdPTE1MTI7ZVs2OTddPTE1MTM7ZVs2OThdPTE1MTQ7ZVs3MDVdPTE1MjQ7ZVs3MDZdPTgzNjI7ZVs3MTBdPTY0Mjg4O2VbNzExXT02NDI5ODtlWzc1OV09MTYxNztlWzc2MV09MTc3NjtlWzc2M109MTc3ODtlWzc3NV09MTY1MjtlWzc3N109MTc2NDtlWzc3OF09MTc4MDtlWzc3OV09MTc4MTtlWzc4MF09MTc4MjtlWzc4Ml09NzcxO2VbNzgzXT02NDcyNjtlWzc4Nl09ODM2MztlWzc4OF09ODUzMjtlWzc5MF09NzY4O2VbNzkxXT03Njk7ZVs3OTJdPTc2ODtlWzc5NV09ODAzO2VbNzk3XT02NDMzNjtlWzc5OF09NjQzMzc7ZVs3OTldPTY0MzQyO2VbODAwXT02NDM0MztlWzgwMV09NjQzNDQ7ZVs4MDJdPTY0MzQ1O2VbODAzXT02NDM2MjtlWzgwNF09NjQzNjM7ZVs4MDVdPTY0MzY0O2VbMjQyNF09NzgyMTtlWzI0MjVdPTc4MjI7ZVsyNDI2XT03ODIzO2VbMjQyN109NzgyNDtlWzI0MjhdPTc4MjU7ZVsyNDI5XT03ODI2O2VbMjQzMF09NzgyNztlWzI0MzNdPTc2ODI7ZVsyNjc4XT04MDQ1O2VbMjY3OV09ODA0NjtlWzI4MzBdPTE1NTI7ZVsyODM4XT02ODY7ZVsyODQwXT03NTE7ZVsyODQyXT03NTM7ZVsyODQzXT03NTQ7ZVsyODQ0XT03NTU7ZVsyODQ2XT03NTc7ZVsyODU2XT03Njc7ZVsyODU3XT04NDg7ZVsyODU4XT04NDk7ZVsyODYyXT04NTM7ZVsyODYzXT04NTQ7ZVsyODY0XT04NTU7ZVsyODY1XT04NjE7ZVsyODY2XT04NjI7ZVsyOTA2XT03NDYwO2VbMjkwOF09NzQ2MjtlWzI5MDldPTc0NjM7ZVsyOTEwXT03NDY0O2VbMjkxMl09NzQ2NjtlWzI5MTNdPTc0Njc7ZVsyOTE0XT03NDY4O2VbMjkxNl09NzQ3MDtlWzI5MTddPTc0NzE7ZVsyOTE4XT03NDcyO2VbMjkyMF09NzQ3NDtlWzI5MjFdPTc0NzU7ZVsyOTIyXT03NDc2O2VbMjkyNF09NzQ3ODtlWzI5MjVdPTc0Nzk7ZVsyOTI2XT03NDgwO2VbMjkyOF09NzQ4MjtlWzI5MjldPTc0ODM7ZVsyOTMwXT03NDg0O2VbMjkzMl09NzQ4NjtlWzI5MzNdPTc0ODc7ZVsyOTM0XT03NDg4O2VbMjkzNl09NzQ5MDtlWzI5MzddPTc0OTE7ZVsyOTM4XT03NDkyO2VbMjk0MF09NzQ5NDtlWzI5NDFdPTc0OTU7ZVsyOTQyXT03NDk2O2VbMjk0NF09NzQ5ODtlWzI5NDZdPTc1MDA7ZVsyOTQ4XT03NTAyO2VbMjk1MF09NzUwNDtlWzI5NTFdPTc1MDU7ZVsyOTUyXT03NTA2O2VbMjk1NF09NzUwODtlWzI5NTVdPTc1MDk7ZVsyOTU2XT03NTEwO2VbMjk1OF09NzUxMjtlWzI5NTldPTc1MTM7ZVsyOTYwXT03NTE0O2VbMjk2Ml09NzUxNjtlWzI5NjNdPTc1MTc7ZVsyOTY0XT03NTE4O2VbMjk2Nl09NzUyMDtlWzI5NjddPTc1MjE7ZVsyOTY4XT03NTIyO2VbMjk3MF09NzUyNDtlWzI5NzFdPTc1MjU7ZVsyOTcyXT03NTI2O2VbMjk3NF09NzUyODtlWzI5NzVdPTc1Mjk7ZVsyOTc2XT03NTMwO2VbMjk3OF09MTUzNztlWzI5NzldPTE1Mzg7ZVsyOTgwXT0xNTM5O2VbMjk4Ml09MTU0OTtlWzI5ODNdPTE1NTE7ZVsyOTg0XT0xNTUyO2VbMjk4Nl09MTU1NDtlWzI5ODddPTE1NTU7ZVsyOTg4XT0xNTU2O2VbMjk5MF09MTYyMztlWzI5OTFdPTE2MjQ7ZVsyOTk1XT0xNzc1O2VbMjk5OV09MTc5MTtlWzMwMDJdPTY0MjkwO2VbMzAwM109NjQyOTE7ZVszMDA0XT02NDI5MjtlWzMwMDZdPTY0Mjk0O2VbMzAwN109NjQyOTU7ZVszMDA4XT02NDI5NjtlWzMwMTFdPTE5MDA7ZVszMDE0XT04MjIzO2VbMzAxNV09ODI0NDtlWzMwMTddPTc1MzI7ZVszMDE4XT03NTMzO2VbMzAxOV09NzUzNDtlWzMwNzVdPTc1OTA7ZVszMDc2XT03NTkxO2VbMzA3OV09NzU5NDtlWzMwODBdPTc1OTU7ZVszMDgzXT03NTk4O2VbMzA4NF09NzU5OTtlWzMwODddPTc2MDI7ZVszMDg4XT03NjAzO2VbMzA5MV09NzYwNjtlWzMwOTJdPTc2MDc7ZVszMDk1XT03NjEwO2VbMzA5Nl09NzYxMTtlWzMwOTldPTc2MTQ7ZVszMTAwXT03NjE1O2VbMzEwM109NzYxODtlWzMxMDRdPTc2MTk7ZVszMTA3XT04MzM3O2VbMzEwOF09ODMzODtlWzMxMTZdPTE4ODQ7ZVszMTE5XT0xODg1O2VbMzEyMF09MTg4NTtlWzMxMjNdPTE4ODY7ZVszMTI0XT0xODg2O2VbMzEyN109MTg4NztlWzMxMjhdPTE4ODc7ZVszMTMxXT0xODg4O2VbMzEzMl09MTg4ODtlWzMxMzVdPTE4ODk7ZVszMTM2XT0xODg5O2VbMzEzOV09MTg5MDtlWzMxNDBdPTE4OTA7ZVszMTQzXT0xODkxO2VbMzE0NF09MTg5MTtlWzMxNDddPTE4OTI7ZVszMTQ4XT0xODkyO2VbMzE1M109NTgwO2VbMzE1NF09NTgxO2VbMzE1N109NTg0O2VbMzE1OF09NTg1O2VbMzE2MV09NTg4O2VbMzE2Ml09NTg5O2VbMzE2NV09ODkxO2VbMzE2Nl09ODkyO2VbMzE2OV09MTI3NDtlWzMxNzBdPTEyNzU7ZVszMTczXT0xMjc4O2VbMzE3NF09MTI3OTtlWzMxODFdPTc2MjI7ZVszMTgyXT03NjIzO2VbMzI4Ml09MTE3OTk7ZVszMzE2XT01Nzg7ZVszMzc5XT00Mjc4NTtlWzMzOTNdPTExNTk7ZVszNDE2XT04Mzc3fSkpLGlhPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZVsyMjddPTMyMjtlWzI2NF09MjYxO2VbMjkxXT0zNDZ9KSksYWE9Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlWzFdPTMyO2VbNF09NjU7ZVs1XT0xOTI7ZVs2XT0xOTM7ZVs5XT0xOTY7ZVsxN109NjY7ZVsxOF09Njc7ZVsyMV09MjY4O2VbMjRdPTY4O2VbMjhdPTY5O2VbMjldPTIwMDtlWzMwXT0yMDE7ZVszMl09MjgyO2VbMzhdPTcwO2VbMzldPTcxO2VbNDRdPTcyO2VbNDddPTczO2VbNDhdPTIwNDtlWzQ5XT0yMDU7ZVs1OF09NzQ7ZVs2MF09NzU7ZVs2Ml09NzY7ZVs2OF09Nzc7ZVs2OV09Nzg7ZVs3NV09Nzk7ZVs3Nl09MjEwO2VbODBdPTIxNDtlWzg3XT04MDtlWzg5XT04MTtlWzkwXT04MjtlWzkyXT0zNDQ7ZVs5NF09ODM7ZVs5N109MzUyO2VbMTAwXT04NDtlWzEwNF09ODU7ZVsxMDldPTIyMDtlWzExNV09ODY7ZVsxMTZdPTg3O2VbMTIxXT04ODtlWzEyMl09ODk7ZVsxMjRdPTIyMTtlWzEyN109OTA7ZVsxMjldPTM4MTtlWzI1OF09OTc7ZVsyNTldPTIyNDtlWzI2MF09MjI1O2VbMjYzXT0yMjg7ZVsyNjhdPTI2MTtlWzI3MV09OTg7ZVsyNzJdPTk5O2VbMjczXT0yNjM7ZVsyNzVdPTI2OTtlWzI4Ml09MTAwO2VbMjg2XT0xMDE7ZVsyODddPTIzMjtlWzI4OF09MjMzO2VbMjkwXT0yODM7ZVsyOTVdPTI4MTtlWzI5Nl09MTAyO2VbMzM2XT0xMDM7ZVszNDZdPTEwNDtlWzM0OV09MTA1O2VbMzUwXT0yMzY7ZVszNTFdPTIzNztlWzM2MV09MTA2O2VbMzY0XT0xMDc7ZVszNjddPTEwODtlWzM3MV09MzIyO2VbMzczXT0xMDk7ZVszNzRdPTExMDtlWzM4MV09MTExO2VbMzgyXT0yNDI7ZVszODNdPTI0MztlWzM4Nl09MjQ2O2VbMzkzXT0xMTI7ZVszOTVdPTExMztlWzM5Nl09MTE0O2VbMzk4XT0zNDU7ZVs0MDBdPTExNTtlWzQwMV09MzQ3O2VbNDAzXT0zNTM7ZVs0MTBdPTExNjtlWzQzN109MTE3O2VbNDQyXT0yNTI7ZVs0NDhdPTExODtlWzQ0OV09MTE5O2VbNDU0XT0xMjA7ZVs0NTVdPTEyMTtlWzQ1N109MjUzO2VbNDYwXT0xMjI7ZVs0NjJdPTM4MjtlWzQ2M109MzgwO2VbODUzXT00NDtlWzg1NV09NTg7ZVs4NTZdPTQ2O2VbODc2XT00NztlWzg3OF09NDU7ZVs4ODJdPTQ1O2VbODk0XT00MDtlWzg5NV09NDE7ZVs4OTZdPTkxO2VbODk3XT05MztlWzkyM109NjQ7ZVsxMDA0XT00ODtlWzEwMDVdPTQ5O2VbMTAwNl09NTA7ZVsxMDA3XT01MTtlWzEwMDhdPTUyO2VbMTAwOV09NTM7ZVsxMDEwXT01NDtlWzEwMTFdPTU1O2VbMTAxMl09NTY7ZVsxMDEzXT01NztlWzEwODFdPTM3O2VbMTA4NV09NDM7ZVsxMDg2XT00NX0pKTtmdW5jdGlvbiBnZXRTdGFuZGFyZEZvbnROYW1lKGUpe2NvbnN0IHQ9bm9ybWFsaXplRm9udE5hbWUoZSk7cmV0dXJuIF9pKClbdF19ZnVuY3Rpb24gaXNLbm93bkZvbnROYW1lKGUpe2NvbnN0IHQ9bm9ybWFsaXplRm9udE5hbWUoZSk7cmV0dXJuISEoX2koKVt0XXx8JGkoKVt0XXx8QWEoKVt0XXx8ZWEoKVt0XSl9Y2xhc3MgVG9Vbmljb2RlTWFwe2NvbnN0cnVjdG9yKGU9W10pe3RoaXMuX21hcD1lfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH1mb3JFYWNoKGUpe2Zvcihjb25zdCB0IGluIHRoaXMuX21hcCllKHQsdGhpcy5fbWFwW3RdLmNoYXJDb2RlQXQoMCkpfWhhcyhlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbWFwW2VdfWdldChlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfWNoYXJDb2RlT2YoZSl7Y29uc3QgdD10aGlzLl9tYXA7aWYodC5sZW5ndGg8PTY1NTM2KXJldHVybiB0LmluZGV4T2YoZSk7Zm9yKGNvbnN0IGkgaW4gdClpZih0W2ldPT09ZSlyZXR1cm4gMHxpO3JldHVybi0xfWFtZW5kKGUpe2Zvcihjb25zdCB0IGluIGUpdGhpcy5fbWFwW3RdPWVbdF19fWNsYXNzIElkZW50aXR5VG9Vbmljb2RlTWFwe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5maXJzdENoYXI9ZTt0aGlzLmxhc3RDaGFyPXR9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmxhc3RDaGFyKzEtdGhpcy5maXJzdENoYXJ9Zm9yRWFjaChlKXtmb3IobGV0IHQ9dGhpcy5maXJzdENoYXIsaT10aGlzLmxhc3RDaGFyO3Q8PWk7dCsrKWUodCx0KX1oYXMoZSl7cmV0dXJuIHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyfWdldChlKXtpZih0aGlzLmZpcnN0Q2hhcjw9ZSYmZTw9dGhpcy5sYXN0Q2hhcilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlKX1jaGFyQ29kZU9mKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPj10aGlzLmZpcnN0Q2hhciYmZTw9dGhpcy5sYXN0Q2hhcj9lOi0xfWFtZW5kKGUpe3VucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgYW1lbmQoKSIpfX1jbGFzcyBDRkZGb250e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wcm9wZXJ0aWVzPXQ7Y29uc3QgaT1uZXcgQ0ZGUGFyc2VyKGUsdCxPaSk7dGhpcy5jZmY9aS5wYXJzZSgpO3RoaXMuY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtjb25zdCBhPW5ldyBDRkZDb21waWxlcih0aGlzLmNmZik7dGhpcy5zZWFjcz10aGlzLmNmZi5zZWFjczt0cnl7dGhpcy5kYXRhPWEuY29tcGlsZSgpfWNhdGNoe3dhcm4oIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIit0LmxvYWRlZE5hbWUpO3RoaXMuZGF0YT1lfXRoaXMuX2NyZWF0ZUJ1aWx0SW5FbmNvZGluZygpfWdldCBudW1HbHlwaHMoKXtyZXR1cm4gdGhpcy5jZmYuY2hhclN0cmluZ3MuY291bnR9Z2V0Q2hhcnNldCgpe3JldHVybiB0aGlzLmNmZi5jaGFyc2V0LmNoYXJzZXR9Z2V0R2x5cGhNYXBwaW5nKCl7Y29uc3QgZT10aGlzLmNmZix0PXRoaXMucHJvcGVydGllcyx7Y2lkVG9HaWRNYXA6aSxjTWFwOmF9PXQscj1lLmNoYXJzZXQuY2hhcnNldDtsZXQgcyxuO2lmKHQuY29tcG9zaXRlKXtsZXQgdCxvO2lmKGk/Lmxlbmd0aD4wKXt0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPTAsYT1pLmxlbmd0aDtlPGE7ZSsrKXtjb25zdCBhPWlbZV07dm9pZCAwIT09YSYmKHRbYV09ZSl9fXM9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlLmlzQ0lERm9udClmb3Iobj0wO248ci5sZW5ndGg7bisrKXtjb25zdCBlPXJbbl07bz1hLmNoYXJDb2RlT2YoZSk7dm9pZCAwIT09dD8uW29dJiYobz10W29dKTtzW29dPW59ZWxzZSBmb3Iobj0wO248ZS5jaGFyU3RyaW5ncy5jb3VudDtuKyspe289YS5jaGFyQ29kZU9mKG4pO3Nbb109bn1yZXR1cm4gc31sZXQgbz1lLmVuY29kaW5nP2UuZW5jb2RpbmcuZW5jb2Rpbmc6bnVsbDt0LmlzSW50ZXJuYWxGb250JiYobz10LmRlZmF1bHRFbmNvZGluZyk7cz10eXBlMUZvbnRHbHlwaE1hcHBpbmcodCxvLHIpO3JldHVybiBzfWhhc0dseXBoSWQoZSl7cmV0dXJuIHRoaXMuY2ZmLmhhc0dseXBoSWQoZSl9X2NyZWF0ZUJ1aWx0SW5FbmNvZGluZygpe2NvbnN0e2NoYXJzZXQ6ZSxlbmNvZGluZzp0fT10aGlzLmNmZjtpZighZXx8IXQpcmV0dXJuO2NvbnN0IGk9ZS5jaGFyc2V0LGE9dC5lbmNvZGluZyxyPVtdO2Zvcihjb25zdCBlIGluIGEpe2NvbnN0IHQ9YVtlXTtpZih0Pj0wKXtjb25zdCBhPWlbdF07YSYmKHJbZV09YSl9fXIubGVuZ3RoPjAmJih0aGlzLnByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nPXIpfX1mdW5jdGlvbiBnZXRVaW50MzIoZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdKT4+PjB9ZnVuY3Rpb24gZ2V0VWludDE2KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIGdldEludDE2KGUsdCl7cmV0dXJuKGVbdF08PDI0fGVbdCsxXTw8MTYpPj4xNn1mdW5jdGlvbiBnZXRJbnQ4KGUsdCl7cmV0dXJuIGVbdF08PDI0Pj4yNH1mdW5jdGlvbiBnZXRGbG9hdDIxNChlLHQpe3JldHVybiBnZXRJbnQxNihlLHQpLzE2Mzg0fWZ1bmN0aW9uIGdldFN1YnJvdXRpbmVCaWFzKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGk9MzI3Njg7dDwxMjQwP2k9MTA3OnQ8MzM5MDAmJihpPTExMzEpO3JldHVybiBpfWZ1bmN0aW9uIHBhcnNlQ21hcChlLHQsaSl7Y29uc3QgYT0xPT09Z2V0VWludDE2KGUsdCsyKT9nZXRVaW50MzIoZSx0KzgpOmdldFVpbnQzMihlLHQrMTYpLHI9Z2V0VWludDE2KGUsdCthKTtsZXQgcyxuLG87aWYoND09PXIpe2dldFVpbnQxNihlLHQrYSsyKTtjb25zdCBpPWdldFVpbnQxNihlLHQrYSs2KT4+MTtuPXQrYSsxNDtzPVtdO2ZvcihvPTA7bzxpO28rKyxuKz0yKXNbb109e2VuZDpnZXRVaW50MTYoZSxuKX07bis9Mjtmb3Iobz0wO288aTtvKyssbis9MilzW29dLnN0YXJ0PWdldFVpbnQxNihlLG4pO2ZvcihvPTA7bzxpO28rKyxuKz0yKXNbb10uaWREZWx0YT1nZXRVaW50MTYoZSxuKTtmb3Iobz0wO288aTtvKyssbis9Mil7bGV0IHQ9Z2V0VWludDE2KGUsbik7aWYoMCE9PXQpe3Nbb10uaWRzPVtdO2ZvcihsZXQgaT0wLGE9c1tvXS5lbmQtc1tvXS5zdGFydCsxO2k8YTtpKyspe3Nbb10uaWRzW2ldPWdldFVpbnQxNihlLG4rdCk7dCs9Mn19fXJldHVybiBzfWlmKDEyPT09cil7Y29uc3QgaT1nZXRVaW50MzIoZSx0K2ErMTIpO249dCthKzE2O3M9W107Zm9yKG89MDtvPGk7bysrKXt0PWdldFVpbnQzMihlLG4pO3MucHVzaCh7c3RhcnQ6dCxlbmQ6Z2V0VWludDMyKGUsbis0KSxpZERlbHRhOmdldFVpbnQzMihlLG4rOCktdH0pO24rPTEyfXJldHVybiBzfXRocm93IG5ldyBGb3JtYXRFcnJvcihgdW5zdXBwb3J0ZWQgY21hcDogJHtyfWApfWZ1bmN0aW9uIHBhcnNlQ2ZmKGUsdCxpLGEpe2NvbnN0IHI9bmV3IENGRlBhcnNlcihuZXcgU3RyZWFtKGUsdCxpLXQpLHt9LGEpLnBhcnNlKCk7cmV0dXJue2dseXBoczpyLmNoYXJTdHJpbmdzLm9iamVjdHMsc3VicnM6ci50b3BEaWN0LnByaXZhdGVEaWN0Py5zdWJyc0luZGV4Py5vYmplY3RzLGdzdWJyczpyLmdsb2JhbFN1YnJJbmRleD8ub2JqZWN0cyxpc0NGRkNJREZvbnQ6ci5pc0NJREZvbnQsZmRTZWxlY3Q6ci5mZFNlbGVjdCxmZEFycmF5OnIuZmRBcnJheX19ZnVuY3Rpb24gbG9va3VwQ21hcChlLHQpe2NvbnN0IGk9dC5jb2RlUG9pbnRBdCgwKTtsZXQgYT0wLHI9MCxzPWUubGVuZ3RoLTE7Zm9yKDtyPHM7KXtjb25zdCB0PXIrcysxPj4xO2k8ZVt0XS5zdGFydD9zPXQtMTpyPXR9ZVtyXS5zdGFydDw9aSYmaTw9ZVtyXS5lbmQmJihhPWVbcl0uaWREZWx0YSsoZVtyXS5pZHM/ZVtyXS5pZHNbaS1lW3JdLnN0YXJ0XTppKSY2NTUzNSk7cmV0dXJue2NoYXJDb2RlOmksZ2x5cGhJZDphfX1mdW5jdGlvbiBjb21waWxlR2x5ZihlLHQsaSl7ZnVuY3Rpb24gbW92ZVRvKGUsaSl7dC5hZGQoRXQsW2UsaV0pfWZ1bmN0aW9uIGxpbmVUbyhlLGkpe3QuYWRkKHV0LFtlLGldKX1mdW5jdGlvbiBxdWFkcmF0aWNDdXJ2ZVRvKGUsaSxhLHIpe3QuYWRkKGR0LFtlLGksYSxyXSl9bGV0IGE9MDtjb25zdCByPWdldEludDE2KGUsYSk7bGV0IHMsbj0wLG89MDthKz0xMDtpZihyPDApZG97cz1nZXRVaW50MTYoZSxhKTtjb25zdCByPWdldFVpbnQxNihlLGErMik7YSs9NDtsZXQgZyxjO2lmKDEmcyl7aWYoMiZzKXtnPWdldEludDE2KGUsYSk7Yz1nZXRJbnQxNihlLGErMil9ZWxzZXtnPWdldFVpbnQxNihlLGEpO2M9Z2V0VWludDE2KGUsYSsyKX1hKz00fWVsc2UgaWYoMiZzKXtnPWdldEludDgoZSxhKyspO2M9Z2V0SW50OChlLGErKyl9ZWxzZXtnPWVbYSsrXTtjPWVbYSsrXX1pZigyJnMpe249ZztvPWN9ZWxzZXtuPTA7bz0wfWxldCBDPTEsaD0xLGw9MCxRPTA7aWYoOCZzKXtDPWg9Z2V0RmxvYXQyMTQoZSxhKTthKz0yfWVsc2UgaWYoNjQmcyl7Qz1nZXRGbG9hdDIxNChlLGEpO2g9Z2V0RmxvYXQyMTQoZSxhKzIpO2ErPTR9ZWxzZSBpZigxMjgmcyl7Qz1nZXRGbG9hdDIxNChlLGEpO2w9Z2V0RmxvYXQyMTQoZSxhKzIpO1E9Z2V0RmxvYXQyMTQoZSxhKzQpO2g9Z2V0RmxvYXQyMTQoZSxhKzYpO2ErPTh9Y29uc3QgRT1pLmdseXBoc1tyXTtpZihFKXt0LmFkZChwdCk7dC5hZGQoeXQsW0MsbCxRLGgsbixvXSk7Y29tcGlsZUdseWYoRSx0LGkpO3QuYWRkKGZ0KX19d2hpbGUoMzImcyk7ZWxzZXtjb25zdCB0PVtdO2xldCBpLGc7Zm9yKGk9MDtpPHI7aSsrKXt0LnB1c2goZ2V0VWludDE2KGUsYSkpO2ErPTJ9YSs9MitnZXRVaW50MTYoZSxhKTtjb25zdCBjPXQuYXQoLTEpKzEsQz1bXTtmb3IoO0MubGVuZ3RoPGM7KXtzPWVbYSsrXTtsZXQgdD0xOzgmcyYmKHQrPWVbYSsrXSk7Zm9yKDt0LS0gPjA7KUMucHVzaCh7ZmxhZ3M6c30pfWZvcihpPTA7aTxjO2krKyl7c3dpdGNoKDE4JkNbaV0uZmxhZ3Mpe2Nhc2UgMDpuKz1nZXRJbnQxNihlLGEpO2ErPTI7YnJlYWs7Y2FzZSAyOm4tPWVbYSsrXTticmVhaztjYXNlIDE4Om4rPWVbYSsrXX1DW2ldLng9bn1mb3IoaT0wO2k8YztpKyspe3N3aXRjaCgzNiZDW2ldLmZsYWdzKXtjYXNlIDA6bys9Z2V0SW50MTYoZSxhKTthKz0yO2JyZWFrO2Nhc2UgNDpvLT1lW2ErK107YnJlYWs7Y2FzZSAzNjpvKz1lW2ErK119Q1tpXS55PW99bGV0IGg9MDtmb3IoYT0wO2E8cjthKyspe2NvbnN0IGU9dFthXSxyPUMuc2xpY2UoaCxlKzEpO2lmKDEmclswXS5mbGFncylyLnB1c2goclswXSk7ZWxzZSBpZigxJnIuYXQoLTEpLmZsYWdzKXIudW5zaGlmdChyLmF0KC0xKSk7ZWxzZXtjb25zdCBlPXtmbGFnczoxLHg6KHJbMF0ueCtyLmF0KC0xKS54KS8yLHk6KHJbMF0ueStyLmF0KC0xKS55KS8yfTtyLnVuc2hpZnQoZSk7ci5wdXNoKGUpfW1vdmVUbyhyWzBdLngsclswXS55KTtmb3IoaT0xLGc9ci5sZW5ndGg7aTxnO2krKylpZigxJnJbaV0uZmxhZ3MpbGluZVRvKHJbaV0ueCxyW2ldLnkpO2Vsc2UgaWYoMSZyW2krMV0uZmxhZ3Mpe3F1YWRyYXRpY0N1cnZlVG8ocltpXS54LHJbaV0ueSxyW2krMV0ueCxyW2krMV0ueSk7aSsrfWVsc2UgcXVhZHJhdGljQ3VydmVUbyhyW2ldLngscltpXS55LChyW2ldLngrcltpKzFdLngpLzIsKHJbaV0ueStyW2krMV0ueSkvMik7aD1lKzF9fX1mdW5jdGlvbiBjb21waWxlQ2hhclN0cmluZyhlLHQsaSxhKXtmdW5jdGlvbiBtb3ZlVG8oZSxpKXt0LmFkZChFdCxbZSxpXSl9ZnVuY3Rpb24gbGluZVRvKGUsaSl7dC5hZGQodXQsW2UsaV0pfWZ1bmN0aW9uIGJlemllckN1cnZlVG8oZSxpLGEscixzLG4pe3QuYWRkKFF0LFtlLGksYSxyLHMsbl0pfWNvbnN0IHI9W107bGV0IHM9MCxuPTAsbz0wOyFmdW5jdGlvbiBwYXJzZShlKXtsZXQgZz0wO2Zvcig7ZzxlLmxlbmd0aDspe2xldCBjLEMsaCxsLFEsRSx1LGQsZixwPSExLG09ZVtnKytdO3N3aXRjaChtKXtjYXNlIDE6Y2FzZSAzOmNhc2UgMTg6Y2FzZSAyMzpvKz1yLmxlbmd0aD4+MTtwPSEwO2JyZWFrO2Nhc2UgNDpuKz1yLnBvcCgpO21vdmVUbyhzLG4pO3A9ITA7YnJlYWs7Y2FzZSA1OmZvcig7ci5sZW5ndGg+MDspe3MrPXIuc2hpZnQoKTtuKz1yLnNoaWZ0KCk7bGluZVRvKHMsbil9YnJlYWs7Y2FzZSA2OmZvcig7ci5sZW5ndGg+MDspe3MrPXIuc2hpZnQoKTtsaW5lVG8ocyxuKTtpZigwPT09ci5sZW5ndGgpYnJlYWs7bis9ci5zaGlmdCgpO2xpbmVUbyhzLG4pfWJyZWFrO2Nhc2UgNzpmb3IoO3IubGVuZ3RoPjA7KXtuKz1yLnNoaWZ0KCk7bGluZVRvKHMsbik7aWYoMD09PXIubGVuZ3RoKWJyZWFrO3MrPXIuc2hpZnQoKTtsaW5lVG8ocyxuKX1icmVhaztjYXNlIDg6Zm9yKDtyLmxlbmd0aD4wOyl7Yz1zK3Iuc2hpZnQoKTtoPW4rci5zaGlmdCgpO0M9YytyLnNoaWZ0KCk7bD1oK3Iuc2hpZnQoKTtzPUMrci5zaGlmdCgpO249bCtyLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyhjLGgsQyxsLHMsbil9YnJlYWs7Y2FzZSAxMDpkPXIucG9wKCk7Zj1udWxsO2lmKGkuaXNDRkZDSURGb250KXtjb25zdCBlPWkuZmRTZWxlY3QuZ2V0RkRJbmRleChhKTtpZihlPj0wJiZlPGkuZmRBcnJheS5sZW5ndGgpe2NvbnN0IHQ9aS5mZEFycmF5W2VdO2xldCBhO3QucHJpdmF0ZURpY3Q/LnN1YnJzSW5kZXgmJihhPXQucHJpdmF0ZURpY3Quc3VicnNJbmRleC5vYmplY3RzKTtpZihhKXtkKz1nZXRTdWJyb3V0aW5lQmlhcyhhKTtmPWFbZF19fWVsc2Ugd2FybigiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguIil9ZWxzZSBmPWkuc3VicnNbZCtpLnN1YnJzQmlhc107ZiYmcGFyc2UoZik7YnJlYWs7Y2FzZSAxMTpyZXR1cm47Y2FzZSAxMjptPWVbZysrXTtzd2l0Y2gobSl7Y2FzZSAzNDpjPXMrci5zaGlmdCgpO0M9YytyLnNoaWZ0KCk7UT1uK3Iuc2hpZnQoKTtzPUMrci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxuLEMsUSxzLFEpO2M9cytyLnNoaWZ0KCk7Qz1jK3Iuc2hpZnQoKTtzPUMrci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxRLEMsbixzLG4pO2JyZWFrO2Nhc2UgMzU6Yz1zK3Iuc2hpZnQoKTtoPW4rci5zaGlmdCgpO0M9YytyLnNoaWZ0KCk7bD1oK3Iuc2hpZnQoKTtzPUMrci5zaGlmdCgpO249bCtyLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyhjLGgsQyxsLHMsbik7Yz1zK3Iuc2hpZnQoKTtoPW4rci5zaGlmdCgpO0M9YytyLnNoaWZ0KCk7bD1oK3Iuc2hpZnQoKTtzPUMrci5zaGlmdCgpO249bCtyLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyhjLGgsQyxsLHMsbik7ci5wb3AoKTticmVhaztjYXNlIDM2OmM9cytyLnNoaWZ0KCk7UT1uK3Iuc2hpZnQoKTtDPWMrci5zaGlmdCgpO0U9UStyLnNoaWZ0KCk7cz1DK3Iuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKGMsUSxDLEUscyxFKTtjPXMrci5zaGlmdCgpO0M9YytyLnNoaWZ0KCk7dT1FK3Iuc2hpZnQoKTtzPUMrci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxFLEMsdSxzLG4pO2JyZWFrO2Nhc2UgMzc6Y29uc3QgZT1zLHQ9bjtjPXMrci5zaGlmdCgpO2g9bityLnNoaWZ0KCk7Qz1jK3Iuc2hpZnQoKTtsPWgrci5zaGlmdCgpO3M9QytyLnNoaWZ0KCk7bj1sK3Iuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKGMsaCxDLGwscyxuKTtjPXMrci5zaGlmdCgpO2g9bityLnNoaWZ0KCk7Qz1jK3Iuc2hpZnQoKTtsPWgrci5zaGlmdCgpO3M9QztuPWw7TWF0aC5hYnMocy1lKT5NYXRoLmFicyhuLXQpP3MrPXIuc2hpZnQoKTpuKz1yLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyhjLGgsQyxsLHMsbik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYHVua25vd24gb3BlcmF0b3I6IDEyICR7bX1gKX1icmVhaztjYXNlIDE0OmlmKHIubGVuZ3RoPj00KXtjb25zdCBlPXIucG9wKCksYT1yLnBvcCgpO249ci5wb3AoKTtzPXIucG9wKCk7dC5hZGQocHQpO3QuYWRkKHd0LFtzLG5dKTtsZXQgbz1sb29rdXBDbWFwKGkuY21hcCxTdHJpbmcuZnJvbUNoYXJDb2RlKGkuZ2x5cGhOYW1lTWFwW2JpW2VdXSkpO2NvbXBpbGVDaGFyU3RyaW5nKGkuZ2x5cGhzW28uZ2x5cGhJZF0sdCxpLG8uZ2x5cGhJZCk7dC5hZGQoZnQpO289bG9va3VwQ21hcChpLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShpLmdseXBoTmFtZU1hcFtiaVthXV0pKTtjb21waWxlQ2hhclN0cmluZyhpLmdseXBoc1tvLmdseXBoSWRdLHQsaSxvLmdseXBoSWQpfXJldHVybjtjYXNlIDE5OmNhc2UgMjA6bys9ci5sZW5ndGg+PjE7Zys9bys3Pj4zO3A9ITA7YnJlYWs7Y2FzZSAyMTpuKz1yLnBvcCgpO3MrPXIucG9wKCk7bW92ZVRvKHMsbik7cD0hMDticmVhaztjYXNlIDIyOnMrPXIucG9wKCk7bW92ZVRvKHMsbik7cD0hMDticmVhaztjYXNlIDI0OmZvcig7ci5sZW5ndGg+Mjspe2M9cytyLnNoaWZ0KCk7aD1uK3Iuc2hpZnQoKTtDPWMrci5zaGlmdCgpO2w9aCtyLnNoaWZ0KCk7cz1DK3Iuc2hpZnQoKTtuPWwrci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxoLEMsbCxzLG4pfXMrPXIuc2hpZnQoKTtuKz1yLnNoaWZ0KCk7bGluZVRvKHMsbik7YnJlYWs7Y2FzZSAyNTpmb3IoO3IubGVuZ3RoPjY7KXtzKz1yLnNoaWZ0KCk7bis9ci5zaGlmdCgpO2xpbmVUbyhzLG4pfWM9cytyLnNoaWZ0KCk7aD1uK3Iuc2hpZnQoKTtDPWMrci5zaGlmdCgpO2w9aCtyLnNoaWZ0KCk7cz1DK3Iuc2hpZnQoKTtuPWwrci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxoLEMsbCxzLG4pO2JyZWFrO2Nhc2UgMjY6ci5sZW5ndGglMiYmKHMrPXIuc2hpZnQoKSk7Zm9yKDtyLmxlbmd0aD4wOyl7Yz1zO2g9bityLnNoaWZ0KCk7Qz1jK3Iuc2hpZnQoKTtsPWgrci5zaGlmdCgpO3M9QztuPWwrci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxoLEMsbCxzLG4pfWJyZWFrO2Nhc2UgMjc6ci5sZW5ndGglMiYmKG4rPXIuc2hpZnQoKSk7Zm9yKDtyLmxlbmd0aD4wOyl7Yz1zK3Iuc2hpZnQoKTtoPW47Qz1jK3Iuc2hpZnQoKTtsPWgrci5zaGlmdCgpO3M9QytyLnNoaWZ0KCk7bj1sO2JlemllckN1cnZlVG8oYyxoLEMsbCxzLG4pfWJyZWFrO2Nhc2UgMjg6ci5wdXNoKChlW2ddPDwyNHxlW2crMV08PDE2KT4+MTYpO2crPTI7YnJlYWs7Y2FzZSAyOTpkPXIucG9wKCkraS5nc3VicnNCaWFzO2Y9aS5nc3VicnNbZF07ZiYmcGFyc2UoZik7YnJlYWs7Y2FzZSAzMDpmb3IoO3IubGVuZ3RoPjA7KXtjPXM7aD1uK3Iuc2hpZnQoKTtDPWMrci5zaGlmdCgpO2w9aCtyLnNoaWZ0KCk7cz1DK3Iuc2hpZnQoKTtuPWwrKDE9PT1yLmxlbmd0aD9yLnNoaWZ0KCk6MCk7YmV6aWVyQ3VydmVUbyhjLGgsQyxsLHMsbik7aWYoMD09PXIubGVuZ3RoKWJyZWFrO2M9cytyLnNoaWZ0KCk7aD1uO0M9YytyLnNoaWZ0KCk7bD1oK3Iuc2hpZnQoKTtuPWwrci5zaGlmdCgpO3M9QysoMT09PXIubGVuZ3RoP3Iuc2hpZnQoKTowKTtiZXppZXJDdXJ2ZVRvKGMsaCxDLGwscyxuKX1icmVhaztjYXNlIDMxOmZvcig7ci5sZW5ndGg+MDspe2M9cytyLnNoaWZ0KCk7aD1uO0M9YytyLnNoaWZ0KCk7bD1oK3Iuc2hpZnQoKTtuPWwrci5zaGlmdCgpO3M9QysoMT09PXIubGVuZ3RoP3Iuc2hpZnQoKTowKTtiZXppZXJDdXJ2ZVRvKGMsaCxDLGwscyxuKTtpZigwPT09ci5sZW5ndGgpYnJlYWs7Yz1zO2g9bityLnNoaWZ0KCk7Qz1jK3Iuc2hpZnQoKTtsPWgrci5zaGlmdCgpO3M9QytyLnNoaWZ0KCk7bj1sKygxPT09ci5sZW5ndGg/ci5zaGlmdCgpOjApO2JlemllckN1cnZlVG8oYyxoLEMsbCxzLG4pfWJyZWFrO2RlZmF1bHQ6aWYobTwzMil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYHVua25vd24gb3BlcmF0b3I6ICR7bX1gKTtpZihtPDI0NylyLnB1c2gobS0xMzkpO2Vsc2UgaWYobTwyNTEpci5wdXNoKDI1NioobS0yNDcpK2VbZysrXSsxMDgpO2Vsc2UgaWYobTwyNTUpci5wdXNoKDI1NiotKG0tMjUxKS1lW2crK10tMTA4KTtlbHNle3IucHVzaCgoZVtnXTw8MjR8ZVtnKzFdPDwxNnxlW2crMl08PDh8ZVtnKzNdKS82NTUzNik7Zys9NH19cCYmKHIubGVuZ3RoPTApfX0oZSl9Y29uc3QgcmE9W107Y2xhc3MgQ29tbWFuZHN7Y21kcz1bXTthZGQoZSx0KXtpZih0KWlmKGlzTnVtYmVyQXJyYXkodCxudWxsKSl0aGlzLmNtZHMucHVzaChlLC4uLnQpO2Vsc2V7d2FybihgQ29tbWFuZHMuYWRkIC0gIiR7ZX0iIGhhcyBhdCBsZWFzdCBvbmUgbm9uLW51bWJlciBhcmc6ICIke3R9Ii5gKTtjb25zdCBpPXQubWFwKChlPT4ibnVtYmVyIj09dHlwZW9mIGU/ZTowKSk7dGhpcy5jbWRzLnB1c2goZSwuLi5pKX1lbHNlIHRoaXMuY21kcy5wdXNoKGUpfX1jbGFzcyBDb21waWxlZEZvbnR7Y29uc3RydWN0b3IoZSl7dGhpcy5mb250TWF0cml4PWU7dGhpcy5jb21waWxlZEdseXBocz1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZD1PYmplY3QuY3JlYXRlKG51bGwpfWdldFBhdGhKcyhlKXtjb25zdHtjaGFyQ29kZTp0LGdseXBoSWQ6aX09bG9va3VwQ21hcCh0aGlzLmNtYXAsZSk7bGV0IGEscj10aGlzLmNvbXBpbGVkR2x5cGhzW2ldO2lmKCFyKXt0cnl7cj10aGlzLmNvbXBpbGVHbHlwaCh0aGlzLmdseXBoc1tpXSxpKX1jYXRjaChlKXtyPXJhO2E9ZX10aGlzLmNvbXBpbGVkR2x5cGhzW2ldPXJ9dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdPz89aTtpZihhKXRocm93IGE7cmV0dXJuIHJ9Y29tcGlsZUdseXBoKGUsdCl7aWYoIWV8fDA9PT1lLmxlbmd0aHx8MTQ9PT1lWzBdKXJldHVybiByYTtsZXQgaT10aGlzLmZvbnRNYXRyaXg7aWYodGhpcy5pc0NGRkNJREZvbnQpe2NvbnN0IGU9dGhpcy5mZFNlbGVjdC5nZXRGREluZGV4KHQpO2lmKGU+PTAmJmU8dGhpcy5mZEFycmF5Lmxlbmd0aCl7aT10aGlzLmZkQXJyYXlbZV0uZ2V0QnlOYW1lKCJGb250TWF0cml4Iil8fHJ9ZWxzZSB3YXJuKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKX1jb25zdCBhPW5ldyBDb21tYW5kczthLmFkZChwdCk7YS5hZGQoeXQsaS5zbGljZSgpKTthLmFkZChtdCk7dGhpcy5jb21waWxlR2x5cGhJbXBsKGUsYSx0KTthLmFkZChmdCk7cmV0dXJuIGEuY21kc31jb21waWxlR2x5cGhJbXBsKCl7dW5yZWFjaGFibGUoIkNoaWxkcmVuIGNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCB0aGlzLiIpfWhhc0J1aWx0UGF0aChlKXtjb25zdHtjaGFyQ29kZTp0LGdseXBoSWQ6aX09bG9va3VwQ21hcCh0aGlzLmNtYXAsZSk7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbaV0mJnZvaWQgMCE9PXRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFt0XX19Y2xhc3MgVHJ1ZVR5cGVDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoaXx8WzQ4OGUtNiwwLDAsNDg4ZS02LDAsMF0pO3RoaXMuZ2x5cGhzPWU7dGhpcy5jbWFwPXR9Y29tcGlsZUdseXBoSW1wbChlLHQpe2NvbXBpbGVHbHlmKGUsdCx0aGlzKX19Y2xhc3MgVHlwZTJDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlLHQsaSxhKXtzdXBlcihpfHxbLjAwMSwwLDAsLjAwMSwwLDBdKTt0aGlzLmdseXBocz1lLmdseXBoczt0aGlzLmdzdWJycz1lLmdzdWJyc3x8W107dGhpcy5zdWJycz1lLnN1YnJzfHxbXTt0aGlzLmNtYXA9dDt0aGlzLmdseXBoTmFtZU1hcD1hfHxKaSgpO3RoaXMuZ3N1YnJzQmlhcz1nZXRTdWJyb3V0aW5lQmlhcyh0aGlzLmdzdWJycyk7dGhpcy5zdWJyc0JpYXM9Z2V0U3Vicm91dGluZUJpYXModGhpcy5zdWJycyk7dGhpcy5pc0NGRkNJREZvbnQ9ZS5pc0NGRkNJREZvbnQ7dGhpcy5mZFNlbGVjdD1lLmZkU2VsZWN0O3RoaXMuZmRBcnJheT1lLmZkQXJyYXl9Y29tcGlsZUdseXBoSW1wbChlLHQsaSl7Y29tcGlsZUNoYXJTdHJpbmcoZSx0LHRoaXMsaSl9fWNsYXNzIEZvbnRSZW5kZXJlckZhY3Rvcnl7c3RhdGljIGNyZWF0ZShlLHQpe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKTtsZXQgYSxyLHMsbixvLGc7Y29uc3QgYz1nZXRVaW50MTYoaSw0KTtmb3IobGV0IGU9MCxDPTEyO2U8YztlKyssQys9MTYpe2NvbnN0IGU9Ynl0ZXNUb1N0cmluZyhpLnN1YmFycmF5KEMsQys0KSksYz1nZXRVaW50MzIoaSxDKzgpLGg9Z2V0VWludDMyKGksQysxMik7c3dpdGNoKGUpe2Nhc2UiY21hcCI6YT1wYXJzZUNtYXAoaSxjKTticmVhaztjYXNlImdseWYiOnI9aS5zdWJhcnJheShjLGMraCk7YnJlYWs7Y2FzZSJsb2NhIjpzPWkuc3ViYXJyYXkoYyxjK2gpO2JyZWFrO2Nhc2UiaGVhZCI6Zz1nZXRVaW50MTYoaSxjKzE4KTtvPWdldFVpbnQxNihpLGMrNTApO2JyZWFrO2Nhc2UiQ0ZGICI6bj1wYXJzZUNmZihpLGMsYytoLHQpfX1pZihyKXtjb25zdCB0PWc/WzEvZywwLDAsMS9nLDAsMF06ZS5mb250TWF0cml4O3JldHVybiBuZXcgVHJ1ZVR5cGVDb21waWxlZChmdW5jdGlvbiBwYXJzZUdseWZUYWJsZShlLHQsaSl7bGV0IGEscjtpZihpKXthPTQ7cj1nZXRVaW50MzJ9ZWxzZXthPTI7cj0oZSx0KT0+MipnZXRVaW50MTYoZSx0KX1jb25zdCBzPVtdO2xldCBuPXIodCwwKTtmb3IobGV0IGk9YTtpPHQubGVuZ3RoO2krPWEpe2NvbnN0IGE9cih0LGkpO3MucHVzaChlLnN1YmFycmF5KG4sYSkpO249YX1yZXR1cm4gc30ocixzLG8pLGEsdCl9cmV0dXJuIG5ldyBUeXBlMkNvbXBpbGVkKG4sYSxlLmZvbnRNYXRyaXgsZS5nbHlwaE5hbWVNYXApfX1jb25zdCBzYT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj02MDA7ZVsiQ291cmllci1Cb2xkIl09NjAwO2VbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT02MDA7ZVsiQ291cmllci1PYmxpcXVlIl09NjAwO2UuSGVsdmV0aWNhPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5leGNsYW09Mjc4O2UucXVvdGVkYmw9MzU1O2UubnVtYmVyc2lnbj01NTY7ZS5kb2xsYXI9NTU2O2UucGVyY2VudD04ODk7ZS5hbXBlcnNhbmQ9NjY3O2UucXVvdGVyaWdodD0yMjI7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz0zODk7ZS5wbHVzPTU4NDtlLmNvbW1hPTI3ODtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9Mjc4O2Uuc2xhc2g9Mjc4O2UuemVybz01NTY7ZS5vbmU9NTU2O2UudHdvPTU1NjtlLnRocmVlPTU1NjtlLmZvdXI9NTU2O2UuZml2ZT01NTY7ZS5zaXg9NTU2O2Uuc2V2ZW49NTU2O2UuZWlnaHQ9NTU2O2UubmluZT01NTY7ZS5jb2xvbj0yNzg7ZS5zZW1pY29sb249Mjc4O2UubGVzcz01ODQ7ZS5lcXVhbD01ODQ7ZS5ncmVhdGVyPTU4NDtlLnF1ZXN0aW9uPTU1NjtlLmF0PTEwMTU7ZS5BPTY2NztlLkI9NjY3O2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9NzIyO2UuST0yNzg7ZS5KPTUwMDtlLks9NjY3O2UuTD01NTY7ZS5NPTgzMztlLk49NzIyO2UuTz03Nzg7ZS5QPTY2NztlLlE9Nzc4O2UuUj03MjI7ZS5TPTY2NztlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9OTQ0O2UuWD02Njc7ZS5ZPTY2NztlLlo9NjExO2UuYnJhY2tldGxlZnQ9Mjc4O2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0yNzg7ZS5hc2NpaWNpcmN1bT00Njk7ZS51bmRlcnNjb3JlPTU1NjtlLnF1b3RlbGVmdD0yMjI7ZS5hPTU1NjtlLmI9NTU2O2UuYz01MDA7ZS5kPTU1NjtlLmU9NTU2O2UuZj0yNzg7ZS5nPTU1NjtlLmg9NTU2O2UuaT0yMjI7ZS5qPTIyMjtlLms9NTAwO2UubD0yMjI7ZS5tPTgzMztlLm49NTU2O2Uubz01NTY7ZS5wPTU1NjtlLnE9NTU2O2Uucj0zMzM7ZS5zPTUwMDtlLnQ9Mjc4O2UudT01NTY7ZS52PTUwMDtlLnc9NzIyO2UueD01MDA7ZS55PTUwMDtlLno9NTAwO2UuYnJhY2VsZWZ0PTMzNDtlLmJhcj0yNjA7ZS5icmFjZXJpZ2h0PTMzNDtlLmFzY2lpdGlsZGU9NTg0O2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTU1NjtlLnN0ZXJsaW5nPTU1NjtlLmZyYWN0aW9uPTE2NztlLnllbj01NTY7ZS5mbG9yaW49NTU2O2Uuc2VjdGlvbj01NTY7ZS5jdXJyZW5jeT01NTY7ZS5xdW90ZXNpbmdsZT0xOTE7ZS5xdW90ZWRibGxlZnQ9MzMzO2UuZ3VpbGxlbW90bGVmdD01NTY7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTUwMDtlLmZsPTUwMDtlLmVuZGFzaD01NTY7ZS5kYWdnZXI9NTU2O2UuZGFnZ2VyZGJsPTU1NjtlLnBlcmlvZGNlbnRlcmVkPTI3ODtlLnBhcmFncmFwaD01Mzc7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MjIyO2UucXVvdGVkYmxiYXNlPTMzMztlLnF1b3RlZGJscmlnaHQ9MzMzO2UuZ3VpbGxlbW90cmlnaHQ9NTU2O2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTYxMTtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzcwO2UuTHNsYXNoPTU1NjtlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzY1O2UuYWU9ODg5O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTIyMjtlLm9zbGFzaD02MTE7ZS5vZT05NDQ7ZS5nZXJtYW5kYmxzPTYxMTtlLklkaWVyZXNpcz0yNzg7ZS5lYWN1dGU9NTU2O2UuYWJyZXZlPTU1NjtlLnVodW5nYXJ1bWxhdXQ9NTU2O2UuZWNhcm9uPTU1NjtlLllkaWVyZXNpcz02Njc7ZS5kaXZpZGU9NTg0O2UuWWFjdXRlPTY2NztlLkFjaXJjdW1mbGV4PTY2NztlLmFhY3V0ZT01NTY7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTAwO2Uuc2NvbW1hYWNjZW50PTUwMDtlLmVjaXJjdW1mbGV4PTU1NjtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTU1NjtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTU1NjtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTczNztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTUwMDtlLmFyaW5nPTU1NjtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9MjIyO2UuYWdyYXZlPTU1NjtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTU1NjtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTUwMDtlLnNjZWRpbGxhPTUwMDtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ3MTtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NTU2O2UuYWNpcmN1bWZsZXg9NTU2O2UuQW1hY3Jvbj02Njc7ZS5yY2Fyb249MzMzO2UuY2NlZGlsbGE9NTAwO2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02Njc7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NjY3O2UuZGNhcm9uPTY0MztlLlVtYWNyb249NzIyO2UudXJpbmc9NTU2O2UudGhyZWVzdXBlcmlvcj0zMzM7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTY2NztlLkFicmV2ZT02Njc7ZS5tdWx0aXBseT01ODQ7ZS51YWN1dGU9NTU2O2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ3NjtlLnlkaWVyZXNpcz01MDA7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTU1NjtlLmVkaWVyZXNpcz01NTY7ZS5jYWN1dGU9NTAwO2UubmFjdXRlPTU1NjtlLnVtYWNyb249NTU2O2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0yNzg7ZS5wbHVzbWludXM9NTg0O2UuYnJva2VuYmFyPTI2MDtlLnJlZ2lzdGVyZWQ9NzM3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mjc4O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9MzMzO2Uub21hY3Jvbj01NTY7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTIyMjtlLnRjYXJvbj0zMTc7ZS5lb2dvbmVrPTU1NjtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTY2NztlLkFkaWVyZXNpcz02Njc7ZS5lZ3JhdmU9NTU2O2UuemFjdXRlPTUwMDtlLmlvZ29uZWs9MjIyO2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT01NTY7ZS5hbWFjcm9uPTU1NjtlLnNhY3V0ZT01MDA7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTU1NjtlLnR3b3N1cGVyaW9yPTMzMztlLk9kaWVyZXNpcz03Nzg7ZS5tdT01NTY7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01NTY7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD01NTY7ZS50aHJlZXF1YXJ0ZXJzPTgzNDtlLlNjZWRpbGxhPTY2NztlLmxjYXJvbj0yOTk7ZS5LY29tbWFhY2NlbnQ9NjY3O2UuTGFjdXRlPTU1NjtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTU1NjtlLklncmF2ZT0yNzg7ZS5JbWFjcm9uPTI3ODtlLkxjYXJvbj01NTY7ZS5vbmVoYWxmPTgzNDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01NTY7ZS5udGlsZGU9NTU2O2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj01NTY7ZS5nYnJldmU9NTU2O2Uub25lcXVhcnRlcj04MzQ7ZS5TY2Fyb249NjY3O2UuU2NvbW1hYWNjZW50PTY2NztlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01NTY7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTU1NjtlLnJhZGljYWw9NDUzO2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zMzM7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTU1NjtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NTU2O2UuQXRpbGRlPTY2NztlLkFvZ29uZWs9NjY3O2UuQXJpbmc9NjY3O2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NTAwO2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mjc4O2Uua2NvbW1hYWNjZW50PTUwMDtlLm1pbnVzPTU4NDtlLkljaXJjdW1mbGV4PTI3ODtlLm5jYXJvbj01NTY7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD01ODQ7ZS5vZGllcmVzaXM9NTU2O2UudWRpZXJlc2lzPTU1NjtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01NTY7ZS5ldGg9NTU2O2UuemNhcm9uPTUwMDtlLm5jb21tYWFjY2VudD01NTY7ZS5vbmVzdXBlcmlvcj0zMzM7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTU2fSkpO2VbIkhlbHZldGljYS1Cb2xkIl09Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmV4Y2xhbT0zMzM7ZS5xdW90ZWRibD00NzQ7ZS5udW1iZXJzaWduPTU1NjtlLmRvbGxhcj01NTY7ZS5wZXJjZW50PTg4OTtlLmFtcGVyc2FuZD03MjI7ZS5xdW90ZXJpZ2h0PTI3ODtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTM4OTtlLnBsdXM9NTg0O2UuY29tbWE9Mjc4O2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNzg7ZS5zbGFzaD0yNzg7ZS56ZXJvPTU1NjtlLm9uZT01NTY7ZS50d289NTU2O2UudGhyZWU9NTU2O2UuZm91cj01NTY7ZS5maXZlPTU1NjtlLnNpeD01NTY7ZS5zZXZlbj01NTY7ZS5laWdodD01NTY7ZS5uaW5lPTU1NjtlLmNvbG9uPTMzMztlLnNlbWljb2xvbj0zMzM7ZS5sZXNzPTU4NDtlLmVxdWFsPTU4NDtlLmdyZWF0ZXI9NTg0O2UucXVlc3Rpb249NjExO2UuYXQ9OTc1O2UuQT03MjI7ZS5CPTcyMjtlLkM9NzIyO2UuRD03MjI7ZS5FPTY2NztlLkY9NjExO2UuRz03Nzg7ZS5IPTcyMjtlLkk9Mjc4O2UuSj01NTY7ZS5LPTcyMjtlLkw9NjExO2UuTT04MzM7ZS5OPTcyMjtlLk89Nzc4O2UuUD02Njc7ZS5RPTc3ODtlLlI9NzIyO2UuUz02Njc7ZS5UPTYxMTtlLlU9NzIyO2UuVj02Njc7ZS5XPTk0NDtlLlg9NjY3O2UuWT02Njc7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTMzMztlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9MzMzO2UuYXNjaWljaXJjdW09NTg0O2UudW5kZXJzY29yZT01NTY7ZS5xdW90ZWxlZnQ9Mjc4O2UuYT01NTY7ZS5iPTYxMTtlLmM9NTU2O2UuZD02MTE7ZS5lPTU1NjtlLmY9MzMzO2UuZz02MTE7ZS5oPTYxMTtlLmk9Mjc4O2Uuaj0yNzg7ZS5rPTU1NjtlLmw9Mjc4O2UubT04ODk7ZS5uPTYxMTtlLm89NjExO2UucD02MTE7ZS5xPTYxMTtlLnI9Mzg5O2Uucz01NTY7ZS50PTMzMztlLnU9NjExO2Uudj01NTY7ZS53PTc3ODtlLng9NTU2O2UueT01NTY7ZS56PTUwMDtlLmJyYWNlbGVmdD0zODk7ZS5iYXI9MjgwO2UuYnJhY2VyaWdodD0zODk7ZS5hc2NpaXRpbGRlPTU4NDtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01NTY7ZS5zdGVybGluZz01NTY7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTU2O2UuZmxvcmluPTU1NjtlLnNlY3Rpb249NTU2O2UuY3VycmVuY3k9NTU2O2UucXVvdGVzaW5nbGU9MjM4O2UucXVvdGVkYmxsZWZ0PTUwMDtlLmd1aWxsZW1vdGxlZnQ9NTU2O2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT02MTE7ZS5mbD02MTE7ZS5lbmRhc2g9NTU2O2UuZGFnZ2VyPTU1NjtlLmRhZ2dlcmRibD01NTY7ZS5wZXJpb2RjZW50ZXJlZD0yNzg7ZS5wYXJhZ3JhcGg9NTU2O2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTI3ODtlLnF1b3RlZGJsYmFzZT01MDA7ZS5xdW90ZWRibHJpZ2h0PTUwMDtlLmd1aWxsZW1vdHJpZ2h0PTU1NjtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj02MTE7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTFlMztlLm9yZGZlbWluaW5lPTM3MDtlLkxzbGFzaD02MTE7ZS5Pc2xhc2g9Nzc4O2UuT0U9MWUzO2Uub3JkbWFzY3VsaW5lPTM2NTtlLmFlPTg4OTtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NjExO2Uub2U9OTQ0O2UuZ2VybWFuZGJscz02MTE7ZS5JZGllcmVzaXM9Mjc4O2UuZWFjdXRlPTU1NjtlLmFicmV2ZT01NTY7ZS51aHVuZ2FydW1sYXV0PTYxMTtlLmVjYXJvbj01NTY7ZS5ZZGllcmVzaXM9NjY3O2UuZGl2aWRlPTU4NDtlLllhY3V0ZT02Njc7ZS5BY2lyY3VtZmxleD03MjI7ZS5hYWN1dGU9NTU2O2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTU1NjtlLnNjb21tYWFjY2VudD01NTY7ZS5lY2lyY3VtZmxleD01NTY7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01NTY7ZS5VYWN1dGU9NzIyO2UudW9nb25laz02MTE7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03Mzc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj01NTY7ZS5hcmluZz01NTY7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTI3ODtlLmFncmF2ZT01NTY7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTcyMjtlLmF0aWxkZT01NTY7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj01NTY7ZS5zY2VkaWxsYT01NTY7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00OTQ7ZS5SY2Fyb249NzIyO2UuR2NvbW1hYWNjZW50PTc3ODtlLnVjaXJjdW1mbGV4PTYxMTtlLmFjaXJjdW1mbGV4PTU1NjtlLkFtYWNyb249NzIyO2UucmNhcm9uPTM4OTtlLmNjZWRpbGxhPTU1NjtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NjY3O2UuT21hY3Jvbj03Nzg7ZS5SYWN1dGU9NzIyO2UuU2FjdXRlPTY2NztlLmRjYXJvbj03NDM7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTYxMTtlLnRocmVlc3VwZXJpb3I9MzMzO2UuT2dyYXZlPTc3ODtlLkFncmF2ZT03MjI7ZS5BYnJldmU9NzIyO2UubXVsdGlwbHk9NTg0O2UudWFjdXRlPTYxMTtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00OTQ7ZS55ZGllcmVzaXM9NTU2O2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01NTY7ZS5lZGllcmVzaXM9NTU2O2UuY2FjdXRlPTU1NjtlLm5hY3V0ZT02MTE7ZS51bWFjcm9uPTYxMTtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mjc4O2UucGx1c21pbnVzPTU4NDtlLmJyb2tlbmJhcj0yODA7ZS5yZWdpc3RlcmVkPTczNztlLkdicmV2ZT03Nzg7ZS5JZG90YWNjZW50PTI3ODtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTM4OTtlLm9tYWNyb249NjExO2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTcyMjtlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249Mzg5O2UuZW9nb25laz01NTY7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT03MjI7ZS5BZGllcmVzaXM9NzIyO2UuZWdyYXZlPTU1NjtlLnphY3V0ZT01MDA7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03Nzg7ZS5vYWN1dGU9NjExO2UuYW1hY3Jvbj01NTY7ZS5zYWN1dGU9NTU2O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTc3ODtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj02MTE7ZS50d29zdXBlcmlvcj0zMzM7ZS5PZGllcmVzaXM9Nzc4O2UubXU9NjExO2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NjExO2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NjExO2UudGhyZWVxdWFydGVycz04MzQ7ZS5TY2VkaWxsYT02Njc7ZS5sY2Fyb249NDAwO2UuS2NvbW1hYWNjZW50PTcyMjtlLkxhY3V0ZT02MTE7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD01NTY7ZS5JZ3JhdmU9Mjc4O2UuSW1hY3Jvbj0yNzg7ZS5MY2Fyb249NjExO2Uub25laGFsZj04MzQ7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NjExO2UubnRpbGRlPTYxMTtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NTU2O2UuZ2JyZXZlPTYxMTtlLm9uZXF1YXJ0ZXI9ODM0O2UuU2Nhcm9uPTY2NztlLlNjb21tYWFjY2VudD02Njc7ZS5PaHVuZ2FydW1sYXV0PTc3ODtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NjExO2UuQ2Nhcm9uPTcyMjtlLnVncmF2ZT02MTE7ZS5yYWRpY2FsPTU0OTtlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9Mzg5O2UuTnRpbGRlPTcyMjtlLm90aWxkZT02MTE7ZS5SY29tbWFhY2NlbnQ9NzIyO2UuTGNvbW1hYWNjZW50PTYxMTtlLkF0aWxkZT03MjI7ZS5Bb2dvbmVrPTcyMjtlLkFyaW5nPTcyMjtlLk90aWxkZT03Nzg7ZS56ZG90YWNjZW50PTUwMDtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTI3ODtlLmtjb21tYWFjY2VudD01NTY7ZS5taW51cz01ODQ7ZS5JY2lyY3VtZmxleD0yNzg7ZS5uY2Fyb249NjExO2UudGNvbW1hYWNjZW50PTMzMztlLmxvZ2ljYWxub3Q9NTg0O2Uub2RpZXJlc2lzPTYxMTtlLnVkaWVyZXNpcz02MTE7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NjExO2UuZXRoPTYxMTtlLnpjYXJvbj01MDA7ZS5uY29tbWFhY2NlbnQ9NjExO2Uub25lc3VwZXJpb3I9MzMzO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTU1Nn0pKTtlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4O2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTQ3NDtlLm51bWJlcnNpZ249NTU2O2UuZG9sbGFyPTU1NjtlLnBlcmNlbnQ9ODg5O2UuYW1wZXJzYW5kPTcyMjtlLnF1b3RlcmlnaHQ9Mjc4O2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9Mzg5O2UucGx1cz01ODQ7ZS5jb21tYT0yNzg7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI3ODtlLnNsYXNoPTI3ODtlLnplcm89NTU2O2Uub25lPTU1NjtlLnR3bz01NTY7ZS50aHJlZT01NTY7ZS5mb3VyPTU1NjtlLmZpdmU9NTU2O2Uuc2l4PTU1NjtlLnNldmVuPTU1NjtlLmVpZ2h0PTU1NjtlLm5pbmU9NTU2O2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9NTg0O2UuZXF1YWw9NTg0O2UuZ3JlYXRlcj01ODQ7ZS5xdWVzdGlvbj02MTE7ZS5hdD05NzU7ZS5BPTcyMjtlLkI9NzIyO2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9NzIyO2UuST0yNzg7ZS5KPTU1NjtlLks9NzIyO2UuTD02MTE7ZS5NPTgzMztlLk49NzIyO2UuTz03Nzg7ZS5QPTY2NztlLlE9Nzc4O2UuUj03MjI7ZS5TPTY2NztlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9OTQ0O2UuWD02Njc7ZS5ZPTY2NztlLlo9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT01ODQ7ZS51bmRlcnNjb3JlPTU1NjtlLnF1b3RlbGVmdD0yNzg7ZS5hPTU1NjtlLmI9NjExO2UuYz01NTY7ZS5kPTYxMTtlLmU9NTU2O2UuZj0zMzM7ZS5nPTYxMTtlLmg9NjExO2UuaT0yNzg7ZS5qPTI3ODtlLms9NTU2O2UubD0yNzg7ZS5tPTg4OTtlLm49NjExO2Uubz02MTE7ZS5wPTYxMTtlLnE9NjExO2Uucj0zODk7ZS5zPTU1NjtlLnQ9MzMzO2UudT02MTE7ZS52PTU1NjtlLnc9Nzc4O2UueD01NTY7ZS55PTU1NjtlLno9NTAwO2UuYnJhY2VsZWZ0PTM4OTtlLmJhcj0yODA7ZS5icmFjZXJpZ2h0PTM4OTtlLmFzY2lpdGlsZGU9NTg0O2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTU1NjtlLnN0ZXJsaW5nPTU1NjtlLmZyYWN0aW9uPTE2NztlLnllbj01NTY7ZS5mbG9yaW49NTU2O2Uuc2VjdGlvbj01NTY7ZS5jdXJyZW5jeT01NTY7ZS5xdW90ZXNpbmdsZT0yMzg7ZS5xdW90ZWRibGxlZnQ9NTAwO2UuZ3VpbGxlbW90bGVmdD01NTY7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTYxMTtlLmZsPTYxMTtlLmVuZGFzaD01NTY7ZS5kYWdnZXI9NTU2O2UuZGFnZ2VyZGJsPTU1NjtlLnBlcmlvZGNlbnRlcmVkPTI3ODtlLnBhcmFncmFwaD01NTY7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9Mjc4O2UucXVvdGVkYmxiYXNlPTUwMDtlLnF1b3RlZGJscmlnaHQ9NTAwO2UuZ3VpbGxlbW90cmlnaHQ9NTU2O2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTYxMTtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzcwO2UuTHNsYXNoPTYxMTtlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzY1O2UuYWU9ODg5O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD02MTE7ZS5vZT05NDQ7ZS5nZXJtYW5kYmxzPTYxMTtlLklkaWVyZXNpcz0yNzg7ZS5lYWN1dGU9NTU2O2UuYWJyZXZlPTU1NjtlLnVodW5nYXJ1bWxhdXQ9NjExO2UuZWNhcm9uPTU1NjtlLllkaWVyZXNpcz02Njc7ZS5kaXZpZGU9NTg0O2UuWWFjdXRlPTY2NztlLkFjaXJjdW1mbGV4PTcyMjtlLmFhY3V0ZT01NTY7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTU2O2Uuc2NvbW1hYWNjZW50PTU1NjtlLmVjaXJjdW1mbGV4PTU1NjtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTU1NjtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTYxMTtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTczNztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTU1NjtlLmFyaW5nPTU1NjtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTU1NjtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTU1NjtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTU1NjtlLnNjZWRpbGxhPTU1NjtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ5NDtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NjExO2UuYWNpcmN1bWZsZXg9NTU2O2UuQW1hY3Jvbj03MjI7ZS5yY2Fyb249Mzg5O2UuY2NlZGlsbGE9NTU2O2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02Njc7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NjY3O2UuZGNhcm9uPTc0MztlLlVtYWNyb249NzIyO2UudXJpbmc9NjExO2UudGhyZWVzdXBlcmlvcj0zMzM7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTcyMjtlLkFicmV2ZT03MjI7ZS5tdWx0aXBseT01ODQ7ZS51YWN1dGU9NjExO2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ5NDtlLnlkaWVyZXNpcz01NTY7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTU1NjtlLmVkaWVyZXNpcz01NTY7ZS5jYWN1dGU9NTU2O2UubmFjdXRlPTYxMTtlLnVtYWNyb249NjExO2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0yNzg7ZS5wbHVzbWludXM9NTg0O2UuYnJva2VuYmFyPTI4MDtlLnJlZ2lzdGVyZWQ9NzM3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mjc4O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9Mzg5O2Uub21hY3Jvbj02MTE7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zODk7ZS5lb2dvbmVrPTU1NjtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTcyMjtlLkFkaWVyZXNpcz03MjI7ZS5lZ3JhdmU9NTU2O2UuemFjdXRlPTUwMDtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT02MTE7ZS5hbWFjcm9uPTU1NjtlLnNhY3V0ZT01NTY7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTYxMTtlLnR3b3N1cGVyaW9yPTMzMztlLk9kaWVyZXNpcz03Nzg7ZS5tdT02MTE7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD02MTE7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD02MTE7ZS50aHJlZXF1YXJ0ZXJzPTgzNDtlLlNjZWRpbGxhPTY2NztlLmxjYXJvbj00MDA7ZS5LY29tbWFhY2NlbnQ9NzIyO2UuTGFjdXRlPTYxMTtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTU1NjtlLklncmF2ZT0yNzg7ZS5JbWFjcm9uPTI3ODtlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTgzNDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD02MTE7ZS5udGlsZGU9NjExO2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj01NTY7ZS5nYnJldmU9NjExO2Uub25lcXVhcnRlcj04MzQ7ZS5TY2Fyb249NjY3O2UuU2NvbW1hYWNjZW50PTY2NztlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT02MTE7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTYxMTtlLnJhZGljYWw9NTQ5O2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zODk7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTYxMTtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NjExO2UuQXRpbGRlPTcyMjtlLkFvZ29uZWs9NzIyO2UuQXJpbmc9NzIyO2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NTAwO2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mjc4O2Uua2NvbW1hYWNjZW50PTU1NjtlLm1pbnVzPTU4NDtlLkljaXJjdW1mbGV4PTI3ODtlLm5jYXJvbj02MTE7ZS50Y29tbWFhY2NlbnQ9MzMzO2UubG9naWNhbG5vdD01ODQ7ZS5vZGllcmVzaXM9NjExO2UudWRpZXJlc2lzPTYxMTtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD02MTE7ZS5ldGg9NjExO2UuemNhcm9uPTUwMDtlLm5jb21tYWFjY2VudD02MTE7ZS5vbmVzdXBlcmlvcj0zMzM7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTU2fSkpO2VbIkhlbHZldGljYS1PYmxpcXVlIl09Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmV4Y2xhbT0yNzg7ZS5xdW90ZWRibD0zNTU7ZS5udW1iZXJzaWduPTU1NjtlLmRvbGxhcj01NTY7ZS5wZXJjZW50PTg4OTtlLmFtcGVyc2FuZD02Njc7ZS5xdW90ZXJpZ2h0PTIyMjtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTM4OTtlLnBsdXM9NTg0O2UuY29tbWE9Mjc4O2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNzg7ZS5zbGFzaD0yNzg7ZS56ZXJvPTU1NjtlLm9uZT01NTY7ZS50d289NTU2O2UudGhyZWU9NTU2O2UuZm91cj01NTY7ZS5maXZlPTU1NjtlLnNpeD01NTY7ZS5zZXZlbj01NTY7ZS5laWdodD01NTY7ZS5uaW5lPTU1NjtlLmNvbG9uPTI3ODtlLnNlbWljb2xvbj0yNzg7ZS5sZXNzPTU4NDtlLmVxdWFsPTU4NDtlLmdyZWF0ZXI9NTg0O2UucXVlc3Rpb249NTU2O2UuYXQ9MTAxNTtlLkE9NjY3O2UuQj02Njc7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTAwO2UuSz02Njc7ZS5MPTU1NjtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0yNzg7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTI3ODtlLmFzY2lpY2lyY3VtPTQ2OTtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTIyMjtlLmE9NTU2O2UuYj01NTY7ZS5jPTUwMDtlLmQ9NTU2O2UuZT01NTY7ZS5mPTI3ODtlLmc9NTU2O2UuaD01NTY7ZS5pPTIyMjtlLmo9MjIyO2Uuaz01MDA7ZS5sPTIyMjtlLm09ODMzO2Uubj01NTY7ZS5vPTU1NjtlLnA9NTU2O2UucT01NTY7ZS5yPTMzMztlLnM9NTAwO2UudD0yNzg7ZS51PTU1NjtlLnY9NTAwO2Uudz03MjI7ZS54PTUwMDtlLnk9NTAwO2Uuej01MDA7ZS5icmFjZWxlZnQ9MzM0O2UuYmFyPTI2MDtlLmJyYWNlcmlnaHQ9MzM0O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTE5MTtlLnF1b3RlZGJsbGVmdD0zMzM7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTAwO2UuZmw9NTAwO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTUzNztlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yMjI7ZS5xdW90ZWRibGJhc2U9MzMzO2UucXVvdGVkYmxyaWdodD0zMzM7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NTU2O2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9MjIyO2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD01NTY7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NjY3O2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01MDA7ZS5zY29tbWFhY2NlbnQ9NTAwO2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTU2O2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTAwO2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yMjI7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTAwO2Uuc2NlZGlsbGE9NTAwO2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDcxO2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD01NTY7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTY2NztlLnJjYXJvbj0zMzM7ZS5jY2VkaWxsYT01MDA7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NjQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz01NTY7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NjY3O2UuQWJyZXZlPTY2NztlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT01NTY7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDc2O2UueWRpZXJlc2lzPTUwMDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01MDA7ZS5uYWN1dGU9NTU2O2UudW1hY3Jvbj01NTY7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjYwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zMzM7ZS5vbWFjcm9uPTU1NjtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9MjIyO2UudGNhcm9uPTMxNztlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjY3O2UuQWRpZXJlc2lzPTY2NztlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yMjI7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTU1NjtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTUwMDtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTU2O2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTU1NjtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTU1NjtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTU1NjtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTI5OTtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NTU2O2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTU1NjtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTU1NjtlLm50aWxkZT01NTY7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT01NTY7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTU1NjtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NTU2O2UucmFkaWNhbD00NTM7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTMzMztlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTU2O2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD01NTY7ZS5BdGlsZGU9NjY3O2UuQW9nb25laz02Njc7ZS5BcmluZz02Njc7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTAwO2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTU1NjtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz01NTY7ZS51ZGllcmVzaXM9NTU2O2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTU1NjtlLmV0aD01NTY7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTU1NjtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KSk7ZS5TeW1ib2w9Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MDtlLmV4Y2xhbT0zMzM7ZS51bml2ZXJzYWw9NzEzO2UubnVtYmVyc2lnbj01MDA7ZS5leGlzdGVudGlhbD01NDk7ZS5wZXJjZW50PTgzMztlLmFtcGVyc2FuZD03Nzg7ZS5zdWNodGhhdD00Mzk7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlza21hdGg9NTAwO2UucGx1cz01NDk7ZS5jb21tYT0yNTA7ZS5taW51cz01NDk7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0yNzg7ZS5zZW1pY29sb249Mjc4O2UubGVzcz01NDk7ZS5lcXVhbD01NDk7ZS5ncmVhdGVyPTU0OTtlLnF1ZXN0aW9uPTQ0NDtlLmNvbmdydWVudD01NDk7ZS5BbHBoYT03MjI7ZS5CZXRhPTY2NztlLkNoaT03MjI7ZS5EZWx0YT02MTI7ZS5FcHNpbG9uPTYxMTtlLlBoaT03NjM7ZS5HYW1tYT02MDM7ZS5FdGE9NzIyO2UuSW90YT0zMzM7ZS50aGV0YTE9NjMxO2UuS2FwcGE9NzIyO2UuTGFtYmRhPTY4NjtlLk11PTg4OTtlLk51PTcyMjtlLk9taWNyb249NzIyO2UuUGk9NzY4O2UuVGhldGE9NzQxO2UuUmhvPTU1NjtlLlNpZ21hPTU5MjtlLlRhdT02MTE7ZS5VcHNpbG9uPTY5MDtlLnNpZ21hMT00Mzk7ZS5PbWVnYT03Njg7ZS5YaT02NDU7ZS5Qc2k9Nzk1O2UuWmV0YT02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS50aGVyZWZvcmU9ODYzO2UuYnJhY2tldHJpZ2h0PTMzMztlLnBlcnBlbmRpY3VsYXI9NjU4O2UudW5kZXJzY29yZT01MDA7ZS5yYWRpY2FsZXg9NTAwO2UuYWxwaGE9NjMxO2UuYmV0YT01NDk7ZS5jaGk9NTQ5O2UuZGVsdGE9NDk0O2UuZXBzaWxvbj00Mzk7ZS5waGk9NTIxO2UuZ2FtbWE9NDExO2UuZXRhPTYwMztlLmlvdGE9MzI5O2UucGhpMT02MDM7ZS5rYXBwYT01NDk7ZS5sYW1iZGE9NTQ5O2UubXU9NTc2O2UubnU9NTIxO2Uub21pY3Jvbj01NDk7ZS5waT01NDk7ZS50aGV0YT01MjE7ZS5yaG89NTQ5O2Uuc2lnbWE9NjAzO2UudGF1PTQzOTtlLnVwc2lsb249NTc2O2Uub21lZ2ExPTcxMztlLm9tZWdhPTY4NjtlLnhpPTQ5MztlLnBzaT02ODY7ZS56ZXRhPTQ5NDtlLmJyYWNlbGVmdD00ODA7ZS5iYXI9MjAwO2UuYnJhY2VyaWdodD00ODA7ZS5zaW1pbGFyPTU0OTtlLkV1cm89NzUwO2UuVXBzaWxvbjE9NjIwO2UubWludXRlPTI0NztlLmxlc3NlcXVhbD01NDk7ZS5mcmFjdGlvbj0xNjc7ZS5pbmZpbml0eT03MTM7ZS5mbG9yaW49NTAwO2UuY2x1Yj03NTM7ZS5kaWFtb25kPTc1MztlLmhlYXJ0PTc1MztlLnNwYWRlPTc1MztlLmFycm93Ym90aD0xMDQyO2UuYXJyb3dsZWZ0PTk4NztlLmFycm93dXA9NjAzO2UuYXJyb3dyaWdodD05ODc7ZS5hcnJvd2Rvd249NjAzO2UuZGVncmVlPTQwMDtlLnBsdXNtaW51cz01NDk7ZS5zZWNvbmQ9NDExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLm11bHRpcGx5PTU0OTtlLnByb3BvcnRpb25hbD03MTM7ZS5wYXJ0aWFsZGlmZj00OTQ7ZS5idWxsZXQ9NDYwO2UuZGl2aWRlPTU0OTtlLm5vdGVxdWFsPTU0OTtlLmVxdWl2YWxlbmNlPTU0OTtlLmFwcHJveGVxdWFsPTU0OTtlLmVsbGlwc2lzPTFlMztlLmFycm93dmVydGV4PTYwMztlLmFycm93aG9yaXpleD0xZTM7ZS5jYXJyaWFnZXJldHVybj02NTg7ZS5hbGVwaD04MjM7ZS5JZnJha3R1cj02ODY7ZS5SZnJha3R1cj03OTU7ZS53ZWllcnN0cmFzcz05ODc7ZS5jaXJjbGVtdWx0aXBseT03Njg7ZS5jaXJjbGVwbHVzPTc2ODtlLmVtcHR5c2V0PTgyMztlLmludGVyc2VjdGlvbj03Njg7ZS51bmlvbj03Njg7ZS5wcm9wZXJzdXBlcnNldD03MTM7ZS5yZWZsZXhzdXBlcnNldD03MTM7ZS5ub3RzdWJzZXQ9NzEzO2UucHJvcGVyc3Vic2V0PTcxMztlLnJlZmxleHN1YnNldD03MTM7ZS5lbGVtZW50PTcxMztlLm5vdGVsZW1lbnQ9NzEzO2UuYW5nbGU9NzY4O2UuZ3JhZGllbnQ9NzEzO2UucmVnaXN0ZXJzZXJpZj03OTA7ZS5jb3B5cmlnaHRzZXJpZj03OTA7ZS50cmFkZW1hcmtzZXJpZj04OTA7ZS5wcm9kdWN0PTgyMztlLnJhZGljYWw9NTQ5O2UuZG90bWF0aD0yNTA7ZS5sb2dpY2Fsbm90PTcxMztlLmxvZ2ljYWxhbmQ9NjAzO2UubG9naWNhbG9yPTYwMztlLmFycm93ZGJsYm90aD0xMDQyO2UuYXJyb3dkYmxsZWZ0PTk4NztlLmFycm93ZGJsdXA9NjAzO2UuYXJyb3dkYmxyaWdodD05ODc7ZS5hcnJvd2RibGRvd249NjAzO2UubG96ZW5nZT00OTQ7ZS5hbmdsZWxlZnQ9MzI5O2UucmVnaXN0ZXJzYW5zPTc5MDtlLmNvcHlyaWdodHNhbnM9NzkwO2UudHJhZGVtYXJrc2Fucz03ODY7ZS5zdW1tYXRpb249NzEzO2UucGFyZW5sZWZ0dHA9Mzg0O2UucGFyZW5sZWZ0ZXg9Mzg0O2UucGFyZW5sZWZ0YnQ9Mzg0O2UuYnJhY2tldGxlZnR0cD0zODQ7ZS5icmFja2V0bGVmdGV4PTM4NDtlLmJyYWNrZXRsZWZ0YnQ9Mzg0O2UuYnJhY2VsZWZ0dHA9NDk0O2UuYnJhY2VsZWZ0bWlkPTQ5NDtlLmJyYWNlbGVmdGJ0PTQ5NDtlLmJyYWNlZXg9NDk0O2UuYW5nbGVyaWdodD0zMjk7ZS5pbnRlZ3JhbD0yNzQ7ZS5pbnRlZ3JhbHRwPTY4NjtlLmludGVncmFsZXg9Njg2O2UuaW50ZWdyYWxidD02ODY7ZS5wYXJlbnJpZ2h0dHA9Mzg0O2UucGFyZW5yaWdodGV4PTM4NDtlLnBhcmVucmlnaHRidD0zODQ7ZS5icmFja2V0cmlnaHR0cD0zODQ7ZS5icmFja2V0cmlnaHRleD0zODQ7ZS5icmFja2V0cmlnaHRidD0zODQ7ZS5icmFjZXJpZ2h0dHA9NDk0O2UuYnJhY2VyaWdodG1pZD00OTQ7ZS5icmFjZXJpZ2h0YnQ9NDk0O2UuYXBwbGU9NzkwfSkpO2VbIlRpbWVzLVJvbWFuIl09Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MDtlLmV4Y2xhbT0zMzM7ZS5xdW90ZWRibD00MDg7ZS5udW1iZXJzaWduPTUwMDtlLmRvbGxhcj01MDA7ZS5wZXJjZW50PTgzMztlLmFtcGVyc2FuZD03Nzg7ZS5xdW90ZXJpZ2h0PTMzMztlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTUwMDtlLnBsdXM9NTY0O2UuY29tbWE9MjUwO2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNTA7ZS5zbGFzaD0yNzg7ZS56ZXJvPTUwMDtlLm9uZT01MDA7ZS50d289NTAwO2UudGhyZWU9NTAwO2UuZm91cj01MDA7ZS5maXZlPTUwMDtlLnNpeD01MDA7ZS5zZXZlbj01MDA7ZS5laWdodD01MDA7ZS5uaW5lPTUwMDtlLmNvbG9uPTI3ODtlLnNlbWljb2xvbj0yNzg7ZS5sZXNzPTU2NDtlLmVxdWFsPTU2NDtlLmdyZWF0ZXI9NTY0O2UucXVlc3Rpb249NDQ0O2UuYXQ9OTIxO2UuQT03MjI7ZS5CPTY2NztlLkM9NjY3O2UuRD03MjI7ZS5FPTYxMTtlLkY9NTU2O2UuRz03MjI7ZS5IPTcyMjtlLkk9MzMzO2UuSj0zODk7ZS5LPTcyMjtlLkw9NjExO2UuTT04ODk7ZS5OPTcyMjtlLk89NzIyO2UuUD01NTY7ZS5RPTcyMjtlLlI9NjY3O2UuUz01NTY7ZS5UPTYxMTtlLlU9NzIyO2UuVj03MjI7ZS5XPTk0NDtlLlg9NzIyO2UuWT03MjI7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTMzMztlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9MzMzO2UuYXNjaWljaXJjdW09NDY5O2UudW5kZXJzY29yZT01MDA7ZS5xdW90ZWxlZnQ9MzMzO2UuYT00NDQ7ZS5iPTUwMDtlLmM9NDQ0O2UuZD01MDA7ZS5lPTQ0NDtlLmY9MzMzO2UuZz01MDA7ZS5oPTUwMDtlLmk9Mjc4O2Uuaj0yNzg7ZS5rPTUwMDtlLmw9Mjc4O2UubT03Nzg7ZS5uPTUwMDtlLm89NTAwO2UucD01MDA7ZS5xPTUwMDtlLnI9MzMzO2Uucz0zODk7ZS50PTI3ODtlLnU9NTAwO2Uudj01MDA7ZS53PTcyMjtlLng9NTAwO2UueT01MDA7ZS56PTQ0NDtlLmJyYWNlbGVmdD00ODA7ZS5iYXI9MjAwO2UuYnJhY2VyaWdodD00ODA7ZS5hc2NpaXRpbGRlPTU0MTtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01MDA7ZS5zdGVybGluZz01MDA7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTAwO2UuZmxvcmluPTUwMDtlLnNlY3Rpb249NTAwO2UuY3VycmVuY3k9NTAwO2UucXVvdGVzaW5nbGU9MTgwO2UucXVvdGVkYmxsZWZ0PTQ0NDtlLmd1aWxsZW1vdGxlZnQ9NTAwO2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01NTY7ZS5mbD01NTY7ZS5lbmRhc2g9NTAwO2UuZGFnZ2VyPTUwMDtlLmRhZ2dlcmRibD01MDA7ZS5wZXJpb2RjZW50ZXJlZD0yNTA7ZS5wYXJhZ3JhcGg9NDUzO2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTMzMztlLnF1b3RlZGJsYmFzZT00NDQ7ZS5xdW90ZWRibHJpZ2h0PTQ0NDtlLmd1aWxsZW1vdHJpZ2h0PTUwMDtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj00NDQ7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTg4OTtlLm9yZGZlbWluaW5lPTI3NjtlLkxzbGFzaD02MTE7ZS5Pc2xhc2g9NzIyO2UuT0U9ODg5O2Uub3JkbWFzY3VsaW5lPTMxMDtlLmFlPTY2NztlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NTAwO2Uub2U9NzIyO2UuZ2VybWFuZGJscz01MDA7ZS5JZGllcmVzaXM9MzMzO2UuZWFjdXRlPTQ0NDtlLmFicmV2ZT00NDQ7ZS51aHVuZ2FydW1sYXV0PTUwMDtlLmVjYXJvbj00NDQ7ZS5ZZGllcmVzaXM9NzIyO2UuZGl2aWRlPTU2NDtlLllhY3V0ZT03MjI7ZS5BY2lyY3VtZmxleD03MjI7ZS5hYWN1dGU9NDQ0O2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTUwMDtlLnNjb21tYWFjY2VudD0zODk7ZS5lY2lyY3VtZmxleD00NDQ7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz00NDQ7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01MDA7ZS5FZGllcmVzaXM9NjExO2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03NjA7ZS5FbWFjcm9uPTYxMTtlLmNjYXJvbj00NDQ7ZS5hcmluZz00NDQ7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTI3ODtlLmFncmF2ZT00NDQ7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTY2NztlLmF0aWxkZT00NDQ7ZS5FZG90YWNjZW50PTYxMTtlLnNjYXJvbj0zODk7ZS5zY2VkaWxsYT0zODk7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00NzE7ZS5SY2Fyb249NjY3O2UuR2NvbW1hYWNjZW50PTcyMjtlLnVjaXJjdW1mbGV4PTUwMDtlLmFjaXJjdW1mbGV4PTQ0NDtlLkFtYWNyb249NzIyO2UucmNhcm9uPTMzMztlLmNjZWRpbGxhPTQ0NDtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NTU2O2UuT21hY3Jvbj03MjI7ZS5SYWN1dGU9NjY3O2UuU2FjdXRlPTU1NjtlLmRjYXJvbj01ODg7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTUwMDtlLnRocmVlc3VwZXJpb3I9MzAwO2UuT2dyYXZlPTcyMjtlLkFncmF2ZT03MjI7ZS5BYnJldmU9NzIyO2UubXVsdGlwbHk9NTY0O2UudWFjdXRlPTUwMDtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00NzY7ZS55ZGllcmVzaXM9NTAwO2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTYxMTtlLmFkaWVyZXNpcz00NDQ7ZS5lZGllcmVzaXM9NDQ0O2UuY2FjdXRlPTQ0NDtlLm5hY3V0ZT01MDA7ZS51bWFjcm9uPTUwMDtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9MzMzO2UucGx1c21pbnVzPTU2NDtlLmJyb2tlbmJhcj0yMDA7ZS5yZWdpc3RlcmVkPTc2MDtlLkdicmV2ZT03MjI7ZS5JZG90YWNjZW50PTMzMztlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjExO2UucmFjdXRlPTMzMztlLm9tYWNyb249NTAwO2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTY2NztlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249MzI2O2UuZW9nb25laz00NDQ7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT03MjI7ZS5BZGllcmVzaXM9NzIyO2UuZWdyYXZlPTQ0NDtlLnphY3V0ZT00NDQ7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03MjI7ZS5vYWN1dGU9NTAwO2UuYW1hY3Jvbj00NDQ7ZS5zYWN1dGU9Mzg5O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTcyMjtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01MDA7ZS50d29zdXBlcmlvcj0zMDA7ZS5PZGllcmVzaXM9NzIyO2UubXU9NTAwO2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTAwO2UuRW9nb25laz02MTE7ZS5kY3JvYXQ9NTAwO2UudGhyZWVxdWFydGVycz03NTA7ZS5TY2VkaWxsYT01NTY7ZS5sY2Fyb249MzQ0O2UuS2NvbW1hYWNjZW50PTcyMjtlLkxhY3V0ZT02MTE7ZS50cmFkZW1hcms9OTgwO2UuZWRvdGFjY2VudD00NDQ7ZS5JZ3JhdmU9MzMzO2UuSW1hY3Jvbj0zMzM7ZS5MY2Fyb249NjExO2Uub25laGFsZj03NTA7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTAwO2UubnRpbGRlPTUwMDtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTYxMTtlLmVtYWNyb249NDQ0O2UuZ2JyZXZlPTUwMDtlLm9uZXF1YXJ0ZXI9NzUwO2UuU2Nhcm9uPTU1NjtlLlNjb21tYWFjY2VudD01NTY7ZS5PaHVuZ2FydW1sYXV0PTcyMjtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTAwO2UuQ2Nhcm9uPTY2NztlLnVncmF2ZT01MDA7ZS5yYWRpY2FsPTQ1MztlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9MzMzO2UuTnRpbGRlPTcyMjtlLm90aWxkZT01MDA7ZS5SY29tbWFhY2NlbnQ9NjY3O2UuTGNvbW1hYWNjZW50PTYxMTtlLkF0aWxkZT03MjI7ZS5Bb2dvbmVrPTcyMjtlLkFyaW5nPTcyMjtlLk90aWxkZT03MjI7ZS56ZG90YWNjZW50PTQ0NDtlLkVjYXJvbj02MTE7ZS5Jb2dvbmVrPTMzMztlLmtjb21tYWFjY2VudD01MDA7ZS5taW51cz01NjQ7ZS5JY2lyY3VtZmxleD0zMzM7ZS5uY2Fyb249NTAwO2UudGNvbW1hYWNjZW50PTI3ODtlLmxvZ2ljYWxub3Q9NTY0O2Uub2RpZXJlc2lzPTUwMDtlLnVkaWVyZXNpcz01MDA7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTAwO2UuZXRoPTUwMDtlLnpjYXJvbj00NDQ7ZS5uY29tbWFhY2NlbnQ9NTAwO2Uub25lc3VwZXJpb3I9MzAwO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTUwMH0pKTtlWyJUaW1lcy1Cb2xkIl09Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MDtlLmV4Y2xhbT0zMzM7ZS5xdW90ZWRibD01NTU7ZS5udW1iZXJzaWduPTUwMDtlLmRvbGxhcj01MDA7ZS5wZXJjZW50PTFlMztlLmFtcGVyc2FuZD04MzM7ZS5xdW90ZXJpZ2h0PTMzMztlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTUwMDtlLnBsdXM9NTcwO2UuY29tbWE9MjUwO2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNTA7ZS5zbGFzaD0yNzg7ZS56ZXJvPTUwMDtlLm9uZT01MDA7ZS50d289NTAwO2UudGhyZWU9NTAwO2UuZm91cj01MDA7ZS5maXZlPTUwMDtlLnNpeD01MDA7ZS5zZXZlbj01MDA7ZS5laWdodD01MDA7ZS5uaW5lPTUwMDtlLmNvbG9uPTMzMztlLnNlbWljb2xvbj0zMzM7ZS5sZXNzPTU3MDtlLmVxdWFsPTU3MDtlLmdyZWF0ZXI9NTcwO2UucXVlc3Rpb249NTAwO2UuYXQ9OTMwO2UuQT03MjI7ZS5CPTY2NztlLkM9NzIyO2UuRD03MjI7ZS5FPTY2NztlLkY9NjExO2UuRz03Nzg7ZS5IPTc3ODtlLkk9Mzg5O2UuSj01MDA7ZS5LPTc3ODtlLkw9NjY3O2UuTT05NDQ7ZS5OPTcyMjtlLk89Nzc4O2UuUD02MTE7ZS5RPTc3ODtlLlI9NzIyO2UuUz01NTY7ZS5UPTY2NztlLlU9NzIyO2UuVj03MjI7ZS5XPTFlMztlLlg9NzIyO2UuWT03MjI7ZS5aPTY2NztlLmJyYWNrZXRsZWZ0PTMzMztlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9MzMzO2UuYXNjaWljaXJjdW09NTgxO2UudW5kZXJzY29yZT01MDA7ZS5xdW90ZWxlZnQ9MzMzO2UuYT01MDA7ZS5iPTU1NjtlLmM9NDQ0O2UuZD01NTY7ZS5lPTQ0NDtlLmY9MzMzO2UuZz01MDA7ZS5oPTU1NjtlLmk9Mjc4O2Uuaj0zMzM7ZS5rPTU1NjtlLmw9Mjc4O2UubT04MzM7ZS5uPTU1NjtlLm89NTAwO2UucD01NTY7ZS5xPTU1NjtlLnI9NDQ0O2Uucz0zODk7ZS50PTMzMztlLnU9NTU2O2Uudj01MDA7ZS53PTcyMjtlLng9NTAwO2UueT01MDA7ZS56PTQ0NDtlLmJyYWNlbGVmdD0zOTQ7ZS5iYXI9MjIwO2UuYnJhY2VyaWdodD0zOTQ7ZS5hc2NpaXRpbGRlPTUyMDtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01MDA7ZS5zdGVybGluZz01MDA7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTAwO2UuZmxvcmluPTUwMDtlLnNlY3Rpb249NTAwO2UuY3VycmVuY3k9NTAwO2UucXVvdGVzaW5nbGU9Mjc4O2UucXVvdGVkYmxsZWZ0PTUwMDtlLmd1aWxsZW1vdGxlZnQ9NTAwO2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01NTY7ZS5mbD01NTY7ZS5lbmRhc2g9NTAwO2UuZGFnZ2VyPTUwMDtlLmRhZ2dlcmRibD01MDA7ZS5wZXJpb2RjZW50ZXJlZD0yNTA7ZS5wYXJhZ3JhcGg9NTQwO2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTMzMztlLnF1b3RlZGJsYmFzZT01MDA7ZS5xdW90ZWRibHJpZ2h0PTUwMDtlLmd1aWxsZW1vdHJpZ2h0PTUwMDtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj01MDA7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTFlMztlLm9yZGZlbWluaW5lPTMwMDtlLkxzbGFzaD02Njc7ZS5Pc2xhc2g9Nzc4O2UuT0U9MWUzO2Uub3JkbWFzY3VsaW5lPTMzMDtlLmFlPTcyMjtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NTAwO2Uub2U9NzIyO2UuZ2VybWFuZGJscz01NTY7ZS5JZGllcmVzaXM9Mzg5O2UuZWFjdXRlPTQ0NDtlLmFicmV2ZT01MDA7ZS51aHVuZ2FydW1sYXV0PTU1NjtlLmVjYXJvbj00NDQ7ZS5ZZGllcmVzaXM9NzIyO2UuZGl2aWRlPTU3MDtlLllhY3V0ZT03MjI7ZS5BY2lyY3VtZmxleD03MjI7ZS5hYWN1dGU9NTAwO2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTUwMDtlLnNjb21tYWFjY2VudD0zODk7ZS5lY2lyY3VtZmxleD00NDQ7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01MDA7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01NTY7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03NDc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj00NDQ7ZS5hcmluZz01MDA7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTI3ODtlLmFncmF2ZT01MDA7ZS5UY29tbWFhY2NlbnQ9NjY3O2UuQ2FjdXRlPTcyMjtlLmF0aWxkZT01MDA7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj0zODk7ZS5zY2VkaWxsYT0zODk7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00OTQ7ZS5SY2Fyb249NzIyO2UuR2NvbW1hYWNjZW50PTc3ODtlLnVjaXJjdW1mbGV4PTU1NjtlLmFjaXJjdW1mbGV4PTUwMDtlLkFtYWNyb249NzIyO2UucmNhcm9uPTQ0NDtlLmNjZWRpbGxhPTQ0NDtlLlpkb3RhY2NlbnQ9NjY3O2UuVGhvcm49NjExO2UuT21hY3Jvbj03Nzg7ZS5SYWN1dGU9NzIyO2UuU2FjdXRlPTU1NjtlLmRjYXJvbj02NzI7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTU1NjtlLnRocmVlc3VwZXJpb3I9MzAwO2UuT2dyYXZlPTc3ODtlLkFncmF2ZT03MjI7ZS5BYnJldmU9NzIyO2UubXVsdGlwbHk9NTcwO2UudWFjdXRlPTU1NjtlLlRjYXJvbj02Njc7ZS5wYXJ0aWFsZGlmZj00OTQ7ZS55ZGllcmVzaXM9NTAwO2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01MDA7ZS5lZGllcmVzaXM9NDQ0O2UuY2FjdXRlPTQ0NDtlLm5hY3V0ZT01NTY7ZS51bWFjcm9uPTU1NjtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mzg5O2UucGx1c21pbnVzPTU3MDtlLmJyb2tlbmJhcj0yMjA7ZS5yZWdpc3RlcmVkPTc0NztlLkdicmV2ZT03Nzg7ZS5JZG90YWNjZW50PTM4OTtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTQ0NDtlLm9tYWNyb249NTAwO2UuWmFjdXRlPTY2NztlLlpjYXJvbj02Njc7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTcyMjtlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249NDE2O2UuZW9nb25laz00NDQ7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT03MjI7ZS5BZGllcmVzaXM9NzIyO2UuZWdyYXZlPTQ0NDtlLnphY3V0ZT00NDQ7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03Nzg7ZS5vYWN1dGU9NTAwO2UuYW1hY3Jvbj01MDA7ZS5zYWN1dGU9Mzg5O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTc3ODtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01NTY7ZS50d29zdXBlcmlvcj0zMDA7ZS5PZGllcmVzaXM9Nzc4O2UubXU9NTU2O2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTAwO2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NTU2O2UudGhyZWVxdWFydGVycz03NTA7ZS5TY2VkaWxsYT01NTY7ZS5sY2Fyb249Mzk0O2UuS2NvbW1hYWNjZW50PTc3ODtlLkxhY3V0ZT02Njc7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD00NDQ7ZS5JZ3JhdmU9Mzg5O2UuSW1hY3Jvbj0zODk7ZS5MY2Fyb249NjY3O2Uub25laGFsZj03NTA7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTAwO2UubnRpbGRlPTU1NjtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NDQ0O2UuZ2JyZXZlPTUwMDtlLm9uZXF1YXJ0ZXI9NzUwO2UuU2Nhcm9uPTU1NjtlLlNjb21tYWFjY2VudD01NTY7ZS5PaHVuZ2FydW1sYXV0PTc3ODtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTAwO2UuQ2Nhcm9uPTcyMjtlLnVncmF2ZT01NTY7ZS5yYWRpY2FsPTU0OTtlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9NDQ0O2UuTnRpbGRlPTcyMjtlLm90aWxkZT01MDA7ZS5SY29tbWFhY2NlbnQ9NzIyO2UuTGNvbW1hYWNjZW50PTY2NztlLkF0aWxkZT03MjI7ZS5Bb2dvbmVrPTcyMjtlLkFyaW5nPTcyMjtlLk90aWxkZT03Nzg7ZS56ZG90YWNjZW50PTQ0NDtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTM4OTtlLmtjb21tYWFjY2VudD01NTY7ZS5taW51cz01NzA7ZS5JY2lyY3VtZmxleD0zODk7ZS5uY2Fyb249NTU2O2UudGNvbW1hYWNjZW50PTMzMztlLmxvZ2ljYWxub3Q9NTcwO2Uub2RpZXJlc2lzPTUwMDtlLnVkaWVyZXNpcz01NTY7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTAwO2UuZXRoPTUwMDtlLnpjYXJvbj00NDQ7ZS5uY29tbWFhY2NlbnQ9NTU2O2Uub25lc3VwZXJpb3I9MzAwO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTUwMH0pKTtlWyJUaW1lcy1Cb2xkSXRhbGljIl09Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MDtlLmV4Y2xhbT0zODk7ZS5xdW90ZWRibD01NTU7ZS5udW1iZXJzaWduPTUwMDtlLmRvbGxhcj01MDA7ZS5wZXJjZW50PTgzMztlLmFtcGVyc2FuZD03Nzg7ZS5xdW90ZXJpZ2h0PTMzMztlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTUwMDtlLnBsdXM9NTcwO2UuY29tbWE9MjUwO2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNTA7ZS5zbGFzaD0yNzg7ZS56ZXJvPTUwMDtlLm9uZT01MDA7ZS50d289NTAwO2UudGhyZWU9NTAwO2UuZm91cj01MDA7ZS5maXZlPTUwMDtlLnNpeD01MDA7ZS5zZXZlbj01MDA7ZS5laWdodD01MDA7ZS5uaW5lPTUwMDtlLmNvbG9uPTMzMztlLnNlbWljb2xvbj0zMzM7ZS5sZXNzPTU3MDtlLmVxdWFsPTU3MDtlLmdyZWF0ZXI9NTcwO2UucXVlc3Rpb249NTAwO2UuYXQ9ODMyO2UuQT02Njc7ZS5CPTY2NztlLkM9NjY3O2UuRD03MjI7ZS5FPTY2NztlLkY9NjY3O2UuRz03MjI7ZS5IPTc3ODtlLkk9Mzg5O2UuSj01MDA7ZS5LPTY2NztlLkw9NjExO2UuTT04ODk7ZS5OPTcyMjtlLk89NzIyO2UuUD02MTE7ZS5RPTcyMjtlLlI9NjY3O2UuUz01NTY7ZS5UPTYxMTtlLlU9NzIyO2UuVj02Njc7ZS5XPTg4OTtlLlg9NjY3O2UuWT02MTE7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTMzMztlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9MzMzO2UuYXNjaWljaXJjdW09NTcwO2UudW5kZXJzY29yZT01MDA7ZS5xdW90ZWxlZnQ9MzMzO2UuYT01MDA7ZS5iPTUwMDtlLmM9NDQ0O2UuZD01MDA7ZS5lPTQ0NDtlLmY9MzMzO2UuZz01MDA7ZS5oPTU1NjtlLmk9Mjc4O2Uuaj0yNzg7ZS5rPTUwMDtlLmw9Mjc4O2UubT03Nzg7ZS5uPTU1NjtlLm89NTAwO2UucD01MDA7ZS5xPTUwMDtlLnI9Mzg5O2Uucz0zODk7ZS50PTI3ODtlLnU9NTU2O2Uudj00NDQ7ZS53PTY2NztlLng9NTAwO2UueT00NDQ7ZS56PTM4OTtlLmJyYWNlbGVmdD0zNDg7ZS5iYXI9MjIwO2UuYnJhY2VyaWdodD0zNDg7ZS5hc2NpaXRpbGRlPTU3MDtlLmV4Y2xhbWRvd249Mzg5O2UuY2VudD01MDA7ZS5zdGVybGluZz01MDA7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTAwO2UuZmxvcmluPTUwMDtlLnNlY3Rpb249NTAwO2UuY3VycmVuY3k9NTAwO2UucXVvdGVzaW5nbGU9Mjc4O2UucXVvdGVkYmxsZWZ0PTUwMDtlLmd1aWxsZW1vdGxlZnQ9NTAwO2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01NTY7ZS5mbD01NTY7ZS5lbmRhc2g9NTAwO2UuZGFnZ2VyPTUwMDtlLmRhZ2dlcmRibD01MDA7ZS5wZXJpb2RjZW50ZXJlZD0yNTA7ZS5wYXJhZ3JhcGg9NTAwO2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTMzMztlLnF1b3RlZGJsYmFzZT01MDA7ZS5xdW90ZWRibHJpZ2h0PTUwMDtlLmd1aWxsZW1vdHJpZ2h0PTUwMDtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj01MDA7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTk0NDtlLm9yZGZlbWluaW5lPTI2NjtlLkxzbGFzaD02MTE7ZS5Pc2xhc2g9NzIyO2UuT0U9OTQ0O2Uub3JkbWFzY3VsaW5lPTMwMDtlLmFlPTcyMjtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NTAwO2Uub2U9NzIyO2UuZ2VybWFuZGJscz01MDA7ZS5JZGllcmVzaXM9Mzg5O2UuZWFjdXRlPTQ0NDtlLmFicmV2ZT01MDA7ZS51aHVuZ2FydW1sYXV0PTU1NjtlLmVjYXJvbj00NDQ7ZS5ZZGllcmVzaXM9NjExO2UuZGl2aWRlPTU3MDtlLllhY3V0ZT02MTE7ZS5BY2lyY3VtZmxleD02Njc7ZS5hYWN1dGU9NTAwO2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTQ0NDtlLnNjb21tYWFjY2VudD0zODk7ZS5lY2lyY3VtZmxleD00NDQ7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01MDA7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01NTY7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03NDc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj00NDQ7ZS5hcmluZz01MDA7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTI3ODtlLmFncmF2ZT01MDA7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTY2NztlLmF0aWxkZT01MDA7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj0zODk7ZS5zY2VkaWxsYT0zODk7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00OTQ7ZS5SY2Fyb249NjY3O2UuR2NvbW1hYWNjZW50PTcyMjtlLnVjaXJjdW1mbGV4PTU1NjtlLmFjaXJjdW1mbGV4PTUwMDtlLkFtYWNyb249NjY3O2UucmNhcm9uPTM4OTtlLmNjZWRpbGxhPTQ0NDtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NjExO2UuT21hY3Jvbj03MjI7ZS5SYWN1dGU9NjY3O2UuU2FjdXRlPTU1NjtlLmRjYXJvbj02MDg7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTU1NjtlLnRocmVlc3VwZXJpb3I9MzAwO2UuT2dyYXZlPTcyMjtlLkFncmF2ZT02Njc7ZS5BYnJldmU9NjY3O2UubXVsdGlwbHk9NTcwO2UudWFjdXRlPTU1NjtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00OTQ7ZS55ZGllcmVzaXM9NDQ0O2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01MDA7ZS5lZGllcmVzaXM9NDQ0O2UuY2FjdXRlPTQ0NDtlLm5hY3V0ZT01NTY7ZS51bWFjcm9uPTU1NjtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mzg5O2UucGx1c21pbnVzPTU3MDtlLmJyb2tlbmJhcj0yMjA7ZS5yZWdpc3RlcmVkPTc0NztlLkdicmV2ZT03MjI7ZS5JZG90YWNjZW50PTM4OTtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTM4OTtlLm9tYWNyb249NTAwO2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTY2NztlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249MzY2O2UuZW9nb25laz00NDQ7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT02Njc7ZS5BZGllcmVzaXM9NjY3O2UuZWdyYXZlPTQ0NDtlLnphY3V0ZT0zODk7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03MjI7ZS5vYWN1dGU9NTAwO2UuYW1hY3Jvbj01MDA7ZS5zYWN1dGU9Mzg5O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTcyMjtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01MDA7ZS50d29zdXBlcmlvcj0zMDA7ZS5PZGllcmVzaXM9NzIyO2UubXU9NTc2O2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTAwO2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NTAwO2UudGhyZWVxdWFydGVycz03NTA7ZS5TY2VkaWxsYT01NTY7ZS5sY2Fyb249MzgyO2UuS2NvbW1hYWNjZW50PTY2NztlLkxhY3V0ZT02MTE7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD00NDQ7ZS5JZ3JhdmU9Mzg5O2UuSW1hY3Jvbj0zODk7ZS5MY2Fyb249NjExO2Uub25laGFsZj03NTA7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTAwO2UubnRpbGRlPTU1NjtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NDQ0O2UuZ2JyZXZlPTUwMDtlLm9uZXF1YXJ0ZXI9NzUwO2UuU2Nhcm9uPTU1NjtlLlNjb21tYWFjY2VudD01NTY7ZS5PaHVuZ2FydW1sYXV0PTcyMjtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTAwO2UuQ2Nhcm9uPTY2NztlLnVncmF2ZT01NTY7ZS5yYWRpY2FsPTU0OTtlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9Mzg5O2UuTnRpbGRlPTcyMjtlLm90aWxkZT01MDA7ZS5SY29tbWFhY2NlbnQ9NjY3O2UuTGNvbW1hYWNjZW50PTYxMTtlLkF0aWxkZT02Njc7ZS5Bb2dvbmVrPTY2NztlLkFyaW5nPTY2NztlLk90aWxkZT03MjI7ZS56ZG90YWNjZW50PTM4OTtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTM4OTtlLmtjb21tYWFjY2VudD01MDA7ZS5taW51cz02MDY7ZS5JY2lyY3VtZmxleD0zODk7ZS5uY2Fyb249NTU2O2UudGNvbW1hYWNjZW50PTI3ODtlLmxvZ2ljYWxub3Q9NjA2O2Uub2RpZXJlc2lzPTUwMDtlLnVkaWVyZXNpcz01NTY7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTAwO2UuZXRoPTUwMDtlLnpjYXJvbj0zODk7ZS5uY29tbWFhY2NlbnQ9NTU2O2Uub25lc3VwZXJpb3I9MzAwO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTUwMH0pKTtlWyJUaW1lcy1JdGFsaWMiXT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTQyMDtlLm51bWJlcnNpZ249NTAwO2UuZG9sbGFyPTUwMDtlLnBlcmNlbnQ9ODMzO2UuYW1wZXJzYW5kPTc3ODtlLnF1b3RlcmlnaHQ9MzMzO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9NTAwO2UucGx1cz02NzU7ZS5jb21tYT0yNTA7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9Njc1O2UuZXF1YWw9Njc1O2UuZ3JlYXRlcj02NzU7ZS5xdWVzdGlvbj01MDA7ZS5hdD05MjA7ZS5BPTYxMTtlLkI9NjExO2UuQz02Njc7ZS5EPTcyMjtlLkU9NjExO2UuRj02MTE7ZS5HPTcyMjtlLkg9NzIyO2UuST0zMzM7ZS5KPTQ0NDtlLks9NjY3O2UuTD01NTY7ZS5NPTgzMztlLk49NjY3O2UuTz03MjI7ZS5QPTYxMTtlLlE9NzIyO2UuUj02MTE7ZS5TPTUwMDtlLlQ9NTU2O2UuVT03MjI7ZS5WPTYxMTtlLlc9ODMzO2UuWD02MTE7ZS5ZPTU1NjtlLlo9NTU2O2UuYnJhY2tldGxlZnQ9Mzg5O2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zODk7ZS5hc2NpaWNpcmN1bT00MjI7ZS51bmRlcnNjb3JlPTUwMDtlLnF1b3RlbGVmdD0zMzM7ZS5hPTUwMDtlLmI9NTAwO2UuYz00NDQ7ZS5kPTUwMDtlLmU9NDQ0O2UuZj0yNzg7ZS5nPTUwMDtlLmg9NTAwO2UuaT0yNzg7ZS5qPTI3ODtlLms9NDQ0O2UubD0yNzg7ZS5tPTcyMjtlLm49NTAwO2Uubz01MDA7ZS5wPTUwMDtlLnE9NTAwO2Uucj0zODk7ZS5zPTM4OTtlLnQ9Mjc4O2UudT01MDA7ZS52PTQ0NDtlLnc9NjY3O2UueD00NDQ7ZS55PTQ0NDtlLno9Mzg5O2UuYnJhY2VsZWZ0PTQwMDtlLmJhcj0yNzU7ZS5icmFjZXJpZ2h0PTQwMDtlLmFzY2lpdGlsZGU9NTQxO2UuZXhjbGFtZG93bj0zODk7ZS5jZW50PTUwMDtlLnN0ZXJsaW5nPTUwMDtlLmZyYWN0aW9uPTE2NztlLnllbj01MDA7ZS5mbG9yaW49NTAwO2Uuc2VjdGlvbj01MDA7ZS5jdXJyZW5jeT01MDA7ZS5xdW90ZXNpbmdsZT0yMTQ7ZS5xdW90ZWRibGxlZnQ9NTU2O2UuZ3VpbGxlbW90bGVmdD01MDA7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTUwMDtlLmZsPTUwMDtlLmVuZGFzaD01MDA7ZS5kYWdnZXI9NTAwO2UuZGFnZ2VyZGJsPTUwMDtlLnBlcmlvZGNlbnRlcmVkPTI1MDtlLnBhcmFncmFwaD01MjM7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MzMzO2UucXVvdGVkYmxiYXNlPTU1NjtlLnF1b3RlZGJscmlnaHQ9NTU2O2UuZ3VpbGxlbW90cmlnaHQ9NTAwO2UuZWxsaXBzaXM9ODg5O2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTUwMDtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9ODg5O2UuQUU9ODg5O2Uub3JkZmVtaW5pbmU9Mjc2O2UuTHNsYXNoPTU1NjtlLk9zbGFzaD03MjI7ZS5PRT05NDQ7ZS5vcmRtYXNjdWxpbmU9MzEwO2UuYWU9NjY3O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD01MDA7ZS5vZT02Njc7ZS5nZXJtYW5kYmxzPTUwMDtlLklkaWVyZXNpcz0zMzM7ZS5lYWN1dGU9NDQ0O2UuYWJyZXZlPTUwMDtlLnVodW5nYXJ1bWxhdXQ9NTAwO2UuZWNhcm9uPTQ0NDtlLllkaWVyZXNpcz01NTY7ZS5kaXZpZGU9Njc1O2UuWWFjdXRlPTU1NjtlLkFjaXJjdW1mbGV4PTYxMTtlLmFhY3V0ZT01MDA7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NDQ0O2Uuc2NvbW1hYWNjZW50PTM4OTtlLmVjaXJjdW1mbGV4PTQ0NDtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTUwMDtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTUwMDtlLkVkaWVyZXNpcz02MTE7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTc2MDtlLkVtYWNyb249NjExO2UuY2Nhcm9uPTQ0NDtlLmFyaW5nPTUwMDtlLk5jb21tYWFjY2VudD02Njc7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTUwMDtlLlRjb21tYWFjY2VudD01NTY7ZS5DYWN1dGU9NjY3O2UuYXRpbGRlPTUwMDtlLkVkb3RhY2NlbnQ9NjExO2Uuc2Nhcm9uPTM4OTtlLnNjZWRpbGxhPTM4OTtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ3MTtlLlJjYXJvbj02MTE7ZS5HY29tbWFhY2NlbnQ9NzIyO2UudWNpcmN1bWZsZXg9NTAwO2UuYWNpcmN1bWZsZXg9NTAwO2UuQW1hY3Jvbj02MTE7ZS5yY2Fyb249Mzg5O2UuY2NlZGlsbGE9NDQ0O2UuWmRvdGFjY2VudD01NTY7ZS5UaG9ybj02MTE7ZS5PbWFjcm9uPTcyMjtlLlJhY3V0ZT02MTE7ZS5TYWN1dGU9NTAwO2UuZGNhcm9uPTU0NDtlLlVtYWNyb249NzIyO2UudXJpbmc9NTAwO2UudGhyZWVzdXBlcmlvcj0zMDA7ZS5PZ3JhdmU9NzIyO2UuQWdyYXZlPTYxMTtlLkFicmV2ZT02MTE7ZS5tdWx0aXBseT02NzU7ZS51YWN1dGU9NTAwO2UuVGNhcm9uPTU1NjtlLnBhcnRpYWxkaWZmPTQ3NjtlLnlkaWVyZXNpcz00NDQ7ZS5OYWN1dGU9NjY3O2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjExO2UuYWRpZXJlc2lzPTUwMDtlLmVkaWVyZXNpcz00NDQ7ZS5jYWN1dGU9NDQ0O2UubmFjdXRlPTUwMDtlLnVtYWNyb249NTAwO2UuTmNhcm9uPTY2NztlLklhY3V0ZT0zMzM7ZS5wbHVzbWludXM9Njc1O2UuYnJva2VuYmFyPTI3NTtlLnJlZ2lzdGVyZWQ9NzYwO2UuR2JyZXZlPTcyMjtlLklkb3RhY2NlbnQ9MzMzO2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02MTE7ZS5yYWN1dGU9Mzg5O2Uub21hY3Jvbj01MDA7ZS5aYWN1dGU9NTU2O2UuWmNhcm9uPTU1NjtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NjY3O2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zMDA7ZS5lb2dvbmVrPTQ0NDtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTYxMTtlLkFkaWVyZXNpcz02MTE7ZS5lZ3JhdmU9NDQ0O2UuemFjdXRlPTM4OTtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTcyMjtlLm9hY3V0ZT01MDA7ZS5hbWFjcm9uPTUwMDtlLnNhY3V0ZT0zODk7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9NzIyO2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTUwMDtlLnR3b3N1cGVyaW9yPTMwMDtlLk9kaWVyZXNpcz03MjI7ZS5tdT01MDA7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01MDA7ZS5Fb2dvbmVrPTYxMTtlLmRjcm9hdD01MDA7ZS50aHJlZXF1YXJ0ZXJzPTc1MDtlLlNjZWRpbGxhPTUwMDtlLmxjYXJvbj0zMDA7ZS5LY29tbWFhY2NlbnQ9NjY3O2UuTGFjdXRlPTU1NjtlLnRyYWRlbWFyaz05ODA7ZS5lZG90YWNjZW50PTQ0NDtlLklncmF2ZT0zMzM7ZS5JbWFjcm9uPTMzMztlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTc1MDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01MDA7ZS5udGlsZGU9NTAwO2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjExO2UuZW1hY3Jvbj00NDQ7ZS5nYnJldmU9NTAwO2Uub25lcXVhcnRlcj03NTA7ZS5TY2Fyb249NTAwO2UuU2NvbW1hYWNjZW50PTUwMDtlLk9odW5nYXJ1bWxhdXQ9NzIyO2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01MDA7ZS5DY2Fyb249NjY3O2UudWdyYXZlPTUwMDtlLnJhZGljYWw9NDUzO2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zODk7ZS5OdGlsZGU9NjY3O2Uub3RpbGRlPTUwMDtlLlJjb21tYWFjY2VudD02MTE7ZS5MY29tbWFhY2NlbnQ9NTU2O2UuQXRpbGRlPTYxMTtlLkFvZ29uZWs9NjExO2UuQXJpbmc9NjExO2UuT3RpbGRlPTcyMjtlLnpkb3RhY2NlbnQ9Mzg5O2UuRWNhcm9uPTYxMTtlLklvZ29uZWs9MzMzO2Uua2NvbW1hYWNjZW50PTQ0NDtlLm1pbnVzPTY3NTtlLkljaXJjdW1mbGV4PTMzMztlLm5jYXJvbj01MDA7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD02NzU7ZS5vZGllcmVzaXM9NTAwO2UudWRpZXJlc2lzPTUwMDtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01MDA7ZS5ldGg9NTAwO2UuemNhcm9uPTM4OTtlLm5jb21tYWFjY2VudD01MDA7ZS5vbmVzdXBlcmlvcj0zMDA7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTAwfSkpO2UuWmFwZkRpbmdiYXRzPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5hMT05NzQ7ZS5hMj05NjE7ZS5hMjAyPTk3NDtlLmEzPTk4MDtlLmE0PTcxOTtlLmE1PTc4OTtlLmExMTk9NzkwO2UuYTExOD03OTE7ZS5hMTE3PTY5MDtlLmExMT05NjA7ZS5hMTI9OTM5O2UuYTEzPTU0OTtlLmExND04NTU7ZS5hMTU9OTExO2UuYTE2PTkzMztlLmExMDU9OTExO2UuYTE3PTk0NTtlLmExOD05NzQ7ZS5hMTk9NzU1O2UuYTIwPTg0NjtlLmEyMT03NjI7ZS5hMjI9NzYxO2UuYTIzPTU3MTtlLmEyND02Nzc7ZS5hMjU9NzYzO2UuYTI2PTc2MDtlLmEyNz03NTk7ZS5hMjg9NzU0O2UuYTY9NDk0O2UuYTc9NTUyO2UuYTg9NTM3O2UuYTk9NTc3O2UuYTEwPTY5MjtlLmEyOT03ODY7ZS5hMzA9Nzg4O2UuYTMxPTc4ODtlLmEzMj03OTA7ZS5hMzM9NzkzO2UuYTM0PTc5NDtlLmEzNT04MTY7ZS5hMzY9ODIzO2UuYTM3PTc4OTtlLmEzOD04NDE7ZS5hMzk9ODIzO2UuYTQwPTgzMztlLmE0MT04MTY7ZS5hNDI9ODMxO2UuYTQzPTkyMztlLmE0ND03NDQ7ZS5hNDU9NzIzO2UuYTQ2PTc0OTtlLmE0Nz03OTA7ZS5hNDg9NzkyO2UuYTQ5PTY5NTtlLmE1MD03NzY7ZS5hNTE9NzY4O2UuYTUyPTc5MjtlLmE1Mz03NTk7ZS5hNTQ9NzA3O2UuYTU1PTcwODtlLmE1Nj02ODI7ZS5hNTc9NzAxO2UuYTU4PTgyNjtlLmE1OT04MTU7ZS5hNjA9Nzg5O2UuYTYxPTc4OTtlLmE2Mj03MDc7ZS5hNjM9Njg3O2UuYTY0PTY5NjtlLmE2NT02ODk7ZS5hNjY9Nzg2O2UuYTY3PTc4NztlLmE2OD03MTM7ZS5hNjk9NzkxO2UuYTcwPTc4NTtlLmE3MT03OTE7ZS5hNzI9ODczO2UuYTczPTc2MTtlLmE3ND03NjI7ZS5hMjAzPTc2MjtlLmE3NT03NTk7ZS5hMjA0PTc1OTtlLmE3Nj04OTI7ZS5hNzc9ODkyO2UuYTc4PTc4ODtlLmE3OT03ODQ7ZS5hODE9NDM4O2UuYTgyPTEzODtlLmE4Mz0yNzc7ZS5hODQ9NDE1O2UuYTk3PTM5MjtlLmE5OD0zOTI7ZS5hOTk9NjY4O2UuYTEwMD02Njg7ZS5hODk9MzkwO2UuYTkwPTM5MDtlLmE5Mz0zMTc7ZS5hOTQ9MzE3O2UuYTkxPTI3NjtlLmE5Mj0yNzY7ZS5hMjA1PTUwOTtlLmE4NT01MDk7ZS5hMjA2PTQxMDtlLmE4Nj00MTA7ZS5hODc9MjM0O2UuYTg4PTIzNDtlLmE5NT0zMzQ7ZS5hOTY9MzM0O2UuYTEwMT03MzI7ZS5hMTAyPTU0NDtlLmExMDM9NTQ0O2UuYTEwND05MTA7ZS5hMTA2PTY2NztlLmExMDc9NzYwO2UuYTEwOD03NjA7ZS5hMTEyPTc3NjtlLmExMTE9NTk1O2UuYTExMD02OTQ7ZS5hMTA5PTYyNjtlLmExMjA9Nzg4O2UuYTEyMT03ODg7ZS5hMTIyPTc4ODtlLmExMjM9Nzg4O2UuYTEyND03ODg7ZS5hMTI1PTc4ODtlLmExMjY9Nzg4O2UuYTEyNz03ODg7ZS5hMTI4PTc4ODtlLmExMjk9Nzg4O2UuYTEzMD03ODg7ZS5hMTMxPTc4ODtlLmExMzI9Nzg4O2UuYTEzMz03ODg7ZS5hMTM0PTc4ODtlLmExMzU9Nzg4O2UuYTEzNj03ODg7ZS5hMTM3PTc4ODtlLmExMzg9Nzg4O2UuYTEzOT03ODg7ZS5hMTQwPTc4ODtlLmExNDE9Nzg4O2UuYTE0Mj03ODg7ZS5hMTQzPTc4ODtlLmExNDQ9Nzg4O2UuYTE0NT03ODg7ZS5hMTQ2PTc4ODtlLmExNDc9Nzg4O2UuYTE0OD03ODg7ZS5hMTQ5PTc4ODtlLmExNTA9Nzg4O2UuYTE1MT03ODg7ZS5hMTUyPTc4ODtlLmExNTM9Nzg4O2UuYTE1ND03ODg7ZS5hMTU1PTc4ODtlLmExNTY9Nzg4O2UuYTE1Nz03ODg7ZS5hMTU4PTc4ODtlLmExNTk9Nzg4O2UuYTE2MD04OTQ7ZS5hMTYxPTgzODtlLmExNjM9MTAxNjtlLmExNjQ9NDU4O2UuYTE5Nj03NDg7ZS5hMTY1PTkyNDtlLmExOTI9NzQ4O2UuYTE2Nj05MTg7ZS5hMTY3PTkyNztlLmExNjg9OTI4O2UuYTE2OT05Mjg7ZS5hMTcwPTgzNDtlLmExNzE9ODczO2UuYTE3Mj04Mjg7ZS5hMTczPTkyNDtlLmExNjI9OTI0O2UuYTE3ND05MTc7ZS5hMTc1PTkzMDtlLmExNzY9OTMxO2UuYTE3Nz00NjM7ZS5hMTc4PTg4MztlLmExNzk9ODM2O2UuYTE5Mz04MzY7ZS5hMTgwPTg2NztlLmExOTk9ODY3O2UuYTE4MT02OTY7ZS5hMjAwPTY5NjtlLmExODI9ODc0O2UuYTIwMT04NzQ7ZS5hMTgzPTc2MDtlLmExODQ9OTQ2O2UuYTE5Nz03NzE7ZS5hMTg1PTg2NTtlLmExOTQ9NzcxO2UuYTE5OD04ODg7ZS5hMTg2PTk2NztlLmExOTU9ODg4O2UuYTE4Nz04MzE7ZS5hMTg4PTg3MztlLmExODk9OTI3O2UuYTE5MD05NzA7ZS5hMTkxPTkxOH0pKX0pKSxuYT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0Oi00MjZ9O2VbIkNvdXJpZXItQm9sZCJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDM5fTtlWyJDb3VyaWVyLU9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn07ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDI2fTtlLkhlbHZldGljYT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM307ZVsiSGVsdmV0aWNhLUJvbGQiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUzMn07ZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUyM307ZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9O2VbIlRpbWVzLVJvbWFuIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjIseEhlaWdodDo0NTB9O2VbIlRpbWVzLUJvbGQiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY3Nix4SGVpZ2h0OjQ2MX07ZVsiVGltZXMtSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NTMseEhlaWdodDo0NDF9O2VbIlRpbWVzLUJvbGRJdGFsaWMiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY2OSx4SGVpZ2h0OjQ2Mn07ZS5TeW1ib2w9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfTtlLlphcGZEaW5nYmF0cz17YXNjZW50Ok1hdGguTmFOLGRlc2NlbnQ6TWF0aC5OYU4sY2FwSGVpZ2h0Ok1hdGguTmFOLHhIZWlnaHQ6TWF0aC5OYU59fSkpO2NsYXNzIEdseWZUYWJsZXtjb25zdHJ1Y3Rvcih7Z2x5ZlRhYmxlOmUsaXNHbHlwaExvY2F0aW9uc0xvbmc6dCxsb2NhVGFibGU6aSxudW1HbHlwaHM6YX0pe3RoaXMuZ2x5cGhzPVtdO2NvbnN0IHI9bmV3IERhdGFWaWV3KGkuYnVmZmVyLGkuYnl0ZU9mZnNldCxpLmJ5dGVMZW5ndGgpLHM9bmV3IERhdGFWaWV3KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpLG49dD80OjI7bGV0IG89dD9yLmdldFVpbnQzMigwKToyKnIuZ2V0VWludDE2KDApLGc9MDtmb3IobGV0IGU9MDtlPGE7ZSsrKXtnKz1uO2NvbnN0IGU9dD9yLmdldFVpbnQzMihnKToyKnIuZ2V0VWludDE2KGcpO2lmKGU9PT1vKXt0aGlzLmdseXBocy5wdXNoKG5ldyBHbHlwaCh7fSkpO2NvbnRpbnVlfWNvbnN0IGk9R2x5cGgucGFyc2UobyxzKTt0aGlzLmdseXBocy5wdXNoKGkpO289ZX19Z2V0U2l6ZSgpe3JldHVybiB0aGlzLmdseXBocy5yZWR1Y2UoKChlLHQpPT5lKyh0LmdldFNpemUoKSszJi00KSksMCl9d3JpdGUoKXtjb25zdCBlPXRoaXMuZ2V0U2l6ZSgpLHQ9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcihlKSksaT1lPjEzMTA3MCxhPWk/NDoyLHI9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigodGhpcy5nbHlwaHMubGVuZ3RoKzEpKmEpKTtpP3Iuc2V0VWludDMyKDAsMCk6ci5zZXRVaW50MTYoMCwwKTtsZXQgcz0wLG49MDtmb3IoY29uc3QgZSBvZiB0aGlzLmdseXBocyl7cys9ZS53cml0ZShzLHQpO3M9cyszJi00O24rPWE7aT9yLnNldFVpbnQzMihuLHMpOnIuc2V0VWludDE2KG4scz4+MSl9cmV0dXJue2lzTG9jYXRpb25Mb25nOmksbG9jYTpuZXcgVWludDhBcnJheShyLmJ1ZmZlciksZ2x5ZjpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcil9fXNjYWxlKGUpe2ZvcihsZXQgdD0wLGk9dGhpcy5nbHlwaHMubGVuZ3RoO3Q8aTt0KyspdGhpcy5nbHlwaHNbdF0uc2NhbGUoZVt0XSl9fWNsYXNzIEdseXBoe2NvbnN0cnVjdG9yKHtoZWFkZXI6ZT1udWxsLHNpbXBsZTp0PW51bGwsY29tcG9zaXRlczppPW51bGx9KXt0aGlzLmhlYWRlcj1lO3RoaXMuc2ltcGxlPXQ7dGhpcy5jb21wb3NpdGVzPWl9c3RhdGljIHBhcnNlKGUsdCl7Y29uc3RbaSxhXT1HbHlwaEhlYWRlci5wYXJzZShlLHQpO2UrPWk7aWYoYS5udW1iZXJPZkNvbnRvdXJzPDApe2NvbnN0IGk9W107Zm9yKDs7KXtjb25zdFthLHJdPUNvbXBvc2l0ZUdseXBoLnBhcnNlKGUsdCk7ZSs9YTtpLnB1c2gocik7aWYoISgzMiZyLmZsYWdzKSlicmVha31yZXR1cm4gbmV3IEdseXBoKHtoZWFkZXI6YSxjb21wb3NpdGVzOml9KX1jb25zdCByPVNpbXBsZUdseXBoLnBhcnNlKGUsdCxhLm51bWJlck9mQ29udG91cnMpO3JldHVybiBuZXcgR2x5cGgoe2hlYWRlcjphLHNpbXBsZTpyfSl9Z2V0U2l6ZSgpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm4gMDtjb25zdCBlPXRoaXMuc2ltcGxlP3RoaXMuc2ltcGxlLmdldFNpemUoKTp0aGlzLmNvbXBvc2l0ZXMucmVkdWNlKCgoZSx0KT0+ZSt0LmdldFNpemUoKSksMCk7cmV0dXJuIHRoaXMuaGVhZGVyLmdldFNpemUoKStlfXdyaXRlKGUsdCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO2NvbnN0IGk9ZTtlKz10aGlzLmhlYWRlci53cml0ZShlLHQpO2lmKHRoaXMuc2ltcGxlKWUrPXRoaXMuc2ltcGxlLndyaXRlKGUsdCk7ZWxzZSBmb3IoY29uc3QgaSBvZiB0aGlzLmNvbXBvc2l0ZXMpZSs9aS53cml0ZShlLHQpO3JldHVybiBlLWl9c2NhbGUoZSl7aWYoIXRoaXMuaGVhZGVyKXJldHVybjtjb25zdCB0PSh0aGlzLmhlYWRlci54TWluK3RoaXMuaGVhZGVyLnhNYXgpLzI7dGhpcy5oZWFkZXIuc2NhbGUodCxlKTtpZih0aGlzLnNpbXBsZSl0aGlzLnNpbXBsZS5zY2FsZSh0LGUpO2Vsc2UgZm9yKGNvbnN0IGkgb2YgdGhpcy5jb21wb3NpdGVzKWkuc2NhbGUodCxlKX19Y2xhc3MgR2x5cGhIZWFkZXJ7Y29uc3RydWN0b3Ioe251bWJlck9mQ29udG91cnM6ZSx4TWluOnQseU1pbjppLHhNYXg6YSx5TWF4OnJ9KXt0aGlzLm51bWJlck9mQ29udG91cnM9ZTt0aGlzLnhNaW49dDt0aGlzLnlNaW49aTt0aGlzLnhNYXg9YTt0aGlzLnlNYXg9cn1zdGF0aWMgcGFyc2UoZSx0KXtyZXR1cm5bMTAsbmV3IEdseXBoSGVhZGVyKHtudW1iZXJPZkNvbnRvdXJzOnQuZ2V0SW50MTYoZSkseE1pbjp0LmdldEludDE2KGUrMikseU1pbjp0LmdldEludDE2KGUrNCkseE1heDp0LmdldEludDE2KGUrNikseU1heDp0LmdldEludDE2KGUrOCl9KV19Z2V0U2l6ZSgpe3JldHVybiAxMH13cml0ZShlLHQpe3Quc2V0SW50MTYoZSx0aGlzLm51bWJlck9mQ29udG91cnMpO3Quc2V0SW50MTYoZSsyLHRoaXMueE1pbik7dC5zZXRJbnQxNihlKzQsdGhpcy55TWluKTt0LnNldEludDE2KGUrNix0aGlzLnhNYXgpO3Quc2V0SW50MTYoZSs4LHRoaXMueU1heCk7cmV0dXJuIDEwfXNjYWxlKGUsdCl7dGhpcy54TWluPU1hdGgucm91bmQoZSsodGhpcy54TWluLWUpKnQpO3RoaXMueE1heD1NYXRoLnJvdW5kKGUrKHRoaXMueE1heC1lKSp0KX19Y2xhc3MgQ29udG91cntjb25zdHJ1Y3Rvcih7ZmxhZ3M6ZSx4Q29vcmRpbmF0ZXM6dCx5Q29vcmRpbmF0ZXM6aX0pe3RoaXMueENvb3JkaW5hdGVzPXQ7dGhpcy55Q29vcmRpbmF0ZXM9aTt0aGlzLmZsYWdzPWV9fWNsYXNzIFNpbXBsZUdseXBoe2NvbnN0cnVjdG9yKHtjb250b3VyczplLGluc3RydWN0aW9uczp0fSl7dGhpcy5jb250b3Vycz1lO3RoaXMuaW5zdHJ1Y3Rpb25zPXR9c3RhdGljIHBhcnNlKGUsdCxpKXtjb25zdCBhPVtdO2ZvcihsZXQgcj0wO3I8aTtyKyspe2NvbnN0IGk9dC5nZXRVaW50MTYoZSk7ZSs9MjthLnB1c2goaSl9Y29uc3Qgcj1hW2ktMV0rMSxzPXQuZ2V0VWludDE2KGUpO2UrPTI7Y29uc3Qgbj1uZXcgVWludDhBcnJheSh0KS5zbGljZShlLGUrcyk7ZSs9cztjb25zdCBvPVtdO2ZvcihsZXQgaT0wO2k8cjtlKyssaSsrKXtsZXQgYT10LmdldFVpbnQ4KGUpO28ucHVzaChhKTtpZig4JmEpe2NvbnN0IHI9dC5nZXRVaW50OCgrK2UpO2FePTg7Zm9yKGxldCBlPTA7ZTxyO2UrKylvLnB1c2goYSk7aSs9cn19Y29uc3QgZz1bXTtsZXQgYz1bXSxDPVtdLGg9W107Y29uc3QgbD1bXTtsZXQgUT0wLEU9MDtmb3IobGV0IGk9MDtpPHI7aSsrKXtjb25zdCByPW9baV07aWYoMiZyKXtjb25zdCBpPXQuZ2V0VWludDgoZSsrKTtFKz0xNiZyP2k6LWk7Yy5wdXNoKEUpfWVsc2UgaWYoMTYmciljLnB1c2goRSk7ZWxzZXtFKz10LmdldEludDE2KGUpO2UrPTI7Yy5wdXNoKEUpfWlmKGFbUV09PT1pKXtRKys7Zy5wdXNoKGMpO2M9W119fUU9MDtRPTA7Zm9yKGxldCBpPTA7aTxyO2krKyl7Y29uc3Qgcj1vW2ldO2lmKDQmcil7Y29uc3QgaT10LmdldFVpbnQ4KGUrKyk7RSs9MzImcj9pOi1pO0MucHVzaChFKX1lbHNlIGlmKDMyJnIpQy5wdXNoKEUpO2Vsc2V7RSs9dC5nZXRJbnQxNihlKTtlKz0yO0MucHVzaChFKX1oLnB1c2goMSZyfDY0JnIpO2lmKGFbUV09PT1pKXtjPWdbUV07USsrO2wucHVzaChuZXcgQ29udG91cih7ZmxhZ3M6aCx4Q29vcmRpbmF0ZXM6Yyx5Q29vcmRpbmF0ZXM6Q30pKTtDPVtdO2g9W119fXJldHVybiBuZXcgU2ltcGxlR2x5cGgoe2NvbnRvdXJzOmwsaW5zdHJ1Y3Rpb25zOm59KX1nZXRTaXplKCl7bGV0IGU9Mip0aGlzLmNvbnRvdXJzLmxlbmd0aCsyK3RoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCx0PTAsaT0wO2Zvcihjb25zdCBhIG9mIHRoaXMuY29udG91cnMpe2UrPWEuZmxhZ3MubGVuZ3RoO2ZvcihsZXQgcj0wLHM9YS54Q29vcmRpbmF0ZXMubGVuZ3RoO3I8cztyKyspe2NvbnN0IHM9YS54Q29vcmRpbmF0ZXNbcl0sbj1hLnlDb29yZGluYXRlc1tyXTtsZXQgbz1NYXRoLmFicyhzLXQpO28+MjU1P2UrPTI6bz4wJiYoZSs9MSk7dD1zO289TWF0aC5hYnMobi1pKTtvPjI1NT9lKz0yOm8+MCYmKGUrPTEpO2k9bn19cmV0dXJuIGV9d3JpdGUoZSx0KXtjb25zdCBpPWUsYT1bXSxyPVtdLHM9W107bGV0IG49MCxvPTA7Zm9yKGNvbnN0IGkgb2YgdGhpcy5jb250b3Vycyl7Zm9yKGxldCBlPTAsdD1pLnhDb29yZGluYXRlcy5sZW5ndGg7ZTx0O2UrKyl7bGV0IHQ9aS5mbGFnc1tlXTtjb25zdCBnPWkueENvb3JkaW5hdGVzW2VdO2xldCBjPWctbjtpZigwPT09Yyl7dHw9MTY7YS5wdXNoKDApfWVsc2V7Y29uc3QgZT1NYXRoLmFicyhjKTtpZihlPD0yNTUpe3R8PWM+PTA/MTg6MjthLnB1c2goZSl9ZWxzZSBhLnB1c2goYyl9bj1nO2NvbnN0IEM9aS55Q29vcmRpbmF0ZXNbZV07Yz1DLW87aWYoMD09PWMpe3R8PTMyO3IucHVzaCgwKX1lbHNle2NvbnN0IGU9TWF0aC5hYnMoYyk7aWYoZTw9MjU1KXt0fD1jPj0wPzM2OjQ7ci5wdXNoKGUpfWVsc2Ugci5wdXNoKGMpfW89QztzLnB1c2godCl9dC5zZXRVaW50MTYoZSxhLmxlbmd0aC0xKTtlKz0yfXQuc2V0VWludDE2KGUsdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKTtlKz0yO2lmKHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCl7bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsMCx0LmJ1ZmZlci5ieXRlTGVuZ3RoKS5zZXQodGhpcy5pbnN0cnVjdGlvbnMsZSk7ZSs9dGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RofWZvcihjb25zdCBpIG9mIHMpdC5zZXRVaW50OChlKyssaSk7Zm9yKGxldCBpPTAscj1hLmxlbmd0aDtpPHI7aSsrKXtjb25zdCByPWFbaV0sbj1zW2ldO2lmKDImbil0LnNldFVpbnQ4KGUrKyxyKTtlbHNlIGlmKCEoMTYmbikpe3Quc2V0SW50MTYoZSxyKTtlKz0yfX1mb3IobGV0IGk9MCxhPXIubGVuZ3RoO2k8YTtpKyspe2NvbnN0IGE9cltpXSxuPXNbaV07aWYoNCZuKXQuc2V0VWludDgoZSsrLGEpO2Vsc2UgaWYoISgzMiZuKSl7dC5zZXRJbnQxNihlLGEpO2UrPTJ9fXJldHVybiBlLWl9c2NhbGUoZSx0KXtmb3IoY29uc3QgaSBvZiB0aGlzLmNvbnRvdXJzKWlmKDAhPT1pLnhDb29yZGluYXRlcy5sZW5ndGgpZm9yKGxldCBhPTAscj1pLnhDb29yZGluYXRlcy5sZW5ndGg7YTxyO2ErKylpLnhDb29yZGluYXRlc1thXT1NYXRoLnJvdW5kKGUrKGkueENvb3JkaW5hdGVzW2FdLWUpKnQpfX1jbGFzcyBDb21wb3NpdGVHbHlwaHtjb25zdHJ1Y3Rvcih7ZmxhZ3M6ZSxnbHlwaEluZGV4OnQsYXJndW1lbnQxOmksYXJndW1lbnQyOmEsdHJhbnNmOnIsaW5zdHJ1Y3Rpb25zOnN9KXt0aGlzLmZsYWdzPWU7dGhpcy5nbHlwaEluZGV4PXQ7dGhpcy5hcmd1bWVudDE9aTt0aGlzLmFyZ3VtZW50Mj1hO3RoaXMudHJhbnNmPXI7dGhpcy5pbnN0cnVjdGlvbnM9c31zdGF0aWMgcGFyc2UoZSx0KXtjb25zdCBpPWUsYT1bXTtsZXQgcj10LmdldFVpbnQxNihlKTtjb25zdCBzPXQuZ2V0VWludDE2KGUrMik7ZSs9NDtsZXQgbixvO2lmKDEmcil7aWYoMiZyKXtuPXQuZ2V0SW50MTYoZSk7bz10LmdldEludDE2KGUrMil9ZWxzZXtuPXQuZ2V0VWludDE2KGUpO289dC5nZXRVaW50MTYoZSsyKX1lKz00O3JePTF9ZWxzZXtpZigyJnIpe249dC5nZXRJbnQ4KGUpO289dC5nZXRJbnQ4KGUrMSl9ZWxzZXtuPXQuZ2V0VWludDgoZSk7bz10LmdldFVpbnQ4KGUrMSl9ZSs9Mn1pZig4JnIpe2EucHVzaCh0LmdldFVpbnQxNihlKSk7ZSs9Mn1lbHNlIGlmKDY0JnIpe2EucHVzaCh0LmdldFVpbnQxNihlKSx0LmdldFVpbnQxNihlKzIpKTtlKz00fWVsc2UgaWYoMTI4JnIpe2EucHVzaCh0LmdldFVpbnQxNihlKSx0LmdldFVpbnQxNihlKzIpLHQuZ2V0VWludDE2KGUrNCksdC5nZXRVaW50MTYoZSs2KSk7ZSs9OH1sZXQgZz1udWxsO2lmKDI1NiZyKXtjb25zdCBpPXQuZ2V0VWludDE2KGUpO2UrPTI7Zz1uZXcgVWludDhBcnJheSh0KS5zbGljZShlLGUraSk7ZSs9aX1yZXR1cm5bZS1pLG5ldyBDb21wb3NpdGVHbHlwaCh7ZmxhZ3M6cixnbHlwaEluZGV4OnMsYXJndW1lbnQxOm4sYXJndW1lbnQyOm8sdHJhbnNmOmEsaW5zdHJ1Y3Rpb25zOmd9KV19Z2V0U2l6ZSgpe2xldCBlPTQrMip0aGlzLnRyYW5zZi5sZW5ndGg7MjU2JnRoaXMuZmxhZ3MmJihlKz0yK3RoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCk7ZSs9MjsyJnRoaXMuZmxhZ3M/dGhpcy5hcmd1bWVudDE+PS0xMjgmJnRoaXMuYXJndW1lbnQxPD0xMjcmJnRoaXMuYXJndW1lbnQyPj0tMTI4JiZ0aGlzLmFyZ3VtZW50Mjw9MTI3fHwoZSs9Mik6dGhpcy5hcmd1bWVudDE+PTAmJnRoaXMuYXJndW1lbnQxPD0yNTUmJnRoaXMuYXJndW1lbnQyPj0wJiZ0aGlzLmFyZ3VtZW50Mjw9MjU1fHwoZSs9Mik7cmV0dXJuIGV9d3JpdGUoZSx0KXtjb25zdCBpPWU7MiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KHRoaXMuZmxhZ3N8PTEpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KHRoaXMuZmxhZ3N8PTEpO3Quc2V0VWludDE2KGUsdGhpcy5mbGFncyk7dC5zZXRVaW50MTYoZSsyLHRoaXMuZ2x5cGhJbmRleCk7ZSs9NDtpZigxJnRoaXMuZmxhZ3Mpe2lmKDImdGhpcy5mbGFncyl7dC5zZXRJbnQxNihlLHRoaXMuYXJndW1lbnQxKTt0LnNldEludDE2KGUrMix0aGlzLmFyZ3VtZW50Mil9ZWxzZXt0LnNldFVpbnQxNihlLHRoaXMuYXJndW1lbnQxKTt0LnNldFVpbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpfWUrPTR9ZWxzZXt0LnNldFVpbnQ4KGUsdGhpcy5hcmd1bWVudDEpO3Quc2V0VWludDgoZSsxLHRoaXMuYXJndW1lbnQyKTtlKz0yfWlmKDI1NiZ0aGlzLmZsYWdzKXt0LnNldFVpbnQxNihlLHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCk7ZSs9MjtpZih0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpe25ldyBVaW50OEFycmF5KHQuYnVmZmVyLDAsdC5idWZmZXIuYnl0ZUxlbmd0aCkuc2V0KHRoaXMuaW5zdHJ1Y3Rpb25zLGUpO2UrPXRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aH19cmV0dXJuIGUtaX1zY2FsZShlLHQpe319ZnVuY3Rpb24gd3JpdGVJbnQxNihlLHQsaSl7ZVt0XT1pPj44JjI1NTtlW3QrMV09MjU1Jml9ZnVuY3Rpb24gd3JpdGVJbnQzMihlLHQsaSl7ZVt0XT1pPj4yNCYyNTU7ZVt0KzFdPWk+PjE2JjI1NTtlW3QrMl09aT4+OCYyNTU7ZVt0KzNdPTI1NSZpfWZ1bmN0aW9uIHdyaXRlRGF0YShlLHQsaSl7aWYoaSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpZS5zZXQoaSx0KTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgaSlmb3IobGV0IGE9MCxyPWkubGVuZ3RoO2E8cjthKyspZVt0KytdPTI1NSZpLmNoYXJDb2RlQXQoYSk7ZWxzZSBmb3IoY29uc3QgYSBvZiBpKWVbdCsrXT0yNTUmYX1jbGFzcyBPcGVuVHlwZUZpbGVCdWlsZGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuc2ZudD1lO3RoaXMudGFibGVzPU9iamVjdC5jcmVhdGUobnVsbCl9c3RhdGljIGdldFNlYXJjaFBhcmFtcyhlLHQpe2xldCBpPTEsYT0wO2Zvcig7KGleZSk+aTspe2k8PD0xO2ErK31jb25zdCByPWkqdDtyZXR1cm57cmFuZ2U6cixlbnRyeTphLHJhbmdlU2hpZnQ6dCplLXJ9fXRvQXJyYXkoKXtsZXQgZT10aGlzLnNmbnQ7Y29uc3QgdD10aGlzLnRhYmxlcyxpPU9iamVjdC5rZXlzKHQpO2kuc29ydCgpO2NvbnN0IGE9aS5sZW5ndGg7bGV0IHIscyxuLG8sZyxjPTEyKzE2KmE7Y29uc3QgQz1bY107Zm9yKHI9MDtyPGE7cisrKXtvPXRbaVtyXV07Yys9KG8ubGVuZ3RoKzMmLTQpPj4+MDtDLnB1c2goYyl9Y29uc3QgaD1uZXcgVWludDhBcnJheShjKTtmb3Iocj0wO3I8YTtyKyspe289dFtpW3JdXTt3cml0ZURhdGEoaCxDW3JdLG8pfSJ0cnVlIj09PWUmJihlPXN0cmluZzMyKDY1NTM2KSk7aFswXT0yNTUmZS5jaGFyQ29kZUF0KDApO2hbMV09MjU1JmUuY2hhckNvZGVBdCgxKTtoWzJdPTI1NSZlLmNoYXJDb2RlQXQoMik7aFszXT0yNTUmZS5jaGFyQ29kZUF0KDMpO3dyaXRlSW50MTYoaCw0LGEpO2NvbnN0IGw9T3BlblR5cGVGaWxlQnVpbGRlci5nZXRTZWFyY2hQYXJhbXMoYSwxNik7d3JpdGVJbnQxNihoLDYsbC5yYW5nZSk7d3JpdGVJbnQxNihoLDgsbC5lbnRyeSk7d3JpdGVJbnQxNihoLDEwLGwucmFuZ2VTaGlmdCk7Yz0xMjtmb3Iocj0wO3I8YTtyKyspe2c9aVtyXTtoW2NdPTI1NSZnLmNoYXJDb2RlQXQoMCk7aFtjKzFdPTI1NSZnLmNoYXJDb2RlQXQoMSk7aFtjKzJdPTI1NSZnLmNoYXJDb2RlQXQoMik7aFtjKzNdPTI1NSZnLmNoYXJDb2RlQXQoMyk7bGV0IGU9MDtmb3Iocz1DW3JdLG49Q1tyKzFdO3M8bjtzKz00KXtlPWUrcmVhZFVpbnQzMihoLHMpPj4+MH13cml0ZUludDMyKGgsYys0LGUpO3dyaXRlSW50MzIoaCxjKzgsQ1tyXSk7d3JpdGVJbnQzMihoLGMrMTIsdFtnXS5sZW5ndGgpO2MrPTE2fXJldHVybiBofWFkZFRhYmxlKGUsdCl7aWYoZSBpbiB0aGlzLnRhYmxlcyl0aHJvdyBuZXcgRXJyb3IoIlRhYmxlICIrZSsiIGFscmVhZHkgZXhpc3RzIik7dGhpcy50YWJsZXNbZV09dH19Y29uc3Qgb2E9WzRdLGdhPVs1XSxJYT1bNl0sY2E9WzddLENhPVs4XSxoYT1bMTIsMzVdLGxhPVsxNF0sQmE9WzIxXSxRYT1bMjJdLEVhPVszMF0sdWE9WzMxXTtjbGFzcyBUeXBlMUNoYXJTdHJpbmd7Y29uc3RydWN0b3IoKXt0aGlzLndpZHRoPTA7dGhpcy5sc2I9MDt0aGlzLmZsZXhpbmc9ITE7dGhpcy5vdXRwdXQ9W107dGhpcy5zdGFjaz1bXX1jb252ZXJ0KGUsdCxpKXtjb25zdCBhPWUubGVuZ3RoO2xldCByLHMsbixvPSExO2ZvcihsZXQgZz0wO2c8YTtnKyspe2xldCBhPWVbZ107aWYoYTwzMil7MTI9PT1hJiYoYT0oYTw8OCkrZVsrK2ddKTtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMzpjYXNlIDk6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDMwNzQ6Y2FzZSAzMTA1OnRoaXMuc3RhY2s9W107YnJlYWs7Y2FzZSA0OmlmKHRoaXMuZmxleGluZyl7aWYodGhpcy5zdGFjay5sZW5ndGg8MSl7bz0hMDticmVha31jb25zdCBlPXRoaXMuc3RhY2sucG9wKCk7dGhpcy5zdGFjay5wdXNoKDAsZSk7YnJlYWt9bz10aGlzLmV4ZWN1dGVDb21tYW5kKDEsb2EpO2JyZWFrO2Nhc2UgNTpvPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixnYSk7YnJlYWs7Y2FzZSA2Om89dGhpcy5leGVjdXRlQ29tbWFuZCgxLElhKTticmVhaztjYXNlIDc6bz10aGlzLmV4ZWN1dGVDb21tYW5kKDEsY2EpO2JyZWFrO2Nhc2UgODpvPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNixDYSk7YnJlYWs7Y2FzZSAxMDppZih0aGlzLnN0YWNrLmxlbmd0aDwxKXtvPSEwO2JyZWFrfW49dGhpcy5zdGFjay5wb3AoKTtpZighdFtuXSl7bz0hMDticmVha31vPXRoaXMuY29udmVydCh0W25dLHQsaSk7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gbztjYXNlIDEzOmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe289ITA7YnJlYWt9cj10aGlzLnN0YWNrLnBvcCgpO3M9dGhpcy5zdGFjay5wb3AoKTt0aGlzLmxzYj1zO3RoaXMud2lkdGg9cjt0aGlzLnN0YWNrLnB1c2gocixzKTtvPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixRYSk7YnJlYWs7Y2FzZSAxNDp0aGlzLm91dHB1dC5wdXNoKGxhWzBdKTticmVhaztjYXNlIDIxOmlmKHRoaXMuZmxleGluZylicmVhaztvPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixCYSk7YnJlYWs7Y2FzZSAyMjppZih0aGlzLmZsZXhpbmcpe3RoaXMuc3RhY2sucHVzaCgwKTticmVha31vPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSxRYSk7YnJlYWs7Y2FzZSAzMDpvPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxFYSk7YnJlYWs7Y2FzZSAzMTpvPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCx1YSk7YnJlYWs7Y2FzZSAzMDc4OmlmKGkpe2NvbnN0IGU9dGhpcy5zdGFjay5hdCgtNSk7dGhpcy5zZWFjPXRoaXMuc3RhY2suc3BsaWNlKC00LDQpO3RoaXMuc2VhY1swXSs9dGhpcy5sc2ItZTtvPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMCxsYSl9ZWxzZSBvPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxsYSk7YnJlYWs7Y2FzZSAzMDc5OmlmKHRoaXMuc3RhY2subGVuZ3RoPDQpe289ITA7YnJlYWt9dGhpcy5zdGFjay5wb3AoKTtyPXRoaXMuc3RhY2sucG9wKCk7Y29uc3QgZT10aGlzLnN0YWNrLnBvcCgpO3M9dGhpcy5zdGFjay5wb3AoKTt0aGlzLmxzYj1zO3RoaXMud2lkdGg9cjt0aGlzLnN0YWNrLnB1c2gocixzLGUpO289dGhpcy5leGVjdXRlQ29tbWFuZCgzLEJhKTticmVhaztjYXNlIDMwODQ6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7bz0hMDticmVha31jb25zdCBnPXRoaXMuc3RhY2sucG9wKCksYz10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaChjL2cpO2JyZWFrO2Nhc2UgMzA4ODppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtvPSEwO2JyZWFrfW49dGhpcy5zdGFjay5wb3AoKTtjb25zdCBDPXRoaXMuc3RhY2sucG9wKCk7aWYoMD09PW4mJjM9PT1DKXtjb25zdCBlPXRoaXMuc3RhY2suc3BsaWNlKC0xNywxNyk7dGhpcy5zdGFjay5wdXNoKGVbMl0rZVswXSxlWzNdK2VbMV0sZVs0XSxlWzVdLGVbNl0sZVs3XSxlWzhdLGVbOV0sZVsxMF0sZVsxMV0sZVsxMl0sZVsxM10sZVsxNF0pO289dGhpcy5leGVjdXRlQ29tbWFuZCgxMyxoYSwhMCk7dGhpcy5mbGV4aW5nPSExO3RoaXMuc3RhY2sucHVzaChlWzE1XSxlWzE2XSl9ZWxzZSAxPT09biYmMD09PUMmJih0aGlzLmZsZXhpbmc9ITApO2JyZWFrO2Nhc2UgMzA4OTpicmVhaztkZWZhdWx0Ondhcm4oJ1Vua25vd24gdHlwZSAxIGNoYXJzdHJpbmcgY29tbWFuZCBvZiAiJythKyciJyl9aWYobylicmVha31lbHNle2E8PTI0Nj9hLT0xMzk6YT1hPD0yNTA/MjU2KihhLTI0NykrZVsrK2ddKzEwODphPD0yNTQ/LTI1NiooYS0yNTEpLWVbKytnXS0xMDg6KDI1NSZlWysrZ10pPDwyNHwoMjU1JmVbKytnXSk8PDE2fCgyNTUmZVsrK2ddKTw8OHwoMjU1JmVbKytnXSk8PDA7dGhpcy5zdGFjay5wdXNoKGEpfX1yZXR1cm4gb31leGVjdXRlQ29tbWFuZChlLHQsaSl7Y29uc3QgYT10aGlzLnN0YWNrLmxlbmd0aDtpZihlPmEpcmV0dXJuITA7Y29uc3Qgcj1hLWU7Zm9yKGxldCBlPXI7ZTxhO2UrKyl7bGV0IHQ9dGhpcy5zdGFja1tlXTtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXRoaXMub3V0cHV0LnB1c2goMjgsdD4+OCYyNTUsMjU1JnQpO2Vsc2V7dD02NTUzNip0fDA7dGhpcy5vdXRwdXQucHVzaCgyNTUsdD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCl9fXRoaXMub3V0cHV0LnB1c2goLi4udCk7aT90aGlzLnN0YWNrLnNwbGljZShyLGUpOnRoaXMuc3RhY2subGVuZ3RoPTA7cmV0dXJuITF9fWZ1bmN0aW9uIGlzSGV4RGlnaXQoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfWZ1bmN0aW9uIGRlY3J5cHQoZSx0LGkpe2lmKGk+PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtsZXQgYSxyLHM9MHx0O2ZvcihhPTA7YTxpO2ErKylzPTUyODQ1KihlW2FdK3MpKzIyNzE5JjY1NTM1O2NvbnN0IG49ZS5sZW5ndGgtaSxvPW5ldyBVaW50OEFycmF5KG4pO2ZvcihhPWkscj0wO3I8bjthKysscisrKXtjb25zdCB0PWVbYV07b1tyXT10XnM+Pjg7cz01Mjg0NSoodCtzKSsyMjcxOSY2NTUzNX1yZXR1cm4gb31mdW5jdGlvbiBpc1NwZWNpYWwoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfWNsYXNzIFR5cGUxUGFyc2Vye2NvbnN0cnVjdG9yKGUsdCxpKXtpZih0KXtjb25zdCB0PWUuZ2V0Qnl0ZXMoKSxpPSEoKGlzSGV4RGlnaXQodFswXSl8fGlzV2hpdGVTcGFjZSh0WzBdKSkmJmlzSGV4RGlnaXQodFsxXSkmJmlzSGV4RGlnaXQodFsyXSkmJmlzSGV4RGlnaXQodFszXSkmJmlzSGV4RGlnaXQodFs0XSkmJmlzSGV4RGlnaXQodFs1XSkmJmlzSGV4RGlnaXQodFs2XSkmJmlzSGV4RGlnaXQodFs3XSkpO2U9bmV3IFN0cmVhbShpP2RlY3J5cHQodCw1NTY2NSw0KTpmdW5jdGlvbiBkZWNyeXB0QXNjaWkoZSx0LGkpe2xldCBhPTB8dDtjb25zdCByPWUubGVuZ3RoLHM9bmV3IFVpbnQ4QXJyYXkocj4+PjEpO2xldCBuLG87Zm9yKG49MCxvPTA7bjxyO24rKyl7Y29uc3QgdD1lW25dO2lmKCFpc0hleERpZ2l0KHQpKWNvbnRpbnVlO24rKztsZXQgaTtmb3IoO248ciYmIWlzSGV4RGlnaXQoaT1lW25dKTspbisrO2lmKG48cil7Y29uc3QgZT1wYXJzZUludChTdHJpbmcuZnJvbUNoYXJDb2RlKHQsaSksMTYpO3NbbysrXT1lXmE+Pjg7YT01Mjg0NSooZSthKSsyMjcxOSY2NTUzNX19cmV0dXJuIHMuc2xpY2UoaSxvKX0odCw1NTY2NSw0KSl9dGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkPSEhaTt0aGlzLnN0cmVhbT1lO3RoaXMubmV4dENoYXIoKX1yZWFkTnVtYmVyQXJyYXkoKXt0aGlzLmdldFRva2VuKCk7Y29uc3QgZT1bXTtmb3IoOzspe2NvbnN0IHQ9dGhpcy5nZXRUb2tlbigpO2lmKG51bGw9PT10fHwiXSI9PT10fHwifSI9PT10KWJyZWFrO2UucHVzaChwYXJzZUZsb2F0KHR8fDApKX1yZXR1cm4gZX1yZWFkTnVtYmVyKCl7Y29uc3QgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIHBhcnNlRmxvYXQoZXx8MCl9cmVhZEludCgpe2NvbnN0IGU9dGhpcy5nZXRUb2tlbigpO3JldHVybiAwfHBhcnNlSW50KGV8fDAsMTApfXJlYWRCb29sZWFuKCl7cmV0dXJuInRydWUiPT09dGhpcy5nZXRUb2tlbigpPzE6MH1uZXh0Q2hhcigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1wcmV2Q2hhcigpe3RoaXMuc3RyZWFtLnNraXAoLTIpO3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1nZXRUb2tlbigpe2xldCBlPSExLHQ9dGhpcy5jdXJyZW50Q2hhcjtmb3IoOzspe2lmKC0xPT09dClyZXR1cm4gbnVsbDtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCFpc1doaXRlU3BhY2UodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9aWYoaXNTcGVjaWFsKHQpKXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9bGV0IGk9IiI7ZG97aSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KTt0PXRoaXMubmV4dENoYXIoKX13aGlsZSh0Pj0wJiYhaXNXaGl0ZVNwYWNlKHQpJiYhaXNTcGVjaWFsKHQpKTtyZXR1cm4gaX1yZWFkQ2hhclN0cmluZ3MoZSx0KXtyZXR1cm4tMT09PXQ/ZTpkZWNyeXB0KGUsNDMzMCx0KX1leHRyYWN0Rm9udFByb2dyYW0oZSl7Y29uc3QgdD10aGlzLnN0cmVhbSxpPVtdLGE9W10scj1PYmplY3QuY3JlYXRlKG51bGwpO3IubGVuSVY9NDtjb25zdCBzPXtzdWJyczpbXSxjaGFyc3RyaW5nczpbXSxwcm9wZXJ0aWVzOntwcml2YXRlRGF0YTpyfX07bGV0IG4sbyxnLGM7Zm9yKDtudWxsIT09KG49dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09bil7bj10aGlzLmdldFRva2VuKCk7c3dpdGNoKG4pe2Nhc2UiQ2hhclN0cmluZ3MiOnRoaXMuZ2V0VG9rZW4oKTt0aGlzLmdldFRva2VuKCk7dGhpcy5nZXRUb2tlbigpO3RoaXMuZ2V0VG9rZW4oKTtmb3IoOzspe249dGhpcy5nZXRUb2tlbigpO2lmKG51bGw9PT1ufHwiZW5kIj09PW4pYnJlYWs7aWYoIi8iIT09biljb250aW51ZTtjb25zdCBlPXRoaXMuZ2V0VG9rZW4oKTtvPXRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtnPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApO2M9cy5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO2NvbnN0IGk9dGhpcy5yZWFkQ2hhclN0cmluZ3MoZyxjKTt0aGlzLm5leHRDaGFyKCk7bj10aGlzLmdldFRva2VuKCk7Im5vYWNjZXNzIj09PW4/dGhpcy5nZXRUb2tlbigpOiIvIj09PW4mJnRoaXMucHJldkNoYXIoKTthLnB1c2goe2dseXBoOmUsZW5jb2RlZDppfSl9YnJlYWs7Y2FzZSJTdWJycyI6dGhpcy5yZWFkSW50KCk7dGhpcy5nZXRUb2tlbigpO2Zvcig7ImR1cCI9PT10aGlzLmdldFRva2VuKCk7KXtjb25zdCBlPXRoaXMucmVhZEludCgpO289dGhpcy5yZWFkSW50KCk7dGhpcy5nZXRUb2tlbigpO2c9bz4wP3QuZ2V0Qnl0ZXMobyk6bmV3IFVpbnQ4QXJyYXkoMCk7Yz1zLnByb3BlcnRpZXMucHJpdmF0ZURhdGEubGVuSVY7Y29uc3QgYT10aGlzLnJlYWRDaGFyU3RyaW5ncyhnLGMpO3RoaXMubmV4dENoYXIoKTtuPXRoaXMuZ2V0VG9rZW4oKTsibm9hY2Nlc3MiPT09biYmdGhpcy5nZXRUb2tlbigpO2lbZV09YX1icmVhaztjYXNlIkJsdWVWYWx1ZXMiOmNhc2UiT3RoZXJCbHVlcyI6Y2FzZSJGYW1pbHlCbHVlcyI6Y2FzZSJGYW1pbHlPdGhlckJsdWVzIjpjb25zdCBlPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5sZW5ndGg+MCYmZS5sZW5ndGgsMDticmVhaztjYXNlIlN0ZW1TbmFwSCI6Y2FzZSJTdGVtU25hcFYiOnMucHJvcGVydGllcy5wcml2YXRlRGF0YVtuXT10aGlzLnJlYWROdW1iZXJBcnJheSgpO2JyZWFrO2Nhc2UiU3RkSFciOmNhc2UiU3RkVlciOnMucHJvcGVydGllcy5wcml2YXRlRGF0YVtuXT10aGlzLnJlYWROdW1iZXJBcnJheSgpWzBdO2JyZWFrO2Nhc2UiQmx1ZVNoaWZ0IjpjYXNlImxlbklWIjpjYXNlIkJsdWVGdXp6IjpjYXNlIkJsdWVTY2FsZSI6Y2FzZSJMYW5ndWFnZUdyb3VwIjpzLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbbl09dGhpcy5yZWFkTnVtYmVyKCk7YnJlYWs7Y2FzZSJFeHBhbnNpb25GYWN0b3IiOnMucHJvcGVydGllcy5wcml2YXRlRGF0YVtuXT10aGlzLnJlYWROdW1iZXIoKXx8LjA2O2JyZWFrO2Nhc2UiRm9yY2VCb2xkIjpzLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbbl09dGhpcy5yZWFkQm9vbGVhbigpfX1mb3IoY29uc3R7ZW5jb2RlZDp0LGdseXBoOnJ9b2YgYSl7Y29uc3QgYT1uZXcgVHlwZTFDaGFyU3RyaW5nLG49YS5jb252ZXJ0KHQsaSx0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpO2xldCBvPWEub3V0cHV0O24mJihvPVsxNF0pO2NvbnN0IGc9e2dseXBoTmFtZTpyLGNoYXJzdHJpbmc6byx3aWR0aDphLndpZHRoLGxzYjphLmxzYixzZWFjOmEuc2VhY307Ii5ub3RkZWYiPT09cj9zLmNoYXJzdHJpbmdzLnVuc2hpZnQoZyk6cy5jaGFyc3RyaW5ncy5wdXNoKGcpO2lmKGUuYnVpbHRJbkVuY29kaW5nKXtjb25zdCB0PWUuYnVpbHRJbkVuY29kaW5nLmluZGV4T2Yocik7dD4tMSYmdm9pZCAwPT09ZS53aWR0aHNbdF0mJnQ+PWUuZmlyc3RDaGFyJiZ0PD1lLmxhc3RDaGFyJiYoZS53aWR0aHNbdF09YS53aWR0aCl9fXJldHVybiBzfWV4dHJhY3RGb250SGVhZGVyKGUpe2xldCB0O2Zvcig7bnVsbCE9PSh0PXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PXQpe3Q9dGhpcy5nZXRUb2tlbigpO3N3aXRjaCh0KXtjYXNlIkZvbnRNYXRyaXgiOmNvbnN0IGk9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmZvbnRNYXRyaXg9aTticmVhaztjYXNlIkVuY29kaW5nIjpjb25zdCBhPXRoaXMuZ2V0VG9rZW4oKTtsZXQgcjtpZigvXlxkKyQvLnRlc3QoYSkpe3I9W107Y29uc3QgZT0wfHBhcnNlSW50KGEsMTApO3RoaXMuZ2V0VG9rZW4oKTtmb3IobGV0IGk9MDtpPGU7aSsrKXt0PXRoaXMuZ2V0VG9rZW4oKTtmb3IoOyJkdXAiIT09dCYmImRlZiIhPT10Oyl7dD10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PXQpcmV0dXJufWlmKCJkZWYiPT09dClicmVhaztjb25zdCBlPXRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtjb25zdCBpPXRoaXMuZ2V0VG9rZW4oKTtyW2VdPWk7dGhpcy5nZXRUb2tlbigpfX1lbHNlIHI9Z2V0RW5jb2RpbmcoYSk7ZS5idWlsdEluRW5jb2Rpbmc9cjticmVhaztjYXNlIkZvbnRCQm94Ijpjb25zdCBzPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5hc2NlbnQ9TWF0aC5tYXgoc1szXSxzWzFdKTtlLmRlc2NlbnQ9TWF0aC5taW4oc1sxXSxzWzNdKTtlLmFzY2VudFNjYWxlZD0hMH19fX1mdW5jdGlvbiBmaW5kQmxvY2soZSx0LGkpe2NvbnN0IGE9ZS5sZW5ndGgscj10Lmxlbmd0aCxzPWEtcjtsZXQgbj1pLG89ITE7Zm9yKDtuPHM7KXtsZXQgaT0wO2Zvcig7aTxyJiZlW24raV09PT10W2ldOylpKys7aWYoaT49cil7bis9aTtmb3IoO248YSYmaXNXaGl0ZVNwYWNlKGVbbl0pOyluKys7bz0hMDticmVha31uKyt9cmV0dXJue2ZvdW5kOm8sbGVuZ3RoOm59fWNsYXNzIFR5cGUxRm9udHtjb25zdHJ1Y3RvcihlLHQsaSl7bGV0IGE9aS5sZW5ndGgxLHI9aS5sZW5ndGgyLHM9dC5wZWVrQnl0ZXMoNik7Y29uc3Qgbj0xMjg9PT1zWzBdJiYxPT09c1sxXTtpZihuKXt0LnNraXAoNik7YT1zWzVdPDwyNHxzWzRdPDwxNnxzWzNdPDw4fHNbMl19Y29uc3Qgbz1mdW5jdGlvbiBnZXRIZWFkZXJCbG9jayhlLHQpe2NvbnN0IGk9WzEwMSwxMDEsMTIwLDEwMSw5OV0sYT1lLnBvcztsZXQgcixzLG4sbzt0cnl7cj1lLmdldEJ5dGVzKHQpO3M9ci5sZW5ndGh9Y2F0Y2h7fWlmKHM9PT10KXtuPWZpbmRCbG9jayhyLGksdC0yKmkubGVuZ3RoKTtpZihuLmZvdW5kJiZuLmxlbmd0aD09PXQpcmV0dXJue3N0cmVhbTpuZXcgU3RyZWFtKHIpLGxlbmd0aDp0fX13YXJuKCdJbnZhbGlkICJMZW5ndGgxIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHRyeWluZyB0byByZWNvdmVyLicpO2UucG9zPWE7Zm9yKDs7KXtuPWZpbmRCbG9jayhlLnBlZWtCeXRlcygyMDQ4KSxpLDApO2lmKDA9PT1uLmxlbmd0aClicmVhaztlLnBvcys9bi5sZW5ndGg7aWYobi5mb3VuZCl7bz1lLnBvcy1hO2JyZWFrfX1lLnBvcz1hO2lmKG8pcmV0dXJue3N0cmVhbTpuZXcgU3RyZWFtKGUuZ2V0Qnl0ZXMobykpLGxlbmd0aDpvfTt3YXJuKCdVbmFibGUgdG8gcmVjb3ZlciAiTGVuZ3RoMSIgcHJvcGVydHkgaW4gVHlwZTEgZm9udCAtLSB1c2luZyBhcyBpcy4nKTtyZXR1cm57c3RyZWFtOm5ldyBTdHJlYW0oZS5nZXRCeXRlcyh0KSksbGVuZ3RoOnR9fSh0LGEpO25ldyBUeXBlMVBhcnNlcihvLnN0cmVhbSwhMSxPaSkuZXh0cmFjdEZvbnRIZWFkZXIoaSk7aWYobil7cz10LmdldEJ5dGVzKDYpO3I9c1s1XTw8MjR8c1s0XTw8MTZ8c1szXTw8OHxzWzJdfWNvbnN0IGc9ZnVuY3Rpb24gZ2V0RWV4ZWNCbG9jayhlLHQpe2NvbnN0IGk9ZS5nZXRCeXRlcygpO2lmKDA9PT1pLmxlbmd0aCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoImdldEVleGVjQmxvY2sgLSBubyBmb250IHByb2dyYW0gZm91bmQuIik7cmV0dXJue3N0cmVhbTpuZXcgU3RyZWFtKGkpLGxlbmd0aDppLmxlbmd0aH19KHQpLGM9bmV3IFR5cGUxUGFyc2VyKGcuc3RyZWFtLCEwLE9pKS5leHRyYWN0Rm9udFByb2dyYW0oaSk7Zm9yKGNvbnN0IGUgaW4gYy5wcm9wZXJ0aWVzKWlbZV09Yy5wcm9wZXJ0aWVzW2VdO2NvbnN0IEM9Yy5jaGFyc3RyaW5ncyxoPXRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyhDKSxsPXRoaXMuZ2V0VHlwZTJTdWJycyhjLnN1YnJzKTt0aGlzLmNoYXJzdHJpbmdzPUM7dGhpcy5kYXRhPXRoaXMud3JhcChlLGgsdGhpcy5jaGFyc3RyaW5ncyxsLGkpO3RoaXMuc2VhY3M9dGhpcy5nZXRTZWFjcyhjLmNoYXJzdHJpbmdzKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9Z2V0Q2hhcnNldCgpe2NvbnN0IGU9WyIubm90ZGVmIl07Zm9yKGNvbnN0e2dseXBoTmFtZTp0fW9mIHRoaXMuY2hhcnN0cmluZ3MpZS5wdXNoKHQpO3JldHVybiBlfWdldEdseXBoTWFwcGluZyhlKXtjb25zdCB0PXRoaXMuY2hhcnN0cmluZ3M7aWYoZS5jb21wb3NpdGUpe2NvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IGE9MCxyPXQubGVuZ3RoO2E8cjthKyspe2lbZS5jTWFwLmNoYXJDb2RlT2YoYSldPWErMX1yZXR1cm4gaX1jb25zdCBpPVsiLm5vdGRlZiJdO2xldCBhLHI7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylpLnB1c2godFtyXS5nbHlwaE5hbWUpO2NvbnN0IHM9ZS5idWlsdEluRW5jb2Rpbmc7aWYocyl7YT1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdCBlIGluIHMpe3I9aS5pbmRleE9mKHNbZV0pO3I+PTAmJihhW2VdPXIpfX1yZXR1cm4gdHlwZTFGb250R2x5cGhNYXBwaW5nKGUsYSxpKX1oYXNHbHlwaElkKGUpe2lmKGU8MHx8ZT49dGhpcy5udW1HbHlwaHMpcmV0dXJuITE7aWYoMD09PWUpcmV0dXJuITA7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3NbZS0xXS5jaGFyc3RyaW5nLmxlbmd0aD4wfWdldFNlYWNzKGUpe2NvbnN0IHQ9W107Zm9yKGxldCBpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKXtjb25zdCBhPWVbaV07YS5zZWFjJiYodFtpKzFdPWEuc2VhYyl9cmV0dXJuIHR9Z2V0VHlwZTJDaGFyc3RyaW5ncyhlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBpIG9mIGUpdC5wdXNoKGkuY2hhcnN0cmluZyk7cmV0dXJuIHR9Z2V0VHlwZTJTdWJycyhlKXtsZXQgdD0wO2NvbnN0IGk9ZS5sZW5ndGg7dD1pPDExMzM/MTA3Omk8MzM3Njk/MTEzMTozMjc2ODtjb25zdCBhPVtdO2xldCByO2ZvcihyPTA7cjx0O3IrKylhLnB1c2goWzExXSk7Zm9yKHI9MDtyPGk7cisrKWEucHVzaChlW3JdKTtyZXR1cm4gYX13cmFwKGUsdCxpLGEscil7Y29uc3Qgcz1uZXcgQ0ZGO3MuaGVhZGVyPW5ldyBDRkZIZWFkZXIoMSwwLDQsNCk7cy5uYW1lcz1bZV07Y29uc3Qgbj1uZXcgQ0ZGVG9wRGljdDtuLnNldEJ5TmFtZSgidmVyc2lvbiIsMzkxKTtuLnNldEJ5TmFtZSgiTm90aWNlIiwzOTIpO24uc2V0QnlOYW1lKCJGdWxsTmFtZSIsMzkzKTtuLnNldEJ5TmFtZSgiRmFtaWx5TmFtZSIsMzk0KTtuLnNldEJ5TmFtZSgiV2VpZ2h0IiwzOTUpO24uc2V0QnlOYW1lKCJFbmNvZGluZyIsbnVsbCk7bi5zZXRCeU5hbWUoIkZvbnRNYXRyaXgiLHIuZm9udE1hdHJpeCk7bi5zZXRCeU5hbWUoIkZvbnRCQm94IixyLmJib3gpO24uc2V0QnlOYW1lKCJjaGFyc2V0IixudWxsKTtuLnNldEJ5TmFtZSgiQ2hhclN0cmluZ3MiLG51bGwpO24uc2V0QnlOYW1lKCJQcml2YXRlIixudWxsKTtzLnRvcERpY3Q9bjtjb25zdCBvPW5ldyBDRkZTdHJpbmdzO28uYWRkKCJWZXJzaW9uIDAuMTEiKTtvLmFkZCgiU2VlIG9yaWdpbmFsIG5vdGljZSIpO28uYWRkKGUpO28uYWRkKGUpO28uYWRkKCJNZWRpdW0iKTtzLnN0cmluZ3M9bztzLmdsb2JhbFN1YnJJbmRleD1uZXcgQ0ZGSW5kZXg7Y29uc3QgZz10Lmxlbmd0aCxjPVsiLm5vdGRlZiJdO2xldCBDLGg7Zm9yKEM9MDtDPGc7QysrKXtjb25zdCBlPWlbQ10uZ2x5cGhOYW1lOy0xPT09a2kuaW5kZXhPZihlKSYmby5hZGQoZSk7Yy5wdXNoKGUpfXMuY2hhcnNldD1uZXcgQ0ZGQ2hhcnNldCghMSwwLGMpO2NvbnN0IGw9bmV3IENGRkluZGV4O2wuYWRkKFsxMzksMTRdKTtmb3IoQz0wO0M8ZztDKyspbC5hZGQodFtDXSk7cy5jaGFyU3RyaW5ncz1sO2NvbnN0IFE9bmV3IENGRlByaXZhdGVEaWN0O1Euc2V0QnlOYW1lKCJTdWJycyIsbnVsbCk7Y29uc3QgRT1bIkJsdWVWYWx1ZXMiLCJPdGhlckJsdWVzIiwiRmFtaWx5Qmx1ZXMiLCJGYW1pbHlPdGhlckJsdWVzIiwiU3RlbVNuYXBIIiwiU3RlbVNuYXBWIiwiQmx1ZVNoaWZ0IiwiQmx1ZUZ1enoiLCJCbHVlU2NhbGUiLCJMYW5ndWFnZUdyb3VwIiwiRXhwYW5zaW9uRmFjdG9yIiwiRm9yY2VCb2xkIiwiU3RkSFciLCJTdGRWVyJdO2ZvcihDPTAsaD1FLmxlbmd0aDtDPGg7QysrKXtjb25zdCBlPUVbQ107aWYoIShlIGluIHIucHJpdmF0ZURhdGEpKWNvbnRpbnVlO2NvbnN0IHQ9ci5wcml2YXRlRGF0YVtlXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+MDtlLS0pdFtlXS09dFtlLTFdO1Euc2V0QnlOYW1lKGUsdCl9cy50b3BEaWN0LnByaXZhdGVEaWN0PVE7Y29uc3QgdT1uZXcgQ0ZGSW5kZXg7Zm9yKEM9MCxoPWEubGVuZ3RoO0M8aDtDKyspdS5hZGQoYVtDXSk7US5zdWJyc0luZGV4PXU7cmV0dXJuIG5ldyBDRkZDb21waWxlcihzKS5jb21waWxlKCl9fWNvbnN0IGRhPVtbNTczNDQsNjM3NDNdLFsxMDQ4NTc2LDExMTQxMDldXSxmYT0xZTMscGE9WyJhc2NlbnQiLCJiYm94IiwiYmxhY2siLCJib2xkIiwiY2hhclByb2NPcGVyYXRvckxpc3QiLCJjb21wb3NpdGUiLCJjc3NGb250SW5mbyIsImRhdGEiLCJkZWZhdWx0Vk1ldHJpY3MiLCJkZWZhdWx0V2lkdGgiLCJkZXNjZW50IiwiZmFsbGJhY2tOYW1lIiwiZm9udE1hdHJpeCIsImlzSW52YWxpZFBERmpzRm9udCIsImlzVHlwZTNGb250IiwiaXRhbGljIiwibG9hZGVkTmFtZSIsIm1pbWV0eXBlIiwibWlzc2luZ0ZpbGUiLCJuYW1lIiwicmVtZWFzdXJlIiwic3VidHlwZSIsInN5c3RlbUZvbnRJbmZvIiwidHlwZSIsInZlcnRpY2FsIl0sbWE9WyJjTWFwIiwiZGVmYXVsdEVuY29kaW5nIiwiZGlmZmVyZW5jZXMiLCJpc01vbm9zcGFjZSIsImlzU2VyaWZGb250IiwiaXNTeW1ib2xpY0ZvbnQiLCJzZWFjTWFwIiwidG9Gb250Q2hhciIsInRvVW5pY29kZSIsInZtZXRyaWNzIiwid2lkdGhzIl07ZnVuY3Rpb24gYWRqdXN0V2lkdGhzKGUpe2lmKCFlLmZvbnRNYXRyaXgpcmV0dXJuO2lmKGUuZm9udE1hdHJpeFswXT09PXJbMF0pcmV0dXJuO2NvbnN0IHQ9LjAwMS9lLmZvbnRNYXRyaXhbMF0saT1lLndpZHRocztmb3IoY29uc3QgZSBpbiBpKWlbZV0qPXQ7ZS5kZWZhdWx0V2lkdGgqPXR9ZnVuY3Rpb24gYW1lbmRGYWxsYmFja1RvVW5pY29kZShlKXtpZighZS5mYWxsYmFja1RvVW5pY29kZSlyZXR1cm47aWYoZS50b1VuaWNvZGUgaW5zdGFuY2VvZiBJZGVudGl0eVRvVW5pY29kZU1hcClyZXR1cm47Y29uc3QgdD1bXTtmb3IoY29uc3QgaSBpbiBlLmZhbGxiYWNrVG9Vbmljb2RlKWUudG9Vbmljb2RlLmhhcyhpKXx8KHRbaV09ZS5mYWxsYmFja1RvVW5pY29kZVtpXSk7dC5sZW5ndGg+MCYmZS50b1VuaWNvZGUuYW1lbmQodCl9Y2xhc3MgZm9udHNfR2x5cGh7Y29uc3RydWN0b3IoZSx0LGksYSxyLHMsbixvLGcpe3RoaXMub3JpZ2luYWxDaGFyQ29kZT1lO3RoaXMuZm9udENoYXI9dDt0aGlzLnVuaWNvZGU9aTt0aGlzLmFjY2VudD1hO3RoaXMud2lkdGg9cjt0aGlzLnZtZXRyaWM9czt0aGlzLm9wZXJhdG9yTGlzdElkPW47dGhpcy5pc1NwYWNlPW87dGhpcy5pc0luRm9udD1nfWdldCBjYXRlZ29yeSgpe3JldHVybiBzaGFkb3codGhpcywiY2F0ZWdvcnkiLGZ1bmN0aW9uIGdldENoYXJVbmljb2RlQ2F0ZWdvcnkoZSl7Y29uc3QgdD1xaS5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBpPWUubWF0Y2goS2kpLGE9e2lzV2hpdGVzcGFjZTohIWk/LlsxXSxpc1plcm9XaWR0aERpYWNyaXRpYzohIWk/LlsyXSxpc0ludmlzaWJsZUZvcm1hdE1hcms6ISFpPy5bM119O3FpLnNldChlLGEpO3JldHVybiBhfSh0aGlzLnVuaWNvZGUpLCEwKX19ZnVuY3Rpb24gaW50MTYoZSx0KXtyZXR1cm4oZTw8OCkrdH1mdW5jdGlvbiB3cml0ZVNpZ25lZEludDE2KGUsdCxpKXtlW3QrMV09aTtlW3RdPWk+Pj44fWZ1bmN0aW9uIHNpZ25lZEludDE2KGUsdCl7Y29uc3QgaT0oZTw8OCkrdDtyZXR1cm4gMzI3NjgmaT9pLTY1NTM2Oml9ZnVuY3Rpb24gc3RyaW5nMTYoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUsMjU1JmUpfWZ1bmN0aW9uIHNhZmVTdHJpbmcxNihlKXtlPjMyNzY3P2U9MzI3Njc6ZTwtMzI3NjgmJihlPS0zMjc2OCk7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUsMjU1JmUpfWZ1bmN0aW9uIGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZShlKXtyZXR1cm4idHRjZiI9PT1ieXRlc1RvU3RyaW5nKGUucGVla0J5dGVzKDQpKX1mdW5jdGlvbiBnZXRGb250RmlsZVR5cGUoZSx7dHlwZTp0LHN1YnR5cGU6aSxjb21wb3NpdGU6YX0pe2xldCByLHM7aWYoZnVuY3Rpb24gaXNUcnVlVHlwZUZpbGUoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcyg0KTtyZXR1cm4gNjU1MzY9PT1yZWFkVWludDMyKHQsMCl8fCJ0cnVlIj09PWJ5dGVzVG9TdHJpbmcodCl9KGUpfHxpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUoZSkpcj1hPyJDSURGb250VHlwZTIiOiJUcnVlVHlwZSI7ZWxzZSBpZihmdW5jdGlvbiBpc09wZW5UeXBlRmlsZShlKXtyZXR1cm4iT1RUTyI9PT1ieXRlc1RvU3RyaW5nKGUucGVla0J5dGVzKDQpKX0oZSkpcj1hPyJDSURGb250VHlwZTIiOiJPcGVuVHlwZSI7ZWxzZSBpZihmdW5jdGlvbiBpc1R5cGUxRmlsZShlKXtjb25zdCB0PWUucGVla0J5dGVzKDIpO3JldHVybiAzNz09PXRbMF0mJjMzPT09dFsxXXx8MTI4PT09dFswXSYmMT09PXRbMV19KGUpKXI9YT8iQ0lERm9udFR5cGUwIjoiTU1UeXBlMSI9PT10PyJNTVR5cGUxIjoiVHlwZTEiO2Vsc2UgaWYoZnVuY3Rpb24gaXNDRkZGaWxlKGUpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIHRbMF0+PTEmJnRbM10+PTEmJnRbM108PTR9KGUpKWlmKGEpe3I9IkNJREZvbnRUeXBlMCI7cz0iQ0lERm9udFR5cGUwQyJ9ZWxzZXtyPSJNTVR5cGUxIj09PXQ/Ik1NVHlwZTEiOiJUeXBlMSI7cz0iVHlwZTFDIn1lbHNle3dhcm4oImdldEZvbnRGaWxlVHlwZTogVW5hYmxlIHRvIGRldGVjdCBjb3JyZWN0IGZvbnQgZmlsZSBUeXBlL1N1YnR5cGUuIik7cj10O3M9aX1yZXR1cm5bcixzXX1mdW5jdGlvbiBhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKGUsdCl7Zm9yKGNvbnN0IGkgaW4gdCllWytpXT10W2ldfWZ1bmN0aW9uIGJ1aWxkVG9Gb250Q2hhcihlLHQsaSl7Y29uc3QgYT1bXTtsZXQgcjtmb3IobGV0IGk9MCxzPWUubGVuZ3RoO2k8cztpKyspe3I9Z2V0VW5pY29kZUZvckdseXBoKGVbaV0sdCk7LTEhPT1yJiYoYVtpXT1yKX1mb3IoY29uc3QgZSBpbiBpKXtyPWdldFVuaWNvZGVGb3JHbHlwaChpW2VdLHQpOy0xIT09ciYmKGFbK2VdPXIpfXJldHVybiBhfWZ1bmN0aW9uIGlzTWFjTmFtZVJlY29yZChlKXtyZXR1cm4gMT09PWUucGxhdGZvcm0mJjA9PT1lLmVuY29kaW5nJiYwPT09ZS5sYW5ndWFnZX1mdW5jdGlvbiBpc1dpbk5hbWVSZWNvcmQoZSl7cmV0dXJuIDM9PT1lLnBsYXRmb3JtJiYxPT09ZS5lbmNvZGluZyYmMTAzMz09PWUubGFuZ3VhZ2V9ZnVuY3Rpb24gY29udmVydENpZFN0cmluZyhlLHQsaT0hMSl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIHQuY2hhckNvZGVBdCgwKTtjYXNlIDI6cmV0dXJuIHQuY2hhckNvZGVBdCgwKTw8OHx0LmNoYXJDb2RlQXQoMSl9Y29uc3QgYT1gVW5zdXBwb3J0ZWQgQ0lEIHN0cmluZyAoY2hhckNvZGUgJHtlfSk6ICIke3R9Ii5gO2lmKGkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGEpO3dhcm4oYSk7cmV0dXJuIHR9ZnVuY3Rpb24gYWRqdXN0TWFwcGluZyhlLHQsaSxhKXtjb25zdCByPU9iamVjdC5jcmVhdGUobnVsbCkscz1uZXcgTWFwLG49W10sbz1uZXcgU2V0O2xldCBnPTA7bGV0IGM9ZGFbZ11bMF0sQz1kYVtnXVsxXTtmb3IoY29uc3QgbCBpbiBlKXtsZXQgUT1lW2xdO2lmKCF0KFEpKWNvbnRpbnVlO2lmKGM+Qyl7ZysrO2lmKGc+PWRhLmxlbmd0aCl7d2FybigiUmFuIG91dCBvZiBzcGFjZSBpbiBmb250IHByaXZhdGUgdXNlIGFyZWEuIik7YnJlYWt9Yz1kYVtnXVswXTtDPWRhW2ddWzFdfWNvbnN0IEU9YysrOzA9PT1RJiYoUT1pKTtsZXQgdT1hLmdldChsKTsic3RyaW5nIj09dHlwZW9mIHUmJih1PXUuY29kZVBvaW50QXQoMCkpO2lmKHUmJiEoaD11LGRhWzBdWzBdPD1oJiZoPD1kYVswXVsxXXx8ZGFbMV1bMF08PWgmJmg8PWRhWzFdWzFdKSYmIW8uaGFzKFEpKXtzLnNldCh1LFEpO28uYWRkKFEpfXJbRV09UTtuW2xdPUV9dmFyIGg7cmV0dXJue3RvRm9udENoYXI6bixjaGFyQ29kZVRvR2x5cGhJZDpyLHRvVW5pY29kZUV4dHJhTWFwOnMsbmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZTpjfX1mdW5jdGlvbiBjcmVhdGVDbWFwVGFibGUoZSx0LGkpe2NvbnN0IGE9ZnVuY3Rpb24gZ2V0UmFuZ2VzKGUsdCxpKXtjb25zdCBhPVtdO2Zvcihjb25zdCB0IGluIGUpZVt0XT49aXx8YS5wdXNoKHtmb250Q2hhckNvZGU6MHx0LGdseXBoSWQ6ZVt0XX0pO2lmKHQpZm9yKGNvbnN0W2Uscl1vZiB0KXI+PWl8fGEucHVzaCh7Zm9udENoYXJDb2RlOmUsZ2x5cGhJZDpyfSk7MD09PWEubGVuZ3RoJiZhLnB1c2goe2ZvbnRDaGFyQ29kZTowLGdseXBoSWQ6MH0pO2Euc29ydCgoZnVuY3Rpb24gZm9udEdldFJhbmdlc1NvcnQoZSx0KXtyZXR1cm4gZS5mb250Q2hhckNvZGUtdC5mb250Q2hhckNvZGV9KSk7Y29uc3Qgcj1bXSxzPWEubGVuZ3RoO2ZvcihsZXQgZT0wO2U8czspe2NvbnN0IHQ9YVtlXS5mb250Q2hhckNvZGUsaT1bYVtlXS5nbHlwaElkXTsrK2U7bGV0IG49dDtmb3IoO2U8cyYmbisxPT09YVtlXS5mb250Q2hhckNvZGU7KXtpLnB1c2goYVtlXS5nbHlwaElkKTsrK247KytlO2lmKDY1NTM1PT09bilicmVha31yLnB1c2goW3QsbixpXSl9cmV0dXJuIHJ9KGUsdCxpKSxyPWEuYXQoLTEpWzFdPjY1NTM1PzI6MTtsZXQgcyxuLG8sZyxjPSJcMFwwIitzdHJpbmcxNihyKSsiXDADXDABIitzdHJpbmczMig0Kzgqcik7Zm9yKHM9YS5sZW5ndGgtMTtzPj0wJiYhKGFbc11bMF08PTY1NTM1KTstLXMpO2NvbnN0IEM9cysxO2Fbc11bMF08NjU1MzUmJjY1NTM1PT09YVtzXVsxXSYmKGFbc11bMV09NjU1MzQpO2NvbnN0IGg9YVtzXVsxXTw2NTUzNT8xOjAsbD1DK2gsUT1PcGVuVHlwZUZpbGVCdWlsZGVyLmdldFNlYXJjaFBhcmFtcyhsLDIpO2xldCBFLHUsZCxmLHA9IiIsbT0iIix5PSIiLHc9IiIsYj0iIixEPTA7Zm9yKHM9MCxuPUM7czxuO3MrKyl7RT1hW3NdO3U9RVswXTtkPUVbMV07cCs9c3RyaW5nMTYodSk7bSs9c3RyaW5nMTYoZCk7Zj1FWzJdO2xldCBlPSEwO2ZvcihvPTEsZz1mLmxlbmd0aDtvPGc7KytvKWlmKGZbb10hPT1mW28tMV0rMSl7ZT0hMTticmVha31pZihlKXt5Kz1zdHJpbmcxNihmWzBdLXUmNjU1MzUpO3crPXN0cmluZzE2KDApfWVsc2V7Y29uc3QgZT0yKihsLXMpKzIqRDtEKz1kLXUrMTt5Kz1zdHJpbmcxNigwKTt3Kz1zdHJpbmcxNihlKTtmb3Iobz0wLGc9Zi5sZW5ndGg7bzxnOysrbyliKz1zdHJpbmcxNihmW29dKX19aWYoaD4wKXttKz0iw7/DvyI7cCs9IsO/w78iO3krPSJcMAEiO3crPSJcMFwwIn1jb25zdCBTPSJcMFwwIitzdHJpbmcxNigyKmwpK3N0cmluZzE2KFEucmFuZ2UpK3N0cmluZzE2KFEuZW50cnkpK3N0cmluZzE2KFEucmFuZ2VTaGlmdCkrbSsiXDBcMCIrcCt5K3crYjtsZXQgaz0iIixSPSIiO2lmKHI+MSl7Yys9IlwwA1wwXG4iK3N0cmluZzMyKDQrOCpyKzQrUy5sZW5ndGgpO2s9IiI7Zm9yKHM9MCxuPWEubGVuZ3RoO3M8bjtzKyspe0U9YVtzXTt1PUVbMF07Zj1FWzJdO2xldCBlPWZbMF07Zm9yKG89MSxnPWYubGVuZ3RoO288ZzsrK28paWYoZltvXSE9PWZbby0xXSsxKXtkPUVbMF0rby0xO2srPXN0cmluZzMyKHUpK3N0cmluZzMyKGQpK3N0cmluZzMyKGUpO3U9ZCsxO2U9ZltvXX1rKz1zdHJpbmczMih1KStzdHJpbmczMihFWzFdKStzdHJpbmczMihlKX1SPSJcMFxmXDBcMCIrc3RyaW5nMzIoay5sZW5ndGgrMTYpKyJcMFwwXDBcMCIrc3RyaW5nMzIoay5sZW5ndGgvMTIpfXJldHVybiBjKyJcMAQiK3N0cmluZzE2KFMubGVuZ3RoKzQpK1MrUitrfWZ1bmN0aW9uIGNyZWF0ZU9TMlRhYmxlKGUsdCxpKXtpfHw9e3VuaXRzUGVyRW06MCx5TWF4OjAseU1pbjowLGFzY2VudDowLGRlc2NlbnQ6MH07bGV0IGE9MCxyPTAscz0wLG49MCxvPW51bGwsZz0wLGM9LTE7aWYodCl7Zm9yKGxldCBlIGluIHQpe2V8PTA7KG8+ZXx8IW8pJiYobz1lKTtnPGUmJihnPWUpO2M9Z2V0VW5pY29kZVJhbmdlRm9yKGUsYyk7aWYoYzwzMilhfD0xPDxjO2Vsc2UgaWYoYzw2NClyfD0xPDxjLTMyO2Vsc2UgaWYoYzw5NilzfD0xPDxjLTY0O2Vsc2V7aWYoIShjPDEyMykpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmljb2RlIHJhbmdlcyBCaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2UiKTtufD0xPDxjLTk2fX1nPjY1NTM1JiYoZz02NTUzNSl9ZWxzZXtvPTA7Zz0yNTV9Y29uc3QgQz1lLmJib3h8fFswLDAsMCwwXSxoPWkudW5pdHNQZXJFbXx8KGUuZm9udE1hdHJpeD8xL01hdGgubWF4KC4uLmUuZm9udE1hdHJpeC5zbGljZSgwLDQpLm1hcChNYXRoLmFicykpOjFlMyksbD1lLmFzY2VudFNjYWxlZD8xOmgvZmEsUT1pLmFzY2VudHx8TWF0aC5yb3VuZChsKihlLmFzY2VudHx8Q1szXSkpO2xldCBFPWkuZGVzY2VudHx8TWF0aC5yb3VuZChsKihlLmRlc2NlbnR8fENbMV0pKTtFPjAmJmUuZGVzY2VudD4wJiZDWzFdPDAmJihFPS1FKTtjb25zdCB1PWkueU1heHx8USxkPS1pLnlNaW58fC1FO3JldHVybiJcMAMCJAHDtFwwBVwwXDACwooCwrtcMFwwXDDCjALCigLCu1wwXDABw59ceDAwMQECXDBcMFwwXDAGIitTdHJpbmcuZnJvbUNoYXJDb2RlKGUuZml4ZWRQaXRjaD85OjApKyJcMFwwXDBcMFwwXDAiK3N0cmluZzMyKGEpK3N0cmluZzMyKHIpK3N0cmluZzMyKHMpK3N0cmluZzMyKG4pKyIqMjEqIitzdHJpbmcxNihlLml0YWxpY0FuZ2xlPzE6MCkrc3RyaW5nMTYob3x8ZS5maXJzdENoYXIpK3N0cmluZzE2KGd8fGUubGFzdENoYXIpK3N0cmluZzE2KFEpK3N0cmluZzE2KEUpKyJcMGQiK3N0cmluZzE2KHUpK3N0cmluZzE2KGQpKyJcMFwwXDBcMFwwXDBcMFwwIitzdHJpbmcxNihlLnhIZWlnaHQpK3N0cmluZzE2KGUuY2FwSGVpZ2h0KStzdHJpbmcxNigwKStzdHJpbmcxNihvfHxlLmZpcnN0Q2hhcikrIlwwAyJ9ZnVuY3Rpb24gY3JlYXRlUG9zdFRhYmxlKGUpe3JldHVybiJcMANcMFwwIitzdHJpbmczMihNYXRoLmZsb29yKDY1NTM2KmUuaXRhbGljQW5nbGUpKSsiXDBcMFwwXDAiK3N0cmluZzMyKGUuZml4ZWRQaXRjaD8xOjApKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCJ9ZnVuY3Rpb24gY3JlYXRlUG9zdHNjcmlwdE5hbWUoZSl7cmV0dXJuIGUucmVwbGFjZUFsbCgvW15ceDIxLVx4N0VdfFtbXF0oKXt9PD4vJV0vZywiIikuc2xpY2UoMCw2Myl9ZnVuY3Rpb24gY3JlYXRlTmFtZVRhYmxlKGUsdCl7dHx8KHQ9W1tdLFtdXSk7Y29uc3QgaT1bdFswXVswXXx8Ik9yaWdpbmFsIGxpY2VuY2UiLHRbMF1bMV18fGUsdFswXVsyXXx8IlVua25vd24iLHRbMF1bM118fCJ1bmlxdWVJRCIsdFswXVs0XXx8ZSx0WzBdWzVdfHwiVmVyc2lvbiAwLjExIix0WzBdWzZdfHxjcmVhdGVQb3N0c2NyaXB0TmFtZShlKSx0WzBdWzddfHwiVW5rbm93biIsdFswXVs4XXx8IlVua25vd24iLHRbMF1bOV18fCJVbmtub3duIl0sYT1bXTtsZXQgcixzLG4sbyxnO2ZvcihyPTAscz1pLmxlbmd0aDtyPHM7cisrKXtnPXRbMV1bcl18fGlbcl07Y29uc3QgZT1bXTtmb3Iobj0wLG89Zy5sZW5ndGg7bjxvO24rKyllLnB1c2goc3RyaW5nMTYoZy5jaGFyQ29kZUF0KG4pKSk7YS5wdXNoKGUuam9pbigiIikpfWNvbnN0IGM9W2ksYV0sQz1bIlwwASIsIlwwAyJdLGg9WyJcMFwwIiwiXDABIl0sbD1bIlwwXDAiLCIEXHQiXSxRPWkubGVuZ3RoKkMubGVuZ3RoO2xldCBFPSJcMFwwIitzdHJpbmcxNihRKStzdHJpbmcxNigxMipRKzYpLHU9MDtmb3Iocj0wLHM9Qy5sZW5ndGg7cjxzO3IrKyl7Y29uc3QgZT1jW3JdO2ZvcihuPTAsbz1lLmxlbmd0aDtuPG87bisrKXtnPWVbbl07RSs9Q1tyXStoW3JdK2xbcl0rc3RyaW5nMTYobikrc3RyaW5nMTYoZy5sZW5ndGgpK3N0cmluZzE2KHUpO3UrPWcubGVuZ3RofX1FKz1pLmpvaW4oIiIpK2Euam9pbigiIik7cmV0dXJuIEV9Y2xhc3MgRm9udHtjb25zdHJ1Y3RvcihlLHQsaSl7dGhpcy5uYW1lPWU7dGhpcy5wc05hbWU9bnVsbDt0aGlzLm1pbWV0eXBlPW51bGw7dGhpcy5kaXNhYmxlRm9udEZhY2U9ITE7dGhpcy5sb2FkZWROYW1lPWkubG9hZGVkTmFtZTt0aGlzLmlzVHlwZTNGb250PWkuaXNUeXBlM0ZvbnQ7dGhpcy5taXNzaW5nRmlsZT0hMTt0aGlzLmNzc0ZvbnRJbmZvPWkuY3NzRm9udEluZm87dGhpcy5fY2hhcnNDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuX2dseXBoQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgYT0hIShpLmZsYWdzJldpKTtpZighYSYmIWkuaXNTaW11bGF0ZWRGbGFncyl7Y29uc3QgdD1lLnJlcGxhY2VBbGwoL1ssX10vZywiLSIpLnNwbGl0KCItIiwxKVswXSxpPUFhKCk7Zm9yKGNvbnN0IGUgb2YgdC5zcGxpdCgiKyIpKWlmKGlbZV0pe2E9ITA7YnJlYWt9fXRoaXMuaXNTZXJpZkZvbnQ9YTt0aGlzLmlzU3ltYm9saWNGb250PSEhKGkuZmxhZ3MmamkpO3RoaXMuaXNNb25vc3BhY2U9ISEoaS5mbGFncyZQaSk7bGV0e3R5cGU6cixzdWJ0eXBlOnN9PWk7dGhpcy50eXBlPXI7dGhpcy5zdWJ0eXBlPXM7dGhpcy5zeXN0ZW1Gb250SW5mbz1pLnN5c3RlbUZvbnRJbmZvO2NvbnN0IG49ZS5tYXRjaCgvXkludmFsaWRQREZqc0ZvbnRfKC4qKV9cZCskLyk7dGhpcy5pc0ludmFsaWRQREZqc0ZvbnQ9ISFuO3RoaXMuaXNJbnZhbGlkUERGanNGb250P3RoaXMuZmFsbGJhY2tOYW1lPW5bMV06dGhpcy5pc01vbm9zcGFjZT90aGlzLmZhbGxiYWNrTmFtZT0ibW9ub3NwYWNlIjp0aGlzLmlzU2VyaWZGb250P3RoaXMuZmFsbGJhY2tOYW1lPSJzZXJpZiI6dGhpcy5mYWxsYmFja05hbWU9InNhbnMtc2VyaWYiO2lmKHRoaXMuc3lzdGVtRm9udEluZm8/Lmd1ZXNzRmFsbGJhY2spe3RoaXMuc3lzdGVtRm9udEluZm8uZ3Vlc3NGYWxsYmFjaz0hMTt0aGlzLnN5c3RlbUZvbnRJbmZvLmNzcys9YCwke3RoaXMuZmFsbGJhY2tOYW1lfWB9dGhpcy5kaWZmZXJlbmNlcz1pLmRpZmZlcmVuY2VzO3RoaXMud2lkdGhzPWkud2lkdGhzO3RoaXMuZGVmYXVsdFdpZHRoPWkuZGVmYXVsdFdpZHRoO3RoaXMuY29tcG9zaXRlPWkuY29tcG9zaXRlO3RoaXMuY01hcD1pLmNNYXA7dGhpcy5jYXBIZWlnaHQ9aS5jYXBIZWlnaHQvZmE7dGhpcy5hc2NlbnQ9aS5hc2NlbnQvZmE7dGhpcy5kZXNjZW50PWkuZGVzY2VudC9mYTt0aGlzLmxpbmVIZWlnaHQ9dGhpcy5hc2NlbnQtdGhpcy5kZXNjZW50O3RoaXMuZm9udE1hdHJpeD1pLmZvbnRNYXRyaXg7dGhpcy5iYm94PWkuYmJveDt0aGlzLmRlZmF1bHRFbmNvZGluZz1pLmRlZmF1bHRFbmNvZGluZzt0aGlzLnRvVW5pY29kZT1pLnRvVW5pY29kZTt0aGlzLnRvRm9udENoYXI9W107aWYoIlR5cGUzIj09PWkudHlwZSl7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKXRoaXMudG9Gb250Q2hhcltlXT10aGlzLmRpZmZlcmVuY2VzW2VdfHxpLmRlZmF1bHRFbmNvZGluZ1tlXTtyZXR1cm59dGhpcy5jaWRFbmNvZGluZz1pLmNpZEVuY29kaW5nfHwiIjt0aGlzLnZlcnRpY2FsPSEhaS52ZXJ0aWNhbDtpZih0aGlzLnZlcnRpY2FsKXt0aGlzLnZtZXRyaWNzPWkudm1ldHJpY3M7dGhpcy5kZWZhdWx0Vk1ldHJpY3M9aS5kZWZhdWx0Vk1ldHJpY3N9aWYoIXR8fHQuaXNFbXB0eSl7dCYmd2FybignRm9udCBmaWxlIGlzIGVtcHR5IGluICInK2UrJyIgKCcrdGhpcy5sb2FkZWROYW1lKyIpIik7dGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udChpKTtyZXR1cm59W3Isc109Z2V0Rm9udEZpbGVUeXBlKHQsaSk7cj09PXRoaXMudHlwZSYmcz09PXRoaXMuc3VidHlwZXx8aW5mbyhgSW5jb25zaXN0ZW50IGZvbnQgZmlsZSBUeXBlL1N1YlR5cGUsIGV4cGVjdGVkOiAke3RoaXMudHlwZX0vJHt0aGlzLnN1YnR5cGV9IGJ1dCBmb3VuZDogJHtyfS8ke3N9LmApO2xldCBvO3RyeXtzd2l0Y2gocil7Y2FzZSJNTVR5cGUxIjppbmZvKCJNTVR5cGUxIGZvbnQgKCIrZSsiKSwgZmFsbGluZyBiYWNrIHRvIFR5cGUxLiIpO2Nhc2UiVHlwZTEiOmNhc2UiQ0lERm9udFR5cGUwIjp0aGlzLm1pbWV0eXBlPSJmb250L29wZW50eXBlIjtjb25zdCBhPSJUeXBlMUMiPT09c3x8IkNJREZvbnRUeXBlMEMiPT09cz9uZXcgQ0ZGRm9udCh0LGkpOm5ldyBUeXBlMUZvbnQoZSx0LGkpO2FkanVzdFdpZHRocyhpKTtvPXRoaXMuY29udmVydChlLGEsaSk7YnJlYWs7Y2FzZSJPcGVuVHlwZSI6Y2FzZSJUcnVlVHlwZSI6Y2FzZSJDSURGb250VHlwZTIiOnRoaXMubWltZXR5cGU9ImZvbnQvb3BlbnR5cGUiO289dGhpcy5jaGVja0FuZFJlcGFpcihlLHQsaSk7aWYodGhpcy5pc09wZW5UeXBlKXthZGp1c3RXaWR0aHMoaSk7cj0iT3BlblR5cGUifWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBGb250ICR7cn0gaXMgbm90IHN1cHBvcnRlZGApfX1jYXRjaChlKXt3YXJuKGUpO3RoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoaSk7cmV0dXJufWFtZW5kRmFsbGJhY2tUb1VuaWNvZGUoaSk7dGhpcy5kYXRhPW87dGhpcy50eXBlPXI7dGhpcy5zdWJ0eXBlPXM7dGhpcy5mb250TWF0cml4PWkuZm9udE1hdHJpeDt0aGlzLndpZHRocz1pLndpZHRoczt0aGlzLmRlZmF1bHRXaWR0aD1pLmRlZmF1bHRXaWR0aDt0aGlzLnRvVW5pY29kZT1pLnRvVW5pY29kZTt0aGlzLnNlYWNNYXA9aS5zZWFjTWFwfWdldCByZW5kZXJlcigpe3JldHVybiBzaGFkb3codGhpcywicmVuZGVyZXIiLEZvbnRSZW5kZXJlckZhY3RvcnkuY3JlYXRlKHRoaXMsT2kpKX1leHBvcnREYXRhKGU9ITEpe2NvbnN0IHQ9ZT9bLi4ucGEsLi4ubWFdOnBhLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgYSxyO2ZvcihhIG9mIHQpe3I9dGhpc1thXTt2b2lkIDAhPT1yJiYoaVthXT1yKX1yZXR1cm4gaX1mYWxsYmFja1RvU3lzdGVtRm9udChlKXt0aGlzLm1pc3NpbmdGaWxlPSEwO2NvbnN0e25hbWU6dCx0eXBlOml9PXRoaXM7bGV0IGE9bm9ybWFsaXplRm9udE5hbWUodCk7Y29uc3Qgcj1faSgpLHM9JGkoKSxuPSEhclthXSxvPSEoIXNbYV18fCFyW3NbYV1dKTthPXJbYV18fHNbYV18fGE7Y29uc3QgZz1uYSgpW2FdO2lmKGcpe2lzTmFOKHRoaXMuYXNjZW50KSYmKHRoaXMuYXNjZW50PWcuYXNjZW50L2ZhKTtpc05hTih0aGlzLmRlc2NlbnQpJiYodGhpcy5kZXNjZW50PWcuZGVzY2VudC9mYSk7aXNOYU4odGhpcy5jYXBIZWlnaHQpJiYodGhpcy5jYXBIZWlnaHQ9Zy5jYXBIZWlnaHQvZmEpfXRoaXMuYm9sZD0vYm9sZC9naS50ZXN0KGEpO3RoaXMuaXRhbGljPS9vYmxpcXVlfGl0YWxpYy9naS50ZXN0KGEpO3RoaXMuYmxhY2s9L0JsYWNrL2cudGVzdCh0KTtjb25zdCBjPS9OYXJyb3cvZy50ZXN0KHQpO3RoaXMucmVtZWFzdXJlPSghbnx8YykmJk9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGg+MDtpZigobnx8bykmJiJDSURGb250VHlwZTIiPT09aSYmdGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKSl7Y29uc3QgaT1lLmNpZFRvR2lkTWFwLGE9W107YXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChhLHRhKCkpOy9BcmlhbC0/QmxhY2svaS50ZXN0KHQpP2FwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAoYSxpYSgpKTovQ2FsaWJyaS9pLnRlc3QodCkmJmFwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAoYSxhYSgpKTtpZihpKXtmb3IoY29uc3QgZSBpbiBhKXtjb25zdCB0PWFbZV07dm9pZCAwIT09aVt0XSYmKGFbK2VdPWlbdF0pfWkubGVuZ3RoIT09dGhpcy50b1VuaWNvZGUubGVuZ3RoJiZlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiZ0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwJiZ0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2NvbnN0IHI9YVtlXTt2b2lkIDA9PT1pW3JdJiYoYVsrZV09dCl9KSl9dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBJZGVudGl0eVRvVW5pY29kZU1hcHx8dGhpcy50b1VuaWNvZGUuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXthWytlXT10fSkpO3RoaXMudG9Gb250Q2hhcj1hO3RoaXMudG9Vbmljb2RlPW5ldyBUb1VuaWNvZGVNYXAoYSl9ZWxzZSBpZigvU3ltYm9sL2kudGVzdChhKSl0aGlzLnRvRm9udENoYXI9YnVpbGRUb0ZvbnRDaGFyKEZpLEppKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZSBpZigvRGluZ2JhdHMvaS50ZXN0KGEpKXRoaXMudG9Gb250Q2hhcj1idWlsZFRvRm9udENoYXIoU2ksdmkoKSx0aGlzLmRpZmZlcmVuY2VzKTtlbHNlIGlmKG58fG8pe2NvbnN0IGU9YnVpbGRUb0ZvbnRDaGFyKHRoaXMuZGVmYXVsdEVuY29kaW5nLEppKCksdGhpcy5kaWZmZXJlbmNlcyk7IkNJREZvbnRUeXBlMiIhPT1pfHx0aGlzLmNpZEVuY29kaW5nLnN0YXJ0c1dpdGgoIklkZW50aXR5LSIpfHx0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbih0LGkpe2VbK3RdPWl9KSk7dGhpcy50b0ZvbnRDaGFyPWV9ZWxzZXtjb25zdCBlPUppKCksaT1bXTt0aGlzLnRvVW5pY29kZS5mb3JFYWNoKCgodCxhKT0+e2lmKCF0aGlzLmNvbXBvc2l0ZSl7Y29uc3QgaT1nZXRVbmljb2RlRm9yR2x5cGgodGhpcy5kaWZmZXJlbmNlc1t0XXx8dGhpcy5kZWZhdWx0RW5jb2RpbmdbdF0sZSk7LTEhPT1pJiYoYT1pKX1pWyt0XT1hfSkpO3RoaXMuY29tcG9zaXRlJiZ0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwJiYvVGFob21hfFZlcmRhbmEvaS50ZXN0KHQpJiZhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKGksdGEoKSk7dGhpcy50b0ZvbnRDaGFyPWl9YW1lbmRGYWxsYmFja1RvVW5pY29kZShlKTt0aGlzLmxvYWRlZE5hbWU9YS5zcGxpdCgiLSIsMSlbMF19Y2hlY2tBbmRSZXBhaXIoZSx0LGkpe2NvbnN0IGE9WyJPUy8yIiwiY21hcCIsImhlYWQiLCJoaGVhIiwiaG10eCIsIm1heHAiLCJuYW1lIiwicG9zdCIsImxvY2EiLCJnbHlmIiwiZnBnbSIsInByZXAiLCJjdnQgIiwiQ0ZGICJdO2Z1bmN0aW9uIHJlYWRUYWJsZXMoZSx0KXtjb25zdCBpPU9iamVjdC5jcmVhdGUobnVsbCk7aVsiT1MvMiJdPW51bGw7aS5jbWFwPW51bGw7aS5oZWFkPW51bGw7aS5oaGVhPW51bGw7aS5obXR4PW51bGw7aS5tYXhwPW51bGw7aS5uYW1lPW51bGw7aS5wb3N0PW51bGw7Zm9yKGxldCByPTA7cjx0O3IrKyl7Y29uc3QgdD1yZWFkVGFibGVFbnRyeShlKTthLmluY2x1ZGVzKHQudGFnKSYmKDAhPT10Lmxlbmd0aCYmKGlbdC50YWddPXQpKX1yZXR1cm4gaX1mdW5jdGlvbiByZWFkVGFibGVFbnRyeShlKXtjb25zdCB0PWUuZ2V0U3RyaW5nKDQpLGk9ZS5nZXRJbnQzMigpPj4+MCxhPWUuZ2V0SW50MzIoKT4+PjAscj1lLmdldEludDMyKCk+Pj4wLHM9ZS5wb3M7ZS5wb3M9ZS5zdGFydHx8MDtlLnNraXAoYSk7Y29uc3Qgbj1lLmdldEJ5dGVzKHIpO2UucG9zPXM7aWYoImhlYWQiPT09dCl7bls4XT1uWzldPW5bMTBdPW5bMTFdPTA7blsxN118PTMyfXJldHVybnt0YWc6dCxjaGVja3N1bTppLGxlbmd0aDpyLG9mZnNldDphLGRhdGE6bn19ZnVuY3Rpb24gcmVhZE9wZW5UeXBlSGVhZGVyKGUpe3JldHVybnt2ZXJzaW9uOmUuZ2V0U3RyaW5nKDQpLG51bVRhYmxlczplLmdldFVpbnQxNigpLHNlYXJjaFJhbmdlOmUuZ2V0VWludDE2KCksZW50cnlTZWxlY3RvcjplLmdldFVpbnQxNigpLHJhbmdlU2hpZnQ6ZS5nZXRVaW50MTYoKX19ZnVuY3Rpb24gc2FuaXRpemVHbHlwaChlLHQsaSxhLHIscyl7Y29uc3Qgbj17bGVuZ3RoOjAsc2l6ZU9mSW5zdHJ1Y3Rpb25zOjB9O2lmKHQ8MHx8dD49ZS5sZW5ndGh8fGk+ZS5sZW5ndGh8fGktdDw9MTIpcmV0dXJuIG47Y29uc3Qgbz1lLnN1YmFycmF5KHQsaSksZz1zaWduZWRJbnQxNihvWzJdLG9bM10pLGM9c2lnbmVkSW50MTYob1s0XSxvWzVdKSxDPXNpZ25lZEludDE2KG9bNl0sb1s3XSksaD1zaWduZWRJbnQxNihvWzhdLG9bOV0pO2lmKGc+Qyl7d3JpdGVTaWduZWRJbnQxNihvLDIsQyk7d3JpdGVTaWduZWRJbnQxNihvLDYsZyl9aWYoYz5oKXt3cml0ZVNpZ25lZEludDE2KG8sNCxoKTt3cml0ZVNpZ25lZEludDE2KG8sOCxjKX1jb25zdCBsPXNpZ25lZEludDE2KG9bMF0sb1sxXSk7aWYobDwwKXtpZihsPC0xKXJldHVybiBuO2Euc2V0KG8scik7bi5sZW5ndGg9by5sZW5ndGg7cmV0dXJuIG59bGV0IFEsRT0xMCx1PTA7Zm9yKFE9MDtRPGw7USsrKXt1PShvW0VdPDw4fG9bRSsxXSkrMTtFKz0yfWNvbnN0IGQ9RSxmPW9bRV08PDh8b1tFKzFdO24uc2l6ZU9mSW5zdHJ1Y3Rpb25zPWY7RSs9MitmO2NvbnN0IHA9RTtsZXQgbT0wO2ZvcihRPTA7UTx1O1ErKyl7Y29uc3QgZT1vW0UrK107MTkyJmUmJihvW0UtMV09NjMmZSk7bGV0IHQ9MjsyJmU/dD0xOjE2JmUmJih0PTApO2xldCBpPTI7NCZlP2k9MTozMiZlJiYoaT0wKTtjb25zdCBhPXQraTttKz1hO2lmKDgmZSl7Y29uc3QgZT1vW0UrK107MD09PWUmJihvW0UtMV1ePTgpO1ErPWU7bSs9ZSphfX1pZigwPT09bSlyZXR1cm4gbjtsZXQgeT1FK207aWYoeT5vLmxlbmd0aClyZXR1cm4gbjtpZighcyYmZj4wKXthLnNldChvLnN1YmFycmF5KDAsZCkscik7YS5zZXQoWzAsMF0scitkKTthLnNldChvLnN1YmFycmF5KHAseSkscitkKzIpO3ktPWY7by5sZW5ndGgteT4zJiYoeT15KzMmLTQpO24ubGVuZ3RoPXk7cmV0dXJuIG59aWYoby5sZW5ndGgteT4zKXt5PXkrMyYtNDthLnNldChvLnN1YmFycmF5KDAseSkscik7bi5sZW5ndGg9eTtyZXR1cm4gbn1hLnNldChvLHIpO24ubGVuZ3RoPW8ubGVuZ3RoO3JldHVybiBufWZ1bmN0aW9uIHJlYWROYW1lVGFibGUoZSl7Y29uc3QgaT0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9aTtjb25zdCBhPVtbXSxbXV0scj1bXSxzPWUubGVuZ3RoLG49aStzO2lmKDAhPT10LmdldFVpbnQxNigpfHxzPDYpcmV0dXJuW2Escl07Y29uc3Qgbz10LmdldFVpbnQxNigpLGc9dC5nZXRVaW50MTYoKTtsZXQgYyxDO2ZvcihjPTA7YzxvJiZ0LnBvcysxMjw9bjtjKyspe2NvbnN0IGU9e3BsYXRmb3JtOnQuZ2V0VWludDE2KCksZW5jb2Rpbmc6dC5nZXRVaW50MTYoKSxsYW5ndWFnZTp0LmdldFVpbnQxNigpLG5hbWU6dC5nZXRVaW50MTYoKSxsZW5ndGg6dC5nZXRVaW50MTYoKSxvZmZzZXQ6dC5nZXRVaW50MTYoKX07KGlzTWFjTmFtZVJlY29yZChlKXx8aXNXaW5OYW1lUmVjb3JkKGUpKSYmci5wdXNoKGUpfWZvcihjPTAsQz1yLmxlbmd0aDtjPEM7YysrKXtjb25zdCBlPXJbY107aWYoZS5sZW5ndGg8PTApY29udGludWU7Y29uc3Qgcz1pK2crZS5vZmZzZXQ7aWYocytlLmxlbmd0aD5uKWNvbnRpbnVlO3QucG9zPXM7Y29uc3Qgbz1lLm5hbWU7aWYoZS5lbmNvZGluZyl7bGV0IGk9IiI7Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7YSs9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQuZ2V0VWludDE2KCkpO2FbMV1bb109aX1lbHNlIGFbMF1bb109dC5nZXRTdHJpbmcoZS5sZW5ndGgpfXJldHVyblthLHJdfWNvbnN0IHI9WzAsMCwwLDAsMCwwLDAsMCwtMiwtMiwtMiwtMiwwLDAsLTIsLTUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsMCwwLC0xLDAsLTEsLTEsLTEsLTEsMSwtMSwtOTk5LDAsMSwwLC0xLC0yLDAsLTEsLTIsLTEsLTEsMCwtMSwtMSwwLDAsLTk5OSwtOTk5LC0xLC0xLC0xLC0xLC0yLC05OTksLTIsLTIsLTk5OSwwLC0yLC0yLDAsMCwtMiwwLC0yLDAsMCwwLC0yLC0xLC0xLDEsMSwwLDAsLTEsLTEsLTEsLTEsLTEsLTEsLTEsMCwwLC0xLDAsLTEsLTEsMCwtOTk5LC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLC0yLC05OTksLTk5OSwtOTk5LC05OTksLTk5OSwtMSwtMSwtMiwtMiwwLDAsMCwwLC0xLC0xLC05OTksLTIsLTIsMCwwLC0xLC0yLC0yLDAsMCwwLC0xLC0xLC0xLC0yXTtmdW5jdGlvbiBzYW5pdGl6ZVRUUHJvZ3JhbShlLHQpe2xldCBpLGEscyxuLG8sZz1lLmRhdGEsYz0wLEM9MCxoPTA7Y29uc3QgbD1bXSxRPVtdLEU9W107bGV0IHU9dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMsZD0hMSxmPTAscD0wO2ZvcihsZXQgZT1nLmxlbmd0aDtjPGU7KXtjb25zdCBlPWdbYysrXTtpZig2ND09PWUpe2E9Z1tjKytdO2lmKGR8fHApYys9YTtlbHNlIGZvcihpPTA7aTxhO2krKylsLnB1c2goZ1tjKytdKX1lbHNlIGlmKDY1PT09ZSl7YT1nW2MrK107aWYoZHx8cCljKz0yKmE7ZWxzZSBmb3IoaT0wO2k8YTtpKyspe3M9Z1tjKytdO2wucHVzaChzPDw4fGdbYysrXSl9fWVsc2UgaWYoMTc2PT0oMjQ4JmUpKXthPWUtMTc2KzE7aWYoZHx8cCljKz1hO2Vsc2UgZm9yKGk9MDtpPGE7aSsrKWwucHVzaChnW2MrK10pfWVsc2UgaWYoMTg0PT0oMjQ4JmUpKXthPWUtMTg0KzE7aWYoZHx8cCljKz0yKmE7ZWxzZSBmb3IoaT0wO2k8YTtpKyspe3M9Z1tjKytdO2wucHVzaChzaWduZWRJbnQxNihzLGdbYysrXSkpfX1lbHNlIGlmKDQzIT09ZXx8dSlpZig0NCE9PWV8fHUpe2lmKDQ1PT09ZSlpZihkKXtkPSExO0M9Y31lbHNle289US5wb3AoKTtpZighbyl7d2FybigiVFQ6IEVOREYgYmFkIHN0YWNrIik7dC5oaW50c1ZhbGlkPSExO3JldHVybn1uPUUucG9wKCk7Zz1vLmRhdGE7Yz1vLmk7dC5mdW5jdGlvbnNTdGFja0RlbHRhc1tuXT1sLmxlbmd0aC1vLnN0YWNrVG9wfWVsc2UgaWYoMTM3PT09ZSl7aWYoZHx8cCl7d2FybigiVFQ6IG5lc3RlZCBJREVGcyBub3QgYWxsb3dlZCIpO3U9ITB9ZD0hMDtoPWN9ZWxzZSBpZig4OD09PWUpKytmO2Vsc2UgaWYoMjc9PT1lKXA9ZjtlbHNlIGlmKDg5PT09ZSl7cD09PWYmJihwPTApOy0tZn1lbHNlIGlmKDI4PT09ZSYmIWQmJiFwKXtjb25zdCBlPWwuYXQoLTEpO2U+MCYmKGMrPWUtMSl9fWVsc2V7aWYoZHx8cCl7d2FybigiVFQ6IG5lc3RlZCBGREVGcyBub3QgYWxsb3dlZCIpO3U9ITB9ZD0hMDtoPWM7bj1sLnBvcCgpO3QuZnVuY3Rpb25zRGVmaW5lZFtuXT17ZGF0YTpnLGk6Y319ZWxzZSBpZighZCYmIXApe249bC5hdCgtMSk7aWYoaXNOYU4obikpaW5mbygiVFQ6IENBTEwgZW1wdHkgc3RhY2sgKG9yIGludmFsaWQgZW50cnkpLiIpO2Vsc2V7dC5mdW5jdGlvbnNVc2VkW25dPSEwO2lmKG4gaW4gdC5mdW5jdGlvbnNTdGFja0RlbHRhcyl7Y29uc3QgZT1sLmxlbmd0aCt0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW25dO2lmKGU8MCl7d2FybigiVFQ6IENBTEwgaW52YWxpZCBmdW5jdGlvbnMgc3RhY2sgZGVsdGEuIik7dC5oaW50c1ZhbGlkPSExO3JldHVybn1sLmxlbmd0aD1lfWVsc2UgaWYobiBpbiB0LmZ1bmN0aW9uc0RlZmluZWQmJiFFLmluY2x1ZGVzKG4pKXtRLnB1c2goe2RhdGE6ZyxpOmMsc3RhY2tUb3A6bC5sZW5ndGgtMX0pO0UucHVzaChuKTtvPXQuZnVuY3Rpb25zRGVmaW5lZFtuXTtpZighbyl7d2FybigiVFQ6IENBTEwgbm9uLWV4aXN0ZW50IGZ1bmN0aW9uIik7dC5oaW50c1ZhbGlkPSExO3JldHVybn1nPW8uZGF0YTtjPW8uaX19fWlmKCFkJiYhcCl7bGV0IHQ9MDtlPD0xNDI/dD1yW2VdOmU+PTE5MiYmZTw9MjIzP3Q9LTE6ZT49MjI0JiYodD0tMik7aWYoZT49MTEzJiZlPD0xMTcpe2E9bC5wb3AoKTtpc05hTihhKXx8KHQ9MiotYSl9Zm9yKDt0PDAmJmwubGVuZ3RoPjA7KXtsLnBvcCgpO3QrK31mb3IoO3Q+MDspe2wucHVzaChOYU4pO3QtLX19fXQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zPXU7Y29uc3QgbT1bZ107Yz5nLmxlbmd0aCYmbS5wdXNoKG5ldyBVaW50OEFycmF5KGMtZy5sZW5ndGgpKTtpZihoPkMpe3dhcm4oIlRUOiBjb21wbGVtZW50aW5nIGEgbWlzc2luZyBmdW5jdGlvbiB0YWlsIik7bS5wdXNoKG5ldyBVaW50OEFycmF5KFszNCw0NV0pKX0hZnVuY3Rpb24gZm9sZFRUVGFibGUoZSx0KXtpZih0Lmxlbmd0aD4xKXtsZXQgaSxhLHI9MDtmb3IoaT0wLGE9dC5sZW5ndGg7aTxhO2krKylyKz10W2ldLmxlbmd0aDtyPXIrMyYtNDtjb25zdCBzPW5ldyBVaW50OEFycmF5KHIpO2xldCBuPTA7Zm9yKGk9MCxhPXQubGVuZ3RoO2k8YTtpKyspe3Muc2V0KHRbaV0sbik7bis9dFtpXS5sZW5ndGh9ZS5kYXRhPXM7ZS5sZW5ndGg9cn19KGUsbSl9bGV0IHMsbixvLGc7aWYoaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKHQ9bmV3IFN0cmVhbShuZXcgVWludDhBcnJheSh0LmdldEJ5dGVzKCkpKSkpe2NvbnN0IGU9ZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEoZSx0KXtjb25zdHtudW1Gb250czppLG9mZnNldFRhYmxlOmF9PWZ1bmN0aW9uIHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25IZWFkZXIoZSl7Y29uc3QgdD1lLmdldFN0cmluZyg0KTthc3NlcnQoInR0Y2YiPT09dCwiTXVzdCBiZSBhIFRydWVUeXBlIENvbGxlY3Rpb24gZm9udC4iKTtjb25zdCBpPWUuZ2V0VWludDE2KCksYT1lLmdldFVpbnQxNigpLHI9ZS5nZXRJbnQzMigpPj4+MCxzPVtdO2ZvcihsZXQgdD0wO3Q8cjt0Kyspcy5wdXNoKGUuZ2V0SW50MzIoKT4+PjApO2NvbnN0IG49e3R0Y1RhZzp0LG1ham9yVmVyc2lvbjppLG1pbm9yVmVyc2lvbjphLG51bUZvbnRzOnIsb2Zmc2V0VGFibGU6c307c3dpdGNoKGkpe2Nhc2UgMTpyZXR1cm4gbjtjYXNlIDI6bi5kc2lnVGFnPWUuZ2V0SW50MzIoKT4+PjA7bi5kc2lnTGVuZ3RoPWUuZ2V0SW50MzIoKT4+PjA7bi5kc2lnT2Zmc2V0PWUuZ2V0SW50MzIoKT4+PjA7cmV0dXJuIG59dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIFRydWVUeXBlIENvbGxlY3Rpb24gbWFqb3JWZXJzaW9uOiAke2l9LmApfShlKSxyPXQuc3BsaXQoIisiKTtsZXQgcztmb3IobGV0IG49MDtuPGk7bisrKXtlLnBvcz0oZS5zdGFydHx8MCkrYVtuXTtjb25zdCBpPXJlYWRPcGVuVHlwZUhlYWRlcihlKSxvPXJlYWRUYWJsZXMoZSxpLm51bVRhYmxlcyk7aWYoIW8ubmFtZSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ1RydWVUeXBlIENvbGxlY3Rpb24gZm9udCBtdXN0IGNvbnRhaW4gYSAibmFtZSIgdGFibGUuJyk7Y29uc3RbZ109cmVhZE5hbWVUYWJsZShvLm5hbWUpO2ZvcihsZXQgZT0wLGE9Zy5sZW5ndGg7ZTxhO2UrKylmb3IobGV0IGE9MCxuPWdbZV0ubGVuZ3RoO2E8bjthKyspe2NvbnN0IG49Z1tlXVthXT8ucmVwbGFjZUFsbCgvXHMvZywiIik7aWYobil7aWYobj09PXQpcmV0dXJue2hlYWRlcjppLHRhYmxlczpvfTtpZighKHIubGVuZ3RoPDIpKWZvcihjb25zdCBlIG9mIHIpbj09PWUmJihzPXtuYW1lOmUsaGVhZGVyOmksdGFibGVzOm99KX19fWlmKHMpe3dhcm4oYFRydWVUeXBlIENvbGxlY3Rpb24gZG9lcyBub3QgY29udGFpbiAiJHt0fSIgZm9udCwgZmFsbGluZyBiYWNrIHRvICIke3MubmFtZX0iIGZvbnQgaW5zdGVhZC5gKTtyZXR1cm57aGVhZGVyOnMuaGVhZGVyLHRhYmxlczpzLnRhYmxlc319dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gIiR7dH0iIGZvbnQuYCl9KHQsdGhpcy5uYW1lKTtzPWUuaGVhZGVyO249ZS50YWJsZXN9ZWxzZXtzPXJlYWRPcGVuVHlwZUhlYWRlcih0KTtuPXJlYWRUYWJsZXModCxzLm51bVRhYmxlcyl9Y29uc3QgYz0hblsiQ0ZGICJdO2lmKGMpe2lmKCFuLmxvY2EpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCdSZXF1aXJlZCAibG9jYSIgdGFibGUgaXMgbm90IGZvdW5kJyk7aWYoIW4uZ2x5Zil7d2FybignUmVxdWlyZWQgImdseWYiIHRhYmxlIGlzIG5vdCBmb3VuZCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTtuLmdseWY9e3RhZzoiZ2x5ZiIsZGF0YTpuZXcgVWludDhBcnJheSgwKX19dGhpcy5pc09wZW5UeXBlPSExfWVsc2V7Y29uc3QgdD1pLmNvbXBvc2l0ZSYmKGkuY2lkVG9HaWRNYXA/Lmxlbmd0aD4wfHwhKGkuY01hcCBpbnN0YW5jZW9mIElkZW50aXR5Q01hcCkpO2lmKCJPVFRPIj09PXMudmVyc2lvbiYmIXR8fCFuLmhlYWR8fCFuLmhoZWF8fCFuLm1heHB8fCFuLnBvc3Qpe2c9bmV3IFN0cmVhbShuWyJDRkYgIl0uZGF0YSk7bz1uZXcgQ0ZGRm9udChnLGkpO2FkanVzdFdpZHRocyhpKTtyZXR1cm4gdGhpcy5jb252ZXJ0KGUsbyxpKX1kZWxldGUgbi5nbHlmO2RlbGV0ZSBuLmxvY2E7ZGVsZXRlIG4uZnBnbTtkZWxldGUgbi5wcmVwO2RlbGV0ZSBuWyJjdnQgIl07dGhpcy5pc09wZW5UeXBlPSEwfWlmKCFuLm1heHApdGhyb3cgbmV3IEZvcm1hdEVycm9yKCdSZXF1aXJlZCAibWF4cCIgdGFibGUgaXMgbm90IGZvdW5kJyk7dC5wb3M9KHQuc3RhcnR8fDApK24ubWF4cC5vZmZzZXQ7bGV0IEM9dC5nZXRJbnQzMigpO2NvbnN0IGg9dC5nZXRVaW50MTYoKTtpZig2NTUzNiE9PUMmJjIwNDgwIT09Qyl7aWYoNj09PW4ubWF4cC5sZW5ndGgpQz0yMDQ4MDtlbHNle2lmKCEobi5tYXhwLmxlbmd0aD49MzIpKXRocm93IG5ldyBGb3JtYXRFcnJvcignIm1heHAiIHRhYmxlIGhhcyBhIHdyb25nIHZlcnNpb24gbnVtYmVyJyk7Qz02NTUzNn0hZnVuY3Rpb24gd3JpdGVVaW50MzIoZSx0LGkpe2VbdCszXT0yNTUmaTtlW3QrMl09aT4+Pjg7ZVt0KzFdPWk+Pj4xNjtlW3RdPWk+Pj4yNH0obi5tYXhwLmRhdGEsMCxDKX1pZihpLnNjYWxlRmFjdG9ycz8ubGVuZ3RoPT09aCYmYyl7Y29uc3R7c2NhbGVGYWN0b3JzOmV9PWksdD1pbnQxNihuLmhlYWQuZGF0YVs1MF0sbi5oZWFkLmRhdGFbNTFdKSxhPW5ldyBHbHlmVGFibGUoe2dseWZUYWJsZTpuLmdseWYuZGF0YSxpc0dseXBoTG9jYXRpb25zTG9uZzp0LGxvY2FUYWJsZTpuLmxvY2EuZGF0YSxudW1HbHlwaHM6aH0pO2Euc2NhbGUoZSk7Y29uc3R7Z2x5ZjpyLGxvY2E6cyxpc0xvY2F0aW9uTG9uZzpvfT1hLndyaXRlKCk7bi5nbHlmLmRhdGE9cjtuLmxvY2EuZGF0YT1zO2lmKG8hPT0hIXQpe24uaGVhZC5kYXRhWzUwXT0wO24uaGVhZC5kYXRhWzUxXT1vPzE6MH1jb25zdCBnPW4uaG10eC5kYXRhO2ZvcihsZXQgdD0wO3Q8aDt0Kyspe2NvbnN0IGk9NCp0LGE9TWF0aC5yb3VuZChlW3RdKmludDE2KGdbaV0sZ1tpKzFdKSk7Z1tpXT1hPj44JjI1NTtnW2krMV09MjU1JmE7d3JpdGVTaWduZWRJbnQxNihnLGkrMixNYXRoLnJvdW5kKGVbdF0qc2lnbmVkSW50MTYoZ1tpKzJdLGdbaSszXSkpKX19bGV0IGw9aCsxLFE9ITA7aWYobD42NTUzNSl7UT0hMTtsPWg7d2FybigiTm90IGVub3VnaCBzcGFjZSBpbiBnbHlmcyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguIil9bGV0IEU9MCx1PTA7aWYoQz49NjU1MzYmJm4ubWF4cC5sZW5ndGg+PTMyKXt0LnBvcys9ODtpZih0LmdldFVpbnQxNigpPjIpe24ubWF4cC5kYXRhWzE0XT0wO24ubWF4cC5kYXRhWzE1XT0yfXQucG9zKz00O0U9dC5nZXRVaW50MTYoKTt0LnBvcys9NDt1PXQuZ2V0VWludDE2KCl9bi5tYXhwLmRhdGFbNF09bD4+ODtuLm1heHAuZGF0YVs1XT0yNTUmbDtjb25zdCBkPWZ1bmN0aW9uIHNhbml0aXplVFRQcm9ncmFtcyhlLHQsaSxhKXtjb25zdCByPXtmdW5jdGlvbnNEZWZpbmVkOltdLGZ1bmN0aW9uc1VzZWQ6W10sZnVuY3Rpb25zU3RhY2tEZWx0YXM6W10sdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zOiExLGhpbnRzVmFsaWQ6ITB9O2UmJnNhbml0aXplVFRQcm9ncmFtKGUscik7dCYmc2FuaXRpemVUVFByb2dyYW0odCxyKTtlJiZmdW5jdGlvbiBjaGVja0ludmFsaWRGdW5jdGlvbnMoZSx0KXtpZighZS50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMpaWYoZS5mdW5jdGlvbnNEZWZpbmVkLmxlbmd0aD50KXt3YXJuKCJUVDogbW9yZSBmdW5jdGlvbnMgZGVmaW5lZCB0aGFuIGV4cGVjdGVkIik7ZS5oaW50c1ZhbGlkPSExfWVsc2UgZm9yKGxldCBpPTAsYT1lLmZ1bmN0aW9uc1VzZWQubGVuZ3RoO2k8YTtpKyspe2lmKGk+dCl7d2FybigiVFQ6IGludmFsaWQgZnVuY3Rpb24gaWQ6ICIraSk7ZS5oaW50c1ZhbGlkPSExO3JldHVybn1pZihlLmZ1bmN0aW9uc1VzZWRbaV0mJiFlLmZ1bmN0aW9uc0RlZmluZWRbaV0pe3dhcm4oIlRUOiB1bmRlZmluZWQgZnVuY3Rpb246ICIraSk7ZS5oaW50c1ZhbGlkPSExO3JldHVybn19fShyLGEpO2lmKGkmJjEmaS5sZW5ndGgpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoaS5sZW5ndGgrMSk7ZS5zZXQoaS5kYXRhKTtpLmRhdGE9ZX1yZXR1cm4gci5oaW50c1ZhbGlkfShuLmZwZ20sbi5wcmVwLG5bImN2dCAiXSxFKTtpZighZCl7ZGVsZXRlIG4uZnBnbTtkZWxldGUgbi5wcmVwO2RlbGV0ZSBuWyJjdnQgIl19IWZ1bmN0aW9uIHNhbml0aXplTWV0cmljcyhlLHQsaSxhLHIscyl7aWYoIXQpe2kmJihpLmRhdGE9bnVsbCk7cmV0dXJufWUucG9zPShlLnN0YXJ0fHwwKSt0Lm9mZnNldDtlLnBvcys9NDtlLnBvcys9MjtlLnBvcys9MjtlLnBvcys9MjtlLnBvcys9MjtlLnBvcys9MjtlLnBvcys9MjtlLnBvcys9MjtlLnBvcys9MjtlLnBvcys9Mjtjb25zdCBuPWUuZ2V0VWludDE2KCk7ZS5wb3MrPTg7ZS5wb3MrPTI7bGV0IG89ZS5nZXRVaW50MTYoKTtpZigwIT09bil7aWYoISgyJmludDE2KGEuZGF0YVs0NF0sYS5kYXRhWzQ1XSkpKXt0LmRhdGFbMjJdPTA7dC5kYXRhWzIzXT0wfX1pZihvPnIpe2luZm8oYFRoZSBudW1PZk1ldHJpY3MgKCR7b30pIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBudW1HbHlwaHMgKCR7cn0pLmApO289cjt0LmRhdGFbMzRdPSg2NTI4MCZvKT4+ODt0LmRhdGFbMzVdPTI1NSZvfWNvbnN0IGc9ci1vLShpLmxlbmd0aC00Km8+PjEpO2lmKGc+MCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShpLmxlbmd0aCsyKmcpO2Uuc2V0KGkuZGF0YSk7aWYocyl7ZVtpLmxlbmd0aF09aS5kYXRhWzJdO2VbaS5sZW5ndGgrMV09aS5kYXRhWzNdfWkuZGF0YT1lfX0odCxuLmhoZWEsbi5obXR4LG4uaGVhZCxsLFEpO2lmKCFuLmhlYWQpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCdSZXF1aXJlZCAiaGVhZCIgdGFibGUgaXMgbm90IGZvdW5kJyk7IWZ1bmN0aW9uIHNhbml0aXplSGVhZChlLHQsaSl7Y29uc3QgYT1lLmRhdGEscj1mdW5jdGlvbiBpbnQzMihlLHQsaSxhKXtyZXR1cm4oZTw8MjQpKyh0PDwxNikrKGk8PDgpK2F9KGFbMF0sYVsxXSxhWzJdLGFbM10pO2lmKHI+PjE2IT0xKXtpbmZvKCJBdHRlbXB0aW5nIHRvIGZpeCBpbnZhbGlkIHZlcnNpb24gaW4gaGVhZCB0YWJsZTogIityKTthWzBdPTA7YVsxXT0xO2FbMl09MDthWzNdPTB9Y29uc3Qgcz1pbnQxNihhWzUwXSxhWzUxXSk7aWYoczwwfHxzPjEpe2luZm8oIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgaW5kZXhUb0xvY0Zvcm1hdCBpbiBoZWFkIHRhYmxlOiAiK3MpO2NvbnN0IGU9dCsxO2lmKGk9PT1lPDwxKXthWzUwXT0wO2FbNTFdPTB9ZWxzZXtpZihpIT09ZTw8Mil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkNvdWxkIG5vdCBmaXggaW5kZXhUb0xvY0Zvcm1hdDogIitzKTthWzUwXT0wO2FbNTFdPTF9fX0obi5oZWFkLGgsYz9uLmxvY2EubGVuZ3RoOjApO2xldCBmPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoYyl7Y29uc3QgZT1pbnQxNihuLmhlYWQuZGF0YVs1MF0sbi5oZWFkLmRhdGFbNTFdKSx0PWZ1bmN0aW9uIHNhbml0aXplR2x5cGhMb2NhdGlvbnMoZSx0LGksYSxyLHMsbil7bGV0IG8sZyxjO2lmKGEpe289NDtnPWZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhlLHQpe3JldHVybiBlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM119O2M9ZnVuY3Rpb24gZm9udEl0ZW1FbmNvZGVMb25nKGUsdCxpKXtlW3RdPWk+Pj4yNCYyNTU7ZVt0KzFdPWk+PjE2JjI1NTtlW3QrMl09aT4+OCYyNTU7ZVt0KzNdPTI1NSZpfX1lbHNle289MjtnPWZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlKGUsdCl7cmV0dXJuIGVbdF08PDl8ZVt0KzFdPDwxfTtjPWZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlKGUsdCxpKXtlW3RdPWk+PjkmMjU1O2VbdCsxXT1pPj4xJjI1NX19Y29uc3QgQz1zP2krMTppLGg9byooMStDKSxsPW5ldyBVaW50OEFycmF5KGgpO2wuc2V0KGUuZGF0YS5zdWJhcnJheSgwLGgpKTtlLmRhdGE9bDtjb25zdCBRPXQuZGF0YSxFPVEubGVuZ3RoLHU9bmV3IFVpbnQ4QXJyYXkoRSk7bGV0IGQsZjtjb25zdCBwPVtdO2ZvcihkPTAsZj0wO2Q8aSsxO2QrKyxmKz1vKXtsZXQgZT1nKGwsZik7ZT5FJiYoZT1FKTtwLnB1c2goe2luZGV4OmQsb2Zmc2V0OmUsZW5kT2Zmc2V0OjB9KX1wLnNvcnQoKChlLHQpPT5lLm9mZnNldC10Lm9mZnNldCkpO2ZvcihkPTA7ZDxpO2QrKylwW2RdLmVuZE9mZnNldD1wW2QrMV0ub2Zmc2V0O3Auc29ydCgoKGUsdCk9PmUuaW5kZXgtdC5pbmRleCkpO2ZvcihkPTA7ZDxpO2QrKyl7Y29uc3R7b2Zmc2V0OmUsZW5kT2Zmc2V0OnR9PXBbZF07aWYoMCE9PWV8fDAhPT10KWJyZWFrO2NvbnN0IGk9cFtkKzFdLm9mZnNldDtpZigwIT09aSl7cFtkXS5lbmRPZmZzZXQ9aTticmVha319Y29uc3QgbT1wLmF0KC0yKTswIT09bS5vZmZzZXQmJjA9PT1tLmVuZE9mZnNldCYmKG0uZW5kT2Zmc2V0PUUpO2NvbnN0IHk9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgdz0wO2MobCwwLHcpO2ZvcihkPTAsZj1vO2Q8aTtkKyssZis9byl7Y29uc3QgZT1zYW5pdGl6ZUdseXBoKFEscFtkXS5vZmZzZXQscFtkXS5lbmRPZmZzZXQsdSx3LHIpLHQ9ZS5sZW5ndGg7MD09PXQmJih5W2RdPSEwKTtlLnNpemVPZkluc3RydWN0aW9ucz5uJiYobj1lLnNpemVPZkluc3RydWN0aW9ucyk7dys9dDtjKGwsZix3KX1pZigwPT09dyl7Y29uc3QgZT1uZXcgVWludDhBcnJheShbMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQ5LDBdKTtmb3IoZD0wLGY9bztkPEM7ZCsrLGYrPW8pYyhsLGYsZS5sZW5ndGgpO3QuZGF0YT1lfWVsc2UgaWYocyl7Y29uc3QgaT1nKGwsbyk7aWYodS5sZW5ndGg+aSt3KXQuZGF0YT11LnN1YmFycmF5KDAsaSt3KTtlbHNle3QuZGF0YT1uZXcgVWludDhBcnJheShpK3cpO3QuZGF0YS5zZXQodS5zdWJhcnJheSgwLHcpKX10LmRhdGEuc2V0KHUuc3ViYXJyYXkoMCxpKSx3KTtjKGUuZGF0YSxsLmxlbmd0aC1vLHcraSl9ZWxzZSB0LmRhdGE9dS5zdWJhcnJheSgwLHcpO3JldHVybnttaXNzaW5nR2x5cGhzOnksbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zOm59fShuLmxvY2Esbi5nbHlmLGgsZSxkLFEsdSk7Zj10Lm1pc3NpbmdHbHlwaHM7aWYoQz49NjU1MzYmJm4ubWF4cC5sZW5ndGg+PTMyKXtuLm1heHAuZGF0YVsyNl09dC5tYXhTaXplT2ZJbnN0cnVjdGlvbnM+Pjg7bi5tYXhwLmRhdGFbMjddPTI1NSZ0Lm1heFNpemVPZkluc3RydWN0aW9uc319aWYoIW4uaGhlYSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJoaGVhIiB0YWJsZSBpcyBub3QgZm91bmQnKTtpZigwPT09bi5oaGVhLmRhdGFbMTBdJiYwPT09bi5oaGVhLmRhdGFbMTFdKXtuLmhoZWEuZGF0YVsxMF09MjU1O24uaGhlYS5kYXRhWzExXT0yNTV9Y29uc3QgcD17dW5pdHNQZXJFbTppbnQxNihuLmhlYWQuZGF0YVsxOF0sbi5oZWFkLmRhdGFbMTldKSx5TWF4OnNpZ25lZEludDE2KG4uaGVhZC5kYXRhWzQyXSxuLmhlYWQuZGF0YVs0M10pLHlNaW46c2lnbmVkSW50MTYobi5oZWFkLmRhdGFbMzhdLG4uaGVhZC5kYXRhWzM5XSksYXNjZW50OnNpZ25lZEludDE2KG4uaGhlYS5kYXRhWzRdLG4uaGhlYS5kYXRhWzVdKSxkZXNjZW50OnNpZ25lZEludDE2KG4uaGhlYS5kYXRhWzZdLG4uaGhlYS5kYXRhWzddKSxsaW5lR2FwOnNpZ25lZEludDE2KG4uaGhlYS5kYXRhWzhdLG4uaGhlYS5kYXRhWzldKX07dGhpcy5hc2NlbnQ9cC5hc2NlbnQvcC51bml0c1BlckVtO3RoaXMuZGVzY2VudD1wLmRlc2NlbnQvcC51bml0c1BlckVtO3RoaXMubGluZUdhcD1wLmxpbmVHYXAvcC51bml0c1BlckVtO2lmKHRoaXMuY3NzRm9udEluZm8/LmxpbmVIZWlnaHQpe3RoaXMubGluZUhlaWdodD10aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUhlaWdodDt0aGlzLmxpbmVHYXA9dGhpcy5jc3NGb250SW5mby5tZXRyaWNzLmxpbmVHYXB9ZWxzZSB0aGlzLmxpbmVIZWlnaHQ9dGhpcy5hc2NlbnQtdGhpcy5kZXNjZW50K3RoaXMubGluZUdhcDtuLnBvc3QmJmZ1bmN0aW9uIHJlYWRQb3N0U2NyaXB0VGFibGUoZSxpLGEpe2NvbnN0IHI9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPXI7Y29uc3Qgcz1yK2UubGVuZ3RoLG49dC5nZXRJbnQzMigpO3Quc2tpcCgyOCk7bGV0IG8sZyxjPSEwO3N3aXRjaChuKXtjYXNlIDY1NTM2Om89Wmk7YnJlYWs7Y2FzZSAxMzEwNzI6Y29uc3QgZT10LmdldFVpbnQxNigpO2lmKGUhPT1hKXtjPSExO2JyZWFrfWNvbnN0IHI9W107Zm9yKGc9MDtnPGU7KytnKXtjb25zdCBlPXQuZ2V0VWludDE2KCk7aWYoZT49MzI3Njgpe2M9ITE7YnJlYWt9ci5wdXNoKGUpfWlmKCFjKWJyZWFrO2NvbnN0IEM9W10saD1bXTtmb3IoO3QucG9zPHM7KXtjb25zdCBlPXQuZ2V0Qnl0ZSgpO2gubGVuZ3RoPWU7Zm9yKGc9MDtnPGU7KytnKWhbZ109U3RyaW5nLmZyb21DaGFyQ29kZSh0LmdldEJ5dGUoKSk7Qy5wdXNoKGguam9pbigiIikpfW89W107Zm9yKGc9MDtnPGU7KytnKXtjb25zdCBlPXJbZ107ZTwyNTg/by5wdXNoKFppW2VdKTpvLnB1c2goQ1tlLTI1OF0pfWJyZWFrO2Nhc2UgMTk2NjA4OmJyZWFrO2RlZmF1bHQ6d2FybigiVW5rbm93bi91bnN1cHBvcnRlZCBwb3N0IHRhYmxlIHZlcnNpb24gIituKTtjPSExO2kuZGVmYXVsdEVuY29kaW5nJiYobz1pLmRlZmF1bHRFbmNvZGluZyl9aS5nbHlwaE5hbWVzPW87cmV0dXJuIGN9KG4ucG9zdCxpLGgpO24ucG9zdD17dGFnOiJwb3N0IixkYXRhOmNyZWF0ZVBvc3RUYWJsZShpKX07Y29uc3QgbT1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGhhc0dseXBoKGUpe3JldHVybiFmW2VdfWlmKGkuY29tcG9zaXRlKXtjb25zdCBlPWkuY2lkVG9HaWRNYXB8fFtdLHQ9MD09PWUubGVuZ3RoO2kuY01hcC5mb3JFYWNoKChmdW5jdGlvbihpLGEpeyJzdHJpbmciPT10eXBlb2YgYSYmKGE9Y29udmVydENpZFN0cmluZyhpLGEsITApKTtpZihhPjY1NTM1KXRocm93IG5ldyBGb3JtYXRFcnJvcigiTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNSIpO2xldCByPS0xO3Q/cj1hOnZvaWQgMCE9PWVbYV0mJihyPWVbYV0pO3I+PTAmJnI8aCYmaGFzR2x5cGgocikmJihtW2ldPXIpfSkpfWVsc2V7Y29uc3QgZT1mdW5jdGlvbiByZWFkQ21hcFRhYmxlKGUsdCxpLGEpe2lmKCFlKXt3YXJuKCJObyBjbWFwIHRhYmxlIGF2YWlsYWJsZS4iKTtyZXR1cm57cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX19bGV0IHIscz0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9czt0LnNraXAoMik7Y29uc3Qgbj10LmdldFVpbnQxNigpO2xldCBvLGc9ITE7Zm9yKGxldCBlPTA7ZTxuO2UrKyl7Y29uc3Qgcj10LmdldFVpbnQxNigpLHM9dC5nZXRVaW50MTYoKSxjPXQuZ2V0SW50MzIoKT4+PjA7bGV0IEM9ITE7aWYobz8ucGxhdGZvcm1JZCE9PXJ8fG8/LmVuY29kaW5nSWQhPT1zKXtpZigwIT09cnx8MCE9PXMmJjEhPT1zJiYzIT09cylpZigxPT09ciYmMD09PXMpQz0hMDtlbHNlIGlmKDMhPT1yfHwxIT09c3x8IWEmJm8pe2lmKGkmJjM9PT1yJiYwPT09cyl7Qz0hMDtsZXQgaT0hMDtpZihlPG4tMSl7Y29uc3QgZT10LnBlZWtCeXRlcygyKTtpbnQxNihlWzBdLGVbMV0pPHImJihpPSExKX1pJiYoZz0hMCl9fWVsc2V7Qz0hMDtpfHwoZz0hMCl9ZWxzZSBDPSEwO0MmJihvPXtwbGF0Zm9ybUlkOnIsZW5jb2RpbmdJZDpzLG9mZnNldDpjfSk7aWYoZylicmVha319byYmKHQucG9zPXMrby5vZmZzZXQpO2lmKCFvfHwtMT09PXQucGVla0J5dGUoKSl7d2FybigiQ291bGQgbm90IGZpbmQgYSBwcmVmZXJyZWQgY21hcCB0YWJsZS4iKTtyZXR1cm57cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX19Y29uc3QgYz10LmdldFVpbnQxNigpO2xldCBDPSExO2NvbnN0IGg9W107bGV0IGwsUTtpZigwPT09Yyl7dC5za2lwKDQpO2ZvcihsPTA7bDwyNTY7bCsrKXtjb25zdCBlPXQuZ2V0Qnl0ZSgpO2UmJmgucHVzaCh7Y2hhckNvZGU6bCxnbHlwaElkOmV9KX1DPSEwfWVsc2UgaWYoMj09PWMpe3Quc2tpcCg0KTtjb25zdCBlPVtdO2xldCBpPTA7Zm9yKGxldCBhPTA7YTwyNTY7YSsrKXtjb25zdCBhPXQuZ2V0VWludDE2KCk+PjM7ZS5wdXNoKGEpO2k9TWF0aC5tYXgoYSxpKX1jb25zdCBhPVtdO2ZvcihsZXQgZT0wO2U8PWk7ZSsrKWEucHVzaCh7Zmlyc3RDb2RlOnQuZ2V0VWludDE2KCksZW50cnlDb3VudDp0LmdldFVpbnQxNigpLGlkRGVsdGE6c2lnbmVkSW50MTYodC5nZXRCeXRlKCksdC5nZXRCeXRlKCkpLGlkUmFuZ2VQb3M6dC5wb3MrdC5nZXRVaW50MTYoKX0pO2ZvcihsZXQgaT0wO2k8MjU2O2krKylpZigwPT09ZVtpXSl7dC5wb3M9YVswXS5pZFJhbmdlUG9zKzIqaTtRPXQuZ2V0VWludDE2KCk7aC5wdXNoKHtjaGFyQ29kZTppLGdseXBoSWQ6UX0pfWVsc2V7Y29uc3Qgcj1hW2VbaV1dO2ZvcihsPTA7bDxyLmVudHJ5Q291bnQ7bCsrKXtjb25zdCBlPShpPDw4KStsK3IuZmlyc3RDb2RlO3QucG9zPXIuaWRSYW5nZVBvcysyKmw7UT10LmdldFVpbnQxNigpOzAhPT1RJiYoUT0oUStyLmlkRGVsdGEpJTY1NTM2KTtoLnB1c2goe2NoYXJDb2RlOmUsZ2x5cGhJZDpRfSl9fX1lbHNlIGlmKDQ9PT1jKXt0LnNraXAoNCk7Y29uc3QgZT10LmdldFVpbnQxNigpPj4xO3Quc2tpcCg2KTtjb25zdCBpPVtdO2xldCBhO2ZvcihhPTA7YTxlO2ErKylpLnB1c2goe2VuZDp0LmdldFVpbnQxNigpfSk7dC5za2lwKDIpO2ZvcihhPTA7YTxlO2ErKylpW2FdLnN0YXJ0PXQuZ2V0VWludDE2KCk7Zm9yKGE9MDthPGU7YSsrKWlbYV0uZGVsdGE9dC5nZXRVaW50MTYoKTtsZXQgbixvPTA7Zm9yKGE9MDthPGU7YSsrKXtyPWlbYV07Y29uc3Qgcz10LmdldFVpbnQxNigpO2lmKHMpe249KHM+PjEpLShlLWEpO3Iub2Zmc2V0SW5kZXg9bjtvPU1hdGgubWF4KG8sbityLmVuZC1yLnN0YXJ0KzEpfWVsc2Ugci5vZmZzZXRJbmRleD0tMX1jb25zdCBnPVtdO2ZvcihsPTA7bDxvO2wrKylnLnB1c2godC5nZXRVaW50MTYoKSk7Zm9yKGE9MDthPGU7YSsrKXtyPWlbYV07cz1yLnN0YXJ0O2NvbnN0IGU9ci5lbmQsdD1yLmRlbHRhO249ci5vZmZzZXRJbmRleDtmb3IobD1zO2w8PWU7bCsrKWlmKDY1NTM1IT09bCl7UT1uPDA/bDpnW24rbC1zXTtRPVErdCY2NTUzNTtoLnB1c2goe2NoYXJDb2RlOmwsZ2x5cGhJZDpRfSl9fX1lbHNlIGlmKDY9PT1jKXt0LnNraXAoNCk7Y29uc3QgZT10LmdldFVpbnQxNigpLGk9dC5nZXRVaW50MTYoKTtmb3IobD0wO2w8aTtsKyspe1E9dC5nZXRVaW50MTYoKTtjb25zdCBpPWUrbDtoLnB1c2goe2NoYXJDb2RlOmksZ2x5cGhJZDpRfSl9fWVsc2V7aWYoMTIhPT1jKXt3YXJuKCJjbWFwIHRhYmxlIGhhcyB1bnN1cHBvcnRlZCBmb3JtYXQ6ICIrYyk7cmV0dXJue3BsYXRmb3JtSWQ6LTEsZW5jb2RpbmdJZDotMSxtYXBwaW5nczpbXSxoYXNTaG9ydENtYXA6ITF9fXt0LnNraXAoMTApO2NvbnN0IGU9dC5nZXRJbnQzMigpPj4+MDtmb3IobD0wO2w8ZTtsKyspe2NvbnN0IGU9dC5nZXRJbnQzMigpPj4+MCxpPXQuZ2V0SW50MzIoKT4+PjA7bGV0IGE9dC5nZXRJbnQzMigpPj4+MDtmb3IobGV0IHQ9ZTt0PD1pO3QrKyloLnB1c2goe2NoYXJDb2RlOnQsZ2x5cGhJZDphKyt9KX19fWguc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jaGFyQ29kZS10LmNoYXJDb2RlfSkpO2ZvcihsZXQgZT0xO2U8aC5sZW5ndGg7ZSsrKWlmKGhbZS0xXS5jaGFyQ29kZT09PWhbZV0uY2hhckNvZGUpe2guc3BsaWNlKGUsMSk7ZS0tfXJldHVybntwbGF0Zm9ybUlkOm8ucGxhdGZvcm1JZCxlbmNvZGluZ0lkOm8uZW5jb2RpbmdJZCxtYXBwaW5nczpoLGhhc1Nob3J0Q21hcDpDfX0obi5jbWFwLHQsdGhpcy5pc1N5bWJvbGljRm9udCxpLmhhc0VuY29kaW5nKSxhPWUucGxhdGZvcm1JZCxyPWUuZW5jb2RpbmdJZCxzPWUubWFwcGluZ3M7bGV0IG89W10sZz0hMTshaS5oYXNFbmNvZGluZ3x8Ik1hY1JvbWFuRW5jb2RpbmciIT09aS5iYXNlRW5jb2RpbmdOYW1lJiYiV2luQW5zaUVuY29kaW5nIiE9PWkuYmFzZUVuY29kaW5nTmFtZXx8KG89Z2V0RW5jb2RpbmcoaS5iYXNlRW5jb2RpbmdOYW1lKSk7aWYoaS5oYXNFbmNvZGluZyYmIXRoaXMuaXNTeW1ib2xpY0ZvbnQmJigzPT09YSYmMT09PXJ8fDE9PT1hJiYwPT09cikpe2NvbnN0IGU9SmkoKTtmb3IobGV0IHQ9MDt0PDI1Njt0Kyspe2xldCBuO249dm9pZCAwIT09dGhpcy5kaWZmZXJlbmNlc1t0XT90aGlzLmRpZmZlcmVuY2VzW3RdOm8ubGVuZ3RoJiYiIiE9PW9bdF0/b1t0XTpiaVt0XTtpZighbiljb250aW51ZTtjb25zdCBnPXJlY292ZXJHbHlwaE5hbWUobixlKTtsZXQgYzszPT09YSYmMT09PXI/Yz1lW2ddOjE9PT1hJiYwPT09ciYmKGM9d2kuaW5kZXhPZihnKSk7aWYodm9pZCAwPT09Yyl7aWYoIWkuZ2x5cGhOYW1lcyYmaS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCYmISh0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwKSl7Y29uc3QgZT10aGlzLnRvVW5pY29kZS5nZXQodCk7ZSYmKGM9ZS5jb2RlUG9pbnRBdCgwKSl9aWYodm9pZCAwPT09Yyljb250aW51ZX1mb3IoY29uc3QgZSBvZiBzKWlmKGUuY2hhckNvZGU9PT1jKXttW3RdPWUuZ2x5cGhJZDticmVha319fWVsc2UgaWYoMD09PWEpe2Zvcihjb25zdCBlIG9mIHMpbVtlLmNoYXJDb2RlXT1lLmdseXBoSWQ7Zz0hMH1lbHNlIGlmKDM9PT1hJiYwPT09cilmb3IoY29uc3QgZSBvZiBzKXtsZXQgdD1lLmNoYXJDb2RlO3Q+PTYxNDQwJiZ0PD02MTY5NSYmKHQmPTI1NSk7bVt0XT1lLmdseXBoSWR9ZWxzZSBmb3IoY29uc3QgZSBvZiBzKW1bZS5jaGFyQ29kZV09ZS5nbHlwaElkO2lmKGkuZ2x5cGhOYW1lcyYmKG8ubGVuZ3RofHx0aGlzLmRpZmZlcmVuY2VzLmxlbmd0aCkpZm9yKGxldCBlPTA7ZTwyNTY7KytlKXtpZighZyYmdm9pZCAwIT09bVtlXSljb250aW51ZTtjb25zdCB0PXRoaXMuZGlmZmVyZW5jZXNbZV18fG9bZV07aWYoIXQpY29udGludWU7Y29uc3QgYT1pLmdseXBoTmFtZXMuaW5kZXhPZih0KTthPjAmJmhhc0dseXBoKGEpJiYobVtlXT1hKX19MD09PW0ubGVuZ3RoJiYobVswXT0wKTtsZXQgeT1sLTE7UXx8KHk9MCk7aWYoIWkuY3NzRm9udEluZm8pe2NvbnN0IGU9YWRqdXN0TWFwcGluZyhtLGhhc0dseXBoLHksdGhpcy50b1VuaWNvZGUpO3RoaXMudG9Gb250Q2hhcj1lLnRvRm9udENoYXI7bi5jbWFwPXt0YWc6ImNtYXAiLGRhdGE6Y3JlYXRlQ21hcFRhYmxlKGUuY2hhckNvZGVUb0dseXBoSWQsZS50b1VuaWNvZGVFeHRyYU1hcCxsKX07blsiT1MvMiJdJiZmdW5jdGlvbiB2YWxpZGF0ZU9TMlRhYmxlKGUsdCl7dC5wb3M9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O2NvbnN0IGk9dC5nZXRVaW50MTYoKTt0LnNraXAoNjApO2NvbnN0IGE9dC5nZXRVaW50MTYoKTtpZihpPDQmJjc2OCZhKXJldHVybiExO2lmKHQuZ2V0VWludDE2KCk+dC5nZXRVaW50MTYoKSlyZXR1cm4hMTt0LnNraXAoNik7aWYoMD09PXQuZ2V0VWludDE2KCkpcmV0dXJuITE7ZS5kYXRhWzhdPWUuZGF0YVs5XT0wO3JldHVybiEwfShuWyJPUy8yIl0sdCl8fChuWyJPUy8yIl09e3RhZzoiT1MvMiIsZGF0YTpjcmVhdGVPUzJUYWJsZShpLGUuY2hhckNvZGVUb0dseXBoSWQscCl9KX1pZighYyl0cnl7Zz1uZXcgU3RyZWFtKG5bIkNGRiAiXS5kYXRhKTtvPW5ldyBDRkZQYXJzZXIoZyxpLE9pKS5wYXJzZSgpO28uZHVwbGljYXRlRmlyc3RHbHlwaCgpO2NvbnN0IGU9bmV3IENGRkNvbXBpbGVyKG8pO25bIkNGRiAiXS5kYXRhPWUuY29tcGlsZSgpfWNhdGNoe3dhcm4oIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIitpLmxvYWRlZE5hbWUpfWlmKG4ubmFtZSl7Y29uc3RbdCxhXT1yZWFkTmFtZVRhYmxlKG4ubmFtZSk7bi5uYW1lLmRhdGE9Y3JlYXRlTmFtZVRhYmxlKGUsdCk7dGhpcy5wc05hbWU9dFswXVs2XXx8bnVsbDtpLmNvbXBvc2l0ZXx8ZnVuY3Rpb24gYWRqdXN0VHJ1ZVR5cGVUb1VuaWNvZGUoZSx0LGkpe2lmKGUuaXNJbnRlcm5hbEZvbnQpcmV0dXJuO2lmKGUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXApcmV0dXJuO2lmKGUuaGFzRW5jb2RpbmcpcmV0dXJuO2lmKGUudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXApcmV0dXJuO2lmKCF0KXJldHVybjtpZigwPT09aS5sZW5ndGgpcmV0dXJuO2lmKGUuZGVmYXVsdEVuY29kaW5nPT09RGkpcmV0dXJuO2Zvcihjb25zdCBlIG9mIGkpaWYoIWlzV2luTmFtZVJlY29yZChlKSlyZXR1cm47Y29uc3QgYT1EaSxyPVtdLHM9SmkoKTtmb3IoY29uc3QgZSBpbiBhKXtjb25zdCB0PWFbZV07aWYoIiI9PT10KWNvbnRpbnVlO2NvbnN0IGk9c1t0XTt2b2lkIDAhPT1pJiYocltlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGkpKX1yLmxlbmd0aD4wJiZlLnRvVW5pY29kZS5hbWVuZChyKX0oaSx0aGlzLmlzU3ltYm9saWNGb250LGEpfWVsc2Ugbi5uYW1lPXt0YWc6Im5hbWUiLGRhdGE6Y3JlYXRlTmFtZVRhYmxlKHRoaXMubmFtZSl9O2NvbnN0IHc9bmV3IE9wZW5UeXBlRmlsZUJ1aWxkZXIocy52ZXJzaW9uKTtmb3IoY29uc3QgZSBpbiBuKXcuYWRkVGFibGUoZSxuW2VdLmRhdGEpO3JldHVybiB3LnRvQXJyYXkoKX1jb252ZXJ0KGUsdCxpKXtpLmZpeGVkUGl0Y2g9ITE7aS5idWlsdEluRW5jb2RpbmcmJmZ1bmN0aW9uIGFkanVzdFR5cGUxVG9Vbmljb2RlKGUsdCl7aWYoZS5pc0ludGVybmFsRm9udClyZXR1cm47aWYoZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcClyZXR1cm47aWYodD09PWUuZGVmYXVsdEVuY29kaW5nKXJldHVybjtpZihlLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwKXJldHVybjtjb25zdCBpPVtdLGE9SmkoKTtmb3IoY29uc3QgciBpbiB0KXtpZihlLmhhc0VuY29kaW5nJiYoZS5iYXNlRW5jb2RpbmdOYW1lfHx2b2lkIDAhPT1lLmRpZmZlcmVuY2VzW3JdKSljb250aW51ZTtjb25zdCBzPWdldFVuaWNvZGVGb3JHbHlwaCh0W3JdLGEpOy0xIT09cyYmKGlbcl09U3RyaW5nLmZyb21DaGFyQ29kZShzKSl9aS5sZW5ndGg+MCYmZS50b1VuaWNvZGUuYW1lbmQoaSl9KGksaS5idWlsdEluRW5jb2RpbmcpO2xldCBhPTE7dCBpbnN0YW5jZW9mIENGRkZvbnQmJihhPXQubnVtR2x5cGhzLTEpO2NvbnN0IHM9dC5nZXRHbHlwaE1hcHBpbmcoaSk7bGV0IG49bnVsbCxvPXMsZz1udWxsO2lmKCFpLmNzc0ZvbnRJbmZvKXtuPWFkanVzdE1hcHBpbmcocyx0Lmhhc0dseXBoSWQuYmluZCh0KSxhLHRoaXMudG9Vbmljb2RlKTt0aGlzLnRvRm9udENoYXI9bi50b0ZvbnRDaGFyO289bi5jaGFyQ29kZVRvR2x5cGhJZDtnPW4udG9Vbmljb2RlRXh0cmFNYXB9Y29uc3QgYz10Lm51bUdseXBocztmdW5jdGlvbiBnZXRDaGFyQ29kZXMoZSx0KXtsZXQgaT1udWxsO2Zvcihjb25zdCBhIGluIGUpdD09PWVbYV0mJihpfHw9W10pLnB1c2goMHxhKTtyZXR1cm4gaX1mdW5jdGlvbiBjcmVhdGVDaGFyQ29kZShlLHQpe2Zvcihjb25zdCBpIGluIGUpaWYodD09PWVbaV0pcmV0dXJuIDB8aTtuLmNoYXJDb2RlVG9HbHlwaElkW24ubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZV09dDtyZXR1cm4gbi5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlKyt9Y29uc3QgQz10LnNlYWNzO2lmKG4mJkM/Lmxlbmd0aCl7Y29uc3QgZT1pLmZvbnRNYXRyaXh8fHIsYT10LmdldENoYXJzZXQoKSxvPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCB0IGluIEMpe3R8PTA7Y29uc3QgaT1DW3RdLHI9YmlbaVsyXV0sZz1iaVtpWzNdXSxjPWEuaW5kZXhPZihyKSxoPWEuaW5kZXhPZihnKTtpZihjPDB8fGg8MCljb250aW51ZTtjb25zdCBsPXt4OmlbMF0qZVswXStpWzFdKmVbMl0rZVs0XSx5OmlbMF0qZVsxXStpWzFdKmVbM10rZVs1XX0sUT1nZXRDaGFyQ29kZXMocyx0KTtpZihRKWZvcihjb25zdCBlIG9mIFEpe2NvbnN0IHQ9bi5jaGFyQ29kZVRvR2x5cGhJZCxpPWNyZWF0ZUNoYXJDb2RlKHQsYyksYT1jcmVhdGVDaGFyQ29kZSh0LGgpO29bZV09e2Jhc2VGb250Q2hhckNvZGU6aSxhY2NlbnRGb250Q2hhckNvZGU6YSxhY2NlbnRPZmZzZXQ6bH19fWkuc2VhY01hcD1vfWNvbnN0IGg9aS5mb250TWF0cml4PzEvTWF0aC5tYXgoLi4uaS5mb250TWF0cml4LnNsaWNlKDAsNCkubWFwKE1hdGguYWJzKSk6MWUzLGw9bmV3IE9wZW5UeXBlRmlsZUJ1aWxkZXIoIk9UVE8iKTtsLmFkZFRhYmxlKCJDRkYgIix0LmRhdGEpO2wuYWRkVGFibGUoIk9TLzIiLGNyZWF0ZU9TMlRhYmxlKGksbykpO2wuYWRkVGFibGUoImNtYXAiLGNyZWF0ZUNtYXBUYWJsZShvLGcsYykpO2wuYWRkVGFibGUoImhlYWQiLCJcMAFcMFwwXDBcMBBcMFwwXDBcMFwwXw88w7VcMFwwIitzYWZlU3RyaW5nMTYoaCkrIlwwXDBcMFwwwp5cdn4nXDBcMFwwXDDCnlx2fidcMFwwIitzYWZlU3RyaW5nMTYoaS5kZXNjZW50KSsiD8O/IitzYWZlU3RyaW5nMTYoaS5hc2NlbnQpK3N0cmluZzE2KGkuaXRhbGljQW5nbGU/MjowKSsiXDARXDBcMFwwXDBcMFwwIik7bC5hZGRUYWJsZSgiaGhlYSIsIlwwAVwwXDAiK3NhZmVTdHJpbmcxNihpLmFzY2VudCkrc2FmZVN0cmluZzE2KGkuZGVzY2VudCkrIlwwXDDDv8O/XDBcMFwwXDBcMFwwIitzYWZlU3RyaW5nMTYoaS5jYXBIZWlnaHQpK3NhZmVTdHJpbmcxNihNYXRoLnRhbihpLml0YWxpY0FuZ2xlKSppLnhIZWlnaHQpKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiK3N0cmluZzE2KGMpKTtsLmFkZFRhYmxlKCJobXR4IixmdW5jdGlvbiBmb250RmllbGRzSG10eCgpe2NvbnN0IGU9dC5jaGFyc3RyaW5ncyxpPXQuY2ZmP3QuY2ZmLndpZHRoczpudWxsO2xldCBhPSJcMFwwXDBcMCI7Zm9yKGxldCB0PTEscj1jO3Q8cjt0Kyspe2xldCByPTA7aWYoZSl7Y29uc3QgaT1lW3QtMV07cj0id2lkdGgiaW4gaT9pLndpZHRoOjB9ZWxzZSBpJiYocj1NYXRoLmNlaWwoaVt0XXx8MCkpO2ErPXN0cmluZzE2KHIpK3N0cmluZzE2KDApfXJldHVybiBhfSgpKTtsLmFkZFRhYmxlKCJtYXhwIiwiXDBcMFBcMCIrc3RyaW5nMTYoYykpO2wuYWRkVGFibGUoIm5hbWUiLGNyZWF0ZU5hbWVUYWJsZShlKSk7bC5hZGRUYWJsZSgicG9zdCIsY3JlYXRlUG9zdFRhYmxlKGkpKTtyZXR1cm4gbC50b0FycmF5KCl9Z2V0IF9zcGFjZVdpZHRoKCl7Y29uc3QgZT1bInNwYWNlIiwibWludXMiLCJvbmUiLCJpIiwiSSJdO2xldCB0O2Zvcihjb25zdCBpIG9mIGUpe2lmKGkgaW4gdGhpcy53aWR0aHMpe3Q9dGhpcy53aWR0aHNbaV07YnJlYWt9Y29uc3QgZT1KaSgpW2ldO2xldCBhPTA7aWYodGhpcy5jb21wb3NpdGUmJnRoaXMuY01hcC5jb250YWlucyhlKSl7YT10aGlzLmNNYXAubG9va3VwKGUpOyJzdHJpbmciPT10eXBlb2YgYSYmKGE9Y29udmVydENpZFN0cmluZyhlLGEpKX0hYSYmdGhpcy50b1VuaWNvZGUmJihhPXRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoZSkpO2E8PTAmJihhPWUpO3Q9dGhpcy53aWR0aHNbYV07aWYodClicmVha31yZXR1cm4gc2hhZG93KHRoaXMsIl9zcGFjZVdpZHRoIix0fHx0aGlzLmRlZmF1bHRXaWR0aCl9X2NoYXJUb0dseXBoKGUsdD0hMSl7bGV0IGksYSxyLHM9dGhpcy5fZ2x5cGhDYWNoZVtlXTtpZihzPy5pc1NwYWNlPT09dClyZXR1cm4gcztsZXQgbj1lO2lmKHRoaXMuY01hcD8uY29udGFpbnMoZSkpe249dGhpcy5jTWFwLmxvb2t1cChlKTsic3RyaW5nIj09dHlwZW9mIG4mJihuPWNvbnZlcnRDaWRTdHJpbmcoZSxuKSl9YT10aGlzLndpZHRoc1tuXTsibnVtYmVyIiE9dHlwZW9mIGEmJihhPXRoaXMuZGVmYXVsdFdpZHRoKTtjb25zdCBvPXRoaXMudm1ldHJpY3M/LltuXTtsZXQgZz10aGlzLnRvVW5pY29kZS5nZXQoZSl8fGU7Im51bWJlciI9PXR5cGVvZiBnJiYoZz1TdHJpbmcuZnJvbUNoYXJDb2RlKGcpKTtsZXQgYz12b2lkIDAhPT10aGlzLnRvRm9udENoYXJbZV07aT10aGlzLnRvRm9udENoYXJbZV18fGU7aWYodGhpcy5taXNzaW5nRmlsZSl7Y29uc3QgdD10aGlzLmRpZmZlcmVuY2VzW2VdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1tlXTtpZigoIi5ub3RkZWYiPT09dHx8IiI9PT10KSYmIlR5cGUxIj09PXRoaXMudHlwZSl7aT0zMjtpZigiIj09PXQpe2F8fD10aGlzLl9zcGFjZVdpZHRoO2c9U3RyaW5nLmZyb21DaGFyQ29kZShpKX19aT1mdW5jdGlvbiBtYXBTcGVjaWFsVW5pY29kZVZhbHVlcyhlKXtyZXR1cm4gZT49NjU1MjAmJmU8PTY1NTM1PzA6ZT49NjI5NzYmJmU8PTYzNzQzP1lpKClbZV18fGU6MTczPT09ZT80NTplfShpKX10aGlzLmlzVHlwZTNGb250JiYocj1pKTtsZXQgQz1udWxsO2lmKHRoaXMuc2VhY01hcD8uW2VdKXtjPSEwO2NvbnN0IHQ9dGhpcy5zZWFjTWFwW2VdO2k9dC5iYXNlRm9udENoYXJDb2RlO0M9e2ZvbnRDaGFyOlN0cmluZy5mcm9tQ29kZVBvaW50KHQuYWNjZW50Rm9udENoYXJDb2RlKSxvZmZzZXQ6dC5hY2NlbnRPZmZzZXR9fWxldCBoPSIiOyJudW1iZXIiPT10eXBlb2YgaSYmKGk8PTExMTQxMTE/aD1TdHJpbmcuZnJvbUNvZGVQb2ludChpKTp3YXJuKGBjaGFyVG9HbHlwaCAtIGludmFsaWQgZm9udENoYXJDb2RlOiAke2l9YCkpO2lmKHRoaXMubWlzc2luZ0ZpbGUmJnRoaXMudmVydGljYWwmJjE9PT1oLmxlbmd0aCl7Y29uc3QgZT1WaSgpW2guY2hhckNvZGVBdCgwKV07ZSYmKGg9Zz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX1zPW5ldyBmb250c19HbHlwaChlLGgsZyxDLGEsbyxyLHQsYyk7cmV0dXJuIHRoaXMuX2dseXBoQ2FjaGVbZV09c31jaGFyc1RvR2x5cGhzKGUpe2xldCB0PXRoaXMuX2NoYXJzQ2FjaGVbZV07aWYodClyZXR1cm4gdDt0PVtdO2lmKHRoaXMuY01hcCl7Y29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpLGE9ZS5sZW5ndGg7bGV0IHI9MDtmb3IoO3I8YTspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxyLGkpO2NvbnN0e2NoYXJjb2RlOmEsbGVuZ3RoOnN9PWk7cis9cztjb25zdCBuPXRoaXMuX2NoYXJUb0dseXBoKGEsMT09PXMmJjMyPT09ZS5jaGFyQ29kZUF0KHItMSkpO3QucHVzaChuKX19ZWxzZSBmb3IobGV0IGk9MCxhPWUubGVuZ3RoO2k8YTsrK2kpe2NvbnN0IGE9ZS5jaGFyQ29kZUF0KGkpLHI9dGhpcy5fY2hhclRvR2x5cGgoYSwzMj09PWEpO3QucHVzaChyKX1yZXR1cm4gdGhpcy5fY2hhcnNDYWNoZVtlXT10fWdldENoYXJQb3NpdGlvbnMoZSl7Y29uc3QgdD1bXTtpZih0aGlzLmNNYXApe2NvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgYT0wO2Zvcig7YTxlLmxlbmd0aDspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxhLGkpO2NvbnN0IHI9aS5sZW5ndGg7dC5wdXNoKFthLGErcl0pO2ErPXJ9fWVsc2UgZm9yKGxldCBpPTAsYT1lLmxlbmd0aDtpPGE7KytpKXQucHVzaChbaSxpKzFdKTtyZXR1cm4gdH1nZXQgZ2x5cGhDYWNoZVZhbHVlcygpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2dseXBoQ2FjaGUpfWVuY29kZVN0cmluZyhlKXtjb25zdCB0PVtdLGk9W10saGFzQ3VycmVudEJ1ZkVycm9ycz0oKT0+dC5sZW5ndGglMj09MSxhPXRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXA/ZT0+dGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihlKTplPT50aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKFN0cmluZy5mcm9tQ29kZVBvaW50KGUpKTtmb3IobGV0IHI9MCxzPWUubGVuZ3RoO3I8cztyKyspe2NvbnN0IHM9ZS5jb2RlUG9pbnRBdChyKTtzPjU1Mjk1JiYoczw1NzM0NHx8cz42NTUzMykmJnIrKztpZih0aGlzLnRvVW5pY29kZSl7Y29uc3QgZT1hKHMpO2lmKC0xIT09ZSl7aWYoaGFzQ3VycmVudEJ1ZkVycm9ycygpKXt0LnB1c2goaS5qb2luKCIiKSk7aS5sZW5ndGg9MH1mb3IobGV0IHQ9KHRoaXMuY01hcD90aGlzLmNNYXAuZ2V0Q2hhckNvZGVMZW5ndGgoZSk6MSktMTt0Pj0wO3QtLSlpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlPj44KnQmMjU1KSk7Y29udGludWV9fWlmKCFoYXNDdXJyZW50QnVmRXJyb3JzKCkpe3QucHVzaChpLmpvaW4oIiIpKTtpLmxlbmd0aD0wfWkucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChzKSl9dC5wdXNoKGkuam9pbigiIikpO3JldHVybiB0fX1jbGFzcyBFcnJvckZvbnR7Y29uc3RydWN0b3IoZSl7dGhpcy5lcnJvcj1lO3RoaXMubG9hZGVkTmFtZT0iZ19mb250X2Vycm9yIjt0aGlzLm1pc3NpbmdGaWxlPSEwfWNoYXJzVG9HbHlwaHMoKXtyZXR1cm5bXX1lbmNvZGVTdHJpbmcoZSl7cmV0dXJuW2VdfWV4cG9ydERhdGEoZT0hMSl7cmV0dXJue2Vycm9yOnRoaXMuZXJyb3J9fX1jb25zdCB5YT0yLHdhPTMsYmE9NCxEYT01LEZhPTYsU2E9NztjbGFzcyBQYXR0ZXJue2NvbnN0cnVjdG9yKCl7dW5yZWFjaGFibGUoIkNhbm5vdCBpbml0aWFsaXplIFBhdHRlcm4uIil9c3RhdGljIHBhcnNlU2hhZGluZyhlLHQsaSxhLHIpe2NvbnN0IHM9ZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/ZS5kaWN0OmUsbj1zLmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKG4pe2Nhc2UgeWE6Y2FzZSB3YTpyZXR1cm4gbmV3IFJhZGlhbEF4aWFsU2hhZGluZyhzLHQsaSxhLHIpO2Nhc2UgYmE6Y2FzZSBEYTpjYXNlIEZhOmNhc2UgU2E6cmV0dXJuIG5ldyBNZXNoU2hhZGluZyhlLHQsaSxhLHIpO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbnN1cHBvcnRlZCBTaGFkaW5nVHlwZTogIituKX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybihlKTtyZXR1cm4gbmV3IER1bW15U2hhZGluZ319fWNsYXNzIEJhc2VTaGFkaW5ne3N0YXRpYyBTTUFMTF9OVU1CRVI9MWUtNjtnZXRJUigpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGdldElSYCBjYWxsZWQuIil9fWNsYXNzIFJhZGlhbEF4aWFsU2hhZGluZyBleHRlbmRzIEJhc2VTaGFkaW5ne2NvbnN0cnVjdG9yKGUsdCxpLGEscil7c3VwZXIoKTt0aGlzLnNoYWRpbmdUeXBlPWUuZ2V0KCJTaGFkaW5nVHlwZSIpO2xldCBzPTA7dGhpcy5zaGFkaW5nVHlwZT09PXlhP3M9NDp0aGlzLnNoYWRpbmdUeXBlPT09d2EmJihzPTYpO3RoaXMuY29vcmRzQXJyPWUuZ2V0QXJyYXkoIkNvb3JkcyIpO2lmKCFpc051bWJlckFycmF5KHRoaXMuY29vcmRzQXJyLHMpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiUmFkaWFsQXhpYWxTaGFkaW5nOiBJbnZhbGlkIC9Db29yZHMgYXJyYXkuIik7Y29uc3Qgbj1Db2xvclNwYWNlLnBhcnNlKHtjczplLmdldFJhdygiQ1MiKXx8ZS5nZXRSYXcoIkNvbG9yU3BhY2UiKSx4cmVmOnQscmVzb3VyY2VzOmkscGRmRnVuY3Rpb25GYWN0b3J5OmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6cn0pO3RoaXMuYmJveD1sb29rdXBOb3JtYWxSZWN0KGUuZ2V0QXJyYXkoIkJCb3giKSxudWxsKTtsZXQgbz0wLGc9MTtjb25zdCBjPWUuZ2V0QXJyYXkoIkRvbWFpbiIpO2lzTnVtYmVyQXJyYXkoYywyKSYmKFtvLGddPWMpO2xldCBDPSExLGg9ITE7Y29uc3QgbD1lLmdldEFycmF5KCJFeHRlbmQiKTsoZnVuY3Rpb24gaXNCb29sZWFuQXJyYXkoZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmKG51bGw9PT10fHxlLmxlbmd0aD09PXQpJiZlLmV2ZXJ5KChlPT4iYm9vbGVhbiI9PXR5cGVvZiBlKSl9KShsLDIpJiYoW0MsaF09bCk7aWYoISh0aGlzLnNoYWRpbmdUeXBlIT09d2F8fEMmJmgpKXtjb25zdFtlLHQsaSxhLHIsc109dGhpcy5jb29yZHNBcnIsbj1NYXRoLmh5cG90KGUtYSx0LXIpO2k8PXMrbiYmczw9aStuJiZ3YXJuKCJVbnN1cHBvcnRlZCByYWRpYWwgZ3JhZGllbnQuIil9dGhpcy5leHRlbmRTdGFydD1DO3RoaXMuZXh0ZW5kRW5kPWg7Y29uc3QgUT1lLmdldFJhdygiRnVuY3Rpb24iKSxFPWEuY3JlYXRlRnJvbUFycmF5KFEpLHU9KGctbykvODQwLGQ9dGhpcy5jb2xvclN0b3BzPVtdO2lmKG8+PWd8fHU8PTApe2luZm8oIkJhZCBzaGFkaW5nIGRvbWFpbi4iKTtyZXR1cm59Y29uc3QgZj1uZXcgRmxvYXQzMkFycmF5KG4ubnVtQ29tcHMpLHA9bmV3IEZsb2F0MzJBcnJheSgxKTtsZXQgbSx5PTA7cFswXT1vO0UocCwwLGYsMCk7bGV0IHc9bi5nZXRSZ2IoZiwwKTtjb25zdCBiPVV0aWwubWFrZUhleENvbG9yKHdbMF0sd1sxXSx3WzJdKTtkLnB1c2goWzAsYl0pO2xldCBEPTE7cFswXT1vK3U7RShwLDAsZiwwKTtsZXQgUz1uLmdldFJnYihmLDApLGs9U1swXS13WzBdKzEsUj1TWzFdLXdbMV0rMSxOPVNbMl0td1syXSsxLEc9U1swXS13WzBdLTEseD1TWzFdLXdbMV0tMSxVPVNbMl0td1syXS0xO2ZvcihsZXQgZT0yO2U8ODQwO2UrKyl7cFswXT1vK2UqdTtFKHAsMCxmLDApO209bi5nZXRSZ2IoZiwwKTtjb25zdCB0PWUteTtrPU1hdGgubWluKGssKG1bMF0td1swXSsxKS90KTtSPU1hdGgubWluKFIsKG1bMV0td1sxXSsxKS90KTtOPU1hdGgubWluKE4sKG1bMl0td1syXSsxKS90KTtHPU1hdGgubWF4KEcsKG1bMF0td1swXS0xKS90KTt4PU1hdGgubWF4KHgsKG1bMV0td1sxXS0xKS90KTtVPU1hdGgubWF4KFUsKG1bMl0td1syXS0xKS90KTtpZighKEc8PWsmJng8PVImJlU8PU4pKXtjb25zdCBlPVV0aWwubWFrZUhleENvbG9yKFNbMF0sU1sxXSxTWzJdKTtkLnB1c2goW0QvODQwLGVdKTtrPW1bMF0tU1swXSsxO1I9bVsxXS1TWzFdKzE7Tj1tWzJdLVNbMl0rMTtHPW1bMF0tU1swXS0xO3g9bVsxXS1TWzFdLTE7VT1tWzJdLVNbMl0tMTt5PUQ7dz1TfUQ9ZTtTPW19Y29uc3QgTT1VdGlsLm1ha2VIZXhDb2xvcihTWzBdLFNbMV0sU1syXSk7ZC5wdXNoKFsxLE1dKTtsZXQgTD0idHJhbnNwYXJlbnQiO2lmKGUuaGFzKCJCYWNrZ3JvdW5kIikpe209bi5nZXRSZ2IoZS5nZXQoIkJhY2tncm91bmQiKSwwKTtMPVV0aWwubWFrZUhleENvbG9yKG1bMF0sbVsxXSxtWzJdKX1pZighQyl7ZC51bnNoaWZ0KFswLExdKTtkWzFdWzBdKz1CYXNlU2hhZGluZy5TTUFMTF9OVU1CRVJ9aWYoIWgpe2QuYXQoLTEpWzBdLT1CYXNlU2hhZGluZy5TTUFMTF9OVU1CRVI7ZC5wdXNoKFsxLExdKX10aGlzLmNvbG9yU3RvcHM9ZH1nZXRJUigpe2NvbnN0e2Nvb3Jkc0FycjplLHNoYWRpbmdUeXBlOnR9PXRoaXM7bGV0IGksYSxyLHMsbjtpZih0PT09eWEpe2E9W2VbMF0sZVsxXV07cj1bZVsyXSxlWzNdXTtzPW51bGw7bj1udWxsO2k9ImF4aWFsIn1lbHNlIGlmKHQ9PT13YSl7YT1bZVswXSxlWzFdXTtyPVtlWzNdLGVbNF1dO3M9ZVsyXTtuPWVbNV07aT0icmFkaWFsIn1lbHNlIHVucmVhY2hhYmxlKGBnZXRQYXR0ZXJuIHR5cGUgdW5rbm93bjogJHt0fWApO3JldHVyblsiUmFkaWFsQXhpYWwiLGksdGhpcy5iYm94LHRoaXMuY29sb3JTdG9wcyxhLHIscyxuXX19Y2xhc3MgTWVzaFN0cmVhbVJlYWRlcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuc3RyZWFtPWU7dGhpcy5jb250ZXh0PXQ7dGhpcy5idWZmZXI9MDt0aGlzLmJ1ZmZlckxlbmd0aD0wO2NvbnN0IGk9dC5udW1Db21wczt0aGlzLnRtcENvbXBzQnVmPW5ldyBGbG9hdDMyQXJyYXkoaSk7Y29uc3QgYT10LmNvbG9yU3BhY2UubnVtQ29tcHM7dGhpcy50bXBDc0NvbXBzQnVmPXQuY29sb3JGbj9uZXcgRmxvYXQzMkFycmF5KGEpOnRoaXMudG1wQ29tcHNCdWZ9Z2V0IGhhc0RhdGEoKXtpZih0aGlzLnN0cmVhbS5lbmQpcmV0dXJuIHRoaXMuc3RyZWFtLnBvczx0aGlzLnN0cmVhbS5lbmQ7aWYodGhpcy5idWZmZXJMZW5ndGg+MClyZXR1cm4hMDtjb25zdCBlPXRoaXMuc3RyZWFtLmdldEJ5dGUoKTtpZihlPDApcmV0dXJuITE7dGhpcy5idWZmZXI9ZTt0aGlzLmJ1ZmZlckxlbmd0aD04O3JldHVybiEwfXJlYWRCaXRzKGUpe2xldCB0PXRoaXMuYnVmZmVyLGk9dGhpcy5idWZmZXJMZW5ndGg7aWYoMzI9PT1lKXtpZigwPT09aSlyZXR1cm4odGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwyNHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDE2fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCkpPj4+MDt0PXQ8PDI0fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MTZ8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDw4fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtjb25zdCBlPXRoaXMuc3RyZWFtLmdldEJ5dGUoKTt0aGlzLmJ1ZmZlcj1lJigxPDxpKS0xO3JldHVybih0PDw4LWl8KDI1NSZlKT4+aSk+Pj4wfWlmKDg9PT1lJiYwPT09aSlyZXR1cm4gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO2Zvcig7aTxlOyl7dD10PDw4fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtpKz04fWktPWU7dGhpcy5idWZmZXJMZW5ndGg9aTt0aGlzLmJ1ZmZlcj10JigxPDxpKS0xO3JldHVybiB0Pj5pfWFsaWduKCl7dGhpcy5idWZmZXI9MDt0aGlzLmJ1ZmZlckxlbmd0aD0wfXJlYWRGbGFnKCl7cmV0dXJuIHRoaXMucmVhZEJpdHModGhpcy5jb250ZXh0LmJpdHNQZXJGbGFnKX1yZWFkQ29vcmRpbmF0ZSgpe2NvbnN0IGU9dGhpcy5jb250ZXh0LmJpdHNQZXJDb29yZGluYXRlLHQ9dGhpcy5yZWFkQml0cyhlKSxpPXRoaXMucmVhZEJpdHMoZSksYT10aGlzLmNvbnRleHQuZGVjb2RlLHI9ZTwzMj8xLygoMTw8ZSktMSk6Mi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDtyZXR1cm5bdCpyKihhWzFdLWFbMF0pK2FbMF0saSpyKihhWzNdLWFbMl0pK2FbMl1dfXJlYWRDb21wb25lbnRzKCl7Y29uc3QgZT10aGlzLmNvbnRleHQubnVtQ29tcHMsdD10aGlzLmNvbnRleHQuYml0c1BlckNvbXBvbmVudCxpPXQ8MzI/MS8oKDE8PHQpLTEpOjIuMzI4MzA2NDM2NTM4Njk2M2UtMTAsYT10aGlzLmNvbnRleHQuZGVjb2RlLHI9dGhpcy50bXBDb21wc0J1Zjtmb3IobGV0IHM9MCxuPTQ7czxlO3MrKyxuKz0yKXtjb25zdCBlPXRoaXMucmVhZEJpdHModCk7cltzXT1lKmkqKGFbbisxXS1hW25dKSthW25dfWNvbnN0IHM9dGhpcy50bXBDc0NvbXBzQnVmO3RoaXMuY29udGV4dC5jb2xvckZuJiZ0aGlzLmNvbnRleHQuY29sb3JGbihyLDAscywwKTtyZXR1cm4gdGhpcy5jb250ZXh0LmNvbG9yU3BhY2UuZ2V0UmdiKHMsMCl9fWxldCBrYT1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGdldEIoZSl7cmV0dXJuIGthW2VdfHw9ZnVuY3Rpb24gYnVpbGRCKGUpe2NvbnN0IHQ9W107Zm9yKGxldCBpPTA7aTw9ZTtpKyspe2NvbnN0IGE9aS9lLHI9MS1hO3QucHVzaChuZXcgRmxvYXQzMkFycmF5KFtyKiozLDMqYSpyKioyLDMqYSoqMipyLGEqKjNdKSl9cmV0dXJuIHR9KGUpfWNsYXNzIE1lc2hTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmd7c3RhdGljIE1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UPTM7c3RhdGljIE1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UPTIwO3N0YXRpYyBUUklBTkdMRV9ERU5TSVRZPTIwO2NvbnN0cnVjdG9yKGUsdCxpLGEscil7c3VwZXIoKTtpZighKGUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk1lc2ggZGF0YSBpcyBub3QgYSBzdHJlYW0iKTtjb25zdCBzPWUuZGljdDt0aGlzLnNoYWRpbmdUeXBlPXMuZ2V0KCJTaGFkaW5nVHlwZSIpO3RoaXMuYmJveD1sb29rdXBOb3JtYWxSZWN0KHMuZ2V0QXJyYXkoIkJCb3giKSxudWxsKTtjb25zdCBuPUNvbG9yU3BhY2UucGFyc2Uoe2NzOnMuZ2V0UmF3KCJDUyIpfHxzLmdldFJhdygiQ29sb3JTcGFjZSIpLHhyZWY6dCxyZXNvdXJjZXM6aSxwZGZGdW5jdGlvbkZhY3Rvcnk6YSxsb2NhbENvbG9yU3BhY2VDYWNoZTpyfSk7dGhpcy5iYWNrZ3JvdW5kPXMuaGFzKCJCYWNrZ3JvdW5kIik/bi5nZXRSZ2Iocy5nZXQoIkJhY2tncm91bmQiKSwwKTpudWxsO2NvbnN0IG89cy5nZXRSYXcoIkZ1bmN0aW9uIiksZz1vP2EuY3JlYXRlRnJvbUFycmF5KG8pOm51bGw7dGhpcy5jb29yZHM9W107dGhpcy5jb2xvcnM9W107dGhpcy5maWd1cmVzPVtdO2NvbnN0IGM9e2JpdHNQZXJDb29yZGluYXRlOnMuZ2V0KCJCaXRzUGVyQ29vcmRpbmF0ZSIpLGJpdHNQZXJDb21wb25lbnQ6cy5nZXQoIkJpdHNQZXJDb21wb25lbnQiKSxiaXRzUGVyRmxhZzpzLmdldCgiQml0c1BlckZsYWciKSxkZWNvZGU6cy5nZXRBcnJheSgiRGVjb2RlIiksY29sb3JGbjpnLGNvbG9yU3BhY2U6bixudW1Db21wczpnPzE6bi5udW1Db21wc30sQz1uZXcgTWVzaFN0cmVhbVJlYWRlcihlLGMpO2xldCBoPSExO3N3aXRjaCh0aGlzLnNoYWRpbmdUeXBlKXtjYXNlIGJhOnRoaXMuX2RlY29kZVR5cGU0U2hhZGluZyhDKTticmVhaztjYXNlIERhOmNvbnN0IGU9MHxzLmdldCgiVmVydGljZXNQZXJSb3ciKTtpZihlPDIpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93Iik7dGhpcy5fZGVjb2RlVHlwZTVTaGFkaW5nKEMsZSk7YnJlYWs7Y2FzZSBGYTp0aGlzLl9kZWNvZGVUeXBlNlNoYWRpbmcoQyk7aD0hMDticmVhaztjYXNlIFNhOnRoaXMuX2RlY29kZVR5cGU3U2hhZGluZyhDKTtoPSEwO2JyZWFrO2RlZmF1bHQ6dW5yZWFjaGFibGUoIlVuc3VwcG9ydGVkIG1lc2ggdHlwZS4iKX1pZihoKXt0aGlzLl91cGRhdGVCb3VuZHMoKTtmb3IobGV0IGU9MCx0PXRoaXMuZmlndXJlcy5sZW5ndGg7ZTx0O2UrKyl0aGlzLl9idWlsZEZpZ3VyZUZyb21QYXRjaChlKX10aGlzLl91cGRhdGVCb3VuZHMoKTt0aGlzLl9wYWNrRGF0YSgpfV9kZWNvZGVUeXBlNFNoYWRpbmcoZSl7Y29uc3QgdD10aGlzLmNvb3JkcyxpPXRoaXMuY29sb3JzLGE9W10scj1bXTtsZXQgcz0wO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3Qgbj1lLnJlYWRGbGFnKCksbz1lLnJlYWRDb29yZGluYXRlKCksZz1lLnJlYWRDb21wb25lbnRzKCk7aWYoMD09PXMpe2lmKCEoMDw9biYmbjw9MikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIHR5cGU0IGZsYWciKTtzd2l0Y2gobil7Y2FzZSAwOnM9MzticmVhaztjYXNlIDE6ci5wdXNoKHIuYXQoLTIpLHIuYXQoLTEpKTtzPTE7YnJlYWs7Y2FzZSAyOnIucHVzaChyLmF0KC0zKSxyLmF0KC0xKSk7cz0xfWEucHVzaChuKX1yLnB1c2godC5sZW5ndGgpO3QucHVzaChvKTtpLnB1c2goZyk7cy0tO2UuYWxpZ24oKX10aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToidHJpYW5nbGVzIixjb29yZHM6bmV3IEludDMyQXJyYXkociksY29sb3JzOm5ldyBJbnQzMkFycmF5KHIpfSl9X2RlY29kZVR5cGU1U2hhZGluZyhlLHQpe2NvbnN0IGk9dGhpcy5jb29yZHMsYT10aGlzLmNvbG9ycyxyPVtdO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3QgdD1lLnJlYWRDb29yZGluYXRlKCkscz1lLnJlYWRDb21wb25lbnRzKCk7ci5wdXNoKGkubGVuZ3RoKTtpLnB1c2godCk7YS5wdXNoKHMpfXRoaXMuZmlndXJlcy5wdXNoKHt0eXBlOiJsYXR0aWNlIixjb29yZHM6bmV3IEludDMyQXJyYXkociksY29sb3JzOm5ldyBJbnQzMkFycmF5KHIpLHZlcnRpY2VzUGVyUm93OnR9KX1fZGVjb2RlVHlwZTZTaGFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5jb29yZHMsaT10aGlzLmNvbG9ycyxhPW5ldyBJbnQzMkFycmF5KDE2KSxyPW5ldyBJbnQzMkFycmF5KDQpO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3Qgcz1lLnJlYWRGbGFnKCk7aWYoISgwPD1zJiZzPD0zKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTYgZmxhZyIpO2NvbnN0IG49dC5sZW5ndGg7Zm9yKGxldCBpPTAsYT0wIT09cz84OjEyO2k8YTtpKyspdC5wdXNoKGUucmVhZENvb3JkaW5hdGUoKSk7Y29uc3Qgbz1pLmxlbmd0aDtmb3IobGV0IHQ9MCxhPTAhPT1zPzI6NDt0PGE7dCsrKWkucHVzaChlLnJlYWRDb21wb25lbnRzKCkpO2xldCBnLGMsQyxoO3N3aXRjaChzKXtjYXNlIDA6YVsxMl09biszO2FbMTNdPW4rNDthWzE0XT1uKzU7YVsxNV09bis2O2FbOF09bisyO2FbMTFdPW4rNzthWzRdPW4rMTthWzddPW4rODthWzBdPW47YVsxXT1uKzExO2FbMl09bisxMDthWzNdPW4rOTtyWzJdPW8rMTtyWzNdPW8rMjtyWzBdPW87clsxXT1vKzM7YnJlYWs7Y2FzZSAxOmc9YVsxMl07Yz1hWzEzXTtDPWFbMTRdO2g9YVsxNV07YVsxMl09aDthWzEzXT1uKzA7YVsxNF09bisxO2FbMTVdPW4rMjthWzhdPUM7YVsxMV09biszO2FbNF09YzthWzddPW4rNDthWzBdPWc7YVsxXT1uKzc7YVsyXT1uKzY7YVszXT1uKzU7Zz1yWzJdO2M9clszXTtyWzJdPWM7clszXT1vO3JbMF09ZztyWzFdPW8rMTticmVhaztjYXNlIDI6Zz1hWzE1XTtjPWFbMTFdO2FbMTJdPWFbM107YVsxM109biswO2FbMTRdPW4rMTthWzE1XT1uKzI7YVs4XT1hWzddO2FbMTFdPW4rMzthWzRdPWM7YVs3XT1uKzQ7YVswXT1nO2FbMV09bis3O2FbMl09bis2O2FbM109bis1O2c9clszXTtyWzJdPXJbMV07clszXT1vO3JbMF09ZztyWzFdPW8rMTticmVhaztjYXNlIDM6YVsxMl09YVswXTthWzEzXT1uKzA7YVsxNF09bisxO2FbMTVdPW4rMjthWzhdPWFbMV07YVsxMV09biszO2FbNF09YVsyXTthWzddPW4rNDthWzBdPWFbM107YVsxXT1uKzc7YVsyXT1uKzY7YVszXT1uKzU7clsyXT1yWzBdO3JbM109bztyWzBdPXJbMV07clsxXT1vKzF9YVs1XT10Lmxlbmd0aDt0LnB1c2goWygtNCp0W2FbMF1dWzBdLXRbYVsxNV1dWzBdKzYqKHRbYVs0XV1bMF0rdFthWzFdXVswXSktMioodFthWzEyXV1bMF0rdFthWzNdXVswXSkrMyoodFthWzEzXV1bMF0rdFthWzddXVswXSkpLzksKC00KnRbYVswXV1bMV0tdFthWzE1XV1bMV0rNioodFthWzRdXVsxXSt0W2FbMV1dWzFdKS0yKih0W2FbMTJdXVsxXSt0W2FbM11dWzFdKSszKih0W2FbMTNdXVsxXSt0W2FbN11dWzFdKSkvOV0pO2FbNl09dC5sZW5ndGg7dC5wdXNoKFsoLTQqdFthWzNdXVswXS10W2FbMTJdXVswXSs2Kih0W2FbMl1dWzBdK3RbYVs3XV1bMF0pLTIqKHRbYVswXV1bMF0rdFthWzE1XV1bMF0pKzMqKHRbYVs0XV1bMF0rdFthWzE0XV1bMF0pKS85LCgtNCp0W2FbM11dWzFdLXRbYVsxMl1dWzFdKzYqKHRbYVsyXV1bMV0rdFthWzddXVsxXSktMioodFthWzBdXVsxXSt0W2FbMTVdXVsxXSkrMyoodFthWzRdXVsxXSt0W2FbMTRdXVsxXSkpLzldKTthWzldPXQubGVuZ3RoO3QucHVzaChbKC00KnRbYVsxMl1dWzBdLXRbYVszXV1bMF0rNioodFthWzhdXVswXSt0W2FbMTNdXVswXSktMioodFthWzBdXVswXSt0W2FbMTVdXVswXSkrMyoodFthWzExXV1bMF0rdFthWzFdXVswXSkpLzksKC00KnRbYVsxMl1dWzFdLXRbYVszXV1bMV0rNioodFthWzhdXVsxXSt0W2FbMTNdXVsxXSktMioodFthWzBdXVsxXSt0W2FbMTVdXVsxXSkrMyoodFthWzExXV1bMV0rdFthWzFdXVsxXSkpLzldKTthWzEwXT10Lmxlbmd0aDt0LnB1c2goWygtNCp0W2FbMTVdXVswXS10W2FbMF1dWzBdKzYqKHRbYVsxMV1dWzBdK3RbYVsxNF1dWzBdKS0yKih0W2FbMTJdXVswXSt0W2FbM11dWzBdKSszKih0W2FbMl1dWzBdK3RbYVs4XV1bMF0pKS85LCgtNCp0W2FbMTVdXVsxXS10W2FbMF1dWzFdKzYqKHRbYVsxMV1dWzFdK3RbYVsxNF1dWzFdKS0yKih0W2FbMTJdXVsxXSt0W2FbM11dWzFdKSszKih0W2FbMl1dWzFdK3RbYVs4XV1bMV0pKS85XSk7dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KHIpfSl9fV9kZWNvZGVUeXBlN1NoYWRpbmcoZSl7Y29uc3QgdD10aGlzLmNvb3JkcyxpPXRoaXMuY29sb3JzLGE9bmV3IEludDMyQXJyYXkoMTYpLHI9bmV3IEludDMyQXJyYXkoNCk7Zm9yKDtlLmhhc0RhdGE7KXtjb25zdCBzPWUucmVhZEZsYWcoKTtpZighKDA8PXMmJnM8PTMpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNyBmbGFnIik7Y29uc3Qgbj10Lmxlbmd0aDtmb3IobGV0IGk9MCxhPTAhPT1zPzEyOjE2O2k8YTtpKyspdC5wdXNoKGUucmVhZENvb3JkaW5hdGUoKSk7Y29uc3Qgbz1pLmxlbmd0aDtmb3IobGV0IHQ9MCxhPTAhPT1zPzI6NDt0PGE7dCsrKWkucHVzaChlLnJlYWRDb21wb25lbnRzKCkpO2xldCBnLGMsQyxoO3N3aXRjaChzKXtjYXNlIDA6YVsxMl09biszO2FbMTNdPW4rNDthWzE0XT1uKzU7YVsxNV09bis2O2FbOF09bisyO2FbOV09bisxMzthWzEwXT1uKzE0O2FbMTFdPW4rNzthWzRdPW4rMTthWzVdPW4rMTI7YVs2XT1uKzE1O2FbN109bis4O2FbMF09bjthWzFdPW4rMTE7YVsyXT1uKzEwO2FbM109bis5O3JbMl09bysxO3JbM109bysyO3JbMF09bztyWzFdPW8rMzticmVhaztjYXNlIDE6Zz1hWzEyXTtjPWFbMTNdO0M9YVsxNF07aD1hWzE1XTthWzEyXT1oO2FbMTNdPW4rMDthWzE0XT1uKzE7YVsxNV09bisyO2FbOF09QzthWzldPW4rOTthWzEwXT1uKzEwO2FbMTFdPW4rMzthWzRdPWM7YVs1XT1uKzg7YVs2XT1uKzExO2FbN109bis0O2FbMF09ZzthWzFdPW4rNzthWzJdPW4rNjthWzNdPW4rNTtnPXJbMl07Yz1yWzNdO3JbMl09YztyWzNdPW87clswXT1nO3JbMV09bysxO2JyZWFrO2Nhc2UgMjpnPWFbMTVdO2M9YVsxMV07YVsxMl09YVszXTthWzEzXT1uKzA7YVsxNF09bisxO2FbMTVdPW4rMjthWzhdPWFbN107YVs5XT1uKzk7YVsxMF09bisxMDthWzExXT1uKzM7YVs0XT1jO2FbNV09bis4O2FbNl09bisxMTthWzddPW4rNDthWzBdPWc7YVsxXT1uKzc7YVsyXT1uKzY7YVszXT1uKzU7Zz1yWzNdO3JbMl09clsxXTtyWzNdPW87clswXT1nO3JbMV09bysxO2JyZWFrO2Nhc2UgMzphWzEyXT1hWzBdO2FbMTNdPW4rMDthWzE0XT1uKzE7YVsxNV09bisyO2FbOF09YVsxXTthWzldPW4rOTthWzEwXT1uKzEwO2FbMTFdPW4rMzthWzRdPWFbMl07YVs1XT1uKzg7YVs2XT1uKzExO2FbN109bis0O2FbMF09YVszXTthWzFdPW4rNzthWzJdPW4rNjthWzNdPW4rNTtyWzJdPXJbMF07clszXT1vO3JbMF09clsxXTtyWzFdPW8rMX10aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToicGF0Y2giLGNvb3JkczpuZXcgSW50MzJBcnJheShhKSxjb2xvcnM6bmV3IEludDMyQXJyYXkocil9KX19X2J1aWxkRmlndXJlRnJvbVBhdGNoKGUpe2NvbnN0IHQ9dGhpcy5maWd1cmVzW2VdO2Fzc2VydCgicGF0Y2giPT09dC50eXBlLCJVbmV4cGVjdGVkIHBhdGNoIG1lc2ggZmlndXJlIik7Y29uc3QgaT10aGlzLmNvb3JkcyxhPXRoaXMuY29sb3JzLHI9dC5jb29yZHMscz10LmNvbG9ycyxuPU1hdGgubWluKGlbclswXV1bMF0saVtyWzNdXVswXSxpW3JbMTJdXVswXSxpW3JbMTVdXVswXSksbz1NYXRoLm1pbihpW3JbMF1dWzFdLGlbclszXV1bMV0saVtyWzEyXV1bMV0saVtyWzE1XV1bMV0pLGc9TWF0aC5tYXgoaVtyWzBdXVswXSxpW3JbM11dWzBdLGlbclsxMl1dWzBdLGlbclsxNV1dWzBdKSxjPU1hdGgubWF4KGlbclswXV1bMV0saVtyWzNdXVsxXSxpW3JbMTJdXVsxXSxpW3JbMTVdXVsxXSk7bGV0IEM9TWF0aC5jZWlsKChnLW4pKk1lc2hTaGFkaW5nLlRSSUFOR0xFX0RFTlNJVFkvKHRoaXMuYm91bmRzWzJdLXRoaXMuYm91bmRzWzBdKSk7Qz1NYXRoLm1heChNZXNoU2hhZGluZy5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihNZXNoU2hhZGluZy5NQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxDKSk7bGV0IGg9TWF0aC5jZWlsKChjLW8pKk1lc2hTaGFkaW5nLlRSSUFOR0xFX0RFTlNJVFkvKHRoaXMuYm91bmRzWzNdLXRoaXMuYm91bmRzWzFdKSk7aD1NYXRoLm1heChNZXNoU2hhZGluZy5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihNZXNoU2hhZGluZy5NQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxoKSk7Y29uc3QgbD1DKzEsUT1uZXcgSW50MzJBcnJheSgoaCsxKSpsKSxFPW5ldyBJbnQzMkFycmF5KChoKzEpKmwpO2xldCB1PTA7Y29uc3QgZD1uZXcgVWludDhBcnJheSgzKSxmPW5ldyBVaW50OEFycmF5KDMpLHA9YVtzWzBdXSxtPWFbc1sxXV0seT1hW3NbMl1dLHc9YVtzWzNdXSxiPWdldEIoaCksRD1nZXRCKEMpO2ZvcihsZXQgZT0wO2U8PWg7ZSsrKXtkWzBdPShwWzBdKihoLWUpK3lbMF0qZSkvaHwwO2RbMV09KHBbMV0qKGgtZSkreVsxXSplKS9ofDA7ZFsyXT0ocFsyXSooaC1lKSt5WzJdKmUpL2h8MDtmWzBdPShtWzBdKihoLWUpK3dbMF0qZSkvaHwwO2ZbMV09KG1bMV0qKGgtZSkrd1sxXSplKS9ofDA7ZlsyXT0obVsyXSooaC1lKSt3WzJdKmUpL2h8MDtmb3IobGV0IHQ9MDt0PD1DO3QrKyx1Kyspe2lmKCEoMCE9PWUmJmUhPT1ofHwwIT09dCYmdCE9PUMpKWNvbnRpbnVlO2xldCBzPTAsbj0wLG89MDtmb3IobGV0IGE9MDthPD0zO2ErKylmb3IobGV0IGc9MDtnPD0zO2crKyxvKyspe2NvbnN0IGM9YltlXVthXSpEW3RdW2ddO3MrPWlbcltvXV1bMF0qYztuKz1pW3Jbb11dWzFdKmN9UVt1XT1pLmxlbmd0aDtpLnB1c2goW3Msbl0pO0VbdV09YS5sZW5ndGg7Y29uc3QgZz1uZXcgVWludDhBcnJheSgzKTtnWzBdPShkWzBdKihDLXQpK2ZbMF0qdCkvQ3wwO2dbMV09KGRbMV0qKEMtdCkrZlsxXSp0KS9DfDA7Z1syXT0oZFsyXSooQy10KStmWzJdKnQpL0N8MDthLnB1c2goZyl9fVFbMF09clswXTtFWzBdPXNbMF07UVtDXT1yWzNdO0VbQ109c1sxXTtRW2wqaF09clsxMl07RVtsKmhdPXNbMl07UVtsKmgrQ109clsxNV07RVtsKmgrQ109c1szXTt0aGlzLmZpZ3VyZXNbZV09e3R5cGU6ImxhdHRpY2UiLGNvb3JkczpRLGNvbG9yczpFLHZlcnRpY2VzUGVyUm93Omx9fV91cGRhdGVCb3VuZHMoKXtsZXQgZT10aGlzLmNvb3Jkc1swXVswXSx0PXRoaXMuY29vcmRzWzBdWzFdLGk9ZSxhPXQ7Zm9yKGxldCByPTEscz10aGlzLmNvb3Jkcy5sZW5ndGg7cjxzO3IrKyl7Y29uc3Qgcz10aGlzLmNvb3Jkc1tyXVswXSxuPXRoaXMuY29vcmRzW3JdWzFdO2U9ZT5zP3M6ZTt0PXQ+bj9uOnQ7aT1pPHM/czppO2E9YTxuP246YX10aGlzLmJvdW5kcz1bZSx0LGksYV19X3BhY2tEYXRhKCl7bGV0IGUsdCxpLGE7Y29uc3Qgcj10aGlzLmNvb3JkcyxzPW5ldyBGbG9hdDMyQXJyYXkoMipyLmxlbmd0aCk7Zm9yKGU9MCxpPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PXJbZV07c1tpKytdPXRbMF07c1tpKytdPXRbMV19dGhpcy5jb29yZHM9cztjb25zdCBuPXRoaXMuY29sb3JzLG89bmV3IFVpbnQ4QXJyYXkoMypuLmxlbmd0aCk7Zm9yKGU9MCxpPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PW5bZV07b1tpKytdPXRbMF07b1tpKytdPXRbMV07b1tpKytdPXRbMl19dGhpcy5jb2xvcnM9bztjb25zdCBnPXRoaXMuZmlndXJlcztmb3IoZT0wLHQ9Zy5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1nW2VdLHI9dC5jb29yZHMscz10LmNvbG9ycztmb3IoaT0wLGE9ci5sZW5ndGg7aTxhO2krKyl7cltpXSo9MjtzW2ldKj0zfX19Z2V0SVIoKXtjb25zdHtib3VuZHM6ZX09dGhpcztpZihlWzJdLWVbMF09PTB8fGVbM10tZVsxXT09MCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgTWVzaFNoYWRpbmcgYm91bmRzOiBbJHtlfV0uYCk7cmV0dXJuWyJNZXNoIix0aGlzLnNoYWRpbmdUeXBlLHRoaXMuY29vcmRzLHRoaXMuY29sb3JzLHRoaXMuZmlndXJlcyxlLHRoaXMuYmJveCx0aGlzLmJhY2tncm91bmRdfX1jbGFzcyBEdW1teVNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZ3tnZXRJUigpe3JldHVyblsiRHVtbXkiXX19ZnVuY3Rpb24gZ2V0VGlsaW5nUGF0dGVybklSKGUsdCxpKXtjb25zdCByPWxvb2t1cE1hdHJpeCh0LmdldEFycmF5KCJNYXRyaXgiKSxhKSxzPWxvb2t1cE5vcm1hbFJlY3QodC5nZXRBcnJheSgiQkJveCIpLG51bGwpO2lmKCFzfHxzWzJdLXNbMF09PTB8fHNbM10tc1sxXT09MCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgZ2V0VGlsaW5nUGF0dGVybklSIC9CQm94IGFycmF5LiIpO2NvbnN0IG49dC5nZXQoIlhTdGVwIik7aWYoIm51bWJlciIhPXR5cGVvZiBuKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBnZXRUaWxpbmdQYXR0ZXJuSVIgL1hTdGVwIHZhbHVlLiIpO2NvbnN0IG89dC5nZXQoIllTdGVwIik7aWYoIm51bWJlciIhPXR5cGVvZiBvKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBnZXRUaWxpbmdQYXR0ZXJuSVIgL1lTdGVwIHZhbHVlLiIpO2NvbnN0IGc9dC5nZXQoIlBhaW50VHlwZSIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGcpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBnZXRUaWxpbmdQYXR0ZXJuSVIgL1BhaW50VHlwZSB2YWx1ZS4iKTtjb25zdCBjPXQuZ2V0KCJUaWxpbmdUeXBlIik7aWYoIU51bWJlci5pc0ludGVnZXIoYykpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvVGlsaW5nVHlwZSB2YWx1ZS4iKTtyZXR1cm5bIlRpbGluZ1BhdHRlcm4iLGksZSxyLHMsbixvLGcsY119Y29uc3QgUmE9WzEuMzg3NywxLDEsMSwuOTc4MDEsLjkyNDgyLC44OTU1MiwuOTExMzMsLjgxOTg4LC45NzU2NiwuOTgxNTIsLjkzNTQ4LC45MzU0OCwxLjI3OTgsLjg1Mjg0LC45Mjc5NCwxLC45NjEzNCwxLjU0NjU3LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuODI4NDUsLjgyODQ1LC44NTI4NCwuODUyODQsLjg1Mjg0LC43NTg1OSwuOTIxMzgsLjgzOTA4LC43NzYyLC43MzI5MywuODcyODksLjczMTMzLC43NTE0LC44MTkyMSwuODczNTYsLjk1OTU4LC41OTUyNiwuNzU3MjcsLjY5MjI1LDEuMDQ5MjQsLjkxMjEsLjg2OTQzLC43OTc5NSwuODgxOTgsLjc3OTU4LC43MDg2NCwuODEwNTUsLjkwMzk5LC44ODY1MywuOTYwMTcsLjgyNTc3LC43Nzg5MiwuNzgyNTcsLjk3NTA3LDEuNTQ2NTcsLjk3NTA3LC44NTI4NCwuODk1NTIsLjkwMTc2LC44ODc2MiwuODc4NSwuNzUyNDEsLjg3ODUsLjkwNTE4LC45NTAxNSwuNzc2MTgsLjg3ODUsLjg4NDAxLC45MTkxNiwuODYzMDQsLjg4NDAxLC45MTQ4OCwuODc4NSwuODgwMSwuODc4NSwuODc4NSwuOTEzNDMsLjcxNzMsMS4wNDEwNiwuODc4NSwuODUwNzUsLjk1Nzk0LC44MjYxNiwuODUxNjIsLjc5NDkyLC44ODMzMSwxLjY5ODA4LC44ODMzMSwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjc4MDEsLjg5NTUyLDEuMjQ0ODcsMS4xMzI1NCwxLjEyNDAxLC45NjgzOSwuODUyODQsLjY4Nzg3LC43MDY0NSwuODU1OTIsLjkwNzQ3LDEuMDE0NjYsMS4wMDg4LC45MDMyMywxLDEuMDc0NjMsMSwuOTEwNTYsLjc1ODA2LDEuMTkxMTgsLjk2ODM5LC43ODg2NCwuODI4NDUsLjg0MTMzLC43NTg1OSwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuNzc1MzksLjczMjkzLC43MzEzMywuNzMxMzMsLjczMTMzLC43MzEzMywuOTU5NTgsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjg4NTA2LC45MTIxLC44Njk0MywuODY5NDMsLjg2OTQzLC44Njk0MywuODY5NDMsLjg1Mjg0LC44NzUwOCwuOTAzOTksLjkwMzk5LC45MDM5OSwuOTAzOTksLjc3ODkyLC43OTc5NSwuOTA4MDcsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg3MTUsLjc1MjQxLC45MDUxOCwuOTA1MTgsLjkwNTE4LC45MDUxOCwuODg0MDEsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg3ODUsLjg3ODUsLjg4MDEsLjg4MDEsLjg4MDEsLjg4MDEsLjg4MDEsLjkwNzQ3LC44OTA0OSwuODc4NSwuODc4NSwuODc4NSwuODc4NSwuODUxNjIsLjg3ODUsLjg1MTYyLC44MzkwOCwuODg3NjIsLjgzOTA4LC44ODc2MiwuODM5MDgsLjg4NzYyLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjg3Mjg5LC44MzAxNiwuODg1MDYsLjkzMTI1LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuODE5MjEsLjc3NjE4LC44MTkyMSwuNzc2MTgsLjgxOTIxLC43NzYxOCwxLDEsLjg3MzU2LC44Nzg1LC45MTA3NSwuODk2MDgsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC43NjIyOSwuOTAxNjcsLjU5NTI2LC45MTkxNiwxLDEsLjg2MzA0LC42OTIyNSwuODg0MDEsMSwxLC43MDQyNCwuNzk0NjgsLjkxOTI2LC44ODE3NSwuNzA4MjMsLjk0OTAzLC45MTIxLC44Nzg1LDEsMSwuOTEyMSwuODc4NSwuODc4MDIsLjg4NjU2LC44Nzg1LC44Njk0MywuODgwMSwuODY5NDMsLjg4MDEsLjg2OTQzLC44ODAxLC44NzQwMiwuODkyOTEsLjc3OTU4LC45MTM0MywxLDEsLjc3OTU4LC45MTM0MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsMSwxLC44MTA1NSwuNzU4NDEsLjgxMDU1LDEuMDY0NTIsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjk2MDE3LC45NTc5NCwuNzc4OTIsLjg1MTYyLC43Nzg5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuOTI5NywuNTY4OTIsLjgzOTA4LC44ODc2MiwuNzc1MzksLjg3MTUsLjg3NTA4LC44OTA0OSwxLDEsLjgxMDU1LDEuMDQxMDYsMS4yMDUyOCwxLjIwNTI4LDEsMS4xNTU0MywuNzA2NzQsLjk4Mzg3LC45NDcyMSwxLjMzNDMxLDEuNDU4OTQsLjk1MTYxLDEuMDYzMDMsLjgzOTA4LC44MDM1MiwuNTcxODQsLjY5NjUsLjU2Mjg5LC44MjAwMSwuNTYwMjksLjgxMjM1LDEuMDI5ODgsLjgzOTA4LC43NzYyLC42ODE1NiwuODAzNjcsLjczMTMzLC43ODI1NywuODczNTYsLjg2OTQzLC45NTk1OCwuNzU3MjcsLjg5MDE5LDEuMDQ5MjQsLjkxMjEsLjc2NDgsLjg2OTQzLC44NzM1NiwuNzk3OTUsLjc4Mjc1LC44MTA1NSwuNzc4OTIsLjk3NjIsLjgyNTc3LC45OTgxOSwuODQ4OTYsLjk1OTU4LC43Nzg5MiwuOTYxMDgsMS4wMTQwNywuODkwNDksMS4wMjk4OCwuOTQyMTEsLjk2MTA4LC44OTM2LC44NDAyMSwuODc4NDIsLjk2Mzk5LC43OTEwOSwuODkwNDksMS4wMDgxMywxLjAyOTg4LC44NjA3NywuODc0NDUsLjkyMDk5LC44NDcyMywuODY1MTMsLjg4MDEsLjc1NjM4LC44NTcxNCwuNzgyMTYsLjc5NTg2LC44Nzk2NSwuOTQyMTEsLjk3NzQ3LC43ODI4NywuOTc5MjYsLjg0OTcxLDEuMDI5ODgsLjk0MjExLC44ODAxLC45NDIxMSwuODQ5NzEsLjczMTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDI2NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA1MTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNTQ4LDEsMSwxLDEsMSwxLC45NjAxNywuOTU3OTQsLjk2MDE3LC45NTc5NCwuOTYwMTcsLjk1Nzk0LC43Nzg5MiwuODUxNjIsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAzNjMsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjkyNzk0LC44NzAxMiwuODcwMTIsLjg3MDEyLC44OTU1MiwuODk1NTIsMS40MjI1OSwuNzExNDMsMS4wNjE1MiwxLDEsMS4wMzM3MiwxLjAzMzcyLC45NzE3MSwxLjQ5NTYsMi4yODA3LC45MzgzNSwuODM0MDYsLjkxMTMzLC44NDEwNywuOTExMzMsMSwxLDEsLjcyMDIxLDEsMS4yMzEwOCwuODM0ODksLjg4NTI1LC44ODUyNSwuODE0OTksLjkwNTI3LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4zMTAwNiwxLjUzNzExLC45NDQzNCwxLjA4Njk2LDEsLjk1MDE4LC43NzE5MiwuODUyODQsLjkwNzQ3LDEuMTc1MzQsLjY5ODI1LC45NzE2LDEuMzcwNzcsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjA4MDA0LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNzI3LC45MDcyNywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sTmE9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9LEdhPVsxLjM4NzcsMSwxLDEsLjk3ODAxLC45MjQ4MiwuODk1NTIsLjkxMTMzLC44MTk4OCwuOTc1NjYsLjk4MTUyLC45MzU0OCwuOTM1NDgsMS4yNzk4LC44NTI4NCwuOTI3OTQsMSwuOTYxMzQsMS41NjIzOSwuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjgyODQ1LC44Mjg0NSwuODUyODQsLjg1Mjg0LC44NTI4NCwuNzU4NTksLjkyMTM4LC44MzkwOCwuNzc2MiwuNzE4MDUsLjg3Mjg5LC43MzEzMywuNzUxNCwuODE5MjEsLjg3MzU2LC45NTk1OCwuNTk1MjYsLjc1NzI3LC42OTIyNSwxLjA0OTI0LC45MDg3MiwuODU5MzgsLjc5Nzk1LC44NzA2OCwuNzc5NTgsLjY5NzY2LC44MTA1NSwuOTAzOTksLjg4NjUzLC45NjA2OCwuODI1NzcsLjc3ODkyLC43ODI1NywuOTc1MDcsMS41MjksLjk3NTA3LC44NTI4NCwuODk1NTIsLjkwMTc2LC45NDkwOCwuODY0MTEsLjc0MDEyLC44NjQxMSwuODgzMjMsLjk1MDE1LC44NjQxMSwuODYzMzEsLjg4NDAxLC45MTkxNiwuODYzMDQsLjg4NDAxLC45MDM5LC44NjMzMSwuODYzMzEsLjg2NDExLC44NjQxMSwuOTA0NjQsLjcwODUyLDEuMDQxMDYsLjg2MzMxLC44NDM3MiwuOTU3OTQsLjgyNjE2LC44NDU0OCwuNzk0OTIsLjg4MzMxLDEuNjk4MDgsLjg4MzMxLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuNzgwMSwuODk1NTIsMS4yNDQ4NywxLjEzMjU0LDEuMTkxMjksLjk2ODM5LC44NTI4NCwuNjg3ODcsLjcwNjQ1LC44NTU5MiwuOTA3NDcsMS4wMTQ2NiwxLjAwODgsLjkwMzIzLDEsMS4wNzQ2MywxLC45MTA1NiwuNzU4MDYsMS4xOTExOCwuOTY4MzksLjc4ODY0LC44Mjg0NSwuODQxMzMsLjc1ODU5LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC43NzUzOSwuNzE4MDUsLjczMTMzLC43MzEzMywuNzMxMzMsLjczMTMzLC45NTk1OCwuOTU5NTgsLjk1OTU4LC45NTk1OCwuODg1MDYsLjkwODcyLC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1Mjg0LC44NzA2OCwuOTAzOTksLjkwMzk5LC45MDM5OSwuOTAzOTksLjc3ODkyLC43OTc5NSwuOTA4MDcsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjg1ODg3LC43NDAxMiwuODgzMjMsLjg4MzIzLC44ODMyMywuODgzMjMsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg4NDAxLC44Nzg1LC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC45MDc0NywuODkwNDksLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NDU0OCwuODY0MTEsLjg0NTQ4LC44MzkwOCwuOTQ5MDgsLjgzOTA4LC45NDkwOCwuODM5MDgsLjk0OTA4LC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjg3Mjg5LC43OTUzOCwuODg1MDYsLjkyNzI2LC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuODE5MjEsLjg2NDExLC44MTkyMSwuODY0MTEsLjgxOTIxLC44NjQxMSwxLDEsLjg3MzU2LC44NjMzMSwuOTEwNzUsLjg3NzcsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC43NjQ2NywuOTAxNjcsLjU5NTI2LC45MTkxNiwxLDEsLjg2MzA0LC42OTIyNSwuODg0MDEsMSwxLC43MDQyNCwuNzczMTIsLjkxOTI2LC44ODE3NSwuNzA4MjMsLjk0OTAzLC45MDg3MiwuODYzMzEsMSwxLC45MDg3MiwuODYzMzEsLjg2OTA2LC44ODExNiwuODYzMzEsLjg1OTM4LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg3NDAyLC44NjU0OSwuNzc5NTgsLjkwNDY0LDEsMSwuNzc5NTgsLjkwNDY0LC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsMSwxLC44MTA1NSwuNzU4NDEsLjgxMDU1LDEuMDY0NTIsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjk2MDY4LC45NTc5NCwuNzc4OTIsLjg0NTQ4LC43Nzg5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuOTI5NywuNTY4OTIsLjgzOTA4LC45NDkwOCwuNzc1MzksLjg1ODg3LC44NzA2OCwuODkwNDksMSwxLC44MTA1NSwxLjA0MTA2LDEuMjA1MjgsMS4yMDUyOCwxLDEuMTU1NDMsLjcwMDg4LC45ODM4NywuOTQ3MjEsMS4zMzQzMSwxLjQ1ODk0LC45NTE2MSwxLjQ4Mzg3LC44MzkwOCwuODAzNTIsLjU3MTE4LC42OTY1LC41NjM0NywuNzkxNzksLjU1ODUzLC44MDM0NiwxLjAyOTg4LC44MzkwOCwuNzc2MiwuNjcxNzQsLjg2MDM2LC43MzEzMywuNzgyNTcsLjg3MzU2LC44NjQ0MSwuOTU5NTgsLjc1NzI3LC44OTAxOSwxLjA0OTI0LC45MDg3MiwuNzQ4ODksLjg1OTM4LC44Nzg5MSwuNzk3OTUsLjc5NTcsLjgxMDU1LC43Nzg5MiwuOTc0NDcsLjgyNTc3LC45NzQ2NiwuODcxNzksLjk1OTU4LC43Nzg5MiwuOTQyNTIsLjk1NjEyLC44NzUzLDEuMDI5ODgsLjkyNzMzLC45NDI1MiwuODc0MTEsLjg0MDIxLC44NzI4LC45NTYxMiwuNzQwODEsLjg3NTMsMS4wMjE4OSwxLjAyOTg4LC44NDgxNCwuODc0NDUsLjkxODIyLC44NDcyMywuODU2NjgsLjg2MzMxLC44MTM0NCwuODc1ODEsLjc2NDIyLC44MjA0NiwuOTYwNTcsLjkyNzMzLC45OTM3NSwuNzgwMjIsLjk1NDUyLC44NjAxNSwxLjAyOTg4LC45MjczMywuODYzMzEsLjkyNzMzLC44NjAxNSwuNzMxMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNjMxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44ODMyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODUxNzQsMSwxLDEsMSwxLDEsLjk2MDY4LC45NTc5NCwuOTYwNjgsLjk1Nzk0LC45NjA2OCwuOTU3OTQsLjc3ODkyLC44NDU0OCwxLDEsLjg5NTUyLC45MDUyNywxLC45MDM2MywuOTI3OTQsLjkyNzk0LC45Mjc5NCwuODk4MDcsLjg3MDEyLC44NzAxMiwuODcwMTIsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC43MTA5NCwxLjA2MTUyLDEsMSwxLjAzMzcyLDEuMDMzNzIsLjk3MTcxLDEuNDk1NiwyLjI4MDcsLjkyOTcyLC44MzQwNiwuOTExMzMsLjgzMzI2LC45MTEzMywxLDEsMSwuNzIwMjEsMSwxLjIzMTA4LC44MzQ4OSwuODg1MjUsLjg4NTI1LC44MTQ5OSwuOTA2MTYsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjMxMDcsMS41MzcxMSwuOTQ0MzQsMS4wODY5NiwxLC45NTAxOCwuNzcxOTIsLjg1Mjg0LC45MDc0NywxLjE3NTM0LC42OTgyNSwuOTcxNiwxLjM3MDc3LC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wODAwNCwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDcyNywuOTA3MjcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHhhPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fSxVYT1bMS4zODc3LDEsMSwxLDEuMTcyMjMsMS4xMjkzLC44OTU1MiwuOTExMzMsLjgwMzk1LDEuMDIyNjksMS4xNTYwMSwuOTEwNTYsLjkxMDU2LDEuMjc5OCwuODUyODQsLjg5ODA3LDEsLjkwODYxLDEuMzk1NDMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45NjMwOSwuOTYzMDksLjg1Mjg0LC44NTI4NCwuODUyODQsLjgzMzE5LC44ODA3MSwuODY3NSwuODE1NTIsLjcyMzQ2LC44NTE5MywuNzMyMDYsLjc1MjIsLjgxMTA1LC44NjI3NSwuOTA2ODUsLjYzNzcsLjc3ODkyLC43NTU5MywxLjAyNjM4LC44OTI0OSwuODQxMTgsLjc3NDUyLC44NTM3NCwuNzUxODYsLjY3Nzg5LC43OTc3NiwuODg4NDQsLjg1MDY2LC45NDMwOSwuNzc4MTgsLjczMDYsLjc2NjU5LDEuMTAzNjksMS4zODMxMywxLjEwMzY5LDEuMDYxMzksLjg5NTUyLC44NzM5LC45MjQ1LC45MjQ1LC44MzIwMywuOTI0NSwuODU4NjUsMS4wOTg0MiwuOTI0NSwuOTI0NSwxLjAzMjk3LDEuMDc2OTIsLjkwOTE4LDEuMDMyOTcsLjk0OTU5LC45MjQ1LC45MjI3NCwuOTI0NSwuOTI0NSwxLjAyOTMzLC43NzgzMiwxLjIwNTYyLC45MjQ1LC44OTE2LC45ODk4NiwuODY2MjEsLjg5NDUzLC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMTYzNTksLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzIzNDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5MjQ5LC44NDExOCwuODQxMTgsLjg0MTE4LC44NDExOCwuODQxMTgsLjg1Mjg0LC44NDU1NywuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODQ4NDMsLjgzMjAzLC44NTg2NSwuODU4NjUsLjg1ODY1LC44NTg2NSwuODI2MDEsLjgyNjAxLC44MjYwMSwuODI2MDEsLjk0NDY5LC45MjQ1LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkwNzQ3LC44NjY1MSwuOTI0NSwuOTI0NSwuOTI0NSwuOTI0NSwuODk0NTMsLjkyNDUsLjg5NDUzLC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC44Njc1LC45MjQ1LC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjg1MTkzLC44ODc1LC44NjQ3NywuOTkwMzQsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC44MTEwNSwuOTI0NSwuODExMDUsLjkyNDUsLjgxMTA1LC45MjQ1LDEsMSwuODYyNzUsLjkyNDUsLjkwODcyLC45MzU5MSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsMS4wMzI5NywuOTA2ODUsLjgyNjAxLC43Nzg5NiwxLjA1NjExLC42Mzc3LDEuMDc2OTIsMSwxLC45MDkxOCwuNzU1OTMsMS4wMzI5NywxLDEsLjc2MDMyLC45Mzc1LC45ODE1NiwuOTM0MDcsLjc3MjYxLDEuMTE0MjksLjg5MjQ5LC45MjQ1LDEsMSwuODkyNDksLjkyNDUsLjkyNTM0LC44NjY5OCwuOTI0NSwuODQxMTgsLjkyMjc0LC44NDExOCwuOTIyNzQsLjg0MTE4LC45MjI3NCwuODY2NywuODYyOTEsLjc1MTg2LDEuMDI5MzMsMSwxLC43NTE4NiwxLjAyOTMzLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsMSwxLC43OTc3NiwuOTc2NTUsLjc5Nzc2LDEuMjMwMjMsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsLjczMDYsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsMS4wOTIzMSwuNTQ4NzMsLjg2NzUsLjkyNDUsLjc2MzE4LC44NDg0MywuODQ1NTcsLjg2NjUxLDEsMSwuNzk3NzYsMS4yMDU2MiwxLjE4NjIyLDEuMTg2MjIsMSwxLjE0MzcsLjY3MDA5LC45NjMzNCwuOTM2OTUsMS4zNTE5MSwxLjQwOTA5LC45NTE2MSwxLjQ4Mzg3LC44Njc1LC45MDg2MSwuNjE5MiwuNzM2MywuNjQ4MjQsLjgyNDExLC41NjMyMSwuODU2OTYsMS4yMzUxNiwuODY3NSwuODE1NTIsLjcyODYsLjg0MTM0LC43MzIwNiwuNzY2NTksLjg2Mjc1LC44NDM2OSwuOTA2ODUsLjc3ODkyLC44NTg3MSwxLjAyNjM4LC44OTI0OSwuNzU4MjgsLjg0MTE4LC44NTk4NCwuNzc0NTIsLjc2NDY2LC43OTc3NiwuNzMwNiwuOTA3ODIsLjc3ODE4LC45MDMsLjg3MjkxLC45MDY4NSwuNzMwNiwuOTkwNTgsMS4wMzY2NywuOTQ2MzUsMS4yMzUxNiwuOTg0OSwuOTkwNTgsLjkyMzkzLC44OTE2LC45NDIsMS4wMzY2NywuNzUwMjYsLjk0NjM1LDEuMDI5NywxLjIzNTE2LC45MDkxOCwuOTQwNDgsLjk4MjE3LC44OTc0NiwuODQxNTMsLjkyMjc0LC44MjUwNywuODg4MzIsLjg0NDM4LC44ODE3OCwxLjAzNTI1LC45ODQ5LDEuMDAyMjUsLjc4MDg2LC45NzI0OCwuODk0MDQsMS4yMzUxNiwuOTg0OSwuOTIyNzQsLjk4NDksLjg5NDA0LC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk2OTMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg1ODY1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDkzMywxLDEsMSwxLDEsMSwuOTQzMDksLjk4OTg2LC45NDMwOSwuOTg5ODYsLjk0MzA5LC45ODk4NiwuNzMwNiwuODk0NTMsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY4OTk0LDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTc4NTgsLjgyNjE2LC45MTEzMywuODM0MzcsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1NzIsMS44MTA1NSwuOTA3NDksMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTI4NCwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sTWE9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9LExhPVsxLjM4NzcsMSwxLDEsMS4xNzIyMywxLjEyOTMsLjg5NTUyLC45MTEzMywuODAzOTUsMS4wMjI2OSwxLjE1NjAxLC45MTA1NiwuOTEwNTYsMS4yNzk4LC44NTI4NCwuODk4MDcsMSwuOTA4NjEsMS4zOTAxNiwuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjk2MzA5LC45NjMwOSwuODUyODQsLjg1Mjg0LC44NTI4NCwuODMzMTksLjg4MDcxLC44Njc1LC44MTU1MiwuNzM4MzQsLjg1MTkzLC43MzIwNiwuNzUyMiwuODExMDUsLjg2Mjc1LC45MDY4NSwuNjM3NywuNzc4OTIsLjc1NTkzLDEuMDI2MzgsLjg5Mzg1LC44NTEyMiwuNzc0NTIsLjg2NTAzLC43NTE4NiwuNjg4ODcsLjc5Nzc2LC44ODg0NCwuODUwNjYsLjk0MjU4LC43NzgxOCwuNzMwNiwuNzY2NTksMS4xMDM2OSwxLjM5MDE2LDEuMTAzNjksMS4wNjEzOSwuODk1NTIsLjg3MzksLjg2MTI4LC45NDQ2OSwuODQ1NywuOTQ0NjksLjg5NDY0LDEuMDk4NDIsLjg0NjM2LC45NDQ2OSwxLjAzMjk3LDEuMDc2OTIsLjkwOTE4LDEuMDMyOTcsLjk1ODk3LC45NDQ2OSwuOTQ4MiwuOTQ0NjksLjk0NDY5LDEuMDQ2OTIsLjc4MjIzLDEuMjA1NjIsLjk0NDY5LC45MDMzMiwuOTg5ODYsLjg2NjIxLC45MDUyNywuNzkwMDQsLjk0MTUyLDEuNzcyNTYsLjk0MTUyLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuOTE3MjksLjg5NTUyLDEuMTc4ODksMS4xMzI1NCwxLjA4NzA3LC45MjA5OCwuODUyODQsLjY4Nzg3LC43MTM1MywuODQ3MzcsLjkwNzQ3LDEuMDA4OCwxLjAwNDQsLjg3NjgzLDEsMS4wOTA5MSwxLC45MjIyOSwuNzM5LDEuMTU2NDIsLjkyMDk4LC43NjI4OCwuODA1MDQsLjgwOTcyLC43NTg1OSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuNzYzMTgsLjczODM0LC43MzIwNiwuNzMyMDYsLjczMjA2LC43MzIwNiwuOTA2ODUsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjg2NDc3LC44OTM4NSwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTI4NCwuODUzMTEsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjg4ODQ0LC43MzA2LC43NzQ1MiwuODYzMzEsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2OTMsLjg0NTcsLjg5NDY0LC44OTQ2NCwuODk0NjQsLjg5NDY0LC44MjYwMSwuODI2MDEsLjgyNjAxLC44MjYwMSwuOTQ0NjksLjk0NDY5LC45NDgyLC45NDgyLC45NDgyLC45NDgyLC45NDgyLC45MDc0NywuODY2NTEsLjk0NDY5LC45NDQ2OSwuOTQ0NjksLjk0NDY5LC45MDUyNywuOTQ0NjksLjkwNTI3LC44Njc1LC44NjEyOCwuODY3NSwuODYxMjgsLjg2NzUsLjg2MTI4LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuODUxOTMsLjkyNDU0LC44NjQ3NywuOTkyMSwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjgxMTA1LC44NDYzNiwuODExMDUsLjg0NjM2LC44MTEwNSwuODQ2MzYsMSwxLC44NjI3NSwuOTQ0NjksLjkwODcyLC45NTc4NiwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsMS4wMzI5NywuOTA2ODUsLjgyNjAxLC43Nzc0MSwxLjA1NjExLC42Mzc3LDEuMDc2OTIsMSwxLC45MDkxOCwuNzU1OTMsMS4wMzI5NywxLDEsLjc2MDMyLC45MDQ1MiwuOTgxNTYsMS4xMTg0MiwuNzcyNjEsMS4xMTQyOSwuODkzODUsLjk0NDY5LDEsMSwuODkzODUsLjk0NDY5LC45NTg3NywuODY5MDEsLjk0NDY5LC44NTEyMiwuOTQ4MiwuODUxMjIsLjk0ODIsLjg1MTIyLC45NDgyLC44NjY3LC45MDAxNiwuNzUxODYsMS4wNDY5MiwxLDEsLjc1MTg2LDEuMDQ2OTIsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywxLDEsLjc5Nzc2LC45MjE4OCwuNzk3NzYsMS4yMzAyMywuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuOTQyNTgsLjk4OTg2LC43MzA2LC45MDUyNywuNzMwNiwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwxLjA5MjMxLC41NDg3MywuODY3NSwuODYxMjgsLjc2MzE4LC44NjkzLC44NTMxMSwuODY2NTEsMSwxLC43OTc3NiwxLjIwNTYyLDEuMTg2MjIsMS4xODYyMiwxLDEuMTQzNywuNjc3NDIsLjk2MzM0LC45MzY5NSwxLjM1MTkxLDEuNDA5MDksLjk1MTYxLDEuNDgzODcsLjg2Njg2LC45MDg2MSwuNjIyNjcsLjc0MzU5LC42NTY0OSwuODU0OTgsLjU2OTYzLC44ODI1NCwxLjIzNTE2LC44Njc1LC44MTU1MiwuNzU0NDMsLjg0NTAzLC43MzIwNiwuNzY2NTksLjg2Mjc1LC44NTEyMiwuOTA2ODUsLjc3ODkyLC44NTc0NiwxLjAyNjM4LC44OTM4NSwuNzU2NTcsLjg1MTIyLC44NjI3NSwuNzc0NTIsLjc0MTcxLC43OTc3NiwuNzMwNiwuOTUxNjUsLjc3ODE4LC44OTc3MiwuODg4MzEsLjkwNjg1LC43MzA2LC45ODE0MiwxLjAyMTkxLC45NjU3NiwxLjIzNTE2LC45OTAxOCwuOTgxNDIsLjkyMzYsLjg5MjU4LC45NDAzNSwxLjAyMTkxLC43ODg0OCwuOTY1NzYsLjk1NjEsMS4yMzUxNiwuOTA5MTgsLjkyNTc4LC45NTQyNCwuODk3NDYsLjgzOTY5LC45NDgyLC44MDExMywuODk0NDIsLjg1MjA4LC44NjE1NSwuOTgwMjIsLjk5MDE4LDEuMDA0NTIsLjgxMjA5LC45OTI0NywuODkxODEsMS4yMzUxNiwuOTkwMTgsLjk0ODIsLjk5MDE4LC44OTE4MSwuNzMyMDYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg4ODQ0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44OTQ2NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTY3NjYsMSwxLDEsMSwxLDEsLjk0MjU4LC45ODk4NiwuOTQyNTgsLjk4OTg2LC45NDI1OCwuOTg5ODYsLjczMDYsLjkwNTI3LDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMTg2LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4yNTY2LDEuMjU2NiwxLjI1NjYsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC42OTA0MywxLjAzODA5LDEsMSwxLjAxNzYsMS4wMTc2LDEuMTE1MjMsMS40OTU2LDIuMDE0NjIsLjk5MzMxLC44MjYxNiwuOTExMzMsLjg0Mjg2LC45MTEzMywxLDEsMSwuNzA1MDgsMSwxLjIzMTA4LC43OTgwMSwuODQ0MjYsLjg0NDI2LC43NzQsLjkwNTI3LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4yODgwOSwxLjU1NDY5LC45NDQzNCwxLjA3ODA2LDEsLjk3MDk0LC43NTg5LC44NTI4NCwuOTA3NDcsMS4xOTY1OCwuNjk4MjUsLjk3NjIyLDEuMzM1MTIsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjAzMzYsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1ODU5LDEuMDU4NTksMSwxLDEsMS4wNzE4NSwuOTk0MTMsLjk2MzM0LDEuMDgwNjUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxIYT17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sSmE9Wy43NjExNiwxLDEsMS4wMDA2LC45OTk5OCwuOTk5NzQsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTc3LDEuMDAwODcsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLDEuMDAwMjYsLjk5OTksLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsLjk5OTczLC45OTk3NywxLjAwMDI2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk5OCwxLjAwMDYsLjk5OTk4LDEuMDAwMDMsLjk5OTczLC45OTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LC45OTk3MywxLjAwMDYsLjk5OTgyLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTU5LC45OTk3MywuOTk5OTgsMS4wMDAyNiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTczLDEsLjk5OTU5LDEuMDAwNzcsLjk5OTU5LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDc3LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5NzMsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDY0MDksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywxLjAzMzc0LC45OTk3NywxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA0MiwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDM4MjgsMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwxLjAwMDYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTMsLjk5OTgsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLDEuMDAwMTYsLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsMS4wMDAyNiwuODEyMSwxLjAwMDI2LC45OTk5OCwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDYsLjk5OTczLC45OTk3NywuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLjAwMDM0LC45OTk3NywxLC45OTk5NywxLjAwMDI2LDEuMDAwNzgsMS4wMDAzNiwuOTk5NzMsMS4wMDAxMywxLjAwMDYsLjk5OTc3LC45OTk3NywuOTk5ODgsLjg1MTQ4LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsLjk5OTc3LDEuMDAwMDEsLjk5OTk5LC45OTk3NywxLjAwMDY5LDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsLjk5OTg0LDEuMDAwMjYsMS4wMDAwMSwxLjAwMDI0LDEuMDAwMDEsLjk5OTksMSwxLjAwMDYsMS4wMDAwMSwxLjAwMDQxLC45OTk2MiwxLjAwMDI2LDEuMDAwNiwuOTk5OTUsMS4wMDA0MSwuOTk5NDIsLjk5OTczLC45OTkyNywxLjAwMDgyLC45OTkwMiwxLjAwMDI2LDEuMDAwODcsMS4wMDA2LDEuMDAwNjksLjk5OTczLC45OTg2NywuOTk5NzMsLjk5OTMsMS4wMDAyNiwxLjAwMDQ5LDEuMDAwNTYsMSwuOTk5ODgsLjk5OTM1LC45OTk5NSwuOTk5NTQsMS4wMDA1NSwuOTk5NDUsMS4wMDAzMiwxLjAwMDYsLjk5OTk1LDEuMDAwMjYsLjk5OTk1LDEuMDAwMzIsMS4wMDAwMSwxLjAwMDA4LC45OTk3MSwxLjAwMDE5LC45OTk0LDEuMDAwMDEsMS4wMDA2LDEuMDAwNDQsLjk5OTczLDEuMDAwMjMsMS4wMDA0NywxLC45OTk0MiwuOTk1NjEsLjk5OTg5LDEuMDAwMzUsLjk5OTc3LDEuMDAwMzUsLjk5OTc3LDEuMDAwMTksLjk5OTQ0LDEuMDAwMDEsMS4wMDAyMSwuOTk5MjYsMS4wMDAzNSwxLjAwMDM1LC45OTk0MiwxLjAwMDQ4LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDM1LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTg5LDEuMDAwNTcsMS4wMDAwMSwuOTk5MzYsMS4wMDA1MiwxLjAwMDEyLC45OTk5NiwxLjAwMDQzLDEsMS4wMDAzNSwuOTk5NCwuOTk5NzYsMS4wMDAzNSwuOTk5NzMsMS4wMDA1MiwxLjAwMDQxLDEuMDAxMTksMS4wMDAzNywuOTk5NzMsMS4wMDAwMiwuOTk5ODYsMS4wMDA0MSwxLjAwMDQxLC45OTkwMiwuOTk5NiwxLjAwMDM0LC45OTk5OSwxLjAwMDI2LC45OTk5OSwxLjAwMDI2LC45OTk3MywxLjAwMDUyLC45OTk3MywxLC45OTk3MywxLjAwMDQxLDEuMDAwNzUsLjk5OTQsMS4wMDAzLC45OTk5OSwxLDEuMDAwNDEsLjk5OTU1LDEsLjk5OTE1LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMTE5LC45OTk1NSwuOTk5NzMsMS4wMDA2LC45OTkxMSwxLjAwMDYsMS4wMDAyNiwuOTk5NzIsMS4wMDAyNiwuOTk5MDIsMS4wMDA0MSwuOTk5NzMsLjk5OTk5LDEsMSwxLjAwMDM4LDEuMDAwNSwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLDEsLjk5OTczLDEsMSwuOTk5NTUsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEsMSwxLC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMTA2LC45OTk5OSwuOTk5OTgsLjk5OTk4LC45OTk5OSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsLjk5OTcxLDEuMDAwNDcsMS4wMDAyMywxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLDEsMSwxLDEsMSwxLC45OTk3MiwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLDEuMDAwMzEsMS4wMDAxNSwxLC45OTU2MSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzIsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx2YT17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn0sWWE9Wy43NjExNiwxLDEsMS4wMDA2LC45OTk5OCwuOTk5NzQsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTc3LDEuMDAwODcsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLDEuMDAwMjYsLjk5OTksLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsLjk5OTczLC45OTk3NywxLjAwMDI2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk5OCwxLjAwMDYsLjk5OTk4LDEuMDAwMDMsLjk5OTczLC45OTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LC45OTk3MywxLjAwMDYsLjk5OTgyLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTU5LC45OTk3MywuOTk5OTgsMS4wMDAyNiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTczLDEsLjk5OTU5LDEuMDAwNzcsLjk5OTU5LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDc3LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5NzMsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDY0MDksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywxLjAwNDQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAxMDExLDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsMS4wMDA2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTkzLC45OTk4LDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMSwxLjAwMDE2LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LDEuMDAwMjYsLjgxMjEsMS4wMDAyNiwuOTk5OTgsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDA2LC45OTk3MywuOTk5NzcsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3NywxLDEsMS4wMDAyNiwuOTk5NjksLjk5OTcyLC45OTk4MSwuOTk5OCwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLC45MTE1NSwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LC45OTk3NywxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTY2LDEuMDAwMjIsMS4wMDAzMiwxLjAwMDAxLC45OTk0NCwxLjAwMDI2LDEuMDAwMDEsLjk5OTY4LDEuMDAwMDEsMS4wMDA0NywxLDEuMDAwNiwxLjAwMDAxLC45OTk4MSwxLjAwMTAxLDEuMDAwMjYsMS4wMDA2LC45OTk0OCwuOTk5ODEsMS4wMDA2NCwuOTk5NzMsLjk5OTQyLDEuMDAxMDEsMS4wMDA2MSwxLjAwMDI2LDEuMDAwNjksMS4wMDA2LDEuMDAwMTQsLjk5OTczLDEuMDEzMjIsLjk5OTczLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDEyLC45OTkyMywxLDEuMDAwNjQsMS4wMDA3NiwuOTk5NDgsMS4wMDA1NSwxLjAwMDYzLDEuMDAwMDcsLjk5OTQzLDEuMDAwNiwuOTk5NDgsMS4wMDAyNiwuOTk5NDgsLjk5OTQzLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI5LDEuMDAwMzgsMS4wMDAzNSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3OCwxLjAwMDAxLDEuMDAwNTcsLjk5OTg5LC45OTk2NywuOTk5NjQsLjk5OTY3LC45OTk3NywuOTk5OTksLjk5OTc3LDEuMDAwMzgsLjk5OTc3LDEuMDAwMDEsLjk5OTczLDEuMDAwNjYsLjk5OTY3LC45OTk2NywxLjAwMDQxLC45OTk5OCwuOTk5OTksLjk5OTc3LDEuMDAwMjIsLjk5OTY3LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTY0LDEuMDAwMzEsMS4wMDAwMSwuOTk5OTksLjk5OTk5LDEsMS4wMDAyMywxLDEsLjk5OTk5LDEuMDAwMzUsMS4wMDAwMSwuOTk5OTksLjk5OTczLC45OTk3NywuOTk5OTksMS4wMDA1OCwuOTk5NzMsLjk5OTczLC45OTk1NSwuOTk5NSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAzMiwuOTk5ODksMS4wMDAzNCwuOTk5OTksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLC40NTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAwMSwuOTk5OTksLjk5OTgyLC45OTk5NCwuOTk5OTYsMSwxLjAwMDQyLDEuMDAwNDQsMS4wMDAyOSwxLjAwMDIzLC45OTk3MywuOTk5NzMsMS4wMDAyNiwuOTk5NDksMS4wMDAwMiwuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc1LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDMyLC45ODY4NSwuOTk5NzMsMS4wMDAyNiwxLDEsLjk5OTY2LDEuMDAwNDQsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMSwxLC45OTk3MywxLDEsLjk5OTU1LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLDEsMSwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDEwNiwuOTk5OTksLjk5OTk4LC45OTk5OCwuOTk5OTksLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MSwuOTk5NzgsMSwxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDk4LDEsMSwxLDEuMDAwNDksMSwxLC45OTk3MiwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLDEuMDAwMzEsMS4wMDAxNSwxLC45OTU2MSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzIsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxUYT17bGluZUhlaWdodDoxLjM1LGxpbmVHYXA6LjJ9LEthPVsuNzYxMTYsMSwxLDEuMDAwNiwxLjAwMDYsMS4wMDAwNiwuOTk5NzMsLjk5OTczLC45OTk4MiwxLjAwMDAxLDEuMDAwNDMsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLC45OTk3MywuOTk5ODcsMS4wMDAwMSwxLjAwMDAxLC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwxLDEuMDAwMDEsLjk5OTczLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk0OSwuOTk5NzMsLjk5OTk4LC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTkyNCwuOTk5MjQsMSwuOTk5MjQsLjk5OTk5LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDYsLjk5OTczLDEsLjk5OTc3LDEsMSwxLDEuMDAwMDUsMS4wMDA5LDEuMDAwMDUsMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwOSwuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTgsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwxLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDY0MDksMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsMSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMS4wMjg4LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwuOTk5NDYsMS4wMDAzNCwxLC45OTkyNCwxLjAwMDAxLDEsMSwuOTk5NzMsLjk5OTI0LC45OTk3MywuOTk5MjQsLjk5OTczLDEuMDYzMTEsLjk5OTczLDEuMDAwMjQsLjk5OTczLC45OTkyNCwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDQxLC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg5NTQ3LDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMDEsMSwxLjAwMDU0LC45OTk3NywxLjAwMDg0LDEuMDAwMDcsLjk5OTczLDEuMDAwMTMsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwuOTk5NDUsLjkxMjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDAxLC45OTk5OSwuOTk5NzcsLjk5OTMzLDEuMDAwMjIsMS4wMDA1NCwxLjAwMDAxLDEuMDAwNjUsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMSwxLjAwMDAxLDEuMDAwNTIsMSwxLjAwMDYsMS4wMDAwMSwuOTk5NDUsLjk5ODk3LC45OTk2OCwuOTk5MjQsMS4wMDAzNiwuOTk5NDUsLjk5OTQ5LDEsMS4wMDA2LC45OTg5NywuOTk5MTgsLjk5OTY4LC45OTkxMSwuOTk5MjQsMSwuOTk5NjIsMS4wMTQ4NywxLDEuMDAwNSwuOTk5NzMsMS4wMDAxMiwxLjAwMDQzLDEsLjk5OTk1LC45OTk5NCwxLjAwMDM2LC45OTk0NywxLjAwMDE5LDEuMDAwNjMsMS4wMDAyNSwuOTk5MjQsMS4wMDAzNiwuOTk5NzMsMS4wMDAzNiwxLjAwMDI1LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI3LDEuMDAwMSwxLjAwMDY4LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLDEuMDAwMDgsLjk5OTU3LC45OTk3MiwuOTk5NCwuOTk5NTQsLjk5OTc1LDEuMDAwNTEsMS4wMDAwMSwxLjAwMDE5LDEuMDAwMDEsMS4wMDAxLC45OTk4NiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAzOCwuOTk5NTQsLjk5OTU0LC45OTk0LDEuMDAwNjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwNTQsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NzUsMS4wMDAxLDEuMDAwMDEsLjk5OTkzLC45OTk1LC45OTk1NSwxLjAwMDE2LC45OTk3OCwuOTk5NzQsMS4wMDAxOSwxLjAwMDIyLC45OTk1NSwxLjAwMDUzLC45OTk3MywxLjAwMDg5LDEuMDAwMDUsLjk5OTY3LDEuMDAwNDgsLjk5OTczLDEuMDAwMDIsMS4wMDAzNCwuOTk5NzMsLjk5OTczLC45OTk2NCwxLjAwMDA2LDEuMDAwNjYsLjk5OTQ3LC45OTk3MywuOTg4OTQsLjk5OTczLDEsLjQ0ODk4LDEsLjk5OTQ2LDEsMS4wMDAzOSwxLjAwMDgyLC45OTk5MSwuOTk5OTEsLjk5OTg1LDEuMDAwMjIsMS4wMDAyMywxLjAwMDYxLDEuMDAwMDYsLjk5OTY2LC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwMTksMS4wMDA4LDEsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTgzLDEuMDAwNDQsLjk5OTczLC45OTk2NCwuOTgzMzIsMSwuOTk5NzMsMSwxLC45OTk2MiwuOTk4OTUsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAyNjcsLjk5OTk5LC45OTk5OCwuOTk5OTgsMSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsMS4wMDQyMywuOTk5MjUsLjk5OTk5LDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwNDksMSwxLjAwMjQ1LDEsMSwxLDEsLjk2MzI5LDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsLjgyNTQsMS4wMDAxNSwxLDEuMDAwMzUsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsMS4wMDAwMywxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45NTMxNywuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHFhPXtsaW5lSGVpZ2h0OjEuMzUsbGluZUdhcDouMn0sT2E9Wy43NjExNiwxLDEsMS4wMDA2LDEuMDAwNiwxLjAwMDA2LC45OTk3MywuOTk5NzMsLjk5OTgyLDEuMDAwMDEsMS4wMDA0MywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsLjk5OTczLC45OTk4NywxLjAwMDAxLDEuMDAwMDEsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LDEsMS4wMDAwMSwuOTk5NzMsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTQ5LC45OTk3MywuOTk5OTgsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTI0LC45OTkyNCwxLC45OTkyNCwuOTk5OTksLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwNiwuOTk5NzMsMSwuOTk5NzcsMSwxLDEsMS4wMDAwNSwxLjAwMDksMS4wMDAwNSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA5LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5OCwxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLDEsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wNjQwOSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLC45OTk3MywxLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLjA0NTk2LC45OTk3NywuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5MjQsMS4wMDA2LDEuMDAwNiwxLjAwMDE5LDEuMDAwMzQsMSwuOTk5MjQsMS4wMDAwMSwxLDEsLjk5OTczLC45OTkyNCwuOTk5NzMsLjk5OTI0LC45OTk3MywxLjAyNTcyLC45OTk3MywxLjAwMDA1LC45OTk3MywuOTk5MjQsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTk5LC45OTk4LC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLDEuMDAwMTYsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsLjg0NTMzLDEuMDAwMjYsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLC45OTkyNCwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTkyOCwxLC45OTk3NywxLjAwMDEzLDEuMDAwNTUsLjk5OTQ3LC45OTk0NSwuOTk5NDEsLjk5OTI0LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDQsLjkxNjIxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsMS4wMDAwMSwxLjAwMDA1LC45OTk5OSwuOTk5NzcsMS4wMDAxNSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLC45OTk3MywxLjAwMDI2LDEuMDAwMDEsMS4wMDAxOSwxLjAwMDAxLC45OTk0NiwxLDEuMDAwNiwxLjAwMDAxLC45OTk3OCwxLjAwMDQ1LC45OTk3MywuOTk5MjQsMS4wMDAyMywuOTk5NzgsLjk5OTY2LDEsMS4wMDA2NSwxLjAwMDQ1LDEuMDAwMTksLjk5OTczLC45OTk3MywuOTk5MjQsMSwxLC45NjQ5OSwxLDEuMDAwNTUsLjk5OTczLDEuMDAwMDgsMS4wMDAyNywxLC45OTk3LC45OTk5NSwxLjAwMDIzLC45OTkzMywxLjAwMDE5LDEuMDAwMTUsMS4wMDAzMSwuOTk5MjQsMS4wMDAyMywuOTk5NzMsMS4wMDAyMywxLjAwMDMxLDEuMDAwMDEsLjk5OTI4LDEuMDAwMjksMS4wMDA5MiwxLjAwMDM1LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLC45OTk4OCwuOTk5NzUsMSwxLjAwMDgyLC45OTU2MSwuOTk5NiwxLjAwMDM1LDEuMDAwMDEsLjk5OTYyLDEuMDAwMDEsMS4wMDA5MiwuOTk5NjQsMS4wMDAwMSwuOTk5NjMsLjk5OTk5LDEuMDAwMzUsMS4wMDAzNSwxLjAwMDgyLC45OTk2MiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAzNSwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk2LC45OTk2NywxLjAwMDAxLDEuMDAwMzQsMS4wMDA3NCwxLjAwMDU0LDEuMDAwNTMsMS4wMDA2MywuOTk5NzEsLjk5OTYyLDEuMDAwMzUsLjk5OTc1LC45OTk3NywuOTk5NzMsMS4wMDA0MywuOTk5NTMsMS4wMDA3LC45OTkxNSwuOTk5NzMsMS4wMDAwOCwuOTk4OTIsMS4wMDA3MywxLjAwMDczLDEuMDAxMTQsLjk5OTE1LDEuMDAwNzMsLjk5OTU1LC45OTk3MywxLjAwMDkyLC45OTk3MywxLC45OTk5OCwxLDEuMDAwMywxLDEuMDAwNDMsMS4wMDAwMSwuOTk5NjksMS4wMDAzLDEsMS4wMDAzNSwxLjAwMDAxLC45OTk1LDEsMS4wMDA5MiwuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDcsLjk5OTUsMSwuOTk5MjQsMS4wMDA2LC45OTkyNCwuOTk5NzIsMS4wMDA2MiwuOTk5NzMsMS4wMDExNCwxLjAwMDczLDEsLjk5OTU1LDEsMSwxLjAwMDQ3LC45OTk2OCwxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMSwxLC45OTk3MywxLDEsLjk5OTU1LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDI2NywuOTk5OTksLjk5OTk4LC45OTk5OCwxLC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsLjk5OTI1LDEuMDAwMjMsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMSwxLDEsMSwxLDEsMSwuOTYzMjksMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywuODI1NCwxLjAwMDE1LDEsMS4wMDAzNSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTUzMTcsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sUGE9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LFdhPVszNjUsMCwzMzMsMjc4LDMzMyw0NzQsNTU2LDU1Niw4ODksNzIyLDIzOCwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwzMzMsMzMzLDU4NCw1ODQsNTg0LDYxMSw5NzUsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTU2LDcyMiw2MTEsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwzMzMsMjc4LDMzMyw1ODQsNTU2LDMzMyw1NTYsNjExLDU1Niw2MTEsNTU2LDMzMyw2MTEsNjExLDI3OCwyNzgsNTU2LDI3OCw4ODksNjExLDYxMSw2MTEsNjExLDM4OSw1NTYsMzMzLDYxMSw1NTYsNzc4LDU1Niw1NTYsNTAwLDM4OSwyODAsMzg5LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI4MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDU1NiwyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw3MjIsNzIyLDcyMiw3MjIsNzIyLDcyMiwxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNTQ5LDYxMSw2MTEsNjExLDYxMSw2MTEsNTU2LDYxMSw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNzE5LDcyMiw2MTEsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzIyLDYxMSw3MjIsNjExLDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCw3ODUsNTU2LDU1NiwyNzgsNzIyLDU1Niw1NTYsNjExLDI3OCw2MTEsMjc4LDYxMSwzODUsNjExLDQ3OSw2MTEsMjc4LDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcwOCw3MjMsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDFlMyw5NDQsNzIyLDM4OSw3MjIsMzg5LDcyMiwzODksNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2MTEsMzMzLDYxMSw0NzksNjExLDMzMyw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw5NDQsNzc4LDY2Nyw1NTYsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDI3OCw1NTYsNzIyLDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDU1Niw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw0NjUsNzIyLDMzMyw4NTMsOTA2LDQ3NCw4MjUsOTI3LDgzOCwyNzgsNzIyLDcyMiw2MDEsNzE5LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNzIyLDY2Nyw4MzMsNzIyLDY0NCw3NzgsNzIyLDY2Nyw2MDAsNjExLDY2Nyw4MjEsNjY3LDgwOSw4MDIsMjc4LDY2Nyw2MTUsNDUxLDYxMSwyNzgsNTgyLDYxNSw2MTAsNTU2LDYwNiw0NzUsNDYwLDYxMSw1NDEsMjc4LDU1OCw1NTYsNjEyLDU1Niw0NDUsNjExLDc2Niw2MTksNTIwLDY4NCw0NDYsNTgyLDcxNSw1NzYsNzUzLDg0NSwyNzgsNTgyLDYxMSw1ODIsODQ1LDY2Nyw2NjksODg1LDU2Nyw3MTEsNjY3LDI3OCwyNzYsNTU2LDEwOTQsMTA2Miw4NzUsNjEwLDcyMiw2MjIsNzE5LDcyMiw3MTksNzIyLDU2Nyw3MTIsNjY3LDkwNCw2MjYsNzE5LDcxOSw2MTAsNzAyLDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MjIsODU0LDY2Nyw3MzAsNzAzLDEwMDUsMTAxOSw4NzAsOTc5LDcxOSw3MTEsMTAzMSw3MTksNTU2LDYxOCw2MTUsNDE3LDYzNSw1NTYsNzA5LDQ5Nyw2MTUsNjE1LDUwMCw2MzUsNzQwLDYwNCw2MTEsNjA0LDYxMSw1NTYsNDkwLDU1Niw4NzUsNTU2LDYxNSw1ODEsODMzLDg0NCw3MjksODU0LDYxNSw1NTIsODU0LDU4Myw1NTYsNTU2LDYxMSw0MTcsNTUyLDU1NiwyNzgsMjgxLDI3OCw5NjksOTA2LDYxMSw1MDAsNjE1LDU1Niw2MDQsNzc4LDYxMSw0ODcsNDQ3LDk0NCw3NzgsOTQ0LDc3OCw5NDQsNzc4LDY2Nyw1NTYsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjc4LDI3OCwyNzgsMjc4LDUwMCw1MDAsNTAwLDU1Niw1NTYsMzUwLDFlMywxZTMsMjQwLDQ3OSwzMzMsMzMzLDYwNCwzMzMsMTY3LDM5Niw1NTYsNTU2LDEwOTQsNTU2LDg4NSw0ODksMTExNSwxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzIyLDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDYxMSw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzNdLGphPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXSxYYT1bMzY1LDAsMzMzLDI3OCwzMzMsNDc0LDU1Niw1NTYsODg5LDcyMiwyMzgsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMzMzLDMzMyw1ODQsNTg0LDU4NCw2MTEsOTc1LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDU1Niw3MjIsNjExLDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMzMzLDI3OCwzMzMsNTg0LDU1NiwzMzMsNTU2LDYxMSw1NTYsNjExLDU1NiwzMzMsNjExLDYxMSwyNzgsMjc4LDU1NiwyNzgsODg5LDYxMSw2MTEsNjExLDYxMSwzODksNTU2LDMzMyw2MTEsNTU2LDc3OCw1NTYsNTU2LDUwMCwzODksMjgwLDM4OSw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyODAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1NTYsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNzIyLDcyMiw3MjIsNzIyLDcyMiw3MjIsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDU0OSw2MTEsNjExLDYxMSw2MTEsNjExLDU1Niw2MTEsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDc0MCw3MjIsNjExLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDcyMiw2MTEsNzIyLDYxMSwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsNzgyLDU1Niw1NTYsMjc4LDcyMiw1NTYsNTU2LDYxMSwyNzgsNjExLDI3OCw2MTEsMzk2LDYxMSw0NzksNjExLDI3OCw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MDgsNzIzLDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSwxZTMsOTQ0LDcyMiwzODksNzIyLDM4OSw3MjIsMzg5LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjExLDMzMyw2MTEsNDc5LDYxMSwzMzMsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsOTQ0LDc3OCw2NjcsNTU2LDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyNzgsNTU2LDcyMiw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1NTYsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDcyMiwzMzMsODU0LDkwNiw0NzMsODQ0LDkzMCw4NDcsMjc4LDcyMiw3MjIsNjEwLDY3MSw2NjcsNjExLDcyMiw3NzgsMjc4LDcyMiw2NjcsODMzLDcyMiw2NTcsNzc4LDcxOCw2NjcsNTkwLDYxMSw2NjcsODIyLDY2Nyw4MjksNzgxLDI3OCw2NjcsNjIwLDQ3OSw2MTEsMjc4LDU5MSw2MjAsNjIxLDU1Niw2MTAsNDc5LDQ5Miw2MTEsNTU4LDI3OCw1NjYsNTU2LDYwMyw1NTYsNDUwLDYxMSw3MTIsNjA1LDUzMiw2NjQsNDA5LDU5MSw3MDQsNTc4LDc3Myw4MzQsMjc4LDU5MSw2MTEsNTkxLDgzNCw2NjcsNjY3LDg4Niw2MTQsNzE5LDY2NywyNzgsMjc4LDU1NiwxMDk0LDEwNDIsODU0LDYyMiw3MTksNjc3LDcxOSw3MjIsNzA4LDcyMiw2MTQsNzIyLDY2Nyw5MjcsNjQzLDcxOSw3MTksNjE1LDY4Nyw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjc3LDc4MSw2NjcsNzI5LDcwOCw5NzksOTg5LDg1NCwxZTMsNzA4LDcxOSwxMDQyLDcyOSw1NTYsNjE5LDYwNCw1MzQsNjE4LDU1Niw3MzYsNTEwLDYxMSw2MTEsNTA3LDYyMiw3NDAsNjA0LDYxMSw2MTEsNjExLDU1Niw4ODksNTU2LDg4NSw1NTYsNjQ2LDU4Myw4ODksOTM1LDcwNyw4NTQsNTk0LDU1Miw4NjUsNTg5LDU1Niw1NTYsNjExLDQ2OSw1NjMsNTU2LDI3OCwyNzgsMjc4LDk2OSw5MDYsNjExLDUwNyw2MTksNTU2LDYxMSw3NzgsNjExLDU3NSw0NjcsOTQ0LDc3OCw5NDQsNzc4LDk0NCw3NzgsNjY3LDU1NiwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyNzgsMjc4LDI3OCwyNzgsNTAwLDUwMCw1MDAsNTU2LDU1NiwzNTAsMWUzLDFlMywyNDAsNDc5LDMzMywzMzMsNjA0LDMzMywxNjcsMzk2LDU1Niw1NTYsMTEwNCw1NTYsODg1LDUxNiwxMTQ2LDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCw5OTksNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MjIsMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNjExLDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzM10sWmE9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdLFZhPVszNjUsMCwzMzMsMjc4LDI3OCwzNTUsNTU2LDU1Niw4ODksNjY3LDE5MSwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDU4NCw1ODQsNTg0LDU1NiwxMDE1LDY2Nyw2NjcsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDUwMCw2NjcsNTU2LDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMjc4LDI3OCwyNzgsNDY5LDU1NiwzMzMsNTU2LDU1Niw1MDAsNTU2LDU1NiwyNzgsNTU2LDU1NiwyMjIsMjIyLDUwMCwyMjIsODMzLDU1Niw1NTYsNTU2LDU1NiwzMzMsNTAwLDI3OCw1NTYsNTAwLDcyMiw1MDAsNTAwLDUwMCwzMzQsMjYwLDMzNCw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyNjAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1MzcsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTAwLDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU0OSw2MTEsNTU2LDU1Niw1NTYsNTU2LDUwMCw1NTYsNTAwLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDYyNSw3MjIsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDcyMiw1NTYsNzIyLDU1NiwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjIyLDI3OCwyNzgsNzMzLDQ0NCw1MDAsMjIyLDY2Nyw1MDAsNTAwLDU1NiwyMjIsNTU2LDIyMiw1NTYsMjgxLDU1Niw0MDAsNTU2LDIyMiw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw2MTUsNzIzLDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1NiwxZTMsOTQ0LDcyMiwzMzMsNzIyLDMzMyw3MjIsMzMzLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjExLDI3OCw2MTEsMzU0LDYxMSwyNzgsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsOTQ0LDcyMiw2NjcsNTAwLDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyMjIsNTU2LDY2Nyw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1MDAsNjExLDI3OCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDY2NywyNzgsNzg5LDg0NiwzODksNzk0LDg2NSw3NzUsMjIyLDY2Nyw2NjcsNTcwLDY3MSw2NjcsNjExLDcyMiw3NzgsMjc4LDY2Nyw2NjcsODMzLDcyMiw2NDgsNzc4LDcyNSw2NjcsNjAwLDYxMSw2NjcsODM3LDY2Nyw4MzEsNzYxLDI3OCw2NjcsNTcwLDQzOSw1NTUsMjIyLDU1MCw1NzAsNTcxLDUwMCw1NTYsNDM5LDQ2Myw1NTUsNTQyLDIyMiw1MDAsNDkyLDU0OCw1MDAsNDQ3LDU1Niw2NzAsNTczLDQ4Niw2MDMsMzc0LDU1MCw2NTIsNTQ2LDcyOCw3NzksMjIyLDU1MCw1NTYsNTUwLDc3OSw2NjcsNjY3LDg0Myw1NDQsNzA4LDY2NywyNzgsMjc4LDUwMCwxMDY2LDk4Miw4NDQsNTg5LDcxNSw2MzksNzI0LDY2Nyw2NTEsNjY3LDU0NCw3MDQsNjY3LDkxNyw2MTQsNzE1LDcxNSw1ODksNjg2LDgzMyw3MjIsNzc4LDcyNSw2NjcsNzIyLDYxMSw2MzksNzk1LDY2Nyw3MjcsNjczLDkyMCw5MjMsODA1LDg4Niw2NTEsNjk0LDEwMjIsNjgyLDU1Niw1NjIsNTIyLDQ5Myw1NTMsNTU2LDY4OCw0NjUsNTU2LDU1Niw0NzIsNTY0LDY4Niw1NTAsNTU2LDU1Niw1NTYsNTAwLDgzMyw1MDAsODM1LDUwMCw1NzIsNTE4LDgzMCw4NTEsNjIxLDczNiw1MjYsNDkyLDc1Miw1MzQsNTU2LDU1Niw1NTYsMzc4LDQ5Niw1MDAsMjIyLDIyMiwyMjIsOTEwLDgyOCw1NTYsNDcyLDU2NSw1MDAsNTU2LDc3OCw1NTYsNDkyLDMzOSw5NDQsNzIyLDk0NCw3MjIsOTQ0LDcyMiw2NjcsNTAwLDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDIyMiwyMjIsMjIyLDIyMiwzMzMsMzMzLDMzMyw1NTYsNTU2LDM1MCwxZTMsMWUzLDE4OCwzNTQsMzMzLDMzMyw1MDAsMzMzLDE2NywzNjUsNTU2LDU1NiwxMDk0LDU1Niw4ODUsMzIzLDEwODMsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsOTk4LDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcxOSwyNzQsNTQ5LDU0OSw1ODQsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw1MDAsNTAwLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwyOTQsMjk0LDMyNCwzMjQsMzE2LDMyOCwzOTgsMjg1XSxfYT1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0semE9WzM2NSwwLDMzMywyNzgsMjc4LDM1NSw1NTYsNTU2LDg4OSw2NjcsMTkxLDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsNTg0LDU4NCw1ODQsNTU2LDEwMTUsNjY3LDY2Nyw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTAwLDY2Nyw1NTYsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwyNzgsMjc4LDI3OCw0NjksNTU2LDMzMyw1NTYsNTU2LDUwMCw1NTYsNTU2LDI3OCw1NTYsNTU2LDIyMiwyMjIsNTAwLDIyMiw4MzMsNTU2LDU1Niw1NTYsNTU2LDMzMyw1MDAsMjc4LDU1Niw1MDAsNzIyLDUwMCw1MDAsNTAwLDMzNCwyNjAsMzM0LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI2MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDUzNywyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2NywxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1MDAsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTQ5LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTAwLDU1Niw1MDAsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNjE1LDcyMiw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzIyLDU1Niw3MjIsNTU2LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyMjIsMjc4LDI3OCw3MzUsNDQ0LDUwMCwyMjIsNjY3LDUwMCw1MDAsNTU2LDIyMiw1NTYsMjIyLDU1NiwyOTIsNTU2LDMzNCw1NTYsMjIyLDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDYwNCw3MjMsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDFlMyw5NDQsNzIyLDMzMyw3MjIsMzMzLDcyMiwzMzMsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2MTEsMjc4LDYxMSwzNzUsNjExLDI3OCw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw5NDQsNzIyLDY2Nyw1MDAsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDIyMiw1NTYsNjY3LDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDUwMCw2MTEsMjc4LDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNjY3LDI3OCw3ODQsODM4LDM4NCw3NzQsODU1LDc1MiwyMjIsNjY3LDY2Nyw1NTEsNjY4LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNjY3LDY2OCw4MzMsNzIyLDY1MCw3NzgsNzIyLDY2Nyw2MTgsNjExLDY2Nyw3OTgsNjY3LDgzNSw3NDgsMjc4LDY2Nyw1NzgsNDQ2LDU1NiwyMjIsNTQ3LDU3OCw1NzUsNTAwLDU1Nyw0NDYsNDQxLDU1Niw1NTYsMjIyLDUwMCw1MDAsNTc2LDUwMCw0NDgsNTU2LDY5MCw1NjksNDgyLDYxNywzOTUsNTQ3LDY0OCw1MjUsNzEzLDc4MSwyMjIsNTQ3LDU1Niw1NDcsNzgxLDY2Nyw2NjcsODY1LDU0Miw3MTksNjY3LDI3OCwyNzgsNTAwLDEwNTcsMTAxMCw4NTQsNTgzLDcyMiw2MzUsNzE5LDY2Nyw2NTYsNjY3LDU0Miw2NzcsNjY3LDkyMyw2MDQsNzE5LDcxOSw1ODMsNjU2LDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MzUsNzYwLDY2Nyw3NDAsNjY3LDkxNyw5MzgsNzkyLDg4NSw2NTYsNzE5LDEwMTAsNzIyLDU1Niw1NzMsNTMxLDM2NSw1ODMsNTU2LDY2OSw0NTgsNTU5LDU1OSw0MzgsNTgzLDY4OCw1NTIsNTU2LDU0Miw1NTYsNTAwLDQ1OCw1MDAsODIzLDUwMCw1NzMsNTIxLDgwMiw4MjMsNjI1LDcxOSw1MjEsNTEwLDc1MCw1NDIsNTU2LDU1Niw1NTYsMzY1LDUxMCw1MDAsMjIyLDI3OCwyMjIsOTA2LDgxMiw1NTYsNDM4LDU1OSw1MDAsNTUyLDc3OCw1NTYsNDg5LDQxMSw5NDQsNzIyLDk0NCw3MjIsOTQ0LDcyMiw2NjcsNTAwLDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDIyMiwyMjIsMjIyLDIyMiwzMzMsMzMzLDMzMyw1NTYsNTU2LDM1MCwxZTMsMWUzLDE4OCwzNTQsMzMzLDMzMyw1MDAsMzMzLDE2NywzNjUsNTU2LDU1NiwxMDk0LDU1Niw4ODUsMzIzLDEwNzMsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsMWUzLDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcxOSwyNzQsNTQ5LDU0OSw1ODMsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw1MDAsNTAwLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwyOTQsMjk0LDMyNCwzMjQsMzE2LDMyOCwzOTgsMjg1XSwkYT1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sQXI9WzEuMzY4OTgsMSwxLC43MjcwNiwuODA0NzksLjgzNzM0LC45ODg5NCwuOTk3OTMsLjk4OTcsLjkzODg0LC44NjIwOSwuOTQyOTIsLjk0MjkyLDEuMTY2NjEsMS4wMjA1OCwuOTM1ODIsLjk2Njk0LC45MzU4MiwxLjE5MTM3LC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuNzgwNzYsLjc4MDc2LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43Mjg1MSwuNzg5NjYsLjkwODM4LC44MzYzNywuODIzOTEsLjk2Mzc2LC44MDA2MSwuODYyNzUsLjg3NjgsLjk1NDA3LDEuMDI1OCwuNzM5MDEsLjg1MDIyLC44MzY1NSwxLjAxNTYsLjk1NTQ2LC45MjE3OSwuODcxMDcsLjkyMTc5LC44MjExNCwuODA5NiwuODk3MTMsLjk0NDM4LC45NTM1MywuOTQwODMsLjkxOTA1LC45MDQwNiwuOTQ0NiwuOTQyOTIsMS4xODc3NywuOTQyOTIsMS4wMjA1OCwuODk5MDMsLjkwMDg4LC45NDkzOCwuOTc4OTgsLjgxMDkzLC45NzU3MSwuOTQ5MzgsMS4wMjQsLjk1NzcsLjk1OTMzLC45ODYyMSwxLjA0NzQsLjk3NDU1LC45ODk4MSwuOTY3MiwuOTU5MzMsLjk0NDYsLjk3ODk4LC45NzQwNywuOTc2NDYsLjc4MDM2LDEuMTAyMDgsLjk1NDQyLC45NTI5OCwuOTc1NzksLjkzMzIsLjk0MDM5LC45MzgsLjgwNjg3LDEuMDExNDksLjgwNjg3LDEuMDIwNTgsLjgwNDc5LC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywxLjAxMTQ5LDEuMDA4NzIsLjkwMDg4LC45MTg4MiwxLjAyMTMsLjgzNjEsMS4wMjA1OCwuNjIyOTUsLjU0MzI0LC44OTAyMiwxLjA4NTk1LDEsMSwuOTAwODgsMSwuOTc0NTUsLjkzNTgyLC45MDA4OCwxLDEuMDU2ODYsLjgzNjEsLjk5NjQyLC45OTY0MiwuOTk2NDIsLjcyODUxLC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC44NjgsLjgyMzkxLC44MDA2MSwuODAwNjEsLjgwMDYxLC44MDA2MSwxLjAyNTgsMS4wMjU4LDEuMDI1OCwxLjAyNTgsLjk3NDg0LC45NTU0NiwuOTIxNzksLjkyMTc5LC45MjE3OSwuOTIxNzksLjkyMTc5LDEuMDIwNTgsLjkyMTc5LC45NDQzOCwuOTQ0MzgsLjk0NDM4LC45NDQzOCwuOTA0MDYsLjg2OTU4LC45ODIyNSwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTAzMSwuODEwOTMsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45ODYyMSwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTM5NjksLjk1OTMzLC45NDQ2LC45NDQ2LC45NDQ2LC45NDQ2LC45NDQ2LDEuMDg1OTUsLjk0NDYsLjk1NDQyLC45NTQ0MiwuOTU0NDIsLjk1NDQyLC45NDAzOSwuOTc4OTgsLjk0MDM5LC45MDgzOCwuOTQ5MzgsLjkwODM4LC45NDkzOCwuOTA4MzgsLjk0OTM4LC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjk2Mzc2LC44NDMxMywuOTc0ODQsLjk3NTcxLC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODc2OCwuOTU3NywuODc2OCwuOTU3NywuODc2OCwuOTU3NywxLDEsLjk1NDA3LC45NTkzMywuOTcwNjksLjk1OTMzLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwuODg3LDEuMDE1OTEsLjczOTAxLDEuMDQ3NCwxLDEsLjk3NDU1LC44MzY1NSwuOTg5ODEsMSwxLC44MzY1NSwuNzM5NzcsLjgzNjU1LC43MzkwMywuODQ2MzgsMS4wMzMsLjk1NTQ2LC45NTkzMywxLDEsLjk1NTQ2LC45NTkzMywuODI3MSwuOTU0MTcsLjk1OTMzLC45MjE3OSwuOTQ0NiwuOTIxNzksLjk0NDYsLjkyMTc5LC45NDQ2LC45MzYsLjkxOTY0LC44MjExNCwuOTc2NDYsMSwxLC44MjExNCwuOTc2NDYsLjgwOTYsLjc4MDM2LC44MDk2LC43ODAzNiwxLDEsLjgwOTYsLjc4MDM2LDEsMSwuODk3MTMsLjc3NDUyLC44OTcxMywxLjEwMjA4LC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDA4MywuOTc1NzksLjkwNDA2LC45NDAzOSwuOTA0MDYsLjk0NDYsLjkzOCwuOTQ0NiwuOTM4LC45NDQ2LC45MzgsMSwuOTk3OTMsLjkwODM4LC45NDkzOCwuODY4LC45MDMxLC45MjE3OSwuOTQ0NiwxLDEsLjg5NzEzLDEuMTAyMDgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwOTg5LC45MzU4LC45MTk0NSwuODMxODEsLjc1MjYxLC44Nzk5MiwuODI5NzYsLjk2MDM0LC44MzY4OSwuOTcyNjgsMS4wMDc4LC45MDgzOCwuODM2MzcsLjgwMTksLjkwMTU3LC44MDA2MSwuOTQ0NiwuOTU0MDcsLjkyNDM2LDEuMDI1OCwuODUwMjIsLjk3MTUzLDEuMDE1NiwuOTU1NDYsLjg5MTkyLC45MjE3OSwuOTIzNjEsLjg3MTA3LC45NjMxOCwuODk3MTMsLjkzNzA0LC45NTYzOCwuOTE5MDUsLjkxNzA5LC45Mjc5NiwxLjAyNTgsLjkzNzA0LC45NDgzNiwxLjAzNzMsLjk1OTMzLDEuMDA3OCwuOTU4NzEsLjk0ODM2LC45NjE3NCwuOTI2MDEsLjk0OTgsLjk4NjA3LC45NTc3NiwuOTU5MzMsMS4wNTQ1MywxLjAwNzgsLjk4Mjc1LC45MzE0LC45NTYxNywuOTE3MDEsMS4wNTk5MywuOTQ0NiwuNzgzNjcsLjk1NTMsMSwuODY4MzIsMS4wMTI4LC45NTg3MSwuOTkzOTQsLjg3NTQ4LC45NjM2MSwuODY3NzQsMS4wMDc4LC45NTg3MSwuOTQ0NiwuOTU4NzEsLjg2Nzc0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk0MDgzLC45NzU3OSwuOTQwODMsLjk3NTc5LC45NDA4MywuOTc1NzksLjkwNDA2LC45NDAzOSwuOTY2OTQsMSwuODk5MDMsMSwxLDEsLjkzNTgyLC45MzU4MiwuOTM1ODIsMSwuOTA4LC45MDgsLjkxOCwuOTQyMTksLjk0MjE5LC45NjU0NCwxLDEuMjg1LDEsMSwuODEwNzksLjgxMDc5LDEsMSwuNzQ4NTQsMSwxLDEsMSwuOTk3OTMsMSwxLDEsLjY1LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4xNzE3MywxLC44MDUzNSwuNzYxNjksMS4wMjA1OCwxLjA3MzIsMS4wNTQ4NiwxLDEsMS4zMDY5MiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE2MTYxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLGVyPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSx0cj1bMS4zNjg5OCwxLDEsLjY2MjI3LC44MDc3OSwuODE2MjUsLjk3Mjc2LC45NzI3NiwuOTc3MzMsLjkyMjIyLC44MzI2NiwuOTQyOTIsLjk0MjkyLDEuMTYxNDgsMS4wMjA1OCwuOTM1ODIsLjk2Njk0LC45MzU4MiwxLjE3MzM3LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuNzgwNzYsLjc4MDc2LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MTU0MSwuNzY4MTMsLjg1NTc2LC44MDU5MSwuODA3MjksLjk0Mjk5LC43NzUxMiwuODM2NTUsLjg2NTIzLC45MjIyMiwuOTg2MjEsLjcxNzQzLC44MTY5OCwuNzk3MjYsLjk4NTU4LC45MjIyMiwuOTA2MzcsLjgzODA5LC45MDYzNywuODA3MjksLjc2NDYzLC44NjI3NSwuOTA2OTksLjkxNjA1LC45MTU0LC44NTMwOCwuODU0NTgsLjkwNTMxLC45NDI5MiwxLjIxMjk2LC45NDI5MiwxLjAyMDU4LC44OTkwMywxLjE4NjE2LC45OTYxMywuOTE2NzcsLjc4MjE2LC45MTY3NywuOTAwODMsLjk4Nzk2LC45MTM1LC45MjE2OCwuOTUzODEsLjk4OTgxLC45NTI5OCwuOTUzODEsLjkzNDU5LC45MjE2OCwuOTE1MTMsLjkyMDA0LC45MTY3NywuOTUwNzcsLjc0OCwxLjA0NTAyLC45MTY3NywuOTIwNjEsLjk0MjM2LC44OTU0NCwuODkzNjQsLjksLjgwNjg3LC44NTc4LC44MDY4NywxLjAyMDU4LC44MDc3OSwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjg1NzgsLjk5OTczLDEuMTg2MTYsLjkxMzM5LDEuMDgwNzQsLjgyODkxLDEuMDIwNTgsLjU1NTA5LC43MTUyNiwuODkwMjIsMS4wODU5NSwxLDEsMS4xODYxNiwxLC45NjczNiwuOTM1ODIsMS4xODYxNiwxLDEuMDQ4NjQsLjgyNzExLC45OTA0MywuOTkwNDMsLjk5MDQzLC43MTU0MSwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODQ1LC44MDcyOSwuNzc1MTIsLjc3NTEyLC43NzUxMiwuNzc1MTIsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45NTk2MSwuOTIyMjIsLjkwNjM3LC45MDYzNywuOTA2MzcsLjkwNjM3LC45MDYzNywxLjAyMDU4LC45MDI1MSwuOTA2OTksLjkwNjk5LC45MDY5OSwuOTA2OTksLjg1NDU4LC44MzY1OSwuOTQ5NTEsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjg1ODExLC43ODIxNiwuOTAwODMsLjkwMDgzLC45MDA4MywuOTAwODMsLjk1MzgxLC45NTM4MSwuOTUzODEsLjk1MzgxLC45MTM1LC45MjE2OCwuOTE1MTMsLjkxNTEzLC45MTUxMywuOTE1MTMsLjkxNTEzLDEuMDg1OTUsLjkxNjc3LC45MTY3NywuOTE2NzcsLjkxNjc3LC45MTY3NywuODkzNjQsLjkyMzMyLC44OTM2NCwuODU1NzYsLjk5NjEzLC44NTU3NiwuOTk2MTMsLjg1NTc2LC45OTYxMywuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC45NDI5OSwuNzY3ODMsLjk1OTYxLC45MTY3NywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjg2NTIzLC45MTM1LC44NjUyMywuOTEzNSwuODY1MjMsLjkxMzUsMSwxLC45MjIyMiwuOTIxNjgsLjkyMjIyLC45MjE2OCwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjg2MDM2LC45NzA5NiwuNzE3NDMsLjk4OTgxLDEsMSwuOTUyOTgsLjc5NzI2LC45NTM4MSwxLDEsLjc5NzI2LC42ODk0LC43OTcyNiwuNzQzMjEsLjgxNjkxLDEuMDAwNiwuOTIyMjIsLjkyMTY4LDEsMSwuOTIyMjIsLjkyMTY4LC43OTQ2NCwuOTIwOTgsLjkyMTY4LC45MDYzNywuOTE1MTMsLjkwNjM3LC45MTUxMywuOTA2MzcsLjkxNTEzLC45MDksLjg3NTE0LC44MDcyOSwuOTUwNzcsMSwxLC44MDcyOSwuOTUwNzcsLjc2NDYzLC43NDgsLjc2NDYzLC43NDgsMSwxLC43NjQ2MywuNzQ4LDEsMSwuODYyNzUsLjcyNjUxLC44NjI3NSwxLjA0NTAyLC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MTU0LC45NDIzNiwuODU0NTgsLjg5MzY0LC44NTQ1OCwuOTA1MzEsLjksLjkwNTMxLC45LC45MDUzMSwuOSwxLC45NzI3NiwuODU1NzYsLjk5NjEzLC44NDUsLjg1ODExLC45MDI1MSwuOTE2NzcsMSwxLC44NjI3NSwxLjA0NTAyLDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMDA4OTksMS4zMDYyOCwuODU1NzYsLjgwMTc4LC42Njg2MiwuNzkyNywuNjkzMjMsLjg4MTI3LC43MjQ1OSwuODk3MTEsLjk1MzgxLC44NTU3NiwuODA1OTEsLjc4MDUsLjk0NzI5LC43NzUxMiwuOTA1MzEsLjkyMjIyLC45MDYzNywuOTg2MjEsLjgxNjk4LC45MjY1NSwuOTg1NTgsLjkyMjIyLC44NTM1OSwuOTA2MzcsLjkwOTc2LC44MzgwOSwuOTQ1MjMsLjg2Mjc1LC44MzUwOSwuOTMxNTcsLjg1MzA4LC44MzM5MiwuOTIzNDYsLjk4NjIxLC44MzUwOSwuOTI4ODYsLjkxMzI0LC45MjE2OCwuOTUzODEsLjkwNjQ2LC45Mjg4NiwuOTA1NTcsLjg2ODQ3LC45MDI3NiwuOTEzMjQsLjg2ODQyLC45MjE2OCwuOTk1MzEsLjk1MzgxLC45MjI0LC44NTQwOCwuOTI2OTksLjg2ODQ3LDEuMDA1MSwuOTE1MTMsLjgwNDg3LC45MzQ4MSwxLC44ODE1OSwxLjA1MjE0LC45MDY0NiwuOTczNTUsLjgxNTM5LC44OTM5OCwuODU5MjMsLjk1MzgxLC45MDY0NiwuOTE1MTMsLjkwNjQ2LC44NTkyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MTU0LC45NDIzNiwuOTE1NCwuOTQyMzYsLjkxNTQsLjk0MjM2LC44NTQ1OCwuODkzNjQsLjk2Njk0LDEsLjg5OTAzLDEsMSwxLC45MTc4MiwuOTE3ODIsLjkxNzgyLDEsLjg5NiwuODk2LC44OTYsLjkzMzIsLjkzMzIsLjk1OTczLDEsMS4yNiwxLDEsLjgwNDc5LC44MDE3OCwxLDEsLjg1NjMzLDEsMSwxLDEsLjk3Mjc2LDEsMSwxLC42OTgsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE0NTQyLDEsLjc5MTk5LC43ODY5NCwxLjAyMDU4LDEuMDM0OTMsMS4wNTQ4NiwxLDEsMS4yMzAyNiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjIwMDA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLGlyPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSxhcj1bMS4zNjg5OCwxLDEsLjY1NTA3LC44NDk0MywuODU2MzksLjg4NDY1LC44ODQ2NSwuODY5MzYsLjg4MzA3LC44Njk0OCwuODUyODMsLjg1MjgzLDEuMDYzODMsMS4wMjA1OCwuNzU5NDUsLjkyMTksLjc1OTQ1LDEuMTczMzcsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC43NTk0NSwuNzU5NDUsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjY5MDQ2LC43MDkyNiwuODUxNTgsLjc3ODEyLC43Njg1MiwuODk1OTEsLjcwNDY2LC43NjEyNSwuODAwOTQsLjg2ODIyLC44Mzg2NCwuNzI4LC43NzIxMiwuNzk0NzUsLjkzNjM3LC44NzUxNCwuODU4OCwuNzYwMTMsLjg1ODgsLjcyNDIxLC42OTg2NiwuNzc1OTgsLjg1OTkxLC44MDgxMSwuODc4MzIsLjc4MTEyLC43NzUxMiwuODU2MiwxLjAyMjIsMS4xODQxNywxLjAyMjIsMS4yNzAxNCwuODk5MDMsMS4xNTAxMiwuOTM4NTksLjk0Mzk5LC44NDYsLjk0Mzk5LC44MTQ1MywxLjAxODYsLjk0MjE5LC45NjAxNywxLjAzMDc1LDEuMDIxNzUsLjkxMiwxLjAzMDc1LC45Njk5OCwuOTYwMTcsLjkzODU5LC45NDM5OSwuOTQzOTksLjk1NDkzLC43NDYsMS4xMjY1OCwuOTQ1NzgsLjkxLC45NzksLjg4MiwuODgyLC44MywuODUwMzQsLjgzNTM3LC44NTAzNCwxLjAyMDU4LC43MDg2OSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjgzNTM3LC45MDA4MywxLjE1MDEyLC45MTYxLC45NDU2NSwuNzM1NDEsMS4wMjA1OCwuNTM2MDksLjY5MzUzLC43OTUxOSwxLjA4NTk1LDEsMSwxLjE1MDEyLDEsLjkxOTc0LC43NTk0NSwxLjE1MDEyLDEsLjk0NDYsLjczMzYxLC45MDA1LC45MDA1LC45MDA1LC42Mjg2NCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuNzczLC43Njg1MiwuNzA0NjYsLjcwNDY2LC43MDQ2NiwuNzA0NjYsLjgzODY0LC44Mzg2NCwuODM4NjQsLjgzODY0LC45MDU2MSwuODc1MTQsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsLjg1ODgsMS4wMjA1OCwuODU3NTEsLjg1OTkxLC44NTk5MSwuODU5OTEsLjg1OTkxLC43NzUxMiwuNzYwMTMsLjg4MDc1LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC44MDc1LC44NDYsLjgxNDUzLC44MTQ1MywuODE0NTMsLjgxNDUzLC44MjQyNCwuODI0MjQsLjgyNDI0LC44MjQyNCwuOTI3OCwuOTYwMTcsLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwxLjA4NTk1LC44NTYyLC45NDU3OCwuOTQ1NzgsLjk0NTc4LC45NDU3OCwuODgyLC45NDU3OCwuODgyLC44NTE1OCwuOTM4NTksLjg1MTU4LC45Mzg1OSwuODUxNTgsLjkzODU5LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC43Njg1MiwuODQ2LC44OTU5MSwuODU0NCwuOTA1NjEsLjk0Mzk5LC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuODAwOTQsLjk0MjE5LC44MDA5NCwuOTQyMTksLjgwMDk0LC45NDIxOSwxLDEsLjg2ODIyLC45NjAxNywuODY4MjIsLjk2MDE3LC44Mzg2NCwuODI0MjQsLjgzODY0LC44MjQyNCwuODM4NjQsLjgyNDI0LC44Mzg2NCwxLjAzMDc1LC44Mzg2NCwuODI0MjQsLjgxNDAyLDEuMDI3MzgsLjcyOCwxLjAyMTc1LDEsMSwuOTEyLC43OTQ3NSwxLjAzMDc1LDEsMSwuNzk0NzUsLjgzOTExLC43OTQ3NSwuNjYyNjYsLjgwNTUzLDEuMDY2NzYsLjg3NTE0LC45NjAxNywxLDEsLjg3NTE0LC45NjAxNywuODY4NjUsLjg3Mzk2LC45NjAxNywuODU4OCwuOTM4NTksLjg1ODgsLjkzODU5LC44NTg4LC45Mzg1OSwuODY3LC44NDc1OSwuNzI0MjEsLjk1NDkzLDEsMSwuNzI0MjEsLjk1NDkzLC42OTg2NiwuNzQ2LC42OTg2NiwuNzQ2LDEsMSwuNjk4NjYsLjc0NiwxLDEsLjc3NTk4LC44ODQxNywuNzc1OTgsMS4xMjY1OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODc4MzIsLjk3OSwuNzc1MTIsLjg4MiwuNzc1MTIsLjg1NjIsLjgzLC44NTYyLC44MywuODU2MiwuODMsMSwuODg0NjUsLjg1MTU4LC45Mzg1OSwuNzczLC44MDc1LC44NTc1MSwuODU2MiwxLDEsLjc3NTk4LDEuMTI2NTgsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUzMTMsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4wODEwNiwxLjAzOTAxLC44NTE1OCwuNzcwMjUsLjYyMjY0LC43NjQ2LC42NTM1MSwuODYwMjYsLjY5NDYxLC44OTk0NywxLjAzMDc1LC44NTE1OCwuNzc4MTIsLjc2NDQ5LC44ODgzNiwuNzA0NjYsLjg1NjIsLjg2ODIyLC44NTg4LC44Mzg2NCwuNzcyMTIsLjg1MzA4LC45MzYzNywuODc1MTQsLjgyMzUyLC44NTg4LC44NTcwMSwuNzYwMTMsLjg5MDU4LC43NzU5OCwuODE1NiwuODI1NjUsLjc4MTEyLC43Nzg5OSwuODkzODYsLjgzODY0LC44MTU2LC45NDg2LC45MjM4OCwuOTYxODYsMS4wMzA3NSwuOTExMjMsLjk0ODYsLjkzMjk4LC44NzgsLjkzOTQyLC45MjM4OCwuODQ1OTYsLjk2MTg2LC45NTExOSwxLjAzMDc1LC45MjIsLjg4Nzg3LC45NTgyOSwuODgsLjkzNTU5LC45Mzg1OSwuNzg4MTUsLjkzNzU4LDEsLjg5MjE3LDEuMDM3MzcsLjkxMTIzLC45Mzk2OSwuNzc0ODcsLjg1NzY5LC44Njc5OSwxLjAzMDc1LC45MTEyMywuOTM4NTksLjkxMTIzLC44Njc5OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC44NzgzMiwuOTc5LC43NzUxMiwuODgyLC45MjE5LDEsLjg5OTAzLDEsMSwxLC44NzMyMSwuODczMjEsLjg3MzIxLDEsMS4wMjcsMS4wMjcsMS4wMjcsLjg2ODQ3LC44Njg0NywuNzkxMjEsMSwxLjEyNCwxLDEsLjczNTcyLC43MzU3MiwxLDEsLjg1MDM0LDEsMSwxLDEsLjg4NDY1LDEsMSwxLC42NjksMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0ODI4LDEsLjc0OTQ4LC43NTE4NywxLjAyMDU4LC45ODM5MSwxLjAyMTE5LDEsMSwxLjA2MjMzLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDUyMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0scnI9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LHNyPVsxLjM2ODk4LDEsMSwuNzYzMDUsLjgyNzg0LC45NDkzNSwuODkzNjQsLjkyMjQxLC44OTA3MywuOTA3MDYsLjk4NDcyLC44NTI4MywuODUyODMsMS4wNjY0LDEuMDIwNTgsLjc0NTA1LC45MjE5LC43NDUwNSwxLjIzNDU2LC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuNzQ1MDUsLjc0NTA1LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43MzAwMiwuNzI2MDEsLjkxNzU1LC44MTI2LC44MDMxNCwuOTIyMjIsLjczNzY0LC43OTcyNiwuODMwNTEsLjkwMjg0LC44NjAyMywuNzQsLjgxMjYsLjg0ODY5LC45NjUxOCwuOTExMTUsLjg4NTgsLjc5NzYxLC44ODU4LC43NDQ5OCwuNzM5MTQsLjgxMzYzLC44OTU5MSwuODM2NTksLjg5NjMzLC44NTYwOCwuODExMSwuOTA1MzEsMS4wMjIyLDEuMjI3MzYsMS4wMjIyLDEuMjcwMTQsLjg5OTAzLC45MDA4OCwuODY2NjcsMS4wMjMxLC44OTYsMS4wMTQxMSwuOTAwODMsMS4wNTA5OSwxLjAwNTEyLC45OTc5MywxLjA1MzI2LDEuMDkzNzcsLjkzOCwxLjA2MjI2LDEuMDAxMTksLjk5NzkzLC45ODcxNCwxLjAyMzEsMS4wMTIzMSwuOTgxOTYsLjc5MiwxLjE5MTM3LC45OTA3NCwuOTYyLDEuMDE5MTUsLjkyNiwuOTQyLC44NTYsLjg1MDM0LC45MjAwNiwuODUwMzQsMS4wMjA1OCwuNjkwNjcsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjAwNiwuOTMzMiwuOTAwODgsLjkxODgyLC45MzQ4NCwuNzUzMzksMS4wMjA1OCwuNTY4NjYsLjU0MzI0LC43OTUxOSwxLjA4NTk1LDEsMSwuOTAwODgsMSwuOTUzMjUsLjc0NTA1LC45MDA4OCwxLC45NzE5OCwuNzUzMzksLjkxMDA5LC45MTAwOSwuOTEwMDksLjY2NDY2LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC43ODgsLjgwMzE0LC43Mzc2NCwuNzM3NjQsLjczNzY0LC43Mzc2NCwuODYwMjMsLjg2MDIzLC44NjAyMywuODYwMjMsLjkyOTE1LC45MTExNSwuODg1OCwuODg1OCwuODg1OCwuODg1OCwuODg1OCwxLjAyMDU4LC44ODU4LC44OTU5MSwuODk1OTEsLjg5NTkxLC44OTU5MSwuODExMSwuNzk2MTEsLjg5NzEzLC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjkzNiwuODk2LC45MDA4MywuOTAwODMsLjkwMDgzLC45MDA4MywuODQyMjQsLjg0MjI0LC44NDIyNCwuODQyMjQsLjk3Mjc2LC45OTc5MywuOTg3MTQsLjk4NzE0LC45ODcxNCwuOTg3MTQsLjk4NzE0LDEuMDg1OTUsLjg5ODc2LC45OTA3NCwuOTkwNzQsLjk5MDc0LC45OTA3NCwuOTQyLDEuMDIzMSwuOTQyLC45MTc1NSwuODY2NjcsLjkxNzU1LC44NjY2NywuOTE3NTUsLjg2NjY3LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC44MDMxNCwuODk2LC45MjIyMiwuOTMzNzIsLjkyOTE1LDEuMDE0MTEsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLC44MzA1MSwxLjAwNTEyLDEsMSwuOTAyODQsLjk5NzkzLC45MDk3NiwuOTk3OTMsLjg2MDIzLC44NDIyNCwuODYwMjMsLjg0MjI0LC44NjAyMywuODQyMjQsLjg2MDIzLDEuMDUzMjYsLjg2MDIzLC44NDIyNCwuODI4NzMsMS4wNzQ2OSwuNzQsMS4wOTM3NywxLDEsLjkzOCwuODQ4NjksMS4wNjIyNiwxLDEsLjg0ODY5LC44MzcwNCwuODQ4NjksLjgxNDQxLC44NTU4OCwxLjA4OTI3LC45MTExNSwuOTk3OTMsMSwxLC45MTExNSwuOTk3OTMsLjkxODg3LC45MDk5MSwuOTk3OTMsLjg4NTgsLjk4NzE0LC44ODU4LC45ODcxNCwuODg1OCwuOTg3MTQsLjg5NCwuOTE0MzQsLjc0NDk4LC45ODE5NiwxLDEsLjc0NDk4LC45ODE5NiwuNzM5MTQsLjc5MiwuNzM5MTQsLjc5MiwxLDEsLjczOTE0LC43OTIsMSwxLC44MTM2MywuOTA0LC44MTM2MywxLjE5MTM3LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTYzMywxLjAxOTE1LC44MTExLC45NDIsLjgxMTEsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsLjkwNTMxLC44NTYsMSwuOTIyNDEsLjkxNzU1LC44NjY2NywuNzg4LC44NjkzNiwuODg1OCwuODk4NzYsMSwxLC44MTM2MywxLjE5MTM3LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDM4OCwxLjAzOTAxLC45MjEzOCwuNzgxMDUsLjcxNTQsLjg2MTY5LC44MDUxMywuOTQwMDcsLjgyNTI4LC45ODYxMiwxLjA2MjI2LC45MTc1NSwuODEyNiwuODE4ODQsLjkyODE5LC43Mzc2NCwuOTA1MzEsLjkwMjg0LC44ODU4LC44NjAyMywuODEyNiwuOTExNzIsLjk2NTE4LC45MTExNSwuODMwODksLjg4NTgsLjg3NzkxLC43OTc2MSwuODkyOTcsLjgxMzYzLC44ODE1NywuODk5OTIsLjg1NjA4LC44MTk5MiwuOTQzMDcsLjg2MDIzLC44ODE1NywuOTUzMDgsLjk4Njk5LC45OTc5MywxLjA2MjI2LC45NTgxNywuOTUzMDgsLjk3MzU4LC45MjgsLjk4MDg4LC45ODY5OSwuOTI3NjEsLjk5NzkzLC45NjAxNywxLjA2MjI2LC45ODYsLjk0NCwuOTU5NzgsLjkzOCwuOTY3MDUsLjk4NzE0LC44MDQ0MiwuOTg5NzIsMSwuODk3NjIsMS4wNDU1MiwuOTU4MTcsLjk5MDA3LC44NzA2NCwuOTE4NzksLjg4ODg4LDEuMDYyMjYsLjk1ODE3LC45ODcxNCwuOTU4MTcsLjg4ODg4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjg5NjMzLDEuMDE5MTUsLjgxMTEsLjk0MiwuOTIxOSwxLC44OTkwMywxLDEsMSwuOTMxNzMsLjkzMTczLC45MzE3MywxLDEuMDYzMDQsMS4wNjMwNCwxLjA2OTA0LC44OTkwMywuODk5MDMsLjgwNTQ5LDEsMS4xNTYsMSwxLC43NjU3NSwuNzY1NzUsMSwxLC43MjQ1OCwxLDEsMSwxLC45MjI0MSwxLDEsMSwuNjE5LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNzI1NywxLC43NDcwNSwuNzExMTksMS4wMjA1OCwxLjAyNCwxLjAyMTE5LDEsMSwxLjE1MzYsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTYzOCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxucj17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn0sb3I9WzEuNzY3MzgsMSwxLC45OTI5NywuOTgyNCwxLjA0MDE2LDEuMDY0OTcsMS4wMzQyNCwuOTc1MjksMS4xNzY0NywxLjIzMjAzLDEuMTA4NSwxLjEwODUsMS4xNjkzOSwxLjIxMDcsLjk3NTQsMS4yMTQwOCwuOTc1NCwxLjU5NTc4LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsLjgxMzc4LC44MTM3OCwxLjIxMDcsMS4yMTA3LDEuMjEwNywuNzE3MDMsLjk3ODQ3LC45NzM2MywuODg3NzYsLjg2NDEsMS4wMjA5NiwuNzk3OTUsLjg1MTMyLC45MTQsMS4wNjA4NSwxLjE0MDYsLjgwMDcsLjg5ODU4LC44MzY5MywxLjE0ODg5LDEuMDkzOTgsLjk3NDg5LC45MjA5NCwuOTc0ODksLjkwMzk5LC44NDA0MSwuOTU5MjMsMS4wMDEzNSwxLDEuMDY0NjcsLjk4MjQzLC45MDk5NiwuOTkzNjEsMS4xMDg1LDEuNTY5NDIsMS4xMDg1LDEuMjEwNywuNzQ2MjcsLjk0MjgyLC45Njc1MiwxLjAxNTE5LC44NjMwNCwxLjAxMzU5LC45NzI3OCwxLjE1MTAzLDEuMDEzNTksLjk4NTYxLDEuMDIyODUsMS4wMjI4NSwxLjAwNTI3LDEuMDIyODUsMS4wMzAyLC45OTA0MSwxLjAwMDgsMS4wMTUxOSwxLjAxMzU5LDEuMDIyNTgsLjc5MTA0LDEuMTY4NjIsLjk5MDQxLC45NzQ1NCwxLjAyNTExLC45OTI5OCwuOTY3NTIsLjk1ODAxLC45NDg1NiwxLjE2NTc5LC45NDg1NiwxLjIxMDcsLjk4MjQsMS4wMzQyNCwxLjAzNDI0LDEsMS4wMzQyNCwxLjE2NTc5LC44NzI3LDEuMzg3MSwxLjE4NjIyLDEuMTA4MTgsMS4wNDQ3OCwxLjIxMDcsMS4xODYyMiwuNzUxNTUsLjk0OTk0LDEuMjg4MjYsMS4yMTQwOCwxLjIxNDA4LC45MTA1NiwxLC45MTU3MiwuOTc1NCwuNjQ2NjMsMS4xODMyOCwxLjI0ODY2LDEuMDQ0NzgsMS4xNDE2OSwxLjE1NzQ5LDEuMTczODksLjcxNzAzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45MzUwNiwuODY0MSwuNzk3OTUsLjc5Nzk1LC43OTc5NSwuNzk3OTUsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMDIwOTYsMS4wOTM5OCwuOTc0MjYsLjk3NDI2LC45NzQyNiwuOTc0MjYsLjk3NDI2LDEuMjEwNywuOTc0ODksMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwuOTA5OTYsLjkyMDk0LDEuMDI3OTgsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjkzMTM2LC44NjMwNCwuOTcyNzgsLjk3Mjc4LC45NzI3OCwuOTcyNzgsMS4wMjI4NSwxLjAyMjg1LDEuMDIyODUsMS4wMjI4NSwuOTcxMjIsLjk5MDQxLDEsMSwxLDEsMSwxLjI4ODI2LDEuMDAwOCwuOTkwNDEsLjk5MDQxLC45OTA0MSwuOTkwNDEsLjk2NzUyLDEuMDE1MTksLjk2NzUyLC45NzM2MywuOTY3NTIsLjk3MzYzLC45Njc1MiwuOTczNjMsLjk2NzUyLC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwxLjAyMDk2LDEuMDMwNTcsMS4wMjA5NiwxLjAzNTE3LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuOTE0LDEuMDEzNTksLjkxNCwxLjAxMzU5LC45MTQsMS4wMTM1OSwxLDEsMS4wNjA4NSwuOTg1NjEsMS4wNjA4NSwxLjAwODc5LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LC45NzEzOCwxLjA4NjkyLC44MDA3LDEuMDIyODUsMSwxLDEuMDA1MjcsLjgzNjkzLDEuMDIyODUsMSwxLC44MzY5MywuOTQ1NSwuODM2OTMsLjkwNDE4LC44MzY5MywxLjEzMDA1LDEuMDkzOTgsLjk5MDQxLDEsMSwxLjA5Mzk4LC45OTA0MSwuOTY2OTIsMS4wOTI1MSwuOTkwNDEsLjk3NDg5LDEuMDAwOCwuOTc0ODksMS4wMDA4LC45NzQ4OSwxLjAwMDgsLjkzOTk0LC45NzkzMSwuOTAzOTksMS4wMjI1OCwxLDEsLjkwMzk5LDEuMDIyNTgsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwxLDEsLjk1OTIzLDEuMDcwMzQsLjk1OTIzLDEuMTY4NjIsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wNjQ2NywxLjAyNTExLC45MDk5NiwuOTY3NTIsLjkwOTk2LC45OTM2MSwuOTU4MDEsLjk5MzYxLC45NTgwMSwuOTkzNjEsLjk1ODAxLDEuMDc3MzMsMS4wMzQyNCwuOTczNjMsLjk2NzUyLC45MzUwNiwuOTMxMzYsLjk3NDg5LDEuMDAwOCwxLDEsLjk1OTIzLDEuMTY4NjIsMS4xNTEwMywxLjE1MTAzLDEuMDExNzMsMS4wMzk1OSwuNzU5NTMsLjgxMzc4LC43OTkxMiwxLjE1MTAzLDEuMjE5OTQsLjk1MTYxLC44NzgxNSwxLjAxMTQ5LC44MTUyNSwuNzY3NiwuOTgxNjcsMS4wMTEzNCwxLjAyNTQ2LC44NDA5NywxLjAzMDg5LDEuMTgxMDIsLjk3MzYzLC44ODc3NiwuODUxMzQsLjk3ODI2LC43OTc5NSwuOTkzNjEsMS4wNjA4NSwuOTc0ODksMS4xNDA2LC44OTg1OCwxLjAzODgsMS4xNDg4OSwxLjA5Mzk4LC44NjAzOSwuOTc0ODksMS4wNTk1LC45MjA5NCwuOTQ3OTMsLjk1OTIzLC45MDk5NiwuOTkzNDYsLjk4MjQzLDEuMDIxMTIsLjk1NDkzLDEuMTQwNiwuOTA5OTYsMS4wMzU3NCwxLjAyNTk3LDEuMDAwOCwxLjE4MTAyLDEuMDY2MjgsMS4wMzU3NCwxLjAxOTIsMS4wMTkzMiwxLjAwODg2LC45NzUzMSwxLjAxMDYsMS4wMDA4LDEuMTMxODksMS4xODEwMiwxLjAyMjc3LC45ODY4MywxLjAwMTYsLjk5NTYxLDEuMDcyMzcsMS4wMDA4LC45MDQzNCwuOTk5MjEsLjkzODAzLC44OTY1LDEuMjMwODUsMS4wNjYyOCwxLjA0OTgzLC45NjI2OCwxLjA0OTksLjk4NDM5LDEuMTgxMDIsMS4wNjYyOCwxLjAwMDgsMS4wNjYyOCwuOTg0MzksLjc5Nzk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDk0NjYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk3Mjc4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDIwNjUsMSwxLDEsMSwxLDEsMS4wNjQ2NywxLjAyNTExLDEuMDY0NjcsMS4wMjUxMSwxLjA2NDY3LDEuMDI1MTEsLjkwOTk2LC45Njc1MiwxLDEuMjE0MDgsLjg5OTAzLDEsMSwuNzUxNTUsMS4wNDM5NCwxLjA0Mzk0LDEuMDQzOTQsMS4wNDM5NCwuOTg2MzMsLjk4NjMzLC45ODYzMywuNzMwNDcsLjczMDQ3LDEuMjA2NDIsLjkxMjExLDEuMjU2MzUsMS4yMjIsMS4wMjk1NiwxLjAzMzcyLDEuMDMzNzIsLjk2MDM5LDEuMjQ2MzMsMSwxLjEyNDU0LC45MzUwMywxLjAzNDI0LDEuMTk2ODcsMS4wMzQyNCwxLDEsMSwuNzcxLDEsMSwxLjE1NzQ5LDEuMTU3NDksMS4xNTc0OSwxLjEwOTQ4LC44NjI3OSwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYxODIsMSwxLDEuMTY4OTcsMSwuOTYwODUsLjkwMTM3LDEuMjEwNywxLjE4NDE2LDEuMTM5NzMsLjY5ODI1LC45NzE2LDIuMTAzMzksMS4yOTAwNCwxLjI5MDA0LDEuMjExNzIsMS4yOTAwNCwxLjI5MDA0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODg3NCwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMDkxOTMsMS4wOTE5MywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sZ3I9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9LElyPVsxLjc2NzM4LDEsMSwuOTg5NDYsMS4wMzk1OSwxLjA0MDE2LDEuMDI4MDksMS4wMzYsLjk3NjM5LDEuMTA5NTMsMS4yMzIwMywxLjExMTQ0LDEuMTExNDQsMS4xNjkzOSwxLjIxMjM3LC45NzU0LDEuMjEyNjEsLjk3NTQsMS41OTc1NCwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwuODEzNzgsLjgxMzc4LDEuMjEyMzcsMS4yMTIzNywxLjIxMjM3LC43MzU0MSwuOTc4NDcsLjk3MzYzLC44OTcyMywuODc4OTcsMS4wNDI2LC43OTQyOSwuODUyOTIsLjkxMTQ5LDEuMDU4MTUsMS4xNDA2LC43OTYzMSwuOTAxMjgsLjgzODUzLDEuMDQzOTYsMS4xMDYxNSwuOTc1NTIsLjk0NDM2LC45NzU1MiwuODg2NDEsLjgwNTI3LC45NjA4MywxLjAwMTM1LDEsMS4wNjc3NywuOTgxNywuOTExNDIsLjk5MzYxLDEuMTExNDQsMS41NzI5MywxLjExMTQ0LDEuMjEyMzcsLjc0NjI3LDEuMzE4MTgsMS4wNjU4NSwuOTcwNDIsLjgzMDU1LC45NzA0MiwuOTM1MDMsMS4xMjYxLC45NzA0MiwuOTc5MjIsMS4xNDIzNiwuOTQ1NTIsMS4wMTA1NCwxLjE0MjM2LDEuMDI0NzEsLjk3OTIyLC45NDE2NSwuOTcwNDIsLjk3MDQyLDEuMDI3NiwuNzg5MjksMS4xMjYxLC45NzkyMiwuOTU4NzQsMS4wMjE5NywuOTg1MDcsLjk2NzUyLC45NzE2OCwuOTUxMDcsMS4xNjU3OSwuOTUxMDcsMS4yMTIzNywxLjAzOTU5LDEuMDM2LDEuMDM2LDEsMS4wMzYsMS4xNjU3OSwuODczNTcsMS4zMTgxOCwxLjE4NzU0LDEuMjY3ODEsMS4wNTM1NiwxLjIxMjM3LDEuMTg2MjIsLjc5NDg3LC45NDk5NCwxLjI5MDA0LDEuMjQwNDcsMS4yNDA0NywxLjMxODE4LDEsLjkxNDg0LC45NzU0LDEuMzE4MTgsMS4xMzQ5LDEuMjQ4NjYsMS4wNTM1NiwxLjEzOTM0LDEuMTU1NzQsMS4xNzM4OSwuNzM1NDEsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk0Mzg1LC44Nzg5NywuNzk0MjksLjc5NDI5LC43OTQyOSwuNzk0MjksMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMDQyNiwxLjEwNjE1LC45NzU1MiwuOTc1NTIsLjk3NTUyLC45NzU1MiwuOTc1NTIsMS4yMTIzNywuOTc1NTIsMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwuOTExNDIsLjk0NDM2LC45ODcyMSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwuOTY3MDUsLjgzMDU1LC45MzUwMywuOTM1MDMsLjkzNTAzLC45MzUwMywxLjE0MjM2LDEuMTQyMzYsMS4xNDIzNiwxLjE0MjM2LC45MzEyNSwuOTc5MjIsLjk0MTY1LC45NDE2NSwuOTQxNjUsLjk0MTY1LC45NDE2NSwxLjI5MDA0LC45NDE2NSwuOTc5MjIsLjk3OTIyLC45NzkyMiwuOTc5MjIsLjk2NzUyLC45NzA0MiwuOTY3NTIsLjk3MzYzLDEuMDY1ODUsLjk3MzYzLDEuMDY1ODUsLjk3MzYzLDEuMDY1ODUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwxLjA0MjYsMS4wMDMzLDEuMDQyNiwuOTcwNDIsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC45MTE0OSwuOTcwNDIsLjkxMTQ5LC45NzA0MiwuOTExNDksLjk3MDQyLDEsMSwxLjA1ODE1LC45NzkyMiwxLjA1ODE1LC45NzkyMiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwuOTc0NDEsMS4wNDMwMiwuNzk2MzEsMS4wMTU4MiwxLDEsMS4wMTA1NCwuODM4NTMsMS4xNDIzNiwxLDEsLjgzODUzLDEuMDkxMjUsLjgzODUzLC45MDQxOCwuODM4NTMsMS4xOTUwOCwxLjEwNjE1LC45NzkyMiwxLDEsMS4xMDYxNSwuOTc5MjIsMS4wMTAzNCwxLjEwNDY2LC45NzkyMiwuOTc1NTIsLjk0MTY1LC45NzU1MiwuOTQxNjUsLjk3NTUyLC45NDE2NSwuOTE2MDIsLjkxOTgxLC44ODY0MSwxLjAyNzYsMSwxLC44ODY0MSwxLjAyNzYsLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwxLDEsLjk2MDgzLDEuMDU0MDMsLjk1OTIzLDEuMTY4NjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wNjc3NywxLjAyMTk3LC45MTE0MiwuOTY3NTIsLjkxMTQyLC45OTM2MSwuOTcxNjgsLjk5MzYxLC45NzE2OCwuOTkzNjEsLjk3MTY4LDEuMjMxOTksMS4wMzYsLjk3MzYzLDEuMDY1ODUsLjk0Mzg1LC45NjcwNSwuOTc1NTIsLjk0MTY1LDEsMSwuOTYwODMsMS4xMjYxLDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LC45NTE2MSwxLjI3MTI2LDEuMDA4MTEsLjgzMjg0LC43NzcwMiwuOTkxMzcsLjk1MjUzLDEuMDM0NywuODYxNDIsMS4wNzIwNSwxLjE0MjM2LC45NzM2MywuODk3MjMsLjg2ODY5LDEuMDk4MTgsLjc5NDI5LC45OTM2MSwxLjA1ODE1LC45NzU1MiwxLjE0MDYsLjkwMTI4LDEuMDY2NjIsMS4wNDM5NiwxLjEwNjE1LC44NDkxOCwuOTc1NTIsMS4wNDY5NCwuOTQ0MzYsLjk4MDE1LC45NjA4MywuOTExNDIsMS4wMDM1NiwuOTgxNywxLjAxOTQ1LC45ODk5OSwxLjE0MDYsLjkxMTQyLDEuMDQ5NjEsLjk4OTgsMS4wMDYzOSwxLjE0MjM2LDEuMDc1MTQsMS4wNDk2MSwuOTk2MDcsMS4wMjg5NywxLjAwOCwuOTg5OCwuOTUxMzQsMS4wMDYzOSwxLjExMTIxLDEuMTQyMzYsMS4wMDUxOCwuOTc5ODEsMS4wMjE4NiwxLDEuMDg1NzgsLjk0MTY1LC45OTMxNCwuOTgzODcsLjkzMDI4LC45MzM3NywxLjM1MTI1LDEuMDc1MTQsMS4xMDY4NywuOTM0OTEsMS4wNDIzMiwxLjAwMzUxLDEuMTQyMzYsMS4wNzUxNCwuOTQxNjUsMS4wNzUxNCwxLjAwMzUxLC43OTQyOSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA5MDk3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MzUwMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTY2MDksMSwxLDEsMSwxLDEsMS4wNjc3NywxLjAyMTk3LDEuMDY3NzcsMS4wMjE5NywxLjA2Nzc3LDEuMDIxOTcsLjkxMTQyLC45Njc1MiwxLDEuMjEyNjEsLjg5OTAzLDEsMSwuNzUxNTUsMS4wNDc0NSwxLjA0NzQ1LDEuMDQ3NDUsMS4wNDM5NCwuOTg2MzMsLjk4NjMzLC45ODYzMywuNzI5NTksLjcyOTU5LDEuMjA1MDIsLjkxNDA2LDEuMjY1MTQsMS4yMjIsMS4wMjk1NiwxLjAzMzcyLDEuMDMzNzIsLjk2MDM5LDEuMjQ2MzMsMSwxLjA5MTI1LC45MzMyNywxLjAzMzM2LDEuMTY1NDEsMS4wMzYsMSwxLDEsLjc3MSwxLDEsMS4xNTU3NCwxLjE1NTc0LDEuMTU1NzQsMS4xNTU3NCwuODYzNjQsLjk0NDM0LC44NjI3OSwuOTQ0MzQsLjg2MjI0LDEsMSwxLjE2Nzk4LDEsLjk2MDg1LC45MDA2OCwxLjIxMjM3LDEuMTg0MTYsMS4xMzkwNCwuNjk4MjUsLjk3MTYsMi4xMDMzOSwxLjI5MDA0LDEuMjkwMDQsMS4yMTMzOSwxLjI5MDA0LDEuMjkwMDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE4Nzc1LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4xMzI2OSwxLjEzMjY5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxjcj17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sQ3I9WzEuNzY3MzgsMSwxLC45ODk0NiwxLjE0NzYzLDEuMDUzNjUsMS4wNjIzNCwuOTY5MjcsLjkyNTg2LDEuMTUzNzMsMS4xODQxNCwuOTEzNDksLjkxMzQ5LDEuMDc0MDMsMS4xNzMwOCwuNzgzODMsMS4yMDA4OCwuNzgzODMsMS40MjUzMSwuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjc4MzgzLC43ODM4MywxLjE3MzA4LDEuMTczMDgsMS4xNzMwOCwuNzczNDksLjk0NTY1LC45NDcyOSwuODU5NDQsLjg4NTA2LC45ODU4LC43NDgxNywuODAwMTYsLjg4NDQ5LC45ODAzOSwuOTU3ODIsLjY5MjM4LC44OTg5OCwuODMyMzEsLjk4MTgzLDEuMDM5ODksLjk2OTI0LC44NjIzNywuOTY5MjQsLjgwNTk1LC43NDUyNCwuODYwOTEsLjk1NDAyLC45NDE0MywuOTg0NDgsLjg4NTgsLjgzMDg5LC45MzI4NSwxLjA5NDksMS4zOTAxNiwxLjA5NDksMS40NTk5NCwuNzQ2MjcsMS4wNDgzOSwuOTc0NTQsLjk3NDU0LC44NzIwNywuOTc0NTQsLjg3NTMzLDEuMDYxNTEsLjk3NDU0LDEuMDAxNzYsMS4xNjQ4NCwxLjA4MTMyLC45ODA0NywxLjE2NDg0LDEuMDI5ODksMS4wMTA1NCwuOTYyMjUsLjk3NDU0LC45NzQ1NCwxLjA2NTk4LC43OTAwNCwxLjE2MzQ0LDEuMDAzNTEsLjk0NjI5LC45OTczLC45MTAxNiwuOTY3NzcsLjkwNDMsLjkxMDgyLC45MjQ4MSwuOTEwODIsMS4xNzMwOCwuOTU3NDgsLjk2OTI3LC45NjkyNywxLC45NjkyNywuOTI0ODEsLjgwNTk3LDEuMDQ4MzksMS4yMzM5MywxLjE3ODEsLjkyNDUsMS4xNzMwOCwxLjIwODA4LC42MzIxOCwuOTQyNjEsMS4yNDgyMiwxLjA5OTcxLDEuMDk5NzEsMS4wNDgzOSwxLC44NTI3MywuNzgwMzIsMS4wNDgzOSwxLjA5OTcxLDEuMjIzMjYsLjkyNDUsMS4wOTgzNiwxLjEzNTI1LDEuMTUyMjIsLjcwNDI0LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC44NTQ5OCwuODg1MDYsLjc0ODE3LC43NDgxNywuNzQ4MTcsLjc0ODE3LC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTg1OCwxLjAzOTg5LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsMS4xNzMwOCwuOTY5MjQsLjk1NDAyLC45NTQwMiwuOTU0MDIsLjk1NDAyLC44MzA4OSwuODYyMzcsLjg4NDA5LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45MjkxNiwuODcyMDcsLjg3NTMzLC44NzUzMywuODc1MzMsLjg3NTMzLC45MzE0NiwuOTMxNDYsLjkzMTQ2LC45MzE0NiwuOTM4NTQsMS4wMTA1NCwuOTYyMjUsLjk2MjI1LC45NjIyNSwuOTYyMjUsLjk2MjI1LDEuMjQ4MjIsLjg3NjEsMS4wMDM1MSwxLjAwMzUxLDEuMDAzNTEsMS4wMDM1MSwuOTY3NzcsLjk3NDU0LC45Njc3NywuOTQ3MjksLjk3NDU0LC45NDcyOSwuOTc0NTQsLjk0NzI5LC45NzQ1NCwuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC45ODU4LC45NTM5MSwuOTg1OCwuOTc0NTQsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC44ODQ0OSwuOTc0NTQsLjg4NDQ5LC45NzQ1NCwuODg0NDksLjk3NDU0LDEsMSwuOTgwMzksMS4wMDE3NiwuOTgwMzksMS4wMDE3NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwuOTMxNDYsLjk1NzgyLC45MzE0NiwuOTU3ODIsMS4xNjQ4NCwuOTU3ODIsLjkzMTQ2LC44NDQyMSwxLjEyNzYxLC42OTIzOCwxLjA4MTMyLDEsMSwuOTgwNDcsLjgzMjMxLDEuMTY0ODQsMSwxLC44NDcyMywxLjA0ODYxLC44NDcyMywuNzg3NTUsLjgzMjMxLDEuMjM3MzYsMS4wMzk4OSwxLjAxMDU0LDEsMSwxLjAzOTg5LDEuMDEwNTQsLjk4NTcsMS4wMzg0OSwxLjAxMDU0LC45NjkyNCwuOTYyMjUsLjk2OTI0LC45NjIyNSwuOTY5MjQsLjk2MjI1LC45MjM4MywuOTAxNzEsLjgwNTk1LDEuMDY1OTgsMSwxLC44MDU5NSwxLjA2NTk4LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsMSwxLC44NjA5MSwxLjAyNzU5LC44NTc3MSwxLjE2MzQ0LC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45ODQ0OCwuOTk3MywuODMwODksLjk2Nzc3LC44MzA4OSwuOTMyODUsLjkwNDMsLjkzMjg1LC45MDQzLC45MzI4NSwuOTA0MywxLjMxODY4LC45NjkyNywuOTQ3MjksLjk3NDU0LC44NTQ5OCwuOTI5MTYsLjk2OTI0LC44NzYxLDEsMSwuODYwOTEsMS4xNjM0NCwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwuODE5NjUsLjgxOTY1LC45NDcyOSwuNzgwMzIsLjcxMDIyLC45MDg4MywuODQxNzEsLjk5ODc3LC43NzU5NiwxLjA1NzM0LDEuMiwuOTQ3MjksLjg1OTQ0LC44Mjc5MSwuOTYwNywuNzQ4MTcsLjkzMjg1LC45ODAzOSwuOTY5MjQsLjk1NzgyLC44OTg5OCwuOTgzMTYsLjk4MTgzLDEuMDM5ODksLjc4NjE0LC45NjkyNCwuOTc2NDIsLjg2MjM3LC44NjA3NSwuODYwOTEsLjgzMDg5LC45MDA4MiwuODg1OCwuOTcyOTYsMS4wMTI4NCwuOTU3ODIsLjgzMDg5LDEuMDk3NiwxLjA0LDEuMDMzNDIsMS4yLDEuMDY3NSwxLjA5NzYsLjk4MjA1LDEuMDM4MDksMS4wNTA5NywxLjA0LC45NTM2NCwxLjAzMzQyLDEuMDU0MDEsMS4yLDEuMDIxNDgsMS4wMTE5LDEuMDQ3MjQsMS4wMTI3LDEuMDI3MzIsLjk2MjI1LC44OTY1LC45Nzc4MywuOTM1NzQsLjk0ODE4LDEuMzA2NzksMS4wNjc1LDEuMTE4MjYsLjk5ODIxLDEuMDU1NywxLjAzMjYsMS4yLDEuMDY3NSwuOTYyMjUsMS4wNjc1LDEuMDMyNiwuNzQ4MTcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzc1NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODc1MzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk4NzA1LDEsMSwxLDEsMSwxLC45ODQ0OCwuOTk3MywuOTg0NDgsLjk5NzMsLjk4NDQ4LC45OTczLC44MzA4OSwuOTY3NzcsMSwxLjIwMDg4LC44OTkwMywxLDEsLjc1MTU1LC45NDk0NSwuOTQ5NDUsLjk0OTQ1LC45NDk0NSwxLjEyMzE3LDEuMTIzMTcsMS4xMjMxNywuNjc2MDMsLjY3NjAzLDEuMTU2MjEsLjczNTg0LDEuMjExOTEsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44NzcwOSwuOTY5MjcsMS4wMTQ3MywuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjA5ODM2LDEuMDk4MzYsMS4wOTgzNiwxLjAxNTIyLC44NjMyMSwuOTQ0MzQsLjg2NDksLjk0NDM0LC44NjE4MiwxLDEsMS4wODMsMSwuOTE1NzgsLjg2NDM4LDEuMTczMDgsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njc5MSwxLjI0ODIyLDEuMjQ4MjIsMS4xNzMwOCwxLjI0ODIyLDEuMjQ4MjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE3OTg0LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4xMDc0MiwxLjEwNzQyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxocj17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sbHI9WzEuNzY3MzgsMSwxLC45ODU5NCwxLjAyMjg1LDEuMTA0NTQsMS4wNjIzNCwuOTY5MjcsLjkyMDM3LDEuMTk5ODUsMS4yMDQ2LC45MDYxNiwuOTA2MTYsMS4wNzE1MiwxLjE3MTQsLjc4MDMyLDEuMjAwODgsLjc4MDMyLDEuNDAyNDYsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC43ODAzMiwuNzgwMzIsMS4xNzE0LDEuMTcxNCwxLjE3MTQsLjgwNTk3LC45NDA4NCwuOTY3MDYsLjg1OTQ0LC44NTczNCwuOTcwOTMsLjc1ODQyLC43OTkzNiwuODgxOTgsLjk4MzEsLjk1NzgyLC43MTM4NywuODY5NjksLjg0NjM2LDEuMDc3OTYsMS4wMzU4NCwuOTY5MjQsLjgzOTY4LC45NjkyNCwuODI4MjYsLjc5NjQ5LC44NTc3MSwuOTUxMzIsLjkzMTE5LC45ODk2NSwuODg0MzMsLjgyODcsLjkzMzY1LDEuMDg2MTIsMS4zNjM4LDEuMDg2MTIsMS40NTc4NiwuNzQ2MjcsLjgwNDk5LC45MTQ4NCwxLjA1NzA3LC45MjM4MywxLjA1ODgyLC45NDAzLDEuMTI2NTQsMS4wNTg4MiwxLjAxNzU2LDEuMDkwMTEsMS4wOTAxMSwuOTk0MTQsMS4wOTAxMSwxLjAzNCwxLjAxNzU2LDEuMDUzNTYsMS4wNTcwNywxLjA1ODgyLDEuMDQzOTksLjg0ODYzLDEuMjE5NjgsMS4wMTc1NiwuOTU4MDEsMS4wMDA2OCwuOTE3OTcsLjk2Nzc3LC45MDQzLC45MDM1MSwuOTIxMDUsLjkwMzUxLDEuMTcxNCwuODUzMzcsLjk2OTI3LC45NjkyNywuOTk5MTIsLjk2OTI3LC45MjEwNSwuODA1OTcsMS4yNDM0LDEuMjA4MDgsMS4wNTkzNywuOTA5NTcsMS4xNzE0LDEuMjA4MDgsLjc1MTU1LC45NDI2MSwxLjI0NjQ0LDEuMDk5NzEsMS4wOTk3MSwuODQ3NTEsMSwuODUyNzMsLjc4MDMyLC42MTU4NCwxLjA1NDI1LDEuMTc5MTQsLjkwOTU3LDEuMDg2NjUsMS4xMTU5MywxLjE0MTY5LC43MzM4MSwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuODYwMzUsLjg1NzM0LC43NTg0MiwuNzU4NDIsLjc1ODQyLC43NTg0MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk3MDkzLDEuMDM1ODQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwxLjE3MTQsLjk2OTI0LC45NTEzMiwuOTUxMzIsLjk1MTMyLC45NTEzMiwuODI4NywuODM5NjgsLjg5MDQ5LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MzU3NSwuOTIzODMsLjk0MDMsLjk0MDMsLjk0MDMsLjk0MDMsLjg3MTcsLjg3MTcsLjg3MTcsLjg3MTcsMS4wMDUyNywxLjAxNzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjI0NjQ0LC45NTkyMywxLjAxNzU2LDEuMDE3NTYsMS4wMTc1NiwxLjAxNzU2LC45Njc3NywxLjA1NzA3LC45Njc3NywuOTY3MDYsLjkxNDg0LC45NjcwNiwuOTE0ODQsLjk2NzA2LC45MTQ4NCwuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC45NzA5MywxLjA5NjksLjk3MDkzLDEuMDU4ODIsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwuODgxOTgsMS4wNTg4MiwxLDEsLjk4MzEsMS4wMTc1NiwuOTgzMSwxLjAxNzU2LC45NTc4MiwuODcxNywuOTU3ODIsLjg3MTcsLjk1NzgyLC44NzE3LC45NTc4MiwxLjA5MDExLC45NTc4MiwuODcxNywuODQ3ODQsMS4xMTU1MSwuNzEzODcsMS4wOTAxMSwxLDEsLjk5NDE0LC44NDYzNiwxLjA5MDExLDEsMSwuODQ2MzYsMS4wNTM2LC44NDYzNiwuOTQyOTgsLjg0NjM2LDEuMjMyOTcsMS4wMzU4NCwxLjAxNzU2LDEsMSwxLjAzNTg0LDEuMDE3NTYsMS4wMDMyMywxLjAzNDQ0LDEuMDE3NTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjk2OTI0LDEuMDUzNTYsLjkzMDY2LC45ODI5MywuODI4MjYsMS4wNDM5OSwxLDEsLjgyODI2LDEuMDQzOTksLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywxLDEsLjg1NzcxLDEuMTczMTgsLjg1NzcxLDEuMjE5NjgsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk1MTMyLDEuMDE3NTYsLjk4OTY1LDEuMDAwNjgsLjgyODcsLjk2Nzc3LC44Mjg3LC45MzM2NSwuOTA0MywuOTMzNjUsLjkwNDMsLjkzMzY1LC45MDQzLDEuMDg1NzEsLjk2OTI3LC45NjcwNiwuOTE0ODQsLjg2MDM1LC45MzU3NSwuOTY5MjQsLjk1OTIzLDEsMSwuODU3NzEsMS4yMTk2OCwxLjExNDM3LDEuMTE0MzcsLjkzMTA5LC45MTIwMiwuNjA0MTEsLjg0MTY0LC41NTU3MiwxLjAxMTczLC45NzM2MSwuODE4MTgsLjgxODE4LC45NjYzNSwuNzgwMzIsLjcyNzI3LC45MjM2NiwuOTg2MDEsMS4wMzQwNSwuNzc5NjgsMS4wOTc5OSwxLjIsLjk2NzA2LC44NTk0NCwuODU2MzgsLjk2NDkxLC43NTg0MiwuOTMzNjUsLjk4MzEsLjk2OTI0LC45NTc4MiwuODY5NjksLjk0MTUyLDEuMDc3OTYsMS4wMzU4NCwuNzg0MzcsLjk2OTI0LC45ODcxNSwuODM5NjgsLjgzNDkxLC44NTc3MSwuODI4NywuOTQ0OTIsLjg4NDMzLC45Mjg3LDEuMDA5OCwuOTU3ODIsLjgyODcsMS4wNjI1LC45ODI0OCwxLjAzNDI0LDEuMiwxLjAxMDcxLDEuMDYyNSwuOTUyNDYsMS4wMzgwOSwxLjA0OTEyLC45ODI0OCwxLjAwMjIxLDEuMDM0MjQsMS4wNTQ0MywxLjIsMS4wNDc4NSwuOTk2MDksMS4wMDE2OSwxLjA1MTc2LC45OTM0NiwxLjA1MzU2LC45MDg3LDEuMDMwMDQsLjk1NTQyLC45MzExNywxLjIzMzYyLDEuMDEwNzEsMS4wNzgzMSwxLjAyNTEyLDEuMDUyMDUsMS4wMzUwMiwxLjIsMS4wMTA3MSwxLjA1MzU2LDEuMDEwNzEsMS4wMzUwMiwuNzU4NDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzcxOSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA0MDIxLDEsMSwxLDEsMSwxLC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC45ODk2NSwxLjAwMDY4LC44Mjg3LC45Njc3NywxLDEuMjAwODgsLjg5OTAzLDEsMSwuNzUxNTUsMS4wMzA3NywxLjAzMDc3LDEuMDMwNzcsMS4wMzA3NywxLjEzMTk2LDEuMTMxOTYsMS4xMzE5NiwuNjc0MjgsLjY3NDI4LDEuMTYwMzksLjczMjkxLDEuMjA5OTYsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44Nzc5NiwuOTY5MjcsMS4wMTUxOCwuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjEwNTM5LDEuMTA1MzksMS4xMTM1OCwxLjA2OTY3LC44NjI3OSwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYxODIsMSwxLDEuMDgzLDEsLjkxNTc4LC44NjUwNywxLjE3MTQsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njk3LDEuMjQ4MjIsMS4yNDgyMiwxLjE3MjM4LDEuMjQ4MjIsMS4yNDgyMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTgwODMsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEwOTM4LDEuMTA5MzgsMSwxLDEsMS4wNTQyNSwxLjA5OTcxLDEuMDk5NzEsMS4wOTk3MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLFFyPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfSxFcj1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2VbIk15cmlhZFByby1SZWd1bGFyIl09ZVsiUGRmSlMtRmFsbGJhY2stUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOnNyLGJhc2VXaWR0aHM6emEsYmFzZU1hcHBpbmc6JGEsbWV0cmljczpucn07ZVsiTXlyaWFkUHJvLUJvbGQiXT1lWyJQZGZKUy1GYWxsYmFjay1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6QXIsYmFzZVdpZHRoczpXYSxiYXNlTWFwcGluZzpqYSxtZXRyaWNzOmVyfTtlWyJNeXJpYWRQcm8tSXQiXT1lWyJNeXJpYWRQcm8tSXRhbGljIl09ZVsiUGRmSlMtRmFsbGJhY2stSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczphcixiYXNlV2lkdGhzOlZhLGJhc2VNYXBwaW5nOl9hLG1ldHJpY3M6cnJ9O2VbIk15cmlhZFByby1Cb2xkSXQiXT1lWyJNeXJpYWRQcm8tQm9sZEl0YWxpYyJdPWVbIlBkZkpTLUZhbGxiYWNrLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczp0cixiYXNlV2lkdGhzOlhhLGJhc2VNYXBwaW5nOlphLG1ldHJpY3M6aXJ9O2UuQXJpYWxNVD1lLkFyaWFsPWVbIkFyaWFsLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsYmFzZVdpZHRoczp6YSxiYXNlTWFwcGluZzokYX07ZVsiQXJpYWwtQm9sZE1UIl09ZVsiQXJpYWwtQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixiYXNlV2lkdGhzOldhLGJhc2VNYXBwaW5nOmphfTtlWyJBcmlhbC1JdGFsaWNNVCJdPWVbIkFyaWFsLUl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMiLGJhc2VXaWR0aHM6VmEsYmFzZU1hcHBpbmc6X2F9O2VbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPWVbIkFyaWFsLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsYmFzZVdpZHRoczpYYSxiYXNlTWFwcGluZzpaYX07ZVsiQ2FsaWJyaS1SZWd1bGFyIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6TGEsYmFzZVdpZHRoczp6YSxiYXNlTWFwcGluZzokYSxtZXRyaWNzOkhhfTtlWyJDYWxpYnJpLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpSYSxiYXNlV2lkdGhzOldhLGJhc2VNYXBwaW5nOmphLG1ldHJpY3M6TmF9O2VbIkNhbGlicmktSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpVYSxiYXNlV2lkdGhzOlZhLGJhc2VNYXBwaW5nOl9hLG1ldHJpY3M6TWF9O2VbIkNhbGlicmktQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOkdhLGJhc2VXaWR0aHM6WGEsYmFzZU1hcHBpbmc6WmEsbWV0cmljczp4YX07ZVsiU2Vnb2V1aS1SZWd1bGFyIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6bHIsYmFzZVdpZHRoczp6YSxiYXNlTWFwcGluZzokYSxtZXRyaWNzOlFyfTtlWyJTZWdvZXVpLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpvcixiYXNlV2lkdGhzOldhLGJhc2VNYXBwaW5nOmphLG1ldHJpY3M6Z3J9O2VbIlNlZ29ldWktSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpDcixiYXNlV2lkdGhzOlZhLGJhc2VNYXBwaW5nOl9hLG1ldHJpY3M6aHJ9O2VbIlNlZ29ldWktQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOklyLGJhc2VXaWR0aHM6WGEsYmFzZU1hcHBpbmc6WmEsbWV0cmljczpjcn07ZVsiSGVsdmV0aWNhLVJlZ3VsYXIiXT1lLkhlbHZldGljYT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpPYSxiYXNlV2lkdGhzOnphLGJhc2VNYXBwaW5nOiRhLG1ldHJpY3M6UGF9O2VbIkhlbHZldGljYS1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6SmEsYmFzZVdpZHRoczpXYSxiYXNlTWFwcGluZzpqYSxtZXRyaWNzOnZhfTtlWyJIZWx2ZXRpY2EtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpLYSxiYXNlV2lkdGhzOlZhLGJhc2VNYXBwaW5nOl9hLG1ldHJpY3M6cWF9O2VbIkhlbHZldGljYS1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6WWEsYmFzZVdpZHRoczpYYSxiYXNlTWFwcGluZzpaYSxtZXRyaWNzOlRhfX0pKTtmdW5jdGlvbiBnZXRYZmFGb250TmFtZShlKXtjb25zdCB0PW5vcm1hbGl6ZUZvbnROYW1lKGUpO3JldHVybiBFcigpW3RdfWZ1bmN0aW9uIGdldFhmYUZvbnREaWN0KGUpe2NvbnN0IHQ9ZnVuY3Rpb24gZ2V0WGZhRm9udFdpZHRocyhlKXtjb25zdCB0PWdldFhmYUZvbnROYW1lKGUpO2lmKCF0KXJldHVybiBudWxsO2NvbnN0e2Jhc2VXaWR0aHM6aSxiYXNlTWFwcGluZzphLGZhY3RvcnM6cn09dCxzPXI/aS5tYXAoKChlLHQpPT5lKnJbdF0pKTppO2xldCBuLG89LTI7Y29uc3QgZz1bXTtmb3IoY29uc3RbZSx0XW9mIGEubWFwKCgoZSx0KT0+W2UsdF0pKS5zb3J0KCgoW2VdLFt0XSk9PmUtdCkpKWlmKC0xIT09ZSlpZihlPT09bysxKXtuLnB1c2goc1t0XSk7bys9MX1lbHNle289ZTtuPVtzW3RdXTtnLnB1c2goZSxuKX1yZXR1cm4gZ30oZSksaT1uZXcgRGljdChudWxsKTtpLnNldCgiQmFzZUZvbnQiLE5hbWUuZ2V0KGUpKTtpLnNldCgiVHlwZSIsTmFtZS5nZXQoIkZvbnQiKSk7aS5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJDSURGb250VHlwZTIiKSk7aS5zZXQoIkVuY29kaW5nIixOYW1lLmdldCgiSWRlbnRpdHktSCIpKTtpLnNldCgiQ0lEVG9HSURNYXAiLE5hbWUuZ2V0KCJJZGVudGl0eSIpKTtpLnNldCgiVyIsdCk7aS5zZXQoIkZpcnN0Q2hhciIsdFswXSk7aS5zZXQoIkxhc3RDaGFyIix0LmF0KC0yKSt0LmF0KC0xKS5sZW5ndGgtMSk7Y29uc3QgYT1uZXcgRGljdChudWxsKTtpLnNldCgiRm9udERlc2NyaXB0b3IiLGEpO2NvbnN0IHI9bmV3IERpY3QobnVsbCk7ci5zZXQoIk9yZGVyaW5nIiwiSWRlbnRpdHkiKTtyLnNldCgiUmVnaXN0cnkiLCJBZG9iZSIpO3Iuc2V0KCJTdXBwbGVtZW50IiwwKTtpLnNldCgiQ0lEU3lzdGVtSW5mbyIscik7cmV0dXJuIGl9Y2xhc3MgUG9zdFNjcmlwdFBhcnNlcntjb25zdHJ1Y3RvcihlKXt0aGlzLmxleGVyPWU7dGhpcy5vcGVyYXRvcnM9W107dGhpcy50b2tlbj1udWxsO3RoaXMucHJldj1udWxsfW5leHRUb2tlbigpe3RoaXMucHJldj10aGlzLnRva2VuO3RoaXMudG9rZW49dGhpcy5sZXhlci5nZXRUb2tlbigpfWFjY2VwdChlKXtpZih0aGlzLnRva2VuLnR5cGU9PT1lKXt0aGlzLm5leHRUb2tlbigpO3JldHVybiEwfXJldHVybiExfWV4cGVjdChlKXtpZih0aGlzLmFjY2VwdChlKSlyZXR1cm4hMDt0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVuZXhwZWN0ZWQgc3ltYm9sOiBmb3VuZCAke3RoaXMudG9rZW4udHlwZX0gZXhwZWN0ZWQgJHtlfS5gKX1wYXJzZSgpe3RoaXMubmV4dFRva2VuKCk7dGhpcy5leHBlY3QodXIuTEJSQUNFKTt0aGlzLnBhcnNlQmxvY2soKTt0aGlzLmV4cGVjdCh1ci5SQlJBQ0UpO3JldHVybiB0aGlzLm9wZXJhdG9yc31wYXJzZUJsb2NrKCl7Zm9yKDs7KWlmKHRoaXMuYWNjZXB0KHVyLk5VTUJFUikpdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpO2Vsc2UgaWYodGhpcy5hY2NlcHQodXIuT1BFUkFUT1IpKXRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtlbHNle2lmKCF0aGlzLmFjY2VwdCh1ci5MQlJBQ0UpKXJldHVybjt0aGlzLnBhcnNlQ29uZGl0aW9uKCl9fXBhcnNlQ29uZGl0aW9uKCl7Y29uc3QgZT10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5vcGVyYXRvcnMucHVzaChudWxsLG51bGwpO3RoaXMucGFyc2VCbG9jaygpO3RoaXMuZXhwZWN0KHVyLlJCUkFDRSk7aWYodGhpcy5hY2NlcHQodXIuSUYpKXt0aGlzLm9wZXJhdG9yc1tlXT10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5vcGVyYXRvcnNbZSsxXT0ianoifWVsc2V7aWYoIXRoaXMuYWNjZXB0KHVyLkxCUkFDRSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJQUyBGdW5jdGlvbjogZXJyb3IgcGFyc2luZyBjb25kaXRpb25hbC4iKTt7Y29uc3QgdD10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5vcGVyYXRvcnMucHVzaChudWxsLG51bGwpO2NvbnN0IGk9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMucGFyc2VCbG9jaygpO3RoaXMuZXhwZWN0KHVyLlJCUkFDRSk7dGhpcy5leHBlY3QodXIuSUZFTFNFKTt0aGlzLm9wZXJhdG9yc1t0XT10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5vcGVyYXRvcnNbdCsxXT0iaiI7dGhpcy5vcGVyYXRvcnNbZV09aTt0aGlzLm9wZXJhdG9yc1tlKzFdPSJqeiJ9fX19Y29uc3QgdXI9e0xCUkFDRTowLFJCUkFDRToxLE5VTUJFUjoyLE9QRVJBVE9SOjMsSUY6NCxJRkVMU0U6NX07Y2xhc3MgUG9zdFNjcmlwdFRva2Vue3N0YXRpYyBnZXQgb3BDYWNoZSgpe3JldHVybiBzaGFkb3codGhpcywib3BDYWNoZSIsT2JqZWN0LmNyZWF0ZShudWxsKSl9Y29uc3RydWN0b3IoZSx0KXt0aGlzLnR5cGU9ZTt0aGlzLnZhbHVlPXR9c3RhdGljIGdldE9wZXJhdG9yKGUpe3JldHVybiBQb3N0U2NyaXB0VG9rZW4ub3BDYWNoZVtlXXx8PW5ldyBQb3N0U2NyaXB0VG9rZW4odXIuT1BFUkFUT1IsZSl9c3RhdGljIGdldCBMQlJBQ0UoKXtyZXR1cm4gc2hhZG93KHRoaXMsIkxCUkFDRSIsbmV3IFBvc3RTY3JpcHRUb2tlbih1ci5MQlJBQ0UsInsiKSl9c3RhdGljIGdldCBSQlJBQ0UoKXtyZXR1cm4gc2hhZG93KHRoaXMsIlJCUkFDRSIsbmV3IFBvc3RTY3JpcHRUb2tlbih1ci5SQlJBQ0UsIn0iKSl9c3RhdGljIGdldCBJRigpe3JldHVybiBzaGFkb3codGhpcywiSUYiLG5ldyBQb3N0U2NyaXB0VG9rZW4odXIuSUYsIklGIikpfXN0YXRpYyBnZXQgSUZFTFNFKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJJRkVMU0UiLG5ldyBQb3N0U2NyaXB0VG9rZW4odXIuSUZFTFNFLCJJRkVMU0UiKSl9fWNsYXNzIFBvc3RTY3JpcHRMZXhlcntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0cmVhbT1lO3RoaXMubmV4dENoYXIoKTt0aGlzLnN0ckJ1Zj1bXX1uZXh0Q2hhcigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1nZXRUb2tlbigpe2xldCBlPSExLHQ9dGhpcy5jdXJyZW50Q2hhcjtmb3IoOzspe2lmKHQ8MClyZXR1cm4gRHQ7aWYoZSkxMCE9PXQmJjEzIT09dHx8KGU9ITEpO2Vsc2UgaWYoMzc9PT10KWU9ITA7ZWxzZSBpZighaXNXaGl0ZVNwYWNlKHQpKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfXN3aXRjaCgwfHQpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIG5ldyBQb3N0U2NyaXB0VG9rZW4odXIuTlVNQkVSLHRoaXMuZ2V0TnVtYmVyKCkpO2Nhc2UgMTIzOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gUG9zdFNjcmlwdFRva2VuLkxCUkFDRTtjYXNlIDEyNTp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5SQlJBQ0V9Y29uc3QgaT10aGlzLnN0ckJ1ZjtpLmxlbmd0aD0wO2lbMF09U3RyaW5nLmZyb21DaGFyQ29kZSh0KTtmb3IoOyh0PXRoaXMubmV4dENoYXIoKSk+PTAmJih0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjIpOylpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0KSk7Y29uc3QgYT1pLmpvaW4oIiIpO3N3aXRjaChhLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaWYiOnJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUY7Y2FzZSJpZmVsc2UiOnJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUZFTFNFO2RlZmF1bHQ6cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5nZXRPcGVyYXRvcihhKX19Z2V0TnVtYmVyKCl7bGV0IGU9dGhpcy5jdXJyZW50Q2hhcjtjb25zdCB0PXRoaXMuc3RyQnVmO3QubGVuZ3RoPTA7dFswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpO2Zvcig7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmKGU+PTQ4JiZlPD01N3x8NDU9PT1lfHw0Nj09PWUpOyl0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7Y29uc3QgaT1wYXJzZUZsb2F0KHQuam9pbigiIikpO2lmKGlzTmFOKGkpKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBmbG9hdGluZyBwb2ludCBudW1iZXI6ICR7aX1gKTtyZXR1cm4gaX19Y2xhc3MgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7dGhpcy5fb25seVJlZnM9ITA9PT1lPy5vbmx5UmVmcztpZighdGhpcy5fb25seVJlZnMpe3RoaXMuX25hbWVSZWZNYXA9bmV3IE1hcDt0aGlzLl9pbWFnZU1hcD1uZXcgTWFwfXRoaXMuX2ltYWdlQ2FjaGU9bmV3IFJlZlNldENhY2hlfWdldEJ5TmFtZShlKXt0aGlzLl9vbmx5UmVmcyYmdW5yZWFjaGFibGUoIlNob3VsZCBub3QgY2FsbCBgZ2V0QnlOYW1lYCBtZXRob2QuIik7Y29uc3QgdD10aGlzLl9uYW1lUmVmTWFwLmdldChlKTtyZXR1cm4gdD90aGlzLmdldEJ5UmVmKHQpOnRoaXMuX2ltYWdlTWFwLmdldChlKXx8bnVsbH1nZXRCeVJlZihlKXtyZXR1cm4gdGhpcy5faW1hZ2VDYWNoZS5nZXQoZSl8fG51bGx9c2V0KGUsdCxpKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBzZXRgIGNhbGxlZC4iKX19Y2xhc3MgTG9jYWxJbWFnZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7c2V0KGUsdD1udWxsLGkpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3RoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCk7dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxpKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUsaSl9fWNsYXNzIExvY2FsQ29sb3JTcGFjZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7c2V0KGU9bnVsbCx0PW51bGwsaSl7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYhdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhbmQvb3IgInJlZiIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO251bGwhPT1lJiZ0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpO3RoaXMuX2ltYWdlQ2FjaGUucHV0KHQsaSl9ZWxzZSB0aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLGkpfX1jbGFzcyBMb2NhbEZ1bmN0aW9uQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtjb25zdHJ1Y3RvcihlKXtzdXBlcih7b25seVJlZnM6ITB9KX1zZXQoZT1udWxsLHQsaSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCdMb2NhbEZ1bmN0aW9uQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXModCl8fHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQsaSl9fWNsYXNzIExvY2FsR1N0YXRlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtzZXQoZSx0PW51bGwsaSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3RoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCk7dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxpKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUsaSl9fWNsYXNzIExvY2FsVGlsaW5nUGF0dGVybkNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoe29ubHlSZWZzOiEwfSl9c2V0KGU9bnVsbCx0LGkpe2lmKCF0KXRocm93IG5ldyBFcnJvcignTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXModCl8fHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQsaSl9fWNsYXNzIFJlZ2lvbmFsSW1hZ2VDYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hle2NvbnN0cnVjdG9yKGUpe3N1cGVyKHtvbmx5UmVmczohMH0pfXNldChlPW51bGwsdCxpKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoJ1JlZ2lvbmFsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxpKX19Y2xhc3MgR2xvYmFsSW1hZ2VDYWNoZXtzdGF0aWMgTlVNX1BBR0VTX1RIUkVTSE9MRD0yO3N0YXRpYyBNSU5fSU1BR0VTX1RPX0NBQ0hFPTEwO3N0YXRpYyBNQVhfQllURV9TSVpFPTVlNzsjYj1uZXcgUmVmU2V0O2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVmQ2FjaGU9bmV3IFJlZlNldENhY2hlO3RoaXMuX2ltYWdlQ2FjaGU9bmV3IFJlZlNldENhY2hlfWdldCNEKCl7bGV0IGU9MDtmb3IoY29uc3QgdCBvZiB0aGlzLl9pbWFnZUNhY2hlKWUrPXQuYnl0ZVNpemU7cmV0dXJuIGV9Z2V0I0YoKXtyZXR1cm4hKHRoaXMuX2ltYWdlQ2FjaGUuc2l6ZTxHbG9iYWxJbWFnZUNhY2hlLk1JTl9JTUFHRVNfVE9fQ0FDSEUpJiYhKHRoaXMuI0Q8R2xvYmFsSW1hZ2VDYWNoZS5NQVhfQllURV9TSVpFKX1zaG91bGRDYWNoZShlLHQpe2xldCBpPXRoaXMuX3JlZkNhY2hlLmdldChlKTtpZighaSl7aT1uZXcgU2V0O3RoaXMuX3JlZkNhY2hlLnB1dChlLGkpfWkuYWRkKHQpO3JldHVybiEoaS5zaXplPEdsb2JhbEltYWdlQ2FjaGUuTlVNX1BBR0VTX1RIUkVTSE9MRCkmJiEoIXRoaXMuX2ltYWdlQ2FjaGUuaGFzKGUpJiZ0aGlzLiNGKX1hZGREZWNvZGVGYWlsZWQoZSl7dGhpcy4jYi5wdXQoZSl9aGFzRGVjb2RlRmFpbGVkKGUpe3JldHVybiB0aGlzLiNiLmhhcyhlKX1hZGRCeXRlU2l6ZShlLHQpe2NvbnN0IGk9dGhpcy5faW1hZ2VDYWNoZS5nZXQoZSk7aSYmKGkuYnl0ZVNpemV8fChpLmJ5dGVTaXplPXQpKX1nZXREYXRhKGUsdCl7Y29uc3QgaT10aGlzLl9yZWZDYWNoZS5nZXQoZSk7aWYoIWkpcmV0dXJuIG51bGw7aWYoaS5zaXplPEdsb2JhbEltYWdlQ2FjaGUuTlVNX1BBR0VTX1RIUkVTSE9MRClyZXR1cm4gbnVsbDtjb25zdCBhPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpO2lmKCFhKXJldHVybiBudWxsO2kuYWRkKHQpO3JldHVybiBhfXNldERhdGEoZSx0KXtpZighdGhpcy5fcmVmQ2FjaGUuaGFzKGUpKXRocm93IG5ldyBFcnJvcignR2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhIC0gZXhwZWN0ZWQgInNob3VsZENhY2hlIiB0byBoYXZlIGJlZW4gY2FsbGVkLicpO3RoaXMuX2ltYWdlQ2FjaGUuaGFzKGUpfHwodGhpcy4jRj93YXJuKCJHbG9iYWxJbWFnZUNhY2hlLnNldERhdGEgLSBjYWNoZSBsaW1pdCByZWFjaGVkLiIpOnRoaXMuX2ltYWdlQ2FjaGUucHV0KGUsdCkpfWNsZWFyKGU9ITEpe2lmKCFlKXt0aGlzLiNiLmNsZWFyKCk7dGhpcy5fcmVmQ2FjaGUuY2xlYXIoKX10aGlzLl9pbWFnZUNhY2hlLmNsZWFyKCl9fWNsYXNzIFBERkZ1bmN0aW9uRmFjdG9yeXtjb25zdHJ1Y3Rvcih7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0PSEwfSl7dGhpcy54cmVmPWU7dGhpcy5pc0V2YWxTdXBwb3J0ZWQ9ITEhPT10fWNyZWF0ZShlKXtjb25zdCB0PXRoaXMuZ2V0Q2FjaGVkKGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3QgaT1QREZGdW5jdGlvbi5wYXJzZSh7eHJlZjp0aGlzLnhyZWYsaXNFdmFsU3VwcG9ydGVkOnRoaXMuaXNFdmFsU3VwcG9ydGVkLGZuOmUgaW5zdGFuY2VvZiBSZWY/dGhpcy54cmVmLmZldGNoKGUpOmV9KTt0aGlzLl9jYWNoZShlLGkpO3JldHVybiBpfWNyZWF0ZUZyb21BcnJheShlKXtjb25zdCB0PXRoaXMuZ2V0Q2FjaGVkKGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3QgaT1QREZGdW5jdGlvbi5wYXJzZUFycmF5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5pc0V2YWxTdXBwb3J0ZWQsZm5PYmo6ZSBpbnN0YW5jZW9mIFJlZj90aGlzLnhyZWYuZmV0Y2goZSk6ZX0pO3RoaXMuX2NhY2hlKGUsaSk7cmV0dXJuIGl9Z2V0Q2FjaGVkKGUpe2xldCB0O2UgaW5zdGFuY2VvZiBSZWY/dD1lOmUgaW5zdGFuY2VvZiBEaWN0P3Q9ZS5vYmpJZDplIGluc3RhbmNlb2YgQmFzZVN0cmVhbSYmKHQ9ZS5kaWN0Py5vYmpJZCk7aWYodCl7Y29uc3QgZT10aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuZ2V0QnlSZWYodCk7aWYoZSlyZXR1cm4gZX1yZXR1cm4gbnVsbH1fY2FjaGUoZSx0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoJ1BERkZ1bmN0aW9uRmFjdG9yeS5fY2FjaGUgLSBleHBlY3RlZCAicGFyc2VkRnVuY3Rpb24iIGFyZ3VtZW50LicpO2xldCBpO2UgaW5zdGFuY2VvZiBSZWY/aT1lOmUgaW5zdGFuY2VvZiBEaWN0P2k9ZS5vYmpJZDplIGluc3RhbmNlb2YgQmFzZVN0cmVhbSYmKGk9ZS5kaWN0Py5vYmpJZCk7aSYmdGhpcy5fbG9jYWxGdW5jdGlvbkNhY2hlLnNldChudWxsLGksdCl9Z2V0IF9sb2NhbEZ1bmN0aW9uQ2FjaGUoKXtyZXR1cm4gc2hhZG93KHRoaXMsIl9sb2NhbEZ1bmN0aW9uQ2FjaGUiLG5ldyBMb2NhbEZ1bmN0aW9uQ2FjaGUpfX1mdW5jdGlvbiB0b051bWJlckFycmF5KGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2lzTnVtYmVyQXJyYXkoZSxudWxsKT9lOmUubWFwKChlPT4rZSkpOm51bGx9Y2xhc3MgUERGRnVuY3Rpb257c3RhdGljIGdldFNhbXBsZUFycmF5KGUsdCxpLGEpe2xldCByLHMsbj0xO2ZvcihyPTAscz1lLmxlbmd0aDtyPHM7cisrKW4qPWVbcl07bio9dDtjb25zdCBvPW5ldyBBcnJheShuKTtsZXQgZz0wLGM9MDtjb25zdCBDPTEvKDIqKmktMSksaD1hLmdldEJ5dGVzKChuKmkrNykvOCk7bGV0IGw9MDtmb3Iocj0wO3I8bjtyKyspe2Zvcig7ZzxpOyl7Yzw8PTg7Y3w9aFtsKytdO2crPTh9Zy09aTtvW3JdPShjPj5nKSpDO2MmPSgxPDxnKS0xfXJldHVybiBvfXN0YXRpYyBwYXJzZSh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOml9KXtjb25zdCBhPWkuZGljdHx8aTtzd2l0Y2goYS5nZXQoIkZ1bmN0aW9uVHlwZSIpKXtjYXNlIDA6cmV0dXJuIHRoaXMuY29uc3RydWN0U2FtcGxlZCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmksZGljdDphfSk7Y2FzZSAxOmJyZWFrO2Nhc2UgMjpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxkaWN0OmF9KTtjYXNlIDM6cmV0dXJuIHRoaXMuY29uc3RydWN0U3RpY2hlZCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGRpY3Q6YX0pO2Nhc2UgNDpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RQb3N0U2NyaXB0KHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm46aSxkaWN0OmF9KX10aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZSBvZiBmdW5jdGlvbiIpfXN0YXRpYyBwYXJzZUFycmF5KHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm5PYmo6aX0pe2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiB0aGlzLnBhcnNlKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm46aX0pO2NvbnN0IGE9W107Zm9yKGNvbnN0IHIgb2YgaSlhLnB1c2godGhpcy5wYXJzZSh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmUuZmV0Y2hJZlJlZihyKX0pKTtyZXR1cm4gZnVuY3Rpb24oZSx0LGkscil7Zm9yKGxldCBzPTAsbj1hLmxlbmd0aDtzPG47cysrKWFbc10oZSx0LGkscitzKX19c3RhdGljIGNvbnN0cnVjdFNhbXBsZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjppLGRpY3Q6YX0pe2Z1bmN0aW9uIHRvTXVsdGlBcnJheShlKXtjb25zdCB0PWUubGVuZ3RoLGk9W107bGV0IGE9MDtmb3IobGV0IHI9MDtyPHQ7cis9MilpW2ErK109W2Vbcl0sZVtyKzFdXTtyZXR1cm4gaX1mdW5jdGlvbiBpbnRlcnBvbGF0ZShlLHQsaSxhLHIpe3JldHVybiBhKyhyLWEpLyhpLXQpKihlLXQpfWxldCByPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiRG9tYWluIikpLHM9dG9OdW1iZXJBcnJheShhLmdldEFycmF5KCJSYW5nZSIpKTtpZighcnx8IXMpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJObyBkb21haW4gb3IgcmFuZ2UiKTtjb25zdCBuPXIubGVuZ3RoLzIsbz1zLmxlbmd0aC8yO3I9dG9NdWx0aUFycmF5KHIpO3M9dG9NdWx0aUFycmF5KHMpO2NvbnN0IGc9dG9OdW1iZXJBcnJheShhLmdldEFycmF5KCJTaXplIikpLGM9YS5nZXQoIkJpdHNQZXJTYW1wbGUiKSxDPWEuZ2V0KCJPcmRlciIpfHwxOzEhPT1DJiZpbmZvKCJObyBzdXBwb3J0IGZvciBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhdGlvbjogIitDKTtsZXQgaD10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkVuY29kZSIpKTtpZihoKWg9dG9NdWx0aUFycmF5KGgpO2Vsc2V7aD1bXTtmb3IobGV0IGU9MDtlPG47KytlKWgucHVzaChbMCxnW2VdLTFdKX1sZXQgbD10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkRlY29kZSIpKTtsPWw/dG9NdWx0aUFycmF5KGwpOnM7Y29uc3QgUT10aGlzLmdldFNhbXBsZUFycmF5KGcsbyxjLGkpO3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RTYW1wbGVkRm4oZSx0LGksYSl7Y29uc3QgYz0xPDxuLEM9bmV3IEZsb2F0NjRBcnJheShjKSxFPW5ldyBVaW50MzJBcnJheShjKTtsZXQgdSxkO2ZvcihkPTA7ZDxjO2QrKylDW2RdPTE7bGV0IGY9byxwPTE7Zm9yKHU9MDt1PG47Kyt1KXtjb25zdCBpPXJbdV1bMF0sYT1yW3VdWzFdO2xldCBzPWludGVycG9sYXRlKE1hdGgubWluKE1hdGgubWF4KGVbdCt1XSxpKSxhKSxpLGEsaFt1XVswXSxoW3VdWzFdKTtjb25zdCBuPWdbdV07cz1NYXRoLm1pbihNYXRoLm1heChzLDApLG4tMSk7Y29uc3Qgbz1zPG4tMT9NYXRoLmZsb29yKHMpOnMtMSxsPW8rMS1zLFE9cy1vLG09bypmLHk9bStmO2ZvcihkPTA7ZDxjO2QrKylpZihkJnApe0NbZF0qPVE7RVtkXSs9eX1lbHNle0NbZF0qPWw7RVtkXSs9bX1mKj1uO3A8PD0xfWZvcihkPTA7ZDxvOysrZCl7bGV0IGU9MDtmb3IodT0wO3U8Yzt1KyspZSs9UVtFW3VdK2RdKkNbdV07ZT1pbnRlcnBvbGF0ZShlLDAsMSxsW2RdWzBdLGxbZF1bMV0pO2lbYStkXT1NYXRoLm1pbihNYXRoLm1heChlLHNbZF1bMF0pLHNbZF1bMV0pfX19c3RhdGljIGNvbnN0cnVjdEludGVycG9sYXRlZCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGRpY3Q6aX0pe2NvbnN0IGE9dG9OdW1iZXJBcnJheShpLmdldEFycmF5KCJDMCIpKXx8WzBdLHI9dG9OdW1iZXJBcnJheShpLmdldEFycmF5KCJDMSIpKXx8WzFdLHM9aS5nZXQoIk4iKSxuPVtdO2ZvcihsZXQgZT0wLHQ9YS5sZW5ndGg7ZTx0OysrZSluLnB1c2gocltlXS1hW2VdKTtjb25zdCBvPW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWRGbihlLHQsaSxyKXtjb25zdCBnPTE9PT1zP2VbdF06ZVt0XSoqcztmb3IobGV0IGU9MDtlPG87KytlKWlbcitlXT1hW2VdK2cqbltlXX19c3RhdGljIGNvbnN0cnVjdFN0aWNoZWQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxkaWN0Oml9KXtjb25zdCBhPXRvTnVtYmVyQXJyYXkoaS5nZXRBcnJheSgiRG9tYWluIikpO2lmKCFhKXRocm93IG5ldyBGb3JtYXRFcnJvcigiTm8gZG9tYWluIik7aWYoMSE9PWEubGVuZ3RoLzIpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJCYWQgZG9tYWluIGZvciBzdGljaGVkIGZ1bmN0aW9uIik7Y29uc3Qgcj1bXTtmb3IoY29uc3QgYSBvZiBpLmdldCgiRnVuY3Rpb25zIikpci5wdXNoKHRoaXMucGFyc2Uoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjplLmZldGNoSWZSZWYoYSl9KSk7Y29uc3Qgcz10b051bWJlckFycmF5KGkuZ2V0QXJyYXkoIkJvdW5kcyIpKSxuPXRvTnVtYmVyQXJyYXkoaS5nZXRBcnJheSgiRW5jb2RlIikpLG89bmV3IEZsb2F0MzJBcnJheSgxKTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0U3RpY2hlZEZuKGUsdCxpLGcpe2NvbnN0IGM9ZnVuY3Rpb24gY29uc3RydWN0U3RpY2hlZEZyb21JUkNsaXAoZSx0LGkpe2U+aT9lPWk6ZTx0JiYoZT10KTtyZXR1cm4gZX0oZVt0XSxhWzBdLGFbMV0pLEM9cy5sZW5ndGg7bGV0IGg7Zm9yKGg9MDtoPEMmJiEoYzxzW2hdKTsrK2gpO2xldCBsPWFbMF07aD4wJiYobD1zW2gtMV0pO2xldCBRPWFbMV07aDxzLmxlbmd0aCYmKFE9c1toXSk7Y29uc3QgRT1uWzIqaF0sdT1uWzIqaCsxXTtvWzBdPWw9PT1RP0U6RSsoYy1sKSoodS1FKS8oUS1sKTtyW2hdKG8sMCxpLGcpfX1zdGF0aWMgY29uc3RydWN0UG9zdFNjcmlwdCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmksZGljdDphfSl7Y29uc3Qgcj10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIkRvbWFpbiIpKSxzPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiUmFuZ2UiKSk7aWYoIXIpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJObyBkb21haW4uIik7aWYoIXMpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJObyByYW5nZS4iKTtjb25zdCBuPW5ldyBQb3N0U2NyaXB0TGV4ZXIoaSksbz1uZXcgUG9zdFNjcmlwdFBhcnNlcihuKS5wYXJzZSgpO2lmKHQmJkZlYXR1cmVUZXN0LmlzRXZhbFN1cHBvcnRlZCl7Y29uc3QgZT0obmV3IFBvc3RTY3JpcHRDb21waWxlcikuY29tcGlsZShvLHIscyk7aWYoZSlyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzcmMiLCJzcmNPZmZzZXQiLCJkZXN0IiwiZGVzdE9mZnNldCIsZSl9aW5mbygiVW5hYmxlIHRvIGNvbXBpbGUgUFMgZnVuY3Rpb24iKTtjb25zdCBnPXMubGVuZ3RoPj4xLGM9ci5sZW5ndGg+PjEsQz1uZXcgUG9zdFNjcmlwdEV2YWx1YXRvcihvKSxoPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IGw9ODE5Mjtjb25zdCBRPW5ldyBGbG9hdDMyQXJyYXkoYyk7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFBvc3RTY3JpcHRGbihlLHQsaSxhKXtsZXQgcixuLG89IiI7Y29uc3QgRT1RO2ZvcihyPTA7cjxjO3IrKyl7bj1lW3Qrcl07RVtyXT1uO28rPW4rIl8ifWNvbnN0IHU9aFtvXTtpZih2b2lkIDAhPT11KXtpLnNldCh1LGEpO3JldHVybn1jb25zdCBkPW5ldyBGbG9hdDMyQXJyYXkoZyksZj1DLmV4ZWN1dGUoRSkscD1mLmxlbmd0aC1nO2ZvcihyPTA7cjxnO3IrKyl7bj1mW3Arcl07bGV0IGU9c1syKnJdO2lmKG48ZSluPWU7ZWxzZXtlPXNbMipyKzFdO24+ZSYmKG49ZSl9ZFtyXT1ufWlmKGw+MCl7bC0tO2hbb109ZH1pLnNldChkLGEpfX19ZnVuY3Rpb24gaXNQREZGdW5jdGlvbihlKXtsZXQgdDtpZihlIGluc3RhbmNlb2YgRGljdCl0PWU7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSlyZXR1cm4hMTt0PWUuZGljdH1yZXR1cm4gdC5oYXMoIkZ1bmN0aW9uVHlwZSIpfWNsYXNzIFBvc3RTY3JpcHRTdGFja3tzdGF0aWMgTUFYX1NUQUNLX1NJWkU9MTAwO2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RhY2s9ZT9BcnJheS5mcm9tKGUpOltdfXB1c2goZSl7aWYodGhpcy5zdGFjay5sZW5ndGg+PVBvc3RTY3JpcHRTdGFjay5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7dGhpcy5zdGFjay5wdXNoKGUpfXBvcCgpe2lmKHRoaXMuc3RhY2subGVuZ3RoPD0wKXRocm93IG5ldyBFcnJvcigiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayB1bmRlcmZsb3cuIik7cmV0dXJuIHRoaXMuc3RhY2sucG9wKCl9Y29weShlKXtpZih0aGlzLnN0YWNrLmxlbmd0aCtlPj1Qb3N0U2NyaXB0U3RhY2suTUFYX1NUQUNLX1NJWkUpdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LiIpO2NvbnN0IHQ9dGhpcy5zdGFjaztmb3IobGV0IGk9dC5sZW5ndGgtZSxhPWUtMTthPj0wO2EtLSxpKyspdC5wdXNoKHRbaV0pfWluZGV4KGUpe3RoaXMucHVzaCh0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLWUtMV0pfXJvbGwoZSx0KXtjb25zdCBpPXRoaXMuc3RhY2ssYT1pLmxlbmd0aC1lLHI9aS5sZW5ndGgtMSxzPWErKHQtTWF0aC5mbG9vcih0L2UpKmUpO2ZvcihsZXQgZT1hLHQ9cjtlPHQ7ZSsrLHQtLSl7Y29uc3QgYT1pW2VdO2lbZV09aVt0XTtpW3RdPWF9Zm9yKGxldCBlPWEsdD1zLTE7ZTx0O2UrKyx0LS0pe2NvbnN0IGE9aVtlXTtpW2VdPWlbdF07aVt0XT1hfWZvcihsZXQgZT1zLHQ9cjtlPHQ7ZSsrLHQtLSl7Y29uc3QgYT1pW2VdO2lbZV09aVt0XTtpW3RdPWF9fX1jbGFzcyBQb3N0U2NyaXB0RXZhbHVhdG9ye2NvbnN0cnVjdG9yKGUpe3RoaXMub3BlcmF0b3JzPWV9ZXhlY3V0ZShlKXtjb25zdCB0PW5ldyBQb3N0U2NyaXB0U3RhY2soZSk7bGV0IGk9MDtjb25zdCBhPXRoaXMub3BlcmF0b3JzLHI9YS5sZW5ndGg7bGV0IHMsbixvO2Zvcig7aTxyOyl7cz1hW2krK107aWYoIm51bWJlciIhPXR5cGVvZiBzKXN3aXRjaChzKXtjYXNlImp6IjpvPXQucG9wKCk7bj10LnBvcCgpO258fChpPW8pO2JyZWFrO2Nhc2UiaiI6bj10LnBvcCgpO2k9bjticmVhaztjYXNlImFicyI6bj10LnBvcCgpO3QucHVzaChNYXRoLmFicyhuKSk7YnJlYWs7Y2FzZSJhZGQiOm89dC5wb3AoKTtuPXQucG9wKCk7dC5wdXNoKG4rbyk7YnJlYWs7Y2FzZSJhbmQiOm89dC5wb3AoKTtuPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2YgbiYmImJvb2xlYW4iPT10eXBlb2Ygbz90LnB1c2gobiYmbyk6dC5wdXNoKG4mbyk7YnJlYWs7Y2FzZSJhdGFuIjpvPXQucG9wKCk7bj10LnBvcCgpO249TWF0aC5hdGFuMihuLG8pL01hdGguUEkqMTgwO248MCYmKG4rPTM2MCk7dC5wdXNoKG4pO2JyZWFrO2Nhc2UiYml0c2hpZnQiOm89dC5wb3AoKTtuPXQucG9wKCk7bj4wP3QucHVzaChuPDxvKTp0LnB1c2gobj4+byk7YnJlYWs7Y2FzZSJjZWlsaW5nIjpuPXQucG9wKCk7dC5wdXNoKE1hdGguY2VpbChuKSk7YnJlYWs7Y2FzZSJjb3B5IjpuPXQucG9wKCk7dC5jb3B5KG4pO2JyZWFrO2Nhc2UiY29zIjpuPXQucG9wKCk7dC5wdXNoKE1hdGguY29zKG4lMzYwLzE4MCpNYXRoLlBJKSk7YnJlYWs7Y2FzZSJjdmkiOm49MHx0LnBvcCgpO3QucHVzaChuKTticmVhaztjYXNlImN2ciI6YnJlYWs7Y2FzZSJkaXYiOm89dC5wb3AoKTtuPXQucG9wKCk7dC5wdXNoKG4vbyk7YnJlYWs7Y2FzZSJkdXAiOnQuY29weSgxKTticmVhaztjYXNlImVxIjpvPXQucG9wKCk7bj10LnBvcCgpO3QucHVzaChuPT09byk7YnJlYWs7Y2FzZSJleGNoIjp0LnJvbGwoMiwxKTticmVhaztjYXNlImV4cCI6bz10LnBvcCgpO249dC5wb3AoKTt0LnB1c2gobioqbyk7YnJlYWs7Y2FzZSJmYWxzZSI6dC5wdXNoKCExKTticmVhaztjYXNlImZsb29yIjpuPXQucG9wKCk7dC5wdXNoKE1hdGguZmxvb3IobikpO2JyZWFrO2Nhc2UiZ2UiOm89dC5wb3AoKTtuPXQucG9wKCk7dC5wdXNoKG4+PW8pO2JyZWFrO2Nhc2UiZ3QiOm89dC5wb3AoKTtuPXQucG9wKCk7dC5wdXNoKG4+byk7YnJlYWs7Y2FzZSJpZGl2IjpvPXQucG9wKCk7bj10LnBvcCgpO3QucHVzaChuL298MCk7YnJlYWs7Y2FzZSJpbmRleCI6bj10LnBvcCgpO3QuaW5kZXgobik7YnJlYWs7Y2FzZSJsZSI6bz10LnBvcCgpO249dC5wb3AoKTt0LnB1c2gobjw9byk7YnJlYWs7Y2FzZSJsbiI6bj10LnBvcCgpO3QucHVzaChNYXRoLmxvZyhuKSk7YnJlYWs7Y2FzZSJsb2ciOm49dC5wb3AoKTt0LnB1c2goTWF0aC5sb2cxMChuKSk7YnJlYWs7Y2FzZSJsdCI6bz10LnBvcCgpO249dC5wb3AoKTt0LnB1c2gobjxvKTticmVhaztjYXNlIm1vZCI6bz10LnBvcCgpO249dC5wb3AoKTt0LnB1c2gobiVvKTticmVhaztjYXNlIm11bCI6bz10LnBvcCgpO249dC5wb3AoKTt0LnB1c2gobipvKTticmVhaztjYXNlIm5lIjpvPXQucG9wKCk7bj10LnBvcCgpO3QucHVzaChuIT09byk7YnJlYWs7Y2FzZSJuZWciOm49dC5wb3AoKTt0LnB1c2goLW4pO2JyZWFrO2Nhc2Uibm90IjpuPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2Ygbj90LnB1c2goIW4pOnQucHVzaCh+bik7YnJlYWs7Y2FzZSJvciI6bz10LnBvcCgpO249dC5wb3AoKTsiYm9vbGVhbiI9PXR5cGVvZiBuJiYiYm9vbGVhbiI9PXR5cGVvZiBvP3QucHVzaChufHxvKTp0LnB1c2gobnxvKTticmVhaztjYXNlInBvcCI6dC5wb3AoKTticmVhaztjYXNlInJvbGwiOm89dC5wb3AoKTtuPXQucG9wKCk7dC5yb2xsKG4sbyk7YnJlYWs7Y2FzZSJyb3VuZCI6bj10LnBvcCgpO3QucHVzaChNYXRoLnJvdW5kKG4pKTticmVhaztjYXNlInNpbiI6bj10LnBvcCgpO3QucHVzaChNYXRoLnNpbihuJTM2MC8xODAqTWF0aC5QSSkpO2JyZWFrO2Nhc2Uic3FydCI6bj10LnBvcCgpO3QucHVzaChNYXRoLnNxcnQobikpO2JyZWFrO2Nhc2Uic3ViIjpvPXQucG9wKCk7bj10LnBvcCgpO3QucHVzaChuLW8pO2JyZWFrO2Nhc2UidHJ1ZSI6dC5wdXNoKCEwKTticmVhaztjYXNlInRydW5jYXRlIjpuPXQucG9wKCk7bj1uPDA/TWF0aC5jZWlsKG4pOk1hdGguZmxvb3Iobik7dC5wdXNoKG4pO2JyZWFrO2Nhc2UieG9yIjpvPXQucG9wKCk7bj10LnBvcCgpOyJib29sZWFuIj09dHlwZW9mIG4mJiJib29sZWFuIj09dHlwZW9mIG8/dC5wdXNoKG4hPT1vKTp0LnB1c2gobl5vKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5rbm93biBvcGVyYXRvciAke3N9YCl9ZWxzZSB0LnB1c2gocyl9cmV0dXJuIHQuc3RhY2t9fWNsYXNzIEFzdE5vZGV7Y29uc3RydWN0b3IoZSl7dGhpcy50eXBlPWV9dmlzaXQoZSl7dW5yZWFjaGFibGUoImFic3RyYWN0IG1ldGhvZCIpfX1jbGFzcyBBc3RBcmd1bWVudCBleHRlbmRzIEFzdE5vZGV7Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKCJhcmdzIik7dGhpcy5pbmRleD1lO3RoaXMubWluPXQ7dGhpcy5tYXg9aX12aXNpdChlKXtlLnZpc2l0QXJndW1lbnQodGhpcyl9fWNsYXNzIEFzdExpdGVyYWwgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCJsaXRlcmFsIik7dGhpcy5udW1iZXI9ZTt0aGlzLm1pbj1lO3RoaXMubWF4PWV9dmlzaXQoZSl7ZS52aXNpdExpdGVyYWwodGhpcyl9fWNsYXNzIEFzdEJpbmFyeU9wZXJhdGlvbiBleHRlbmRzIEFzdE5vZGV7Y29uc3RydWN0b3IoZSx0LGksYSxyKXtzdXBlcigiYmluYXJ5Iik7dGhpcy5vcD1lO3RoaXMuYXJnMT10O3RoaXMuYXJnMj1pO3RoaXMubWluPWE7dGhpcy5tYXg9cn12aXNpdChlKXtlLnZpc2l0QmluYXJ5T3BlcmF0aW9uKHRoaXMpfX1jbGFzcyBBc3RNaW4gZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoIm1heCIpO3RoaXMuYXJnPWU7dGhpcy5taW49ZS5taW47dGhpcy5tYXg9dH12aXNpdChlKXtlLnZpc2l0TWluKHRoaXMpfX1jbGFzcyBBc3RWYXJpYWJsZSBleHRlbmRzIEFzdE5vZGV7Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKCJ2YXIiKTt0aGlzLmluZGV4PWU7dGhpcy5taW49dDt0aGlzLm1heD1pfXZpc2l0KGUpe2UudmlzaXRWYXJpYWJsZSh0aGlzKX19Y2xhc3MgQXN0VmFyaWFibGVEZWZpbml0aW9uIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCJkZWZpbml0aW9uIik7dGhpcy52YXJpYWJsZT1lO3RoaXMuYXJnPXR9dmlzaXQoZSl7ZS52aXNpdFZhcmlhYmxlRGVmaW5pdGlvbih0aGlzKX19Y2xhc3MgRXhwcmVzc2lvbkJ1aWxkZXJWaXNpdG9ye2NvbnN0cnVjdG9yKCl7dGhpcy5wYXJ0cz1bXX12aXNpdEFyZ3VtZW50KGUpe3RoaXMucGFydHMucHVzaCgiTWF0aC5tYXgoIixlLm1pbiwiLCBNYXRoLm1pbigiLGUubWF4LCIsIHNyY1tzcmNPZmZzZXQgKyAiLGUuaW5kZXgsIl0pKSIpfXZpc2l0VmFyaWFibGUoZSl7dGhpcy5wYXJ0cy5wdXNoKCJ2IixlLmluZGV4KX12aXNpdExpdGVyYWwoZSl7dGhpcy5wYXJ0cy5wdXNoKGUubnVtYmVyKX12aXNpdEJpbmFyeU9wZXJhdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goIigiKTtlLmFyZzEudmlzaXQodGhpcyk7dGhpcy5wYXJ0cy5wdXNoKCIgIixlLm9wLCIgIik7ZS5hcmcyLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiKSIpfXZpc2l0VmFyaWFibGVEZWZpbml0aW9uKGUpe3RoaXMucGFydHMucHVzaCgidmFyICIpO2UudmFyaWFibGUudmlzaXQodGhpcyk7dGhpcy5wYXJ0cy5wdXNoKCIgPSAiKTtlLmFyZy52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIjsiKX12aXNpdE1pbihlKXt0aGlzLnBhcnRzLnB1c2goIk1hdGgubWluKCIpO2UuYXJnLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiLCAiLGUubWF4LCIpIil9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5wYXJ0cy5qb2luKCIiKX19ZnVuY3Rpb24gYnVpbGRBZGRPcGVyYXRpb24oZSx0KXtyZXR1cm4ibGl0ZXJhbCI9PT10LnR5cGUmJjA9PT10Lm51bWJlcj9lOiJsaXRlcmFsIj09PWUudHlwZSYmMD09PWUubnVtYmVyP3Q6ImxpdGVyYWwiPT09dC50eXBlJiYibGl0ZXJhbCI9PT1lLnR5cGU/bmV3IEFzdExpdGVyYWwoZS5udW1iZXIrdC5udW1iZXIpOm5ldyBBc3RCaW5hcnlPcGVyYXRpb24oIisiLGUsdCxlLm1pbit0Lm1pbixlLm1heCt0Lm1heCl9ZnVuY3Rpb24gYnVpbGRNdWxPcGVyYXRpb24oZSx0KXtpZigibGl0ZXJhbCI9PT10LnR5cGUpe2lmKDA9PT10Lm51bWJlcilyZXR1cm4gbmV3IEFzdExpdGVyYWwoMCk7aWYoMT09PXQubnVtYmVyKXJldHVybiBlO2lmKCJsaXRlcmFsIj09PWUudHlwZSlyZXR1cm4gbmV3IEFzdExpdGVyYWwoZS5udW1iZXIqdC5udW1iZXIpfWlmKCJsaXRlcmFsIj09PWUudHlwZSl7aWYoMD09PWUubnVtYmVyKXJldHVybiBuZXcgQXN0TGl0ZXJhbCgwKTtpZigxPT09ZS5udW1iZXIpcmV0dXJuIHR9Y29uc3QgaT1NYXRoLm1pbihlLm1pbip0Lm1pbixlLm1pbip0Lm1heCxlLm1heCp0Lm1pbixlLm1heCp0Lm1heCksYT1NYXRoLm1heChlLm1pbip0Lm1pbixlLm1pbip0Lm1heCxlLm1heCp0Lm1pbixlLm1heCp0Lm1heCk7cmV0dXJuIG5ldyBBc3RCaW5hcnlPcGVyYXRpb24oIioiLGUsdCxpLGEpfWZ1bmN0aW9uIGJ1aWxkU3ViT3BlcmF0aW9uKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIGU7aWYoImxpdGVyYWwiPT09ZS50eXBlKXJldHVybiBuZXcgQXN0TGl0ZXJhbChlLm51bWJlci10Lm51bWJlcil9cmV0dXJuImJpbmFyeSI9PT10LnR5cGUmJiItIj09PXQub3AmJiJsaXRlcmFsIj09PWUudHlwZSYmMT09PWUubnVtYmVyJiYibGl0ZXJhbCI9PT10LmFyZzEudHlwZSYmMT09PXQuYXJnMS5udW1iZXI/dC5hcmcyOm5ldyBBc3RCaW5hcnlPcGVyYXRpb24oIi0iLGUsdCxlLm1pbi10Lm1heCxlLm1heC10Lm1pbil9ZnVuY3Rpb24gYnVpbGRNaW5PcGVyYXRpb24oZSx0KXtyZXR1cm4gZS5taW4+PXQ/bmV3IEFzdExpdGVyYWwodCk6ZS5tYXg8PXQ/ZTpuZXcgQXN0TWluKGUsdCl9Y2xhc3MgUG9zdFNjcmlwdENvbXBpbGVye2NvbXBpbGUoZSx0LGkpe2NvbnN0IGE9W10scj1bXSxzPXQubGVuZ3RoPj4xLG49aS5sZW5ndGg+PjE7bGV0IG8sZyxjLEMsaCxsLFEsRSx1PTA7Zm9yKGxldCBlPTA7ZTxzO2UrKylhLnB1c2gobmV3IEFzdEFyZ3VtZW50KGUsdFsyKmVdLHRbMiplKzFdKSk7Zm9yKGxldCB0PTAsaT1lLmxlbmd0aDt0PGk7dCsrKXtFPWVbdF07aWYoIm51bWJlciIhPXR5cGVvZiBFKXN3aXRjaChFKXtjYXNlImFkZCI6aWYoYS5sZW5ndGg8MilyZXR1cm4gbnVsbDtDPWEucG9wKCk7Yz1hLnBvcCgpO2EucHVzaChidWlsZEFkZE9wZXJhdGlvbihjLEMpKTticmVhaztjYXNlImN2ciI6aWYoYS5sZW5ndGg8MSlyZXR1cm4gbnVsbDticmVhaztjYXNlIm11bCI6aWYoYS5sZW5ndGg8MilyZXR1cm4gbnVsbDtDPWEucG9wKCk7Yz1hLnBvcCgpO2EucHVzaChidWlsZE11bE9wZXJhdGlvbihjLEMpKTticmVhaztjYXNlInN1YiI6aWYoYS5sZW5ndGg8MilyZXR1cm4gbnVsbDtDPWEucG9wKCk7Yz1hLnBvcCgpO2EucHVzaChidWlsZFN1Yk9wZXJhdGlvbihjLEMpKTticmVhaztjYXNlImV4Y2giOmlmKGEubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1hLnBvcCgpO2w9YS5wb3AoKTthLnB1c2goaCxsKTticmVhaztjYXNlInBvcCI6aWYoYS5sZW5ndGg8MSlyZXR1cm4gbnVsbDthLnBvcCgpO2JyZWFrO2Nhc2UiaW5kZXgiOmlmKGEubGVuZ3RoPDEpcmV0dXJuIG51bGw7Yz1hLnBvcCgpO2lmKCJsaXRlcmFsIiE9PWMudHlwZSlyZXR1cm4gbnVsbDtvPWMubnVtYmVyO2lmKG88MHx8IU51bWJlci5pc0ludGVnZXIobyl8fGEubGVuZ3RoPG8pcmV0dXJuIG51bGw7aD1hW2EubGVuZ3RoLW8tMV07aWYoImxpdGVyYWwiPT09aC50eXBlfHwidmFyIj09PWgudHlwZSl7YS5wdXNoKGgpO2JyZWFrfVE9bmV3IEFzdFZhcmlhYmxlKHUrKyxoLm1pbixoLm1heCk7YVthLmxlbmd0aC1vLTFdPVE7YS5wdXNoKFEpO3IucHVzaChuZXcgQXN0VmFyaWFibGVEZWZpbml0aW9uKFEsaCkpO2JyZWFrO2Nhc2UiZHVwIjppZihhLmxlbmd0aDwxKXJldHVybiBudWxsO2lmKCJudW1iZXIiPT10eXBlb2YgZVt0KzFdJiYiZ3QiPT09ZVt0KzJdJiZlW3QrM109PT10KzcmJiJqeiI9PT1lW3QrNF0mJiJwb3AiPT09ZVt0KzVdJiZlW3QrNl09PT1lW3QrMV0pe2M9YS5wb3AoKTthLnB1c2goYnVpbGRNaW5PcGVyYXRpb24oYyxlW3QrMV0pKTt0Kz02O2JyZWFrfWg9YS5hdCgtMSk7aWYoImxpdGVyYWwiPT09aC50eXBlfHwidmFyIj09PWgudHlwZSl7YS5wdXNoKGgpO2JyZWFrfVE9bmV3IEFzdFZhcmlhYmxlKHUrKyxoLm1pbixoLm1heCk7YVthLmxlbmd0aC0xXT1RO2EucHVzaChRKTtyLnB1c2gobmV3IEFzdFZhcmlhYmxlRGVmaW5pdGlvbihRLGgpKTticmVhaztjYXNlInJvbGwiOmlmKGEubGVuZ3RoPDIpcmV0dXJuIG51bGw7Qz1hLnBvcCgpO2M9YS5wb3AoKTtpZigibGl0ZXJhbCIhPT1DLnR5cGV8fCJsaXRlcmFsIiE9PWMudHlwZSlyZXR1cm4gbnVsbDtnPUMubnVtYmVyO289Yy5udW1iZXI7aWYobzw9MHx8IU51bWJlci5pc0ludGVnZXIobyl8fCFOdW1iZXIuaXNJbnRlZ2VyKGcpfHxhLmxlbmd0aDxvKXJldHVybiBudWxsO2c9KGclbytvKSVvO2lmKDA9PT1nKWJyZWFrO2EucHVzaCguLi5hLnNwbGljZShhLmxlbmd0aC1vLG8tZykpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9ZWxzZSBhLnB1c2gobmV3IEFzdExpdGVyYWwoRSkpfWlmKGEubGVuZ3RoIT09bilyZXR1cm4gbnVsbDtjb25zdCBkPVtdO2Zvcihjb25zdCBlIG9mIHIpe2NvbnN0IHQ9bmV3IEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcjtlLnZpc2l0KHQpO2QucHVzaCh0LnRvU3RyaW5nKCkpfWZvcihsZXQgZT0wLHQ9YS5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1hW2VdLHI9bmV3IEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcjt0LnZpc2l0KHIpO2NvbnN0IHM9aVsyKmVdLG49aVsyKmUrMV0sbz1bci50b1N0cmluZygpXTtpZihzPnQubWluKXtvLnVuc2hpZnQoIk1hdGgubWF4KCIscywiLCAiKTtvLnB1c2goIikiKX1pZihuPHQubWF4KXtvLnVuc2hpZnQoIk1hdGgubWluKCIsbiwiLCAiKTtvLnB1c2goIikiKX1vLnVuc2hpZnQoImRlc3RbZGVzdE9mZnNldCArICIsZSwiXSA9ICIpO28ucHVzaCgiOyIpO2QucHVzaChvLmpvaW4oIiIpKX1yZXR1cm4gZC5qb2luKCJcbiIpfX1jb25zdCBkcj1bIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIlMiLCJCIiwiUyIsIldTIiwiQiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCIiwiQiIsIkIiLCJTIiwiV1MiLCJPTiIsIk9OIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkVTIiwiQ1MiLCJFUyIsIkNTIiwiQ1MiLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkNTIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJDUyIsIk9OIiwiRVQiLCJFVCIsIkVUIiwiRVQiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJPTiIsIk9OIiwiQk4iLCJPTiIsIk9OIiwiRVQiLCJFVCIsIkVOIiwiRU4iLCJPTiIsIkwiLCJPTiIsIk9OIiwiT04iLCJFTiIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIl0sZnI9WyJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJPTiIsIk9OIiwiQUwiLCJFVCIsIkVUIiwiQUwiLCJDUyIsIkFMIiwiT04iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCIiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkVUIiwiQU4iLCJBTiIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIl07ZnVuY3Rpb24gaXNPZGQoZSl7cmV0dXJuIDAhPSgxJmUpfWZ1bmN0aW9uIGlzRXZlbihlKXtyZXR1cm4gMD09KDEmZSl9ZnVuY3Rpb24gZmluZFVuZXF1YWwoZSx0LGkpe2xldCBhLHI7Zm9yKGE9dCxyPWUubGVuZ3RoO2E8cjsrK2EpaWYoZVthXSE9PWkpcmV0dXJuIGE7cmV0dXJuIGF9ZnVuY3Rpb24gc2V0VmFsdWVzKGUsdCxpLGEpe2ZvcihsZXQgcj10O3I8aTsrK3IpZVtyXT1hfWZ1bmN0aW9uIHJldmVyc2VWYWx1ZXMoZSx0LGkpe2ZvcihsZXQgYT10LHI9aS0xO2E8cjsrK2EsLS1yKXtjb25zdCB0PWVbYV07ZVthXT1lW3JdO2Vbcl09dH19ZnVuY3Rpb24gY3JlYXRlQmlkaVRleHQoZSx0LGk9ITEpe2xldCBhPSJsdHIiO2k/YT0idHRiIjp0fHwoYT0icnRsIik7cmV0dXJue3N0cjplLGRpcjphfX1jb25zdCBwcj1bXSxtcj1bXTtmdW5jdGlvbiBiaWRpKGUsdD0tMSxpPSExKXtsZXQgYT0hMDtjb25zdCByPWUubGVuZ3RoO2lmKDA9PT1yfHxpKXJldHVybiBjcmVhdGVCaWRpVGV4dChlLGEsaSk7cHIubGVuZ3RoPXI7bXIubGVuZ3RoPXI7bGV0IHMsbixvPTA7Zm9yKHM9MDtzPHI7KytzKXtwcltzXT1lLmNoYXJBdChzKTtjb25zdCB0PWUuY2hhckNvZGVBdChzKTtsZXQgaT0iTCI7aWYodDw9MjU1KWk9ZHJbdF07ZWxzZSBpZigxNDI0PD10JiZ0PD0xNTI0KWk9IlIiO2Vsc2UgaWYoMTUzNjw9dCYmdDw9MTc5MSl7aT1mclsyNTUmdF07aXx8d2FybigiQmlkaTogaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlciAiK3QudG9TdHJpbmcoMTYpKX1lbHNlKDE3OTI8PXQmJnQ8PTIyMjB8fDY0MzM2PD10JiZ0PD02NTAyM3x8NjUxMzY8PXQmJnQ8PTY1Mjc5KSYmKGk9IkFMIik7IlIiIT09aSYmIkFMIiE9PWkmJiJBTiIhPT1pfHxvKys7bXJbc109aX1pZigwPT09byl7YT0hMDtyZXR1cm4gY3JlYXRlQmlkaVRleHQoZSxhKX1pZigtMT09PXQpaWYoby9yPC4zJiZyPjQpe2E9ITA7dD0wfWVsc2V7YT0hMTt0PTF9Y29uc3QgZz1bXTtmb3Iocz0wO3M8cjsrK3MpZ1tzXT10O2NvbnN0IGM9aXNPZGQodCk/IlIiOiJMIixDPWMsaD1DO2xldCBsLFE9Qztmb3Iocz0wO3M8cjsrK3MpIk5TTSI9PT1tcltzXT9tcltzXT1ROlE9bXJbc107UT1DO2ZvcihzPTA7czxyOysrcyl7bD1tcltzXTsiRU4iPT09bD9tcltzXT0iQUwiPT09UT8iQU4iOiJFTiI6IlIiIT09bCYmIkwiIT09bCYmIkFMIiE9PWx8fChRPWwpfWZvcihzPTA7czxyOysrcyl7bD1tcltzXTsiQUwiPT09bCYmKG1yW3NdPSJSIil9Zm9yKHM9MTtzPHItMTsrK3MpeyJFUyI9PT1tcltzXSYmIkVOIj09PW1yW3MtMV0mJiJFTiI9PT1tcltzKzFdJiYobXJbc109IkVOIik7IkNTIiE9PW1yW3NdfHwiRU4iIT09bXJbcy0xXSYmIkFOIiE9PW1yW3MtMV18fG1yW3MrMV0hPT1tcltzLTFdfHwobXJbc109bXJbcy0xXSl9Zm9yKHM9MDtzPHI7KytzKWlmKCJFTiI9PT1tcltzXSl7Zm9yKGxldCBlPXMtMTtlPj0wJiYiRVQiPT09bXJbZV07LS1lKW1yW2VdPSJFTiI7Zm9yKGxldCBlPXMrMTtlPHImJiJFVCI9PT1tcltlXTsrK2UpbXJbZV09IkVOIn1mb3Iocz0wO3M8cjsrK3Mpe2w9bXJbc107IldTIiE9PWwmJiJFUyIhPT1sJiYiRVQiIT09bCYmIkNTIiE9PWx8fChtcltzXT0iT04iKX1RPUM7Zm9yKHM9MDtzPHI7KytzKXtsPW1yW3NdOyJFTiI9PT1sP21yW3NdPSJMIj09PVE/IkwiOiJFTiI6IlIiIT09bCYmIkwiIT09bHx8KFE9bCl9Zm9yKHM9MDtzPHI7KytzKWlmKCJPTiI9PT1tcltzXSl7Y29uc3QgZT1maW5kVW5lcXVhbChtcixzKzEsIk9OIik7bGV0IHQ9QztzPjAmJih0PW1yW3MtMV0pO2xldCBpPWg7ZSsxPHImJihpPW1yW2UrMV0pOyJMIiE9PXQmJih0PSJSIik7IkwiIT09aSYmKGk9IlIiKTt0PT09aSYmc2V0VmFsdWVzKG1yLHMsZSx0KTtzPWUtMX1mb3Iocz0wO3M8cjsrK3MpIk9OIj09PW1yW3NdJiYobXJbc109Yyk7Zm9yKHM9MDtzPHI7KytzKXtsPW1yW3NdO2lzRXZlbihnW3NdKT8iUiI9PT1sP2dbc10rPTE6IkFOIiE9PWwmJiJFTiIhPT1sfHwoZ1tzXSs9Mik6IkwiIT09bCYmIkFOIiE9PWwmJiJFTiIhPT1sfHwoZ1tzXSs9MSl9bGV0IEUsdT0tMSxkPTk5O2ZvcihzPTAsbj1nLmxlbmd0aDtzPG47KytzKXtFPWdbc107dTxFJiYodT1FKTtkPkUmJmlzT2RkKEUpJiYoZD1FKX1mb3IoRT11O0U+PWQ7LS1FKXtsZXQgZT0tMTtmb3Iocz0wLG49Zy5sZW5ndGg7czxuOysrcylpZihnW3NdPEUpe2lmKGU+PTApe3JldmVyc2VWYWx1ZXMocHIsZSxzKTtlPS0xfX1lbHNlIGU8MCYmKGU9cyk7ZT49MCYmcmV2ZXJzZVZhbHVlcyhwcixlLGcubGVuZ3RoKX1mb3Iocz0wLG49cHIubGVuZ3RoO3M8bjsrK3Mpe2NvbnN0IGU9cHJbc107IjwiIT09ZSYmIj4iIT09ZXx8KHByW3NdPSIiKX1yZXR1cm4gY3JlYXRlQmlkaVRleHQocHIuam9pbigiIiksYSl9Y29uc3QgeXI9e3N0eWxlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIn0sd3I9e3N0eWxlOiJub3JtYWwiLHdlaWdodDoiYm9sZCJ9LGJyPXtzdHlsZToiaXRhbGljIix3ZWlnaHQ6Im5vcm1hbCJ9LERyPXtzdHlsZToiaXRhbGljIix3ZWlnaHQ6ImJvbGQifSxGcj1uZXcgTWFwKFtbIlRpbWVzLVJvbWFuIix7bG9jYWw6WyJUaW1lcyBOZXcgUm9tYW4iLCJUaW1lcy1Sb21hbiIsIlRpbWVzIiwiTGliZXJhdGlvbiBTZXJpZiIsIk5pbWJ1cyBSb21hbiIsIk5pbWJ1cyBSb21hbiBMIiwiVGlub3MiLCJUaG9ybmRhbGUiLCJUZVggR3lyZSBUZXJtZXMiLCJGcmVlU2VyaWYiLCJMaW51eCBMaWJlcnRpbmUgTyIsIkxpYmVydGludXMgU2VyaWYiLCJEZWphVnUgU2VyaWYiLCJCaXRzdHJlYW0gVmVyYSBTZXJpZiIsIlVidW50dSJdLHN0eWxlOnlyLHVsdGltYXRlOiJzZXJpZiJ9XSxbIlRpbWVzLUJvbGQiLHthbGlhczoiVGltZXMtUm9tYW4iLHN0eWxlOndyLHVsdGltYXRlOiJzZXJpZiJ9XSxbIlRpbWVzLUl0YWxpYyIse2FsaWFzOiJUaW1lcy1Sb21hbiIsc3R5bGU6YnIsdWx0aW1hdGU6InNlcmlmIn1dLFsiVGltZXMtQm9sZEl0YWxpYyIse2FsaWFzOiJUaW1lcy1Sb21hbiIsc3R5bGU6RHIsdWx0aW1hdGU6InNlcmlmIn1dLFsiSGVsdmV0aWNhIix7bG9jYWw6WyJIZWx2ZXRpY2EiLCJIZWx2ZXRpY2EgTmV1ZSIsIkFyaWFsIiwiQXJpYWwgTm92YSIsIkxpYmVyYXRpb24gU2FucyIsIkFyaW1vIiwiTmltYnVzIFNhbnMiLCJOaW1idXMgU2FucyBMIiwiQTAzMCIsIlRlWCBHeXJlIEhlcm9zIiwiRnJlZVNhbnMiLCJEZWphVnUgU2FucyIsIkFsYmFueSIsIkJpdHN0cmVhbSBWZXJhIFNhbnMiLCJBcmlhbCBVbmljb2RlIE1TIiwiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLCJBcHBsZSBTeW1ib2xzIiwiQ2FudGFyZWxsIl0scGF0aDoiTGliZXJhdGlvblNhbnMtUmVndWxhci50dGYiLHN0eWxlOnlyLHVsdGltYXRlOiJzYW5zLXNlcmlmIn1dLFsiSGVsdmV0aWNhLUJvbGQiLHthbGlhczoiSGVsdmV0aWNhIixwYXRoOiJMaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiIsc3R5bGU6d3IsdWx0aW1hdGU6InNhbnMtc2VyaWYifV0sWyJIZWx2ZXRpY2EtT2JsaXF1ZSIse2FsaWFzOiJIZWx2ZXRpY2EiLHBhdGg6IkxpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiLHN0eWxlOmJyLHVsdGltYXRlOiJzYW5zLXNlcmlmIn1dLFsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIix7YWxpYXM6IkhlbHZldGljYSIscGF0aDoiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYiLHN0eWxlOkRyLHVsdGltYXRlOiJzYW5zLXNlcmlmIn1dLFsiQ291cmllciIse2xvY2FsOlsiQ291cmllciIsIkNvdXJpZXIgTmV3IiwiTGliZXJhdGlvbiBNb25vIiwiTmltYnVzIE1vbm8iLCJOaW1idXMgTW9ubyBMIiwiQ291c2luZSIsIkN1bWJlcmxhbmQiLCJUZVggR3lyZSBDdXJzb3IiLCJGcmVlTW9ubyIsIkxpbnV4IExpYmVydGluZSBNb25vIE8iLCJMaWJlcnRpbnVzIE1vbm8iXSxzdHlsZTp5cix1bHRpbWF0ZToibW9ub3NwYWNlIn1dLFsiQ291cmllci1Cb2xkIix7YWxpYXM6IkNvdXJpZXIiLHN0eWxlOndyLHVsdGltYXRlOiJtb25vc3BhY2UifV0sWyJDb3VyaWVyLU9ibGlxdWUiLHthbGlhczoiQ291cmllciIsc3R5bGU6YnIsdWx0aW1hdGU6Im1vbm9zcGFjZSJ9XSxbIkNvdXJpZXItQm9sZE9ibGlxdWUiLHthbGlhczoiQ291cmllciIsc3R5bGU6RHIsdWx0aW1hdGU6Im1vbm9zcGFjZSJ9XSxbIkFyaWFsQmxhY2siLHtsb2NhbDpbIkFyaWFsIEJsYWNrIl0sc3R5bGU6e3N0eWxlOiJub3JtYWwiLHdlaWdodDoiOTAwIn0sZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkIn1dLFsiQXJpYWxCbGFjay1Cb2xkIix7YWxpYXM6IkFyaWFsQmxhY2sifV0sWyJBcmlhbEJsYWNrLUl0YWxpYyIse2FsaWFzOiJBcmlhbEJsYWNrIixzdHlsZTp7c3R5bGU6Iml0YWxpYyIsd2VpZ2h0OiI5MDAifSxmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIn1dLFsiQXJpYWxCbGFjay1Cb2xkSXRhbGljIix7YWxpYXM6IkFyaWFsQmxhY2stSXRhbGljIn1dLFsiQXJpYWxOYXJyb3ciLHtsb2NhbDpbIkFyaWFsIE5hcnJvdyIsIkxpYmVyYXRpb24gU2FucyBOYXJyb3ciLCJIZWx2ZXRpY2EgQ29uZGVuc2VkIiwiTmltYnVzIFNhbnMgTmFycm93IiwiVGVYIEd5cmUgSGVyb3MgQ24iXSxzdHlsZTp5cixmYWxsYmFjazoiSGVsdmV0aWNhIn1dLFsiQXJpYWxOYXJyb3ctQm9sZCIse2FsaWFzOiJBcmlhbE5hcnJvdyIsc3R5bGU6d3IsZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkIn1dLFsiQXJpYWxOYXJyb3ctSXRhbGljIix7YWxpYXM6IkFyaWFsTmFycm93IixzdHlsZTpicixmYWxsYmFjazoiSGVsdmV0aWNhLU9ibGlxdWUifV0sWyJBcmlhbE5hcnJvdy1Cb2xkSXRhbGljIix7YWxpYXM6IkFyaWFsTmFycm93IixzdHlsZTpEcixmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIn1dLFsiQ2FsaWJyaSIse2xvY2FsOlsiQ2FsaWJyaSIsIkNhcmxpdG8iXSxzdHlsZTp5cixmYWxsYmFjazoiSGVsdmV0aWNhIn1dLFsiQ2FsaWJyaS1Cb2xkIix7YWxpYXM6IkNhbGlicmkiLHN0eWxlOndyLGZhbGxiYWNrOiJIZWx2ZXRpY2EtQm9sZCJ9XSxbIkNhbGlicmktSXRhbGljIix7YWxpYXM6IkNhbGlicmkiLHN0eWxlOmJyLGZhbGxiYWNrOiJIZWx2ZXRpY2EtT2JsaXF1ZSJ9XSxbIkNhbGlicmktQm9sZEl0YWxpYyIse2FsaWFzOiJDYWxpYnJpIixzdHlsZTpEcixmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIn1dLFsiV2luZ2RpbmdzIix7bG9jYWw6WyJXaW5nZGluZ3MiLCJVUlcgRGluZ2JhdHMiXSxzdHlsZTp5cn1dLFsiV2luZ2RpbmdzLVJlZ3VsYXIiLHthbGlhczoiV2luZ2RpbmdzIn1dLFsiV2luZ2RpbmdzLUJvbGQiLHthbGlhczoiV2luZ2RpbmdzIn1dXSksU3I9bmV3IE1hcChbWyJBcmlhbC1CbGFjayIsIkFyaWFsQmxhY2siXV0pO2Z1bmN0aW9uIGdldEZhbWlseU5hbWUoZSl7Y29uc3QgdD1uZXcgU2V0KFsidGhpbiIsImV4dHJhbGlnaHQiLCJ1bHRyYWxpZ2h0IiwiZGVtaWxpZ2h0Iiwic2VtaWxpZ2h0IiwibGlnaHQiLCJib29rIiwicmVndWxhciIsIm5vcm1hbCIsIm1lZGl1bSIsImRlbWlib2xkIiwic2VtaWJvbGQiLCJib2xkIiwiZXh0cmFib2xkIiwidWx0cmFib2xkIiwiYmxhY2siLCJoZWF2eSIsImV4dHJhYmxhY2siLCJ1bHRyYWJsYWNrIiwicm9tYW4iLCJpdGFsaWMiLCJvYmxpcXVlIiwidWx0cmFjb25kZW5zZWQiLCJleHRyYWNvbmRlbnNlZCIsImNvbmRlbnNlZCIsInNlbWljb25kZW5zZWQiLCJub3JtYWwiLCJzZW1pZXhwYW5kZWQiLCJleHBhbmRlZCIsImV4dHJhZXhwYW5kZWQiLCJ1bHRyYWV4cGFuZGVkIiwiYm9sZGl0YWxpYyJdKTtyZXR1cm4gZS5zcGxpdCgvWy0gLCtdKy9nKS5maWx0ZXIoKGU9PiF0LmhhcyhlLnRvTG93ZXJDYXNlKCkpKSkuam9pbigiICIpfWZ1bmN0aW9uIGdlbmVyYXRlRm9udCh7YWxpYXM6ZSxsb2NhbDp0LHBhdGg6aSxmYWxsYmFjazphLHN0eWxlOnIsdWx0aW1hdGU6c30sbixvLGc9ITAsYz0hMCxDPSIiKXtjb25zdCBoPXtzdHlsZTpudWxsLHVsdGltYXRlOm51bGx9O2lmKHQpe2NvbnN0IGU9Qz9gICR7Q31gOiIiO2Zvcihjb25zdCBpIG9mIHQpbi5wdXNoKGBsb2NhbCgke2l9JHtlfSlgKX1pZihlKXtjb25zdCB0PUZyLmdldChlKSxzPUN8fGZ1bmN0aW9uIGdldFN0eWxlVG9BcHBlbmQoZSl7c3dpdGNoKGUpe2Nhc2Ugd3I6cmV0dXJuIkJvbGQiO2Nhc2UgYnI6cmV0dXJuIkl0YWxpYyI7Y2FzZSBEcjpyZXR1cm4iQm9sZCBJdGFsaWMiO2RlZmF1bHQ6aWYoImJvbGQiPT09ZT8ud2VpZ2h0KXJldHVybiJCb2xkIjtpZigiaXRhbGljIj09PWU/LnN0eWxlKXJldHVybiJJdGFsaWMifXJldHVybiIifShyKTtPYmplY3QuYXNzaWduKGgsZ2VuZXJhdGVGb250KHQsbixvLGcmJiFhLGMmJiFpLHMpKX1yJiYoaC5zdHlsZT1yKTtzJiYoaC51bHRpbWF0ZT1zKTtpZihnJiZhKXtjb25zdCBlPUZyLmdldChhKSx7dWx0aW1hdGU6dH09Z2VuZXJhdGVGb250KGUsbixvLGcsYyYmIWksQyk7aC51bHRpbWF0ZXx8PXR9YyYmaSYmbyYmbi5wdXNoKGB1cmwoJHtvfSR7aX0pYCk7cmV0dXJuIGh9ZnVuY3Rpb24gZ2V0Rm9udFN1YnN0aXR1dGlvbihlLHQsaSxhLHIscyl7aWYoYS5zdGFydHNXaXRoKCJJbnZhbGlkUERGanNGb250XyIpKXJldHVybiBudWxsOyJUcnVlVHlwZSIhPT1zJiYiVHlwZTEiIT09c3x8IS9eW0EtWl17Nn1cKy8udGVzdChhKXx8KGE9YS5zbGljZSg3KSk7Y29uc3Qgbj1hPW5vcm1hbGl6ZUZvbnROYW1lKGEpO2xldCBvPWUuZ2V0KG4pO2lmKG8pcmV0dXJuIG87bGV0IGc9RnIuZ2V0KGEpO2lmKCFnKWZvcihjb25zdFtlLHRdb2YgU3IpaWYoYS5zdGFydHNXaXRoKGUpKXthPWAke3R9JHthLnN1YnN0cmluZyhlLmxlbmd0aCl9YDtnPUZyLmdldChhKTticmVha31sZXQgYz0hMTtpZighZyl7Zz1Gci5nZXQocik7Yz0hMH1jb25zdCBDPWAke3QuZ2V0RG9jSWQoKX1fcyR7dC5jcmVhdGVGb250SWQoKX1gO2lmKCFnKXtpZighdmFsaWRhdGVGb250TmFtZShhKSl7d2FybihgQ2Fubm90IHN1YnN0aXR1dGUgdGhlIGZvbnQgYmVjYXVzZSBvZiBpdHMgbmFtZTogJHthfWApO2Uuc2V0KG4sbnVsbCk7cmV0dXJuIG51bGx9Y29uc3QgdD0vYm9sZC9naS50ZXN0KGEpLGk9L29ibGlxdWV8aXRhbGljL2dpLnRlc3QoYSkscj10JiZpJiZEcnx8dCYmd3J8fGkmJmJyfHx5cjtvPXtjc3M6YCIke2dldEZhbWlseU5hbWUoYSl9Iiwke0N9YCxndWVzc0ZhbGxiYWNrOiEwLGxvYWRlZE5hbWU6QyxiYXNlRm9udE5hbWU6YSxzcmM6YGxvY2FsKCR7YX0pYCxzdHlsZTpyfTtlLnNldChuLG8pO3JldHVybiBvfWNvbnN0IGg9W107YyYmdmFsaWRhdGVGb250TmFtZShhKSYmaC5wdXNoKGBsb2NhbCgke2F9KWApO2NvbnN0e3N0eWxlOmwsdWx0aW1hdGU6UX09Z2VuZXJhdGVGb250KGcsaCxpKSxFPW51bGw9PT1RLHU9RT8iIjpgLCR7UX1gO289e2NzczpgIiR7Z2V0RmFtaWx5TmFtZShhKX0iLCR7Q30ke3V9YCxndWVzc0ZhbGxiYWNrOkUsbG9hZGVkTmFtZTpDLGJhc2VGb250TmFtZTphLHNyYzpoLmpvaW4oIiwiKSxzdHlsZTpsfTtlLnNldChuLG8pO3JldHVybiBvfWNsYXNzIEltYWdlUmVzaXplcntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2ltZ0RhdGE9ZTt0aGlzLl9pc01hc2s9dH1zdGF0aWMgbmVlZHNUb0JlUmVzaXplZChlLHQpe2lmKGU8PXRoaXMuX2dvb2RTcXVhcmVMZW5ndGgmJnQ8PXRoaXMuX2dvb2RTcXVhcmVMZW5ndGgpcmV0dXJuITE7Y29uc3R7TUFYX0RJTTppfT10aGlzO2lmKGU+aXx8dD5pKXJldHVybiEwO2NvbnN0IGE9ZSp0O2lmKHRoaXMuX2hhc01heEFyZWEpcmV0dXJuIGE+dGhpcy5NQVhfQVJFQTtpZihhPHRoaXMuX2dvb2RTcXVhcmVMZW5ndGgqKjIpcmV0dXJuITE7aWYodGhpcy5fYXJlR29vZERpbXMoZSx0KSl7dGhpcy5fZ29vZFNxdWFyZUxlbmd0aD1NYXRoLm1heCh0aGlzLl9nb29kU3F1YXJlTGVuZ3RoLE1hdGguZmxvb3IoTWF0aC5zcXJ0KGUqdCkpKTtyZXR1cm4hMX10aGlzLl9nb29kU3F1YXJlTGVuZ3RoPXRoaXMuX2d1ZXNzTWF4KHRoaXMuX2dvb2RTcXVhcmVMZW5ndGgsaSwxMjgsMCk7cmV0dXJuIGE+KHRoaXMuTUFYX0FSRUE9dGhpcy5fZ29vZFNxdWFyZUxlbmd0aCoqMil9c3RhdGljIGdldCBNQVhfRElNKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJNQVhfRElNIix0aGlzLl9ndWVzc01heCgyMDQ4LDY1NTM3LDAsMSkpfXN0YXRpYyBnZXQgTUFYX0FSRUEoKXt0aGlzLl9oYXNNYXhBcmVhPSEwO3JldHVybiBzaGFkb3codGhpcywiTUFYX0FSRUEiLHRoaXMuX2d1ZXNzTWF4KEltYWdlUmVzaXplci5fZ29vZFNxdWFyZUxlbmd0aCx0aGlzLk1BWF9ESU0sMTI4LDApKioyKX1zdGF0aWMgc2V0IE1BWF9BUkVBKGUpe2lmKGU+PTApe3RoaXMuX2hhc01heEFyZWE9ITA7c2hhZG93KHRoaXMsIk1BWF9BUkVBIixlKX19c3RhdGljIHNldE1heEFyZWEoZSl7dGhpcy5faGFzTWF4QXJlYXx8KHRoaXMuTUFYX0FSRUE9ZT4+Mil9c3RhdGljIF9hcmVHb29kRGltcyhlLHQpe3RyeXtjb25zdCBpPW5ldyBPZmZzY3JlZW5DYW52YXMoZSx0KSxhPWkuZ2V0Q29udGV4dCgiMmQiKTthLmZpbGxSZWN0KDAsMCwxLDEpO2NvbnN0IHI9YS5nZXRJbWFnZURhdGEoMCwwLDEsMSkuZGF0YVszXTtpLndpZHRoPWkuaGVpZ2h0PTE7cmV0dXJuIDAhPT1yfWNhdGNoe3JldHVybiExfX1zdGF0aWMgX2d1ZXNzTWF4KGUsdCxpLGEpe2Zvcig7ZStpKzE8dDspe2NvbnN0IGk9TWF0aC5mbG9vcigoZSt0KS8yKSxyPWF8fGk7dGhpcy5fYXJlR29vZERpbXMoaSxyKT9lPWk6dD1pfXJldHVybiBlfXN0YXRpYyBhc3luYyBjcmVhdGVJbWFnZShlLHQ9ITEpe3JldHVybiBuZXcgSW1hZ2VSZXNpemVyKGUsdCkuX2NyZWF0ZUltYWdlKCl9YXN5bmMgX2NyZWF0ZUltYWdlKCl7Y29uc3QgZT10aGlzLl9lbmNvZGVCTVAoKSx0PW5ldyBCbG9iKFtlLmJ1ZmZlcl0se3R5cGU6ImltYWdlL2JtcCJ9KSxpPWNyZWF0ZUltYWdlQml0bWFwKHQpLHtNQVhfQVJFQTphLE1BWF9ESU06cn09SW1hZ2VSZXNpemVyLHtfaW1nRGF0YTpzfT10aGlzLHt3aWR0aDpuLGhlaWdodDpvfT1zLGc9TWF0aC5tYXgobi9yLG8vcixNYXRoLnNxcnQobipvL2EpKSxjPU1hdGgubWF4KGcsMiksQz1NYXRoLnJvdW5kKDEwKihnKzEuMjUpKS8xMC9jLGg9TWF0aC5mbG9vcihNYXRoLmxvZzIoQykpLGw9bmV3IEFycmF5KGgrMikuZmlsbCgyKTtsWzBdPWM7bC5zcGxpY2UoLTEsMSxDLygxPDxoKSk7bGV0IFE9bixFPW8sdT1hd2FpdCBpO2Zvcihjb25zdCBlIG9mIGwpe2NvbnN0IHQ9USxpPUU7UT1NYXRoLmZsb29yKFEvZSktMTtFPU1hdGguZmxvb3IoRS9lKS0xO2NvbnN0IGE9bmV3IE9mZnNjcmVlbkNhbnZhcyhRLEUpO2EuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodSwwLDAsdCxpLDAsMCxRLEUpO3U9YS50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX1zLmRhdGE9bnVsbDtzLmJpdG1hcD11O3Mud2lkdGg9UTtzLmhlaWdodD1FO3JldHVybiBzfV9lbmNvZGVCTVAoKXtjb25zdHt3aWR0aDplLGhlaWdodDp0LGtpbmQ6aX09dGhpcy5faW1nRGF0YTtsZXQgYSxyPXRoaXMuX2ltZ0RhdGEuZGF0YSxzPW5ldyBVaW50OEFycmF5KDApLG49cyxvPTA7c3dpdGNoKGkpe2Nhc2UgUzp7YT0xO3M9bmV3IFVpbnQ4QXJyYXkodGhpcy5faXNNYXNrP1syNTUsMjU1LDI1NSwyNTUsMCwwLDAsMF06WzAsMCwwLDAsMjU1LDI1NSwyNTUsMjU1XSk7Y29uc3QgaT1lKzc+PjMsbj1pKzMmLTQ7aWYoaSE9PW4pe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkobip0KTtsZXQgYT0wO2ZvcihsZXQgcz0wLG89dCppO3M8bztzKz1pLGErPW4pZS5zZXQoci5zdWJhcnJheShzLHMraSksYSk7cj1lfWJyZWFrfWNhc2UgazphPTI0O2lmKDMmZSl7Y29uc3QgaT0zKmUsYT1pKzMmLTQscz1hLWksbj1uZXcgVWludDhBcnJheShhKnQpO2xldCBvPTA7Zm9yKGxldCBlPTAsYT10Kmk7ZTxhO2UrPWkpe2NvbnN0IHQ9ci5zdWJhcnJheShlLGUraSk7Zm9yKGxldCBlPTA7ZTxpO2UrPTMpe25bbysrXT10W2UrMl07bltvKytdPXRbZSsxXTtuW28rK109dFtlXX1vKz1zfXI9bn1lbHNlIGZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrPTMpe2NvbnN0IHQ9cltlXTtyW2VdPXJbZSsyXTtyW2UrMl09dH1icmVhaztjYXNlIFI6YT0zMjtvPTM7bj1uZXcgVWludDhBcnJheSg2OCk7Y29uc3QgaT1uZXcgRGF0YVZpZXcobi5idWZmZXIpO2lmKEZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuKXtpLnNldFVpbnQzMigwLDI1NSwhMCk7aS5zZXRVaW50MzIoNCw2NTI4MCwhMCk7aS5zZXRVaW50MzIoOCwxNjcxMTY4MCwhMCk7aS5zZXRVaW50MzIoMTIsNDI3ODE5MDA4MCwhMCl9ZWxzZXtpLnNldFVpbnQzMigwLDQyNzgxOTAwODAsITApO2kuc2V0VWludDMyKDQsMTY3MTE2ODAsITApO2kuc2V0VWludDMyKDgsNjUyODAsITApO2kuc2V0VWludDMyKDEyLDI1NSwhMCl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0Iil9bGV0IGc9MDtjb25zdCBjPTQwK24ubGVuZ3RoLEM9MTQrYytzLmxlbmd0aCtyLmxlbmd0aCxoPW5ldyBVaW50OEFycmF5KEMpLGw9bmV3IERhdGFWaWV3KGguYnVmZmVyKTtsLnNldFVpbnQxNihnLDE5Nzc4LCEwKTtnKz0yO2wuc2V0VWludDMyKGcsQywhMCk7Zys9NDtsLnNldFVpbnQzMihnLDAsITApO2crPTQ7bC5zZXRVaW50MzIoZywxNCtjK3MubGVuZ3RoLCEwKTtnKz00O2wuc2V0VWludDMyKGcsYywhMCk7Zys9NDtsLnNldEludDMyKGcsZSwhMCk7Zys9NDtsLnNldEludDMyKGcsLXQsITApO2crPTQ7bC5zZXRVaW50MTYoZywxLCEwKTtnKz0yO2wuc2V0VWludDE2KGcsYSwhMCk7Zys9MjtsLnNldFVpbnQzMihnLG8sITApO2crPTQ7bC5zZXRVaW50MzIoZywwLCEwKTtnKz00O2wuc2V0SW50MzIoZywwLCEwKTtnKz00O2wuc2V0SW50MzIoZywwLCEwKTtnKz00O2wuc2V0VWludDMyKGcscy5sZW5ndGgvNCwhMCk7Zys9NDtsLnNldFVpbnQzMihnLDAsITApO2crPTQ7aC5zZXQobixnKTtnKz1uLmxlbmd0aDtoLnNldChzLGcpO2crPXMubGVuZ3RoO2guc2V0KHIsZyk7cmV0dXJuIGh9fUltYWdlUmVzaXplci5fZ29vZFNxdWFyZUxlbmd0aD0yMDQ4O2NvbnN0IGtyPTMyODUzNzc1MjAsUnI9NDI5NDkwMTc2MCxOcj02NTUzNTtjbGFzcyBNdXJtdXJIYXNoM182NHtjb25zdHJ1Y3RvcihlKXt0aGlzLmgxPWU/NDI5NDk2NzI5NSZlOmtyO3RoaXMuaDI9ZT80Mjk0OTY3Mjk1JmU6a3J9dXBkYXRlKGUpe2xldCB0LGk7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt0PW5ldyBVaW50OEFycmF5KDIqZS5sZW5ndGgpO2k9MDtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KGEpO2lmKHI8PTI1NSl0W2krK109cjtlbHNle3RbaSsrXT1yPj4+ODt0W2krK109MjU1JnJ9fX1lbHNle2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGEgZm9ybWF0LCBtdXN0IGJlIGEgc3RyaW5nIG9yIFR5cGVkQXJyYXkuIik7dD1lLnNsaWNlKCk7aT10LmJ5dGVMZW5ndGh9Y29uc3QgYT1pPj4yLHI9aS00KmEscz1uZXcgVWludDMyQXJyYXkodC5idWZmZXIsMCxhKTtsZXQgbj0wLG89MCxnPXRoaXMuaDEsYz10aGlzLmgyO2NvbnN0IEM9MzQzMjkxODM1MyxoPTQ2MTg0NTkwNyxsPTExNjAxLFE9MTM3MTU7Zm9yKGxldCBlPTA7ZTxhO2UrKylpZigxJmUpe249c1tlXTtuPW4qQyZScnxuKmwmTnI7bj1uPDwxNXxuPj4+MTc7bj1uKmgmUnJ8bipRJk5yO2dePW47Zz1nPDwxM3xnPj4+MTk7Zz01KmcrMzg2NDI5MjE5Nn1lbHNle289c1tlXTtvPW8qQyZScnxvKmwmTnI7bz1vPDwxNXxvPj4+MTc7bz1vKmgmUnJ8bypRJk5yO2NePW87Yz1jPDwxM3xjPj4+MTk7Yz01KmMrMzg2NDI5MjE5Nn1uPTA7c3dpdGNoKHIpe2Nhc2UgMzpuXj10WzQqYSsyXTw8MTY7Y2FzZSAyOm5ePXRbNCphKzFdPDw4O2Nhc2UgMTpuXj10WzQqYV07bj1uKkMmUnJ8bipsJk5yO249bjw8MTV8bj4+PjE3O249bipoJlJyfG4qUSZOcjsxJmE/Z149bjpjXj1ufXRoaXMuaDE9Zzt0aGlzLmgyPWN9aGV4ZGlnZXN0KCl7bGV0IGU9dGhpcy5oMSx0PXRoaXMuaDI7ZV49dD4+PjE7ZT0zOTgxODA2Nzk3KmUmUnJ8MzYwNDUqZSZOcjt0PTQyODM1NDM1MTEqdCZScnwoMjk1MDE2Mzc5NyoodDw8MTZ8ZT4+PjE2KSZScik+Pj4xNjtlXj10Pj4+MTtlPTQ0NDk4NDQwMyplJlJyfDYwNDk5KmUmTnI7dD0zMzAxODgyMzY2KnQmUnJ8KDMxMjA0Mzc4OTMqKHQ8PDE2fGU+Pj4xNikmUnIpPj4+MTY7ZV49dD4+PjE7cmV0dXJuKGU+Pj4wKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwiMCIpKyh0Pj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKX19ZnVuY3Rpb24gYWRkU3RhdGUoZSx0LGksYSxyKXtsZXQgcz1lO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGgtMTtlPGk7ZSsrKXtjb25zdCBpPXRbZV07cz1zW2ldfHw9W119c1t0LmF0KC0xKV09e2NoZWNrRm46aSxpdGVyYXRlRm46YSxwcm9jZXNzRm46cn19Y29uc3QgR3I9W107YWRkU3RhdGUoR3IsW01BLEhBLEF0LExBXSxudWxsLChmdW5jdGlvbiBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cChlLHQpe2NvbnN0IGk9ZS5mbkFycmF5LGE9KHQtKGUuaUN1cnItMykpJTQ7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gaVt0XT09PU1BO2Nhc2UgMTpyZXR1cm4gaVt0XT09PUhBO2Nhc2UgMjpyZXR1cm4gaVt0XT09PUF0O2Nhc2UgMzpyZXR1cm4gaVt0XT09PUxBfXRocm93IG5ldyBFcnJvcihgaXRlcmF0ZUlubGluZUltYWdlR3JvdXAgLSBpbnZhbGlkIHBvczogJHthfWApfSksKGZ1bmN0aW9uIGZvdW5kSW5saW5lSW1hZ2VHcm91cChlLHQpe2NvbnN0IGk9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXkscj1lLmlDdXJyLHM9ci0zLG49ci0yLG89ci0xLGc9TWF0aC5taW4oTWF0aC5mbG9vcigodC1zKS80KSwyMDApO2lmKGc8MTApcmV0dXJuIHQtKHQtcyklNDtsZXQgYz0wO2NvbnN0IEM9W107bGV0IGg9MCxsPTEsUT0xO2ZvcihsZXQgZT0wO2U8ZztlKyspe2NvbnN0IHQ9YVtuKyhlPDwyKV0saT1hW28rKGU8PDIpXVswXTtpZihsK2kud2lkdGg+MWUzKXtjPU1hdGgubWF4KGMsbCk7USs9aCsyO2w9MDtoPTB9Qy5wdXNoKHt0cmFuc2Zvcm06dCx4OmwseTpRLHc6aS53aWR0aCxoOmkuaGVpZ2h0fSk7bCs9aS53aWR0aCsyO2g9TWF0aC5tYXgoaCxpLmhlaWdodCl9Y29uc3QgRT1NYXRoLm1heChjLGwpKzEsdT1RK2grMSxkPW5ldyBVaW50OEFycmF5KEUqdSo0KSxmPUU8PDI7Zm9yKGxldCBlPTA7ZTxnO2UrKyl7Y29uc3QgdD1hW28rKGU8PDIpXVswXS5kYXRhLGk9Q1tlXS53PDwyO2xldCByPTAscz1DW2VdLngrQ1tlXS55KkU8PDI7ZC5zZXQodC5zdWJhcnJheSgwLGkpLHMtZik7Zm9yKGxldCBhPTAsbj1DW2VdLmg7YTxuO2ErKyl7ZC5zZXQodC5zdWJhcnJheShyLHIraSkscyk7cis9aTtzKz1mfWQuc2V0KHQuc3ViYXJyYXkoci1pLHIpLHMpO2Zvcig7cz49MDspe3Rbcy00XT10W3NdO3Rbcy0zXT10W3MrMV07dFtzLTJdPXRbcysyXTt0W3MtMV09dFtzKzNdO3RbcytpXT10W3MraS00XTt0W3MraSsxXT10W3MraS0zXTt0W3MraSsyXT10W3MraS0yXTt0W3MraSszXT10W3MraS0xXTtzLT1mfX1jb25zdCBwPXt3aWR0aDpFLGhlaWdodDp1fTtpZihlLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKXtjb25zdCBlPW5ldyBPZmZzY3JlZW5DYW52YXMoRSx1KTtlLmdldENvbnRleHQoIjJkIikucHV0SW1hZ2VEYXRhKG5ldyBJbWFnZURhdGEobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGQuYnVmZmVyKSxFLHUpLDAsMCk7cC5iaXRtYXA9ZS50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTtwLmRhdGE9bnVsbH1lbHNle3Aua2luZD1SO3AuZGF0YT1kfWkuc3BsaWNlKHMsNCpnLGV0KTthLnNwbGljZShzLDQqZyxbcCxDXSk7cmV0dXJuIHMrMX0pKTthZGRTdGF0ZShHcixbTUEsSEEsX2UsTEFdLG51bGwsKGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZU1hc2tHcm91cChlLHQpe2NvbnN0IGk9ZS5mbkFycmF5LGE9KHQtKGUuaUN1cnItMykpJTQ7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gaVt0XT09PU1BO2Nhc2UgMTpyZXR1cm4gaVt0XT09PUhBO2Nhc2UgMjpyZXR1cm4gaVt0XT09PV9lO2Nhc2UgMzpyZXR1cm4gaVt0XT09PUxBfXRocm93IG5ldyBFcnJvcihgaXRlcmF0ZUltYWdlTWFza0dyb3VwIC0gaW52YWxpZCBwb3M6ICR7YX1gKX0pLChmdW5jdGlvbiBmb3VuZEltYWdlTWFza0dyb3VwKGUsdCl7Y29uc3QgaT1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxyPWUuaUN1cnIscz1yLTMsbj1yLTIsbz1yLTE7bGV0IGc9TWF0aC5mbG9vcigodC1zKS80KTtpZihnPDEwKXJldHVybiB0LSh0LXMpJTQ7bGV0IGMsQyxoPSExO2NvbnN0IGw9YVtvXVswXSxRPWFbbl1bMF0sRT1hW25dWzFdLHU9YVtuXVsyXSxkPWFbbl1bM107aWYoRT09PXUpe2g9ITA7Yz1uKzQ7bGV0IGU9bys0O2ZvcihsZXQgdD0xO3Q8Zzt0KyssYys9NCxlKz00KXtDPWFbY107aWYoYVtlXVswXSE9PWx8fENbMF0hPT1RfHxDWzFdIT09RXx8Q1syXSE9PXV8fENbM10hPT1kKXt0PDEwP2g9ITE6Zz10O2JyZWFrfX19aWYoaCl7Zz1NYXRoLm1pbihnLDFlMyk7Y29uc3QgZT1uZXcgRmxvYXQzMkFycmF5KDIqZyk7Yz1uO2ZvcihsZXQgdD0wO3Q8Zzt0KyssYys9NCl7Qz1hW2NdO2VbdDw8MV09Q1s0XTtlWzErKHQ8PDEpXT1DWzVdfWkuc3BsaWNlKHMsNCpnLGl0KTthLnNwbGljZShzLDQqZyxbbCxRLEUsdSxkLGVdKX1lbHNle2c9TWF0aC5taW4oZywxMDApO2NvbnN0IGU9W107Zm9yKGxldCB0PTA7dDxnO3QrKyl7Qz1hW24rKHQ8PDIpXTtjb25zdCBpPWFbbysodDw8MildWzBdO2UucHVzaCh7ZGF0YTppLmRhdGEsd2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHQsaW50ZXJwb2xhdGU6aS5pbnRlcnBvbGF0ZSxjb3VudDppLmNvdW50LHRyYW5zZm9ybTpDfSl9aS5zcGxpY2Uocyw0KmcsemUpO2Euc3BsaWNlKHMsNCpnLFtlXSl9cmV0dXJuIHMrMX0pKTthZGRTdGF0ZShHcixbTUEsSEEsJGUsTEFdLChmdW5jdGlvbihlKXtjb25zdCB0PWUuYXJnc0FycmF5LGk9ZS5pQ3Vyci0yO3JldHVybiAwPT09dFtpXVsxXSYmMD09PXRbaV1bMl19KSwoZnVuY3Rpb24gaXRlcmF0ZUltYWdlR3JvdXAoZSx0KXtjb25zdCBpPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LHI9KHQtKGUuaUN1cnItMykpJTQ7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gaVt0XT09PU1BO2Nhc2UgMTppZihpW3RdIT09SEEpcmV0dXJuITE7Y29uc3Qgcj1lLmlDdXJyLTIscz1hW3JdWzBdLG49YVtyXVszXTtyZXR1cm4gYVt0XVswXT09PXMmJjA9PT1hW3RdWzFdJiYwPT09YVt0XVsyXSYmYVt0XVszXT09PW47Y2FzZSAyOmlmKGlbdF0hPT0kZSlyZXR1cm4hMTtjb25zdCBvPWFbZS5pQ3Vyci0xXVswXTtyZXR1cm4gYVt0XVswXT09PW87Y2FzZSAzOnJldHVybiBpW3RdPT09TEF9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke3J9YCl9KSwoZnVuY3Rpb24oZSx0KXtjb25zdCBpPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LHI9ZS5pQ3VycixzPXItMyxuPXItMixvPWFbci0xXVswXSxnPWFbbl1bMF0sYz1hW25dWzNdLEM9TWF0aC5taW4oTWF0aC5mbG9vcigodC1zKS80KSwxZTMpO2lmKEM8MylyZXR1cm4gdC0odC1zKSU0O2NvbnN0IGg9bmV3IEZsb2F0MzJBcnJheSgyKkMpO2xldCBsPW47Zm9yKGxldCBlPTA7ZTxDO2UrKyxsKz00KXtjb25zdCB0PWFbbF07aFtlPDwxXT10WzRdO2hbMSsoZTw8MSldPXRbNV19Y29uc3QgUT1bbyxnLGMsaF07aS5zcGxpY2Uocyw0KkMsdHQpO2Euc3BsaWNlKHMsNCpDLFEpO3JldHVybiBzKzF9KSk7YWRkU3RhdGUoR3IsW3RlLG9lLGhlLEJlLGllXSxudWxsLChmdW5jdGlvbiBpdGVyYXRlU2hvd1RleHRHcm91cChlLHQpe2NvbnN0IGk9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXkscj0odC0oZS5pQ3Vyci00KSklNTtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiBpW3RdPT09dGU7Y2FzZSAxOnJldHVybiBpW3RdPT09b2U7Y2FzZSAyOnJldHVybiBpW3RdPT09aGU7Y2FzZSAzOmlmKGlbdF0hPT1CZSlyZXR1cm4hMTtjb25zdCByPWUuaUN1cnItMyxzPWFbcl1bMF0sbj1hW3JdWzFdO3JldHVybiBhW3RdWzBdPT09cyYmYVt0XVsxXT09PW47Y2FzZSA0OnJldHVybiBpW3RdPT09aWV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlU2hvd1RleHRHcm91cCAtIGludmFsaWQgcG9zOiAke3J9YCl9KSwoZnVuY3Rpb24oZSx0KXtjb25zdCBpPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LHI9ZS5pQ3VycixzPXItNCxuPXItMyxvPXItMixnPXItMSxjPXIsQz1hW25dWzBdLGg9YVtuXVsxXTtsZXQgbD1NYXRoLm1pbihNYXRoLmZsb29yKCh0LXMpLzUpLDFlMyk7aWYobDwzKXJldHVybiB0LSh0LXMpJTU7bGV0IFE9cztpZihzPj00JiZpW3MtNF09PT1pW25dJiZpW3MtM109PT1pW29dJiZpW3MtMl09PT1pW2ddJiZpW3MtMV09PT1pW2NdJiZhW3MtNF1bMF09PT1DJiZhW3MtNF1bMV09PT1oKXtsKys7US09NX1sZXQgRT1RKzQ7Zm9yKGxldCBlPTE7ZTxsO2UrKyl7aS5zcGxpY2UoRSwzKTthLnNwbGljZShFLDMpO0UrPTJ9cmV0dXJuIEUrMX0pKTtjbGFzcyBOdWxsT3B0aW1pemVye2NvbnN0cnVjdG9yKGUpe3RoaXMucXVldWU9ZX1fb3B0aW1pemUoKXt9cHVzaChlLHQpe3RoaXMucXVldWUuZm5BcnJheS5wdXNoKGUpO3RoaXMucXVldWUuYXJnc0FycmF5LnB1c2godCk7dGhpcy5fb3B0aW1pemUoKX1mbHVzaCgpe31yZXNldCgpe319Y2xhc3MgUXVldWVPcHRpbWl6ZXIgZXh0ZW5kcyBOdWxsT3B0aW1pemVye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuc3RhdGU9bnVsbDt0aGlzLmNvbnRleHQ9e2lDdXJyOjAsZm5BcnJheTplLmZuQXJyYXksYXJnc0FycmF5OmUuYXJnc0FycmF5LGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOiExfTt0aGlzLm1hdGNoPW51bGw7dGhpcy5sYXN0UHJvY2Vzc2VkPTB9c2V0IGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKGUpe3RoaXMuY29udGV4dC5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD1lfV9vcHRpbWl6ZSgpe2NvbnN0IGU9dGhpcy5xdWV1ZS5mbkFycmF5O2xldCB0PXRoaXMubGFzdFByb2Nlc3NlZCxpPWUubGVuZ3RoLGE9dGhpcy5zdGF0ZSxyPXRoaXMubWF0Y2g7aWYoIWEmJiFyJiZ0KzE9PT1pJiYhR3JbZVt0XV0pe3RoaXMubGFzdFByb2Nlc3NlZD1pO3JldHVybn1jb25zdCBzPXRoaXMuY29udGV4dDtmb3IoO3Q8aTspe2lmKHIpe2lmKCgwLHIuaXRlcmF0ZUZuKShzLHQpKXt0Kys7Y29udGludWV9dD0oMCxyLnByb2Nlc3NGbikocyx0KzEpO2k9ZS5sZW5ndGg7cj1udWxsO2E9bnVsbDtpZih0Pj1pKWJyZWFrfWE9KGF8fEdyKVtlW3RdXTtpZihhJiYhQXJyYXkuaXNBcnJheShhKSl7cy5pQ3Vycj10O3QrKztpZighYS5jaGVja0ZufHwoMCxhLmNoZWNrRm4pKHMpKXtyPWE7YT1udWxsfWVsc2UgYT1udWxsfWVsc2UgdCsrfXRoaXMuc3RhdGU9YTt0aGlzLm1hdGNoPXI7dGhpcy5sYXN0UHJvY2Vzc2VkPXR9Zmx1c2goKXtmb3IoO3RoaXMubWF0Y2g7KXtjb25zdCBlPXRoaXMucXVldWUuZm5BcnJheS5sZW5ndGg7dGhpcy5sYXN0UHJvY2Vzc2VkPSgwLHRoaXMubWF0Y2gucHJvY2Vzc0ZuKSh0aGlzLmNvbnRleHQsZSk7dGhpcy5tYXRjaD1udWxsO3RoaXMuc3RhdGU9bnVsbDt0aGlzLl9vcHRpbWl6ZSgpfX1yZXNldCgpe3RoaXMuc3RhdGU9bnVsbDt0aGlzLm1hdGNoPW51bGw7dGhpcy5sYXN0UHJvY2Vzc2VkPTB9fWNsYXNzIE9wZXJhdG9yTGlzdHtzdGF0aWMgQ0hVTktfU0laRT0xZTM7c3RhdGljIENIVU5LX1NJWkVfQUJPVVQ9dGhpcy5DSFVOS19TSVpFLTU7Y29uc3RydWN0b3IoZT0wLHQpe3RoaXMuX3N0cmVhbVNpbms9dDt0aGlzLmZuQXJyYXk9W107dGhpcy5hcmdzQXJyYXk9W107dGhpcy5vcHRpbWl6ZXI9IXR8fGUmdT9uZXcgTnVsbE9wdGltaXplcih0aGlzKTpuZXcgUXVldWVPcHRpbWl6ZXIodGhpcyk7dGhpcy5kZXBlbmRlbmNpZXM9bmV3IFNldDt0aGlzLl90b3RhbExlbmd0aD0wO3RoaXMud2VpZ2h0PTA7dGhpcy5fcmVzb2x2ZWQ9dD9udWxsOlByb21pc2UucmVzb2x2ZSgpfXNldCBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZChlKXt0aGlzLm9wdGltaXplci5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD1lfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5hcmdzQXJyYXkubGVuZ3RofWdldCByZWFkeSgpe3JldHVybiB0aGlzLl9yZXNvbHZlZHx8dGhpcy5fc3RyZWFtU2luay5yZWFkeX1nZXQgdG90YWxMZW5ndGgoKXtyZXR1cm4gdGhpcy5fdG90YWxMZW5ndGgrdGhpcy5sZW5ndGh9YWRkT3AoZSx0KXt0aGlzLm9wdGltaXplci5wdXNoKGUsdCk7dGhpcy53ZWlnaHQrKzt0aGlzLl9zdHJlYW1TaW5rJiYodGhpcy53ZWlnaHQ+PU9wZXJhdG9yTGlzdC5DSFVOS19TSVpFfHx0aGlzLndlaWdodD49T3BlcmF0b3JMaXN0LkNIVU5LX1NJWkVfQUJPVVQmJihlPT09TEF8fGU9PT1pZSkpJiZ0aGlzLmZsdXNoKCl9YWRkSW1hZ2VPcHMoZSx0LGkpe3ZvaWQgMCE9PWkmJnRoaXMuYWRkT3AoVGUsWyJPQyIsaV0pO3RoaXMuYWRkT3AoZSx0KTt2b2lkIDAhPT1pJiZ0aGlzLmFkZE9wKEtlLFtdKX1hZGREZXBlbmRlbmN5KGUpe2lmKCF0aGlzLmRlcGVuZGVuY2llcy5oYXMoZSkpe3RoaXMuZGVwZW5kZW5jaWVzLmFkZChlKTt0aGlzLmFkZE9wKERBLFtlXSl9fWFkZERlcGVuZGVuY2llcyhlKXtmb3IoY29uc3QgdCBvZiBlKXRoaXMuYWRkRGVwZW5kZW5jeSh0KX1hZGRPcExpc3QoZSl7aWYoZSBpbnN0YW5jZW9mIE9wZXJhdG9yTGlzdCl7Zm9yKGNvbnN0IHQgb2YgZS5kZXBlbmRlbmNpZXMpdGhpcy5kZXBlbmRlbmNpZXMuYWRkKHQpO2ZvcihsZXQgdD0wLGk9ZS5sZW5ndGg7dDxpO3QrKyl0aGlzLmFkZE9wKGUuZm5BcnJheVt0XSxlLmFyZ3NBcnJheVt0XSl9ZWxzZSB3YXJuKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkICJvcExpc3QiIHBhcmFtZXRlci4nKX1nZXRJUigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX1nZXQgX3RyYW5zZmVycygpe2NvbnN0IGU9W10se2ZuQXJyYXk6dCxhcmdzQXJyYXk6aSxsZW5ndGg6YX09dGhpcztmb3IobGV0IHI9MDtyPGE7cisrKXN3aXRjaCh0W3JdKXtjYXNlIEF0OmNhc2UgZXQ6Y2FzZSBfZTpjb25zdCB0PWlbcl1bMF07IXQuY2FjaGVkJiZ0LmRhdGE/LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZlLnB1c2godC5kYXRhLmJ1ZmZlcil9cmV0dXJuIGV9Zmx1c2goZT0hMSx0PW51bGwpe3RoaXMub3B0aW1pemVyLmZsdXNoKCk7Y29uc3QgaT10aGlzLmxlbmd0aDt0aGlzLl90b3RhbExlbmd0aCs9aTt0aGlzLl9zdHJlYW1TaW5rLmVucXVldWUoe2ZuQXJyYXk6dGhpcy5mbkFycmF5LGFyZ3NBcnJheTp0aGlzLmFyZ3NBcnJheSxsYXN0Q2h1bms6ZSxzZXBhcmF0ZUFubm90czp0LGxlbmd0aDppfSwxLHRoaXMuX3RyYW5zZmVycyk7dGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKTt0aGlzLmZuQXJyYXkubGVuZ3RoPTA7dGhpcy5hcmdzQXJyYXkubGVuZ3RoPTA7dGhpcy53ZWlnaHQ9MDt0aGlzLm9wdGltaXplci5yZXNldCgpfX1mdW5jdGlvbiBkZWNvZGVBbmRDbGFtcChlLHQsaSxhKXsoZT10K2UqaSk8MD9lPTA6ZT5hJiYoZT1hKTtyZXR1cm4gZX1mdW5jdGlvbiByZXNpemVJbWFnZU1hc2soZSx0LGksYSxyLHMpe2NvbnN0IG49cipzO2xldCBvO289dDw9OD9uZXcgVWludDhBcnJheShuKTp0PD0xNj9uZXcgVWludDE2QXJyYXkobik6bmV3IFVpbnQzMkFycmF5KG4pO2NvbnN0IGc9aS9yLGM9YS9zO2xldCBDLGgsbCxRLEU9MDtjb25zdCB1PW5ldyBVaW50MTZBcnJheShyKSxkPWk7Zm9yKEM9MDtDPHI7QysrKXVbQ109TWF0aC5mbG9vcihDKmcpO2ZvcihDPTA7QzxzO0MrKyl7bD1NYXRoLmZsb29yKEMqYykqZDtmb3IoaD0wO2g8cjtoKyspe1E9bCt1W2hdO29bRSsrXT1lW1FdfX1yZXR1cm4gb31jbGFzcyBQREZJbWFnZXtjb25zdHJ1Y3Rvcih7eHJlZjplLHJlczp0LGltYWdlOmksaXNJbmxpbmU6YT0hMSxzbWFzazpyPW51bGwsbWFzazpzPW51bGwsaXNNYXNrOm49ITEscGRmRnVuY3Rpb25GYWN0b3J5Om8sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Z30pe3RoaXMuaW1hZ2U9aTtjb25zdCBjPWkuZGljdCxDPWMuZ2V0KCJGIiwiRmlsdGVyIik7bGV0IGg7aWYoQyBpbnN0YW5jZW9mIE5hbWUpaD1DLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KEMpKXtjb25zdCB0PWUuZmV0Y2hJZlJlZihDWzBdKTt0IGluc3RhbmNlb2YgTmFtZSYmKGg9dC5uYW1lKX1zd2l0Y2goaCl7Y2FzZSJKUFhEZWNvZGUiOih7d2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHQsY29tcG9uZW50c0NvdW50OmkubnVtQ29tcHMsYml0c1BlckNvbXBvbmVudDppLmJpdHNQZXJDb21wb25lbnR9PUpweEltYWdlLnBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGkuc3RyZWFtKSk7aS5zdHJlYW0ucmVzZXQoKTt0aGlzLmpweERlY29kZXJPcHRpb25zPXtudW1Db21wb25lbnRzOjAsaXNJbmRleGVkQ29sb3JtYXA6ITEsc21hc2tJbkRhdGE6Yy5oYXMoIlNNYXNrSW5EYXRhIil9O2JyZWFrO2Nhc2UiSkJJRzJEZWNvZGUiOmkuYml0c1BlckNvbXBvbmVudD0xO2kubnVtQ29tcHM9MX1sZXQgbD1jLmdldCgiVyIsIldpZHRoIiksUT1jLmdldCgiSCIsIkhlaWdodCIpO2lmKE51bWJlci5pc0ludGVnZXIoaS53aWR0aCkmJmkud2lkdGg+MCYmTnVtYmVyLmlzSW50ZWdlcihpLmhlaWdodCkmJmkuaGVpZ2h0PjAmJihpLndpZHRoIT09bHx8aS5oZWlnaHQhPT1RKSl7d2FybigiUERGSW1hZ2UgLSB1c2luZyB0aGUgV2lkdGgvSGVpZ2h0IG9mIHRoZSBpbWFnZSBkYXRhLCByYXRoZXIgdGhhbiB0aGUgaW1hZ2UgZGljdGlvbmFyeS4iKTtsPWkud2lkdGg7UT1pLmhlaWdodH1pZihsPDF8fFE8MSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgaW1hZ2Ugd2lkdGg6ICR7bH0gb3IgaGVpZ2h0OiAke1F9YCk7dGhpcy53aWR0aD1sO3RoaXMuaGVpZ2h0PVE7dGhpcy5pbnRlcnBvbGF0ZT1jLmdldCgiSSIsIkludGVycG9sYXRlIik7dGhpcy5pbWFnZU1hc2s9Yy5nZXQoIklNIiwiSW1hZ2VNYXNrIil8fCExO3RoaXMubWF0dGU9Yy5nZXQoIk1hdHRlIil8fCExO2xldCBFPWkuYml0c1BlckNvbXBvbmVudDtpZighRSl7RT1jLmdldCgiQlBDIiwiQml0c1BlckNvbXBvbmVudCIpO2lmKCFFKXtpZighdGhpcy5pbWFnZU1hc2spdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBCaXRzIHBlciBjb21wb25lbnQgbWlzc2luZyBpbiBpbWFnZTogJHt0aGlzLmltYWdlTWFza31gKTtFPTF9fXRoaXMuYnBjPUU7aWYoIXRoaXMuaW1hZ2VNYXNrKXtsZXQgcj1jLmdldFJhdygiQ1MiKXx8Yy5nZXRSYXcoIkNvbG9yU3BhY2UiKTtjb25zdCBzPSEhcjtpZihzKXRoaXMuanB4RGVjb2Rlck9wdGlvbnM/LnNtYXNrSW5EYXRhJiYocj1OYW1lLmdldCgiRGV2aWNlUkdCQSIpKTtlbHNlIGlmKHRoaXMuanB4RGVjb2Rlck9wdGlvbnMpcj1OYW1lLmdldCgiRGV2aWNlUkdCQSIpO2Vsc2Ugc3dpdGNoKGkubnVtQ29tcHMpe2Nhc2UgMTpyPU5hbWUuZ2V0KCJEZXZpY2VHcmF5Iik7YnJlYWs7Y2FzZSAzOnI9TmFtZS5nZXQoIkRldmljZVJHQiIpO2JyZWFrO2Nhc2UgNDpyPU5hbWUuZ2V0KCJEZXZpY2VDTVlLIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYEltYWdlcyB3aXRoICR7aS5udW1Db21wc30gY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLmApfXRoaXMuY29sb3JTcGFjZT1Db2xvclNwYWNlLnBhcnNlKHtjczpyLHhyZWY6ZSxyZXNvdXJjZXM6YT90Om51bGwscGRmRnVuY3Rpb25GYWN0b3J5Om8sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Z30pO3RoaXMubnVtQ29tcHM9dGhpcy5jb2xvclNwYWNlLm51bUNvbXBzO2lmKHRoaXMuanB4RGVjb2Rlck9wdGlvbnMpe3RoaXMuanB4RGVjb2Rlck9wdGlvbnMubnVtQ29tcG9uZW50cz1zP3RoaXMubnVtQ29tcDowO3RoaXMuanB4RGVjb2Rlck9wdGlvbnMuaXNJbmRleGVkQ29sb3JtYXA9IkluZGV4ZWQiPT09dGhpcy5jb2xvclNwYWNlLm5hbWV9fXRoaXMuZGVjb2RlPWMuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTt0aGlzLm5lZWRzRGVjb2RlPSExO2lmKHRoaXMuZGVjb2RlJiYodGhpcy5jb2xvclNwYWNlJiYhdGhpcy5jb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSxFKXx8biYmIUNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLDEpKSl7dGhpcy5uZWVkc0RlY29kZT0hMDtjb25zdCBlPSgxPDxFKS0xO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzPVtdO3RoaXMuZGVjb2RlQWRkZW5kcz1bXTtjb25zdCB0PSJJbmRleGVkIj09PXRoaXMuY29sb3JTcGFjZT8ubmFtZTtmb3IobGV0IGk9MCxhPTA7aTx0aGlzLmRlY29kZS5sZW5ndGg7aSs9MiwrK2Epe2NvbnN0IHI9dGhpcy5kZWNvZGVbaV0scz10aGlzLmRlY29kZVtpKzFdO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzW2FdPXQ/KHMtcikvZTpzLXI7dGhpcy5kZWNvZGVBZGRlbmRzW2FdPXQ/cjplKnJ9fWlmKHIpdGhpcy5zbWFzaz1uZXcgUERGSW1hZ2Uoe3hyZWY6ZSxyZXM6dCxpbWFnZTpyLGlzSW5saW5lOmEscGRmRnVuY3Rpb25GYWN0b3J5Om8sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Z30pO2Vsc2UgaWYocylpZihzIGluc3RhbmNlb2YgQmFzZVN0cmVhbSl7cy5kaWN0LmdldCgiSU0iLCJJbWFnZU1hc2siKT90aGlzLm1hc2s9bmV3IFBERkltYWdlKHt4cmVmOmUscmVzOnQsaW1hZ2U6cyxpc0lubGluZTphLGlzTWFzazohMCxwZGZGdW5jdGlvbkZhY3Rvcnk6byxsb2NhbENvbG9yU3BhY2VDYWNoZTpnfSk6d2FybigiSWdub3JpbmcgL01hc2sgaW4gaW1hZ2Ugd2l0aG91dCAvSW1hZ2VNYXNrLiIpfWVsc2UgdGhpcy5tYXNrPXN9c3RhdGljIGFzeW5jIGJ1aWxkSW1hZ2Uoe3hyZWY6ZSxyZXM6dCxpbWFnZTppLGlzSW5saW5lOmE9ITEscGRmRnVuY3Rpb25GYWN0b3J5OnIsbG9jYWxDb2xvclNwYWNlQ2FjaGU6c30pe2NvbnN0IG49aTtsZXQgbz1udWxsLGc9bnVsbDtjb25zdCBjPWkuZGljdC5nZXQoIlNNYXNrIiksQz1pLmRpY3QuZ2V0KCJNYXNrIik7Yz9jIGluc3RhbmNlb2YgQmFzZVN0cmVhbT9vPWM6d2FybigiVW5zdXBwb3J0ZWQgL1NNYXNrIGZvcm1hdC4iKTpDJiYoQyBpbnN0YW5jZW9mIEJhc2VTdHJlYW18fEFycmF5LmlzQXJyYXkoQyk/Zz1DOndhcm4oIlVuc3VwcG9ydGVkIC9NYXNrIGZvcm1hdC4iKSk7cmV0dXJuIG5ldyBQREZJbWFnZSh7eHJlZjplLHJlczp0LGltYWdlOm4saXNJbmxpbmU6YSxzbWFzazpvLG1hc2s6ZyxwZGZGdW5jdGlvbkZhY3Rvcnk6cixsb2NhbENvbG9yU3BhY2VDYWNoZTpzfSl9c3RhdGljIGNyZWF0ZVJhd01hc2soe2ltZ0FycmF5OmUsd2lkdGg6dCxoZWlnaHQ6aSxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTphLGludmVyc2VEZWNvZGU6cixpbnRlcnBvbGF0ZTpzfSl7Y29uc3Qgbj0odCs3Pj4zKSppLG89ZS5ieXRlTGVuZ3RoO2xldCBnLGM7aWYoIWF8fHImJiEobj09PW8pKWlmKHIpe2c9bmV3IFVpbnQ4QXJyYXkobik7Zy5zZXQoZSk7Zy5maWxsKDI1NSxvKX1lbHNlIGc9bmV3IFVpbnQ4QXJyYXkoZSk7ZWxzZSBnPWU7aWYocilmb3IoYz0wO2M8bztjKyspZ1tjXV49MjU1O3JldHVybntkYXRhOmcsd2lkdGg6dCxoZWlnaHQ6aSxpbnRlcnBvbGF0ZTpzfX1zdGF0aWMgYXN5bmMgY3JlYXRlTWFzayh7aW1nQXJyYXk6ZSx3aWR0aDp0LGhlaWdodDppLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOmEsaW52ZXJzZURlY29kZTpyLGludGVycG9sYXRlOnMsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6bj0hMX0pe2NvbnN0IG89MT09PXQmJjE9PT1pJiZyPT09KDA9PT1lLmxlbmd0aHx8ISEoMTI4JmVbMF0pKTtpZihvKXJldHVybntpc1NpbmdsZU9wYXF1ZVBpeGVsOm99O2lmKG4pe2lmKEltYWdlUmVzaXplci5uZWVkc1RvQmVSZXNpemVkKHQsaSkpe2NvbnN0IGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqaSo0KTtjb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQSh7c3JjOmUsZGVzdDphLHdpZHRoOnQsaGVpZ2h0Omksbm9uQmxhY2tDb2xvcjowLGludmVyc2VEZWNvZGU6cn0pO3JldHVybiBJbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2Uoe2tpbmQ6UixkYXRhOmEsd2lkdGg6dCxoZWlnaHQ6aSxpbnRlcnBvbGF0ZTpzfSl9Y29uc3QgYT1uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsaSksbj1hLmdldENvbnRleHQoIjJkIiksbz1uLmNyZWF0ZUltYWdlRGF0YSh0LGkpO2NvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKHtzcmM6ZSxkZXN0Om8uZGF0YSx3aWR0aDp0LGhlaWdodDppLG5vbkJsYWNrQ29sb3I6MCxpbnZlcnNlRGVjb2RlOnJ9KTtuLnB1dEltYWdlRGF0YShvLDAsMCk7cmV0dXJue2RhdGE6bnVsbCx3aWR0aDp0LGhlaWdodDppLGludGVycG9sYXRlOnMsYml0bWFwOmEudHJhbnNmZXJUb0ltYWdlQml0bWFwKCl9fXJldHVybiB0aGlzLmNyZWF0ZVJhd01hc2soe2ltZ0FycmF5OmUsd2lkdGg6dCxoZWlnaHQ6aSxpbnZlcnNlRGVjb2RlOnIsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06YSxpbnRlcnBvbGF0ZTpzfSl9Z2V0IGRyYXdXaWR0aCgpe3JldHVybiBNYXRoLm1heCh0aGlzLndpZHRoLHRoaXMuc21hc2s/LndpZHRofHwwLHRoaXMubWFzaz8ud2lkdGh8fDApfWdldCBkcmF3SGVpZ2h0KCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuaGVpZ2h0LHRoaXMuc21hc2s/LmhlaWdodHx8MCx0aGlzLm1hc2s/LmhlaWdodHx8MCl9ZGVjb2RlQnVmZmVyKGUpe2NvbnN0IHQ9dGhpcy5icGMsaT10aGlzLm51bUNvbXBzLGE9dGhpcy5kZWNvZGVBZGRlbmRzLHI9dGhpcy5kZWNvZGVDb2VmZmljaWVudHMscz0oMTw8dCktMTtsZXQgbixvO2lmKDE9PT10KXtmb3Iobj0wLG89ZS5sZW5ndGg7bjxvO24rKyllW25dPSshZVtuXTtyZXR1cm59bGV0IGc9MDtmb3Iobj0wLG89dGhpcy53aWR0aCp0aGlzLmhlaWdodDtuPG87bisrKWZvcihsZXQgdD0wO3Q8aTt0Kyspe2VbZ109ZGVjb2RlQW5kQ2xhbXAoZVtnXSxhW3RdLHJbdF0scyk7ZysrfX1nZXRDb21wb25lbnRzKGUpe2NvbnN0IHQ9dGhpcy5icGM7aWYoOD09PXQpcmV0dXJuIGU7Y29uc3QgaT10aGlzLndpZHRoLGE9dGhpcy5oZWlnaHQscj10aGlzLm51bUNvbXBzLHM9aSphKnI7bGV0IG4sbz0wO249dDw9OD9uZXcgVWludDhBcnJheShzKTp0PD0xNj9uZXcgVWludDE2QXJyYXkocyk6bmV3IFVpbnQzMkFycmF5KHMpO2NvbnN0IGc9aSpyLGM9KDE8PHQpLTE7bGV0IEMsaCxsPTA7aWYoMT09PXQpe2xldCB0LGkscjtmb3IobGV0IHM9MDtzPGE7cysrKXtpPWwrKC04JmcpO3I9bCtnO2Zvcig7bDxpOyl7aD1lW28rK107bltsXT1oPj43JjE7bltsKzFdPWg+PjYmMTtuW2wrMl09aD4+NSYxO25bbCszXT1oPj40JjE7bltsKzRdPWg+PjMmMTtuW2wrNV09aD4+MiYxO25bbCs2XT1oPj4xJjE7bltsKzddPTEmaDtsKz04fWlmKGw8cil7aD1lW28rK107dD0xMjg7Zm9yKDtsPHI7KXtuW2wrK109KyEhKGgmdCk7dD4+PTF9fX19ZWxzZXtsZXQgaT0wO2g9MDtmb3IobD0wLEM9cztsPEM7KytsKXtpZihsJWc9PTApe2g9MDtpPTB9Zm9yKDtpPHQ7KXtoPWg8PDh8ZVtvKytdO2krPTh9Y29uc3QgYT1pLXQ7bGV0IHI9aD4+YTtyPDA/cj0wOnI+YyYmKHI9Yyk7bltsXT1yO2gmPSgxPDxhKS0xO2k9YX19cmV0dXJuIG59YXN5bmMgZmlsbE9wYWNpdHkoZSx0LGksYSxyKXtjb25zdCBzPXRoaXMuc21hc2ssbj10aGlzLm1hc2s7bGV0IG8sZyxjLEMsaCxsO2lmKHMpe2c9cy53aWR0aDtjPXMuaGVpZ2h0O289bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGcqYyk7YXdhaXQgcy5maWxsR3JheUJ1ZmZlcihvKTtnPT09dCYmYz09PWl8fChvPXJlc2l6ZUltYWdlTWFzayhvLHMuYnBjLGcsYyx0LGkpKX1lbHNlIGlmKG4paWYobiBpbnN0YW5jZW9mIFBERkltYWdlKXtnPW4ud2lkdGg7Yz1uLmhlaWdodDtvPW5ldyBVaW50OENsYW1wZWRBcnJheShnKmMpO24ubnVtQ29tcHM9MTthd2FpdCBuLmZpbGxHcmF5QnVmZmVyKG8pO2ZvcihDPTAsaD1nKmM7QzxoOysrQylvW0NdPTI1NS1vW0NdO2c9PT10JiZjPT09aXx8KG89cmVzaXplSW1hZ2VNYXNrKG8sbi5icGMsZyxjLHQsaSkpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkobikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIG1hc2sgZm9ybWF0LiIpO3tvPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmkpO2NvbnN0IGU9dGhpcy5udW1Db21wcztmb3IoQz0wLGg9dCppO0M8aDsrK0Mpe2xldCB0PTA7Y29uc3QgaT1DKmU7Zm9yKGw9MDtsPGU7KytsKXtjb25zdCBlPXJbaStsXSxhPTIqbDtpZihlPG5bYV18fGU+blthKzFdKXt0PTI1NTticmVha319b1tDXT10fX19aWYobylmb3IoQz0wLGw9MyxoPXQqYTtDPGg7KytDLGwrPTQpZVtsXT1vW0NdO2Vsc2UgZm9yKEM9MCxsPTMsaD10KmE7QzxoOysrQyxsKz00KWVbbF09MjU1fXVuZG9QcmVibGVuZChlLHQsaSl7Y29uc3QgYT10aGlzLnNtYXNrPy5tYXR0ZTtpZighYSlyZXR1cm47Y29uc3Qgcj10aGlzLmNvbG9yU3BhY2UuZ2V0UmdiKGEsMCkscz1yWzBdLG49clsxXSxvPXJbMl0sZz10KmkqNDtmb3IobGV0IHQ9MDt0PGc7dCs9NCl7Y29uc3QgaT1lW3QrM107aWYoMD09PWkpe2VbdF09MjU1O2VbdCsxXT0yNTU7ZVt0KzJdPTI1NTtjb250aW51ZX1jb25zdCBhPTI1NS9pO2VbdF09KGVbdF0tcykqYStzO2VbdCsxXT0oZVt0KzFdLW4pKmErbjtlW3QrMl09KGVbdCsyXS1vKSphK299fWFzeW5jIGNyZWF0ZUltYWdlRGF0YShlPSExLHQ9ITEpe2NvbnN0IGk9dGhpcy5kcmF3V2lkdGgsYT10aGlzLmRyYXdIZWlnaHQscj17d2lkdGg6aSxoZWlnaHQ6YSxpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlLGtpbmQ6MCxkYXRhOm51bGx9LHM9dGhpcy5udW1Db21wcyxuPXRoaXMud2lkdGgsbz10aGlzLmhlaWdodCxnPXRoaXMuYnBjLGM9bipzKmcrNz4+MyxDPXQmJkltYWdlUmVzaXplci5uZWVkc1RvQmVSZXNpemVkKGksYSk7aWYoIkRldmljZVJHQkEiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUpe3Iua2luZD1SO2NvbnN0IGU9ci5kYXRhPWF3YWl0IHRoaXMuZ2V0SW1hZ2VCeXRlcyhvKm4qNCx7fSk7cmV0dXJuIHQ/Qz9JbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2UociwhMSk6dGhpcy5jcmVhdGVCaXRtYXAoUixpLGEsZSk6cn1pZighZSl7bGV0IGU7IkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT1nP2U9UzoiRGV2aWNlUkdCIiE9PXRoaXMuY29sb3JTcGFjZS5uYW1lfHw4IT09Z3x8dGhpcy5uZWVkc0RlY29kZXx8KGU9ayk7aWYoZSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJmk9PT1uJiZhPT09byl7Y29uc3Qgcz1hd2FpdCB0aGlzLmdldEltYWdlQnl0ZXMobypjLHt9KTtpZih0KXJldHVybiBDP0ltYWdlUmVzaXplci5jcmVhdGVJbWFnZSh7ZGF0YTpzLGtpbmQ6ZSx3aWR0aDppLGhlaWdodDphLGludGVycG9sYXRlOnRoaXMuaW50ZXJwb2xhdGV9LHRoaXMubmVlZHNEZWNvZGUpOnRoaXMuY3JlYXRlQml0bWFwKGUsbixvLHMpO3Iua2luZD1lO3IuZGF0YT1zO2lmKHRoaXMubmVlZHNEZWNvZGUpe2Fzc2VydChlPT09UywiUERGSW1hZ2UuY3JlYXRlSW1hZ2VEYXRhOiBUaGUgaW1hZ2UgbXVzdCBiZSBncmF5c2NhbGUuIik7Y29uc3QgdD1yLmRhdGE7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRbZV1ePTI1NX1yZXR1cm4gcn1pZih0aGlzLmltYWdlIGluc3RhbmNlb2YgSnBlZ1N0cmVhbSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJiF0aGlzLm5lZWRzRGVjb2RlKXtsZXQgZT1vKmM7aWYodCYmIUMpe2xldCB0PSExO3N3aXRjaCh0aGlzLmNvbG9yU3BhY2UubmFtZSl7Y2FzZSJEZXZpY2VHcmF5IjplKj00O3Q9ITA7YnJlYWs7Y2FzZSJEZXZpY2VSR0IiOmU9ZS8zKjQ7dD0hMDticmVhaztjYXNlIkRldmljZUNNWUsiOnQ9ITB9aWYodCl7Y29uc3QgdD1hd2FpdCB0aGlzLmdldEltYWdlQnl0ZXMoZSx7ZHJhd1dpZHRoOmksZHJhd0hlaWdodDphLGZvcmNlUkdCQTohMH0pO3JldHVybiB0aGlzLmNyZWF0ZUJpdG1hcChSLGksYSx0KX19ZWxzZSBzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6ZSo9MztjYXNlIkRldmljZVJHQiI6Y2FzZSJEZXZpY2VDTVlLIjpyLmtpbmQ9aztyLmRhdGE9YXdhaXQgdGhpcy5nZXRJbWFnZUJ5dGVzKGUse2RyYXdXaWR0aDppLGRyYXdIZWlnaHQ6YSxmb3JjZVJHQjohMH0pO3JldHVybiBDP0ltYWdlUmVzaXplci5jcmVhdGVJbWFnZShyKTpyfX19Y29uc3QgaD1hd2FpdCB0aGlzLmdldEltYWdlQnl0ZXMobypjLHtpbnRlcm5hbDohMH0pLGw9MHxoLmxlbmd0aC9jKmEvbyxRPXRoaXMuZ2V0Q29tcG9uZW50cyhoKTtsZXQgRSx1LGQsZixwLG07aWYodCYmIUMpe2Q9bmV3IE9mZnNjcmVlbkNhbnZhcyhpLGEpO2Y9ZC5nZXRDb250ZXh0KCIyZCIpO3A9Zi5jcmVhdGVJbWFnZURhdGEoaSxhKTttPXAuZGF0YX1yLmtpbmQ9UjtpZihlfHx0aGlzLnNtYXNrfHx0aGlzLm1hc2spe3QmJiFDfHwobT1uZXcgVWludDhDbGFtcGVkQXJyYXkoaSphKjQpKTtFPTE7dT0hMDthd2FpdCB0aGlzLmZpbGxPcGFjaXR5KG0saSxhLGwsUSl9ZWxzZXtpZighdHx8Qyl7ci5raW5kPWs7bT1uZXcgVWludDhDbGFtcGVkQXJyYXkoaSphKjMpO0U9MH1lbHNle25ldyBVaW50MzJBcnJheShtLmJ1ZmZlcikuZmlsbChGZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NSk7RT0xfXU9ITF9dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIoUSk7dGhpcy5jb2xvclNwYWNlLmZpbGxSZ2IobSxuLG8saSxhLGwsZyxRLEUpO3UmJnRoaXMudW5kb1ByZWJsZW5kKG0saSxsKTtpZih0JiYhQyl7Zi5wdXRJbWFnZURhdGEocCwwLDApO3JldHVybntkYXRhOm51bGwsd2lkdGg6aSxoZWlnaHQ6YSxiaXRtYXA6ZC50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKSxpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlfX1yLmRhdGE9bTtyZXR1cm4gQz9JbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2Uocik6cn1hc3luYyBmaWxsR3JheUJ1ZmZlcihlKXtjb25zdCB0PXRoaXMubnVtQ29tcHM7aWYoMSE9PXQpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBSZWFkaW5nIGdyYXkgc2NhbGUgZnJvbSBhIGNvbG9yIGltYWdlOiAke3R9YCk7Y29uc3QgaT10aGlzLndpZHRoLGE9dGhpcy5oZWlnaHQscj10aGlzLmJwYyxzPWkqdCpyKzc+PjMsbj1hd2FpdCB0aGlzLmdldEltYWdlQnl0ZXMoYSpzLHtpbnRlcm5hbDohMH0pLG89dGhpcy5nZXRDb21wb25lbnRzKG4pO2xldCBnLGM7aWYoMT09PXIpe2M9aSphO2lmKHRoaXMubmVlZHNEZWNvZGUpZm9yKGc9MDtnPGM7KytnKWVbZ109b1tnXS0xJjI1NTtlbHNlIGZvcihnPTA7ZzxjOysrZyllW2ddPTI1NSYtb1tnXTtyZXR1cm59dGhpcy5uZWVkc0RlY29kZSYmdGhpcy5kZWNvZGVCdWZmZXIobyk7Yz1pKmE7Y29uc3QgQz0yNTUvKCgxPDxyKS0xKTtmb3IoZz0wO2c8YzsrK2cpZVtnXT1DKm9bZ119Y3JlYXRlQml0bWFwKGUsdCxpLGEpe2NvbnN0IHI9bmV3IE9mZnNjcmVlbkNhbnZhcyh0LGkpLHM9ci5nZXRDb250ZXh0KCIyZCIpO2xldCBuO2lmKGU9PT1SKW49bmV3IEltYWdlRGF0YShhLHQsaSk7ZWxzZXtuPXMuY3JlYXRlSW1hZ2VEYXRhKHQsaSk7Y29udmVydFRvUkdCQSh7a2luZDplLHNyYzphLGRlc3Q6bmV3IFVpbnQzMkFycmF5KG4uZGF0YS5idWZmZXIpLHdpZHRoOnQsaGVpZ2h0OmksaW52ZXJzZURlY29kZTp0aGlzLm5lZWRzRGVjb2RlfSl9cy5wdXRJbWFnZURhdGEobiwwLDApO3JldHVybntkYXRhOm51bGwsd2lkdGg6dCxoZWlnaHQ6aSxiaXRtYXA6ci50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKSxpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlfX1hc3luYyBnZXRJbWFnZUJ5dGVzKGUse2RyYXdXaWR0aDp0LGRyYXdIZWlnaHQ6aSxmb3JjZVJHQkE6YT0hMSxmb3JjZVJHQjpyPSExLGludGVybmFsOnM9ITF9KXt0aGlzLmltYWdlLnJlc2V0KCk7dGhpcy5pbWFnZS5kcmF3V2lkdGg9dHx8dGhpcy53aWR0aDt0aGlzLmltYWdlLmRyYXdIZWlnaHQ9aXx8dGhpcy5oZWlnaHQ7dGhpcy5pbWFnZS5mb3JjZVJHQkE9ISFhO3RoaXMuaW1hZ2UuZm9yY2VSR0I9ISFyO2NvbnN0IG49YXdhaXQgdGhpcy5pbWFnZS5nZXRJbWFnZURhdGEoZSx0aGlzLmpweERlY29kZXJPcHRpb25zKTtpZihzfHx0aGlzLmltYWdlIGluc3RhbmNlb2YgRGVjb2RlU3RyZWFtKXJldHVybiBuO2Fzc2VydChuIGluc3RhbmNlb2YgVWludDhBcnJheSwnUERGSW1hZ2UuZ2V0SW1hZ2VCeXRlczogVW5zdXBwb3J0ZWQgImltYWdlQnl0ZXMiIHR5cGUuJyk7cmV0dXJuIG5ldyBVaW50OEFycmF5KG4pfX1jb25zdCB4cj1PYmplY3QuZnJlZXplKHttYXhJbWFnZVNpemU6LTEsZGlzYWJsZUZvbnRGYWNlOiExLGlnbm9yZUVycm9yczohMSxpc0V2YWxTdXBwb3J0ZWQ6ITAsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6ITEsY2FudmFzTWF4QXJlYUluQnl0ZXM6LTEsZm9udEV4dHJhUHJvcGVydGllczohMSx1c2VTeXN0ZW1Gb250czohMCxjTWFwVXJsOm51bGwsc3RhbmRhcmRGb250RGF0YVVybDpudWxsfSksVXI9MSxNcj0yLExyPVByb21pc2UucmVzb2x2ZSgpO2Z1bmN0aW9uIG5vcm1hbGl6ZUJsZW5kTW9kZShlLHQ9ITEpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9bm9ybWFsaXplQmxlbmRNb2RlKHQsITApO2lmKGUpcmV0dXJuIGV9d2FybihgVW5zdXBwb3J0ZWQgYmxlbmQgbW9kZSBBcnJheTogJHtlfWApO3JldHVybiJzb3VyY2Utb3ZlciJ9aWYoIShlIGluc3RhbmNlb2YgTmFtZSkpcmV0dXJuIHQ/bnVsbDoic291cmNlLW92ZXIiO3N3aXRjaChlLm5hbWUpe2Nhc2UiTm9ybWFsIjpjYXNlIkNvbXBhdGlibGUiOnJldHVybiJzb3VyY2Utb3ZlciI7Y2FzZSJNdWx0aXBseSI6cmV0dXJuIm11bHRpcGx5IjtjYXNlIlNjcmVlbiI6cmV0dXJuInNjcmVlbiI7Y2FzZSJPdmVybGF5IjpyZXR1cm4ib3ZlcmxheSI7Y2FzZSJEYXJrZW4iOnJldHVybiJkYXJrZW4iO2Nhc2UiTGlnaHRlbiI6cmV0dXJuImxpZ2h0ZW4iO2Nhc2UiQ29sb3JEb2RnZSI6cmV0dXJuImNvbG9yLWRvZGdlIjtjYXNlIkNvbG9yQnVybiI6cmV0dXJuImNvbG9yLWJ1cm4iO2Nhc2UiSGFyZExpZ2h0IjpyZXR1cm4iaGFyZC1saWdodCI7Y2FzZSJTb2Z0TGlnaHQiOnJldHVybiJzb2Z0LWxpZ2h0IjtjYXNlIkRpZmZlcmVuY2UiOnJldHVybiJkaWZmZXJlbmNlIjtjYXNlIkV4Y2x1c2lvbiI6cmV0dXJuImV4Y2x1c2lvbiI7Y2FzZSJIdWUiOnJldHVybiJodWUiO2Nhc2UiU2F0dXJhdGlvbiI6cmV0dXJuInNhdHVyYXRpb24iO2Nhc2UiQ29sb3IiOnJldHVybiJjb2xvciI7Y2FzZSJMdW1pbm9zaXR5IjpyZXR1cm4ibHVtaW5vc2l0eSJ9aWYodClyZXR1cm4gbnVsbDt3YXJuKGBVbnN1cHBvcnRlZCBibGVuZCBtb2RlOiAke2UubmFtZX1gKTtyZXR1cm4ic291cmNlLW92ZXIifWZ1bmN0aW9uIGFkZExvY2FsbHlDYWNoZWRJbWFnZU9wcyhlLHQpe3Qub2JqSWQmJmUuYWRkRGVwZW5kZW5jeSh0Lm9iaklkKTtlLmFkZEltYWdlT3BzKHQuZm4sdC5hcmdzLHQub3B0aW9uYWxDb250ZW50KTt0LmZuPT09X2UmJnQuYXJnc1swXT8uY291bnQ+MCYmdC5hcmdzWzBdLmNvdW50Kyt9Y2xhc3MgVGltZVNsb3RNYW5hZ2Vye3N0YXRpYyBUSU1FX1NMT1RfRFVSQVRJT05fTVM9MjA7c3RhdGljIENIRUNLX1RJTUVfRVZFUlk9MTAwO2NvbnN0cnVjdG9yKCl7dGhpcy5yZXNldCgpfWNoZWNrKCl7aWYoKyt0aGlzLmNoZWNrZWQ8VGltZVNsb3RNYW5hZ2VyLkNIRUNLX1RJTUVfRVZFUlkpcmV0dXJuITE7dGhpcy5jaGVja2VkPTA7cmV0dXJuIHRoaXMuZW5kVGltZTw9RGF0ZS5ub3coKX1yZXNldCgpe3RoaXMuZW5kVGltZT1EYXRlLm5vdygpK1RpbWVTbG90TWFuYWdlci5USU1FX1NMT1RfRFVSQVRJT05fTVM7dGhpcy5jaGVja2VkPTB9fWNsYXNzIFBhcnRpYWxFdmFsdWF0b3J7Y29uc3RydWN0b3Ioe3hyZWY6ZSxoYW5kbGVyOnQscGFnZUluZGV4OmksaWRGYWN0b3J5OmEsZm9udENhY2hlOnIsYnVpbHRJbkNNYXBDYWNoZTpzLHN0YW5kYXJkRm9udERhdGFDYWNoZTpuLGdsb2JhbEltYWdlQ2FjaGU6byxzeXN0ZW1Gb250Q2FjaGU6ZyxvcHRpb25zOmM9bnVsbH0pe3RoaXMueHJlZj1lO3RoaXMuaGFuZGxlcj10O3RoaXMucGFnZUluZGV4PWk7dGhpcy5pZEZhY3Rvcnk9YTt0aGlzLmZvbnRDYWNoZT1yO3RoaXMuYnVpbHRJbkNNYXBDYWNoZT1zO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPW47dGhpcy5nbG9iYWxJbWFnZUNhY2hlPW87dGhpcy5zeXN0ZW1Gb250Q2FjaGU9Zzt0aGlzLm9wdGlvbnM9Y3x8eHI7dGhpcy50eXBlM0ZvbnRSZWZzPW51bGw7dGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlPW5ldyBSZWdpb25hbEltYWdlQ2FjaGU7dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kPXRoaXMuZmV0Y2hCdWlsdEluQ01hcC5iaW5kKHRoaXMpO0ltYWdlUmVzaXplci5zZXRNYXhBcmVhKHRoaXMub3B0aW9ucy5jYW52YXNNYXhBcmVhSW5CeXRlcyl9Z2V0IF9wZGZGdW5jdGlvbkZhY3RvcnkoKXtyZXR1cm4gc2hhZG93KHRoaXMsIl9wZGZGdW5jdGlvbkZhY3RvcnkiLG5ldyBQREZGdW5jdGlvbkZhY3Rvcnkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLm9wdGlvbnMuaXNFdmFsU3VwcG9ydGVkfSkpfWdldCBwYXJzaW5nVHlwZTNGb250KCl7cmV0dXJuISF0aGlzLnR5cGUzRm9udFJlZnN9Y2xvbmUoZT1udWxsKXtjb25zdCB0PU9iamVjdC5jcmVhdGUodGhpcyk7dC5vcHRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnMsZSk7cmV0dXJuIHR9aGFzQmxlbmRNb2RlcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIERpY3QpKXJldHVybiExO2lmKGUub2JqSWQmJnQuaGFzKGUub2JqSWQpKXJldHVybiExO2NvbnN0IGk9bmV3IFJlZlNldCh0KTtlLm9iaklkJiZpLnB1dChlLm9iaklkKTtjb25zdCBhPVtlXSxyPXRoaXMueHJlZjtmb3IoO2EubGVuZ3RoOyl7Y29uc3QgZT1hLnNoaWZ0KCksdD1lLmdldCgiRXh0R1N0YXRlIik7aWYodCBpbnN0YW5jZW9mIERpY3QpZm9yKGxldCBlIG9mIHQuZ2V0UmF3VmFsdWVzKCkpe2lmKGUgaW5zdGFuY2VvZiBSZWYpe2lmKGkuaGFzKGUpKWNvbnRpbnVlO3RyeXtlPXIuZmV0Y2goZSl9Y2F0Y2godCl7aS5wdXQoZSk7aW5mbyhgaGFzQmxlbmRNb2RlcyAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7dH0iLmApO2NvbnRpbnVlfX1pZighKGUgaW5zdGFuY2VvZiBEaWN0KSljb250aW51ZTtlLm9iaklkJiZpLnB1dChlLm9iaklkKTtjb25zdCB0PWUuZ2V0KCJCTSIpO2lmKHQgaW5zdGFuY2VvZiBOYW1lKXtpZigiTm9ybWFsIiE9PXQubmFtZSlyZXR1cm4hMH1lbHNlIGlmKHZvaWQgMCE9PXQmJkFycmF5LmlzQXJyYXkodCkpZm9yKGNvbnN0IGUgb2YgdClpZihlIGluc3RhbmNlb2YgTmFtZSYmIk5vcm1hbCIhPT1lLm5hbWUpcmV0dXJuITB9Y29uc3Qgcz1lLmdldCgiWE9iamVjdCIpO2lmKHMgaW5zdGFuY2VvZiBEaWN0KWZvcihsZXQgZSBvZiBzLmdldFJhd1ZhbHVlcygpKXtpZihlIGluc3RhbmNlb2YgUmVmKXtpZihpLmhhcyhlKSljb250aW51ZTt0cnl7ZT1yLmZldGNoKGUpfWNhdGNoKHQpe2kucHV0KGUpO2luZm8oYGhhc0JsZW5kTW9kZXMgLSBpZ25vcmluZyBYT2JqZWN0OiAiJHt0fSIuYCk7Y29udGludWV9fWlmKCEoZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKWNvbnRpbnVlO2UuZGljdC5vYmpJZCYmaS5wdXQoZS5kaWN0Lm9iaklkKTtjb25zdCB0PWUuZGljdC5nZXQoIlJlc291cmNlcyIpO2lmKHQgaW5zdGFuY2VvZiBEaWN0JiYoIXQub2JqSWR8fCFpLmhhcyh0Lm9iaklkKSkpe2EucHVzaCh0KTt0Lm9iaklkJiZpLnB1dCh0Lm9iaklkKX19fWZvcihjb25zdCBlIG9mIGkpdC5wdXQoZSk7cmV0dXJuITF9YXN5bmMgZmV0Y2hCdWlsdEluQ01hcChlKXtjb25zdCB0PXRoaXMuYnVpbHRJbkNNYXBDYWNoZS5nZXQoZSk7aWYodClyZXR1cm4gdDtsZXQgaTtpZihudWxsIT09dGhpcy5vcHRpb25zLmNNYXBVcmwpe2NvbnN0IHQ9YCR7dGhpcy5vcHRpb25zLmNNYXBVcmx9JHtlfS5iY21hcGAsYT1hd2FpdCBmZXRjaCh0KTtpZighYS5vayl0aHJvdyBuZXcgRXJyb3IoYGZldGNoQnVpbHRJbkNNYXA6IGZhaWxlZCB0byBmZXRjaCBmaWxlICIke3R9IiB3aXRoICIke2Euc3RhdHVzVGV4dH0iLmApO2k9e2NNYXBEYXRhOm5ldyBVaW50OEFycmF5KGF3YWl0IGEuYXJyYXlCdWZmZXIoKSksY29tcHJlc3Npb25UeXBlOmJBLkJJTkFSWX19ZWxzZSBpPWF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkZldGNoQnVpbHRJbkNNYXAiLHtuYW1lOmV9KTtpLmNvbXByZXNzaW9uVHlwZSE9PWJBLk5PTkUmJnRoaXMuYnVpbHRJbkNNYXBDYWNoZS5zZXQoZSxpKTtyZXR1cm4gaX1hc3luYyBmZXRjaFN0YW5kYXJkRm9udERhdGEoZSl7Y29uc3QgdD10aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5nZXQoZSk7aWYodClyZXR1cm4gbmV3IFN0cmVhbSh0KTtpZih0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMmJiJTeW1ib2wiIT09ZSYmIlphcGZEaW5nYmF0cyIhPT1lKXJldHVybiBudWxsO2NvbnN0IGk9emkoKVtlXTtsZXQgYTtpZihudWxsIT09dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpe2NvbnN0IGU9YCR7dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmx9JHtpfWAsdD1hd2FpdCBmZXRjaChlKTt0Lm9rP2E9bmV3IFVpbnQ4QXJyYXkoYXdhaXQgdC5hcnJheUJ1ZmZlcigpKTp3YXJuKGBmZXRjaFN0YW5kYXJkRm9udERhdGE6IGZhaWxlZCB0byBmZXRjaCBmaWxlICIke2V9IiB3aXRoICIke3Quc3RhdHVzVGV4dH0iLmApfWVsc2UgdHJ5e2E9YXdhaXQgdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hTdGFuZGFyZEZvbnREYXRhIix7ZmlsZW5hbWU6aX0pfWNhdGNoKGUpe3dhcm4oYGZldGNoU3RhbmRhcmRGb250RGF0YTogZmFpbGVkIHRvIGZldGNoIGZpbGUgIiR7aX0iIHdpdGggIiR7ZX0iLmApfWlmKCFhKXJldHVybiBudWxsO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLnNldChlLGEpO3JldHVybiBuZXcgU3RyZWFtKGEpfWFzeW5jIGJ1aWxkRm9ybVhPYmplY3QoZSx0LGksYSxyLHMsbil7Y29uc3Qgbz10LmRpY3QsZz1sb29rdXBNYXRyaXgoby5nZXRBcnJheSgiTWF0cml4IiksbnVsbCksYz1sb29rdXBOb3JtYWxSZWN0KG8uZ2V0QXJyYXkoIkJCb3giKSxudWxsKTtsZXQgQyxoO28uaGFzKCJPQyIpJiYoQz1hd2FpdCB0aGlzLnBhcnNlTWFya2VkQ29udGVudFByb3BzKG8uZ2V0KCJPQyIpLGUpKTt2b2lkIDAhPT1DJiZhLmFkZE9wKFRlLFsiT0MiLENdKTtjb25zdCBsPW8uZ2V0KCJHcm91cCIpO2lmKGwpe2g9e21hdHJpeDpnLGJib3g6YyxzbWFzazppLGlzb2xhdGVkOiExLGtub2Nrb3V0OiExfTtsZXQgdD1udWxsO2lmKGlzTmFtZShsLmdldCgiUyIpLCJUcmFuc3BhcmVuY3kiKSl7aC5pc29sYXRlZD1sLmdldCgiSSIpfHwhMTtoLmtub2Nrb3V0PWwuZ2V0KCJLIil8fCExO2lmKGwuaGFzKCJDUyIpKXtjb25zdCBpPWwuZ2V0UmF3KCJDUyIpLGE9Q29sb3JTcGFjZS5nZXRDYWNoZWQoaSx0aGlzLnhyZWYsbik7dD1hfHxhd2FpdCB0aGlzLnBhcnNlQ29sb3JTcGFjZSh7Y3M6aSxyZXNvdXJjZXM6ZSxsb2NhbENvbG9yU3BhY2VDYWNoZTpufSl9fWlmKGk/LmJhY2tkcm9wKXt0fHw9Q29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYjtpLmJhY2tkcm9wPXQuZ2V0UmdiKGkuYmFja2Ryb3AsMCl9YS5hZGRPcChqZSxbaF0pfWNvbnN0IFE9bD9bZyxudWxsXTpbZyxjXTthLmFkZE9wKFBlLFEpO2F3YWl0IHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOnIscmVzb3VyY2VzOm8uZ2V0KCJSZXNvdXJjZXMiKXx8ZSxvcGVyYXRvckxpc3Q6YSxpbml0aWFsU3RhdGU6c30pO2EuYWRkT3AoV2UsW10pO2wmJmEuYWRkT3AoWGUsW2hdKTt2b2lkIDAhPT1DJiZhLmFkZE9wKEtlLFtdKX1fc2VuZEltZ0RhdGEoZSx0LGk9ITEpe2NvbnN0IGE9dD9bdC5iaXRtYXB8fHQuZGF0YS5idWZmZXJdOm51bGw7cmV0dXJuIHRoaXMucGFyc2luZ1R5cGUzRm9udHx8aT90aGlzLmhhbmRsZXIuc2VuZCgiY29tbW9ub2JqIixbZSwiSW1hZ2UiLHRdLGEpOnRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtlLHRoaXMucGFnZUluZGV4LCJJbWFnZSIsdF0sYSl9YXN5bmMgYnVpbGRQYWludEltYWdlWE9iamVjdCh7cmVzb3VyY2VzOmUsaW1hZ2U6dCxpc0lubGluZTppPSExLG9wZXJhdG9yTGlzdDphLGNhY2hlS2V5OnIsbG9jYWxJbWFnZUNhY2hlOnMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6bn0pe2NvbnN0IG89dC5kaWN0LGc9by5vYmpJZCxjPW8uZ2V0KCJXIiwiV2lkdGgiKSxDPW8uZ2V0KCJIIiwiSGVpZ2h0Iik7aWYoIWN8fCJudW1iZXIiIT10eXBlb2YgY3x8IUN8fCJudW1iZXIiIT10eXBlb2YgQyl7d2FybigiSW1hZ2UgZGltZW5zaW9ucyBhcmUgbWlzc2luZywgb3Igbm90IG51bWJlcnMuIik7cmV0dXJufWNvbnN0IGg9dGhpcy5vcHRpb25zLm1heEltYWdlU2l6ZTtpZigtMSE9PWgmJmMqQz5oKXtjb25zdCBlPSJJbWFnZSBleGNlZWRlZCBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBhbmQgd2FzIHJlbW92ZWQuIjtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXt3YXJuKGUpO3JldHVybn10aHJvdyBuZXcgRXJyb3IoZSl9bGV0IGw7by5oYXMoIk9DIikmJihsPWF3YWl0IHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoby5nZXQoIk9DIiksZSkpO2xldCBRLEU7aWYoby5nZXQoIklNIiwiSW1hZ2VNYXNrIil8fCExKXtjb25zdCBlPW8uZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKSxpPWMrNz4+MyxuPXQuZ2V0Qnl0ZXMoaSpDKSxoPW8uZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZih0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpe1E9UERGSW1hZ2UuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6bix3aWR0aDpjLGhlaWdodDpDLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnQgaW5zdGFuY2VvZiBEZWNvZGVTdHJlYW0saW52ZXJzZURlY29kZTpoPy5bMF0+MCxpbnRlcnBvbGF0ZTplfSk7US5jYWNoZWQ9ISFyO0U9W1FdO2EuYWRkSW1hZ2VPcHMoX2UsRSxsKTtpZihyKXtjb25zdCBlPXtmbjpfZSxhcmdzOkUsb3B0aW9uYWxDb250ZW50Omx9O3Muc2V0KHIsZyxlKTtnJiZ0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGUuc2V0KG51bGwsZyxlKX1yZXR1cm59UT1hd2FpdCBQREZJbWFnZS5jcmVhdGVNYXNrKHtpbWdBcnJheTpuLHdpZHRoOmMsaGVpZ2h0OkMsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06dCBpbnN0YW5jZW9mIERlY29kZVN0cmVhbSxpbnZlcnNlRGVjb2RlOmg/LlswXT4wLGludGVycG9sYXRlOmUsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dGhpcy5vcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfSk7aWYoUS5pc1NpbmdsZU9wYXF1ZVBpeGVsKXthLmFkZEltYWdlT3BzKGF0LFtdLGwpO2lmKHIpe2NvbnN0IGU9e2ZuOmF0LGFyZ3M6W10sb3B0aW9uYWxDb250ZW50Omx9O3Muc2V0KHIsZyxlKTtnJiZ0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGUuc2V0KG51bGwsZyxlKX1yZXR1cm59Y29uc3QgdT1gbWFza18ke3RoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCl9YDthLmFkZERlcGVuZGVuY3kodSk7US5kYXRhTGVuPVEuYml0bWFwP1Eud2lkdGgqUS5oZWlnaHQqNDpRLmRhdGEubGVuZ3RoO3RoaXMuX3NlbmRJbWdEYXRhKHUsUSk7RT1be2RhdGE6dSx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodCxpbnRlcnBvbGF0ZTpRLmludGVycG9sYXRlLGNvdW50OjF9XTthLmFkZEltYWdlT3BzKF9lLEUsbCk7aWYocil7Y29uc3QgZT17b2JqSWQ6dSxmbjpfZSxhcmdzOkUsb3B0aW9uYWxDb250ZW50Omx9O3Muc2V0KHIsZyxlKTtnJiZ0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGUuc2V0KG51bGwsZyxlKX1yZXR1cm59aWYoaSYmYytDPDIwMCYmIW8uaGFzKCJTTWFzayIpJiYhby5oYXMoIk1hc2siKSl7dHJ5e2NvbnN0IHI9bmV3IFBERkltYWdlKHt4cmVmOnRoaXMueHJlZixyZXM6ZSxpbWFnZTp0LGlzSW5saW5lOmkscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxsb2NhbENvbG9yU3BhY2VDYWNoZTpufSk7UT1hd2FpdCByLmNyZWF0ZUltYWdlRGF0YSghMCwhMSk7YS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD10aGlzLm9wdGlvbnMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ7YS5hZGRJbWFnZU9wcyhBdCxbUV0sbCl9Y2F0Y2goZSl7Y29uc3QgdD1gVW5hYmxlIHRvIGRlY29kZSBpbmxpbmUgaW1hZ2U6ICIke2V9Ii5gO2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IG5ldyBFcnJvcih0KTt3YXJuKHQpfXJldHVybn1sZXQgdT1gaW1nXyR7dGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKX1gLGQ9ITE7aWYodGhpcy5wYXJzaW5nVHlwZTNGb250KXU9YCR7dGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKX1fdHlwZTNfJHt1fWA7ZWxzZSBpZihyJiZnKXtkPXRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zaG91bGRDYWNoZShnLHRoaXMucGFnZUluZGV4KTtpZihkKXthc3NlcnQoIWksIkNhbm5vdCBjYWNoZSBhbiBpbmxpbmUgaW1hZ2UgZ2xvYmFsbHkuIik7dT1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV8ke3V9YH19YS5hZGREZXBlbmRlbmN5KHUpO0U9W3UsYyxDXTthLmFkZEltYWdlT3BzKCRlLEUsbCk7aWYoZCl7aWYodGhpcy5nbG9iYWxJbWFnZUNhY2hlLmhhc0RlY29kZUZhaWxlZChnKSl7dGhpcy5nbG9iYWxJbWFnZUNhY2hlLnNldERhdGEoZyx7b2JqSWQ6dSxmbjokZSxhcmdzOkUsb3B0aW9uYWxDb250ZW50OmwsYnl0ZVNpemU6MH0pO3RoaXMuX3NlbmRJbWdEYXRhKHUsbnVsbCxkKTtyZXR1cm59aWYoYypDPjI1ZTR8fG8uaGFzKCJTTWFzayIpfHxvLmhhcygiTWFzayIpKXtjb25zdCBlPWF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoImNvbW1vbm9iaiIsW3UsIkNvcHlMb2NhbEltYWdlIix7aW1hZ2VSZWY6Z31dKTtpZihlKXt0aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YShnLHtvYmpJZDp1LGZuOiRlLGFyZ3M6RSxvcHRpb25hbENvbnRlbnQ6bCxieXRlU2l6ZTowfSk7dGhpcy5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGcsZSk7cmV0dXJufX19UERGSW1hZ2UuYnVpbGRJbWFnZSh7eHJlZjp0aGlzLnhyZWYscmVzOmUsaW1hZ2U6dCxpc0lubGluZTppLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksbG9jYWxDb2xvclNwYWNlQ2FjaGU6bn0pLnRoZW4oKGFzeW5jIGU9PntRPWF3YWl0IGUuY3JlYXRlSW1hZ2VEYXRhKCExLHRoaXMub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCk7US5kYXRhTGVuPVEuYml0bWFwP1Eud2lkdGgqUS5oZWlnaHQqNDpRLmRhdGEubGVuZ3RoO1EucmVmPWc7ZCYmdGhpcy5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGcsUS5kYXRhTGVuKTtyZXR1cm4gdGhpcy5fc2VuZEltZ0RhdGEodSxRLGQpfSkpLmNhdGNoKChlPT57d2FybihgVW5hYmxlIHRvIGRlY29kZSBpbWFnZSAiJHt1fSI6ICIke2V9Ii5gKTtnJiZ0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkRGVjb2RlRmFpbGVkKGcpO3JldHVybiB0aGlzLl9zZW5kSW1nRGF0YSh1LG51bGwsZCl9KSk7aWYocil7Y29uc3QgZT17b2JqSWQ6dSxmbjokZSxhcmdzOkUsb3B0aW9uYWxDb250ZW50Omx9O3Muc2V0KHIsZyxlKTtpZihnKXt0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGUuc2V0KG51bGwsZyxlKTtkJiZ0aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YShnLHtvYmpJZDp1LGZuOiRlLGFyZ3M6RSxvcHRpb25hbENvbnRlbnQ6bCxieXRlU2l6ZTowfSl9fX1oYW5kbGVTTWFzayhlLHQsaSxhLHIscyl7Y29uc3Qgbj1lLmdldCgiRyIpLG89e3N1YnR5cGU6ZS5nZXQoIlMiKS5uYW1lLGJhY2tkcm9wOmUuZ2V0KCJCQyIpfSxnPWUuZ2V0KCJUUiIpO2lmKGlzUERGRnVuY3Rpb24oZykpe2NvbnN0IGU9dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZShnKSx0PW5ldyBVaW50OEFycmF5KDI1NiksaT1uZXcgRmxvYXQzMkFycmF5KDEpO2ZvcihsZXQgYT0wO2E8MjU2O2ErKyl7aVswXT1hLzI1NTtlKGksMCxpLDApO3RbYV09MjU1KmlbMF18MH1vLnRyYW5zZmVyTWFwPXR9cmV0dXJuIHRoaXMuYnVpbGRGb3JtWE9iamVjdCh0LG4sbyxpLGEsci5zdGF0ZS5jbG9uZSgpLHMpfWhhbmRsZVRyYW5zZmVyRnVuY3Rpb24oZSl7bGV0IHQ7aWYoQXJyYXkuaXNBcnJheShlKSl0PWU7ZWxzZXtpZighaXNQREZGdW5jdGlvbihlKSlyZXR1cm4gbnVsbDt0PVtlXX1jb25zdCBpPVtdO2xldCBhPTAscj0wO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9dGhpcy54cmVmLmZldGNoSWZSZWYoZSk7YSsrO2lmKGlzTmFtZSh0LCJJZGVudGl0eSIpKXtpLnB1c2gobnVsbCk7Y29udGludWV9aWYoIWlzUERGRnVuY3Rpb24odCkpcmV0dXJuIG51bGw7Y29uc3Qgcz10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHQpLG49bmV3IFVpbnQ4QXJyYXkoMjU2KSxvPW5ldyBGbG9hdDMyQXJyYXkoMSk7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKXtvWzBdPWUvMjU1O3MobywwLG8sMCk7bltlXT0yNTUqb1swXXwwfWkucHVzaChuKTtyKyt9cmV0dXJuIDEhPT1hJiY0IT09YXx8MD09PXI/bnVsbDppfWhhbmRsZVRpbGluZ1R5cGUoZSx0LGksYSxyLHMsbixvKXtjb25zdCBnPW5ldyBPcGVyYXRvckxpc3QsYz1EaWN0Lm1lcmdlKHt4cmVmOnRoaXMueHJlZixkaWN0QXJyYXk6W3IuZ2V0KCJSZXNvdXJjZXMiKSxpXX0pO3JldHVybiB0aGlzLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmEsdGFzazpuLHJlc291cmNlczpjLG9wZXJhdG9yTGlzdDpnfSkudGhlbigoZnVuY3Rpb24oKXtjb25zdCBpPWcuZ2V0SVIoKSxhPWdldFRpbGluZ1BhdHRlcm5JUihpLHIsdCk7cy5hZGREZXBlbmRlbmNpZXMoZy5kZXBlbmRlbmNpZXMpO3MuYWRkT3AoZSxhKTtyLm9iaklkJiZvLnNldChudWxsLHIub2JqSWQse29wZXJhdG9yTGlzdElSOmksZGljdDpyfSl9KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbikpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7d2FybihgaGFuZGxlVGlsaW5nVHlwZSAtIGlnbm9yaW5nIHBhdHRlcm46ICIke2V9Ii5gKX19KSl9YXN5bmMgaGFuZGxlU2V0Rm9udChlLHQsaSxhLHIscyxuPW51bGwsbz1udWxsKXtjb25zdCBnPXQ/LlswXWluc3RhbmNlb2YgTmFtZT90WzBdLm5hbWU6bnVsbDtsZXQgYz1hd2FpdCB0aGlzLmxvYWRGb250KGcsaSxlLG4sbyk7aWYoYy5mb250LmlzVHlwZTNGb250KXRyeXthd2FpdCBjLmxvYWRUeXBlM0RhdGEodGhpcyxlLHIpO2EuYWRkRGVwZW5kZW5jaWVzKGMudHlwZTNEZXBlbmRlbmNpZXMpfWNhdGNoKGUpe2M9bmV3IFRyYW5zbGF0ZWRGb250KHtsb2FkZWROYW1lOiJnX2ZvbnRfZXJyb3IiLGZvbnQ6bmV3IEVycm9yRm9udChgVHlwZTMgZm9udCBsb2FkIGVycm9yOiAke2V9YCksZGljdDpjLmZvbnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KX1zLmZvbnQ9Yy5mb250O2Muc2VuZCh0aGlzLmhhbmRsZXIpO3JldHVybiBjLmxvYWRlZE5hbWV9aGFuZGxlVGV4dChlLHQpe2NvbnN0IGk9dC5mb250LGE9aS5jaGFyc1RvR2x5cGhzKGUpO2lmKGkuZGF0YSl7KCEhKHQudGV4dFJlbmRlcmluZ01vZGUmRCl8fCJQYXR0ZXJuIj09PXQuZmlsbENvbG9yU3BhY2UubmFtZXx8aS5kaXNhYmxlRm9udEZhY2V8fHRoaXMub3B0aW9ucy5kaXNhYmxlRm9udEZhY2UpJiZQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKGksYSx0aGlzLmhhbmRsZXIsdGhpcy5vcHRpb25zKX1yZXR1cm4gYX1lbnN1cmVTdGF0ZUZvbnQoZSl7aWYoZS5mb250KXJldHVybjtjb25zdCB0PW5ldyBGb3JtYXRFcnJvcigiTWlzc2luZyBzZXRGb250IChUZikgb3BlcmF0b3IgYmVmb3JlIHRleHQgcmVuZGVyaW5nIG9wZXJhdG9yLiIpO2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IHQ7d2FybihgZW5zdXJlU3RhdGVGb250OiAiJHt0fSIuYCl9YXN5bmMgc2V0R1N0YXRlKHtyZXNvdXJjZXM6ZSxnU3RhdGU6dCxvcGVyYXRvckxpc3Q6aSxjYWNoZUtleTphLHRhc2s6cixzdGF0ZU1hbmFnZXI6cyxsb2NhbEdTdGF0ZUNhY2hlOm4sbG9jYWxDb2xvclNwYWNlQ2FjaGU6b30pe2NvbnN0IGc9dC5vYmpJZDtsZXQgYz0hMDtjb25zdCBDPVtdO2xldCBoPVByb21pc2UucmVzb2x2ZSgpO2Zvcihjb25zdCBhIG9mIHQuZ2V0S2V5cygpKXtjb25zdCBuPXQuZ2V0KGEpO3N3aXRjaChhKXtjYXNlIlR5cGUiOmJyZWFrO2Nhc2UiTFciOmNhc2UiTEMiOmNhc2UiTEoiOmNhc2UiTUwiOmNhc2UiRCI6Y2FzZSJSSSI6Y2FzZSJGTCI6Y2FzZSJDQSI6Y2FzZSJjYSI6Qy5wdXNoKFthLG5dKTticmVhaztjYXNlIkZvbnQiOmM9ITE7aD1oLnRoZW4oKCgpPT50aGlzLmhhbmRsZVNldEZvbnQoZSxudWxsLG5bMF0saSxyLHMuc3RhdGUpLnRoZW4oKGZ1bmN0aW9uKGUpe2kuYWRkRGVwZW5kZW5jeShlKTtDLnB1c2goW2EsW2UsblsxXV1dKX0pKSkpO2JyZWFrO2Nhc2UiQk0iOkMucHVzaChbYSxub3JtYWxpemVCbGVuZE1vZGUobildKTticmVhaztjYXNlIlNNYXNrIjppZihpc05hbWUobiwiTm9uZSIpKXtDLnB1c2goW2EsITFdKTticmVha31pZihuIGluc3RhbmNlb2YgRGljdCl7Yz0hMTtoPWgudGhlbigoKCk9PnRoaXMuaGFuZGxlU01hc2sobixlLGkscixzLG8pKSk7Qy5wdXNoKFthLCEwXSl9ZWxzZSB3YXJuKCJVbnN1cHBvcnRlZCBTTWFzayB0eXBlIik7YnJlYWs7Y2FzZSJUUiI6Y29uc3QgdD10aGlzLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24obik7Qy5wdXNoKFthLHRdKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6aW5mbygiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK2EpO2JyZWFrO2RlZmF1bHQ6aW5mbygiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrYSl9fWF3YWl0IGg7Qy5sZW5ndGg+MCYmaS5hZGRPcChVQSxbQ10pO2MmJm4uc2V0KGEsZyxDKX1sb2FkRm9udChlLHQsaSxhPW51bGwscj1udWxsKXtjb25zdCBlcnJvckZvbnQ9YXN5bmMoKT0+bmV3IFRyYW5zbGF0ZWRGb250KHtsb2FkZWROYW1lOiJnX2ZvbnRfZXJyb3IiLGZvbnQ6bmV3IEVycm9yRm9udChgRm9udCAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZS5gKSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KTtsZXQgcztpZih0KXQgaW5zdGFuY2VvZiBSZWYmJihzPXQpO2Vsc2V7Y29uc3QgdD1pLmdldCgiRm9udCIpO3QmJihzPXQuZ2V0UmF3KGUpKX1pZihzKXtpZih0aGlzLnR5cGUzRm9udFJlZnM/LmhhcyhzKSlyZXR1cm4gZXJyb3JGb250KCk7aWYodGhpcy5mb250Q2FjaGUuaGFzKHMpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQocyk7dHJ5e3Q9dGhpcy54cmVmLmZldGNoSWZSZWYocyl9Y2F0Y2goZSl7d2FybihgbG9hZEZvbnQgLSBsb29rdXAgZmFpbGVkOiAiJHtlfSIuYCl9fWlmKCEodCBpbnN0YW5jZW9mIERpY3QpKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyYmIXRoaXMucGFyc2luZ1R5cGUzRm9udCl7d2FybihgRm9udCAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZS5gKTtyZXR1cm4gZXJyb3JGb250KCl9d2FybihgRm9udCAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZSAtLSBhdHRlbXB0aW5nIHRvIGZhbGxiYWNrIHRvIGEgZGVmYXVsdCBmb250LmApO3Q9YXx8UGFydGlhbEV2YWx1YXRvci5mYWxsYmFja0ZvbnREaWN0fWlmKHQuY2FjaGVLZXkmJnRoaXMuZm9udENhY2hlLmhhcyh0LmNhY2hlS2V5KSlyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KHQuY2FjaGVLZXkpO2NvbnN0e3Byb21pc2U6bixyZXNvbHZlOm99PVByb21pc2Uud2l0aFJlc29sdmVycygpO2xldCBnO3RyeXtnPXRoaXMucHJlRXZhbHVhdGVGb250KHQpO2cuY3NzRm9udEluZm89cn1jYXRjaChlKXt3YXJuKGBsb2FkRm9udCAtIHByZUV2YWx1YXRlRm9udCBmYWlsZWQ6ICIke2V9Ii5gKTtyZXR1cm4gZXJyb3JGb250KCl9Y29uc3R7ZGVzY3JpcHRvcjpjLGhhc2g6Q309ZyxoPXMgaW5zdGFuY2VvZiBSZWY7bGV0IGw7aWYoQyYmYyBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGU9Yy5mb250QWxpYXNlc3x8PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZVtDXSl7Y29uc3QgdD1lW0NdLmFsaWFzUmVmO2lmKGgmJnQmJnRoaXMuZm9udENhY2hlLmhhcyh0KSl7dGhpcy5mb250Q2FjaGUucHV0QWxpYXMocyx0KTtyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KHMpfX1lbHNlIGVbQ109e2ZvbnRJRDp0aGlzLmlkRmFjdG9yeS5jcmVhdGVGb250SWQoKX07aCYmKGVbQ10uYWxpYXNSZWY9cyk7bD1lW0NdLmZvbnRJRH1lbHNlIGw9dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCk7YXNzZXJ0KGw/LnN0YXJ0c1dpdGgoImYiKSwnVGhlICJmb250SUQiIG11c3QgYmUgKGNvcnJlY3RseSkgZGVmaW5lZC4nKTtpZihoKXRoaXMuZm9udENhY2hlLnB1dChzLG4pO2Vsc2V7dC5jYWNoZUtleT1gY2FjaGVLZXlfJHtsfWA7dGhpcy5mb250Q2FjaGUucHV0KHQuY2FjaGVLZXksbil9dC5sb2FkZWROYW1lPWAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7bH1gO3RoaXMudHJhbnNsYXRlRm9udChnKS50aGVuKChlPT57byhuZXcgVHJhbnNsYXRlZEZvbnQoe2xvYWRlZE5hbWU6dC5sb2FkZWROYW1lLGZvbnQ6ZSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSl9KSkuY2F0Y2goKGU9Pnt3YXJuKGBsb2FkRm9udCAtIHRyYW5zbGF0ZUZvbnQgZmFpbGVkOiAiJHtlfSIuYCk7byhuZXcgVHJhbnNsYXRlZEZvbnQoe2xvYWRlZE5hbWU6dC5sb2FkZWROYW1lLGZvbnQ6bmV3IEVycm9yRm9udChlIGluc3RhbmNlb2YgRXJyb3I/ZS5tZXNzYWdlOmUpLGRpY3Q6dCxldmFsdWF0b3JPcHRpb25zOnRoaXMub3B0aW9uc30pKX0pKTtyZXR1cm4gbn1idWlsZFBhdGgoZSx0LGksYT0hMSl7Y29uc3Qgcj1lLmxlbmd0aC0xO2l8fChpPVtdKTtpZihyPDB8fGUuZm5BcnJheVtyXSE9PXJ0KXtpZihhKXt3YXJuKGBFbmNvdW50ZXJlZCBwYXRoIG9wZXJhdG9yICIke3R9IiBpbnNpZGUgb2YgYSB0ZXh0IG9iamVjdC5gKTtlLmFkZE9wKE1BLG51bGwpfWxldCByO3N3aXRjaCh0KXtjYXNlIE9BOmNvbnN0IGU9aVswXStpWzJdLHQ9aVsxXStpWzNdO3I9W01hdGgubWluKGlbMF0sZSksTWF0aC5taW4oaVsxXSx0KSxNYXRoLm1heChpWzBdLGUpLE1hdGgubWF4KGlbMV0sdCldO2JyZWFrO2Nhc2UgSkE6Y2FzZSB2QTpyPVtpWzBdLGlbMV0saVswXSxpWzFdXTticmVhaztkZWZhdWx0OnI9WzEvMCwxLzAsLTEvMCwtMS8wXX1lLmFkZE9wKHJ0LFtbdF0saSxyXSk7YSYmZS5hZGRPcChMQSxudWxsKX1lbHNle2NvbnN0IGE9ZS5hcmdzQXJyYXlbcl07YVswXS5wdXNoKHQpO2FbMV0ucHVzaCguLi5pKTtjb25zdCBzPWFbMl07c3dpdGNoKHQpe2Nhc2UgT0E6Y29uc3QgZT1pWzBdK2lbMl0sdD1pWzFdK2lbM107c1swXT1NYXRoLm1pbihzWzBdLGlbMF0sZSk7c1sxXT1NYXRoLm1pbihzWzFdLGlbMV0sdCk7c1syXT1NYXRoLm1heChzWzJdLGlbMF0sZSk7c1szXT1NYXRoLm1heChzWzNdLGlbMV0sdCk7YnJlYWs7Y2FzZSBKQTpjYXNlIHZBOnNbMF09TWF0aC5taW4oc1swXSxpWzBdKTtzWzFdPU1hdGgubWluKHNbMV0saVsxXSk7c1syXT1NYXRoLm1heChzWzJdLGlbMF0pO3NbM109TWF0aC5tYXgoc1szXSxpWzFdKX19fXBhcnNlQ29sb3JTcGFjZSh7Y3M6ZSxyZXNvdXJjZXM6dCxsb2NhbENvbG9yU3BhY2VDYWNoZTppfSl7cmV0dXJuIENvbG9yU3BhY2UucGFyc2VBc3luYyh7Y3M6ZSx4cmVmOnRoaXMueHJlZixyZXNvdXJjZXM6dCxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOml9KS5jYXRjaCgoZT0+e2lmKGUgaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbilyZXR1cm4gbnVsbDtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXt3YXJuKGBwYXJzZUNvbG9yU3BhY2UgLSBpZ25vcmluZyBDb2xvclNwYWNlOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9dGhyb3cgZX0pKX1wYXJzZVNoYWRpbmcoe3NoYWRpbmc6ZSxyZXNvdXJjZXM6dCxsb2NhbENvbG9yU3BhY2VDYWNoZTppLGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTphfSl7bGV0IHIscz1hLmdldChlKTtpZihzKXJldHVybiBzO3RyeXtyPVBhdHRlcm4ucGFyc2VTaGFkaW5nKGUsdGhpcy54cmVmLHQsdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGkpLmdldElSKCl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKXJldHVybiBudWxsO2lmKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpe3dhcm4oYHBhcnNlU2hhZGluZyAtIGlnbm9yaW5nIHNoYWRpbmc6ICIke3R9Ii5gKTthLnNldChlLG51bGwpO3JldHVybiBudWxsfXRocm93IHR9cz1gcGF0dGVybl8ke3RoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCl9YDt0aGlzLnBhcnNpbmdUeXBlM0ZvbnQmJihzPWAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9X3R5cGUzXyR7c31gKTthLnNldChlLHMpO3RoaXMucGFyc2luZ1R5cGUzRm9udD90aGlzLmhhbmRsZXIuc2VuZCgiY29tbW9ub2JqIixbcywiUGF0dGVybiIscl0pOnRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtzLHRoaXMucGFnZUluZGV4LCJQYXR0ZXJuIixyXSk7cmV0dXJuIHN9aGFuZGxlQ29sb3JOKGUsdCxpLGEscixzLG4sbyxnLGMpe2NvbnN0IEM9aS5wb3AoKTtpZihDIGluc3RhbmNlb2YgTmFtZSl7Y29uc3QgaD1yLmdldFJhdyhDLm5hbWUpLGw9aCBpbnN0YW5jZW9mIFJlZiYmZy5nZXRCeVJlZihoKTtpZihsKXRyeXtjb25zdCByPWEuYmFzZT9hLmJhc2UuZ2V0UmdiKGksMCk6bnVsbCxzPWdldFRpbGluZ1BhdHRlcm5JUihsLm9wZXJhdG9yTGlzdElSLGwuZGljdCxyKTtlLmFkZE9wKHQscyk7cmV0dXJufWNhdGNoe31jb25zdCBRPXRoaXMueHJlZi5mZXRjaElmUmVmKGgpO2lmKFEpe2NvbnN0IHI9USBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/US5kaWN0OlEsQz1yLmdldCgiUGF0dGVyblR5cGUiKTtpZihDPT09VXIpe2NvbnN0IG89YS5iYXNlP2EuYmFzZS5nZXRSZ2IoaSwwKTpudWxsO3JldHVybiB0aGlzLmhhbmRsZVRpbGluZ1R5cGUodCxvLHMsUSxyLGUsbixnKX1pZihDPT09TXIpe2NvbnN0IGk9ci5nZXQoIlNoYWRpbmciKSxhPXRoaXMucGFyc2VTaGFkaW5nKHtzaGFkaW5nOmkscmVzb3VyY2VzOnMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6byxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6Y30pO2lmKGEpe2NvbnN0IGk9bG9va3VwTWF0cml4KHIuZ2V0QXJyYXkoIk1hdHJpeCIpLG51bGwpO2UuYWRkT3AodCxbIlNoYWRpbmciLGEsaV0pfXJldHVybn10aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVua25vd24gUGF0dGVyblR5cGU6ICR7Q31gKX19dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBVbmtub3duIFBhdHRlcm5OYW1lOiAke0N9YCl9X3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24oZSx0LGkpe2lmKCsrdD4xMCl7d2FybigiVmlzaWJpbGl0eSBleHByZXNzaW9uIGlzIHRvbyBkZWVwbHkgbmVzdGVkIik7cmV0dXJufWNvbnN0IGE9ZS5sZW5ndGgscj10aGlzLnhyZWYuZmV0Y2hJZlJlZihlWzBdKTtpZighKGE8MikmJnIgaW5zdGFuY2VvZiBOYW1lKXtzd2l0Y2goci5uYW1lKXtjYXNlIkFuZCI6Y2FzZSJPciI6Y2FzZSJOb3QiOmkucHVzaChyLm5hbWUpO2JyZWFrO2RlZmF1bHQ6d2FybihgSW52YWxpZCBvcGVyYXRvciAke3IubmFtZX0gaW4gdmlzaWJpbGl0eSBleHByZXNzaW9uYCk7cmV0dXJufWZvcihsZXQgcj0xO3I8YTtyKyspe2NvbnN0IGE9ZVtyXSxzPXRoaXMueHJlZi5mZXRjaElmUmVmKGEpO2lmKEFycmF5LmlzQXJyYXkocykpe2NvbnN0IGU9W107aS5wdXNoKGUpO3RoaXMuX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24ocyx0LGUpfWVsc2UgYSBpbnN0YW5jZW9mIFJlZiYmaS5wdXNoKGEudG9TdHJpbmcoKSl9fWVsc2Ugd2FybigiSW52YWxpZCB2aXNpYmlsaXR5IGV4cHJlc3Npb24iKX1hc3luYyBwYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhlLHQpe2xldCBpO2lmKGUgaW5zdGFuY2VvZiBOYW1lKXtpPXQuZ2V0KCJQcm9wZXJ0aWVzIikuZ2V0KGUubmFtZSl9ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBEaWN0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk9wdGlvbmFsIGNvbnRlbnQgcHJvcGVydGllcyBtYWxmb3JtZWQuIik7aT1lfWNvbnN0IGE9aS5nZXQoIlR5cGUiKT8ubmFtZTtpZigiT0NHIj09PWEpcmV0dXJue3R5cGU6YSxpZDppLm9iaklkfTtpZigiT0NNRCI9PT1hKXtjb25zdCBlPWkuZ2V0KCJWRSIpO2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHQ9W107dGhpcy5fcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihlLDAsdCk7aWYodC5sZW5ndGg+MClyZXR1cm57dHlwZToiT0NNRCIsZXhwcmVzc2lvbjp0fX1jb25zdCB0PWkuZ2V0KCJPQ0dzIik7aWYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGU9W107aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IoY29uc3QgaSBvZiB0KWUucHVzaChpLnRvU3RyaW5nKCkpO2Vsc2UgZS5wdXNoKHQub2JqSWQpO3JldHVybnt0eXBlOmEsaWRzOmUscG9saWN5OmkuZ2V0KCJQIilpbnN0YW5jZW9mIE5hbWU/aS5nZXQoIlAiKS5uYW1lOm51bGwsZXhwcmVzc2lvbjpudWxsfX1pZih0IGluc3RhbmNlb2YgUmVmKXJldHVybnt0eXBlOmEsaWQ6dC50b1N0cmluZygpfX1yZXR1cm4gbnVsbH1nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTplLHRhc2s6dCxyZXNvdXJjZXM6aSxvcGVyYXRvckxpc3Q6YSxpbml0aWFsU3RhdGU6cj1udWxsLGZhbGxiYWNrRm9udERpY3Q6cz1udWxsfSl7aXx8PURpY3QuZW1wdHk7cnx8PW5ldyBFdmFsU3RhdGU7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCdnZXRPcGVyYXRvckxpc3Q6IG1pc3NpbmcgIm9wZXJhdG9yTGlzdCIgcGFyYW1ldGVyJyk7Y29uc3Qgbj10aGlzLG89dGhpcy54cmVmO2xldCBnPSExO2NvbnN0IGM9bmV3IExvY2FsSW1hZ2VDYWNoZSxDPW5ldyBMb2NhbENvbG9yU3BhY2VDYWNoZSxoPW5ldyBMb2NhbEdTdGF0ZUNhY2hlLGw9bmV3IExvY2FsVGlsaW5nUGF0dGVybkNhY2hlLFE9bmV3IE1hcCxFPWkuZ2V0KCJYT2JqZWN0Iil8fERpY3QuZW1wdHksdT1pLmdldCgiUGF0dGVybiIpfHxEaWN0LmVtcHR5LGQ9bmV3IFN0YXRlTWFuYWdlcihyKSxmPW5ldyBFdmFsdWF0b3JQcmVwcm9jZXNzb3IoZSxvLGQpLHA9bmV3IFRpbWVTbG90TWFuYWdlcjtmdW5jdGlvbiBjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKGUpe2ZvcihsZXQgZT0wLHQ9Zi5zYXZlZFN0YXRlc0RlcHRoO2U8dDtlKyspYS5hZGRPcChMQSxbXSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbiBwcm9taXNlQm9keShlLHIpe2NvbnN0IG5leHQ9ZnVuY3Rpb24odCl7UHJvbWlzZS5hbGwoW3QsYS5yZWFkeV0pLnRoZW4oKGZ1bmN0aW9uKCl7dHJ5e3Byb21pc2VCb2R5KGUscil9Y2F0Y2goZSl7cihlKX19KSxyKX07dC5lbnN1cmVOb3RUZXJtaW5hdGVkKCk7cC5yZXNldCgpO2NvbnN0IG09e307bGV0IHksdyxiLEQsUyxrO2Zvcig7ISh5PXAuY2hlY2soKSk7KXttLmFyZ3M9bnVsbDtpZighZi5yZWFkKG0pKWJyZWFrO2xldCBlPW0uYXJncyxyPW0uZm47c3dpdGNoKDB8cil7Y2FzZSBIZTprPWVbMF1pbnN0YW5jZW9mIE5hbWU7Uz1lWzBdLm5hbWU7aWYoayl7Y29uc3QgdD1jLmdldEJ5TmFtZShTKTtpZih0KXthZGRMb2NhbGx5Q2FjaGVkSW1hZ2VPcHMoYSx0KTtlPW51bGw7Y29udGludWV9fW5leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscil7aWYoIWspdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTtsZXQgcz1FLmdldFJhdyhTKTtpZihzIGluc3RhbmNlb2YgUmVmKXtjb25zdCB0PWMuZ2V0QnlSZWYocyl8fG4uX3JlZ2lvbmFsSW1hZ2VDYWNoZS5nZXRCeVJlZihzKTtpZih0KXthZGRMb2NhbGx5Q2FjaGVkSW1hZ2VPcHMoYSx0KTtlKCk7cmV0dXJufWNvbnN0IGk9bi5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEocyxuLnBhZ2VJbmRleCk7aWYoaSl7YS5hZGREZXBlbmRlbmN5KGkub2JqSWQpO2EuYWRkSW1hZ2VPcHMoaS5mbixpLmFyZ3MsaS5vcHRpb25hbENvbnRlbnQpO2UoKTtyZXR1cm59cz1vLmZldGNoKHMpfWlmKCEocyBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKXRocm93IG5ldyBGb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW0iKTtjb25zdCBnPXMuZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKGcgaW5zdGFuY2VvZiBOYW1lKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTtpZigiRm9ybSIhPT1nLm5hbWUpaWYoIkltYWdlIiE9PWcubmFtZSl7aWYoIlBTIiE9PWcubmFtZSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVuaGFuZGxlZCBYT2JqZWN0IHN1YnR5cGUgJHtnLm5hbWV9YCk7aW5mbygiSWdub3JlZCBYT2JqZWN0IHN1YnR5cGUgUFMiKTtlKCl9ZWxzZSBuLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe3Jlc291cmNlczppLGltYWdlOnMsb3BlcmF0b3JMaXN0OmEsY2FjaGVLZXk6Uyxsb2NhbEltYWdlQ2FjaGU6Yyxsb2NhbENvbG9yU3BhY2VDYWNoZTpDfSkudGhlbihlLHIpO2Vsc2V7ZC5zYXZlKCk7bi5idWlsZEZvcm1YT2JqZWN0KGkscyxudWxsLGEsdCxkLnN0YXRlLmNsb25lKCksQykudGhlbigoZnVuY3Rpb24oKXtkLnJlc3RvcmUoKTtlKCl9KSxyKX19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSl7aWYoIW4ub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBYT2JqZWN0OiAiJHtlfSIuYCl9fSkpKTtyZXR1cm47Y2FzZSBvZTp2YXIgUj1lWzFdO25leHQobi5oYW5kbGVTZXRGb250KGksZSxudWxsLGEsdCxkLnN0YXRlLHMpLnRoZW4oKGZ1bmN0aW9uKGUpe2EuYWRkRGVwZW5kZW5jeShlKTthLmFkZE9wKG9lLFtlLFJdKX0pKSk7cmV0dXJuO2Nhc2UgdGU6Zz0hMDticmVhaztjYXNlIGllOmc9ITE7YnJlYWs7Y2FzZSBMZTp2YXIgTj1lWzBdLmNhY2hlS2V5O2lmKE4pe2NvbnN0IHQ9Yy5nZXRCeU5hbWUoTik7aWYodCl7YWRkTG9jYWxseUNhY2hlZEltYWdlT3BzKGEsdCk7ZT1udWxsO2NvbnRpbnVlfX1uZXh0KG4uYnVpbGRQYWludEltYWdlWE9iamVjdCh7cmVzb3VyY2VzOmksaW1hZ2U6ZVswXSxpc0lubGluZTohMCxvcGVyYXRvckxpc3Q6YSxjYWNoZUtleTpOLGxvY2FsSW1hZ2VDYWNoZTpjLGxvY2FsQ29sb3JTcGFjZUNhY2hlOkN9KSk7cmV0dXJuO2Nhc2UgQmU6aWYoIWQuc3RhdGUuZm9udCl7bi5lbnN1cmVTdGF0ZUZvbnQoZC5zdGF0ZSk7Y29udGludWV9ZVswXT1uLmhhbmRsZVRleHQoZVswXSxkLnN0YXRlKTticmVhaztjYXNlIFFlOmlmKCFkLnN0YXRlLmZvbnQpe24uZW5zdXJlU3RhdGVGb250KGQuc3RhdGUpO2NvbnRpbnVlfXZhciBHPVtdLHg9ZC5zdGF0ZTtmb3IoY29uc3QgdCBvZiBlWzBdKSJzdHJpbmciPT10eXBlb2YgdD9HLnB1c2goLi4ubi5oYW5kbGVUZXh0KHQseCkpOiJudW1iZXIiPT10eXBlb2YgdCYmRy5wdXNoKHQpO2VbMF09RztyPUJlO2JyZWFrO2Nhc2UgRWU6aWYoIWQuc3RhdGUuZm9udCl7bi5lbnN1cmVTdGF0ZUZvbnQoZC5zdGF0ZSk7Y29udGludWV9YS5hZGRPcChsZSk7ZVswXT1uLmhhbmRsZVRleHQoZVswXSxkLnN0YXRlKTtyPUJlO2JyZWFrO2Nhc2UgdWU6aWYoIWQuc3RhdGUuZm9udCl7bi5lbnN1cmVTdGF0ZUZvbnQoZC5zdGF0ZSk7Y29udGludWV9YS5hZGRPcChsZSk7YS5hZGRPcChyZSxbZS5zaGlmdCgpXSk7YS5hZGRPcChhZSxbZS5zaGlmdCgpXSk7ZVswXT1uLmhhbmRsZVRleHQoZVswXSxkLnN0YXRlKTtyPUJlO2JyZWFrO2Nhc2UgZ2U6ZC5zdGF0ZS50ZXh0UmVuZGVyaW5nTW9kZT1lWzBdO2JyZWFrO2Nhc2UgbWU6e2NvbnN0IHQ9Q29sb3JTcGFjZS5nZXRDYWNoZWQoZVswXSxvLEMpO2lmKHQpe2Quc3RhdGUuZmlsbENvbG9yU3BhY2U9dDtjb250aW51ZX1uZXh0KG4ucGFyc2VDb2xvclNwYWNlKHtjczplWzBdLHJlc291cmNlczppLGxvY2FsQ29sb3JTcGFjZUNhY2hlOkN9KS50aGVuKChmdW5jdGlvbihlKXtkLnN0YXRlLmZpbGxDb2xvclNwYWNlPWV8fENvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5fSkpKTtyZXR1cm59Y2FzZSBwZTp7Y29uc3QgdD1Db2xvclNwYWNlLmdldENhY2hlZChlWzBdLG8sQyk7aWYodCl7ZC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPXQ7Y29udGludWV9bmV4dChuLnBhcnNlQ29sb3JTcGFjZSh7Y3M6ZVswXSxyZXNvdXJjZXM6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTpDfSkudGhlbigoZnVuY3Rpb24oZSl7ZC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPWV8fENvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5fSkpKTtyZXR1cm59Y2FzZSBiZTpEPWQuc3RhdGUuZmlsbENvbG9yU3BhY2U7ZT1ELmdldFJnYihlLDApO3I9UmU7YnJlYWs7Y2FzZSB5ZTpEPWQuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZTtlPUQuZ2V0UmdiKGUsMCk7cj1rZTticmVhaztjYXNlIFNlOmQuc3RhdGUuZmlsbENvbG9yU3BhY2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7ZT1Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2IoZSwwKTtyPVJlO2JyZWFrO2Nhc2UgRmU6ZC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPUNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5O2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKGUsMCk7cj1rZTticmVhaztjYXNlIEdlOmQuc3RhdGUuZmlsbENvbG9yU3BhY2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWs7ZT1Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoZSwwKTtyPVJlO2JyZWFrO2Nhc2UgTmU6ZC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPUNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrO2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGUsMCk7cj1rZTticmVhaztjYXNlIFJlOmQuc3RhdGUuZmlsbENvbG9yU3BhY2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYjtlPUNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGUsMCk7YnJlYWs7Y2FzZSBrZTpkLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYjtlPUNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGUsMCk7YnJlYWs7Y2FzZSBEZTpEPWQuc3RhdGUucGF0dGVybkZpbGxDb2xvclNwYWNlO2lmKCFEKXtlPVtdO3I9bnQ7YnJlYWt9aWYoIlBhdHRlcm4iPT09RC5uYW1lKXtuZXh0KG4uaGFuZGxlQ29sb3JOKGEsRGUsZSxELHUsaSx0LEMsbCxRKSk7cmV0dXJufWU9RC5nZXRSZ2IoZSwwKTtyPVJlO2JyZWFrO2Nhc2Ugd2U6RD1kLnN0YXRlLnBhdHRlcm5TdHJva2VDb2xvclNwYWNlO2lmKCFEKXtlPVtdO3I9c3Q7YnJlYWt9aWYoIlBhdHRlcm4iPT09RC5uYW1lKXtuZXh0KG4uaGFuZGxlQ29sb3JOKGEsd2UsZSxELHUsaSx0LEMsbCxRKSk7cmV0dXJufWU9RC5nZXRSZ2IoZSwwKTtyPWtlO2JyZWFrO2Nhc2UgeGU6bGV0IGY7dHJ5e2NvbnN0IHQ9aS5nZXQoIlNoYWRpbmciKTtpZighdCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgcmVzb3VyY2UgZm91bmQiKTtmPXQuZ2V0KGVbMF0ubmFtZSk7aWYoIWYpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJObyBzaGFkaW5nIG9iamVjdCBmb3VuZCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbiljb250aW51ZTtpZihuLm9wdGlvbnMuaWdub3JlRXJyb3JzKXt3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBTaGFkaW5nOiAiJHtlfSIuYCk7Y29udGludWV9dGhyb3cgZX1jb25zdCBwPW4ucGFyc2VTaGFkaW5nKHtzaGFkaW5nOmYscmVzb3VyY2VzOmksbG9jYWxDb2xvclNwYWNlQ2FjaGU6Qyxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6UX0pO2lmKCFwKWNvbnRpbnVlO2U9W3BdO3I9eGU7YnJlYWs7Y2FzZSBVQTprPWVbMF1pbnN0YW5jZW9mIE5hbWU7Uz1lWzBdLm5hbWU7aWYoayl7Y29uc3QgdD1oLmdldEJ5TmFtZShTKTtpZih0KXt0Lmxlbmd0aD4wJiZhLmFkZE9wKFVBLFt0XSk7ZT1udWxsO2NvbnRpbnVlfX1uZXh0KG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHIpe2lmKCFrKXRocm93IG5ldyBGb3JtYXRFcnJvcigiR1N0YXRlIG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTtjb25zdCBzPWkuZ2V0KCJFeHRHU3RhdGUiKTtpZighKHMgaW5zdGFuY2VvZiBEaWN0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2NvbnN0IG89cy5nZXQoUyk7aWYoIShvIGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtuLnNldEdTdGF0ZSh7cmVzb3VyY2VzOmksZ1N0YXRlOm8sb3BlcmF0b3JMaXN0OmEsY2FjaGVLZXk6Uyx0YXNrOnQsc3RhdGVNYW5hZ2VyOmQsbG9jYWxHU3RhdGVDYWNoZTpoLGxvY2FsQ29sb3JTcGFjZUNhY2hlOkN9KS50aGVuKGUscil9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSl7aWYoIW4ub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBFeHRHU3RhdGU6ICIke2V9Ii5gKX19KSkpO3JldHVybjtjYXNlIEpBOmNhc2UgdkE6Y2FzZSBZQTpjYXNlIFRBOmNhc2UgS0E6Y2FzZSBxQTpjYXNlIE9BOm4uYnVpbGRQYXRoKGEscixlLGcpO2NvbnRpbnVlO2Nhc2UgSmU6Y2FzZSB2ZTpjYXNlIHFlOmNhc2UgT2U6Y29udGludWU7Y2FzZSBUZTppZighKGVbMF1pbnN0YW5jZW9mIE5hbWUpKXt3YXJuKGBFeHBlY3RlZCBuYW1lIGZvciBiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyBhcmcwPSR7ZVswXX1gKTthLmFkZE9wKFRlLFsiT0MiLG51bGxdKTtjb250aW51ZX1pZigiT0MiPT09ZVswXS5uYW1lKXtuZXh0KG4ucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoZVsxXSxpKS50aGVuKChlPT57YS5hZGRPcChUZSxbIk9DIixlXSl9KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbikpe2lmKCFuLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7d2FybihgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6ICIke2V9Ii5gKTthLmFkZE9wKFRlLFsiT0MiLG51bGxdKX19KSkpO3JldHVybn1lPVtlWzBdLm5hbWUsZVsxXWluc3RhbmNlb2YgRGljdD9lWzFdLmdldCgiTUNJRCIpOm51bGxdO2JyZWFrO2RlZmF1bHQ6aWYobnVsbCE9PWUpe2Zvcih3PTAsYj1lLmxlbmd0aDt3PGImJiEoZVt3XWluc3RhbmNlb2YgRGljdCk7dysrKTtpZih3PGIpe3dhcm4oImdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIG9wZXJhdG9yOiAiK3IpO2NvbnRpbnVlfX19YS5hZGRPcChyLGUpfWlmKHkpbmV4dChMcik7ZWxzZXtjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCk7ZSgpfX0pKS5jYXRjaCgoZT0+e2lmKCEoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCl9fSkpfWdldFRleHRDb250ZW50KHtzdHJlYW06ZSx0YXNrOnQscmVzb3VyY2VzOmksc3RhdGVNYW5hZ2VyOnM9bnVsbCxpbmNsdWRlTWFya2VkQ29udGVudDpuPSExLHNpbms6byxzZWVuU3R5bGVzOmc9bmV3IFNldCx2aWV3Qm94OmMsbGFuZzpDPW51bGwsbWFya2VkQ29udGVudERhdGE6aD1udWxsLGRpc2FibGVOb3JtYWxpemF0aW9uOmw9ITEsa2VlcFdoaXRlU3BhY2U6UT0hMX0pe2l8fD1EaWN0LmVtcHR5O3N8fD1uZXcgU3RhdGVNYW5hZ2VyKG5ldyBUZXh0U3RhdGUpO24mJihofHw9e2xldmVsOjB9KTtjb25zdCBFPXtpdGVtczpbXSxzdHlsZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxsYW5nOkN9LHU9e2luaXRpYWxpemVkOiExLHN0cjpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCx3aWR0aDowLGhlaWdodDowLHZlcnRpY2FsOiExLHByZXZUcmFuc2Zvcm06bnVsbCx0ZXh0QWR2YW5jZVNjYWxlOjAsc3BhY2VJbkZsb3dNaW46MCxzcGFjZUluRmxvd01heDowLHRyYWNraW5nU3BhY2VNaW46MS8wLG5lZ2F0aXZlU3BhY2VNYXg6LTEvMCxub3RBU3BhY2U6LTEvMCx0cmFuc2Zvcm06bnVsbCxmb250TmFtZTpudWxsLGhhc0VPTDohMX0sZD1bIiAiLCIgIl07bGV0IGY9MDtmdW5jdGlvbiBzYXZlTGFzdENoYXIoZSl7Y29uc3QgdD0oZisxKSUyLGk9IiAiIT09ZFtmXSYmIiAiPT09ZFt0XTtkW2ZdPWU7Zj10O3JldHVybiFRJiZpfWZ1bmN0aW9uIHNob3VsZEFkZFdoaXRlcHNhY2UoKXtyZXR1cm4hUSYmIiAiIT09ZFtmXSYmIiAiPT09ZFsoZisxKSUyXX1mdW5jdGlvbiByZXNldExhc3RDaGFycygpe2RbMF09ZFsxXT0iICI7Zj0wfWNvbnN0IHA9dGhpcyxtPXRoaXMueHJlZix5PVtdO2xldCB3PW51bGw7Y29uc3QgYj1uZXcgTG9jYWxJbWFnZUNhY2hlLEQ9bmV3IExvY2FsR1N0YXRlQ2FjaGUsUz1uZXcgRXZhbHVhdG9yUHJlcHJvY2Vzc29yKGUsbSxzKTtsZXQgaztmdW5jdGlvbiBwdXNoV2hpdGVzcGFjZSh7d2lkdGg6ZT0wLGhlaWdodDp0PTAsdHJhbnNmb3JtOmk9dS5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOmE9dS5mb250TmFtZX0pe0UuaXRlbXMucHVzaCh7c3RyOiIgIixkaXI6Imx0ciIsd2lkdGg6ZSxoZWlnaHQ6dCx0cmFuc2Zvcm06aSxmb250TmFtZTphLGhhc0VPTDohMX0pfWZ1bmN0aW9uIGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCl7Y29uc3QgZT1rLmZvbnQsdD1bay5mb250U2l6ZSprLnRleHRIU2NhbGUsMCwwLGsuZm9udFNpemUsMCxrLnRleHRSaXNlXTtpZihlLmlzVHlwZTNGb250JiYoay5mb250U2l6ZTw9MXx8ZS5pc0NoYXJCQm94KSYmIWlzQXJyYXlFcXVhbChrLmZvbnRNYXRyaXgscikpe2NvbnN0IGk9ZS5iYm94WzNdLWUuYmJveFsxXTtpPjAmJih0WzNdKj1pKmsuZm9udE1hdHJpeFszXSl9cmV0dXJuIFV0aWwudHJhbnNmb3JtKGsuY3RtLFV0aWwudHJhbnNmb3JtKGsudGV4dE1hdHJpeCx0KSl9ZnVuY3Rpb24gZW5zdXJlVGV4dENvbnRlbnRJdGVtKCl7aWYodS5pbml0aWFsaXplZClyZXR1cm4gdTtjb25zdHtmb250OmUsbG9hZGVkTmFtZTp0fT1rO2lmKCFnLmhhcyh0KSl7Zy5hZGQodCk7RS5zdHlsZXNbdF09e2ZvbnRGYW1pbHk6ZS5mYWxsYmFja05hbWUsYXNjZW50OmUuYXNjZW50LGRlc2NlbnQ6ZS5kZXNjZW50LHZlcnRpY2FsOmUudmVydGljYWx9O2lmKHAub3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzJiZlLnN5c3RlbUZvbnRJbmZvKXtjb25zdCBpPUUuc3R5bGVzW3RdO2kuZm9udFN1YnN0aXR1dGlvbj1lLnN5c3RlbUZvbnRJbmZvLmNzcztpLmZvbnRTdWJzdGl0dXRpb25Mb2FkZWROYW1lPWUuc3lzdGVtRm9udEluZm8ubG9hZGVkTmFtZX19dS5mb250TmFtZT10O2NvbnN0IGk9dS50cmFuc2Zvcm09Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKTtpZihlLnZlcnRpY2FsKXt1LndpZHRoPXUudG90YWxXaWR0aD1NYXRoLmh5cG90KGlbMF0saVsxXSk7dS5oZWlnaHQ9dS50b3RhbEhlaWdodD0wO3UudmVydGljYWw9ITB9ZWxzZXt1LndpZHRoPXUudG90YWxXaWR0aD0wO3UuaGVpZ2h0PXUudG90YWxIZWlnaHQ9TWF0aC5oeXBvdChpWzJdLGlbM10pO3UudmVydGljYWw9ITF9Y29uc3QgYT1NYXRoLmh5cG90KGsudGV4dExpbmVNYXRyaXhbMF0say50ZXh0TGluZU1hdHJpeFsxXSkscj1NYXRoLmh5cG90KGsuY3RtWzBdLGsuY3RtWzFdKTt1LnRleHRBZHZhbmNlU2NhbGU9ciphO2NvbnN0e2ZvbnRTaXplOnN9PWs7dS50cmFja2luZ1NwYWNlTWluPS4xMDIqczt1Lm5vdEFTcGFjZT0uMDMqczt1Lm5lZ2F0aXZlU3BhY2VNYXg9LS4yKnM7dS5zcGFjZUluRmxvd01pbj0uMTAyKnM7dS5zcGFjZUluRmxvd01heD0uNipzO3UuaGFzRU9MPSExO3UuaW5pdGlhbGl6ZWQ9ITA7cmV0dXJuIHV9ZnVuY3Rpb24gdXBkYXRlQWR2YW5jZVNjYWxlKCl7aWYoIXUuaW5pdGlhbGl6ZWQpcmV0dXJuO2NvbnN0IGU9TWF0aC5oeXBvdChrLnRleHRMaW5lTWF0cml4WzBdLGsudGV4dExpbmVNYXRyaXhbMV0pLHQ9TWF0aC5oeXBvdChrLmN0bVswXSxrLmN0bVsxXSkqZTtpZih0IT09dS50ZXh0QWR2YW5jZVNjYWxlKXtpZih1LnZlcnRpY2FsKXt1LnRvdGFsSGVpZ2h0Kz11LmhlaWdodCp1LnRleHRBZHZhbmNlU2NhbGU7dS5oZWlnaHQ9MH1lbHNle3UudG90YWxXaWR0aCs9dS53aWR0aCp1LnRleHRBZHZhbmNlU2NhbGU7dS53aWR0aD0wfXUudGV4dEFkdmFuY2VTY2FsZT10fX1mdW5jdGlvbiBydW5CaWRpVHJhbnNmb3JtKGUpe2xldCB0PWUuc3RyLmpvaW4oIiIpO2x8fCh0PWZ1bmN0aW9uIG5vcm1hbGl6ZVVuaWNvZGUoZSl7aWYoIWx0KXtsdD0vKFtcdTAwYTBcdTAwYjVcdTAzN2VcdTBlYjNcdTIwMDAtXHUyMDBhXHUyMDJmXHUyMTI2XHVmYjAwLVx1ZmIwNFx1ZmIwNlx1ZmIyMC1cdWZiMzZcdWZiMzgtXHVmYjNjXHVmYjNlXHVmYjQwLVx1ZmI0MVx1ZmI0My1cdWZiNDRcdWZiNDYtXHVmYmExXHVmYmE0LVx1ZmJhOVx1ZmJhZS1cdWZiYjFcdWZiZDMtXHVmYmRjXHVmYmRlLVx1ZmJlN1x1ZmJlYS1cdWZiZjhcdWZiZmMtXHVmYmZkXHVmYzAwLVx1ZmM1ZFx1ZmM2NC1cdWZjZjFcdWZjZjUtXHVmZDNkXHVmZDg4XHVmZGY0XHVmZGZhLVx1ZmRmYlx1ZmU3MVx1ZmU3N1x1ZmU3OVx1ZmU3Ylx1ZmU3ZF0rKXwoXHVmYjA1KykvZ3U7QnQ9bmV3IE1hcChbWyLvrIUiLCLFv3QiXV0pfXJldHVybiBlLnJlcGxhY2VBbGwobHQsKChlLHQsaSk9PnQ/dC5ub3JtYWxpemUoIk5GS0MiKTpCdC5nZXQoaSkpKX0odCkpO2NvbnN0IGk9YmlkaSh0LC0xLGUudmVydGljYWwpO3JldHVybntzdHI6aS5zdHIsZGlyOmkuZGlyLHdpZHRoOk1hdGguYWJzKGUudG90YWxXaWR0aCksaGVpZ2h0Ok1hdGguYWJzKGUudG90YWxIZWlnaHQpLHRyYW5zZm9ybTplLnRyYW5zZm9ybSxmb250TmFtZTplLmZvbnROYW1lLGhhc0VPTDplLmhhc0VPTH19YXN5bmMgZnVuY3Rpb24gaGFuZGxlU2V0Rm9udChlLGEpe2NvbnN0IHM9YXdhaXQgcC5sb2FkRm9udChlLGEsaSk7aWYocy5mb250LmlzVHlwZTNGb250KXRyeXthd2FpdCBzLmxvYWRUeXBlM0RhdGEocCxpLHQpfWNhdGNoe31rLmxvYWRlZE5hbWU9cy5sb2FkZWROYW1lO2suZm9udD1zLmZvbnQ7ay5mb250TWF0cml4PXMuZm9udC5mb250TWF0cml4fHxyfWZ1bmN0aW9uIGFwcGx5SW52ZXJzZVJvdGF0aW9uKGUsdCxpKXtjb25zdCBhPU1hdGguaHlwb3QoaVswXSxpWzFdKTtyZXR1cm5bKGlbMF0qZStpWzFdKnQpL2EsKGlbMl0qZStpWzNdKnQpL2FdfWZ1bmN0aW9uIGNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKGUpe2NvbnN0IHQ9Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKTtsZXQgaT10WzRdLGE9dFs1XTtpZihrLmZvbnQ/LnZlcnRpY2FsKXtpZihpPGNbMF18fGk+Y1syXXx8YStlPGNbMV18fGE+Y1szXSlyZXR1cm4hMX1lbHNlIGlmKGkrZTxjWzBdfHxpPmNbMl18fGE8Y1sxXXx8YT5jWzNdKXJldHVybiExO2lmKCFrLmZvbnR8fCF1LnByZXZUcmFuc2Zvcm0pcmV0dXJuITA7bGV0IHI9dS5wcmV2VHJhbnNmb3JtWzRdLHM9dS5wcmV2VHJhbnNmb3JtWzVdO2lmKHI9PT1pJiZzPT09YSlyZXR1cm4hMDtsZXQgbj0tMTt0WzBdJiYwPT09dFsxXSYmMD09PXRbMl0/bj10WzBdPjA/MDoxODA6dFsxXSYmMD09PXRbMF0mJjA9PT10WzNdJiYobj10WzFdPjA/OTA6MjcwKTtzd2l0Y2gobil7Y2FzZSAwOmJyZWFrO2Nhc2UgOTA6W2ksYV09W2EsaV07W3Isc109W3Mscl07YnJlYWs7Y2FzZSAxODA6W2ksYSxyLHNdPVstaSwtYSwtciwtc107YnJlYWs7Y2FzZSAyNzA6W2ksYV09Wy1hLC1pXTtbcixzXT1bLXMsLXJdO2JyZWFrO2RlZmF1bHQ6W2ksYV09YXBwbHlJbnZlcnNlUm90YXRpb24oaSxhLHQpO1tyLHNdPWFwcGx5SW52ZXJzZVJvdGF0aW9uKHIscyx1LnByZXZUcmFuc2Zvcm0pfWlmKGsuZm9udC52ZXJ0aWNhbCl7Y29uc3QgZT0ocy1hKS91LnRleHRBZHZhbmNlU2NhbGUsdD1pLXIsbj1NYXRoLnNpZ24odS5oZWlnaHQpO2lmKGU8bip1Lm5lZ2F0aXZlU3BhY2VNYXgpe2lmKE1hdGguYWJzKHQpPi41KnUud2lkdGgpe2FwcGVuZEVPTCgpO3JldHVybiEwfXJlc2V0TGFzdENoYXJzKCk7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXR1cm4hMH1pZihNYXRoLmFicyh0KT51LndpZHRoKXthcHBlbmRFT0woKTtyZXR1cm4hMH1lPD1uKnUubm90QVNwYWNlJiZyZXNldExhc3RDaGFycygpO2lmKGU8PW4qdS50cmFja2luZ1NwYWNlTWluKWlmKHNob3VsZEFkZFdoaXRlcHNhY2UoKSl7cmVzZXRMYXN0Q2hhcnMoKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO3B1c2hXaGl0ZXNwYWNlKHtoZWlnaHQ6TWF0aC5hYnMoZSl9KX1lbHNlIHUuaGVpZ2h0Kz1lO2Vsc2UgaWYoIWFkZEZha2VTcGFjZXMoZSx1LnByZXZUcmFuc2Zvcm0sbikpaWYoMD09PXUuc3RyLmxlbmd0aCl7cmVzZXRMYXN0Q2hhcnMoKTtwdXNoV2hpdGVzcGFjZSh7aGVpZ2h0Ok1hdGguYWJzKGUpfSl9ZWxzZSB1LmhlaWdodCs9ZTtNYXRoLmFicyh0KT4uMjUqdS53aWR0aCYmZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXR1cm4hMH1jb25zdCBvPShpLXIpL3UudGV4dEFkdmFuY2VTY2FsZSxnPWEtcyxDPU1hdGguc2lnbih1LndpZHRoKTtpZihvPEMqdS5uZWdhdGl2ZVNwYWNlTWF4KXtpZihNYXRoLmFicyhnKT4uNSp1LmhlaWdodCl7YXBwZW5kRU9MKCk7cmV0dXJuITB9cmVzZXRMYXN0Q2hhcnMoKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO3JldHVybiEwfWlmKE1hdGguYWJzKGcpPnUuaGVpZ2h0KXthcHBlbmRFT0woKTtyZXR1cm4hMH1vPD1DKnUubm90QVNwYWNlJiZyZXNldExhc3RDaGFycygpO2lmKG88PUMqdS50cmFja2luZ1NwYWNlTWluKWlmKHNob3VsZEFkZFdoaXRlcHNhY2UoKSl7cmVzZXRMYXN0Q2hhcnMoKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO3B1c2hXaGl0ZXNwYWNlKHt3aWR0aDpNYXRoLmFicyhvKX0pfWVsc2UgdS53aWR0aCs9bztlbHNlIGlmKCFhZGRGYWtlU3BhY2VzKG8sdS5wcmV2VHJhbnNmb3JtLEMpKWlmKDA9PT11LnN0ci5sZW5ndGgpe3Jlc2V0TGFzdENoYXJzKCk7cHVzaFdoaXRlc3BhY2Uoe3dpZHRoOk1hdGguYWJzKG8pfSl9ZWxzZSB1LndpZHRoKz1vO01hdGguYWJzKGcpPi4yNSp1LmhlaWdodCYmZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXR1cm4hMH1mdW5jdGlvbiBidWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6ZSxleHRyYVNwYWNpbmc6dH0pe2NvbnN0IGk9ay5mb250O2lmKCFlKXtjb25zdCBlPWsuY2hhclNwYWNpbmcrdDtlJiYoaS52ZXJ0aWNhbD9rLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtZSk6ay50cmFuc2xhdGVUZXh0TWF0cml4KGUqay50ZXh0SFNjYWxlLDApKTtRJiZjb21wYXJlV2l0aExhc3RQb3NpdGlvbigwKTtyZXR1cm59Y29uc3QgYT1pLmNoYXJzVG9HbHlwaHMoZSkscj1rLmZvbnRNYXRyaXhbMF0qay5mb250U2l6ZTtmb3IobGV0IGU9MCxzPWEubGVuZ3RoO2U8cztlKyspe2NvbnN0IG49YVtlXSx7Y2F0ZWdvcnk6b309bjtpZihvLmlzSW52aXNpYmxlRm9ybWF0TWFyayljb250aW51ZTtsZXQgZz1rLmNoYXJTcGFjaW5nKyhlKzE9PT1zP3Q6MCksYz1uLndpZHRoO2kudmVydGljYWwmJihjPW4udm1ldHJpYz9uLnZtZXRyaWNbMF06LWMpO2xldCBDPWMqcjtpZighUSYmby5pc1doaXRlc3BhY2Upe2lmKGkudmVydGljYWwpe2crPS1DK2sud29yZFNwYWNpbmc7ay50cmFuc2xhdGVUZXh0TWF0cml4KDAsLWcpfWVsc2V7Zys9QytrLndvcmRTcGFjaW5nO2sudHJhbnNsYXRlVGV4dE1hdHJpeChnKmsudGV4dEhTY2FsZSwwKX1zYXZlTGFzdENoYXIoIiAiKTtjb250aW51ZX1pZighby5pc1plcm9XaWR0aERpYWNyaXRpYyYmIWNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKEMpKXtpLnZlcnRpY2FsP2sudHJhbnNsYXRlVGV4dE1hdHJpeCgwLEMpOmsudHJhbnNsYXRlVGV4dE1hdHJpeChDKmsudGV4dEhTY2FsZSwwKTtjb250aW51ZX1jb25zdCBoPWVuc3VyZVRleHRDb250ZW50SXRlbSgpO28uaXNaZXJvV2lkdGhEaWFjcml0aWMmJihDPTApO2lmKGkudmVydGljYWwpe2sudHJhbnNsYXRlVGV4dE1hdHJpeCgwLEMpO0M9TWF0aC5hYnMoQyk7aC5oZWlnaHQrPUN9ZWxzZXtDKj1rLnRleHRIU2NhbGU7ay50cmFuc2xhdGVUZXh0TWF0cml4KEMsMCk7aC53aWR0aCs9Q31DJiYoaC5wcmV2VHJhbnNmb3JtPWdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCkpO2NvbnN0IGw9bi51bmljb2RlO3NhdmVMYXN0Q2hhcihsKSYmaC5zdHIucHVzaCgiICIpO2guc3RyLnB1c2gobCk7ZyYmKGkudmVydGljYWw/ay50cmFuc2xhdGVUZXh0TWF0cml4KDAsLWcpOmsudHJhbnNsYXRlVGV4dE1hdHJpeChnKmsudGV4dEhTY2FsZSwwKSl9fWZ1bmN0aW9uIGFwcGVuZEVPTCgpe3Jlc2V0TGFzdENoYXJzKCk7aWYodS5pbml0aWFsaXplZCl7dS5oYXNFT0w9ITA7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKX1lbHNlIEUuaXRlbXMucHVzaCh7c3RyOiIiLGRpcjoibHRyIix3aWR0aDowLGhlaWdodDowLHRyYW5zZm9ybTpnZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpLGZvbnROYW1lOmsubG9hZGVkTmFtZSxoYXNFT0w6ITB9KX1mdW5jdGlvbiBhZGRGYWtlU3BhY2VzKGUsdCxpKXtpZihpKnUuc3BhY2VJbkZsb3dNaW48PWUmJmU8PWkqdS5zcGFjZUluRmxvd01heCl7aWYodS5pbml0aWFsaXplZCl7cmVzZXRMYXN0Q2hhcnMoKTt1LnN0ci5wdXNoKCIgIil9cmV0dXJuITF9Y29uc3QgYT11LmZvbnROYW1lO2xldCByPTA7aWYodS52ZXJ0aWNhbCl7cj1lO2U9MH1mbHVzaFRleHRDb250ZW50SXRlbSgpO3Jlc2V0TGFzdENoYXJzKCk7cHVzaFdoaXRlc3BhY2Uoe3dpZHRoOk1hdGguYWJzKGUpLGhlaWdodDpNYXRoLmFicyhyKSx0cmFuc2Zvcm06dHx8Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSxmb250TmFtZTphfSk7cmV0dXJuITB9ZnVuY3Rpb24gZmx1c2hUZXh0Q29udGVudEl0ZW0oKXtpZih1LmluaXRpYWxpemVkJiZ1LnN0cil7dS52ZXJ0aWNhbD91LnRvdGFsSGVpZ2h0Kz11LmhlaWdodCp1LnRleHRBZHZhbmNlU2NhbGU6dS50b3RhbFdpZHRoKz11LndpZHRoKnUudGV4dEFkdmFuY2VTY2FsZTtFLml0ZW1zLnB1c2gocnVuQmlkaVRyYW5zZm9ybSh1KSk7dS5pbml0aWFsaXplZD0hMTt1LnN0ci5sZW5ndGg9MH19ZnVuY3Rpb24gZW5xdWV1ZUNodW5rKGU9ITEpe2NvbnN0IHQ9RS5pdGVtcy5sZW5ndGg7aWYoMCE9PXQmJiEoZSYmdDwxMCkpe28uZW5xdWV1ZShFLHQpO0UuaXRlbXM9W107RS5zdHlsZXM9T2JqZWN0LmNyZWF0ZShudWxsKX19Y29uc3QgUj1uZXcgVGltZVNsb3RNYW5hZ2VyO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gcHJvbWlzZUJvZHkoZSxyKXtjb25zdCBuZXh0PWZ1bmN0aW9uKHQpe2VucXVldWVDaHVuayghMCk7UHJvbWlzZS5hbGwoW3Qsby5yZWFkeV0pLnRoZW4oKGZ1bmN0aW9uKCl7dHJ5e3Byb21pc2VCb2R5KGUscil9Y2F0Y2goZSl7cihlKX19KSxyKX07dC5lbnN1cmVOb3RUZXJtaW5hdGVkKCk7Ui5yZXNldCgpO2NvbnN0IHU9e307bGV0IGQsZj1bXTtmb3IoOyEoZD1SLmNoZWNrKCkpOyl7Zi5sZW5ndGg9MDt1LmFyZ3M9ZjtpZighUy5yZWFkKHUpKWJyZWFrO2NvbnN0IGU9aztrPXMuc3RhdGU7Y29uc3Qgcj11LmZuO2Y9dS5hcmdzO3N3aXRjaCgwfHIpe2Nhc2Ugb2U6dmFyIE49ZlswXS5uYW1lLEc9ZlsxXTtpZihrLmZvbnQmJk49PT1rLmZvbnROYW1lJiZHPT09ay5mb250U2l6ZSlicmVhaztmbHVzaFRleHRDb250ZW50SXRlbSgpO2suZm9udE5hbWU9TjtrLmZvbnRTaXplPUc7bmV4dChoYW5kbGVTZXRGb250KE4sbnVsbCkpO3JldHVybjtjYXNlIEllOmsudGV4dFJpc2U9ZlswXTticmVhaztjYXNlIHNlOmsudGV4dEhTY2FsZT1mWzBdLzEwMDticmVhaztjYXNlIG5lOmsubGVhZGluZz1mWzBdO2JyZWFrO2Nhc2UgY2U6ay50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChmWzBdLGZbMV0pO2sudGV4dE1hdHJpeD1rLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBDZTprLmxlYWRpbmc9LWZbMV07ay50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChmWzBdLGZbMV0pO2sudGV4dE1hdHJpeD1rLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBsZTprLmNhcnJpYWdlUmV0dXJuKCk7YnJlYWs7Y2FzZSBoZTprLnNldFRleHRNYXRyaXgoZlswXSxmWzFdLGZbMl0sZlszXSxmWzRdLGZbNV0pO2suc2V0VGV4dExpbmVNYXRyaXgoZlswXSxmWzFdLGZbMl0sZlszXSxmWzRdLGZbNV0pO3VwZGF0ZUFkdmFuY2VTY2FsZSgpO2JyZWFrO2Nhc2UgYWU6ay5jaGFyU3BhY2luZz1mWzBdO2JyZWFrO2Nhc2UgcmU6ay53b3JkU3BhY2luZz1mWzBdO2JyZWFrO2Nhc2UgdGU6ay50ZXh0TWF0cml4PWEuc2xpY2UoKTtrLnRleHRMaW5lTWF0cml4PWEuc2xpY2UoKTticmVhaztjYXNlIFFlOmlmKCFzLnN0YXRlLmZvbnQpe3AuZW5zdXJlU3RhdGVGb250KHMuc3RhdGUpO2NvbnRpbnVlfWNvbnN0IHI9KGsuZm9udC52ZXJ0aWNhbD8xOi0xKSprLmZvbnRTaXplLzFlMyx1PWZbMF07Zm9yKGxldCBlPTAsdD11Lmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PXVbZV07aWYoInN0cmluZyI9PXR5cGVvZiB0KXkucHVzaCh0KTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdCYmMCE9PXQpe2NvbnN0IGU9eS5qb2luKCIiKTt5Lmxlbmd0aD0wO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczplLGV4dHJhU3BhY2luZzp0KnJ9KX19aWYoeS5sZW5ndGg+MCl7Y29uc3QgZT15LmpvaW4oIiIpO3kubGVuZ3RoPTA7YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOmUsZXh0cmFTcGFjaW5nOjB9KX1icmVhaztjYXNlIEJlOmlmKCFzLnN0YXRlLmZvbnQpe3AuZW5zdXJlU3RhdGVGb250KHMuc3RhdGUpO2NvbnRpbnVlfWJ1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczpmWzBdLGV4dHJhU3BhY2luZzowfSk7YnJlYWs7Y2FzZSBFZTppZighcy5zdGF0ZS5mb250KXtwLmVuc3VyZVN0YXRlRm9udChzLnN0YXRlKTtjb250aW51ZX1rLmNhcnJpYWdlUmV0dXJuKCk7YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOmZbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIHVlOmlmKCFzLnN0YXRlLmZvbnQpe3AuZW5zdXJlU3RhdGVGb250KHMuc3RhdGUpO2NvbnRpbnVlfWsud29yZFNwYWNpbmc9ZlswXTtrLmNoYXJTcGFjaW5nPWZbMV07ay5jYXJyaWFnZVJldHVybigpO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczpmWzJdLGV4dHJhU3BhY2luZzowfSk7YnJlYWs7Y2FzZSBIZTpmbHVzaFRleHRDb250ZW50SXRlbSgpO3d8fCh3PWkuZ2V0KCJYT2JqZWN0Iil8fERpY3QuZW1wdHkpO3ZhciB4PWZbMF1pbnN0YW5jZW9mIE5hbWUsVT1mWzBdLm5hbWU7aWYoeCYmYi5nZXRCeU5hbWUoVSkpYnJlYWs7bmV4dChuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxhKXtpZigheCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO2xldCByPXcuZ2V0UmF3KFUpO2lmKHIgaW5zdGFuY2VvZiBSZWYpe2lmKGIuZ2V0QnlSZWYocikpe2UoKTtyZXR1cm59aWYocC5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEocixwLnBhZ2VJbmRleCkpe2UoKTtyZXR1cm59cj1tLmZldGNoKHIpfWlmKCEociBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKXRocm93IG5ldyBGb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW0iKTtjb25zdCBFPXIuZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKEUgaW5zdGFuY2VvZiBOYW1lKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTtpZigiRm9ybSIhPT1FLm5hbWUpe2Iuc2V0KFUsci5kaWN0Lm9iaklkLCEwKTtlKCk7cmV0dXJufWNvbnN0IHU9cy5zdGF0ZS5jbG9uZSgpLGQ9bmV3IFN0YXRlTWFuYWdlcih1KSxmPWxvb2t1cE1hdHJpeChyLmRpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpLG51bGwpO2YmJmQudHJhbnNmb3JtKGYpO2VucXVldWVDaHVuaygpO2NvbnN0IHk9e2VucXVldWVJbnZva2VkOiExLGVucXVldWUoZSx0KXt0aGlzLmVucXVldWVJbnZva2VkPSEwO28uZW5xdWV1ZShlLHQpfSxnZXQgZGVzaXJlZFNpemUoKXtyZXR1cm4gby5kZXNpcmVkU2l6ZX0sZ2V0IHJlYWR5KCl7cmV0dXJuIG8ucmVhZHl9fTtwLmdldFRleHRDb250ZW50KHtzdHJlYW06cix0YXNrOnQscmVzb3VyY2VzOnIuZGljdC5nZXQoIlJlc291cmNlcyIpfHxpLHN0YXRlTWFuYWdlcjpkLGluY2x1ZGVNYXJrZWRDb250ZW50Om4sc2luazp5LHNlZW5TdHlsZXM6Zyx2aWV3Qm94OmMsbGFuZzpDLG1hcmtlZENvbnRlbnREYXRhOmgsZGlzYWJsZU5vcm1hbGl6YXRpb246bCxrZWVwV2hpdGVTcGFjZTpRfSkudGhlbigoZnVuY3Rpb24oKXt5LmVucXVldWVJbnZva2VkfHxiLnNldChVLHIuZGljdC5vYmpJZCwhMCk7ZSgpfSksYSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSl7aWYoIXAub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGBnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIFhPYmplY3Q6ICIke2V9Ii5gKX19KSkpO3JldHVybjtjYXNlIFVBOng9ZlswXWluc3RhbmNlb2YgTmFtZTtVPWZbMF0ubmFtZTtpZih4JiZELmdldEJ5TmFtZShVKSlicmVhaztuZXh0KG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2lmKCF4KXRocm93IG5ldyBGb3JtYXRFcnJvcigiR1N0YXRlIG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTtjb25zdCBhPWkuZ2V0KCJFeHRHU3RhdGUiKTtpZighKGEgaW5zdGFuY2VvZiBEaWN0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2NvbnN0IHI9YS5nZXQoVSk7aWYoIShyIGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtjb25zdCBzPXIuZ2V0KCJGb250Iik7aWYocyl7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtrLmZvbnROYW1lPW51bGw7ay5mb250U2l6ZT1zWzFdO2hhbmRsZVNldEZvbnQobnVsbCxzWzBdKS50aGVuKGUsdCl9ZWxzZXtELnNldChVLHIub2JqSWQsITApO2UoKX19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSl7aWYoIXAub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGBnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7ZX0iLmApfX0pKSk7cmV0dXJuO2Nhc2UgWWU6Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtpZihuKXtoLmxldmVsKys7RS5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnQiLHRhZzpmWzBdaW5zdGFuY2VvZiBOYW1lP2ZbMF0ubmFtZTpudWxsfSl9YnJlYWs7Y2FzZSBUZTpmbHVzaFRleHRDb250ZW50SXRlbSgpO2lmKG4pe2gubGV2ZWwrKztsZXQgZT1udWxsO2ZbMV1pbnN0YW5jZW9mIERpY3QmJihlPWZbMV0uZ2V0KCJNQ0lEIikpO0UuaXRlbXMucHVzaCh7dHlwZToiYmVnaW5NYXJrZWRDb250ZW50UHJvcHMiLGlkOk51bWJlci5pc0ludGVnZXIoZSk/YCR7cC5pZEZhY3RvcnkuZ2V0UGFnZU9iaklkKCl9X21jJHtlfWA6bnVsbCx0YWc6ZlswXWluc3RhbmNlb2YgTmFtZT9mWzBdLm5hbWU6bnVsbH0pfWJyZWFrO2Nhc2UgS2U6Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtpZihuKXtpZigwPT09aC5sZXZlbClicmVhaztoLmxldmVsLS07RS5pdGVtcy5wdXNoKHt0eXBlOiJlbmRNYXJrZWRDb250ZW50In0pfWJyZWFrO2Nhc2UgTEE6IWV8fGUuZm9udD09PWsuZm9udCYmZS5mb250U2l6ZT09PWsuZm9udFNpemUmJmUuZm9udE5hbWU9PT1rLmZvbnROYW1lfHxmbHVzaFRleHRDb250ZW50SXRlbSgpfWlmKEUuaXRlbXMubGVuZ3RoPj1vLmRlc2lyZWRTaXplKXtkPSEwO2JyZWFrfX1pZihkKW5leHQoTHIpO2Vsc2V7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtlbnF1ZXVlQ2h1bmsoKTtlKCl9fSkpLmNhdGNoKChlPT57aWYoIShlIGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24pKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlO3dhcm4oYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJHt0Lm5hbWV9IiB0YXNrOiAiJHtlfSIuYCk7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtlbnF1ZXVlQ2h1bmsoKX19KSl9YXN5bmMgZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKGUsdCl7Y29uc3QgaT10aGlzLnhyZWY7bGV0IGE7Y29uc3Qgcj10aGlzLnJlYWRUb1VuaWNvZGUodC50b1VuaWNvZGUpO2lmKHQuY29tcG9zaXRlKXtjb25zdCBpPWUuZ2V0KCJDSURTeXN0ZW1JbmZvIik7aSBpbnN0YW5jZW9mIERpY3QmJih0LmNpZFN5c3RlbUluZm89e3JlZ2lzdHJ5OnN0cmluZ1RvUERGU3RyaW5nKGkuZ2V0KCJSZWdpc3RyeSIpKSxvcmRlcmluZzpzdHJpbmdUb1BERlN0cmluZyhpLmdldCgiT3JkZXJpbmciKSksc3VwcGxlbWVudDppLmdldCgiU3VwcGxlbWVudCIpfSk7dHJ5e2NvbnN0IHQ9ZS5nZXQoIkNJRFRvR0lETWFwIik7dCBpbnN0YW5jZW9mIEJhc2VTdHJlYW0mJihhPXQuZ2V0Qnl0ZXMoKSl9Y2F0Y2goZSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGBleHRyYWN0RGF0YVN0cnVjdHVyZXMgLSBpZ25vcmluZyBDSURUb0dJRE1hcCBkYXRhOiAiJHtlfSIuYCl9fWNvbnN0IHM9W107bGV0IG4sbz1udWxsO2lmKGUuaGFzKCJFbmNvZGluZyIpKXtuPWUuZ2V0KCJFbmNvZGluZyIpO2lmKG4gaW5zdGFuY2VvZiBEaWN0KXtvPW4uZ2V0KCJCYXNlRW5jb2RpbmciKTtvPW8gaW5zdGFuY2VvZiBOYW1lP28ubmFtZTpudWxsO2lmKG4uaGFzKCJEaWZmZXJlbmNlcyIpKXtjb25zdCBlPW4uZ2V0KCJEaWZmZXJlbmNlcyIpO2xldCB0PTA7Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgZT1pLmZldGNoSWZSZWYoYSk7aWYoIm51bWJlciI9PXR5cGVvZiBlKXQ9ZTtlbHNle2lmKCEoZSBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBlbnRyeSBpbiAnRGlmZmVyZW5jZXMnIGFycmF5OiAke2V9YCk7c1t0KytdPWUubmFtZX19fX1lbHNlIGlmKG4gaW5zdGFuY2VvZiBOYW1lKW89bi5uYW1lO2Vsc2V7Y29uc3QgZT0iRW5jb2RpbmcgaXMgbm90IGEgTmFtZSBub3IgYSBEaWN0IjtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoZSk7d2FybihlKX0iTWFjUm9tYW5FbmNvZGluZyIhPT1vJiYiTWFjRXhwZXJ0RW5jb2RpbmciIT09byYmIldpbkFuc2lFbmNvZGluZyIhPT1vJiYobz1udWxsKX1jb25zdCBnPSF0LmZpbGV8fHQuaXNJbnRlcm5hbEZvbnQsYz1lYSgpW3QubmFtZV07byYmZyYmYyYmKG89bnVsbCk7aWYobyl0LmRlZmF1bHRFbmNvZGluZz1nZXRFbmNvZGluZyhvKTtlbHNle2NvbnN0IGU9ISEodC5mbGFncyZqaSksaT0hISh0LmZsYWdzJlhpKTtuPWJpOyJUcnVlVHlwZSIhPT10LnR5cGV8fGl8fChuPURpKTtpZihlfHxjKXtuPXdpO2cmJigvU3ltYm9sL2kudGVzdCh0Lm5hbWUpP249Rmk6L0RpbmdiYXRzL2kudGVzdCh0Lm5hbWUpP249U2k6L1dpbmdkaW5ncy9pLnRlc3QodC5uYW1lKSYmKG49RGkpKX10LmRlZmF1bHRFbmNvZGluZz1ufXQuZGlmZmVyZW5jZXM9czt0LmJhc2VFbmNvZGluZ05hbWU9bzt0Lmhhc0VuY29kaW5nPSEhb3x8cy5sZW5ndGg+MDt0LmRpY3Q9ZTt0LnRvVW5pY29kZT1hd2FpdCByO2NvbnN0IEM9YXdhaXQgdGhpcy5idWlsZFRvVW5pY29kZSh0KTt0LnRvVW5pY29kZT1DO2EmJih0LmNpZFRvR2lkTWFwPXRoaXMucmVhZENpZFRvR2lkTWFwKGEsQykpO3JldHVybiB0fV9zaW1wbGVGb250VG9Vbmljb2RlKGUsdD0hMSl7YXNzZXJ0KCFlLmNvbXBvc2l0ZSwiTXVzdCBiZSBhIHNpbXBsZSBmb250LiIpO2NvbnN0IGk9W10sYT1lLmRlZmF1bHRFbmNvZGluZy5zbGljZSgpLHI9ZS5iYXNlRW5jb2RpbmdOYW1lLHM9ZS5kaWZmZXJlbmNlcztmb3IoY29uc3QgZSBpbiBzKXtjb25zdCB0PXNbZV07Ii5ub3RkZWYiIT09dCYmKGFbZV09dCl9Y29uc3Qgbj1KaSgpO2Zvcihjb25zdCBzIGluIGEpe2xldCBvPWFbc107aWYoIiI9PT1vKWNvbnRpbnVlO2xldCBnPW5bb107aWYodm9pZCAwIT09Zyl7aVtzXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGcpO2NvbnRpbnVlfWxldCBjPTA7c3dpdGNoKG9bMF0pe2Nhc2UiRyI6Mz09PW8ubGVuZ3RoJiYoYz1wYXJzZUludChvLnN1YnN0cmluZygxKSwxNikpO2JyZWFrO2Nhc2UiZyI6NT09PW8ubGVuZ3RoJiYoYz1wYXJzZUludChvLnN1YnN0cmluZygxKSwxNikpO2JyZWFrO2Nhc2UiQyI6Y2FzZSJjIjppZihvLmxlbmd0aD49MyYmby5sZW5ndGg8PTQpe2NvbnN0IGk9by5zdWJzdHJpbmcoMSk7aWYodCl7Yz1wYXJzZUludChpLDE2KTticmVha31jPStpO2lmKE51bWJlci5pc05hTihjKSYmTnVtYmVyLmlzSW50ZWdlcihwYXJzZUludChpLDE2KSkpcmV0dXJuIHRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUoZSwhMCl9YnJlYWs7Y2FzZSJ1IjpnPWdldFVuaWNvZGVGb3JHbHlwaChvLG4pOy0xIT09ZyYmKGM9Zyk7YnJlYWs7ZGVmYXVsdDpzd2l0Y2gobyl7Y2FzZSJmX2giOmNhc2UiZl90IjpjYXNlIlRfaCI6aVtzXT1vLnJlcGxhY2VBbGwoIl8iLCIiKTtjb250aW51ZX19aWYoYz4wJiZjPD0xMTE0MTExJiZOdW1iZXIuaXNJbnRlZ2VyKGMpKXtpZihyJiZjPT09K3Mpe2NvbnN0IGU9Z2V0RW5jb2Rpbmcocik7aWYoZSYmKG89ZVtzXSkpe2lbc109U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKTtjb250aW51ZX19aVtzXT1TdHJpbmcuZnJvbUNvZGVQb2ludChjKX19cmV0dXJuIGl9YXN5bmMgYnVpbGRUb1VuaWNvZGUoZSl7ZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcD1lLnRvVW5pY29kZT8ubGVuZ3RoPjA7aWYoZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCl7IWUuY29tcG9zaXRlJiZlLmhhc0VuY29kaW5nJiYoZS5mYWxsYmFja1RvVW5pY29kZT10aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKGUpKTtyZXR1cm4gZS50b1VuaWNvZGV9aWYoIWUuY29tcG9zaXRlKXJldHVybiBuZXcgVG9Vbmljb2RlTWFwKHRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUoZSkpO2lmKGUuY29tcG9zaXRlJiYoZS5jTWFwLmJ1aWx0SW5DTWFwJiYhKGUuY01hcCBpbnN0YW5jZW9mIElkZW50aXR5Q01hcCl8fCJBZG9iZSI9PT1lLmNpZFN5c3RlbUluZm8/LnJlZ2lzdHJ5JiYoIkdCMSI9PT1lLmNpZFN5c3RlbUluZm8ub3JkZXJpbmd8fCJDTlMxIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IkphcGFuMSI9PT1lLmNpZFN5c3RlbUluZm8ub3JkZXJpbmd8fCJLb3JlYTEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nKSkpe2NvbnN0e3JlZ2lzdHJ5OnQsb3JkZXJpbmc6aX09ZS5jaWRTeXN0ZW1JbmZvLGE9TmFtZS5nZXQoYCR7dH0tJHtpfS1VQ1MyYCkscj1hd2FpdCBDTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmEsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSkscz1bXSxuPVtdO2UuY01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKHQ+NjU1MzUpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7Y29uc3QgaT1yLmxvb2t1cCh0KTtpZihpKXtuLmxlbmd0aD0wO2ZvcihsZXQgZT0wLHQ9aS5sZW5ndGg7ZTx0O2UrPTIpbi5wdXNoKChpLmNoYXJDb2RlQXQoZSk8PDgpK2kuY2hhckNvZGVBdChlKzEpKTtzW2VdPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4ubil9fSkpO3JldHVybiBuZXcgVG9Vbmljb2RlTWFwKHMpfXJldHVybiBuZXcgSWRlbnRpdHlUb1VuaWNvZGVNYXAoZS5maXJzdENoYXIsZS5sYXN0Q2hhcil9YXN5bmMgcmVhZFRvVW5pY29kZShlKXtpZighZSlyZXR1cm4gbnVsbDtpZihlIGluc3RhbmNlb2YgTmFtZSl7Y29uc3QgdD1hd2FpdCBDTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmUsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSk7cmV0dXJuIHQgaW5zdGFuY2VvZiBJZGVudGl0eUNNYXA/bmV3IElkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpOm5ldyBUb1VuaWNvZGVNYXAodC5nZXRNYXAoKSl9aWYoZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pdHJ5e2NvbnN0IHQ9YXdhaXQgQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pO2lmKHQgaW5zdGFuY2VvZiBJZGVudGl0eUNNYXApcmV0dXJuIG5ldyBJZGVudGl0eVRvVW5pY29kZU1hcCgwLDY1NTM1KTtjb25zdCBpPW5ldyBBcnJheSh0Lmxlbmd0aCk7dC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl7aVtlXT1TdHJpbmcuZnJvbUNvZGVQb2ludCh0KTtyZXR1cm59dC5sZW5ndGglMiE9MCYmKHQ9IlwwIit0KTtjb25zdCBhPVtdO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSs9Mil7Y29uc3QgaT10LmNoYXJDb2RlQXQoZSk8PDh8dC5jaGFyQ29kZUF0KGUrMSk7aWYoNTUyOTYhPSg2MzQ4OCZpKSl7YS5wdXNoKGkpO2NvbnRpbnVlfWUrPTI7Y29uc3Qgcj10LmNoYXJDb2RlQXQoZSk8PDh8dC5jaGFyQ29kZUF0KGUrMSk7YS5wdXNoKCgoMTAyMyZpKTw8MTApKygxMDIzJnIpKzY1NTM2KX1pW2VdPVN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmEpfSkpO3JldHVybiBuZXcgVG9Vbmljb2RlTWFwKGkpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbilyZXR1cm4gbnVsbDtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXt3YXJuKGByZWFkVG9Vbmljb2RlIC0gaWdub3JpbmcgVG9Vbmljb2RlIGRhdGE6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH10aHJvdyBlfXJldHVybiBudWxsfXJlYWRDaWRUb0dpZE1hcChlLHQpe2NvbnN0IGk9W107Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7YSsrKXtjb25zdCByPWVbYSsrXTw8OHxlW2FdLHM9YT4+MTsoMCE9PXJ8fHQuaGFzKHMpKSYmKGlbc109cil9cmV0dXJuIGl9ZXh0cmFjdFdpZHRocyhlLHQsaSl7Y29uc3QgYT10aGlzLnhyZWY7bGV0IHI9W10scz0wO2NvbnN0IG49W107bGV0IG87aWYoaS5jb21wb3NpdGUpe2NvbnN0IHQ9ZS5nZXQoIkRXIik7cz0ibnVtYmVyIj09dHlwZW9mIHQ/TWF0aC5jZWlsKHQpOjFlMztjb25zdCBnPWUuZ2V0KCJXIik7aWYoQXJyYXkuaXNBcnJheShnKSlmb3IobGV0IGU9MCx0PWcubGVuZ3RoO2U8dDtlKyspe2xldCB0PWEuZmV0Y2hJZlJlZihnW2UrK10pO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHQpKWJyZWFrO2NvbnN0IGk9YS5mZXRjaElmUmVmKGdbZV0pO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGNvbnN0IGUgb2YgaSl7Y29uc3QgaT1hLmZldGNoSWZSZWYoZSk7Im51bWJlciI9PXR5cGVvZiBpJiYoclt0XT1pKTt0Kyt9ZWxzZXtpZighTnVtYmVyLmlzSW50ZWdlcihpKSlicmVhazt7Y29uc3Qgcz1hLmZldGNoSWZSZWYoZ1srK2VdKTtpZigibnVtYmVyIiE9dHlwZW9mIHMpY29udGludWU7Zm9yKGxldCBlPXQ7ZTw9aTtlKyspcltlXT1zfX19aWYoaS52ZXJ0aWNhbCl7Y29uc3QgdD1lLmdldEFycmF5KCJEVzIiKTtsZXQgaT1pc051bWJlckFycmF5KHQsMik/dDpbODgwLC0xZTNdO289W2lbMV0sLjUqcyxpWzBdXTtpPWUuZ2V0KCJXMiIpO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBlPTAsdD1pLmxlbmd0aDtlPHQ7ZSsrKXtsZXQgdD1hLmZldGNoSWZSZWYoaVtlKytdKTtpZighTnVtYmVyLmlzSW50ZWdlcih0KSlicmVhaztjb25zdCByPWEuZmV0Y2hJZlJlZihpW2VdKTtpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgZT0wLGk9ci5sZW5ndGg7ZTxpO2UrKyl7Y29uc3QgaT1bYS5mZXRjaElmUmVmKHJbZSsrXSksYS5mZXRjaElmUmVmKHJbZSsrXSksYS5mZXRjaElmUmVmKHJbZV0pXTtpc051bWJlckFycmF5KGksbnVsbCkmJihuW3RdPWkpO3QrK31lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHIpKWJyZWFrO3tjb25zdCBzPVthLmZldGNoSWZSZWYoaVsrK2VdKSxhLmZldGNoSWZSZWYoaVsrK2VdKSxhLmZldGNoSWZSZWYoaVsrK2VdKV07aWYoIWlzTnVtYmVyQXJyYXkocyxudWxsKSljb250aW51ZTtmb3IobGV0IGU9dDtlPD1yO2UrKyluW2VdPXN9fX19fWVsc2V7Y29uc3Qgbj1lLmdldCgiV2lkdGhzIik7aWYoQXJyYXkuaXNBcnJheShuKSl7bGV0IGU9aS5maXJzdENoYXI7Zm9yKGNvbnN0IHQgb2Ygbil7Y29uc3QgaT1hLmZldGNoSWZSZWYodCk7Im51bWJlciI9PXR5cGVvZiBpJiYocltlXT1pKTtlKyt9Y29uc3Qgbz10LmdldCgiTWlzc2luZ1dpZHRoIik7cz0ibnVtYmVyIj09dHlwZW9mIG8/bzowfWVsc2V7Y29uc3QgdD1lLmdldCgiQmFzZUZvbnQiKTtpZih0IGluc3RhbmNlb2YgTmFtZSl7Y29uc3QgZT10aGlzLmdldEJhc2VGb250TWV0cmljcyh0Lm5hbWUpO3I9dGhpcy5idWlsZENoYXJDb2RlVG9XaWR0aChlLndpZHRocyxpKTtzPWUuZGVmYXVsdFdpZHRofX19bGV0IGc9ITAsYz1zO2Zvcihjb25zdCBlIGluIHIpe2NvbnN0IHQ9cltlXTtpZih0KWlmKGMpe2lmKGMhPT10KXtnPSExO2JyZWFrfX1lbHNlIGM9dH1nP2kuZmxhZ3N8PVBpOmkuZmxhZ3MmPX5QaTtpLmRlZmF1bHRXaWR0aD1zO2kud2lkdGhzPXI7aS5kZWZhdWx0Vk1ldHJpY3M9bztpLnZtZXRyaWNzPW59aXNTZXJpZkZvbnQoZSl7Y29uc3QgdD1lLnNwbGl0KCItIiwxKVswXTtyZXR1cm4gdCBpbiBBYSgpfHwvc2VyaWYvZ2kudGVzdCh0KX1nZXRCYXNlRm9udE1ldHJpY3MoZSl7bGV0IHQ9MCxpPU9iamVjdC5jcmVhdGUobnVsbCksYT0hMTtsZXQgcj1faSgpW2VdfHxlO2NvbnN0IHM9c2EoKTtyIGluIHN8fChyPXRoaXMuaXNTZXJpZkZvbnQoZSk/IlRpbWVzLVJvbWFuIjoiSGVsdmV0aWNhIik7Y29uc3Qgbj1zW3JdO2lmKCJudW1iZXIiPT10eXBlb2Ygbil7dD1uO2E9ITB9ZWxzZSBpPW4oKTtyZXR1cm57ZGVmYXVsdFdpZHRoOnQsbW9ub3NwYWNlOmEsd2lkdGhzOml9fWJ1aWxkQ2hhckNvZGVUb1dpZHRoKGUsdCl7Y29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpLGE9dC5kaWZmZXJlbmNlcyxyPXQuZGVmYXVsdEVuY29kaW5nO2ZvcihsZXQgdD0wO3Q8MjU2O3QrKyl0IGluIGEmJmVbYVt0XV0/aVt0XT1lW2FbdF1dOnQgaW4gciYmZVtyW3RdXSYmKGlbdF09ZVtyW3RdXSk7cmV0dXJuIGl9cHJlRXZhbHVhdGVGb250KGUpe2NvbnN0IHQ9ZTtsZXQgaT1lLmdldCgiU3VidHlwZSIpO2lmKCEoaSBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTtsZXQgYSxyPSExO2lmKCJUeXBlMCI9PT1pLm5hbWUpe2NvbnN0IHQ9ZS5nZXQoIkRlc2NlbmRhbnRGb250cyIpO2lmKCF0KXRocm93IG5ldyBGb3JtYXRFcnJvcigiRGVzY2VuZGFudCBmb250cyBhcmUgbm90IHNwZWNpZmllZCIpO2lmKCEoKGU9QXJyYXkuaXNBcnJheSh0KT90aGlzLnhyZWYuZmV0Y2hJZlJlZih0WzBdKTp0KWluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnQgaXMgbm90IGEgZGljdGlvbmFyeS4iKTtpPWUuZ2V0KCJTdWJ0eXBlIik7aWYoIShpIGluc3RhbmNlb2YgTmFtZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgU3VidHlwZSIpO3I9ITB9bGV0IHM9ZS5nZXQoIkZpcnN0Q2hhciIpO051bWJlci5pc0ludGVnZXIocyl8fChzPTApO2xldCBuPWUuZ2V0KCJMYXN0Q2hhciIpO051bWJlci5pc0ludGVnZXIobil8fChuPXI/NjU1MzU6MjU1KTtjb25zdCBvPWUuZ2V0KCJGb250RGVzY3JpcHRvciIpLGc9ZS5nZXQoIlRvVW5pY29kZSIpfHx0LmdldCgiVG9Vbmljb2RlIik7aWYobyl7YT1uZXcgTXVybXVySGFzaDNfNjQ7Y29uc3QgaT10LmdldFJhdygiRW5jb2RpbmciKTtpZihpIGluc3RhbmNlb2YgTmFtZSlhLnVwZGF0ZShpLm5hbWUpO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIFJlZilhLnVwZGF0ZShpLnRvU3RyaW5nKCkpO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIERpY3QpZm9yKGNvbnN0IGUgb2YgaS5nZXRSYXdWYWx1ZXMoKSlpZihlIGluc3RhbmNlb2YgTmFtZSlhLnVwZGF0ZShlLm5hbWUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIFJlZilhLnVwZGF0ZShlLnRvU3RyaW5nKCkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3QgdD1lLmxlbmd0aCxpPW5ldyBBcnJheSh0KTtmb3IobGV0IGE9MDthPHQ7YSsrKXtjb25zdCB0PWVbYV07dCBpbnN0YW5jZW9mIE5hbWU/aVthXT10Lm5hbWU6KCJudW1iZXIiPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIFJlZikmJihpW2FdPXQudG9TdHJpbmcoKSl9YS51cGRhdGUoaS5qb2luKCkpfWEudXBkYXRlKGAke3N9LSR7bn1gKTtpZihnIGluc3RhbmNlb2YgQmFzZVN0cmVhbSl7Y29uc3QgZT1nLnN0cnx8Zyx0PWUuYnVmZmVyP25ldyBVaW50OEFycmF5KGUuYnVmZmVyLmJ1ZmZlciwwLGUuYnVmZmVyTGVuZ3RoKTpuZXcgVWludDhBcnJheShlLmJ5dGVzLmJ1ZmZlcixlLnN0YXJ0LGUuZW5kLWUuc3RhcnQpO2EudXBkYXRlKHQpfWVsc2UgZyBpbnN0YW5jZW9mIE5hbWUmJmEudXBkYXRlKGcubmFtZSk7Y29uc3Qgbz1lLmdldCgiV2lkdGhzIil8fHQuZ2V0KCJXaWR0aHMiKTtpZihBcnJheS5pc0FycmF5KG8pKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIG8pKCJudW1iZXIiPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIFJlZikmJmUucHVzaCh0LnRvU3RyaW5nKCkpO2EudXBkYXRlKGUuam9pbigpKX1pZihyKXthLnVwZGF0ZSgiY29tcG9zaXRlRm9udCIpO2NvbnN0IGk9ZS5nZXQoIlciKXx8dC5nZXQoIlciKTtpZihBcnJheS5pc0FycmF5KGkpKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIGkpaWYoIm51bWJlciI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgUmVmKWUucHVzaCh0LnRvU3RyaW5nKCkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7Y29uc3QgaT1bXTtmb3IoY29uc3QgZSBvZiB0KSgibnVtYmVyIj09dHlwZW9mIGV8fGUgaW5zdGFuY2VvZiBSZWYpJiZpLnB1c2goZS50b1N0cmluZygpKTtlLnB1c2goYFske2kuam9pbigpfV1gKX1hLnVwZGF0ZShlLmpvaW4oKSl9Y29uc3Qgcj1lLmdldFJhdygiQ0lEVG9HSURNYXAiKXx8dC5nZXRSYXcoIkNJRFRvR0lETWFwIik7ciBpbnN0YW5jZW9mIE5hbWU/YS51cGRhdGUoci5uYW1lKTpyIGluc3RhbmNlb2YgUmVmP2EudXBkYXRlKHIudG9TdHJpbmcoKSk6ciBpbnN0YW5jZW9mIEJhc2VTdHJlYW0mJmEudXBkYXRlKHIucGVla0J5dGVzKCkpfX1yZXR1cm57ZGVzY3JpcHRvcjpvLGRpY3Q6ZSxiYXNlRGljdDp0LGNvbXBvc2l0ZTpyLHR5cGU6aS5uYW1lLGZpcnN0Q2hhcjpzLGxhc3RDaGFyOm4sdG9Vbmljb2RlOmcsaGFzaDphP2EuaGV4ZGlnZXN0KCk6IiJ9fWFzeW5jIHRyYW5zbGF0ZUZvbnQoe2Rlc2NyaXB0b3I6ZSxkaWN0OnQsYmFzZURpY3Q6aSxjb21wb3NpdGU6YSx0eXBlOnMsZmlyc3RDaGFyOm4sbGFzdENoYXI6byx0b1VuaWNvZGU6Zyxjc3NGb250SW5mbzpjfSl7Y29uc3QgQz0iVHlwZTMiPT09cztpZighZSl7aWYoIUMpe2xldCBlPXQuZ2V0KCJCYXNlRm9udCIpO2lmKCEoZSBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiQmFzZSBmb250IGlzIG5vdCBzcGVjaWZpZWQiKTtlPWUubmFtZS5yZXBsYWNlQWxsKC9bLF9dL2csIi0iKTtjb25zdCBhPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKGUpLHI9ZS5zcGxpdCgiLSIsMSlbMF0sYz0odGhpcy5pc1NlcmlmRm9udChyKT9XaTowKXwoYS5tb25vc3BhY2U/UGk6MCl8KGVhKClbcl0/amk6WGkpLGg9e3R5cGU6cyxuYW1lOmUsbG9hZGVkTmFtZTppLmxvYWRlZE5hbWUsc3lzdGVtRm9udEluZm86bnVsbCx3aWR0aHM6YS53aWR0aHMsZGVmYXVsdFdpZHRoOmEuZGVmYXVsdFdpZHRoLGlzU2ltdWxhdGVkRmxhZ3M6ITAsZmxhZ3M6YyxmaXJzdENoYXI6bixsYXN0Q2hhcjpvLHRvVW5pY29kZTpnLHhIZWlnaHQ6MCxjYXBIZWlnaHQ6MCxpdGFsaWNBbmdsZTowLGlzVHlwZTNGb250OkN9LGw9dC5nZXQoIldpZHRocyIpLFE9Z2V0U3RhbmRhcmRGb250TmFtZShlKTtsZXQgRT1udWxsO2lmKFEpe0U9YXdhaXQgdGhpcy5mZXRjaFN0YW5kYXJkRm9udERhdGEoUSk7aC5pc0ludGVybmFsRm9udD0hIUV9IWguaXNJbnRlcm5hbEZvbnQmJnRoaXMub3B0aW9ucy51c2VTeXN0ZW1Gb250cyYmKGguc3lzdGVtRm9udEluZm89Z2V0Rm9udFN1YnN0aXR1dGlvbih0aGlzLnN5c3RlbUZvbnRDYWNoZSx0aGlzLmlkRmFjdG9yeSx0aGlzLm9wdGlvbnMuc3RhbmRhcmRGb250RGF0YVVybCxlLFEscykpO2NvbnN0IHU9YXdhaXQgdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXModCxoKTtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBlPVtdO2xldCB0PW47Zm9yKGNvbnN0IGkgb2YgbCl7Y29uc3QgYT10aGlzLnhyZWYuZmV0Y2hJZlJlZihpKTsibnVtYmVyIj09dHlwZW9mIGEmJihlW3RdPWEpO3QrK311LndpZHRocz1lfWVsc2UgdS53aWR0aHM9dGhpcy5idWlsZENoYXJDb2RlVG9XaWR0aChhLndpZHRocyx1KTtyZXR1cm4gbmV3IEZvbnQoZSxFLHUpfXtjb25zdCBpPWxvb2t1cE5vcm1hbFJlY3QodC5nZXRBcnJheSgiRm9udEJCb3giKSxbMCwwLDAsMF0pOyhlPW5ldyBEaWN0KG51bGwpKS5zZXQoIkZvbnROYW1lIixOYW1lLmdldChzKSk7ZS5zZXQoIkZvbnRCQm94IixpKX19bGV0IGg9ZS5nZXQoIkZvbnROYW1lIiksbD10LmdldCgiQmFzZUZvbnQiKTsic3RyaW5nIj09dHlwZW9mIGgmJihoPU5hbWUuZ2V0KGgpKTsic3RyaW5nIj09dHlwZW9mIGwmJihsPU5hbWUuZ2V0KGwpKTtjb25zdCBRPWg/Lm5hbWUsRT1sPy5uYW1lO2lmKCFDJiZRIT09RSl7aW5mbyhgVGhlIEZvbnREZXNjcmlwdG9yJ3MgRm9udE5hbWUgaXMgIiR7UX0iIGJ1dCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEZvbnQncyBCYXNlRm9udCAiJHtFfSIuYCk7USYmRSYmKEUuc3RhcnRzV2l0aChRKXx8IWlzS25vd25Gb250TmFtZShRKSYmaXNLbm93bkZvbnROYW1lKEUpKSYmKGg9bnVsbCl9aHx8PWw7aWYoIShoIGluc3RhbmNlb2YgTmFtZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgbmFtZSIpO2xldCB1LGQsZixwLG07dHJ5e3U9ZS5nZXQoIkZvbnRGaWxlIiwiRm9udEZpbGUyIiwiRm9udEZpbGUzIil9Y2F0Y2goZSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGB0cmFuc2xhdGVGb250IC0gZmV0Y2hpbmcgIiR7aC5uYW1lfSIgZm9udCBmaWxlOiAiJHtlfSIuYCk7dT1uZXcgTnVsbFN0cmVhbX1sZXQgeT0hMSx3PW51bGwsYj1udWxsO2lmKHUpe2lmKHUuZGljdCl7Y29uc3QgZT11LmRpY3QuZ2V0KCJTdWJ0eXBlIik7ZSBpbnN0YW5jZW9mIE5hbWUmJihkPWUubmFtZSk7Zj11LmRpY3QuZ2V0KCJMZW5ndGgxIik7cD11LmRpY3QuZ2V0KCJMZW5ndGgyIik7bT11LmRpY3QuZ2V0KCJMZW5ndGgzIil9fWVsc2UgaWYoYyl7Y29uc3QgZT1nZXRYZmFGb250TmFtZShoLm5hbWUpO2lmKGUpe2MuZm9udEZhbWlseT1gJHtjLmZvbnRGYW1pbHl9LVBkZkpTLVhGQWA7Yy5tZXRyaWNzPWUubWV0cmljc3x8bnVsbDt3PWUuZmFjdG9yc3x8bnVsbDt1PWF3YWl0IHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKGUubmFtZSk7eT0hIXU7aT10PWdldFhmYUZvbnREaWN0KGgubmFtZSk7YT0hMH19ZWxzZSBpZighQyl7Y29uc3QgZT1nZXRTdGFuZGFyZEZvbnROYW1lKGgubmFtZSk7aWYoZSl7dT1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShlKTt5PSEhdX0heSYmdGhpcy5vcHRpb25zLnVzZVN5c3RlbUZvbnRzJiYoYj1nZXRGb250U3Vic3RpdHV0aW9uKHRoaXMuc3lzdGVtRm9udENhY2hlLHRoaXMuaWRGYWN0b3J5LHRoaXMub3B0aW9ucy5zdGFuZGFyZEZvbnREYXRhVXJsLGgubmFtZSxlLHMpKX1jb25zdCBEPWxvb2t1cE1hdHJpeCh0LmdldEFycmF5KCJGb250TWF0cml4IiksciksUz1sb29rdXBOb3JtYWxSZWN0KGUuZ2V0QXJyYXkoIkZvbnRCQm94Iil8fHQuZ2V0QXJyYXkoIkZvbnRCQm94Iiksdm9pZCAwKTtsZXQgaz1lLmdldCgiQXNjZW50Iik7Im51bWJlciIhPXR5cGVvZiBrJiYoaz12b2lkIDApO2xldCBSPWUuZ2V0KCJEZXNjZW50Iik7Im51bWJlciIhPXR5cGVvZiBSJiYoUj12b2lkIDApO2xldCBOPWUuZ2V0KCJYSGVpZ2h0Iik7Im51bWJlciIhPXR5cGVvZiBOJiYoTj0wKTtsZXQgRz1lLmdldCgiQ2FwSGVpZ2h0Iik7Im51bWJlciIhPXR5cGVvZiBHJiYoRz0wKTtsZXQgeD1lLmdldCgiRmxhZ3MiKTtOdW1iZXIuaXNJbnRlZ2VyKHgpfHwoeD0wKTtsZXQgVT1lLmdldCgiSXRhbGljQW5nbGUiKTsibnVtYmVyIiE9dHlwZW9mIFUmJihVPTApO2NvbnN0IE09e3R5cGU6cyxuYW1lOmgubmFtZSxzdWJ0eXBlOmQsZmlsZTp1LGxlbmd0aDE6ZixsZW5ndGgyOnAsbGVuZ3RoMzptLGlzSW50ZXJuYWxGb250OnksbG9hZGVkTmFtZTppLmxvYWRlZE5hbWUsY29tcG9zaXRlOmEsZml4ZWRQaXRjaDohMSxmb250TWF0cml4OkQsZmlyc3RDaGFyOm4sbGFzdENoYXI6byx0b1VuaWNvZGU6ZyxiYm94OlMsYXNjZW50OmssZGVzY2VudDpSLHhIZWlnaHQ6TixjYXBIZWlnaHQ6RyxmbGFnczp4LGl0YWxpY0FuZ2xlOlUsaXNUeXBlM0ZvbnQ6Qyxjc3NGb250SW5mbzpjLHNjYWxlRmFjdG9yczp3LHN5c3RlbUZvbnRJbmZvOmJ9O2lmKGEpe2NvbnN0IGU9aS5nZXQoIkVuY29kaW5nIik7ZSBpbnN0YW5jZW9mIE5hbWUmJihNLmNpZEVuY29kaW5nPWUubmFtZSk7Y29uc3QgdD1hd2FpdCBDTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmUsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSk7TS5jTWFwPXQ7TS52ZXJ0aWNhbD1NLmNNYXAudmVydGljYWx9Y29uc3QgTD1hd2FpdCB0aGlzLmV4dHJhY3REYXRhU3RydWN0dXJlcyh0LE0pO3RoaXMuZXh0cmFjdFdpZHRocyh0LGUsTCk7cmV0dXJuIG5ldyBGb250KGgubmFtZSx1LEwpfXN0YXRpYyBidWlsZEZvbnRQYXRocyhlLHQsaSxhKXtmdW5jdGlvbiBidWlsZFBhdGgodCl7Y29uc3Qgcj1gJHtlLmxvYWRlZE5hbWV9X3BhdGhfJHt0fWA7dHJ5e2lmKGUucmVuZGVyZXIuaGFzQnVpbHRQYXRoKHQpKXJldHVybjtpLnNlbmQoImNvbW1vbm9iaiIsW3IsIkZvbnRQYXRoIixlLnJlbmRlcmVyLmdldFBhdGhKcyh0KV0pfWNhdGNoKGUpe2lmKGEuaWdub3JlRXJyb3JzKXt3YXJuKGBidWlsZEZvbnRQYXRocyAtIGlnbm9yaW5nICR7cn0gZ2x5cGg6ICIke2V9Ii5gKTtyZXR1cm59dGhyb3cgZX19Zm9yKGNvbnN0IGUgb2YgdCl7YnVpbGRQYXRoKGUuZm9udENoYXIpO2NvbnN0IHQ9ZS5hY2NlbnQ7dD8uZm9udENoYXImJmJ1aWxkUGF0aCh0LmZvbnRDaGFyKX19c3RhdGljIGdldCBmYWxsYmFja0ZvbnREaWN0KCl7Y29uc3QgZT1uZXcgRGljdDtlLnNldCgiQmFzZUZvbnQiLE5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7ZS5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIkVuY29kaW5nIixOYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO3JldHVybiBzaGFkb3codGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fWNsYXNzIFRyYW5zbGF0ZWRGb250e2NvbnN0cnVjdG9yKHtsb2FkZWROYW1lOmUsZm9udDp0LGRpY3Q6aSxldmFsdWF0b3JPcHRpb25zOmF9KXt0aGlzLmxvYWRlZE5hbWU9ZTt0aGlzLmZvbnQ9dDt0aGlzLmRpY3Q9aTt0aGlzLl9ldmFsdWF0b3JPcHRpb25zPWF8fHhyO3RoaXMudHlwZTNMb2FkZWQ9bnVsbDt0aGlzLnR5cGUzRGVwZW5kZW5jaWVzPXQuaXNUeXBlM0ZvbnQ/bmV3IFNldDpudWxsO3RoaXMuc2VudD0hMX1zZW5kKGUpe2lmKCF0aGlzLnNlbnQpe3RoaXMuc2VudD0hMDtlLnNlbmQoImNvbW1vbm9iaiIsW3RoaXMubG9hZGVkTmFtZSwiRm9udCIsdGhpcy5mb250LmV4cG9ydERhdGEodGhpcy5fZXZhbHVhdG9yT3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzKV0pfX1mYWxsYmFjayhlKXtpZih0aGlzLmZvbnQuZGF0YSl7dGhpcy5mb250LmRpc2FibGVGb250RmFjZT0hMDtQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCx0aGlzLmZvbnQuZ2x5cGhDYWNoZVZhbHVlcyxlLHRoaXMuX2V2YWx1YXRvck9wdGlvbnMpfX1sb2FkVHlwZTNEYXRhKGUsdCxpKXtpZih0aGlzLnR5cGUzTG9hZGVkKXJldHVybiB0aGlzLnR5cGUzTG9hZGVkO2lmKCF0aGlzLmZvbnQuaXNUeXBlM0ZvbnQpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGJlIGEgVHlwZTMgZm9udC4iKTtjb25zdCBhPWUuY2xvbmUoe2lnbm9yZUVycm9yczohMX0pLHI9bmV3IFJlZlNldChlLnR5cGUzRm9udFJlZnMpO3RoaXMuZGljdC5vYmpJZCYmIXIuaGFzKHRoaXMuZGljdC5vYmpJZCkmJnIucHV0KHRoaXMuZGljdC5vYmpJZCk7YS50eXBlM0ZvbnRSZWZzPXI7Y29uc3Qgcz10aGlzLmZvbnQsbj10aGlzLnR5cGUzRGVwZW5kZW5jaWVzO2xldCBvPVByb21pc2UucmVzb2x2ZSgpO2NvbnN0IGc9dGhpcy5kaWN0LmdldCgiQ2hhclByb2NzIiksYz10aGlzLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKXx8dCxDPU9iamVjdC5jcmVhdGUobnVsbCksaD1VdGlsLm5vcm1hbGl6ZVJlY3Qocy5iYm94fHxbMCwwLDAsMF0pLGw9aFsyXS1oWzBdLFE9aFszXS1oWzFdLEU9TWF0aC5oeXBvdChsLFEpO2Zvcihjb25zdCBlIG9mIGcuZ2V0S2V5cygpKW89by50aGVuKCgoKT0+e2NvbnN0IHQ9Zy5nZXQoZSkscj1uZXcgT3BlcmF0b3JMaXN0O3JldHVybiBhLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOnQsdGFzazppLHJlc291cmNlczpjLG9wZXJhdG9yTGlzdDpyfSkudGhlbigoKCk9PntyLmZuQXJyYXlbMF09PT1mZSYmdGhpcy5fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhyLEUpO0NbZV09ci5nZXRJUigpO2Zvcihjb25zdCBlIG9mIHIuZGVwZW5kZW5jaWVzKW4uYWRkKGUpfSkpLmNhdGNoKChmdW5jdGlvbih0KXt3YXJuKGBUeXBlMyBmb250IHJlc291cmNlICIke2V9IiBpcyBub3QgYXZhaWxhYmxlLmApO2NvbnN0IGk9bmV3IE9wZXJhdG9yTGlzdDtDW2VdPWkuZ2V0SVIoKX0pKX0pKTt0aGlzLnR5cGUzTG9hZGVkPW8udGhlbigoKCk9PntzLmNoYXJQcm9jT3BlcmF0b3JMaXN0PUM7aWYodGhpcy5fYmJveCl7cy5pc0NoYXJCQm94PSEwO3MuYmJveD10aGlzLl9iYm94fX0pKTtyZXR1cm4gdGhpcy50eXBlM0xvYWRlZH1fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhlLHQ9TmFOKXtjb25zdCBpPVV0aWwubm9ybWFsaXplUmVjdChlLmFyZ3NBcnJheVswXS5zbGljZSgyKSksYT1pWzJdLWlbMF0scj1pWzNdLWlbMV0scz1NYXRoLmh5cG90KGEscik7aWYoMD09PWF8fDA9PT1yKXtlLmZuQXJyYXkuc3BsaWNlKDAsMSk7ZS5hcmdzQXJyYXkuc3BsaWNlKDAsMSl9ZWxzZSBpZigwPT09dHx8TWF0aC5yb3VuZChzL3QpPj0xMCl7dGhpcy5fYmJveHx8KHRoaXMuX2Jib3g9WzEvMCwxLzAsLTEvMCwtMS8wXSk7dGhpcy5fYmJveFswXT1NYXRoLm1pbih0aGlzLl9iYm94WzBdLGlbMF0pO3RoaXMuX2Jib3hbMV09TWF0aC5taW4odGhpcy5fYmJveFsxXSxpWzFdKTt0aGlzLl9iYm94WzJdPU1hdGgubWF4KHRoaXMuX2Jib3hbMl0saVsyXSk7dGhpcy5fYmJveFszXT1NYXRoLm1heCh0aGlzLl9iYm94WzNdLGlbM10pfWxldCBuPTAsbz1lLmxlbmd0aDtmb3IoO248bzspe3N3aXRjaChlLmZuQXJyYXlbbl0pe2Nhc2UgZmU6YnJlYWs7Y2FzZSBwZTpjYXNlIG1lOmNhc2UgeWU6Y2FzZSB3ZTpjYXNlIGJlOmNhc2UgRGU6Y2FzZSBGZTpjYXNlIFNlOmNhc2Uga2U6Y2FzZSBSZTpjYXNlIE5lOmNhc2UgR2U6Y2FzZSB4ZTpjYXNlIEdBOmUuZm5BcnJheS5zcGxpY2UobiwxKTtlLmFyZ3NBcnJheS5zcGxpY2UobiwxKTtvLS07Y29udGludWU7Y2FzZSBVQTpjb25zdFt0XT1lLmFyZ3NBcnJheVtuXTtsZXQgaT0wLGE9dC5sZW5ndGg7Zm9yKDtpPGE7KXtjb25zdFtlXT10W2ldO3N3aXRjaChlKXtjYXNlIlRSIjpjYXNlIlRSMiI6Y2FzZSJIVCI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOnQuc3BsaWNlKGksMSk7YS0tO2NvbnRpbnVlfWkrK319bisrfX19Y2xhc3MgU3RhdGVNYW5hZ2Vye2NvbnN0cnVjdG9yKGU9bmV3IEV2YWxTdGF0ZSl7dGhpcy5zdGF0ZT1lO3RoaXMuc3RhdGVTdGFjaz1bXX1zYXZlKCl7Y29uc3QgZT10aGlzLnN0YXRlO3RoaXMuc3RhdGVTdGFjay5wdXNoKHRoaXMuc3RhdGUpO3RoaXMuc3RhdGU9ZS5jbG9uZSgpfXJlc3RvcmUoKXtjb25zdCBlPXRoaXMuc3RhdGVTdGFjay5wb3AoKTtlJiYodGhpcy5zdGF0ZT1lKX10cmFuc2Zvcm0oZSl7dGhpcy5zdGF0ZS5jdG09VXRpbC50cmFuc2Zvcm0odGhpcy5zdGF0ZS5jdG0sZSl9fWNsYXNzIFRleHRTdGF0ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkoYSk7dGhpcy5mb250TmFtZT1udWxsO3RoaXMuZm9udFNpemU9MDt0aGlzLmxvYWRlZE5hbWU9bnVsbDt0aGlzLmZvbnQ9bnVsbDt0aGlzLmZvbnRNYXRyaXg9cjt0aGlzLnRleHRNYXRyaXg9YS5zbGljZSgpO3RoaXMudGV4dExpbmVNYXRyaXg9YS5zbGljZSgpO3RoaXMuY2hhclNwYWNpbmc9MDt0aGlzLndvcmRTcGFjaW5nPTA7dGhpcy5sZWFkaW5nPTA7dGhpcy50ZXh0SFNjYWxlPTE7dGhpcy50ZXh0UmlzZT0wfXNldFRleHRNYXRyaXgoZSx0LGksYSxyLHMpe2NvbnN0IG49dGhpcy50ZXh0TWF0cml4O25bMF09ZTtuWzFdPXQ7blsyXT1pO25bM109YTtuWzRdPXI7bls1XT1zfXNldFRleHRMaW5lTWF0cml4KGUsdCxpLGEscixzKXtjb25zdCBuPXRoaXMudGV4dExpbmVNYXRyaXg7blswXT1lO25bMV09dDtuWzJdPWk7blszXT1hO25bNF09cjtuWzVdPXN9dHJhbnNsYXRlVGV4dE1hdHJpeChlLHQpe2NvbnN0IGk9dGhpcy50ZXh0TWF0cml4O2lbNF09aVswXSplK2lbMl0qdCtpWzRdO2lbNV09aVsxXSplK2lbM10qdCtpWzVdfXRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KGUsdCl7Y29uc3QgaT10aGlzLnRleHRMaW5lTWF0cml4O2lbNF09aVswXSplK2lbMl0qdCtpWzRdO2lbNV09aVsxXSplK2lbM10qdCtpWzVdfWNhcnJpYWdlUmV0dXJuKCl7dGhpcy50cmFuc2xhdGVUZXh0TGluZU1hdHJpeCgwLC10aGlzLmxlYWRpbmcpO3RoaXMudGV4dE1hdHJpeD10aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCl9Y2xvbmUoKXtjb25zdCBlPU9iamVjdC5jcmVhdGUodGhpcyk7ZS50ZXh0TWF0cml4PXRoaXMudGV4dE1hdHJpeC5zbGljZSgpO2UudGV4dExpbmVNYXRyaXg9dGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpO2UuZm9udE1hdHJpeD10aGlzLmZvbnRNYXRyaXguc2xpY2UoKTtyZXR1cm4gZX19Y2xhc3MgRXZhbFN0YXRle2NvbnN0cnVjdG9yKCl7dGhpcy5jdG09bmV3IEZsb2F0MzJBcnJheShhKTt0aGlzLmZvbnQ9bnVsbDt0aGlzLnRleHRSZW5kZXJpbmdNb2RlPWI7dGhpcy5fZmlsbENvbG9yU3BhY2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7dGhpcy5fc3Ryb2tlQ29sb3JTcGFjZT1Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTt0aGlzLnBhdHRlcm5GaWxsQ29sb3JTcGFjZT1udWxsO3RoaXMucGF0dGVyblN0cm9rZUNvbG9yU3BhY2U9bnVsbH1nZXQgZmlsbENvbG9yU3BhY2UoKXtyZXR1cm4gdGhpcy5fZmlsbENvbG9yU3BhY2V9c2V0IGZpbGxDb2xvclNwYWNlKGUpe3RoaXMuX2ZpbGxDb2xvclNwYWNlPXRoaXMucGF0dGVybkZpbGxDb2xvclNwYWNlPWV9Z2V0IHN0cm9rZUNvbG9yU3BhY2UoKXtyZXR1cm4gdGhpcy5fc3Ryb2tlQ29sb3JTcGFjZX1zZXQgc3Ryb2tlQ29sb3JTcGFjZShlKXt0aGlzLl9zdHJva2VDb2xvclNwYWNlPXRoaXMucGF0dGVyblN0cm9rZUNvbG9yU3BhY2U9ZX1jbG9uZSgpe3JldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpfX1jbGFzcyBFdmFsdWF0b3JQcmVwcm9jZXNzb3J7c3RhdGljIGdldCBvcE1hcCgpe3JldHVybiBzaGFkb3codGhpcywib3BNYXAiLE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx7dzp7aWQ6RkEsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sSjp7aWQ6U0EsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sajp7aWQ6a0EsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sTTp7aWQ6UkEsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZDp7aWQ6TkEsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0scmk6e2lkOkdBLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGk6e2lkOnhBLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGdzOntpZDpVQSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxxOntpZDpNQSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxROntpZDpMQSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxjbTp7aWQ6SEEsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sbTp7aWQ6SkEsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sbDp7aWQ6dkEsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sYzp7aWQ6WUEsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sdjp7aWQ6VEEsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0seTp7aWQ6S0EsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0saDp7aWQ6cUEsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0scmU6e2lkOk9BLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LFM6e2lkOlBBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LHM6e2lkOldBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGY6e2lkOmpBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEY6e2lkOmpBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LCJmKiI6e2lkOlhBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEI6e2lkOlpBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LCJCKiI6e2lkOlZBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGI6e2lkOl9BLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LCJiKiI6e2lkOnpBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LG46e2lkOiRBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LFc6e2lkOkFlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LCJXKiI6e2lkOmVlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEJUOntpZDp0ZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxFVDp7aWQ6aWUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sVGM6e2lkOmFlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFR3OntpZDpyZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxUejp7aWQ6c2UsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVEw6e2lkOm5lLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFRmOntpZDpvZSxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxUcjp7aWQ6Z2UsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVHM6e2lkOkllLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFRkOntpZDpjZSxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxURDp7aWQ6Q2UsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sVG06e2lkOmhlLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LCJUKiI6e2lkOmxlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LFRqOntpZDpCZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxUSjp7aWQ6UWUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sIiciOntpZDpFZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSwnIic6e2lkOnVlLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGQwOntpZDpkZSxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxkMTp7aWQ6ZmUsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sQ1M6e2lkOnBlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGNzOntpZDptZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxTQzp7aWQ6eWUsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH0sU0NOOntpZDp3ZSxudW1BcmdzOjMzLHZhcmlhYmxlQXJnczohMH0sc2M6e2lkOmJlLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITB9LHNjbjp7aWQ6RGUsbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9LEc6e2lkOkZlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGc6e2lkOlNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFJHOntpZDprZSxudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfSxyZzp7aWQ6UmUsbnVtQXJnczozLHZhcmlhYmxlQXJnczohMX0sSzp7aWQ6TmUsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sazp7aWQ6R2UsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sc2g6e2lkOnhlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LEJJOntpZDpVZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxJRDp7aWQ6TWUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sRUk6e2lkOkxlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LERvOntpZDpIZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxNUDp7aWQ6SmUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sRFA6e2lkOnZlLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LEJNQzp7aWQ6WWUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sQkRDOntpZDpUZSxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxFTUM6e2lkOktlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEJYOntpZDpxZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxFWDp7aWQ6T2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sQk06bnVsbCxCRDpudWxsLHRydWU6bnVsbCxmYTpudWxsLGZhbDpudWxsLGZhbHM6bnVsbCxmYWxzZTpudWxsLG51Om51bGwsbnVsOm51bGwsbnVsbDpudWxsfSkpfXN0YXRpYyBNQVhfSU5WQUxJRF9QQVRIX09QUz0xMDtjb25zdHJ1Y3RvcihlLHQsaT1uZXcgU3RhdGVNYW5hZ2VyKXt0aGlzLnBhcnNlcj1uZXcgUGFyc2VyKHtsZXhlcjpuZXcgTGV4ZXIoZSxFdmFsdWF0b3JQcmVwcm9jZXNzb3Iub3BNYXApLHhyZWY6dH0pO3RoaXMuc3RhdGVNYW5hZ2VyPWk7dGhpcy5ub25Qcm9jZXNzZWRBcmdzPVtdO3RoaXMuX2lzUGF0aE9wPSExO3RoaXMuX251bUludmFsaWRQYXRoT1BTPTB9Z2V0IHNhdmVkU3RhdGVzRGVwdGgoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuc3RhdGVTdGFjay5sZW5ndGh9cmVhZChlKXtsZXQgdD1lLmFyZ3M7Zm9yKDs7KXtjb25zdCBpPXRoaXMucGFyc2VyLmdldE9iaigpO2lmKGkgaW5zdGFuY2VvZiBDbWQpe2NvbnN0IGE9aS5jbWQscj1FdmFsdWF0b3JQcmVwcm9jZXNzb3Iub3BNYXBbYV07aWYoIXIpe3dhcm4oYFVua25vd24gY29tbWFuZCAiJHthfSIuYCk7Y29udGludWV9Y29uc3Qgcz1yLmlkLG49ci5udW1BcmdzO2xldCBvPW51bGwhPT10P3QubGVuZ3RoOjA7dGhpcy5faXNQYXRoT3B8fCh0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wKTt0aGlzLl9pc1BhdGhPcD1zPj1KQSYmczw9JEE7aWYoci52YXJpYWJsZUFyZ3Mpbz5uJiZpbmZvKGBDb21tYW5kICR7YX06IGV4cGVjdGVkIFswLCAke259XSBhcmdzLCBidXQgcmVjZWl2ZWQgJHtvfSBhcmdzLmApO2Vsc2V7aWYobyE9PW4pe2NvbnN0IGU9dGhpcy5ub25Qcm9jZXNzZWRBcmdzO2Zvcig7bz5uOyl7ZS5wdXNoKHQuc2hpZnQoKSk7by0tfWZvcig7bzxuJiYwIT09ZS5sZW5ndGg7KXtudWxsPT09dCYmKHQ9W10pO3QudW5zaGlmdChlLnBvcCgpKTtvKyt9fWlmKG88bil7Y29uc3QgZT1gY29tbWFuZCAke2F9OiBleHBlY3RlZCAke259IGFyZ3MsIGJ1dCByZWNlaXZlZCAke299IGFyZ3MuYDtpZih0aGlzLl9pc1BhdGhPcCYmKyt0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz5FdmFsdWF0b3JQcmVwcm9jZXNzb3IuTUFYX0lOVkFMSURfUEFUSF9PUFMpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkICR7ZX1gKTt3YXJuKGBTa2lwcGluZyAke2V9YCk7bnVsbCE9PXQmJih0Lmxlbmd0aD0wKTtjb250aW51ZX19dGhpcy5wcmVwcm9jZXNzQ29tbWFuZChzLHQpO2UuZm49cztlLmFyZ3M9dDtyZXR1cm4hMH1pZihpPT09RHQpcmV0dXJuITE7aWYobnVsbCE9PWkpe251bGw9PT10JiYodD1bXSk7dC5wdXNoKGkpO2lmKHQubGVuZ3RoPjMzKXRocm93IG5ldyBGb3JtYXRFcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIil9fX1wcmVwcm9jZXNzQ29tbWFuZChlLHQpe3N3aXRjaCgwfGUpe2Nhc2UgTUE6dGhpcy5zdGF0ZU1hbmFnZXIuc2F2ZSgpO2JyZWFrO2Nhc2UgTEE6dGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpO2JyZWFrO2Nhc2UgSEE6dGhpcy5zdGF0ZU1hbmFnZXIudHJhbnNmb3JtKHQpfX19Y2xhc3MgRGVmYXVsdEFwcGVhcmFuY2VFdmFsdWF0b3IgZXh0ZW5kcyBFdmFsdWF0b3JQcmVwcm9jZXNzb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIobmV3IFN0cmluZ1N0cmVhbShlKSl9cGFyc2UoKXtjb25zdCBlPXtmbjowLGFyZ3M6W119LHQ9e2ZvbnRTaXplOjAsZm9udE5hbWU6IiIsZm9udENvbG9yOm5ldyBVaW50OENsYW1wZWRBcnJheSgzKX07dHJ5e2Zvcig7Oyl7ZS5hcmdzLmxlbmd0aD0wO2lmKCF0aGlzLnJlYWQoZSkpYnJlYWs7aWYoMCE9PXRoaXMuc2F2ZWRTdGF0ZXNEZXB0aCljb250aW51ZTtjb25zdHtmbjppLGFyZ3M6YX09ZTtzd2l0Y2goMHxpKXtjYXNlIG9lOmNvbnN0W2UsaV09YTtlIGluc3RhbmNlb2YgTmFtZSYmKHQuZm9udE5hbWU9ZS5uYW1lKTsibnVtYmVyIj09dHlwZW9mIGkmJmk+MCYmKHQuZm9udFNpemU9aSk7YnJlYWs7Y2FzZSBSZTpDb2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oYSwwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2UgU2U6Q29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShhLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBHZTpDb2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKGEsMCx0LmZvbnRDb2xvciwwKX19fWNhdGNoKGUpe3dhcm4oYHBhcnNlRGVmYXVsdEFwcGVhcmFuY2UgLSBpZ25vcmluZyBlcnJvcnM6ICIke2V9Ii5gKX1yZXR1cm4gdH19ZnVuY3Rpb24gcGFyc2VEZWZhdWx0QXBwZWFyYW5jZShlKXtyZXR1cm4gbmV3IERlZmF1bHRBcHBlYXJhbmNlRXZhbHVhdG9yKGUpLnBhcnNlKCl9Y2xhc3MgQXBwZWFyYW5jZVN0cmVhbUV2YWx1YXRvciBleHRlbmRzIEV2YWx1YXRvclByZXByb2Nlc3Nvcntjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoZSk7dGhpcy5zdHJlYW09ZTt0aGlzLmV2YWx1YXRvck9wdGlvbnM9dDt0aGlzLnhyZWY9aTt0aGlzLnJlc291cmNlcz1lLmRpY3Q/LmdldCgiUmVzb3VyY2VzIil9cGFyc2UoKXtjb25zdCBlPXtmbjowLGFyZ3M6W119O2xldCB0PXtzY2FsZUZhY3RvcjoxLGZvbnRTaXplOjAsZm9udE5hbWU6IiIsZm9udENvbG9yOm5ldyBVaW50OENsYW1wZWRBcnJheSgzKSxmaWxsQ29sb3JTcGFjZTpDb2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheX0saT0hMTtjb25zdCBhPVtdO3RyeXtmb3IoOzspe2UuYXJncy5sZW5ndGg9MDtpZihpfHwhdGhpcy5yZWFkKGUpKWJyZWFrO2NvbnN0e2ZuOnIsYXJnczpzfT1lO3N3aXRjaCgwfHIpe2Nhc2UgTUE6YS5wdXNoKHtzY2FsZUZhY3Rvcjp0LnNjYWxlRmFjdG9yLGZvbnRTaXplOnQuZm9udFNpemUsZm9udE5hbWU6dC5mb250TmFtZSxmb250Q29sb3I6dC5mb250Q29sb3Iuc2xpY2UoKSxmaWxsQ29sb3JTcGFjZTp0LmZpbGxDb2xvclNwYWNlfSk7YnJlYWs7Y2FzZSBMQTp0PWEucG9wKCl8fHQ7YnJlYWs7Y2FzZSBoZTp0LnNjYWxlRmFjdG9yKj1NYXRoLmh5cG90KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBvZTpjb25zdFtlLHJdPXM7ZSBpbnN0YW5jZW9mIE5hbWUmJih0LmZvbnROYW1lPWUubmFtZSk7Im51bWJlciI9PXR5cGVvZiByJiZyPjAmJih0LmZvbnRTaXplPXIqdC5zY2FsZUZhY3Rvcik7YnJlYWs7Y2FzZSBtZTp0LmZpbGxDb2xvclNwYWNlPUNvbG9yU3BhY2UucGFyc2Uoe2NzOnNbMF0seHJlZjp0aGlzLnhyZWYscmVzb3VyY2VzOnRoaXMucmVzb3VyY2VzLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksbG9jYWxDb2xvclNwYWNlQ2FjaGU6dGhpcy5fbG9jYWxDb2xvclNwYWNlQ2FjaGV9KTticmVhaztjYXNlIGJlOnQuZmlsbENvbG9yU3BhY2UuZ2V0UmdiSXRlbShzLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBSZTpDb2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0ocywwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2UgU2U6Q29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShzLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBHZTpDb2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKHMsMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIEJlOmNhc2UgUWU6Y2FzZSBFZTpjYXNlIHVlOmk9ITB9fX1jYXRjaChlKXt3YXJuKGBwYXJzZUFwcGVhcmFuY2VTdHJlYW0gLSBpZ25vcmluZyBlcnJvcnM6ICIke2V9Ii5gKX10aGlzLnN0cmVhbS5yZXNldCgpO2RlbGV0ZSB0LnNjYWxlRmFjdG9yO2RlbGV0ZSB0LmZpbGxDb2xvclNwYWNlO3JldHVybiB0fWdldCBfbG9jYWxDb2xvclNwYWNlQ2FjaGUoKXtyZXR1cm4gc2hhZG93KHRoaXMsIl9sb2NhbENvbG9yU3BhY2VDYWNoZSIsbmV3IExvY2FsQ29sb3JTcGFjZUNhY2hlKX1nZXQgX3BkZkZ1bmN0aW9uRmFjdG9yeSgpe3JldHVybiBzaGFkb3codGhpcywiX3BkZkZ1bmN0aW9uRmFjdG9yeSIsbmV3IFBERkZ1bmN0aW9uRmFjdG9yeSh7eHJlZjp0aGlzLnhyZWYsaXNFdmFsU3VwcG9ydGVkOnRoaXMuZXZhbHVhdG9yT3B0aW9ucy5pc0V2YWxTdXBwb3J0ZWR9KSl9fWZ1bmN0aW9uIGdldFBkZkNvbG9yKGUsdCl7aWYoZVswXT09PWVbMV0mJmVbMV09PT1lWzJdKXtyZXR1cm5gJHtudW1iZXJUb1N0cmluZyhlWzBdLzI1NSl9ICR7dD8iZyI6IkcifWB9cmV0dXJuIEFycmF5LmZyb20oZSwoZT0+bnVtYmVyVG9TdHJpbmcoZS8yNTUpKSkuam9pbigiICIpKyIgIisodD8icmciOiJSRyIpfWNsYXNzIEZha2VVbmljb2RlRm9udHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMueHJlZj1lO3RoaXMud2lkdGhzPW51bGw7dGhpcy5maXJzdENoYXI9MS8wO3RoaXMubGFzdENoYXI9LTEvMDt0aGlzLmZvbnRGYW1pbHk9dDtjb25zdCBpPW5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKTt0aGlzLmN0eE1lYXN1cmU9aS5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pO0Zha2VVbmljb2RlRm9udC5fZm9udE5hbWVJZHx8KEZha2VVbmljb2RlRm9udC5fZm9udE5hbWVJZD0xKTt0aGlzLmZvbnROYW1lPU5hbWUuZ2V0KGBJbnZhbGlkUERGanNGb250XyR7dH1fJHtGYWtlVW5pY29kZUZvbnQuX2ZvbnROYW1lSWQrK31gKX1nZXQgZm9udERlc2NyaXB0b3JSZWYoKXtpZighRmFrZVVuaWNvZGVGb250Ll9mb250RGVzY3JpcHRvclJlZil7Y29uc3QgZT1uZXcgRGljdCh0aGlzLnhyZWYpO2Uuc2V0KCJUeXBlIixOYW1lLmdldCgiRm9udERlc2NyaXB0b3IiKSk7ZS5zZXQoIkZvbnROYW1lIix0aGlzLmZvbnROYW1lKTtlLnNldCgiRm9udEZhbWlseSIsIk15cmlhZFBybyBSZWd1bGFyIik7ZS5zZXQoIkZvbnRCQm94IixbMCwwLDAsMF0pO2Uuc2V0KCJGb250U3RyZXRjaCIsTmFtZS5nZXQoIk5vcm1hbCIpKTtlLnNldCgiRm9udFdlaWdodCIsNDAwKTtlLnNldCgiSXRhbGljQW5nbGUiLDApO0Zha2VVbmljb2RlRm9udC5fZm9udERlc2NyaXB0b3JSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYoZSl9cmV0dXJuIEZha2VVbmljb2RlRm9udC5fZm9udERlc2NyaXB0b3JSZWZ9Z2V0IGRlc2NlbmRhbnRGb250UmVmKCl7Y29uc3QgZT1uZXcgRGljdCh0aGlzLnhyZWYpO2Uuc2V0KCJCYXNlRm9udCIsdGhpcy5mb250TmFtZSk7ZS5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJGb250IikpO2Uuc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiQ0lERm9udFR5cGUwIikpO2Uuc2V0KCJDSURUb0dJRE1hcCIsTmFtZS5nZXQoIklkZW50aXR5IikpO2Uuc2V0KCJGaXJzdENoYXIiLHRoaXMuZmlyc3RDaGFyKTtlLnNldCgiTGFzdENoYXIiLHRoaXMubGFzdENoYXIpO2Uuc2V0KCJGb250RGVzY3JpcHRvciIsdGhpcy5mb250RGVzY3JpcHRvclJlZik7ZS5zZXQoIkRXIiwxZTMpO2NvbnN0IHQ9W10saT1bLi4udGhpcy53aWR0aHMuZW50cmllcygpXS5zb3J0KCk7bGV0IGE9bnVsbCxyPW51bGw7Zm9yKGNvbnN0W2Usc11vZiBpKWlmKGEpaWYoZT09PWErci5sZW5ndGgpci5wdXNoKHMpO2Vsc2V7dC5wdXNoKGEscik7YT1lO3I9W3NdfWVsc2V7YT1lO3I9W3NdfWEmJnQucHVzaChhLHIpO2Uuc2V0KCJXIix0KTtjb25zdCBzPW5ldyBEaWN0KHRoaXMueHJlZik7cy5zZXQoIk9yZGVyaW5nIiwiSWRlbnRpdHkiKTtzLnNldCgiUmVnaXN0cnkiLCJBZG9iZSIpO3Muc2V0KCJTdXBwbGVtZW50IiwwKTtlLnNldCgiQ0lEU3lzdGVtSW5mbyIscyk7cmV0dXJuIHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfWdldCBiYXNlRm9udFJlZigpe2NvbnN0IGU9bmV3IERpY3QodGhpcy54cmVmKTtlLnNldCgiQmFzZUZvbnQiLHRoaXMuZm9udE5hbWUpO2Uuc2V0KCJUeXBlIixOYW1lLmdldCgiRm9udCIpKTtlLnNldCgiU3VidHlwZSIsTmFtZS5nZXQoIlR5cGUwIikpO2Uuc2V0KCJFbmNvZGluZyIsTmFtZS5nZXQoIklkZW50aXR5LUgiKSk7ZS5zZXQoIkRlc2NlbmRhbnRGb250cyIsW3RoaXMuZGVzY2VuZGFudEZvbnRSZWZdKTtlLnNldCgiVG9Vbmljb2RlIixOYW1lLmdldCgiSWRlbnRpdHktSCIpKTtyZXR1cm4gdGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYoZSl9Z2V0IHJlc291cmNlcygpe2NvbnN0IGU9bmV3IERpY3QodGhpcy54cmVmKSx0PW5ldyBEaWN0KHRoaXMueHJlZik7dC5zZXQodGhpcy5mb250TmFtZS5uYW1lLHRoaXMuYmFzZUZvbnRSZWYpO2Uuc2V0KCJGb250Iix0KTtyZXR1cm4gZX1fY3JlYXRlQ29udGV4dCgpe3RoaXMud2lkdGhzPW5ldyBNYXA7dGhpcy5jdHhNZWFzdXJlLmZvbnQ9YDEwMDBweCAke3RoaXMuZm9udEZhbWlseX1gO3JldHVybiB0aGlzLmN0eE1lYXN1cmV9Y3JlYXRlRm9udFJlc291cmNlcyhlKXtjb25zdCB0PXRoaXMuX2NyZWF0ZUNvbnRleHQoKTtmb3IoY29uc3QgaSBvZiBlLnNwbGl0KC9cclxuP3xcbi8pKWZvcihjb25zdCBlIG9mIGkuc3BsaXQoIiIpKXtjb25zdCBpPWUuY2hhckNvZGVBdCgwKTtpZih0aGlzLndpZHRocy5oYXMoaSkpY29udGludWU7Y29uc3QgYT10Lm1lYXN1cmVUZXh0KGUpLHI9TWF0aC5jZWlsKGEud2lkdGgpO3RoaXMud2lkdGhzLnNldChpLHIpO3RoaXMuZmlyc3RDaGFyPU1hdGgubWluKGksdGhpcy5maXJzdENoYXIpO3RoaXMubGFzdENoYXI9TWF0aC5tYXgoaSx0aGlzLmxhc3RDaGFyKX1yZXR1cm4gdGhpcy5yZXNvdXJjZXN9c3RhdGljIGdldEZpcnN0UG9zaXRpb25JbmZvKGUsdCxpKXtjb25zdFthLHIsbyxnXT1lO2xldCBjPW8tYSxDPWctcjt0JTE4MCE9MCYmKFtjLENdPVtDLGNdKTtjb25zdCBoPXMqaTtyZXR1cm57Y29vcmRzOlswLEMrbippLWhdLGJib3g6WzAsMCxjLENdLG1hdHJpeDowIT09dD9nZXRSb3RhdGlvbk1hdHJpeCh0LEMsaCk6dm9pZCAwfX1jcmVhdGVBcHBlYXJhbmNlKGUsdCxpLGEscixvKXtjb25zdCBnPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSxjPVtdO2xldCBDPS0xLzA7Zm9yKGNvbnN0IHQgb2YgZS5zcGxpdCgvXHJcbj98XG4vKSl7Yy5wdXNoKHQpO2NvbnN0IGU9Zy5tZWFzdXJlVGV4dCh0KS53aWR0aDtDPU1hdGgubWF4KEMsZSk7Zm9yKGNvbnN0IGUgb2YgY29kZVBvaW50SXRlcih0KSl7Y29uc3QgdD1TdHJpbmcuZnJvbUNvZGVQb2ludChlKTtsZXQgaT10aGlzLndpZHRocy5nZXQoZSk7aWYodm9pZCAwPT09aSl7Y29uc3QgYT1nLm1lYXN1cmVUZXh0KHQpO2k9TWF0aC5jZWlsKGEud2lkdGgpO3RoaXMud2lkdGhzLnNldChlLGkpO3RoaXMuZmlyc3RDaGFyPU1hdGgubWluKGUsdGhpcy5maXJzdENoYXIpO3RoaXMubGFzdENoYXI9TWF0aC5tYXgoZSx0aGlzLmxhc3RDaGFyKX19fUMqPWEvMWUzO2NvbnN0W2gsbCxRLEVdPXQ7bGV0IHU9US1oLGQ9RS1sO2klMTgwIT0wJiYoW3UsZF09W2QsdV0pO2xldCBmPTE7Qz51JiYoZj11L0MpO2xldCBwPTE7Y29uc3QgbT1zKmEseT1uKmEsdz1tKmMubGVuZ3RoO3c+ZCYmKHA9ZC93KTtjb25zdCBiPWEqTWF0aC5taW4oZixwKSxEPVsicSIsYDAgMCAke251bWJlclRvU3RyaW5nKHUpfSAke251bWJlclRvU3RyaW5nKGQpfSByZSBXIG5gLCJCVCIsYDEgMCAwIDEgMCAke251bWJlclRvU3RyaW5nKGQreSl9IFRtIDAgVGMgJHtnZXRQZGZDb2xvcihyLCEwKX1gLGAvJHt0aGlzLmZvbnROYW1lLm5hbWV9ICR7bnVtYmVyVG9TdHJpbmcoYil9IFRmYF0se3Jlc291cmNlczpTfT10aGlzO2lmKDEhPT0obz0ibnVtYmVyIj09dHlwZW9mIG8mJm8+PTAmJm88PTE/bzoxKSl7RC5wdXNoKCIvUjAgZ3MiKTtjb25zdCBlPW5ldyBEaWN0KHRoaXMueHJlZiksdD1uZXcgRGljdCh0aGlzLnhyZWYpO3Quc2V0KCJjYSIsbyk7dC5zZXQoIkNBIixvKTt0LnNldCgiVHlwZSIsTmFtZS5nZXQoIkV4dEdTdGF0ZSIpKTtlLnNldCgiUjAiLHQpO1Muc2V0KCJFeHRHU3RhdGUiLGUpfWNvbnN0IGs9bnVtYmVyVG9TdHJpbmcobSk7Zm9yKGNvbnN0IGUgb2YgYylELnB1c2goYDAgLSR7a30gVGQgPCR7c3RyaW5nVG9VVEYxNkhleFN0cmluZyhlKX0+IFRqYCk7RC5wdXNoKCJFVCIsIlEiKTtjb25zdCBSPUQuam9pbigiXG4iKSxOPW5ldyBEaWN0KHRoaXMueHJlZik7Ti5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJGb3JtIikpO04uc2V0KCJUeXBlIixOYW1lLmdldCgiWE9iamVjdCIpKTtOLnNldCgiQkJveCIsWzAsMCx1LGRdKTtOLnNldCgiTGVuZ3RoIixSLmxlbmd0aCk7Ti5zZXQoIlJlc291cmNlcyIsUyk7aWYoaSl7Y29uc3QgZT1nZXRSb3RhdGlvbk1hdHJpeChpLHUsZCk7Ti5zZXQoIk1hdHJpeCIsZSl9Y29uc3QgRz1uZXcgU3RyaW5nU3RyZWFtKFIpO0cuZGljdD1OO3JldHVybiBHfX1jbGFzcyBOYW1lT3JOdW1iZXJUcmVle2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLnJvb3Q9ZTt0aGlzLnhyZWY9dDt0aGlzLl90eXBlPWl9Z2V0QWxsKCl7Y29uc3QgZT1uZXcgTWFwO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7Y29uc3QgdD10aGlzLnhyZWYsaT1uZXcgUmVmU2V0O2kucHV0KHRoaXMucm9vdCk7Y29uc3QgYT1bdGhpcy5yb290XTtmb3IoO2EubGVuZ3RoPjA7KXtjb25zdCByPXQuZmV0Y2hJZlJlZihhLnNoaWZ0KCkpO2lmKCEociBpbnN0YW5jZW9mIERpY3QpKWNvbnRpbnVlO2lmKHIuaGFzKCJLaWRzIikpe2NvbnN0IGU9ci5nZXQoIktpZHMiKTtpZighQXJyYXkuaXNBcnJheShlKSljb250aW51ZTtmb3IoY29uc3QgdCBvZiBlKXtpZihpLmhhcyh0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYER1cGxpY2F0ZSBlbnRyeSBpbiAiJHt0aGlzLl90eXBlfSIgdHJlZS5gKTthLnB1c2godCk7aS5wdXQodCl9Y29udGludWV9Y29uc3Qgcz1yLmdldCh0aGlzLl90eXBlKTtpZihBcnJheS5pc0FycmF5KHMpKWZvcihsZXQgaT0wLGE9cy5sZW5ndGg7aTxhO2krPTIpZS5zZXQodC5mZXRjaElmUmVmKHNbaV0pLHQuZmV0Y2hJZlJlZihzW2krMV0pKX1yZXR1cm4gZX1nZXRSYXcoZSl7aWYoIXRoaXMucm9vdClyZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMueHJlZjtsZXQgaT10LmZldGNoSWZSZWYodGhpcy5yb290KSxhPTA7Zm9yKDtpLmhhcygiS2lkcyIpOyl7aWYoKythPjEwKXt3YXJuKGBTZWFyY2ggZGVwdGggbGltaXQgcmVhY2hlZCBmb3IgIiR7dGhpcy5fdHlwZX0iIHRyZWUuYCk7cmV0dXJuIG51bGx9Y29uc3Qgcj1pLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiBudWxsO2xldCBzPTAsbj1yLmxlbmd0aC0xO2Zvcig7czw9bjspe2NvbnN0IGE9cytuPj4xLG89dC5mZXRjaElmUmVmKHJbYV0pLGc9by5nZXQoIkxpbWl0cyIpO2lmKGU8dC5mZXRjaElmUmVmKGdbMF0pKW49YS0xO2Vsc2V7aWYoIShlPnQuZmV0Y2hJZlJlZihnWzFdKSkpe2k9bzticmVha31zPWErMX19aWYocz5uKXJldHVybiBudWxsfWNvbnN0IHI9aS5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShyKSl7bGV0IGk9MCxhPXIubGVuZ3RoLTI7Zm9yKDtpPD1hOyl7Y29uc3Qgcz1pK2E+PjEsbj1zKygxJnMpLG89dC5mZXRjaElmUmVmKHJbbl0pO2lmKGU8bylhPW4tMjtlbHNle2lmKCEoZT5vKSlyZXR1cm4gcltuKzFdO2k9bisyfX19cmV0dXJuIG51bGx9Z2V0KGUpe3JldHVybiB0aGlzLnhyZWYuZmV0Y2hJZlJlZih0aGlzLmdldFJhdyhlKSl9fWNsYXNzIE5hbWVUcmVlIGV4dGVuZHMgTmFtZU9yTnVtYmVyVHJlZXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCwiTmFtZXMiKX19Y2xhc3MgTnVtYmVyVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsIk51bXMiKX19ZnVuY3Rpb24gY2xlYXJHbG9iYWxDYWNoZXMoKXshZnVuY3Rpb24gY2xlYXJQYXR0ZXJuQ2FjaGVzKCl7a2E9T2JqZWN0LmNyZWF0ZShudWxsKX0oKTshZnVuY3Rpb24gY2xlYXJQcmltaXRpdmVDYWNoZXMoKXtGdD1PYmplY3QuY3JlYXRlKG51bGwpO1N0PU9iamVjdC5jcmVhdGUobnVsbCk7a3Q9T2JqZWN0LmNyZWF0ZShudWxsKX0oKTshZnVuY3Rpb24gY2xlYXJVbmljb2RlQ2FjaGVzKCl7cWkuY2xlYXIoKX0oKTtKcHhJbWFnZS5jbGVhbnVwKCl9ZnVuY3Rpb24gcGlja1BsYXRmb3JtSXRlbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERpY3Q/ZS5oYXMoIlVGIik/ZS5nZXQoIlVGIik6ZS5oYXMoIkYiKT9lLmdldCgiRiIpOmUuaGFzKCJVbml4Iik/ZS5nZXQoIlVuaXgiKTplLmhhcygiTWFjIik/ZS5nZXQoIk1hYyIpOmUuaGFzKCJET1MiKT9lLmdldCgiRE9TIik6bnVsbDpudWxsfWNsYXNzIEZpbGVTcGVjeyNTPSExO2NvbnN0cnVjdG9yKGUsdCxpPSExKXtpZihlIGluc3RhbmNlb2YgRGljdCl7dGhpcy54cmVmPXQ7dGhpcy5yb290PWU7ZS5oYXMoIkZTIikmJih0aGlzLmZzPWUuZ2V0KCJGUyIpKTtlLmhhcygiUkYiKSYmd2FybigiUmVsYXRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIik7aXx8KGUuaGFzKCJFRiIpP3RoaXMuI1M9ITA6d2FybigiTm9uLWVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKSl9fWdldCBmaWxlbmFtZSgpe2xldCBlPSIiO2NvbnN0IHQ9cGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QpO3QmJiJzdHJpbmciPT10eXBlb2YgdCYmKGU9c3RyaW5nVG9QREZTdHJpbmcodCkucmVwbGFjZUFsbCgiXFxcXCIsIlxcIikucmVwbGFjZUFsbCgiXFwvIiwiLyIpLnJlcGxhY2VBbGwoIlxcIiwiLyIpKTtyZXR1cm4gc2hhZG93KHRoaXMsImZpbGVuYW1lIixlfHwidW5uYW1lZCIpfWdldCBjb250ZW50KCl7aWYoIXRoaXMuI1MpcmV0dXJuIG51bGw7dGhpcy5fY29udGVudFJlZnx8PXBpY2tQbGF0Zm9ybUl0ZW0odGhpcy5yb290Py5nZXQoIkVGIikpO2xldCBlPW51bGw7aWYodGhpcy5fY29udGVudFJlZil7Y29uc3QgdD10aGlzLnhyZWYuZmV0Y2hJZlJlZih0aGlzLl9jb250ZW50UmVmKTt0IGluc3RhbmNlb2YgQmFzZVN0cmVhbT9lPXQuZ2V0Qnl0ZXMoKTp3YXJuKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gcG9pbnRzIHRvIG5vbi1leGlzdGluZy9pbnZhbGlkIGNvbnRlbnQiKX1lbHNlIHdhcm4oIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFueSBjb250ZW50Iik7cmV0dXJuIGV9Z2V0IGRlc2NyaXB0aW9uKCl7bGV0IGU9IiI7Y29uc3QgdD10aGlzLnJvb3Q/LmdldCgiRGVzYyIpO3QmJiJzdHJpbmciPT10eXBlb2YgdCYmKGU9c3RyaW5nVG9QREZTdHJpbmcodCkpO3JldHVybiBzaGFkb3codGhpcywiZGVzY3JpcHRpb24iLGUpfWdldCBzZXJpYWxpemFibGUoKXtyZXR1cm57cmF3RmlsZW5hbWU6dGhpcy5maWxlbmFtZSxmaWxlbmFtZTooZT10aGlzLmZpbGVuYW1lLGUuc3Vic3RyaW5nKGUubGFzdEluZGV4T2YoIi8iKSsxKSksY29udGVudDp0aGlzLmNvbnRlbnQsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbn07dmFyIGV9fWNvbnN0IEhyPTAsSnI9LTIsdnI9LTMsWXI9LTQsVHI9LTUsS3I9LTYscXI9LTk7ZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGUsdCl7Y29uc3QgaT1lW3RdO3JldHVybiIgIj09PWl8fCJcbiI9PT1pfHwiXHIiPT09aXx8Ilx0Ij09PWl9Y2xhc3MgWE1MUGFyc2VyQmFzZXtfcmVzb2x2ZUVudGl0aWVzKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoLyYoW147XSspOy9nLCgoZSx0KT0+e2lmKCIjeCI9PT10LnN1YnN0cmluZygwLDIpKXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnN1YnN0cmluZygyKSwxNikpO2lmKCIjIj09PXQuc3Vic3RyaW5nKDAsMSkpcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KHQuc3Vic3RyaW5nKDEpLDEwKSk7c3dpdGNoKHQpe2Nhc2UibHQiOnJldHVybiI8IjtjYXNlImd0IjpyZXR1cm4iPiI7Y2FzZSJhbXAiOnJldHVybiImIjtjYXNlInF1b3QiOnJldHVybiciJztjYXNlImFwb3MiOnJldHVybiInIn1yZXR1cm4gdGhpcy5vblJlc29sdmVFbnRpdHkodCl9KSl9X3BhcnNlQ29udGVudChlLHQpe2NvbnN0IGk9W107bGV0IGE9dDtmdW5jdGlvbiBza2lwV3MoKXtmb3IoO2E8ZS5sZW5ndGgmJmlzV2hpdGVzcGFjZShlLGEpOykrK2F9Zm9yKDthPGUubGVuZ3RoJiYhaXNXaGl0ZXNwYWNlKGUsYSkmJiI+IiE9PWVbYV0mJiIvIiE9PWVbYV07KSsrYTtjb25zdCByPWUuc3Vic3RyaW5nKHQsYSk7c2tpcFdzKCk7Zm9yKDthPGUubGVuZ3RoJiYiPiIhPT1lW2FdJiYiLyIhPT1lW2FdJiYiPyIhPT1lW2FdOyl7c2tpcFdzKCk7bGV0IHQ9IiIscj0iIjtmb3IoO2E8ZS5sZW5ndGgmJiFpc1doaXRlc3BhY2UoZSxhKSYmIj0iIT09ZVthXTspe3QrPWVbYV07KythfXNraXBXcygpO2lmKCI9IiE9PWVbYV0pcmV0dXJuIG51bGw7KythO3NraXBXcygpO2NvbnN0IHM9ZVthXTtpZignIichPT1zJiYiJyIhPT1zKXJldHVybiBudWxsO2NvbnN0IG49ZS5pbmRleE9mKHMsKythKTtpZihuPDApcmV0dXJuIG51bGw7cj1lLnN1YnN0cmluZyhhLG4pO2kucHVzaCh7bmFtZTp0LHZhbHVlOnRoaXMuX3Jlc29sdmVFbnRpdGllcyhyKX0pO2E9bisxO3NraXBXcygpfXJldHVybntuYW1lOnIsYXR0cmlidXRlczppLHBhcnNlZDphLXR9fV9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihlLHQpe2xldCBpPXQ7Zm9yKDtpPGUubGVuZ3RoJiYhaXNXaGl0ZXNwYWNlKGUsaSkmJiI+IiE9PWVbaV0mJiI/IiE9PWVbaV0mJiIvIiE9PWVbaV07KSsraTtjb25zdCBhPWUuc3Vic3RyaW5nKHQsaSk7IWZ1bmN0aW9uIHNraXBXcygpe2Zvcig7aTxlLmxlbmd0aCYmaXNXaGl0ZXNwYWNlKGUsaSk7KSsraX0oKTtjb25zdCByPWk7Zm9yKDtpPGUubGVuZ3RoJiYoIj8iIT09ZVtpXXx8Ij4iIT09ZVtpKzFdKTspKytpO3JldHVybntuYW1lOmEsdmFsdWU6ZS5zdWJzdHJpbmcocixpKSxwYXJzZWQ6aS10fX1wYXJzZVhtbChlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aDspe2xldCBpPXQ7aWYoIjwiPT09ZVt0XSl7KytpO2xldCB0O3N3aXRjaChlW2ldKXtjYXNlIi8iOisraTt0PWUuaW5kZXhPZigiPiIsaSk7aWYodDwwKXt0aGlzLm9uRXJyb3IocXIpO3JldHVybn10aGlzLm9uRW5kRWxlbWVudChlLnN1YnN0cmluZyhpLHQpKTtpPXQrMTticmVhaztjYXNlIj8iOisraTtjb25zdCBhPXRoaXMuX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGUsaSk7aWYoIj8+IiE9PWUuc3Vic3RyaW5nKGkrYS5wYXJzZWQsaSthLnBhcnNlZCsyKSl7dGhpcy5vbkVycm9yKHZyKTtyZXR1cm59dGhpcy5vblBpKGEubmFtZSxhLnZhbHVlKTtpKz1hLnBhcnNlZCsyO2JyZWFrO2Nhc2UiISI6aWYoIi0tIj09PWUuc3Vic3RyaW5nKGkrMSxpKzMpKXt0PWUuaW5kZXhPZigiLS1ceDNlIixpKzMpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKFRyKTtyZXR1cm59dGhpcy5vbkNvbW1lbnQoZS5zdWJzdHJpbmcoaSszLHQpKTtpPXQrM31lbHNlIGlmKCJbQ0RBVEFbIj09PWUuc3Vic3RyaW5nKGkrMSxpKzgpKXt0PWUuaW5kZXhPZigiXV0+IixpKzgpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKEpyKTtyZXR1cm59dGhpcy5vbkNkYXRhKGUuc3Vic3RyaW5nKGkrOCx0KSk7aT10KzN9ZWxzZXtpZigiRE9DVFlQRSIhPT1lLnN1YnN0cmluZyhpKzEsaSs4KSl7dGhpcy5vbkVycm9yKEtyKTtyZXR1cm59e2NvbnN0IGE9ZS5pbmRleE9mKCJbIixpKzgpO2xldCByPSExO3Q9ZS5pbmRleE9mKCI+IixpKzgpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKFlyKTtyZXR1cm59aWYoYT4wJiZ0PmEpe3Q9ZS5pbmRleE9mKCJdPiIsaSs4KTtpZih0PDApe3RoaXMub25FcnJvcihZcik7cmV0dXJufXI9ITB9Y29uc3Qgcz1lLnN1YnN0cmluZyhpKzgsdCsocj8xOjApKTt0aGlzLm9uRG9jdHlwZShzKTtpPXQrKHI/MjoxKX19YnJlYWs7ZGVmYXVsdDpjb25zdCByPXRoaXMuX3BhcnNlQ29udGVudChlLGkpO2lmKG51bGw9PT1yKXt0aGlzLm9uRXJyb3IoS3IpO3JldHVybn1sZXQgcz0hMTtpZigiLz4iPT09ZS5zdWJzdHJpbmcoaStyLnBhcnNlZCxpK3IucGFyc2VkKzIpKXM9ITA7ZWxzZSBpZigiPiIhPT1lLnN1YnN0cmluZyhpK3IucGFyc2VkLGkrci5wYXJzZWQrMSkpe3RoaXMub25FcnJvcihxcik7cmV0dXJufXRoaXMub25CZWdpbkVsZW1lbnQoci5uYW1lLHIuYXR0cmlidXRlcyxzKTtpKz1yLnBhcnNlZCsocz8yOjEpfX1lbHNle2Zvcig7aTxlLmxlbmd0aCYmIjwiIT09ZVtpXTspaSsrO2NvbnN0IGE9ZS5zdWJzdHJpbmcodCxpKTt0aGlzLm9uVGV4dCh0aGlzLl9yZXNvbHZlRW50aXRpZXMoYSkpfXQ9aX19b25SZXNvbHZlRW50aXR5KGUpe3JldHVybmAmJHtlfTtgfW9uUGkoZSx0KXt9b25Db21tZW50KGUpe31vbkNkYXRhKGUpe31vbkRvY3R5cGUoZSl7fW9uVGV4dChlKXt9b25CZWdpbkVsZW1lbnQoZSx0LGkpe31vbkVuZEVsZW1lbnQoZSl7fW9uRXJyb3IoZSl7fX1jbGFzcyBTaW1wbGVET01Ob2Rle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5ub2RlTmFtZT1lO3RoaXMubm9kZVZhbHVlPXQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInBhcmVudE5vZGUiLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSl9Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzPy5bMF19Z2V0IG5leHRTaWJsaW5nKCl7Y29uc3QgZT10aGlzLnBhcmVudE5vZGUuY2hpbGROb2RlcztpZighZSlyZXR1cm47Y29uc3QgdD1lLmluZGV4T2YodGhpcyk7cmV0dXJuLTEhPT10P2VbdCsxXTp2b2lkIDB9Z2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlcz90aGlzLmNoaWxkTm9kZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0Q29udGVudH0pKS5qb2luKCIiKTp0aGlzLm5vZGVWYWx1ZXx8IiJ9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc3x8W119aGFzQ2hpbGROb2Rlcygpe3JldHVybiB0aGlzLmNoaWxkTm9kZXM/Lmxlbmd0aD4wfXNlYXJjaE5vZGUoZSx0KXtpZih0Pj1lLmxlbmd0aClyZXR1cm4gdGhpcztjb25zdCBpPWVbdF07aWYoaS5uYW1lLnN0YXJ0c1dpdGgoIiMiKSYmdDxlLmxlbmd0aC0xKXJldHVybiB0aGlzLnNlYXJjaE5vZGUoZSx0KzEpO2NvbnN0IGE9W107bGV0IHI9dGhpcztmb3IoOzspe2lmKGkubmFtZT09PXIubm9kZU5hbWUpe2lmKDAhPT1pLnBvcyl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBudWxsO3tjb25zdFtzXT1hLnBvcCgpO2xldCBuPTA7Zm9yKGNvbnN0IGEgb2Ygcy5jaGlsZE5vZGVzKWlmKGkubmFtZT09PWEubm9kZU5hbWUpe2lmKG49PT1pLnBvcylyZXR1cm4gYS5zZWFyY2hOb2RlKGUsdCsxKTtuKyt9cmV0dXJuIHIuc2VhcmNoTm9kZShlLHQrMSl9fXtjb25zdCBpPXIuc2VhcmNoTm9kZShlLHQrMSk7aWYobnVsbCE9PWkpcmV0dXJuIGl9fWlmKHIuY2hpbGROb2Rlcz8ubGVuZ3RoPjApe2EucHVzaChbciwwXSk7cj1yLmNoaWxkTm9kZXNbMF19ZWxzZXtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKDswIT09YS5sZW5ndGg7KXtjb25zdFtlLHRdPWEucG9wKCksaT10KzE7aWYoaTxlLmNoaWxkTm9kZXMubGVuZ3RoKXthLnB1c2goW2UsaV0pO3I9ZS5jaGlsZE5vZGVzW2ldO2JyZWFrfX1pZigwPT09YS5sZW5ndGgpcmV0dXJuIG51bGx9fX1kdW1wKGUpe2lmKCIjdGV4dCIhPT10aGlzLm5vZGVOYW1lKXtlLnB1c2goYDwke3RoaXMubm9kZU5hbWV9YCk7aWYodGhpcy5hdHRyaWJ1dGVzKWZvcihjb25zdCB0IG9mIHRoaXMuYXR0cmlidXRlcyllLnB1c2goYCAke3QubmFtZX09IiR7ZW5jb2RlVG9YbWxTdHJpbmcodC52YWx1ZSl9ImApO2lmKHRoaXMuaGFzQ2hpbGROb2RlcygpKXtlLnB1c2goIj4iKTtmb3IoY29uc3QgdCBvZiB0aGlzLmNoaWxkTm9kZXMpdC5kdW1wKGUpO2UucHVzaChgPC8ke3RoaXMubm9kZU5hbWV9PmApfWVsc2UgdGhpcy5ub2RlVmFsdWU/ZS5wdXNoKGA+JHtlbmNvZGVUb1htbFN0cmluZyh0aGlzLm5vZGVWYWx1ZSl9PC8ke3RoaXMubm9kZU5hbWV9PmApOmUucHVzaCgiLz4iKX1lbHNlIGUucHVzaChlbmNvZGVUb1htbFN0cmluZyh0aGlzLm5vZGVWYWx1ZSkpfX1jbGFzcyBTaW1wbGVYTUxQYXJzZXIgZXh0ZW5kcyBYTUxQYXJzZXJCYXNle2NvbnN0cnVjdG9yKHtoYXNBdHRyaWJ1dGVzOmU9ITEsbG93ZXJDYXNlTmFtZTp0PSExfSl7c3VwZXIoKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQ9bnVsbDt0aGlzLl9zdGFjaz1udWxsO3RoaXMuX2Vycm9yQ29kZT1Icjt0aGlzLl9oYXNBdHRyaWJ1dGVzPWU7dGhpcy5fbG93ZXJDYXNlTmFtZT10fXBhcnNlRnJvbVN0cmluZyhlKXt0aGlzLl9jdXJyZW50RnJhZ21lbnQ9W107dGhpcy5fc3RhY2s9W107dGhpcy5fZXJyb3JDb2RlPUhyO3RoaXMucGFyc2VYbWwoZSk7aWYodGhpcy5fZXJyb3JDb2RlIT09SHIpcmV0dXJuO2NvbnN0W3RdPXRoaXMuX2N1cnJlbnRGcmFnbWVudDtyZXR1cm4gdD97ZG9jdW1lbnRFbGVtZW50OnR9OnZvaWQgMH1vblRleHQoZSl7aWYoZnVuY3Rpb24gaXNXaGl0ZXNwYWNlU3RyaW5nKGUpe2ZvcihsZXQgdD0wLGk9ZS5sZW5ndGg7dDxpO3QrKylpZighaXNXaGl0ZXNwYWNlKGUsdCkpcmV0dXJuITE7cmV0dXJuITB9KGUpKXJldHVybjtjb25zdCB0PW5ldyBTaW1wbGVET01Ob2RlKCIjdGV4dCIsZSk7dGhpcy5fY3VycmVudEZyYWdtZW50LnB1c2godCl9b25DZGF0YShlKXtjb25zdCB0PW5ldyBTaW1wbGVET01Ob2RlKCIjdGV4dCIsZSk7dGhpcy5fY3VycmVudEZyYWdtZW50LnB1c2godCl9b25CZWdpbkVsZW1lbnQoZSx0LGkpe3RoaXMuX2xvd2VyQ2FzZU5hbWUmJihlPWUudG9Mb3dlckNhc2UoKSk7Y29uc3QgYT1uZXcgU2ltcGxlRE9NTm9kZShlKTthLmNoaWxkTm9kZXM9W107dGhpcy5faGFzQXR0cmlidXRlcyYmKGEuYXR0cmlidXRlcz10KTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChhKTtpZighaSl7dGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50RnJhZ21lbnQpO3RoaXMuX2N1cnJlbnRGcmFnbWVudD1hLmNoaWxkTm9kZXN9fW9uRW5kRWxlbWVudChlKXt0aGlzLl9jdXJyZW50RnJhZ21lbnQ9dGhpcy5fc3RhY2sucG9wKCl8fFtdO2NvbnN0IHQ9dGhpcy5fY3VycmVudEZyYWdtZW50LmF0KC0xKTtpZighdClyZXR1cm4gbnVsbDtmb3IoY29uc3QgZSBvZiB0LmNoaWxkTm9kZXMpZS5wYXJlbnROb2RlPXQ7cmV0dXJuIHR9b25FcnJvcihlKXt0aGlzLl9lcnJvckNvZGU9ZX19Y2xhc3MgTWV0YWRhdGFQYXJzZXJ7Y29uc3RydWN0b3IoZSl7ZT10aGlzLl9yZXBhaXIoZSk7Y29uc3QgdD1uZXcgU2ltcGxlWE1MUGFyc2VyKHtsb3dlckNhc2VOYW1lOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpO3RoaXMuX21ldGFkYXRhTWFwPW5ldyBNYXA7dGhpcy5fZGF0YT1lO3QmJnRoaXMuX3BhcnNlKHQpfV9yZXBhaXIoZSl7cmV0dXJuIGUucmVwbGFjZSgvXltePF0rLywiIikucmVwbGFjZUFsbCgvPlxcMzc2XFwzNzcoW148XSspL2csKGZ1bmN0aW9uKGUsdCl7Y29uc3QgaT10LnJlcGxhY2VBbGwoL1xcKFswLTNdKShbMC03XSkoWzAtN10pL2csKGZ1bmN0aW9uKGUsdCxpLGEpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDY0KnQrOCppKzEqYSl9KSkucmVwbGFjZUFsbCgvJihhbXB8YXBvc3xndHxsdHxxdW90KTsvZywoZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJhbXAiOnJldHVybiImIjtjYXNlImFwb3MiOnJldHVybiInIjtjYXNlImd0IjpyZXR1cm4iPiI7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UicXVvdCI6cmV0dXJuJyInfXRocm93IG5ldyBFcnJvcihgX3JlcGFpcjogJHt0fSBpc24ndCBkZWZpbmVkLmApfSkpLGE9WyI+Il07Zm9yKGxldCBlPTAsdD1pLmxlbmd0aDtlPHQ7ZSs9Mil7Y29uc3QgdD0yNTYqaS5jaGFyQ29kZUF0KGUpK2kuY2hhckNvZGVBdChlKzEpO3Q+PTMyJiZ0PDEyNyYmNjAhPT10JiY2MiE9PXQmJjM4IT09dD9hLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0KSk6YS5wdXNoKCImI3giKyg2NTUzNit0KS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpKyI7Iil9cmV0dXJuIGEuam9pbigiIil9KSl9X2dldFNlcXVlbmNlKGUpe2NvbnN0IHQ9ZS5ub2RlTmFtZTtyZXR1cm4icmRmOmJhZyIhPT10JiYicmRmOnNlcSIhPT10JiYicmRmOmFsdCIhPT10P251bGw6ZS5jaGlsZE5vZGVzLmZpbHRlcigoZT0+InJkZjpsaSI9PT1lLm5vZGVOYW1lKSl9X3BhcnNlQXJyYXkoZSl7aWYoIWUuaGFzQ2hpbGROb2RlcygpKXJldHVybjtjb25zdFt0XT1lLmNoaWxkTm9kZXMsaT10aGlzLl9nZXRTZXF1ZW5jZSh0KXx8W107dGhpcy5fbWV0YWRhdGFNYXAuc2V0KGUubm9kZU5hbWUsaS5tYXAoKGU9PmUudGV4dENvbnRlbnQudHJpbSgpKSkpfV9wYXJzZShlKXtsZXQgdD1lLmRvY3VtZW50RWxlbWVudDtpZigicmRmOnJkZiIhPT10Lm5vZGVOYW1lKXt0PXQuZmlyc3RDaGlsZDtmb3IoO3QmJiJyZGY6cmRmIiE9PXQubm9kZU5hbWU7KXQ9dC5uZXh0U2libGluZ31pZih0JiYicmRmOnJkZiI9PT10Lm5vZGVOYW1lJiZ0Lmhhc0NoaWxkTm9kZXMoKSlmb3IoY29uc3QgZSBvZiB0LmNoaWxkTm9kZXMpaWYoInJkZjpkZXNjcmlwdGlvbiI9PT1lLm5vZGVOYW1lKWZvcihjb25zdCB0IG9mIGUuY2hpbGROb2Rlcyl7Y29uc3QgZT10Lm5vZGVOYW1lO3N3aXRjaChlKXtjYXNlIiN0ZXh0Ijpjb250aW51ZTtjYXNlImRjOmNyZWF0b3IiOmNhc2UiZGM6c3ViamVjdCI6dGhpcy5fcGFyc2VBcnJheSh0KTtjb250aW51ZX10aGlzLl9tZXRhZGF0YU1hcC5zZXQoZSx0LnRleHRDb250ZW50LnRyaW0oKSl9fWdldCBzZXJpYWxpemFibGUoKXtyZXR1cm57cGFyc2VkRGF0YTp0aGlzLl9tZXRhZGF0YU1hcCxyYXdEYXRhOnRoaXMuX2RhdGF9fX1jbGFzcyBEZWNyeXB0U3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxpKXtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5kZWNyeXB0PWk7dGhpcy5uZXh0Q2h1bms9bnVsbDt0aGlzLmluaXRpYWxpemVkPSExfXJlYWRCbG9jaygpe2xldCBlO2lmKHRoaXMuaW5pdGlhbGl6ZWQpZT10aGlzLm5leHRDaHVuaztlbHNle2U9dGhpcy5zdHIuZ2V0Qnl0ZXMoNTEyKTt0aGlzLmluaXRpYWxpemVkPSEwfWlmKCFlfHwwPT09ZS5sZW5ndGgpe3RoaXMuZW9mPSEwO3JldHVybn10aGlzLm5leHRDaHVuaz10aGlzLnN0ci5nZXRCeXRlcyg1MTIpO2NvbnN0IHQ9dGhpcy5uZXh0Q2h1bms/Lmxlbmd0aD4wO2U9KDAsdGhpcy5kZWNyeXB0KShlLCF0KTtjb25zdCBpPXRoaXMuYnVmZmVyTGVuZ3RoLGE9aStlLmxlbmd0aDt0aGlzLmVuc3VyZUJ1ZmZlcihhKS5zZXQoZSxpKTt0aGlzLmJ1ZmZlckxlbmd0aD1hfX1jbGFzcyBBUkNGb3VyQ2lwaGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuYT0wO3RoaXMuYj0wO2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KSxpPWUubGVuZ3RoO2ZvcihsZXQgZT0wO2U8MjU2OysrZSl0W2VdPWU7Zm9yKGxldCBhPTAscj0wO2E8MjU2OysrYSl7Y29uc3Qgcz10W2FdO3I9citzK2VbYSVpXSYyNTU7dFthXT10W3JdO3Rbcl09c310aGlzLnM9dH1lbmNyeXB0QmxvY2soZSl7bGV0IHQ9dGhpcy5hLGk9dGhpcy5iO2NvbnN0IGE9dGhpcy5zLHI9ZS5sZW5ndGgscz1uZXcgVWludDhBcnJheShyKTtmb3IobGV0IG49MDtuPHI7KytuKXt0PXQrMSYyNTU7Y29uc3Qgcj1hW3RdO2k9aStyJjI1NTtjb25zdCBvPWFbaV07YVt0XT1vO2FbaV09cjtzW25dPWVbbl1eYVtyK28mMjU1XX10aGlzLmE9dDt0aGlzLmI9aTtyZXR1cm4gc31kZWNyeXB0QmxvY2soZSl7cmV0dXJuIHRoaXMuZW5jcnlwdEJsb2NrKGUpfWVuY3J5cHQoZSl7cmV0dXJuIHRoaXMuZW5jcnlwdEJsb2NrKGUpfX1jb25zdCBPcj1mdW5jdGlvbiBjYWxjdWxhdGVNRDVDbG9zdXJlKCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShbNywxMiwxNywyMiw3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw1LDksMTQsMjAsNSw5LDE0LDIwLDUsOSwxNCwyMCw1LDksMTQsMjAsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw2LDEwLDE1LDIxLDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxXSksdD1uZXcgSW50MzJBcnJheShbLTY4MDg3NjkzNiwtMzg5NTY0NTg2LDYwNjEwNTgxOSwtMTA0NDUyNTMzMCwtMTc2NDE4ODk3LDEyMDAwODA0MjYsLTE0NzMyMzEzNDEsLTQ1NzA1OTgzLDE3NzAwMzU0MTYsLTE5NTg0MTQ0MTcsLTQyMDYzLC0xOTkwNDA0MTYyLDE4MDQ2MDM2ODIsLTQwMzQxMTAxLC0xNTAyMDAyMjkwLDEyMzY1MzUzMjksLTE2NTc5NjUxMCwtMTA2OTUwMTYzMiw2NDM3MTc3MTMsLTM3Mzg5NzMwMiwtNzAxNTU4NjkxLDM4MDE2MDgzLC02NjA0NzgzMzUsLTQwNTUzNzg0OCw1Njg0NDY0MzgsLTEwMTk4MDM2OTAsLTE4NzM2Mzk2MSwxMTYzNTMxNTAxLC0xNDQ0NjgxNDY3LC01MTQwMzc4NCwxNzM1MzI4NDczLC0xOTI2NjA3NzM0LC0zNzg1NTgsLTIwMjI1NzQ0NjMsMTgzOTAzMDU2MiwtMzUzMDk1NTYsLTE1MzA5OTIwNjAsMTI3Mjg5MzM1MywtMTU1NDk3NjMyLC0xMDk0NzMwNjQwLDY4MTI3OTE3NCwtMzU4NTM3MjIyLC03MjI1MjE5NzksNzYwMjkxODksLTY0MDM2NDQ4NywtNDIxODE1ODM1LDUzMDc0MjUyMCwtOTk1MzM4NjUxLC0xOTg2MzA4NDQsMTEyNjg5MTQxNSwtMTQxNjM1NDkwNSwtNTc0MzQwNTUsMTcwMDQ4NTU3MSwtMTg5NDk4NjYwNiwtMTA1MTUyMywtMjA1NDkyMjc5OSwxODczMzEzMzU5LC0zMDYxMTc0NCwtMTU2MDE5ODM4MCwxMzA5MTUxNjQ5LC0xNDU1MjMwNzAsLTExMjAyMTAzNzksNzE4Nzg3MjU5LC0zNDM0ODU1NTFdKTtyZXR1cm4gZnVuY3Rpb24gaGFzaChpLGEscil7bGV0IHM9MTczMjU4NDE5MyxuPS0yNzE3MzM4Nzksbz0tMTczMjU4NDE5NCxnPTI3MTczMzg3ODtjb25zdCBjPXIrNzImLTY0LEM9bmV3IFVpbnQ4QXJyYXkoYyk7bGV0IGgsbDtmb3IoaD0wO2g8cjsrK2gpQ1toXT1pW2ErK107Q1toKytdPTEyODtjb25zdCBRPWMtODtmb3IoO2g8UTspQ1toKytdPTA7Q1toKytdPXI8PDMmMjU1O0NbaCsrXT1yPj41JjI1NTtDW2grK109cj4+MTMmMjU1O0NbaCsrXT1yPj4yMSYyNTU7Q1toKytdPXI+Pj4yOSYyNTU7Q1toKytdPTA7Q1toKytdPTA7Q1toKytdPTA7Y29uc3QgRT1uZXcgSW50MzJBcnJheSgxNik7Zm9yKGg9MDtoPGM7KXtmb3IobD0wO2w8MTY7KytsLGgrPTQpRVtsXT1DW2hdfENbaCsxXTw8OHxDW2grMl08PDE2fENbaCszXTw8MjQ7bGV0IGksYSxyPXMsYz1uLFE9byx1PWc7Zm9yKGw9MDtsPDY0OysrbCl7aWYobDwxNil7aT1jJlF8fmMmdTthPWx9ZWxzZSBpZihsPDMyKXtpPXUmY3x+dSZRO2E9NSpsKzEmMTV9ZWxzZSBpZihsPDQ4KXtpPWNeUV51O2E9MypsKzUmMTV9ZWxzZXtpPVFeKGN8fnUpO2E9NypsJjE1fWNvbnN0IHM9dSxuPXIraSt0W2xdK0VbYV18MCxvPWVbbF07dT1RO1E9YztjPWMrKG48PG98bj4+PjMyLW8pfDA7cj1zfXM9cytyfDA7bj1uK2N8MDtvPW8rUXwwO2c9Zyt1fDB9cmV0dXJuIG5ldyBVaW50OEFycmF5KFsyNTUmcyxzPj44JjI1NSxzPj4xNiYyNTUscz4+PjI0JjI1NSwyNTUmbixuPj44JjI1NSxuPj4xNiYyNTUsbj4+PjI0JjI1NSwyNTUmbyxvPj44JjI1NSxvPj4xNiYyNTUsbz4+PjI0JjI1NSwyNTUmZyxnPj44JjI1NSxnPj4xNiYyNTUsZz4+PjI0JjI1NV0pfX0oKTtjbGFzcyBXb3JkNjR7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmhpZ2g9MHxlO3RoaXMubG93PTB8dH1hbmQoZSl7dGhpcy5oaWdoJj1lLmhpZ2g7dGhpcy5sb3cmPWUubG93fXhvcihlKXt0aGlzLmhpZ2hePWUuaGlnaDt0aGlzLmxvd149ZS5sb3d9b3IoZSl7dGhpcy5oaWdofD1lLmhpZ2g7dGhpcy5sb3d8PWUubG93fXNoaWZ0UmlnaHQoZSl7aWYoZT49MzIpe3RoaXMubG93PXRoaXMuaGlnaD4+PmUtMzJ8MDt0aGlzLmhpZ2g9MH1lbHNle3RoaXMubG93PXRoaXMubG93Pj4+ZXx0aGlzLmhpZ2g8PDMyLWU7dGhpcy5oaWdoPXRoaXMuaGlnaD4+PmV8MH19c2hpZnRMZWZ0KGUpe2lmKGU+PTMyKXt0aGlzLmhpZ2g9dGhpcy5sb3c8PGUtMzI7dGhpcy5sb3c9MH1lbHNle3RoaXMuaGlnaD10aGlzLmhpZ2g8PGV8dGhpcy5sb3c+Pj4zMi1lO3RoaXMubG93PDw9ZX19cm90YXRlUmlnaHQoZSl7bGV0IHQsaTtpZigzMiZlKXtpPXRoaXMubG93O3Q9dGhpcy5oaWdofWVsc2V7dD10aGlzLmxvdztpPXRoaXMuaGlnaH1lJj0zMTt0aGlzLmxvdz10Pj4+ZXxpPDwzMi1lO3RoaXMuaGlnaD1pPj4+ZXx0PDwzMi1lfW5vdCgpe3RoaXMuaGlnaD1+dGhpcy5oaWdoO3RoaXMubG93PX50aGlzLmxvd31hZGQoZSl7Y29uc3QgdD0odGhpcy5sb3c+Pj4wKSsoZS5sb3c+Pj4wKTtsZXQgaT0odGhpcy5oaWdoPj4+MCkrKGUuaGlnaD4+PjApO3Q+NDI5NDk2NzI5NSYmKGkrPTEpO3RoaXMubG93PTB8dDt0aGlzLmhpZ2g9MHxpfWNvcHlUbyhlLHQpe2VbdF09dGhpcy5oaWdoPj4+MjQmMjU1O2VbdCsxXT10aGlzLmhpZ2g+PjE2JjI1NTtlW3QrMl09dGhpcy5oaWdoPj44JjI1NTtlW3QrM109MjU1JnRoaXMuaGlnaDtlW3QrNF09dGhpcy5sb3c+Pj4yNCYyNTU7ZVt0KzVdPXRoaXMubG93Pj4xNiYyNTU7ZVt0KzZdPXRoaXMubG93Pj44JjI1NTtlW3QrN109MjU1JnRoaXMubG93fWFzc2lnbihlKXt0aGlzLmhpZ2g9ZS5oaWdoO3RoaXMubG93PWUubG93fX1jb25zdCBQcj1mdW5jdGlvbiBjYWxjdWxhdGVTSEEyNTZDbG9zdXJlKCl7ZnVuY3Rpb24gcm90cihlLHQpe3JldHVybiBlPj4+dHxlPDwzMi10fWZ1bmN0aW9uIGNoKGUsdCxpKXtyZXR1cm4gZSZ0Xn5lJml9ZnVuY3Rpb24gbWFqKGUsdCxpKXtyZXR1cm4gZSZ0XmUmaV50Jml9ZnVuY3Rpb24gc2lnbWEoZSl7cmV0dXJuIHJvdHIoZSwyKV5yb3RyKGUsMTMpXnJvdHIoZSwyMil9ZnVuY3Rpb24gc2lnbWFQcmltZShlKXtyZXR1cm4gcm90cihlLDYpXnJvdHIoZSwxMSlecm90cihlLDI1KX1mdW5jdGlvbiBsaXR0bGVTaWdtYShlKXtyZXR1cm4gcm90cihlLDcpXnJvdHIoZSwxOCleZT4+PjN9Y29uc3QgZT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtyZXR1cm4gZnVuY3Rpb24gaGFzaCh0LGksYSl7bGV0IHI9MTc3OTAzMzcwMyxzPTMxNDQxMzQyNzcsbj0xMDEzOTA0MjQyLG89Mjc3MzQ4MDc2MixnPTEzNTk4OTMxMTksYz0yNjAwODIyOTI0LEM9NTI4NzM0NjM1LGg9MTU0MTQ1OTIyNTtjb25zdCBsPTY0Kk1hdGguY2VpbCgoYSs5KS82NCksUT1uZXcgVWludDhBcnJheShsKTtsZXQgRSx1O2ZvcihFPTA7RTxhOysrRSlRW0VdPXRbaSsrXTtRW0UrK109MTI4O2NvbnN0IGQ9bC04O2Zvcig7RTxkOylRW0UrK109MDtRW0UrK109MDtRW0UrK109MDtRW0UrK109MDtRW0UrK109YT4+PjI5JjI1NTtRW0UrK109YT4+MjEmMjU1O1FbRSsrXT1hPj4xMyYyNTU7UVtFKytdPWE+PjUmMjU1O1FbRSsrXT1hPDwzJjI1NTtjb25zdCBmPW5ldyBVaW50MzJBcnJheSg2NCk7Zm9yKEU9MDtFPGw7KXtmb3IodT0wO3U8MTY7Kyt1KXtmW3VdPVFbRV08PDI0fFFbRSsxXTw8MTZ8UVtFKzJdPDw4fFFbRSszXTtFKz00fWZvcih1PTE2O3U8NjQ7Kyt1KWZbdV09KHJvdHIocD1mW3UtMl0sMTcpXnJvdHIocCwxOSlecD4+PjEwKStmW3UtN10rbGl0dGxlU2lnbWEoZlt1LTE1XSkrZlt1LTE2XXwwO2xldCB0LGksYT1yLGw9cyxkPW4sbT1vLHk9Zyx3PWMsYj1DLEQ9aDtmb3IodT0wO3U8NjQ7Kyt1KXt0PUQrc2lnbWFQcmltZSh5KStjaCh5LHcsYikrZVt1XStmW3VdO2k9c2lnbWEoYSkrbWFqKGEsbCxkKTtEPWI7Yj13O3c9eTt5PW0rdHwwO209ZDtkPWw7bD1hO2E9dCtpfDB9cj1yK2F8MDtzPXMrbHwwO249bitkfDA7bz1vK218MDtnPWcreXwwO2M9Yyt3fDA7Qz1DK2J8MDtoPWgrRHwwfXZhciBwO3JldHVybiBuZXcgVWludDhBcnJheShbcj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcixzPj4yNCYyNTUscz4+MTYmMjU1LHM+PjgmMjU1LDI1NSZzLG4+PjI0JjI1NSxuPj4xNiYyNTUsbj4+OCYyNTUsMjU1Jm4sbz4+MjQmMjU1LG8+PjE2JjI1NSxvPj44JjI1NSwyNTUmbyxnPj4yNCYyNTUsZz4+MTYmMjU1LGc+PjgmMjU1LDI1NSZnLGM+PjI0JjI1NSxjPj4xNiYyNTUsYz4+OCYyNTUsMjU1JmMsQz4+MjQmMjU1LEM+PjE2JjI1NSxDPj44JjI1NSwyNTUmQyxoPj4yNCYyNTUsaD4+MTYmMjU1LGg+PjgmMjU1LDI1NSZoXSl9fSgpLFdyPWZ1bmN0aW9uIGNhbGN1bGF0ZVNIQTUxMkNsb3N1cmUoKXtmdW5jdGlvbiBjaChlLHQsaSxhLHIpe2UuYXNzaWduKHQpO2UuYW5kKGkpO3IuYXNzaWduKHQpO3Iubm90KCk7ci5hbmQoYSk7ZS54b3Iocil9ZnVuY3Rpb24gbWFqKGUsdCxpLGEscil7ZS5hc3NpZ24odCk7ZS5hbmQoaSk7ci5hc3NpZ24odCk7ci5hbmQoYSk7ZS54b3Iocik7ci5hc3NpZ24oaSk7ci5hbmQoYSk7ZS54b3Iocil9ZnVuY3Rpb24gc2lnbWEoZSx0LGkpe2UuYXNzaWduKHQpO2Uucm90YXRlUmlnaHQoMjgpO2kuYXNzaWduKHQpO2kucm90YXRlUmlnaHQoMzQpO2UueG9yKGkpO2kuYXNzaWduKHQpO2kucm90YXRlUmlnaHQoMzkpO2UueG9yKGkpfWZ1bmN0aW9uIHNpZ21hUHJpbWUoZSx0LGkpe2UuYXNzaWduKHQpO2Uucm90YXRlUmlnaHQoMTQpO2kuYXNzaWduKHQpO2kucm90YXRlUmlnaHQoMTgpO2UueG9yKGkpO2kuYXNzaWduKHQpO2kucm90YXRlUmlnaHQoNDEpO2UueG9yKGkpfWZ1bmN0aW9uIGxpdHRsZVNpZ21hKGUsdCxpKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDEpO2kuYXNzaWduKHQpO2kucm90YXRlUmlnaHQoOCk7ZS54b3IoaSk7aS5hc3NpZ24odCk7aS5zaGlmdFJpZ2h0KDcpO2UueG9yKGkpfWZ1bmN0aW9uIGxpdHRsZVNpZ21hUHJpbWUoZSx0LGkpe2UuYXNzaWduKHQpO2Uucm90YXRlUmlnaHQoMTkpO2kuYXNzaWduKHQpO2kucm90YXRlUmlnaHQoNjEpO2UueG9yKGkpO2kuYXNzaWduKHQpO2kuc2hpZnRSaWdodCg2KTtlLnhvcihpKX1jb25zdCBlPVtuZXcgV29yZDY0KDExMTYzNTI0MDgsMzYwOTc2NzQ1OCksbmV3IFdvcmQ2NCgxODk5NDQ3NDQxLDYwMjg5MTcyNSksbmV3IFdvcmQ2NCgzMDQ5MzIzNDcxLDM5NjQ0ODQzOTkpLG5ldyBXb3JkNjQoMzkyMTAwOTU3MywyMTczMjk1NTQ4KSxuZXcgV29yZDY0KDk2MTk4NzE2Myw0MDgxNjI4NDcyKSxuZXcgV29yZDY0KDE1MDg5NzA5OTMsMzA1MzgzNDI2NSksbmV3IFdvcmQ2NCgyNDUzNjM1NzQ4LDI5Mzc2NzE1NzkpLG5ldyBXb3JkNjQoMjg3MDc2MzIyMSwzNjY0NjA5NTYwKSxuZXcgV29yZDY0KDM2MjQzODEwODAsMjczNDg4MzM5NCksbmV3IFdvcmQ2NCgzMTA1OTg0MDEsMTE2NDk5NjU0MiksbmV3IFdvcmQ2NCg2MDcyMjUyNzgsMTMyMzYxMDc2NCksbmV3IFdvcmQ2NCgxNDI2ODgxOTg3LDM1OTAzMDQ5OTQpLG5ldyBXb3JkNjQoMTkyNTA3ODM4OCw0MDY4MTgyMzgzKSxuZXcgV29yZDY0KDIxNjIwNzgyMDYsOTkxMzM2MTEzKSxuZXcgV29yZDY0KDI2MTQ4ODgxMDMsNjMzODAzMzE3KSxuZXcgV29yZDY0KDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCksbmV3IFdvcmQ2NCgzODM1MzkwNDAxLDI2NjY2MTM0NTgpLG5ldyBXb3JkNjQoNDAyMjIyNDc3NCw5NDQ3MTExMzkpLG5ldyBXb3JkNjQoMjY0MzQ3MDc4LDIzNDEyNjI3NzMpLG5ldyBXb3JkNjQoNjA0ODA3NjI4LDIwMDc4MDA5MzMpLG5ldyBXb3JkNjQoNzcwMjU1OTgzLDE0OTU5OTA5MDEpLG5ldyBXb3JkNjQoMTI0OTE1MDEyMiwxODU2NDMxMjM1KSxuZXcgV29yZDY0KDE1NTUwODE2OTIsMzE3NTIxODEzMiksbmV3IFdvcmQ2NCgxOTk2MDY0OTg2LDIxOTg5NTA4MzcpLG5ldyBXb3JkNjQoMjU1NDIyMDg4MiwzOTk5NzE5MzM5KSxuZXcgV29yZDY0KDI4MjE4MzQzNDksNzY2Nzg0MDE2KSxuZXcgV29yZDY0KDI5NTI5OTY4MDgsMjU2NjU5NDg3OSksbmV3IFdvcmQ2NCgzMjEwMzEzNjcxLDMyMDMzMzc5NTYpLG5ldyBXb3JkNjQoMzMzNjU3MTg5MSwxMDM0NDU3MDI2KSxuZXcgV29yZDY0KDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSksbmV3IFdvcmQ2NCgxMTM5MjY5OTMsMzc1ODMyNjM4MyksbmV3IFdvcmQ2NCgzMzgyNDE4OTUsMTY4NzE3OTM2KSxuZXcgV29yZDY0KDY2NjMwNzIwNSwxMTg4MTc5OTY0KSxuZXcgV29yZDY0KDc3MzUyOTkxMiwxNTQ2MDQ1NzM0KSxuZXcgV29yZDY0KDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSksbmV3IFdvcmQ2NCgxMzk2MTgyMjkxLDI2NDM4MzM4MjMpLG5ldyBXb3JkNjQoMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxuZXcgV29yZDY0KDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCksbmV3IFdvcmQ2NCgyMTc3MDI2MzUwLDEyMDY3NTkxNDIpLG5ldyBXb3JkNjQoMjQ1Njk1NjAzNywzNDQwNzc2MjcpLG5ldyBXb3JkNjQoMjczMDQ4NTkyMSwxMjkwODYzNDYwKSxuZXcgV29yZDY0KDI4MjAzMDI0MTEsMzE1ODQ1NDI3MyksbmV3IFdvcmQ2NCgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLG5ldyBXb3JkNjQoMzM0NTc2NDc3MSwxMDYyMTcwMDgpLG5ldyBXb3JkNjQoMzUxNjA2NTgxNywzNjA2MDA4MzQ0KSxuZXcgV29yZDY0KDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksbmV3IFdvcmQ2NCg0MDk0NTcxOTA5LDE0NjcwMzE1OTQpLG5ldyBXb3JkNjQoMjc1NDIzMzQ0LDg1MTE2OTcyMCksbmV3IFdvcmQ2NCg0MzAyMjc3MzQsMzEwMDgyMzc1MiksbmV3IFdvcmQ2NCg1MDY5NDg2MTYsMTM2MzI1ODE5NSksbmV3IFdvcmQ2NCg2NTkwNjA1NTYsMzc1MDY4NTU5MyksbmV3IFdvcmQ2NCg4ODM5OTc4NzcsMzc4NTA1MDI4MCksbmV3IFdvcmQ2NCg5NTgxMzk1NzEsMzMxODMwNzQyNyksbmV3IFdvcmQ2NCgxMzIyODIyMjE4LDM4MTI3MjM0MDMpLG5ldyBXb3JkNjQoMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxuZXcgV29yZDY0KDE3NDc4NzM3NzksMzYwMjAzNjg5OSksbmV3IFdvcmQ2NCgxOTU1NTYyMjIyLDE1NzU5OTAwMTIpLG5ldyBXb3JkNjQoMjAyNDEwNDgxNSwxMTI1NTkyOTI4KSxuZXcgV29yZDY0KDIyMjc3MzA0NTIsMjcxNjkwNDMwNiksbmV3IFdvcmQ2NCgyMzYxODUyNDI0LDQ0Mjc3NjA0NCksbmV3IFdvcmQ2NCgyNDI4NDM2NDc0LDU5MzY5ODM0NCksbmV3IFdvcmQ2NCgyNzU2NzM0MTg3LDM3MzMxMTAyNDkpLG5ldyBXb3JkNjQoMzIwNDAzMTQ3OSwyOTk5MzUxNTczKSxuZXcgV29yZDY0KDMzMjkzMjUyOTgsMzgxNTkyMDQyNyksbmV3IFdvcmQ2NCgzMzkxNTY5NjE0LDM5MjgzODM5MDApLG5ldyBXb3JkNjQoMzUxNTI2NzI3MSw1NjYyODA3MTEpLG5ldyBXb3JkNjQoMzk0MDE4NzYwNiwzNDU0MDY5NTM0KSxuZXcgV29yZDY0KDQxMTg2MzAyNzEsNDAwMDIzOTk5MiksbmV3IFdvcmQ2NCgxMTY0MTg0NzQsMTkxNDEzODU1NCksbmV3IFdvcmQ2NCgxNzQyOTI0MjEsMjczMTA1NTI3MCksbmV3IFdvcmQ2NCgyODkzODAzNTYsMzIwMzk5MzAwNiksbmV3IFdvcmQ2NCg0NjAzOTMyNjksMzIwNjIwMzE1KSxuZXcgV29yZDY0KDY4NTQ3MTczMyw1ODc0OTY4MzYpLG5ldyBXb3JkNjQoODUyMTQyOTcxLDEwODY3OTI4NTEpLG5ldyBXb3JkNjQoMTAxNzAzNjI5OCwzNjU1NDMxMDApLG5ldyBXb3JkNjQoMTEyNjAwMDU4MCwyNjE4Mjk3Njc2KSxuZXcgV29yZDY0KDEyODgwMzM0NzAsMzQwOTg1NTE1OCksbmV3IFdvcmQ2NCgxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYpLG5ldyBXb3JkNjQoMTYwNzE2NzkxNSw5ODcxNjc0NjgpLG5ldyBXb3JkNjQoMTgxNjQwMjMxNiwxMjQ2MTg5NTkxKV07cmV0dXJuIGZ1bmN0aW9uIGhhc2godCxpLGEscj0hMSl7bGV0IHMsbixvLGcsYyxDLGgsbDtpZihyKXtzPW5ldyBXb3JkNjQoMzQxODA3MDM2NSwzMjM4MzcxMDMyKTtuPW5ldyBXb3JkNjQoMTY1NDI3MDI1MCw5MTQxNTA2NjMpO289bmV3IFdvcmQ2NCgyNDM4NTI5MzcwLDgxMjcwMjk5OSk7Zz1uZXcgV29yZDY0KDM1NTQ2MjM2MCw0MTQ0OTEyNjk3KTtjPW5ldyBXb3JkNjQoMTczMTQwNTQxNSw0MjkwNzc1ODU3KTtDPW5ldyBXb3JkNjQoMjM5NDE4MDIzMSwxNzUwNjAzMDI1KTtoPW5ldyBXb3JkNjQoMzY3NTAwODUyNSwxNjk0MDc2ODM5KTtsPW5ldyBXb3JkNjQoMTIwMzA2MjgxMywzMjA0MDc1NDI4KX1lbHNle3M9bmV3IFdvcmQ2NCgxNzc5MDMzNzAzLDQwODkyMzU3MjApO249bmV3IFdvcmQ2NCgzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUpO289bmV3IFdvcmQ2NCgxMDEzOTA0MjQyLDQyNzExNzU3MjMpO2c9bmV3IFdvcmQ2NCgyNzczNDgwNzYyLDE1OTU3NTAxMjkpO2M9bmV3IFdvcmQ2NCgxMzU5ODkzMTE5LDI5MTc1NjUxMzcpO0M9bmV3IFdvcmQ2NCgyNjAwODIyOTI0LDcyNTUxMTE5OSk7aD1uZXcgV29yZDY0KDUyODczNDYzNSw0MjE1Mzg5NTQ3KTtsPW5ldyBXb3JkNjQoMTU0MTQ1OTIyNSwzMjcwMzMyMDkpfWNvbnN0IFE9MTI4Kk1hdGguY2VpbCgoYSsxNykvMTI4KSxFPW5ldyBVaW50OEFycmF5KFEpO2xldCB1LGQ7Zm9yKHU9MDt1PGE7Kyt1KUVbdV09dFtpKytdO0VbdSsrXT0xMjg7Y29uc3QgZj1RLTE2O2Zvcig7dTxmOylFW3UrK109MDtFW3UrK109MDtFW3UrK109MDtFW3UrK109MDtFW3UrK109MDtFW3UrK109MDtFW3UrK109MDtFW3UrK109MDtFW3UrK109MDtFW3UrK109MDtFW3UrK109MDtFW3UrK109MDtFW3UrK109YT4+PjI5JjI1NTtFW3UrK109YT4+MjEmMjU1O0VbdSsrXT1hPj4xMyYyNTU7RVt1KytdPWE+PjUmMjU1O0VbdSsrXT1hPDwzJjI1NTtjb25zdCBwPW5ldyBBcnJheSg4MCk7Zm9yKHU9MDt1PDgwO3UrKylwW3VdPW5ldyBXb3JkNjQoMCwwKTtsZXQgbT1uZXcgV29yZDY0KDAsMCkseT1uZXcgV29yZDY0KDAsMCksdz1uZXcgV29yZDY0KDAsMCksYj1uZXcgV29yZDY0KDAsMCksRD1uZXcgV29yZDY0KDAsMCksUz1uZXcgV29yZDY0KDAsMCksaz1uZXcgV29yZDY0KDAsMCksUj1uZXcgV29yZDY0KDAsMCk7Y29uc3QgTj1uZXcgV29yZDY0KDAsMCksRz1uZXcgV29yZDY0KDAsMCkseD1uZXcgV29yZDY0KDAsMCksVT1uZXcgV29yZDY0KDAsMCk7bGV0IE0sTDtmb3IodT0wO3U8UTspe2ZvcihkPTA7ZDwxNjsrK2Qpe3BbZF0uaGlnaD1FW3VdPDwyNHxFW3UrMV08PDE2fEVbdSsyXTw8OHxFW3UrM107cFtkXS5sb3c9RVt1KzRdPDwyNHxFW3UrNV08PDE2fEVbdSs2XTw8OHxFW3UrN107dSs9OH1mb3IoZD0xNjtkPDgwOysrZCl7TT1wW2RdO2xpdHRsZVNpZ21hUHJpbWUoTSxwW2QtMl0sVSk7TS5hZGQocFtkLTddKTtsaXR0bGVTaWdtYSh4LHBbZC0xNV0sVSk7TS5hZGQoeCk7TS5hZGQocFtkLTE2XSl9bS5hc3NpZ24ocyk7eS5hc3NpZ24obik7dy5hc3NpZ24obyk7Yi5hc3NpZ24oZyk7RC5hc3NpZ24oYyk7Uy5hc3NpZ24oQyk7ay5hc3NpZ24oaCk7Ui5hc3NpZ24obCk7Zm9yKGQ9MDtkPDgwOysrZCl7Ti5hc3NpZ24oUik7c2lnbWFQcmltZSh4LEQsVSk7Ti5hZGQoeCk7Y2goeCxELFMsayxVKTtOLmFkZCh4KTtOLmFkZChlW2RdKTtOLmFkZChwW2RdKTtzaWdtYShHLG0sVSk7bWFqKHgsbSx5LHcsVSk7Ry5hZGQoeCk7TT1SO1I9aztrPVM7Uz1EO2IuYWRkKE4pO0Q9YjtiPXc7dz15O3k9bTtNLmFzc2lnbihOKTtNLmFkZChHKTttPU19cy5hZGQobSk7bi5hZGQoeSk7by5hZGQodyk7Zy5hZGQoYik7Yy5hZGQoRCk7Qy5hZGQoUyk7aC5hZGQoayk7bC5hZGQoUil9aWYocil7TD1uZXcgVWludDhBcnJheSg0OCk7cy5jb3B5VG8oTCwwKTtuLmNvcHlUbyhMLDgpO28uY29weVRvKEwsMTYpO2cuY29weVRvKEwsMjQpO2MuY29weVRvKEwsMzIpO0MuY29weVRvKEwsNDApfWVsc2V7TD1uZXcgVWludDhBcnJheSg2NCk7cy5jb3B5VG8oTCwwKTtuLmNvcHlUbyhMLDgpO28uY29weVRvKEwsMTYpO2cuY29weVRvKEwsMjQpO2MuY29weVRvKEwsMzIpO0MuY29weVRvKEwsNDApO2guY29weVRvKEwsNDgpO2wuY29weVRvKEwsNTYpfXJldHVybiBMfX0oKTtjbGFzcyBOdWxsQ2lwaGVye2RlY3J5cHRCbG9jayhlKXtyZXR1cm4gZX1lbmNyeXB0KGUpe3JldHVybiBlfX1jbGFzcyBBRVNCYXNlQ2lwaGVye2NvbnN0cnVjdG9yKCl7dGhpcy5fcz1uZXcgVWludDhBcnJheShbOTksMTI0LDExOSwxMjMsMjQyLDEwNywxMTEsMTk3LDQ4LDEsMTAzLDQzLDI1NCwyMTUsMTcxLDExOCwyMDIsMTMwLDIwMSwxMjUsMjUwLDg5LDcxLDI0MCwxNzMsMjEyLDE2MiwxNzUsMTU2LDE2NCwxMTQsMTkyLDE4MywyNTMsMTQ3LDM4LDU0LDYzLDI0NywyMDQsNTIsMTY1LDIyOSwyNDEsMTEzLDIxNiw0OSwyMSw0LDE5OSwzNSwxOTUsMjQsMTUwLDUsMTU0LDcsMTgsMTI4LDIyNiwyMzUsMzksMTc4LDExNyw5LDEzMSw0NCwyNiwyNywxMTAsOTAsMTYwLDgyLDU5LDIxNCwxNzksNDEsMjI3LDQ3LDEzMiw4MywyMDksMCwyMzcsMzIsMjUyLDE3Nyw5MSwxMDYsMjAzLDE5MCw1Nyw3NCw3Niw4OCwyMDcsMjA4LDIzOSwxNzAsMjUxLDY3LDc3LDUxLDEzMyw2OSwyNDksMiwxMjcsODAsNjAsMTU5LDE2OCw4MSwxNjMsNjQsMTQzLDE0NiwxNTcsNTYsMjQ1LDE4OCwxODIsMjE4LDMzLDE2LDI1NSwyNDMsMjEwLDIwNSwxMiwxOSwyMzYsOTUsMTUxLDY4LDIzLDE5NiwxNjcsMTI2LDYxLDEwMCw5MywyNSwxMTUsOTYsMTI5LDc5LDIyMCwzNCw0MiwxNDQsMTM2LDcwLDIzOCwxODQsMjAsMjIyLDk0LDExLDIxOSwyMjQsNTAsNTgsMTAsNzMsNiwzNiw5MiwxOTQsMjExLDE3Miw5OCwxNDUsMTQ5LDIyOCwxMjEsMjMxLDIwMCw1NSwxMDksMTQxLDIxMyw3OCwxNjksMTA4LDg2LDI0NCwyMzQsMTAxLDEyMiwxNzQsOCwxODYsMTIwLDM3LDQ2LDI4LDE2NiwxODAsMTk4LDIzMiwyMjEsMTE2LDMxLDc1LDE4OSwxMzksMTM4LDExMiw2MiwxODEsMTAyLDcyLDMsMjQ2LDE0LDk3LDUzLDg3LDE4NSwxMzQsMTkzLDI5LDE1OCwyMjUsMjQ4LDE1MiwxNywxMDUsMjE3LDE0MiwxNDgsMTU1LDMwLDEzNSwyMzMsMjA2LDg1LDQwLDIyMywxNDAsMTYxLDEzNywxMywxOTEsMjMwLDY2LDEwNCw2NSwxNTMsNDUsMTUsMTc2LDg0LDE4NywyMl0pO3RoaXMuX2ludl9zPW5ldyBVaW50OEFycmF5KFs4Miw5LDEwNiwyMTMsNDgsNTQsMTY1LDU2LDE5MSw2NCwxNjMsMTU4LDEyOSwyNDMsMjE1LDI1MSwxMjQsMjI3LDU3LDEzMCwxNTUsNDcsMjU1LDEzNSw1MiwxNDIsNjcsNjgsMTk2LDIyMiwyMzMsMjAzLDg0LDEyMywxNDgsNTAsMTY2LDE5NCwzNSw2MSwyMzgsNzYsMTQ5LDExLDY2LDI1MCwxOTUsNzgsOCw0NiwxNjEsMTAyLDQwLDIxNywzNiwxNzgsMTE4LDkxLDE2Miw3MywxMDksMTM5LDIwOSwzNywxMTQsMjQ4LDI0NiwxMDAsMTM0LDEwNCwxNTIsMjIsMjEyLDE2NCw5MiwyMDQsOTMsMTAxLDE4MiwxNDYsMTA4LDExMiw3Miw4MCwyNTMsMjM3LDE4NSwyMTgsOTQsMjEsNzAsODcsMTY3LDE0MSwxNTcsMTMyLDE0NCwyMTYsMTcxLDAsMTQwLDE4OCwyMTEsMTAsMjQ3LDIyOCw4OCw1LDE4NCwxNzksNjksNiwyMDgsNDQsMzAsMTQzLDIwMiw2MywxNSwyLDE5MywxNzUsMTg5LDMsMSwxOSwxMzgsMTA3LDU4LDE0NSwxNyw2NSw3OSwxMDMsMjIwLDIzNCwxNTEsMjQyLDIwNywyMDYsMjQwLDE4MCwyMzAsMTE1LDE1MCwxNzIsMTE2LDM0LDIzMSwxNzMsNTMsMTMzLDIyNiwyNDksNTUsMjMyLDI4LDExNywyMjMsMTEwLDcxLDI0MSwyNiwxMTMsMjksNDEsMTk3LDEzNywxMTEsMTgzLDk4LDE0LDE3MCwyNCwxOTAsMjcsMjUyLDg2LDYyLDc1LDE5OCwyMTAsMTIxLDMyLDE1NCwyMTksMTkyLDI1NCwxMjAsMjA1LDkwLDI0NCwzMSwyMjEsMTY4LDUxLDEzNiw3LDE5OSw0OSwxNzcsMTgsMTYsODksMzksMTI4LDIzNiw5NSw5Niw4MSwxMjcsMTY5LDI1LDE4MSw3NCwxMyw0NSwyMjksMTIyLDE1OSwxNDcsMjAxLDE1NiwyMzksMTYwLDIyNCw1OSw3NywxNzQsNDIsMjQ1LDE3NiwyMDAsMjM1LDE4Nyw2MCwxMzEsODMsMTUzLDk3LDIzLDQzLDQsMTI2LDE4NiwxMTksMjE0LDM4LDIyNSwxMDUsMjAsOTksODUsMzMsMTIsMTI1XSk7dGhpcy5fbWl4PW5ldyBVaW50MzJBcnJheShbMCwyMzU0NzQxODcsNDcwOTQ4Mzc0LDMwMzc2NTI3Nyw5NDE4OTY3NDgsOTA4OTMzNDE1LDYwNzUzMDU1NCw3MDg3ODA4NDksMTg4Mzc5MzQ5NiwyMTE4MjE0OTk1LDE4MTc4NjY4MzAsMTY0OTYzOTIzNywxMjE1MDYxMTA4LDExODEwNDUxMTksMTQxNzU2MTY5OCwxNTE3NzY3NTI5LDM3Njc1ODY5OTIsNDAwMzA2MTE3OSw0MjM2NDI5OTkwLDQwNjkyNDY4OTMsMzYzNTczMzY2MCwzNjAyNzcwMzI3LDMyOTkyNzg0NzQsMzQwMDUyODc2OSwyNDMwMTIyMjE2LDI2NjQ1NDM3MTUsMjM2MjA5MDIzOCwyMTkzODYyNjQ1LDI4MzUxMjMzOTYsMjgwMTEwNzQwNywzMDM1NTM1MDU4LDMxMzU3NDA4ODksMzY3ODEyNDkyMywzNTc2ODcwNTEyLDMzNDEzOTQyODUsMzM3NDM2MTcwMiwzODEwNDk2MzQzLDM5Nzc2NzUzNTYsNDI3OTA4MDI1Nyw0MDQzNjEwMTg2LDI4NzY0OTQ2MjcsMjc3NjI5MjkwNCwzMDc2NjM5MDI5LDMxMTA2NTA5NDIsMjQ3MjAxMTUzNSwyNjQwMjQzMjA0LDI0MDM3Mjg2NjUsMjE2OTMwMzA1OCwxMDAxMDg5OTk1LDg5OTgzNTU4NCw2NjY0NjQ3MzMsNjk5NDMyMTUwLDU5NzI3ODQ3LDIyNjkwNjg2MCw1MzA0MDA3NTMsMjk0OTMwNjgyLDEyNzMxNjg3ODcsMTE3Mjk2NzA2NCwxNDc1NDE4NTAxLDE1MDk0MzA0MTQsMTk0MjQzNTc3NSwyMTEwNjY3NDQ0LDE4NzYyNDE4MzMsMTY0MTgxNjIyNiwyOTEwMjE5NzY2LDI3NDMwMzQxMDksMjk3NjE1MTUyMCwzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMjYwNjQ1Mzk2OSwyMzAyNjkwMjUyLDIyNjk3Mjg0NTUsMzcxMTgyOTQyMiwzNTQzNTk5MjY5LDMyNDA4OTQzOTIsMzQ3NTMxMzMzMSwzODQzNjk5MDc0LDM5NDM5MDY0NDEsNDE3ODA2MjIyOCw0MTQ0MDQ3Nzc1LDEzMDY5NjczNjYsMTEzOTc4MTcwOSwxMzc0OTg4MTEyLDE2MTA0NTk3MzksMTk3NTY4MzQzNCwyMDc2OTM1MjY1LDE3NzUyNzY5MjQsMTc0MjMxNTEyNywxMDM0ODY3OTk4LDg2NjYzNzg0NSw1NjYwMjE4OTYsODAwNDQwODM1LDkyOTg3Njk4LDE5MzE5NTA2NSw0Mjk0NTYxNjQsMzk1NDQxNzExLDE5ODQ4MTI2ODUsMjAxNzc3ODU2NiwxNzg0NjYzMTk1LDE2ODM0MDcyNDgsMTMxNTU2MjE0NSwxMDgwMDk0NjM0LDEzODM4NTYzMTEsMTU1MTAzNzg4NCwxMDEwMzk4MjksMTM1MDUwMjA2LDQzNzc1NzEyMywzMzc1NTM4NjQsMTA0MjM4NTY1Nyw4MDc5NjI2MTAsNTczODA0NzgzLDc0MjAzOTAxMiwyNTMxMDY3NDUzLDI1NjQwMzMzMzQsMjMyODgyODk3MSwyMjI3NTczMDI0LDI5MzU1NjY4NjUsMjcwMDA5OTM1NCwzMDAxNzU1NjU1LDMxNjg5MzcyMjgsMzg2ODU1MjgwNSwzOTAyNTYzMTgyLDQyMDMxODExNzEsNDEwMjk3NzkxMiwzNzM2MTY0OTM3LDM1MDE3NDE4OTAsMzI2NTQ3ODc1MSwzNDMzNzEyOTgwLDExMDYwNDE1OTEsMTM0MDQ2MzEwMCwxNTc2OTc2NjA5LDE0MDg3NDkwMzQsMjA0MzIxMTQ4MywyMDA5MTk1NDcyLDE3MDg4NDgzMzMsMTgwOTA1NDE1MCw4MzI4NzcyMzEsMTA2ODM1MTM5Niw3NjY5NDU0NjUsNTk5NzYyMzU0LDE1OTQxNzk4NywxMjY0NTQ2NjQsMzYxOTI5ODc3LDQ2MzE4MDE5MCwyNzA5MjYwODcxLDI5NDM2ODIzODAsMzE3ODEwNjk2MSwzMDA5ODc5Mzg2LDI1NzI2OTcxOTUsMjUzODY4MTE4NCwyMjM2MjI4NzMzLDIzMzY0MzQ1NTAsMzUwOTg3MTEzNSwzNzQ1MzQ1MzAwLDM0NDE4NTAzNzcsMzI3NDY2NzI2NiwzOTEwMTYxOTcxLDM4NzcxOTg2NDgsNDExMDU2ODQ4NSw0MjExODE4Nzk4LDI1OTc4MDY0NzYsMjQ5NzYwNDc0MywyMjYxMDg5MTc4LDIyOTUxMDEwNzMsMjczMzg1NjE2MCwyOTAyMDg3ODUxLDMyMDI0MzcwNDYsMjk2ODAxMTQ1MywzOTM2MjkxMjg0LDM4MzUwMzY4OTUsNDEzNjQ0MDc3MCw0MTY5NDA4MjAxLDM1MzU0ODY0NTYsMzcwMjY2NTQ1OSwzNDY3MTkyMzAyLDMyMzE3MjIyMTMsMjA1MTUxODc4MCwxOTUxMzE3MDQ3LDE3MTY4OTA0MTAsMTc1MDkwMjMwNSwxMTEzODE4Mzg0LDEyODIwNTAwNzUsMTU4NDUwNDU4MiwxMzUwMDc4OTg5LDE2ODgxMDg1Miw2NzU1NjQ2MywzNzEwNDkzMzAsNDA0MDE2NzYxLDg0MTczOTU5MiwxMDA4OTE4NTk1LDc3NTU1MDgxNCw1NDAwODA3MjUsMzk2OTU2MjM2OSwzODAxMzMyMjM0LDQwMzU0ODkwNDcsNDI2OTkwNzk5NiwzNTY5MjU1MjEzLDM2Njk0NjI1NjYsMzM2Njc1NDYxOSwzMzMyNzQwMTQ0LDI2MzEwNjU0MzMsMjQ2Mzg3OTc2MiwyMTYwMTE3MDcxLDIzOTU1ODg2NzYsMjc2NzY0NTU1NywyODY4ODk3NDA2LDMxMDIwMTE3NDcsMzA2OTA0OTk2MCwyMDIwMDg0OTcsMzM3NzgzNjIsMjcwMDQwNDg3LDUwNDQ1OTQzNiw4NzU0NTEyOTMsOTc1NjU4NjQ2LDY3NTAzOTYyNyw2NDEwMjUxNTIsMjA4NDcwNDIzMywxOTE3NTE4NTYyLDE2MTU4NjEyNDcsMTg1MTMzMjg1MiwxMTQ3NTUwNjYxLDEyNDg4MDI1MTAsMTQ4NDAwNTg0MywxNDUxMDQ0MDU2LDkzMzMwMTM3MCw5NjczMTE3MjksNzMzMTU2OTcyLDYzMjk1MzcwMywyNjAzODg5NTAsMjU5NjU5MTcsMzI4NjcxODA4LDQ5NjkwNjA1OSwxMjA2NDc3ODU4LDEyMzk0NDM3NTMsMTU0MzIwODUwMCwxNDQxOTUyNTc1LDIxNDQxNjE4MDYsMTkwODY5NDI3NywxNjc1NTc3ODgwLDE4NDI3NTk0NDMsMzYxMDM2OTIyNiwzNjQ0Mzc5NTg1LDM0MDgxMTk1MTYsMzMwNzkxNjI0Nyw0MDExMTkwNTAyLDM3NzY3Njc0NjksNDA3NzM4NDQzMiw0MjQ1NjE4NjgzLDI4MDk3NzExNTQsMjg0MjczNzA0OSwzMTQ0Mzk2NDIwLDMwNDMxNDA0OTUsMjY3MzcwNTE1MCwyNDM4MjM3NjIxLDIyMDMwMzIyMzIsMjM3MDIxMzc5NV0pO3RoaXMuX21peENvbD1uZXcgVWludDhBcnJheSgyNTYpO2ZvcihsZXQgZT0wO2U8MjU2O2UrKyl0aGlzLl9taXhDb2xbZV09ZTwxMjg/ZTw8MTplPDwxXjI3O3RoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDE2KTt0aGlzLmJ1ZmZlclBvc2l0aW9uPTB9X2V4cGFuZEtleShlKXt1bnJlYWNoYWJsZSgiQ2Fubm90IGNhbGwgYF9leHBhbmRLZXlgIG9uIHRoZSBiYXNlIGNsYXNzIil9X2RlY3J5cHQoZSx0KXtsZXQgaSxhLHI7Y29uc3Qgcz1uZXcgVWludDhBcnJheSgxNik7cy5zZXQoZSk7Zm9yKGxldCBlPTAsaT10aGlzLl9rZXlTaXplO2U8MTY7KytlLCsraSlzW2VdXj10W2ldO2ZvcihsZXQgZT10aGlzLl9jeWNsZXNPZlJlcGV0aXRpb24tMTtlPj0xOy0tZSl7aT1zWzEzXTtzWzEzXT1zWzldO3NbOV09c1s1XTtzWzVdPXNbMV07c1sxXT1pO2k9c1sxNF07YT1zWzEwXTtzWzE0XT1zWzZdO3NbMTBdPXNbMl07c1s2XT1pO3NbMl09YTtpPXNbMTVdO2E9c1sxMV07cj1zWzddO3NbMTVdPXNbM107c1sxMV09aTtzWzddPWE7c1szXT1yO2ZvcihsZXQgZT0wO2U8MTY7KytlKXNbZV09dGhpcy5faW52X3Nbc1tlXV07Zm9yKGxldCBpPTAsYT0xNiplO2k8MTY7KytpLCsrYSlzW2ldXj10W2FdO2ZvcihsZXQgZT0wO2U8MTY7ZSs9NCl7Y29uc3QgdD10aGlzLl9taXhbc1tlXV0sYT10aGlzLl9taXhbc1tlKzFdXSxyPXRoaXMuX21peFtzW2UrMl1dLG49dGhpcy5fbWl4W3NbZSszXV07aT10XmE+Pj44XmE8PDI0XnI+Pj4xNl5yPDwxNl5uPj4+MjRebjw8ODtzW2VdPWk+Pj4yNCYyNTU7c1tlKzFdPWk+PjE2JjI1NTtzW2UrMl09aT4+OCYyNTU7c1tlKzNdPTI1NSZpfX1pPXNbMTNdO3NbMTNdPXNbOV07c1s5XT1zWzVdO3NbNV09c1sxXTtzWzFdPWk7aT1zWzE0XTthPXNbMTBdO3NbMTRdPXNbNl07c1sxMF09c1syXTtzWzZdPWk7c1syXT1hO2k9c1sxNV07YT1zWzExXTtyPXNbN107c1sxNV09c1szXTtzWzExXT1pO3NbN109YTtzWzNdPXI7Zm9yKGxldCBlPTA7ZTwxNjsrK2Upe3NbZV09dGhpcy5faW52X3Nbc1tlXV07c1tlXV49dFtlXX1yZXR1cm4gc31fZW5jcnlwdChlLHQpe2NvbnN0IGk9dGhpcy5fcztsZXQgYSxyLHM7Y29uc3Qgbj1uZXcgVWludDhBcnJheSgxNik7bi5zZXQoZSk7Zm9yKGxldCBlPTA7ZTwxNjsrK2UpbltlXV49dFtlXTtmb3IobGV0IGU9MTtlPHRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbjtlKyspe2ZvcihsZXQgZT0wO2U8MTY7KytlKW5bZV09aVtuW2VdXTtzPW5bMV07blsxXT1uWzVdO25bNV09bls5XTtuWzldPW5bMTNdO25bMTNdPXM7cz1uWzJdO3I9bls2XTtuWzJdPW5bMTBdO25bNl09blsxNF07blsxMF09cztuWzE0XT1yO3M9blszXTtyPW5bN107YT1uWzExXTtuWzNdPW5bMTVdO25bN109cztuWzExXT1yO25bMTVdPWE7Zm9yKGxldCBlPTA7ZTwxNjtlKz00KXtjb25zdCB0PW5bZSswXSxpPW5bZSsxXSxyPW5bZSsyXSxzPW5bZSszXTthPXReaV5yXnM7bltlKzBdXj1hXnRoaXMuX21peENvbFt0XmldO25bZSsxXV49YV50aGlzLl9taXhDb2xbaV5yXTtuW2UrMl1ePWFedGhpcy5fbWl4Q29sW3Jec107bltlKzNdXj1hXnRoaXMuX21peENvbFtzXnRdfWZvcihsZXQgaT0wLGE9MTYqZTtpPDE2OysraSwrK2EpbltpXV49dFthXX1mb3IobGV0IGU9MDtlPDE2OysrZSluW2VdPWlbbltlXV07cz1uWzFdO25bMV09bls1XTtuWzVdPW5bOV07bls5XT1uWzEzXTtuWzEzXT1zO3M9blsyXTtyPW5bNl07blsyXT1uWzEwXTtuWzZdPW5bMTRdO25bMTBdPXM7blsxNF09cjtzPW5bM107cj1uWzddO2E9blsxMV07blszXT1uWzE1XTtuWzddPXM7blsxMV09cjtuWzE1XT1hO2ZvcihsZXQgZT0wLGk9dGhpcy5fa2V5U2l6ZTtlPDE2OysrZSwrK2kpbltlXV49dFtpXTtyZXR1cm4gbn1fZGVjcnlwdEJsb2NrMihlLHQpe2NvbnN0IGk9ZS5sZW5ndGg7bGV0IGE9dGhpcy5idWZmZXIscj10aGlzLmJ1ZmZlclBvc2l0aW9uO2NvbnN0IHM9W107bGV0IG49dGhpcy5pdjtmb3IobGV0IHQ9MDt0PGk7Kyt0KXthW3JdPWVbdF07KytyO2lmKHI8MTYpY29udGludWU7Y29uc3QgaT10aGlzLl9kZWNyeXB0KGEsdGhpcy5fa2V5KTtmb3IobGV0IGU9MDtlPDE2OysrZSlpW2VdXj1uW2VdO249YTtzLnB1c2goaSk7YT1uZXcgVWludDhBcnJheSgxNik7cj0wfXRoaXMuYnVmZmVyPWE7dGhpcy5idWZmZXJMZW5ndGg9cjt0aGlzLml2PW47aWYoMD09PXMubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtsZXQgbz0xNipzLmxlbmd0aDtpZih0KXtjb25zdCBlPXMuYXQoLTEpO2xldCB0PWVbMTVdO2lmKHQ8PTE2KXtmb3IobGV0IGk9MTUsYT0xNi10O2k+PWE7LS1pKWlmKGVbaV0hPT10KXt0PTA7YnJlYWt9by09dDtzW3MubGVuZ3RoLTFdPWUuc3ViYXJyYXkoMCwxNi10KX19Y29uc3QgZz1uZXcgVWludDhBcnJheShvKTtmb3IobGV0IGU9MCx0PTAsaT1zLmxlbmd0aDtlPGk7KytlLHQrPTE2KWcuc2V0KHNbZV0sdCk7cmV0dXJuIGd9ZGVjcnlwdEJsb2NrKGUsdCxpPW51bGwpe2NvbnN0IGE9ZS5sZW5ndGgscj10aGlzLmJ1ZmZlcjtsZXQgcz10aGlzLmJ1ZmZlclBvc2l0aW9uO2lmKGkpdGhpcy5pdj1pO2Vsc2V7Zm9yKGxldCB0PTA7czwxNiYmdDxhOysrdCwrK3MpcltzXT1lW3RdO2lmKHM8MTYpe3RoaXMuYnVmZmVyTGVuZ3RoPXM7cmV0dXJuIG5ldyBVaW50OEFycmF5KDApfXRoaXMuaXY9cjtlPWUuc3ViYXJyYXkoMTYpfXRoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDE2KTt0aGlzLmJ1ZmZlckxlbmd0aD0wO3RoaXMuZGVjcnlwdEJsb2NrPXRoaXMuX2RlY3J5cHRCbG9jazI7cmV0dXJuIHRoaXMuZGVjcnlwdEJsb2NrKGUsdCl9ZW5jcnlwdChlLHQpe2NvbnN0IGk9ZS5sZW5ndGg7bGV0IGE9dGhpcy5idWZmZXIscj10aGlzLmJ1ZmZlclBvc2l0aW9uO2NvbnN0IHM9W107dHx8KHQ9bmV3IFVpbnQ4QXJyYXkoMTYpKTtmb3IobGV0IG49MDtuPGk7KytuKXthW3JdPWVbbl07KytyO2lmKHI8MTYpY29udGludWU7Zm9yKGxldCBlPTA7ZTwxNjsrK2UpYVtlXV49dFtlXTtjb25zdCBpPXRoaXMuX2VuY3J5cHQoYSx0aGlzLl9rZXkpO3Q9aTtzLnB1c2goaSk7YT1uZXcgVWludDhBcnJheSgxNik7cj0wfXRoaXMuYnVmZmVyPWE7dGhpcy5idWZmZXJMZW5ndGg9cjt0aGlzLml2PXQ7aWYoMD09PXMubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtjb25zdCBuPTE2KnMubGVuZ3RoLG89bmV3IFVpbnQ4QXJyYXkobik7Zm9yKGxldCBlPTAsdD0wLGk9cy5sZW5ndGg7ZTxpOysrZSx0Kz0xNilvLnNldChzW2VdLHQpO3JldHVybiBvfX1jbGFzcyBBRVMxMjhDaXBoZXIgZXh0ZW5kcyBBRVNCYXNlQ2lwaGVye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCk7dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uPTEwO3RoaXMuX2tleVNpemU9MTYwO3RoaXMuX3Jjb249bmV3IFVpbnQ4QXJyYXkoWzE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDFdKTt0aGlzLl9rZXk9dGhpcy5fZXhwYW5kS2V5KGUpfV9leHBhbmRLZXkoZSl7Y29uc3QgdD10aGlzLl9zLGk9dGhpcy5fcmNvbixhPW5ldyBVaW50OEFycmF5KDE3Nik7YS5zZXQoZSk7Zm9yKGxldCBlPTE2LHI9MTtlPDE3NjsrK3Ipe2xldCBzPWFbZS0zXSxuPWFbZS0yXSxvPWFbZS0xXSxnPWFbZS00XTtzPXRbc107bj10W25dO289dFtvXTtnPXRbZ107c149aVtyXTtmb3IobGV0IHQ9MDt0PDQ7Kyt0KXthW2VdPXNePWFbZS0xNl07ZSsrO2FbZV09bl49YVtlLTE2XTtlKys7YVtlXT1vXj1hW2UtMTZdO2UrKzthW2VdPWdePWFbZS0xNl07ZSsrfX1yZXR1cm4gYX19Y2xhc3MgQUVTMjU2Q2lwaGVyIGV4dGVuZHMgQUVTQmFzZUNpcGhlcntjb25zdHJ1Y3RvcihlKXtzdXBlcigpO3RoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbj0xNDt0aGlzLl9rZXlTaXplPTIyNDt0aGlzLl9rZXk9dGhpcy5fZXhwYW5kS2V5KGUpfV9leHBhbmRLZXkoZSl7Y29uc3QgdD10aGlzLl9zLGk9bmV3IFVpbnQ4QXJyYXkoMjQwKTtpLnNldChlKTtsZXQgYSxyLHMsbixvPTE7Zm9yKGxldCBlPTMyLGc9MTtlPDI0MDsrK2cpe2lmKGUlMzI9PTE2KXthPXRbYV07cj10W3JdO3M9dFtzXTtuPXRbbl19ZWxzZSBpZihlJTMyPT0wKXthPWlbZS0zXTtyPWlbZS0yXTtzPWlbZS0xXTtuPWlbZS00XTthPXRbYV07cj10W3JdO3M9dFtzXTtuPXRbbl07YV49bzsobzw8PTEpPj0yNTYmJihvPTI1NSYoMjdebykpfWZvcihsZXQgdD0wO3Q8NDsrK3Qpe2lbZV09YV49aVtlLTMyXTtlKys7aVtlXT1yXj1pW2UtMzJdO2UrKztpW2VdPXNePWlbZS0zMl07ZSsrO2lbZV09bl49aVtlLTMyXTtlKyt9fXJldHVybiBpfX1jbGFzcyBQREYxN3tjaGVja093bmVyUGFzc3dvcmQoZSx0LGksYSl7Y29uc3Qgcj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7ci5zZXQoZSwwKTtyLnNldCh0LGUubGVuZ3RoKTtyLnNldChpLGUubGVuZ3RoK3QubGVuZ3RoKTtyZXR1cm4gaXNBcnJheUVxdWFsKFByKHIsMCxyLmxlbmd0aCksYSl9Y2hlY2tVc2VyUGFzc3dvcmQoZSx0LGkpe2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrOCk7YS5zZXQoZSwwKTthLnNldCh0LGUubGVuZ3RoKTtyZXR1cm4gaXNBcnJheUVxdWFsKFByKGEsMCxhLmxlbmd0aCksaSl9Z2V0T3duZXJLZXkoZSx0LGksYSl7Y29uc3Qgcj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7ci5zZXQoZSwwKTtyLnNldCh0LGUubGVuZ3RoKTtyLnNldChpLGUubGVuZ3RoK3QubGVuZ3RoKTtjb25zdCBzPVByKHIsMCxyLmxlbmd0aCk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIocykuZGVjcnlwdEJsb2NrKGEsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX1nZXRVc2VyS2V5KGUsdCxpKXtjb25zdCBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO2Euc2V0KGUsMCk7YS5zZXQodCxlLmxlbmd0aCk7Y29uc3Qgcj1QcihhLDAsYS5sZW5ndGgpO3JldHVybiBuZXcgQUVTMjU2Q2lwaGVyKHIpLmRlY3J5cHRCbG9jayhpLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fWNsYXNzIFBERjIwe19oYXNoKGUsdCxpKXtsZXQgYT1Qcih0LDAsdC5sZW5ndGgpLnN1YmFycmF5KDAsMzIpLHI9WzBdLHM9MDtmb3IoO3M8NjR8fHIuYXQoLTEpPnMtMzI7KXtjb25zdCB0PWUubGVuZ3RoK2EubGVuZ3RoK2kubGVuZ3RoLGM9bmV3IFVpbnQ4QXJyYXkodCk7bGV0IEM9MDtjLnNldChlLEMpO0MrPWUubGVuZ3RoO2Muc2V0KGEsQyk7Qys9YS5sZW5ndGg7Yy5zZXQoaSxDKTtjb25zdCBoPW5ldyBVaW50OEFycmF5KDY0KnQpO2ZvcihsZXQgZT0wLGk9MDtlPDY0O2UrKyxpKz10KWguc2V0KGMsaSk7cj1uZXcgQUVTMTI4Q2lwaGVyKGEuc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQoaCxhLnN1YmFycmF5KDE2LDMyKSk7Y29uc3QgbD1yLnNsaWNlKDAsMTYpLnJlZHVjZSgoKGUsdCk9PmUrdCksMCklMzswPT09bD9hPVByKHIsMCxyLmxlbmd0aCk6MT09PWw/YT0obj1yLG89MCxnPXIubGVuZ3RoLFdyKG4sbyxnLCEwKSk6Mj09PWwmJihhPVdyKHIsMCxyLmxlbmd0aCkpO3MrK312YXIgbixvLGc7cmV0dXJuIGEuc3ViYXJyYXkoMCwzMil9Y2hlY2tPd25lclBhc3N3b3JkKGUsdCxpLGEpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO3Iuc2V0KGUsMCk7ci5zZXQodCxlLmxlbmd0aCk7ci5zZXQoaSxlLmxlbmd0aCt0Lmxlbmd0aCk7cmV0dXJuIGlzQXJyYXlFcXVhbCh0aGlzLl9oYXNoKGUscixpKSxhKX1jaGVja1VzZXJQYXNzd29yZChlLHQsaSl7Y29uc3QgYT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTthLnNldChlLDApO2Euc2V0KHQsZS5sZW5ndGgpO3JldHVybiBpc0FycmF5RXF1YWwodGhpcy5faGFzaChlLGEsW10pLGkpfWdldE93bmVyS2V5KGUsdCxpLGEpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO3Iuc2V0KGUsMCk7ci5zZXQodCxlLmxlbmd0aCk7ci5zZXQoaSxlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3Qgcz10aGlzLl9oYXNoKGUscixpKTtyZXR1cm4gbmV3IEFFUzI1NkNpcGhlcihzKS5kZWNyeXB0QmxvY2soYSwhMSxuZXcgVWludDhBcnJheSgxNikpfWdldFVzZXJLZXkoZSx0LGkpe2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrOCk7YS5zZXQoZSwwKTthLnNldCh0LGUubGVuZ3RoKTtjb25zdCByPXRoaXMuX2hhc2goZSxhLFtdKTtyZXR1cm4gbmV3IEFFUzI1NkNpcGhlcihyKS5kZWNyeXB0QmxvY2soaSwhMSxuZXcgVWludDhBcnJheSgxNikpfX1jbGFzcyBDaXBoZXJUcmFuc2Zvcm17Y29uc3RydWN0b3IoZSx0KXt0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yPWU7dGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3Rvcj10fWNyZWF0ZVN0cmVhbShlLHQpe2NvbnN0IGk9bmV3IHRoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3I7cmV0dXJuIG5ldyBEZWNyeXB0U3RyZWFtKGUsdCwoZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRGVjcnlwdFN0cmVhbShlLHQpe3JldHVybiBpLmRlY3J5cHRCbG9jayhlLHQpfSkpfWRlY3J5cHRTdHJpbmcoZSl7Y29uc3QgdD1uZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcjtsZXQgaT1zdHJpbmdUb0J5dGVzKGUpO2k9dC5kZWNyeXB0QmxvY2soaSwhMCk7cmV0dXJuIGJ5dGVzVG9TdHJpbmcoaSl9ZW5jcnlwdFN0cmluZyhlKXtjb25zdCB0PW5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yO2lmKHQgaW5zdGFuY2VvZiBBRVNCYXNlQ2lwaGVyKXtjb25zdCBpPTE2LWUubGVuZ3RoJTE2O2UrPVN0cmluZy5mcm9tQ2hhckNvZGUoaSkucmVwZWF0KGkpO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoMTYpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvKWNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYSk7ZWxzZSBmb3IobGV0IGU9MDtlPDE2O2UrKylhW2VdPU1hdGguZmxvb3IoMjU2Kk1hdGgucmFuZG9tKCkpO2xldCByPXN0cmluZ1RvQnl0ZXMoZSk7cj10LmVuY3J5cHQocixhKTtjb25zdCBzPW5ldyBVaW50OEFycmF5KDE2K3IubGVuZ3RoKTtzLnNldChhKTtzLnNldChyLDE2KTtyZXR1cm4gYnl0ZXNUb1N0cmluZyhzKX1sZXQgaT1zdHJpbmdUb0J5dGVzKGUpO2k9dC5lbmNyeXB0KGkpO3JldHVybiBieXRlc1RvU3RyaW5nKGkpfX1jbGFzcyBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5e3N0YXRpYyNrPW5ldyBVaW50OEFycmF5KFs0MCwxOTEsNzgsOTQsNzgsMTE3LDEzOCw2NSwxMDAsMCw3OCw4NiwyNTUsMjUwLDEsOCw0Niw0NiwwLDE4MiwyMDgsMTA0LDYyLDEyOCw0NywxMiwxNjksMjU0LDEwMCw4MywxMDUsMTIyXSk7I1IoZSx0LGksYSxyLHMsbixvLGcsYyxDLGgpe2lmKHQpe2NvbnN0IGU9TWF0aC5taW4oMTI3LHQubGVuZ3RoKTt0PXQuc3ViYXJyYXkoMCxlKX1lbHNlIHQ9W107Y29uc3QgbD02PT09ZT9uZXcgUERGMjA6bmV3IFBERjE3O3JldHVybiBsLmNoZWNrVXNlclBhc3N3b3JkKHQsbyxuKT9sLmdldFVzZXJLZXkodCxnLEMpOnQubGVuZ3RoJiZsLmNoZWNrT3duZXJQYXNzd29yZCh0LGEscyxpKT9sLmdldE93bmVyS2V5KHQscixzLGMpOm51bGx9I04oZSx0LGksYSxyLHMsbixvKXtjb25zdCBnPTQwK2kubGVuZ3RoK2UubGVuZ3RoLGM9bmV3IFVpbnQ4QXJyYXkoZyk7bGV0IEMsaCxsPTA7aWYodCl7aD1NYXRoLm1pbigzMix0Lmxlbmd0aCk7Zm9yKDtsPGg7KytsKWNbbF09dFtsXX1DPTA7Zm9yKDtsPDMyOyljW2wrK109Q2lwaGVyVHJhbnNmb3JtRmFjdG9yeS4ja1tDKytdO2ZvcihDPTAsaD1pLmxlbmd0aDtDPGg7KytDKWNbbCsrXT1pW0NdO2NbbCsrXT0yNTUmcjtjW2wrK109cj4+OCYyNTU7Y1tsKytdPXI+PjE2JjI1NTtjW2wrK109cj4+PjI0JjI1NTtmb3IoQz0wLGg9ZS5sZW5ndGg7QzxoOysrQyljW2wrK109ZVtDXTtpZihzPj00JiYhbyl7Y1tsKytdPTI1NTtjW2wrK109MjU1O2NbbCsrXT0yNTU7Y1tsKytdPTI1NX1sZXQgUT1PcihjLDAsbCk7Y29uc3QgRT1uPj4zO2lmKHM+PTMpZm9yKEM9MDtDPDUwOysrQylRPU9yKFEsMCxFKTtjb25zdCB1PVEuc3ViYXJyYXkoMCxFKTtsZXQgZCxmO2lmKHM+PTMpe2ZvcihsPTA7bDwzMjsrK2wpY1tsXT1DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5LiNrW2xdO2ZvcihDPTAsaD1lLmxlbmd0aDtDPGg7KytDKWNbbCsrXT1lW0NdO2Q9bmV3IEFSQ0ZvdXJDaXBoZXIodSk7Zj1kLmVuY3J5cHRCbG9jayhPcihjLDAsbCkpO2g9dS5sZW5ndGg7Y29uc3QgdD1uZXcgVWludDhBcnJheShoKTtmb3IoQz0xO0M8PTE5OysrQyl7Zm9yKGxldCBlPTA7ZTxoOysrZSl0W2VdPXVbZV1eQztkPW5ldyBBUkNGb3VyQ2lwaGVyKHQpO2Y9ZC5lbmNyeXB0QmxvY2soZil9Zm9yKEM9MCxoPWYubGVuZ3RoO0M8aDsrK0MpaWYoYVtDXSE9PWZbQ10pcmV0dXJuIG51bGx9ZWxzZXtkPW5ldyBBUkNGb3VyQ2lwaGVyKHUpO2Y9ZC5lbmNyeXB0QmxvY2soQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeS4jayk7Zm9yKEM9MCxoPWYubGVuZ3RoO0M8aDsrK0MpaWYoYVtDXSE9PWZbQ10pcmV0dXJuIG51bGx9cmV0dXJuIHV9I0coZSx0LGksYSl7Y29uc3Qgcj1uZXcgVWludDhBcnJheSgzMik7bGV0IHM9MDtjb25zdCBuPU1hdGgubWluKDMyLGUubGVuZ3RoKTtmb3IoO3M8bjsrK3MpcltzXT1lW3NdO2xldCBvPTA7Zm9yKDtzPDMyOylyW3MrK109Q2lwaGVyVHJhbnNmb3JtRmFjdG9yeS4ja1tvKytdO2xldCBnPU9yKHIsMCxzKTtjb25zdCBjPWE+PjM7aWYoaT49Mylmb3Iobz0wO288NTA7KytvKWc9T3IoZywwLGcubGVuZ3RoKTtsZXQgQyxoO2lmKGk+PTMpe2g9dDtjb25zdCBlPW5ldyBVaW50OEFycmF5KGMpO2ZvcihvPTE5O28+PTA7by0tKXtmb3IobGV0IHQ9MDt0PGM7Kyt0KWVbdF09Z1t0XV5vO0M9bmV3IEFSQ0ZvdXJDaXBoZXIoZSk7aD1DLmVuY3J5cHRCbG9jayhoKX19ZWxzZXtDPW5ldyBBUkNGb3VyQ2lwaGVyKGcuc3ViYXJyYXkoMCxjKSk7aD1DLmVuY3J5cHRCbG9jayh0KX1yZXR1cm4gaH0jeChlLHQsaSxhPSExKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGkubGVuZ3RoKzkpLHM9aS5sZW5ndGg7bGV0IG47Zm9yKG49MDtuPHM7KytuKXJbbl09aVtuXTtyW24rK109MjU1JmU7cltuKytdPWU+PjgmMjU1O3JbbisrXT1lPj4xNiYyNTU7cltuKytdPTI1NSZ0O3JbbisrXT10Pj44JjI1NTtpZihhKXtyW24rK109MTE1O3JbbisrXT02NTtyW24rK109MTA4O3JbbisrXT04NH1yZXR1cm4gT3IociwwLG4pLnN1YmFycmF5KDAsTWF0aC5taW4oaS5sZW5ndGgrNSwxNikpfSNVKGUsdCxpLGEscil7aWYoISh0IGluc3RhbmNlb2YgTmFtZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIGNyeXB0IGZpbHRlciBuYW1lLiIpO2NvbnN0IHM9dGhpcyxuPWUuZ2V0KHQubmFtZSksbz1uPy5nZXQoIkNGTSIpO2lmKCFvfHwiTm9uZSI9PT1vLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBOdWxsQ2lwaGVyfTtpZigiVjIiPT09by5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgQVJDRm91ckNpcGhlcihzLiN4KGksYSxyLCExKSl9O2lmKCJBRVNWMiI9PT1vLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBRVMxMjhDaXBoZXIocy4jeChpLGEsciwhMCkpfTtpZigiQUVTVjMiPT09by5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgQUVTMjU2Q2lwaGVyKHIpfTt0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVua25vd24gY3J5cHRvIG1ldGhvZCIpfWNvbnN0cnVjdG9yKGUsdCxpKXtjb25zdCBhPWUuZ2V0KCJGaWx0ZXIiKTtpZighaXNOYW1lKGEsIlN0YW5kYXJkIikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kIik7dGhpcy5maWx0ZXJOYW1lPWEubmFtZTt0aGlzLmRpY3Q9ZTtjb25zdCByPWUuZ2V0KCJWIik7aWYoIU51bWJlci5pc0ludGVnZXIocil8fDEhPT1yJiYyIT09ciYmNCE9PXImJjUhPT1yKXRocm93IG5ldyBGb3JtYXRFcnJvcigidW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG0iKTt0aGlzLmFsZ29yaXRobT1yO2xldCBzPWUuZ2V0KCJMZW5ndGgiKTtpZighcylpZihyPD0zKXM9NDA7ZWxzZXtjb25zdCB0PWUuZ2V0KCJDRiIpLGk9ZS5nZXQoIlN0bUYiKTtpZih0IGluc3RhbmNlb2YgRGljdCYmaSBpbnN0YW5jZW9mIE5hbWUpe3Quc3VwcHJlc3NFbmNyeXB0aW9uPSEwO2NvbnN0IGU9dC5nZXQoaS5uYW1lKTtzPWU/LmdldCgiTGVuZ3RoIil8fDEyODtzPDQwJiYoczw8PTMpfX1pZighTnVtYmVyLmlzSW50ZWdlcihzKXx8czw0MHx8cyU4IT0wKXRocm93IG5ldyBGb3JtYXRFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoIik7Y29uc3Qgbj1zdHJpbmdUb0J5dGVzKGUuZ2V0KCJPIikpLG89c3RyaW5nVG9CeXRlcyhlLmdldCgiVSIpKSxnPW4uc3ViYXJyYXkoMCwzMiksYz1vLnN1YmFycmF5KDAsMzIpLEM9ZS5nZXQoIlAiKSxoPWUuZ2V0KCJSIiksbD0oND09PXJ8fDU9PT1yKSYmITEhPT1lLmdldCgiRW5jcnlwdE1ldGFkYXRhIik7dGhpcy5lbmNyeXB0TWV0YWRhdGE9bDtjb25zdCBRPXN0cmluZ1RvQnl0ZXModCk7bGV0IEUsdTtpZihpKXtpZig2PT09aCl0cnl7aT11dGY4U3RyaW5nVG9TdHJpbmcoaSl9Y2F0Y2h7d2FybigiQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeTogVW5hYmxlIHRvIGNvbnZlcnQgVVRGOCBlbmNvZGVkIHBhc3N3b3JkLiIpfUU9c3RyaW5nVG9CeXRlcyhpKX1pZig1IT09cil1PXRoaXMuI04oUSxFLGcsYyxDLGgscyxsKTtlbHNle2NvbnN0IHQ9bi5zdWJhcnJheSgzMiw0MCksaT1uLnN1YmFycmF5KDQwLDQ4KSxhPW8uc3ViYXJyYXkoMCw0OCkscj1vLnN1YmFycmF5KDMyLDQwKSxzPW8uc3ViYXJyYXkoNDAsNDgpLEM9c3RyaW5nVG9CeXRlcyhlLmdldCgiT0UiKSksbD1zdHJpbmdUb0J5dGVzKGUuZ2V0KCJVRSIpKSxRPXN0cmluZ1RvQnl0ZXMoZS5nZXQoIlBlcm1zIikpO3U9dGhpcy4jUihoLEUsZyx0LGksYSxjLHIscyxDLGwsUSl9aWYoIXUmJiFpKXRocm93IG5ldyBQYXNzd29yZEV4Y2VwdGlvbigiTm8gcGFzc3dvcmQgZ2l2ZW4iLG90KTtpZighdSYmaSl7Y29uc3QgZT10aGlzLiNHKEUsZyxoLHMpO3U9dGhpcy4jTihRLGUsZyxjLEMsaCxzLGwpfWlmKCF1KXRocm93IG5ldyBQYXNzd29yZEV4Y2VwdGlvbigiSW5jb3JyZWN0IFBhc3N3b3JkIixndCk7dGhpcy5lbmNyeXB0aW9uS2V5PXU7aWYocj49NCl7Y29uc3QgdD1lLmdldCgiQ0YiKTt0IGluc3RhbmNlb2YgRGljdCYmKHQuc3VwcHJlc3NFbmNyeXB0aW9uPSEwKTt0aGlzLmNmPXQ7dGhpcy5zdG1mPWUuZ2V0KCJTdG1GIil8fE5hbWUuZ2V0KCJJZGVudGl0eSIpO3RoaXMuc3RyZj1lLmdldCgiU3RyRiIpfHxOYW1lLmdldCgiSWRlbnRpdHkiKTt0aGlzLmVmZj1lLmdldCgiRUZGIil8fHRoaXMuc3RtZn19Y3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGUsdCl7aWYoND09PXRoaXMuYWxnb3JpdGhtfHw1PT09dGhpcy5hbGdvcml0aG0pcmV0dXJuIG5ldyBDaXBoZXJUcmFuc2Zvcm0odGhpcy4jVSh0aGlzLmNmLHRoaXMuc3RyZixlLHQsdGhpcy5lbmNyeXB0aW9uS2V5KSx0aGlzLiNVKHRoaXMuY2YsdGhpcy5zdG1mLGUsdCx0aGlzLmVuY3J5cHRpb25LZXkpKTtjb25zdCBpPXRoaXMuI3goZSx0LHRoaXMuZW5jcnlwdGlvbktleSwhMSksY2lwaGVyQ29uc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFSQ0ZvdXJDaXBoZXIoaSl9O3JldHVybiBuZXcgQ2lwaGVyVHJhbnNmb3JtKGNpcGhlckNvbnN0cnVjdG9yLGNpcGhlckNvbnN0cnVjdG9yKX19YXN5bmMgZnVuY3Rpb24gd3JpdGVPYmplY3QoZSx0LGkse2VuY3J5cHQ6YT1udWxsfSl7Y29uc3Qgcj1hPy5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0oZS5udW0sZS5nZW4pO2kucHVzaChgJHtlLm51bX0gJHtlLmdlbn0gb2JqXG5gKTt0IGluc3RhbmNlb2YgRGljdD9hd2FpdCB3cml0ZURpY3QodCxpLHIpOnQgaW5zdGFuY2VvZiBCYXNlU3RyZWFtP2F3YWl0IHdyaXRlU3RyZWFtKHQsaSxyKTooQXJyYXkuaXNBcnJheSh0KXx8QXJyYXlCdWZmZXIuaXNWaWV3KHQpKSYmYXdhaXQgd3JpdGVBcnJheSh0LGkscik7aS5wdXNoKCJcbmVuZG9ialxuIil9YXN5bmMgZnVuY3Rpb24gd3JpdGVEaWN0KGUsdCxpKXt0LnB1c2goIjw8Iik7Zm9yKGNvbnN0IGEgb2YgZS5nZXRLZXlzKCkpe3QucHVzaChgIC8ke2VzY2FwZVBERk5hbWUoYSl9IGApO2F3YWl0IHdyaXRlVmFsdWUoZS5nZXRSYXcoYSksdCxpKX10LnB1c2goIj4+Iil9YXN5bmMgZnVuY3Rpb24gd3JpdGVTdHJlYW0oZSx0LGkpe2xldCBhPWUuZ2V0Qnl0ZXMoKTtjb25zdHtkaWN0OnJ9PWUsW3Msbl09YXdhaXQgUHJvbWlzZS5hbGwoW3IuZ2V0QXN5bmMoIkZpbHRlciIpLHIuZ2V0QXN5bmMoIkRlY29kZVBhcm1zIildKSxvPWlzTmFtZShBcnJheS5pc0FycmF5KHMpP2F3YWl0IHIueHJlZi5mZXRjaElmUmVmQXN5bmMoc1swXSk6cywiRmxhdGVEZWNvZGUiKTtpZihhLmxlbmd0aD49MjU2fHxvKXRyeXtjb25zdCBlPW5ldyBDb21wcmVzc2lvblN0cmVhbSgiZGVmbGF0ZSIpLHQ9ZS53cml0YWJsZS5nZXRXcml0ZXIoKTt0LndyaXRlKGEpO3QuY2xvc2UoKTtjb25zdCBpPWF3YWl0IG5ldyBSZXNwb25zZShlLnJlYWRhYmxlKS5hcnJheUJ1ZmZlcigpO2E9bmV3IFVpbnQ4QXJyYXkoaSk7bGV0IGcsYztpZihzKXtpZighbyl7Zz1BcnJheS5pc0FycmF5KHMpP1tOYW1lLmdldCgiRmxhdGVEZWNvZGUiKSwuLi5zXTpbTmFtZS5nZXQoIkZsYXRlRGVjb2RlIiksc107biYmKGM9QXJyYXkuaXNBcnJheShuKT9bbnVsbCwuLi5uXTpbbnVsbCxuXSl9fWVsc2UgZz1OYW1lLmdldCgiRmxhdGVEZWNvZGUiKTtnJiZyLnNldCgiRmlsdGVyIixnKTtjJiZyLnNldCgiRGVjb2RlUGFybXMiLGMpfWNhdGNoKGUpe2luZm8oYHdyaXRlU3RyZWFtIC0gY2Fubm90IGNvbXByZXNzIGRhdGE6ICIke2V9Ii5gKX1sZXQgZz1ieXRlc1RvU3RyaW5nKGEpO2kmJihnPWkuZW5jcnlwdFN0cmluZyhnKSk7ci5zZXQoIkxlbmd0aCIsZy5sZW5ndGgpO2F3YWl0IHdyaXRlRGljdChyLHQsaSk7dC5wdXNoKCIgc3RyZWFtXG4iLGcsIlxuZW5kc3RyZWFtIil9YXN5bmMgZnVuY3Rpb24gd3JpdGVBcnJheShlLHQsaSl7dC5wdXNoKCJbIik7bGV0IGE9ITA7Zm9yKGNvbnN0IHIgb2YgZSl7YT9hPSExOnQucHVzaCgiICIpO2F3YWl0IHdyaXRlVmFsdWUocix0LGkpfXQucHVzaCgiXSIpfWFzeW5jIGZ1bmN0aW9uIHdyaXRlVmFsdWUoZSx0LGkpe2lmKGUgaW5zdGFuY2VvZiBOYW1lKXQucHVzaChgLyR7ZXNjYXBlUERGTmFtZShlLm5hbWUpfWApO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIFJlZil0LnB1c2goYCR7ZS5udW19ICR7ZS5nZW59IFJgKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSl8fEFycmF5QnVmZmVyLmlzVmlldyhlKSlhd2FpdCB3cml0ZUFycmF5KGUsdCxpKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSl7aSYmKGU9aS5lbmNyeXB0U3RyaW5nKGUpKTt0LnB1c2goYCgke2VzY2FwZVN0cmluZyhlKX0pYCl9ZWxzZSJudW1iZXIiPT10eXBlb2YgZT90LnB1c2gobnVtYmVyVG9TdHJpbmcoZSkpOiJib29sZWFuIj09dHlwZW9mIGU/dC5wdXNoKGUudG9TdHJpbmcoKSk6ZSBpbnN0YW5jZW9mIERpY3Q/YXdhaXQgd3JpdGVEaWN0KGUsdCxpKTplIGluc3RhbmNlb2YgQmFzZVN0cmVhbT9hd2FpdCB3cml0ZVN0cmVhbShlLHQsaSk6bnVsbD09PWU/dC5wdXNoKCJudWxsIik6d2FybihgVW5oYW5kbGVkIHZhbHVlIGluIHdyaXRlcjogJHt0eXBlb2YgZX0sIHBsZWFzZSBmaWxlIGEgYnVnLmApfWZ1bmN0aW9uIHdyaXRlSW50KGUsdCxpLGEpe2ZvcihsZXQgcj10K2ktMTtyPmktMTtyLS0pe2Fbcl09MjU1JmU7ZT4+PTh9cmV0dXJuIGkrdH1mdW5jdGlvbiB3cml0ZVN0cmluZyhlLHQsaSl7Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7YSsrKWlbdCthXT0yNTUmZS5jaGFyQ29kZUF0KGEpfWZ1bmN0aW9uIHVwZGF0ZVhGQSh7eGZhRGF0YTplLHhmYURhdGFzZXRzUmVmOnQsbmV3UmVmczppLHhyZWY6YX0pe2lmKG51bGw9PT1lKXtlPWZ1bmN0aW9uIHdyaXRlWEZBRGF0YUZvckFjcm9mb3JtKGUsdCl7Y29uc3QgaT1uZXcgU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpO2Zvcihjb25zdHt4ZmE6ZX1vZiB0KXtpZighZSljb250aW51ZTtjb25zdHtwYXRoOnQsdmFsdWU6YX09ZTtpZighdCljb250aW51ZTtjb25zdCByPXBhcnNlWEZBUGF0aCh0KTtsZXQgcz1pLmRvY3VtZW50RWxlbWVudC5zZWFyY2hOb2RlKHIsMCk7IXMmJnIubGVuZ3RoPjEmJihzPWkuZG9jdW1lbnRFbGVtZW50LnNlYXJjaE5vZGUoW3IuYXQoLTEpXSwwKSk7cz9zLmNoaWxkTm9kZXM9QXJyYXkuaXNBcnJheShhKT9hLm1hcCgoZT0+bmV3IFNpbXBsZURPTU5vZGUoInZhbHVlIixlKSkpOltuZXcgU2ltcGxlRE9NTm9kZSgiI3RleHQiLGEpXTp3YXJuKGBOb2RlIG5vdCBmb3VuZCBmb3IgcGF0aDogJHt0fWApfWNvbnN0IGE9W107aS5kb2N1bWVudEVsZW1lbnQuZHVtcChhKTtyZXR1cm4gYS5qb2luKCIiKX0oYS5mZXRjaElmUmVmKHQpLmdldFN0cmluZygpLGkpfWNvbnN0IHI9YS5lbmNyeXB0O2lmKHIpe2U9ci5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odC5udW0sdC5nZW4pLmVuY3J5cHRTdHJpbmcoZSl9Y29uc3Qgcz1gJHt0Lm51bX0gJHt0Lmdlbn0gb2JqXG48PCAvVHlwZSAvRW1iZWRkZWRGaWxlIC9MZW5ndGggJHtlLmxlbmd0aH0+Plxuc3RyZWFtXG5gK2UrIlxuZW5kc3RyZWFtXG5lbmRvYmpcbiI7aS5wdXNoKHtyZWY6dCxkYXRhOnN9KX1mdW5jdGlvbiBnZXRJbmRleGVzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0e3JlZjppfW9mIGUpaS5udW09PT10LmF0KC0yKSt0LmF0KC0xKT90W3QubGVuZ3RoLTFdKz0xOnQucHVzaChpLm51bSwxKTtyZXR1cm4gdH1mdW5jdGlvbiBjb21wdXRlSURzKGUsdCxpKXtpZihBcnJheS5pc0FycmF5KHQuZmlsZUlkcykmJnQuZmlsZUlkcy5sZW5ndGg+MCl7Y29uc3QgYT1mdW5jdGlvbiBjb21wdXRlTUQ1KGUsdCl7Y29uc3QgaT1NYXRoLmZsb29yKERhdGUubm93KCkvMWUzKSxhPXQuZmlsZW5hbWV8fCIiLHI9W2kudG9TdHJpbmcoKSxhLGUudG9TdHJpbmcoKV07bGV0IHM9ci5yZWR1Y2UoKChlLHQpPT5lK3QubGVuZ3RoKSwwKTtmb3IoY29uc3QgZSBvZiBPYmplY3QudmFsdWVzKHQuaW5mbykpe3IucHVzaChlKTtzKz1lLmxlbmd0aH1jb25zdCBuPW5ldyBVaW50OEFycmF5KHMpO2xldCBvPTA7Zm9yKGNvbnN0IGUgb2Ygcil7d3JpdGVTdHJpbmcoZSxvLG4pO28rPWUubGVuZ3RofXJldHVybiBieXRlc1RvU3RyaW5nKE9yKG4pKX0oZSx0KTtpLnNldCgiSUQiLFt0LmZpbGVJZHNbMF0sYV0pfX1hc3luYyBmdW5jdGlvbiBpbmNyZW1lbnRhbFVwZGF0ZSh7b3JpZ2luYWxEYXRhOmUseHJlZkluZm86dCxuZXdSZWZzOmkseHJlZjphPW51bGwsaGFzWGZhOnI9ITEseGZhRGF0YXNldHNSZWY6cz1udWxsLGhhc1hmYURhdGFzZXRzRW50cnk6bj0hMSxuZWVkQXBwZWFyYW5jZXM6byxhY3JvRm9ybVJlZjpnPW51bGwsYWNyb0Zvcm06Yz1udWxsLHhmYURhdGE6Qz1udWxsLHVzZVhyZWZTdHJlYW06aD0hMX0pe2F3YWl0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUFjcm9mb3JtKHt4cmVmOmUsYWNyb0Zvcm06dCxhY3JvRm9ybVJlZjppLGhhc1hmYTphLGhhc1hmYURhdGFzZXRzRW50cnk6cix4ZmFEYXRhc2V0c1JlZjpzLG5lZWRBcHBlYXJhbmNlczpuLG5ld1JlZnM6b30peyFhfHxyfHxzfHx3YXJuKCJYRkEgLSBDYW5ub3Qgc2F2ZSBpdCIpO2lmKCFuJiYoIWF8fCFzfHxyKSlyZXR1cm47Y29uc3QgZz10LmNsb25lKCk7aWYoYSYmIXIpe2NvbnN0IGU9dC5nZXQoIlhGQSIpLnNsaWNlKCk7ZS5zcGxpY2UoMiwwLCJkYXRhc2V0cyIpO2Uuc3BsaWNlKDMsMCxzKTtnLnNldCgiWEZBIixlKX1uJiZnLnNldCgiTmVlZEFwcGVhcmFuY2VzIiwhMCk7Y29uc3QgYz1bXTthd2FpdCB3cml0ZU9iamVjdChpLGcsYyxlKTtvLnB1c2goe3JlZjppLGRhdGE6Yy5qb2luKCIiKX0pfSh7eHJlZjphLGFjcm9Gb3JtOmMsYWNyb0Zvcm1SZWY6ZyxoYXNYZmE6cixoYXNYZmFEYXRhc2V0c0VudHJ5Om4seGZhRGF0YXNldHNSZWY6cyxuZWVkQXBwZWFyYW5jZXM6byxuZXdSZWZzOml9KTtyJiZ1cGRhdGVYRkEoe3hmYURhdGE6Qyx4ZmFEYXRhc2V0c1JlZjpzLG5ld1JlZnM6aSx4cmVmOmF9KTtjb25zdCBsPVtdO2xldCBRPWUubGVuZ3RoO2NvbnN0IEU9ZS5hdCgtMSk7aWYoMTAhPT1FJiYxMyE9PUUpe2wucHVzaCgiXG4iKTtRKz0xfWNvbnN0IHU9ZnVuY3Rpb24gZ2V0VHJhaWxlckRpY3QoZSx0LGkpe2NvbnN0IGE9bmV3IERpY3QobnVsbCk7YS5zZXQoIlByZXYiLGUuc3RhcnRYUmVmKTtjb25zdCByPWUubmV3UmVmO2lmKGkpe3QucHVzaCh7cmVmOnIsZGF0YToiIn0pO2Euc2V0KCJTaXplIixyLm51bSsxKTthLnNldCgiVHlwZSIsTmFtZS5nZXQoIlhSZWYiKSl9ZWxzZSBhLnNldCgiU2l6ZSIsci5udW0pO251bGwhPT1lLnJvb3RSZWYmJmEuc2V0KCJSb290IixlLnJvb3RSZWYpO251bGwhPT1lLmluZm9SZWYmJmEuc2V0KCJJbmZvIixlLmluZm9SZWYpO251bGwhPT1lLmVuY3J5cHRSZWYmJmEuc2V0KCJFbmNyeXB0IixlLmVuY3J5cHRSZWYpO3JldHVybiBhfSh0LGksaCk7aT1pLnNvcnQoKChlLHQpPT5lLnJlZi5udW0tdC5yZWYubnVtKSk7Zm9yKGNvbnN0e2RhdGE6ZX1vZiBpKW51bGwhPT1lJiZsLnB1c2goZSk7YXdhaXQoaD9hc3luYyBmdW5jdGlvbiBnZXRYUmVmU3RyZWFtVGFibGUoZSx0LGksYSxyKXtjb25zdCBzPVtdO2xldCBuPTAsbz0wO2Zvcihjb25zdHtyZWY6ZSxkYXRhOmF9b2YgaSl7bGV0IGk7bj1NYXRoLm1heChuLHQpO2lmKG51bGwhPT1hKXtpPU1hdGgubWluKGUuZ2VuLDY1NTM1KTtzLnB1c2goWzEsdCxpXSk7dCs9YS5sZW5ndGh9ZWxzZXtpPU1hdGgubWluKGUuZ2VuKzEsNjU1MzUpO3MucHVzaChbMCwwLGldKX1vPU1hdGgubWF4KG8saSl9YS5zZXQoIkluZGV4IixnZXRJbmRleGVzKGkpKTtjb25zdCBnPVsxLGdldFNpemVJbkJ5dGVzKG4pLGdldFNpemVJbkJ5dGVzKG8pXTthLnNldCgiVyIsZyk7Y29tcHV0ZUlEcyh0LGUsYSk7Y29uc3QgYz1nLnJlZHVjZSgoKGUsdCk9PmUrdCksMCksQz1uZXcgVWludDhBcnJheShjKnMubGVuZ3RoKSxoPW5ldyBTdHJlYW0oQyk7aC5kaWN0PWE7bGV0IGw9MDtmb3IoY29uc3RbZSx0LGldb2Ygcyl7bD13cml0ZUludChlLGdbMF0sbCxDKTtsPXdyaXRlSW50KHQsZ1sxXSxsLEMpO2w9d3JpdGVJbnQoaSxnWzJdLGwsQyl9YXdhaXQgd3JpdGVPYmplY3QoZS5uZXdSZWYsaCxyLHt9KTtyLnB1c2goInN0YXJ0eHJlZlxuIix0LnRvU3RyaW5nKCksIlxuJSVFT0ZcbiIpfSh0LFEsaSx1LGwpOmFzeW5jIGZ1bmN0aW9uIGdldFhSZWZUYWJsZShlLHQsaSxhLHIpe3IucHVzaCgieHJlZlxuIik7Y29uc3Qgcz1nZXRJbmRleGVzKGkpO2xldCBuPTA7Zm9yKGNvbnN0e3JlZjplLGRhdGE6YX1vZiBpKXtpZihlLm51bT09PXNbbl0pe3IucHVzaChgJHtzW25dfSAke3NbbisxXX1cbmApO24rPTJ9aWYobnVsbCE9PWEpe3IucHVzaChgJHt0LnRvU3RyaW5nKCkucGFkU3RhcnQoMTAsIjAiKX0gJHtNYXRoLm1pbihlLmdlbiw2NTUzNSkudG9TdHJpbmcoKS5wYWRTdGFydCg1LCIwIil9IG5cclxuYCk7dCs9YS5sZW5ndGh9ZWxzZSByLnB1c2goYDAwMDAwMDAwMDAgJHtNYXRoLm1pbihlLmdlbisxLDY1NTM1KS50b1N0cmluZygpLnBhZFN0YXJ0KDUsIjAiKX0gZlxyXG5gKX1jb21wdXRlSURzKHQsZSxhKTtyLnB1c2goInRyYWlsZXJcbiIpO2F3YWl0IHdyaXRlRGljdChhLHIpO3IucHVzaCgiXG5zdGFydHhyZWZcbiIsdC50b1N0cmluZygpLCJcbiUlRU9GXG4iKX0odCxRLGksdSxsKSk7Y29uc3QgZD1sLnJlZHVjZSgoKGUsdCk9PmUrdC5sZW5ndGgpLGUubGVuZ3RoKSxmPW5ldyBVaW50OEFycmF5KGQpO2Yuc2V0KGUpO2xldCBwPWUubGVuZ3RoO2Zvcihjb25zdCBlIG9mIGwpe3dyaXRlU3RyaW5nKGUscCxmKTtwKz1lLmxlbmd0aH1yZXR1cm4gZn1jb25zdCBqcj0xLFhyPTIsWnI9MyxWcj00LF9yPTU7Y2xhc3MgU3RydWN0VHJlZVJvb3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRpY3Q9ZTt0aGlzLnJlZj10IGluc3RhbmNlb2YgUmVmP3Q6bnVsbDt0aGlzLnJvbGVNYXA9bmV3IE1hcDt0aGlzLnN0cnVjdFBhcmVudElkcz1udWxsfWluaXQoKXt0aGlzLnJlYWRSb2xlTWFwKCl9I00oZSx0LGkpe2lmKCEoZSBpbnN0YW5jZW9mIFJlZil8fHQ8MClyZXR1cm47dGhpcy5zdHJ1Y3RQYXJlbnRJZHN8fD1uZXcgUmVmU2V0Q2FjaGU7bGV0IGE9dGhpcy5zdHJ1Y3RQYXJlbnRJZHMuZ2V0KGUpO2lmKCFhKXthPVtdO3RoaXMuc3RydWN0UGFyZW50SWRzLnB1dChlLGEpfWEucHVzaChbdCxpXSl9YWRkQW5ub3RhdGlvbklkVG9QYWdlKGUsdCl7dGhpcy4jTShlLHQsVnIpfXJlYWRSb2xlTWFwKCl7Y29uc3QgZT10aGlzLmRpY3QuZ2V0KCJSb2xlTWFwIik7ZSBpbnN0YW5jZW9mIERpY3QmJmUuZm9yRWFjaCgoKGUsdCk9Pnt0IGluc3RhbmNlb2YgTmFtZSYmdGhpcy5yb2xlTWFwLnNldChlLHQubmFtZSl9KSl9c3RhdGljIGFzeW5jIGNhbkNyZWF0ZVN0cnVjdHVyZVRyZWUoe2NhdGFsb2dSZWY6ZSxwZGZNYW5hZ2VyOnQsbmV3QW5ub3RhdGlvbnNCeVBhZ2U6aX0pe2lmKCEoZSBpbnN0YW5jZW9mIFJlZikpe3dhcm4oIkNhbm5vdCBzYXZlIHRoZSBzdHJ1Y3QgdHJlZTogbm8gY2F0YWxvZyByZWZlcmVuY2UuIik7cmV0dXJuITF9bGV0IGE9MCxyPSEwO2Zvcihjb25zdFtlLHNdb2YgaSl7Y29uc3R7cmVmOml9PWF3YWl0IHQuZ2V0UGFnZShlKTtpZighKGkgaW5zdGFuY2VvZiBSZWYpKXt3YXJuKGBDYW5ub3Qgc2F2ZSB0aGUgc3RydWN0IHRyZWU6IHBhZ2UgJHtlfSBoYXMgbm8gcmVmLmApO3I9ITA7YnJlYWt9Zm9yKGNvbnN0IGUgb2YgcylpZihlLmFjY2Vzc2liaWxpdHlEYXRhPy50eXBlKXtlLnBhcmVudFRyZWVJZD1hKys7cj0hMX19aWYocil7Zm9yKGNvbnN0IGUgb2YgaS52YWx1ZXMoKSlmb3IoY29uc3QgdCBvZiBlKWRlbGV0ZSB0LnBhcmVudFRyZWVJZDtyZXR1cm4hMX1yZXR1cm4hMH1zdGF0aWMgYXN5bmMgY3JlYXRlU3RydWN0dXJlVHJlZSh7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6ZSx4cmVmOnQsY2F0YWxvZ1JlZjppLHBkZk1hbmFnZXI6YSxuZXdSZWZzOnJ9KXtjb25zdCBzPWEuY2F0YWxvZy5jbG9uZURpY3QoKSxuPW5ldyBSZWZTZXRDYWNoZTtuLnB1dChpLHMpO2NvbnN0IG89dC5nZXROZXdUZW1wb3JhcnlSZWYoKTtzLnNldCgiU3RydWN0VHJlZVJvb3QiLG8pO2NvbnN0IGc9bmV3IERpY3QodCk7Zy5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJTdHJ1Y3RUcmVlUm9vdCIpKTtjb25zdCBjPXQuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7Zy5zZXQoIlBhcmVudFRyZWUiLGMpO2NvbnN0IEM9W107Zy5zZXQoIksiLEMpO24ucHV0KG8sZyk7Y29uc3QgaD1uZXcgRGljdCh0KSxsPVtdO2guc2V0KCJOdW1zIixsKTtjb25zdCBRPWF3YWl0IHRoaXMuI0woe25ld0Fubm90YXRpb25zQnlQYWdlOmUsc3RydWN0VHJlZVJvb3RSZWY6byxzdHJ1Y3RUcmVlUm9vdDpudWxsLGtpZHM6QyxudW1zOmwseHJlZjp0LHBkZk1hbmFnZXI6YSxuZXdSZWZzOnIsY2FjaGU6bn0pO2cuc2V0KCJQYXJlbnRUcmVlTmV4dEtleSIsUSk7bi5wdXQoYyxoKTtjb25zdCBFPVtdO2Zvcihjb25zdFtlLGldb2Ygbi5pdGVtcygpKXtFLmxlbmd0aD0wO2F3YWl0IHdyaXRlT2JqZWN0KGUsaSxFLHQpO3IucHVzaCh7cmVmOmUsZGF0YTpFLmpvaW4oIiIpfSl9fWFzeW5jIGNhblVwZGF0ZVN0cnVjdFRyZWUoe3BkZk1hbmFnZXI6ZSx4cmVmOnQsbmV3QW5ub3RhdGlvbnNCeVBhZ2U6aX0pe2lmKCF0aGlzLnJlZil7d2FybigiQ2Fubm90IHVwZGF0ZSB0aGUgc3RydWN0IHRyZWU6IG5vIHJvb3QgcmVmZXJlbmNlLiIpO3JldHVybiExfWxldCBhPXRoaXMuZGljdC5nZXQoIlBhcmVudFRyZWVOZXh0S2V5Iik7aWYoIU51bWJlci5pc0ludGVnZXIoYSl8fGE8MCl7d2FybigiQ2Fubm90IHVwZGF0ZSB0aGUgc3RydWN0IHRyZWU6IGludmFsaWQgbmV4dCBrZXkuIik7cmV0dXJuITF9Y29uc3Qgcj10aGlzLmRpY3QuZ2V0KCJQYXJlbnRUcmVlIik7aWYoIShyIGluc3RhbmNlb2YgRGljdCkpe3dhcm4oIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBQYXJlbnRUcmVlIGlzbid0IGEgZGljdC4iKTtyZXR1cm4hMX1jb25zdCBzPXIuZ2V0KCJOdW1zIik7aWYoIUFycmF5LmlzQXJyYXkocykpe3dhcm4oIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBudW1zIGlzbid0IGFuIGFycmF5LiIpO3JldHVybiExfWNvbnN0IG49bmV3IE51bWJlclRyZWUocix0KTtmb3IoY29uc3QgdCBvZiBpLmtleXMoKSl7Y29uc3R7cGFnZURpY3Q6aX09YXdhaXQgZS5nZXRQYWdlKHQpO2lmKCFpLmhhcygiU3RydWN0UGFyZW50cyIpKWNvbnRpbnVlO2NvbnN0IGE9aS5nZXQoIlN0cnVjdFBhcmVudHMiKTtpZighTnVtYmVyLmlzSW50ZWdlcihhKXx8IUFycmF5LmlzQXJyYXkobi5nZXQoYSkpKXt3YXJuKGBDYW5ub3Qgc2F2ZSB0aGUgc3RydWN0IHRyZWU6IHBhZ2UgJHt0fSBoYXMgYSB3cm9uZyBpZC5gKTtyZXR1cm4hMX19bGV0IG89ITA7Zm9yKGNvbnN0W3Qscl1vZiBpKXtjb25zdHtwYWdlRGljdDppfT1hd2FpdCBlLmdldFBhZ2UodCk7U3RydWN0VHJlZVJvb3QuI0goe2VsZW1lbnRzOnIseHJlZjp0aGlzLmRpY3QueHJlZixwYWdlRGljdDppLG51bWJlclRyZWU6bn0pO2Zvcihjb25zdCBlIG9mIHIpaWYoZS5hY2Nlc3NpYmlsaXR5RGF0YT8udHlwZSl7ZS5hY2Nlc3NpYmlsaXR5RGF0YS5zdHJ1Y3RQYXJlbnQ+PTB8fChlLnBhcmVudFRyZWVJZD1hKyspO289ITF9fWlmKG8pe2Zvcihjb25zdCBlIG9mIGkudmFsdWVzKCkpZm9yKGNvbnN0IHQgb2YgZSl7ZGVsZXRlIHQucGFyZW50VHJlZUlkO2RlbGV0ZSB0LnN0cnVjdFRyZWVQYXJlbnR9cmV0dXJuITF9cmV0dXJuITB9YXN5bmMgdXBkYXRlU3RydWN0dXJlVHJlZSh7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6ZSxwZGZNYW5hZ2VyOnQsbmV3UmVmczppfSl7Y29uc3QgYT10aGlzLmRpY3QueHJlZixyPXRoaXMuZGljdC5jbG9uZSgpLHM9dGhpcy5yZWYsbj1uZXcgUmVmU2V0Q2FjaGU7bi5wdXQocyxyKTtsZXQgbyxnPXIuZ2V0UmF3KCJQYXJlbnRUcmVlIik7aWYoZyBpbnN0YW5jZW9mIFJlZilvPWEuZmV0Y2goZyk7ZWxzZXtvPWc7Zz1hLmdldE5ld1RlbXBvcmFyeVJlZigpO3Iuc2V0KCJQYXJlbnRUcmVlIixnKX1vPW8uY2xvbmUoKTtuLnB1dChnLG8pO2xldCBjPW8uZ2V0UmF3KCJOdW1zIiksQz1udWxsO2lmKGMgaW5zdGFuY2VvZiBSZWYpe0M9YztjPWEuZmV0Y2goQyl9Yz1jLnNsaWNlKCk7Q3x8by5zZXQoIk51bXMiLGMpO2NvbnN0IGg9YXdhaXQgU3RydWN0VHJlZVJvb3QuI0woe25ld0Fubm90YXRpb25zQnlQYWdlOmUsc3RydWN0VHJlZVJvb3RSZWY6cyxzdHJ1Y3RUcmVlUm9vdDp0aGlzLGtpZHM6bnVsbCxudW1zOmMseHJlZjphLHBkZk1hbmFnZXI6dCxuZXdSZWZzOmksY2FjaGU6bn0pO2lmKC0xPT09aClyZXR1cm47ci5zZXQoIlBhcmVudFRyZWVOZXh0S2V5IixoKTtDJiZuLnB1dChDLGMpO2NvbnN0IGw9W107Zm9yKGNvbnN0W2UsdF1vZiBuLml0ZW1zKCkpe2wubGVuZ3RoPTA7YXdhaXQgd3JpdGVPYmplY3QoZSx0LGwsYSk7aS5wdXNoKHtyZWY6ZSxkYXRhOmwuam9pbigiIil9KX19c3RhdGljIGFzeW5jI0woe25ld0Fubm90YXRpb25zQnlQYWdlOmUsc3RydWN0VHJlZVJvb3RSZWY6dCxzdHJ1Y3RUcmVlUm9vdDppLGtpZHM6YSxudW1zOnIseHJlZjpzLHBkZk1hbmFnZXI6bixuZXdSZWZzOm8sY2FjaGU6Z30pe2NvbnN0IGM9TmFtZS5nZXQoIk9CSlIiKTtsZXQgQyxoPS0xO2NvbnN0IGw9W107Zm9yKGNvbnN0W1EsRV1vZiBlKXtjb25zdCBlPWF3YWl0IG4uZ2V0UGFnZShRKSx7cmVmOnV9PWUsZD11IGluc3RhbmNlb2YgUmVmO2Zvcihjb25zdHthY2Nlc3NpYmlsaXR5RGF0YTpuLHJlZjpmLHBhcmVudFRyZWVJZDpwLHN0cnVjdFRyZWVQYXJlbnQ6bX1vZiBFKXtpZighbj8udHlwZSljb250aW51ZTtjb25zdHtzdHJ1Y3RQYXJlbnQ6RX09bjtpZihpJiZOdW1iZXIuaXNJbnRlZ2VyKEUpJiZFPj0wKXtsZXQgdD0oQ3x8PW5ldyBNYXApLmdldChRKTtpZih2b2lkIDA9PT10KXt0PW5ldyBTdHJ1Y3RUcmVlUGFnZShpLGUucGFnZURpY3QpLmNvbGxlY3RPYmplY3RzKHUpO0Muc2V0KFEsdCl9Y29uc3QgYT10Py5nZXQoRSk7aWYoYSl7Y29uc3QgZT1zLmZldGNoKGEpLmNsb25lKCk7U3RydWN0VHJlZVJvb3QuI0ooZSxuKTtsLmxlbmd0aD0wO2F3YWl0IHdyaXRlT2JqZWN0KGEsZSxsLHMpO28ucHVzaCh7cmVmOmEsZGF0YTpsLmpvaW4oIiIpfSk7Y29udGludWV9fWg9TWF0aC5tYXgoaCxwKTtjb25zdCB5PXMuZ2V0TmV3VGVtcG9yYXJ5UmVmKCksdz1uZXcgRGljdChzKTtTdHJ1Y3RUcmVlUm9vdC4jSih3LG4pO2F3YWl0IHRoaXMuI3Yoe3N0cnVjdFRyZWVQYXJlbnQ6bSx0YWdEaWN0OncsbmV3VGFnUmVmOnksc3RydWN0VHJlZVJvb3RSZWY6dCxmYWxsYmFja0tpZHM6YSx4cmVmOnMsY2FjaGU6Z30pO2NvbnN0IGI9bmV3IERpY3Qocyk7dy5zZXQoIksiLGIpO2Iuc2V0KCJUeXBlIixjKTtkJiZiLnNldCgiUGciLHUpO2Iuc2V0KCJPYmoiLGYpO2cucHV0KHksdyk7ci5wdXNoKHAseSl9fXJldHVybiBoKzF9c3RhdGljI0ooZSx7dHlwZTp0LHRpdGxlOmksbGFuZzphLGFsdDpyLGV4cGFuZGVkOnMsYWN0dWFsVGV4dDpufSl7ZS5zZXQoIlMiLE5hbWUuZ2V0KHQpKTtpJiZlLnNldCgiVCIsc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRShpKSk7YSYmZS5zZXQoIkxhbmciLHN0cmluZ1RvQXNjaWlPclVURjE2QkUoYSkpO3ImJmUuc2V0KCJBbHQiLHN0cmluZ1RvQXNjaWlPclVURjE2QkUocikpO3MmJmUuc2V0KCJFIixzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKHMpKTtuJiZlLnNldCgiQWN0dWFsVGV4dCIsc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRShuKSl9c3RhdGljI0goe2VsZW1lbnRzOmUseHJlZjp0LHBhZ2VEaWN0OmksbnVtYmVyVHJlZTphfSl7Y29uc3Qgcj1uZXcgTWFwO2Zvcihjb25zdCB0IG9mIGUpaWYodC5zdHJ1Y3RUcmVlUGFyZW50SWQpe2NvbnN0IGU9cGFyc2VJbnQodC5zdHJ1Y3RUcmVlUGFyZW50SWQuc3BsaXQoIl9tYyIpWzFdLDEwKTtsZXQgaT1yLmdldChlKTtpZighaSl7aT1bXTtyLnNldChlLGkpfWkucHVzaCh0KX1jb25zdCBzPWkuZ2V0KCJTdHJ1Y3RQYXJlbnRzIik7aWYoIU51bWJlci5pc0ludGVnZXIocykpcmV0dXJuO2NvbnN0IG49YS5nZXQocyksdXBkYXRlRWxlbWVudD0oZSxpLGEpPT57Y29uc3Qgcz1yLmdldChlKTtpZihzKXtjb25zdCBlPWkuZ2V0UmF3KCJQIikscj10LmZldGNoSWZSZWYoZSk7aWYoZSBpbnN0YW5jZW9mIFJlZiYmciBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGU9e3JlZjphLGRpY3Q6aX07Zm9yKGNvbnN0IHQgb2Ygcyl0LnN0cnVjdFRyZWVQYXJlbnQ9ZX1yZXR1cm4hMH1yZXR1cm4hMX07Zm9yKGNvbnN0IGUgb2Ygbil7aWYoIShlIGluc3RhbmNlb2YgUmVmKSljb250aW51ZTtjb25zdCBpPXQuZmV0Y2goZSksYT1pLmdldCgiSyIpO2lmKE51bWJlci5pc0ludGVnZXIoYSkpdXBkYXRlRWxlbWVudChhLGksZSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGEpKWZvcihsZXQgciBvZiBhKXtyPXQuZmV0Y2hJZlJlZihyKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHIpJiZ1cGRhdGVFbGVtZW50KHIsaSxlKSlicmVhaztpZighKHIgaW5zdGFuY2VvZiBEaWN0KSljb250aW51ZTtpZighaXNOYW1lKHIuZ2V0KCJUeXBlIiksIk1DUiIpKWJyZWFrO2NvbnN0IGE9ci5nZXQoIk1DSUQiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGEpJiZ1cGRhdGVFbGVtZW50KGEsaSxlKSlicmVha319fXN0YXRpYyBhc3luYyN2KHtzdHJ1Y3RUcmVlUGFyZW50OmUsdGFnRGljdDp0LG5ld1RhZ1JlZjppLHN0cnVjdFRyZWVSb290UmVmOmEsZmFsbGJhY2tLaWRzOnIseHJlZjpzLGNhY2hlOm59KXtsZXQgbyxnPW51bGw7aWYoZSl7KHtyZWY6Z309ZSk7bz1lLmRpY3QuZ2V0UmF3KCJQIil8fGF9ZWxzZSBvPWE7dC5zZXQoIlAiLG8pO2NvbnN0IGM9cy5mZXRjaElmUmVmKG8pO2lmKCFjKXtyLnB1c2goaSk7cmV0dXJufWxldCBDPW4uZ2V0KG8pO2lmKCFDKXtDPWMuY2xvbmUoKTtuLnB1dChvLEMpfWNvbnN0IGg9Qy5nZXRSYXcoIksiKTtsZXQgbD1oIGluc3RhbmNlb2YgUmVmP24uZ2V0KGgpOm51bGw7aWYoIWwpe2w9cy5mZXRjaElmUmVmKGgpO2w9QXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKCk6W2hdO2NvbnN0IGU9cy5nZXROZXdUZW1wb3JhcnlSZWYoKTtDLnNldCgiSyIsZSk7bi5wdXQoZSxsKX1jb25zdCBRPWwuaW5kZXhPZihnKTtsLnNwbGljZShRPj0wP1ErMTpsLmxlbmd0aCwwLGkpfX1jbGFzcyBTdHJ1Y3RFbGVtZW50Tm9kZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMudHJlZT1lO3RoaXMuZGljdD10O3RoaXMua2lkcz1bXTt0aGlzLnBhcnNlS2lkcygpfWdldCByb2xlKCl7Y29uc3QgZT10aGlzLmRpY3QuZ2V0KCJTIiksdD1lIGluc3RhbmNlb2YgTmFtZT9lLm5hbWU6IiIse3Jvb3Q6aX09dGhpcy50cmVlO3JldHVybiBpLnJvbGVNYXAuaGFzKHQpP2kucm9sZU1hcC5nZXQodCk6dH1wYXJzZUtpZHMoKXtsZXQgZT1udWxsO2NvbnN0IHQ9dGhpcy5kaWN0LmdldFJhdygiUGciKTt0IGluc3RhbmNlb2YgUmVmJiYoZT10LnRvU3RyaW5nKCkpO2NvbnN0IGk9dGhpcy5kaWN0LmdldCgiSyIpO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGNvbnN0IHQgb2YgaSl7Y29uc3QgaT10aGlzLnBhcnNlS2lkKGUsdCk7aSYmdGhpcy5raWRzLnB1c2goaSl9ZWxzZXtjb25zdCB0PXRoaXMucGFyc2VLaWQoZSxpKTt0JiZ0aGlzLmtpZHMucHVzaCh0KX19cGFyc2VLaWQoZSx0KXtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXJldHVybiB0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6anIsbWNpZDp0LHBhZ2VPYmpJZDplfSk7bGV0IGk9bnVsbDt0IGluc3RhbmNlb2YgUmVmP2k9dGhpcy5kaWN0LnhyZWYuZmV0Y2godCk6dCBpbnN0YW5jZW9mIERpY3QmJihpPXQpO2lmKCFpKXJldHVybiBudWxsO2NvbnN0IGE9aS5nZXRSYXcoIlBnIik7YSBpbnN0YW5jZW9mIFJlZiYmKGU9YS50b1N0cmluZygpKTtjb25zdCByPWkuZ2V0KCJUeXBlIilpbnN0YW5jZW9mIE5hbWU/aS5nZXQoIlR5cGUiKS5uYW1lOm51bGw7aWYoIk1DUiI9PT1yKXtpZih0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lKXJldHVybiBudWxsO2NvbnN0IHQ9aS5nZXRSYXcoIlN0bSIpO3JldHVybiBuZXcgU3RydWN0RWxlbWVudCh7dHlwZTpYcixyZWZPYmpJZDp0IGluc3RhbmNlb2YgUmVmP3QudG9TdHJpbmcoKTpudWxsLHBhZ2VPYmpJZDplLG1jaWQ6aS5nZXQoIk1DSUQiKX0pfWlmKCJPQkpSIj09PXIpe2lmKHRoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWUpcmV0dXJuIG51bGw7Y29uc3QgdD1pLmdldFJhdygiT2JqIik7cmV0dXJuIG5ldyBTdHJ1Y3RFbGVtZW50KHt0eXBlOlpyLHJlZk9iaklkOnQgaW5zdGFuY2VvZiBSZWY/dC50b1N0cmluZygpOm51bGwscGFnZU9iaklkOmV9KX1yZXR1cm4gbmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6X3IsZGljdDppfSl9fWNsYXNzIFN0cnVjdEVsZW1lbnR7Y29uc3RydWN0b3Ioe3R5cGU6ZSxkaWN0OnQ9bnVsbCxtY2lkOmk9bnVsbCxwYWdlT2JqSWQ6YT1udWxsLHJlZk9iaklkOnI9bnVsbH0pe3RoaXMudHlwZT1lO3RoaXMuZGljdD10O3RoaXMubWNpZD1pO3RoaXMucGFnZU9iaklkPWE7dGhpcy5yZWZPYmpJZD1yO3RoaXMucGFyZW50Tm9kZT1udWxsfX1jbGFzcyBTdHJ1Y3RUcmVlUGFnZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMucm9vdD1lO3RoaXMucm9vdERpY3Q9ZT9lLmRpY3Q6bnVsbDt0aGlzLnBhZ2VEaWN0PXQ7dGhpcy5ub2Rlcz1bXX1jb2xsZWN0T2JqZWN0cyhlKXtpZighKHRoaXMucm9vdCYmdGhpcy5yb290RGljdCYmZSBpbnN0YW5jZW9mIFJlZikpcmV0dXJuIG51bGw7Y29uc3QgdD10aGlzLnJvb3REaWN0LmdldCgiUGFyZW50VHJlZSIpO2lmKCF0KXJldHVybiBudWxsO2NvbnN0IGk9dGhpcy5yb290LnN0cnVjdFBhcmVudElkcz8uZ2V0KGUpO2lmKCFpKXJldHVybiBudWxsO2NvbnN0IGE9bmV3IE1hcCxyPW5ldyBOdW1iZXJUcmVlKHQsdGhpcy5yb290RGljdC54cmVmKTtmb3IoY29uc3RbZV1vZiBpKXtjb25zdCB0PXIuZ2V0UmF3KGUpO3QgaW5zdGFuY2VvZiBSZWYmJmEuc2V0KGUsdCl9cmV0dXJuIGF9cGFyc2UoZSl7aWYoISh0aGlzLnJvb3QmJnRoaXMucm9vdERpY3QmJmUgaW5zdGFuY2VvZiBSZWYpKXJldHVybjtjb25zdCB0PXRoaXMucm9vdERpY3QuZ2V0KCJQYXJlbnRUcmVlIik7aWYoIXQpcmV0dXJuO2NvbnN0IGk9dGhpcy5wYWdlRGljdC5nZXQoIlN0cnVjdFBhcmVudHMiKSxhPXRoaXMucm9vdC5zdHJ1Y3RQYXJlbnRJZHM/LmdldChlKTtpZighTnVtYmVyLmlzSW50ZWdlcihpKSYmIWEpcmV0dXJuO2NvbnN0IHI9bmV3IE1hcCxzPW5ldyBOdW1iZXJUcmVlKHQsdGhpcy5yb290RGljdC54cmVmKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGkpKXtjb25zdCBlPXMuZ2V0KGkpO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGNvbnN0IHQgb2YgZSl0IGluc3RhbmNlb2YgUmVmJiZ0aGlzLmFkZE5vZGUodGhpcy5yb290RGljdC54cmVmLmZldGNoKHQpLHIpfWlmKGEpZm9yKGNvbnN0W2UsdF1vZiBhKXtjb25zdCBpPXMuZ2V0KGUpO2lmKGkpe2NvbnN0IGU9dGhpcy5hZGROb2RlKHRoaXMucm9vdERpY3QueHJlZi5mZXRjaElmUmVmKGkpLHIpOzE9PT1lPy5raWRzPy5sZW5ndGgmJmUua2lkc1swXS50eXBlPT09WnImJihlLmtpZHNbMF0udHlwZT10KX19fWFkZE5vZGUoZSx0LGk9MCl7aWYoaT40MCl7d2FybigiU3RydWN0VHJlZSBNQVhfREVQVEggcmVhY2hlZC4iKTtyZXR1cm4gbnVsbH1pZighKGUgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm4gbnVsbDtpZih0LmhhcyhlKSlyZXR1cm4gdC5nZXQoZSk7Y29uc3QgYT1uZXcgU3RydWN0RWxlbWVudE5vZGUodGhpcyxlKTt0LnNldChlLGEpO2NvbnN0IHI9ZS5nZXQoIlAiKTtpZighcnx8aXNOYW1lKHIuZ2V0KCJUeXBlIiksIlN0cnVjdFRyZWVSb290Iikpe3RoaXMuYWRkVG9wTGV2ZWxOb2RlKGUsYSl8fHQuZGVsZXRlKGUpO3JldHVybiBhfWNvbnN0IHM9dGhpcy5hZGROb2RlKHIsdCxpKzEpO2lmKCFzKXJldHVybiBhO2xldCBuPSExO2Zvcihjb25zdCB0IG9mIHMua2lkcylpZih0LnR5cGU9PT1fciYmdC5kaWN0PT09ZSl7dC5wYXJlbnROb2RlPWE7bj0hMH1ufHx0LmRlbGV0ZShlKTtyZXR1cm4gYX1hZGRUb3BMZXZlbE5vZGUoZSx0KXtjb25zdCBpPXRoaXMucm9vdERpY3QuZ2V0KCJLIik7aWYoIWkpcmV0dXJuITE7aWYoaSBpbnN0YW5jZW9mIERpY3Qpe2lmKGkub2JqSWQhPT1lLm9iaklkKXJldHVybiExO3RoaXMubm9kZXNbMF09dDtyZXR1cm4hMH1pZighQXJyYXkuaXNBcnJheShpKSlyZXR1cm4hMDtsZXQgYT0hMTtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKyl7Y29uc3Qgcz1pW3JdO2lmKHM/LnRvU3RyaW5nKCk9PT1lLm9iaklkKXt0aGlzLm5vZGVzW3JdPXQ7YT0hMH19cmV0dXJuIGF9Z2V0IHNlcmlhbGl6YWJsZSgpe2Z1bmN0aW9uIG5vZGVUb1NlcmlhbGl6YWJsZShlLHQsaT0wKXtpZihpPjQwKXt3YXJuKCJTdHJ1Y3RUcmVlIHRvbyBkZWVwIHRvIGJlIGZ1bGx5IHNlcmlhbGl6ZWQuIik7cmV0dXJufWNvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTthLnJvbGU9ZS5yb2xlO2EuY2hpbGRyZW49W107dC5jaGlsZHJlbi5wdXNoKGEpO2xldCByPWUuZGljdC5nZXQoIkFsdCIpOyJzdHJpbmciIT10eXBlb2YgciYmKHI9ZS5kaWN0LmdldCgiQWN0dWFsVGV4dCIpKTsic3RyaW5nIj09dHlwZW9mIHImJihhLmFsdD1zdHJpbmdUb1BERlN0cmluZyhyKSk7Y29uc3Qgcz1lLmRpY3QuZ2V0KCJBIik7aWYocyBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGU9bG9va3VwTm9ybWFsUmVjdChzLmdldEFycmF5KCJCQm94IiksbnVsbCk7aWYoZSlhLmJib3g9ZTtlbHNle2NvbnN0IGU9cy5nZXQoIldpZHRoIiksdD1zLmdldCgiSGVpZ2h0Iik7Im51bWJlciI9PXR5cGVvZiBlJiZlPjAmJiJudW1iZXIiPT10eXBlb2YgdCYmdD4wJiYoYS5iYm94PVswLDAsZSx0XSl9fWNvbnN0IG49ZS5kaWN0LmdldCgiTGFuZyIpOyJzdHJpbmciPT10eXBlb2YgbiYmKGEubGFuZz1zdHJpbmdUb1BERlN0cmluZyhuKSk7Zm9yKGNvbnN0IHQgb2YgZS5raWRzKXtjb25zdCBlPXQudHlwZT09PV9yP3QucGFyZW50Tm9kZTpudWxsO2U/bm9kZVRvU2VyaWFsaXphYmxlKGUsYSxpKzEpOnQudHlwZT09PWpyfHx0LnR5cGU9PT1Ycj9hLmNoaWxkcmVuLnB1c2goe3R5cGU6ImNvbnRlbnQiLGlkOmBwJHt0LnBhZ2VPYmpJZH1fbWMke3QubWNpZH1gfSk6dC50eXBlPT09WnI/YS5jaGlsZHJlbi5wdXNoKHt0eXBlOiJvYmplY3QiLGlkOnQucmVmT2JqSWR9KTp0LnR5cGU9PT1WciYmYS5jaGlsZHJlbi5wdXNoKHt0eXBlOiJhbm5vdGF0aW9uIixpZDpgcGRmanNfaW50ZXJuYWxfaWRfJHt0LnJlZk9iaklkfWB9KX19Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO2UuY2hpbGRyZW49W107ZS5yb2xlPSJSb290Ijtmb3IoY29uc3QgdCBvZiB0aGlzLm5vZGVzKXQmJm5vZGVUb1NlcmlhbGl6YWJsZSh0LGUpO3JldHVybiBlfX1mdW5jdGlvbiBpc1ZhbGlkRXhwbGljaXREZXN0KGUpe2lmKCFBcnJheS5pc0FycmF5KGUpfHxlLmxlbmd0aDwyKXJldHVybiExO2NvbnN0W3QsaSwuLi5hXT1lO2lmKCEodCBpbnN0YW5jZW9mIFJlZnx8TnVtYmVyLmlzSW50ZWdlcih0KSkpcmV0dXJuITE7aWYoIShpIGluc3RhbmNlb2YgTmFtZSkpcmV0dXJuITE7Y29uc3Qgcj1hLmxlbmd0aDtsZXQgcz0hMDtzd2l0Y2goaS5uYW1lKXtjYXNlIlhZWiI6aWYocjwyfHxyPjMpcmV0dXJuITE7YnJlYWs7Y2FzZSJGaXQiOmNhc2UiRml0QiI6cmV0dXJuIDA9PT1yO2Nhc2UiRml0SCI6Y2FzZSJGaXRCSCI6Y2FzZSJGaXRWIjpjYXNlIkZpdEJWIjppZihyPjEpcmV0dXJuITE7YnJlYWs7Y2FzZSJGaXRSIjppZig0IT09cilyZXR1cm4hMTtzPSExO2JyZWFrO2RlZmF1bHQ6cmV0dXJuITF9Zm9yKGNvbnN0IGUgb2YgYSlpZighKCJudW1iZXIiPT10eXBlb2YgZXx8cyYmbnVsbD09PWUpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGZldGNoRGVzdChlKXtlIGluc3RhbmNlb2YgRGljdCYmKGU9ZS5nZXQoIkQiKSk7cmV0dXJuIGlzVmFsaWRFeHBsaWNpdERlc3QoZSk/ZTpudWxsfWZ1bmN0aW9uIGZldGNoUmVtb3RlRGVzdChlKXtsZXQgdD1lLmdldCgiRCIpO2lmKHQpe3QgaW5zdGFuY2VvZiBOYW1lJiYodD10Lm5hbWUpO2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gc3RyaW5nVG9QREZTdHJpbmcodCk7aWYoaXNWYWxpZEV4cGxpY2l0RGVzdCh0KSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9cmV0dXJuIG51bGx9Y2xhc3MgQ2F0YWxvZ3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMucGRmTWFuYWdlcj1lO3RoaXMueHJlZj10O3RoaXMuX2NhdERpY3Q9dC5nZXRDYXRhbG9nT2JqKCk7aWYoISh0aGlzLl9jYXREaWN0IGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJDYXRhbG9nIG9iamVjdCBpcyBub3QgYSBkaWN0aW9uYXJ5LiIpO3RoaXMudG9wbGV2ZWxQYWdlc0RpY3Q7dGhpcy5fYWN0dWFsTnVtUGFnZXM9bnVsbDt0aGlzLmZvbnRDYWNoZT1uZXcgUmVmU2V0Q2FjaGU7dGhpcy5idWlsdEluQ01hcENhY2hlPW5ldyBNYXA7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9bmV3IE1hcDt0aGlzLmdsb2JhbEltYWdlQ2FjaGU9bmV3IEdsb2JhbEltYWdlQ2FjaGU7dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGU9bmV3IFJlZlNldENhY2hlO3RoaXMucGFnZUluZGV4Q2FjaGU9bmV3IFJlZlNldENhY2hlO3RoaXMucGFnZURpY3RDYWNoZT1uZXcgUmVmU2V0Q2FjaGU7dGhpcy5ub25CbGVuZE1vZGVzU2V0PW5ldyBSZWZTZXQ7dGhpcy5zeXN0ZW1Gb250Q2FjaGU9bmV3IE1hcH1jbG9uZURpY3QoKXtyZXR1cm4gdGhpcy5fY2F0RGljdC5jbG9uZSgpfWdldCB2ZXJzaW9uKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiVmVyc2lvbiIpO2lmKGUgaW5zdGFuY2VvZiBOYW1lKXtpZihOdC50ZXN0KGUubmFtZSkpcmV0dXJuIHNoYWRvdyh0aGlzLCJ2ZXJzaW9uIixlLm5hbWUpO3dhcm4oYEludmFsaWQgUERGIGNhdGFsb2cgdmVyc2lvbjogJHtlLm5hbWV9YCl9cmV0dXJuIHNoYWRvdyh0aGlzLCJ2ZXJzaW9uIixudWxsKX1nZXQgbGFuZygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIkxhbmciKTtyZXR1cm4gc2hhZG93KHRoaXMsImxhbmciLGUmJiJzdHJpbmciPT10eXBlb2YgZT9zdHJpbmdUb1BERlN0cmluZyhlKTpudWxsKX1nZXQgbmVlZHNSZW5kZXJpbmcoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOZWVkc1JlbmRlcmluZyIpO3JldHVybiBzaGFkb3codGhpcywibmVlZHNSZW5kZXJpbmciLCJib29sZWFuIj09dHlwZW9mIGUmJmUpfWdldCBjb2xsZWN0aW9uKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLl9jYXREaWN0LmdldCgiQ29sbGVjdGlvbiIpO3QgaW5zdGFuY2VvZiBEaWN0JiZ0LnNpemU+MCYmKGU9dCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7aW5mbygiQ2Fubm90IGZldGNoIENvbGxlY3Rpb24gZW50cnk7IGFzc3VtaW5nIG5vIGNvbGxlY3Rpb24gaXMgcHJlc2VudC4iKX1yZXR1cm4gc2hhZG93KHRoaXMsImNvbGxlY3Rpb24iLGUpfWdldCBhY3JvRm9ybSgpe2xldCBlPW51bGw7dHJ5e2NvbnN0IHQ9dGhpcy5fY2F0RGljdC5nZXQoIkFjcm9Gb3JtIik7dCBpbnN0YW5jZW9mIERpY3QmJnQuc2l6ZT4wJiYoZT10KX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTtpbmZvKCJDYW5ub3QgZmV0Y2ggQWNyb0Zvcm0gZW50cnk7IGFzc3VtaW5nIG5vIGZvcm1zIGFyZSBwcmVzZW50LiIpfXJldHVybiBzaGFkb3codGhpcywiYWNyb0Zvcm0iLGUpfWdldCBhY3JvRm9ybVJlZigpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIkFjcm9Gb3JtIik7cmV0dXJuIHNoYWRvdyh0aGlzLCJhY3JvRm9ybVJlZiIsZSBpbnN0YW5jZW9mIFJlZj9lOm51bGwpfWdldCBtZXRhZGF0YSgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIk1ldGFkYXRhIik7aWYoIShlIGluc3RhbmNlb2YgUmVmKSlyZXR1cm4gc2hhZG93KHRoaXMsIm1ldGFkYXRhIixudWxsKTtsZXQgdD1udWxsO3RyeXtjb25zdCBpPXRoaXMueHJlZi5mZXRjaChlLCF0aGlzLnhyZWYuZW5jcnlwdD8uZW5jcnlwdE1ldGFkYXRhKTtpZihpIGluc3RhbmNlb2YgQmFzZVN0cmVhbSYmaS5kaWN0IGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1pLmRpY3QuZ2V0KCJUeXBlIiksYT1pLmRpY3QuZ2V0KCJTdWJ0eXBlIik7aWYoaXNOYW1lKGUsIk1ldGFkYXRhIikmJmlzTmFtZShhLCJYTUwiKSl7Y29uc3QgZT1zdHJpbmdUb1VURjhTdHJpbmcoaS5nZXRTdHJpbmcoKSk7ZSYmKHQ9bmV3IE1ldGFkYXRhUGFyc2VyKGUpLnNlcmlhbGl6YWJsZSl9fX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTtpbmZvKGBTa2lwcGluZyBpbnZhbGlkIE1ldGFkYXRhOiAiJHtlfSIuYCl9cmV0dXJuIHNoYWRvdyh0aGlzLCJtZXRhZGF0YSIsdCl9Z2V0IG1hcmtJbmZvKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkTWFya0luZm8oKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKCJVbmFibGUgdG8gcmVhZCBtYXJrIGluZm8uIil9cmV0dXJuIHNoYWRvdyh0aGlzLCJtYXJrSW5mbyIsZSl9X3JlYWRNYXJrSW5mbygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk1hcmtJbmZvIik7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuIG51bGw7Y29uc3QgdD17TWFya2VkOiExLFVzZXJQcm9wZXJ0aWVzOiExLFN1c3BlY3RzOiExfTtmb3IoY29uc3QgaSBpbiB0KXtjb25zdCBhPWUuZ2V0KGkpOyJib29sZWFuIj09dHlwZW9mIGEmJih0W2ldPWEpfXJldHVybiB0fWdldCBzdHJ1Y3RUcmVlUm9vdCgpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFN0cnVjdFRyZWVSb290KCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybigiVW5hYmxlIHJlYWQgdG8gc3RydWN0VHJlZVJvb3QgaW5mby4iKX1yZXR1cm4gc2hhZG93KHRoaXMsInN0cnVjdFRyZWVSb290IixlKX1fcmVhZFN0cnVjdFRyZWVSb290KCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldFJhdygiU3RydWN0VHJlZVJvb3QiKSx0PXRoaXMueHJlZi5mZXRjaElmUmVmKGUpO2lmKCEodCBpbnN0YW5jZW9mIERpY3QpKXJldHVybiBudWxsO2NvbnN0IGk9bmV3IFN0cnVjdFRyZWVSb290KHQsZSk7aS5pbml0KCk7cmV0dXJuIGl9Z2V0IHRvcGxldmVsUGFnZXNEaWN0KCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiUGFnZXMiKTtpZighKGUgaW5zdGFuY2VvZiBEaWN0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkuIik7cmV0dXJuIHNoYWRvdyh0aGlzLCJ0b3BsZXZlbFBhZ2VzRGljdCIsZSl9Z2V0IGRvY3VtZW50T3V0bGluZSgpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZERvY3VtZW50T3V0bGluZSgpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3dhcm4oIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuIHNoYWRvdyh0aGlzLCJkb2N1bWVudE91dGxpbmUiLGUpfV9yZWFkRG9jdW1lbnRPdXRsaW5lKCl7bGV0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk91dGxpbmVzIik7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuIG51bGw7ZT1lLmdldFJhdygiRmlyc3QiKTtpZighKGUgaW5zdGFuY2VvZiBSZWYpKXJldHVybiBudWxsO2NvbnN0IHQ9e2l0ZW1zOltdfSxpPVt7b2JqOmUscGFyZW50OnR9XSxhPW5ldyBSZWZTZXQ7YS5wdXQoZSk7Y29uc3Qgcj10aGlzLnhyZWYscz1uZXcgVWludDhDbGFtcGVkQXJyYXkoMyk7Zm9yKDtpLmxlbmd0aD4wOyl7Y29uc3QgdD1pLnNoaWZ0KCksbj1yLmZldGNoSWZSZWYodC5vYmopO2lmKG51bGw9PT1uKWNvbnRpbnVlO24uaGFzKCJUaXRsZSIpfHx3YXJuKCJJbnZhbGlkIG91dGxpbmUgaXRlbSBlbmNvdW50ZXJlZC4iKTtjb25zdCBvPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O0NhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6bixyZXN1bHRPYmo6byxkb2NCYXNlVXJsOnRoaXMuYmFzZVVybCxkb2NBdHRhY2htZW50czp0aGlzLmF0dGFjaG1lbnRzfSk7Y29uc3QgZz1uLmdldCgiVGl0bGUiKSxjPW4uZ2V0KCJGIil8fDAsQz1uLmdldEFycmF5KCJDIiksaD1uLmdldCgiQ291bnQiKTtsZXQgbD1zOyFpc051bWJlckFycmF5KEMsMyl8fDA9PT1DWzBdJiYwPT09Q1sxXSYmMD09PUNbMl18fChsPUNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKEMsMCkpO2NvbnN0IFE9e2FjdGlvbjpvLmFjdGlvbixhdHRhY2htZW50Om8uYXR0YWNobWVudCxkZXN0Om8uZGVzdCx1cmw6by51cmwsdW5zYWZlVXJsOm8udW5zYWZlVXJsLG5ld1dpbmRvdzpvLm5ld1dpbmRvdyxzZXRPQ0dTdGF0ZTpvLnNldE9DR1N0YXRlLHRpdGxlOiJzdHJpbmciPT10eXBlb2YgZz9zdHJpbmdUb1BERlN0cmluZyhnKToiIixjb2xvcjpsLGNvdW50Ok51bWJlci5pc0ludGVnZXIoaCk/aDp2b2lkIDAsYm9sZDohISgyJmMpLGl0YWxpYzohISgxJmMpLGl0ZW1zOltdfTt0LnBhcmVudC5pdGVtcy5wdXNoKFEpO2U9bi5nZXRSYXcoIkZpcnN0Iik7aWYoZSBpbnN0YW5jZW9mIFJlZiYmIWEuaGFzKGUpKXtpLnB1c2goe29iajplLHBhcmVudDpRfSk7YS5wdXQoZSl9ZT1uLmdldFJhdygiTmV4dCIpO2lmKGUgaW5zdGFuY2VvZiBSZWYmJiFhLmhhcyhlKSl7aS5wdXNoKHtvYmo6ZSxwYXJlbnQ6dC5wYXJlbnR9KTthLnB1dChlKX19cmV0dXJuIHQuaXRlbXMubGVuZ3RoPjA/dC5pdGVtczpudWxsfWdldCBwZXJtaXNzaW9ucygpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFBlcm1pc3Npb25zKCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybigiVW5hYmxlIHRvIHJlYWQgcGVybWlzc2lvbnMuIil9cmV0dXJuIHNoYWRvdyh0aGlzLCJwZXJtaXNzaW9ucyIsZSl9X3JlYWRQZXJtaXNzaW9ucygpe2NvbnN0IGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJFbmNyeXB0Iik7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuIG51bGw7bGV0IHQ9ZS5nZXQoIlAiKTtpZigibnVtYmVyIiE9dHlwZW9mIHQpcmV0dXJuIG51bGw7dCs9MioqMzI7Y29uc3QgaT1bXTtmb3IoY29uc3QgZSBpbiB3KXtjb25zdCBhPXdbZV07dCZhJiZpLnB1c2goYSl9cmV0dXJuIGl9Z2V0IG9wdGlvbmFsQ29udGVudENvbmZpZygpe2xldCBlPW51bGw7dHJ5e2NvbnN0IHQ9dGhpcy5fY2F0RGljdC5nZXQoIk9DUHJvcGVydGllcyIpO2lmKCF0KXJldHVybiBzaGFkb3codGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTtjb25zdCBpPXQuZ2V0KCJEIik7aWYoIWkpcmV0dXJuIHNoYWRvdyh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO2NvbnN0IGE9dC5nZXQoIk9DR3MiKTtpZighQXJyYXkuaXNBcnJheShhKSlyZXR1cm4gc2hhZG93KHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7Y29uc3Qgcj1bXSxzPW5ldyBSZWZTZXQ7Zm9yKGNvbnN0IGUgb2YgYSlpZihlIGluc3RhbmNlb2YgUmVmJiYhcy5oYXMoZSkpe3MucHV0KGUpO3IucHVzaCh0aGlzLiNZKGUpKX1lPXRoaXMuI1QoaSxzKTtlLmdyb3Vwcz1yfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3dhcm4oYFVuYWJsZSB0byByZWFkIG9wdGlvbmFsIGNvbnRlbnQgY29uZmlnOiAke2V9YCl9cmV0dXJuIHNoYWRvdyh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLGUpfSNZKGUpe2NvbnN0IHQ9dGhpcy54cmVmLmZldGNoKGUpLGk9e2lkOmUudG9TdHJpbmcoKSxuYW1lOm51bGwsaW50ZW50Om51bGwsdXNhZ2U6e3ByaW50Om51bGwsdmlldzpudWxsfX0sYT10LmdldCgiTmFtZSIpOyJzdHJpbmciPT10eXBlb2YgYSYmKGkubmFtZT1zdHJpbmdUb1BERlN0cmluZyhhKSk7bGV0IHI9dC5nZXRBcnJheSgiSW50ZW50Iik7QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKTtyLmV2ZXJ5KChlPT5lIGluc3RhbmNlb2YgTmFtZSkpJiYoaS5pbnRlbnQ9ci5tYXAoKGU9PmUubmFtZSkpKTtjb25zdCBzPXQuZ2V0KCJVc2FnZSIpO2lmKCEocyBpbnN0YW5jZW9mIERpY3QpKXJldHVybiBpO2NvbnN0IG49aS51c2FnZSxvPXMuZ2V0KCJQcmludCIpO2lmKG8gaW5zdGFuY2VvZiBEaWN0KXtjb25zdCBlPW8uZ2V0KCJQcmludFN0YXRlIik7aWYoZSBpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJPTiI6Y2FzZSJPRkYiOm4ucHJpbnQ9e3ByaW50U3RhdGU6ZS5uYW1lfX19Y29uc3QgZz1zLmdldCgiVmlldyIpO2lmKGcgaW5zdGFuY2VvZiBEaWN0KXtjb25zdCBlPWcuZ2V0KCJWaWV3U3RhdGUiKTtpZihlIGluc3RhbmNlb2YgTmFtZSlzd2l0Y2goZS5uYW1lKXtjYXNlIk9OIjpjYXNlIk9GRiI6bi52aWV3PXt2aWV3U3RhdGU6ZS5uYW1lfX19cmV0dXJuIGl9I1QoZSx0KXtmdW5jdGlvbiBwYXJzZU9uT2ZmKGUpe2NvbnN0IGk9W107aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoY29uc3QgYSBvZiBlKWEgaW5zdGFuY2VvZiBSZWYmJnQuaGFzKGEpJiZpLnB1c2goYS50b1N0cmluZygpKTtyZXR1cm4gaX1mdW5jdGlvbiBwYXJzZU9yZGVyKGUsaT0wKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gbnVsbDtjb25zdCByPVtdO2Zvcihjb25zdCBzIG9mIGUpe2lmKHMgaW5zdGFuY2VvZiBSZWYmJnQuaGFzKHMpKXthLnB1dChzKTtyLnB1c2gocy50b1N0cmluZygpKTtjb250aW51ZX1jb25zdCBlPXBhcnNlTmVzdGVkT3JkZXIocyxpKTtlJiZyLnB1c2goZSl9aWYoaT4wKXJldHVybiByO2NvbnN0IHM9W107Zm9yKGNvbnN0IGUgb2YgdClhLmhhcyhlKXx8cy5wdXNoKGUudG9TdHJpbmcoKSk7cy5sZW5ndGgmJnIucHVzaCh7bmFtZTpudWxsLG9yZGVyOnN9KTtyZXR1cm4gcn1mdW5jdGlvbiBwYXJzZU5lc3RlZE9yZGVyKGUsdCl7aWYoKyt0PnIpe3dhcm4oInBhcnNlTmVzdGVkT3JkZXIgLSByZWFjaGVkIE1BWF9ORVNURURfTEVWRUxTLiIpO3JldHVybiBudWxsfWNvbnN0IGE9aS5mZXRjaElmUmVmKGUpO2lmKCFBcnJheS5pc0FycmF5KGEpKXJldHVybiBudWxsO2NvbnN0IHM9aS5mZXRjaElmUmVmKGFbMF0pO2lmKCJzdHJpbmciIT10eXBlb2YgcylyZXR1cm4gbnVsbDtjb25zdCBuPXBhcnNlT3JkZXIoYS5zbGljZSgxKSx0KTtyZXR1cm4gbiYmbi5sZW5ndGg/e25hbWU6c3RyaW5nVG9QREZTdHJpbmcocyksb3JkZXI6bn06bnVsbH1jb25zdCBpPXRoaXMueHJlZixhPW5ldyBSZWZTZXQscj0xMDtyZXR1cm57bmFtZToic3RyaW5nIj09dHlwZW9mIGUuZ2V0KCJOYW1lIik/c3RyaW5nVG9QREZTdHJpbmcoZS5nZXQoIk5hbWUiKSk6bnVsbCxjcmVhdG9yOiJzdHJpbmciPT10eXBlb2YgZS5nZXQoIkNyZWF0b3IiKT9zdHJpbmdUb1BERlN0cmluZyhlLmdldCgiQ3JlYXRvciIpKTpudWxsLGJhc2VTdGF0ZTplLmdldCgiQmFzZVN0YXRlIilpbnN0YW5jZW9mIE5hbWU/ZS5nZXQoIkJhc2VTdGF0ZSIpLm5hbWU6bnVsbCxvbjpwYXJzZU9uT2ZmKGUuZ2V0KCJPTiIpKSxvZmY6cGFyc2VPbk9mZihlLmdldCgiT0ZGIikpLG9yZGVyOnBhcnNlT3JkZXIoZS5nZXQoIk9yZGVyIikpLGdyb3VwczpudWxsfX1zZXRBY3R1YWxOdW1QYWdlcyhlPW51bGwpe3RoaXMuX2FjdHVhbE51bVBhZ2VzPWV9Z2V0IGhhc0FjdHVhbE51bVBhZ2VzKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hY3R1YWxOdW1QYWdlc31nZXQgX3BhZ2VzQ291bnQoKXtjb25zdCBlPXRoaXMudG9wbGV2ZWxQYWdlc0RpY3QuZ2V0KCJDb3VudCIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpbiB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeSBpcyBub3QgYW4gaW50ZWdlci4iKTtyZXR1cm4gc2hhZG93KHRoaXMsIl9wYWdlc0NvdW50IixlKX1nZXQgbnVtUGFnZXMoKXtyZXR1cm4gdGhpcy5oYXNBY3R1YWxOdW1QYWdlcz90aGlzLl9hY3R1YWxOdW1QYWdlczp0aGlzLl9wYWdlc0NvdW50fWdldCBkZXN0aW5hdGlvbnMoKXtjb25zdCBlPXRoaXMuX3JlYWREZXN0cygpLHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlIGluc3RhbmNlb2YgTmFtZVRyZWUpZm9yKGNvbnN0W2ksYV1vZiBlLmdldEFsbCgpKXtjb25zdCBlPWZldGNoRGVzdChhKTtlJiYodFtzdHJpbmdUb1BERlN0cmluZyhpKV09ZSl9ZWxzZSBlIGluc3RhbmNlb2YgRGljdCYmZS5mb3JFYWNoKChmdW5jdGlvbihlLGkpe2NvbnN0IGE9ZmV0Y2hEZXN0KGkpO2EmJih0W2VdPWEpfSkpO3JldHVybiBzaGFkb3codGhpcywiZGVzdGluYXRpb25zIix0KX1nZXREZXN0aW5hdGlvbihlKXtjb25zdCB0PXRoaXMuX3JlYWREZXN0cygpO2lmKHQgaW5zdGFuY2VvZiBOYW1lVHJlZSl7Y29uc3QgaT1mZXRjaERlc3QodC5nZXQoZSkpO2lmKGkpcmV0dXJuIGk7Y29uc3QgYT10aGlzLmRlc3RpbmF0aW9uc1tlXTtpZihhKXt3YXJuKGBGb3VuZCAiJHtlfSIgYXQgYW4gaW5jb3JyZWN0IHBvc2l0aW9uIGluIHRoZSBOYW1lVHJlZS5gKTtyZXR1cm4gYX19ZWxzZSBpZih0IGluc3RhbmNlb2YgRGljdCl7Y29uc3QgaT1mZXRjaERlc3QodC5nZXQoZSkpO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9X3JlYWREZXN0cygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7cmV0dXJuIGU/LmhhcygiRGVzdHMiKT9uZXcgTmFtZVRyZWUoZS5nZXRSYXcoIkRlc3RzIiksdGhpcy54cmVmKTp0aGlzLl9jYXREaWN0LmhhcygiRGVzdHMiKT90aGlzLl9jYXREaWN0LmdldCgiRGVzdHMiKTp2b2lkIDB9Z2V0IHBhZ2VMYWJlbHMoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRQYWdlTGFiZWxzKCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybigiVW5hYmxlIHRvIHJlYWQgcGFnZSBsYWJlbHMuIil9cmV0dXJuIHNoYWRvdyh0aGlzLCJwYWdlTGFiZWxzIixlKX1fcmVhZFBhZ2VMYWJlbHMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlTGFiZWxzIik7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1uZXcgQXJyYXkodGhpcy5udW1QYWdlcyk7bGV0IGk9bnVsbCxhPSIiO2NvbnN0IHI9bmV3IE51bWJlclRyZWUoZSx0aGlzLnhyZWYpLmdldEFsbCgpO2xldCBzPSIiLG49MTtmb3IobGV0IGU9MCxvPXRoaXMubnVtUGFnZXM7ZTxvO2UrKyl7Y29uc3Qgbz1yLmdldChlKTtpZih2b2lkIDAhPT1vKXtpZighKG8gaW5zdGFuY2VvZiBEaWN0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlBhZ2VMYWJlbCBpcyBub3QgYSBkaWN0aW9uYXJ5LiIpO2lmKG8uaGFzKCJUeXBlIikmJiFpc05hbWUoby5nZXQoIlR5cGUiKSwiUGFnZUxhYmVsIikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIHR5cGUgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7aWYoby5oYXMoIlMiKSl7Y29uc3QgZT1vLmdldCgiUyIpO2lmKCEoZSBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBzdHlsZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtpPWUubmFtZX1lbHNlIGk9bnVsbDtpZihvLmhhcygiUCIpKXtjb25zdCBlPW8uZ2V0KCJQIik7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBwcmVmaXggaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7YT1zdHJpbmdUb1BERlN0cmluZyhlKX1lbHNlIGE9IiI7aWYoby5oYXMoIlN0Iikpe2NvbnN0IGU9by5nZXQoIlN0Iik7aWYoIShOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPj0xKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgc3RhcnQgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7bj1lfWVsc2Ugbj0xfXN3aXRjaChpKXtjYXNlIkQiOnM9bjticmVhaztjYXNlIlIiOmNhc2UiciI6cz10b1JvbWFuTnVtZXJhbHMobiwiciI9PT1pKTticmVhaztjYXNlIkEiOmNhc2UiYSI6Y29uc3QgZT0yNix0PSJhIj09PWk/OTc6NjUsYT1uLTE7cz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQrYSVlKS5yZXBlYXQoTWF0aC5mbG9vcihhL2UpKzEpO2JyZWFrO2RlZmF1bHQ6aWYoaSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgc3R5bGUgIiR7aX0iIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LmApO3M9IiJ9dFtlXT1hK3M7bisrfXJldHVybiB0fWdldCBwYWdlTGF5b3V0KCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiUGFnZUxheW91dCIpO2xldCB0PSIiO2lmKGUgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiU2luZ2xlUGFnZSI6Y2FzZSJPbmVDb2x1bW4iOmNhc2UiVHdvQ29sdW1uTGVmdCI6Y2FzZSJUd29Db2x1bW5SaWdodCI6Y2FzZSJUd29QYWdlTGVmdCI6Y2FzZSJUd29QYWdlUmlnaHQiOnQ9ZS5uYW1lfXJldHVybiBzaGFkb3codGhpcywicGFnZUxheW91dCIsdCl9Z2V0IHBhZ2VNb2RlKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiUGFnZU1vZGUiKTtsZXQgdD0iVXNlTm9uZSI7aWYoZSBpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJGdWxsU2NyZWVuIjpjYXNlIlVzZU9DIjpjYXNlIlVzZUF0dGFjaG1lbnRzIjp0PWUubmFtZX1yZXR1cm4gc2hhZG93KHRoaXMsInBhZ2VNb2RlIix0KX1nZXQgdmlld2VyUHJlZmVyZW5jZXMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJWaWV3ZXJQcmVmZXJlbmNlcyIpO2lmKCEoZSBpbnN0YW5jZW9mIERpY3QpKXJldHVybiBzaGFkb3codGhpcywidmlld2VyUHJlZmVyZW5jZXMiLG51bGwpO2xldCB0PW51bGw7Zm9yKGNvbnN0IGkgb2YgZS5nZXRLZXlzKCkpe2NvbnN0IGE9ZS5nZXQoaSk7bGV0IHI7c3dpdGNoKGkpe2Nhc2UiSGlkZVRvb2xiYXIiOmNhc2UiSGlkZU1lbnViYXIiOmNhc2UiSGlkZVdpbmRvd1VJIjpjYXNlIkZpdFdpbmRvdyI6Y2FzZSJDZW50ZXJXaW5kb3ciOmNhc2UiRGlzcGxheURvY1RpdGxlIjpjYXNlIlBpY2tUcmF5QnlQREZTaXplIjoiYm9vbGVhbiI9PXR5cGVvZiBhJiYocj1hKTticmVhaztjYXNlIk5vbkZ1bGxTY3JlZW5QYWdlTW9kZSI6aWYoYSBpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKGEubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJVc2VPQyI6cj1hLm5hbWU7YnJlYWs7ZGVmYXVsdDpyPSJVc2VOb25lIn1icmVhaztjYXNlIkRpcmVjdGlvbiI6aWYoYSBpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKGEubmFtZSl7Y2FzZSJMMlIiOmNhc2UiUjJMIjpyPWEubmFtZTticmVhaztkZWZhdWx0OnI9IkwyUiJ9YnJlYWs7Y2FzZSJWaWV3QXJlYSI6Y2FzZSJWaWV3Q2xpcCI6Y2FzZSJQcmludEFyZWEiOmNhc2UiUHJpbnRDbGlwIjppZihhIGluc3RhbmNlb2YgTmFtZSlzd2l0Y2goYS5uYW1lKXtjYXNlIk1lZGlhQm94IjpjYXNlIkNyb3BCb3giOmNhc2UiQmxlZWRCb3giOmNhc2UiVHJpbUJveCI6Y2FzZSJBcnRCb3giOnI9YS5uYW1lO2JyZWFrO2RlZmF1bHQ6cj0iQ3JvcEJveCJ9YnJlYWs7Y2FzZSJQcmludFNjYWxpbmciOmlmKGEgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChhLm5hbWUpe2Nhc2UiTm9uZSI6Y2FzZSJBcHBEZWZhdWx0IjpyPWEubmFtZTticmVhaztkZWZhdWx0OnI9IkFwcERlZmF1bHQifWJyZWFrO2Nhc2UiRHVwbGV4IjppZihhIGluc3RhbmNlb2YgTmFtZSlzd2l0Y2goYS5uYW1lKXtjYXNlIlNpbXBsZXgiOmNhc2UiRHVwbGV4RmxpcFNob3J0RWRnZSI6Y2FzZSJEdXBsZXhGbGlwTG9uZ0VkZ2UiOnI9YS5uYW1lO2JyZWFrO2RlZmF1bHQ6cj0iTm9uZSJ9YnJlYWs7Y2FzZSJQcmludFBhZ2VSYW5nZSI6aWYoQXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGglMj09MCl7YS5ldmVyeSgoKGUsdCxpKT0+TnVtYmVyLmlzSW50ZWdlcihlKSYmZT4wJiYoMD09PXR8fGU+PWlbdC0xXSkmJmU8PXRoaXMubnVtUGFnZXMpKSYmKHI9YSl9YnJlYWs7Y2FzZSJOdW1Db3BpZXMiOk51bWJlci5pc0ludGVnZXIoYSkmJmE+MCYmKHI9YSk7YnJlYWs7ZGVmYXVsdDp3YXJuKGBJZ25vcmluZyBub24tc3RhbmRhcmQga2V5IGluIFZpZXdlclByZWZlcmVuY2VzOiAke2l9LmApO2NvbnRpbnVlfWlmKHZvaWQgMCE9PXIpe3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpO3RbaV09cn1lbHNlIHdhcm4oYEJhZCB2YWx1ZSwgZm9yIGtleSAiJHtpfSIsIGluIFZpZXdlclByZWZlcmVuY2VzOiAke2F9LmApfXJldHVybiBzaGFkb3codGhpcywidmlld2VyUHJlZmVyZW5jZXMiLHQpfWdldCBvcGVuQWN0aW9uKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiT3BlbkFjdGlvbiIpLHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgaT1uZXcgRGljdCh0aGlzLnhyZWYpO2kuc2V0KCJBIixlKTtjb25zdCBhPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O0NhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6aSxyZXN1bHRPYmo6YX0pO0FycmF5LmlzQXJyYXkoYS5kZXN0KT90LmRlc3Q9YS5kZXN0OmEuYWN0aW9uJiYodC5hY3Rpb249YS5hY3Rpb24pfWVsc2UgQXJyYXkuaXNBcnJheShlKSYmKHQuZGVzdD1lKTtyZXR1cm4gc2hhZG93KHRoaXMsIm9wZW5BY3Rpb24iLG9iamVjdFNpemUodCk+MD90Om51bGwpfWdldCBhdHRhY2htZW50cygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7bGV0IHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgRGljdCYmZS5oYXMoIkVtYmVkZGVkRmlsZXMiKSl7Y29uc3QgaT1uZXcgTmFtZVRyZWUoZS5nZXRSYXcoIkVtYmVkZGVkRmlsZXMiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLGFdb2YgaS5nZXRBbGwoKSl7Y29uc3QgaT1uZXcgRmlsZVNwZWMoYSx0aGlzLnhyZWYpO3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpO3Rbc3RyaW5nVG9QREZTdHJpbmcoZSldPWkuc2VyaWFsaXphYmxlfX1yZXR1cm4gc2hhZG93KHRoaXMsImF0dGFjaG1lbnRzIix0KX1nZXQgeGZhSW1hZ2VzKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKTtsZXQgdD1udWxsO2lmKGUgaW5zdGFuY2VvZiBEaWN0JiZlLmhhcygiWEZBSW1hZ2VzIikpe2NvbnN0IGk9bmV3IE5hbWVUcmVlKGUuZ2V0UmF3KCJYRkFJbWFnZXMiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLGFdb2YgaS5nZXRBbGwoKSl7dHx8KHQ9bmV3IERpY3QodGhpcy54cmVmKSk7dC5zZXQoc3RyaW5nVG9QREZTdHJpbmcoZSksYSl9fXJldHVybiBzaGFkb3codGhpcywieGZhSW1hZ2VzIix0KX1fY29sbGVjdEphdmFTY3JpcHQoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpO2xldCB0PW51bGw7ZnVuY3Rpb24gYXBwZW5kSWZKYXZhU2NyaXB0RGljdChlLGkpe2lmKCEoaSBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtpZighaXNOYW1lKGkuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSlyZXR1cm47bGV0IGE9aS5nZXQoIkpTIik7aWYoYSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pYT1hLmdldFN0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBhKXJldHVybjthPXN0cmluZ1RvUERGU3RyaW5nKGEpLnJlcGxhY2VBbGwoIlwwIiwiIik7YSYmKHR8fD1uZXcgTWFwKS5zZXQoZSxhKX1pZihlIGluc3RhbmNlb2YgRGljdCYmZS5oYXMoIkphdmFTY3JpcHQiKSl7Y29uc3QgdD1uZXcgTmFtZVRyZWUoZS5nZXRSYXcoIkphdmFTY3JpcHQiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLGldb2YgdC5nZXRBbGwoKSlhcHBlbmRJZkphdmFTY3JpcHREaWN0KHN0cmluZ1RvUERGU3RyaW5nKGUpLGkpfWNvbnN0IGk9dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKTtpJiZhcHBlbmRJZkphdmFTY3JpcHREaWN0KCJPcGVuQWN0aW9uIixpKTtyZXR1cm4gdH1nZXQganNBY3Rpb25zKCl7Y29uc3QgZT10aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpO2xldCB0PWNvbGxlY3RBY3Rpb25zKHRoaXMueHJlZix0aGlzLl9jYXREaWN0LG1BKTtpZihlKXt0fHw9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3RbaSxhXW9mIGUpaSBpbiB0P3RbaV0ucHVzaChhKTp0W2ldPVthXX1yZXR1cm4gc2hhZG93KHRoaXMsImpzQWN0aW9ucyIsdCl9YXN5bmMgZm9udEZhbGxiYWNrKGUsdCl7Y29uc3QgaT1hd2FpdCBQcm9taXNlLmFsbCh0aGlzLmZvbnRDYWNoZSk7Zm9yKGNvbnN0IGEgb2YgaSlpZihhLmxvYWRlZE5hbWU9PT1lKXthLmZhbGxiYWNrKHQpO3JldHVybn19YXN5bmMgY2xlYW51cChlPSExKXtjbGVhckdsb2JhbENhY2hlcygpO3RoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5jbGVhcihlKTt0aGlzLnBhZ2VLaWRzQ291bnRDYWNoZS5jbGVhcigpO3RoaXMucGFnZUluZGV4Q2FjaGUuY2xlYXIoKTt0aGlzLnBhZ2VEaWN0Q2FjaGUuY2xlYXIoKTt0aGlzLm5vbkJsZW5kTW9kZXNTZXQuY2xlYXIoKTtjb25zdCB0PWF3YWl0IFByb21pc2UuYWxsKHRoaXMuZm9udENhY2hlKTtmb3IoY29uc3R7ZGljdDplfW9mIHQpZGVsZXRlIGUuY2FjaGVLZXk7dGhpcy5mb250Q2FjaGUuY2xlYXIoKTt0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuY2xlYXIoKTt0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5jbGVhcigpO3RoaXMuc3lzdGVtRm9udENhY2hlLmNsZWFyKCl9YXN5bmMgZ2V0UGFnZURpY3QoZSl7Y29uc3QgdD1bdGhpcy50b3BsZXZlbFBhZ2VzRGljdF0saT1uZXcgUmVmU2V0LGE9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VzIik7YSBpbnN0YW5jZW9mIFJlZiYmaS5wdXQoYSk7Y29uc3Qgcj10aGlzLnhyZWYscz10aGlzLnBhZ2VLaWRzQ291bnRDYWNoZSxuPXRoaXMucGFnZUluZGV4Q2FjaGUsbz10aGlzLnBhZ2VEaWN0Q2FjaGU7bGV0IGc9MDtmb3IoO3QubGVuZ3RoOyl7Y29uc3QgYT10LnBvcCgpO2lmKGEgaW5zdGFuY2VvZiBSZWYpe2NvbnN0IGM9cy5nZXQoYSk7aWYoYz49MCYmZytjPD1lKXtnKz1jO2NvbnRpbnVlfWlmKGkuaGFzKGEpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuIik7aS5wdXQoYSk7Y29uc3QgQz1hd2FpdChvLmdldChhKXx8ci5mZXRjaEFzeW5jKGEpKTtpZihDIGluc3RhbmNlb2YgRGljdCl7bGV0IHQ9Qy5nZXRSYXcoIlR5cGUiKTt0IGluc3RhbmNlb2YgUmVmJiYodD1hd2FpdCByLmZldGNoQXN5bmModCkpO2lmKGlzTmFtZSh0LCJQYWdlIil8fCFDLmhhcygiS2lkcyIpKXtzLmhhcyhhKXx8cy5wdXQoYSwxKTtuLmhhcyhhKXx8bi5wdXQoYSxnKTtpZihnPT09ZSlyZXR1cm5bQyxhXTtnKys7Y29udGludWV9fXQucHVzaChDKTtjb250aW51ZX1pZighKGEgaW5zdGFuY2VvZiBEaWN0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWQgcmVmZXJlbmNlIHBvaW50cyB0byB3cm9uZyB0eXBlIG9mIG9iamVjdC4iKTtjb25zdHtvYmpJZDpjfT1hO2xldCBDPWEuZ2V0UmF3KCJDb3VudCIpO0MgaW5zdGFuY2VvZiBSZWYmJihDPWF3YWl0IHIuZmV0Y2hBc3luYyhDKSk7aWYoTnVtYmVyLmlzSW50ZWdlcihDKSYmQz49MCl7YyYmIXMuaGFzKGMpJiZzLnB1dChjLEMpO2lmKGcrQzw9ZSl7Zys9Qztjb250aW51ZX19bGV0IGg9YS5nZXRSYXcoIktpZHMiKTtoIGluc3RhbmNlb2YgUmVmJiYoaD1hd2FpdCByLmZldGNoQXN5bmMoaCkpO2lmKCFBcnJheS5pc0FycmF5KGgpKXtsZXQgdD1hLmdldFJhdygiVHlwZSIpO3QgaW5zdGFuY2VvZiBSZWYmJih0PWF3YWl0IHIuZmV0Y2hBc3luYyh0KSk7aWYoaXNOYW1lKHQsIlBhZ2UiKXx8IWEuaGFzKCJLaWRzIikpe2lmKGc9PT1lKXJldHVyblthLG51bGxdO2crKztjb250aW51ZX10aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuIil9Zm9yKGxldCBlPWgubGVuZ3RoLTE7ZT49MDtlLS0pe2NvbnN0IGk9aFtlXTt0LnB1c2goaSk7YT09PXRoaXMudG9wbGV2ZWxQYWdlc0RpY3QmJmkgaW5zdGFuY2VvZiBSZWYmJiFvLmhhcyhpKSYmby5wdXQoaSxyLmZldGNoQXN5bmMoaSkpfX10aHJvdyBuZXcgRXJyb3IoYFBhZ2UgaW5kZXggJHtlfSBub3QgZm91bmQuYCl9YXN5bmMgZ2V0QWxsUGFnZURpY3RzKGU9ITEpe2NvbnN0e2lnbm9yZUVycm9yczp0fT10aGlzLnBkZk1hbmFnZXIuZXZhbHVhdG9yT3B0aW9ucyxpPVt7Y3VycmVudE5vZGU6dGhpcy50b3BsZXZlbFBhZ2VzRGljdCxwb3NJbktpZHM6MH1dLGE9bmV3IFJlZlNldCxyPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlcyIpO3IgaW5zdGFuY2VvZiBSZWYmJmEucHV0KHIpO2NvbnN0IHM9bmV3IE1hcCxuPXRoaXMueHJlZixvPXRoaXMucGFnZUluZGV4Q2FjaGU7bGV0IGc9MDtmdW5jdGlvbiBhZGRQYWdlRGljdChlLHQpe3QmJiFvLmhhcyh0KSYmby5wdXQodCxnKTtzLnNldChnKyssW2UsdF0pfWZ1bmN0aW9uIGFkZFBhZ2VFcnJvcihpKXtpZihpIGluc3RhbmNlb2YgWFJlZkVudHJ5RXhjZXB0aW9uJiYhZSl0aHJvdyBpO2lmKGUmJnQmJjA9PT1nKXt3YXJuKGBnZXRBbGxQYWdlRGljdHMgLSBTa2lwcGluZyBpbnZhbGlkIGZpcnN0IHBhZ2U6ICIke2l9Ii5gKTtpPURpY3QuZW1wdHl9cy5zZXQoZysrLFtpLG51bGxdKX1mb3IoO2kubGVuZ3RoPjA7KXtjb25zdCBlPWkuYXQoLTEpLHtjdXJyZW50Tm9kZTp0LHBvc0luS2lkczpyfT1lO2xldCBzPXQuZ2V0UmF3KCJLaWRzIik7aWYocyBpbnN0YW5jZW9mIFJlZil0cnl7cz1hd2FpdCBuLmZldGNoQXN5bmMocyl9Y2F0Y2goZSl7YWRkUGFnZUVycm9yKGUpO2JyZWFrfWlmKCFBcnJheS5pc0FycmF5KHMpKXthZGRQYWdlRXJyb3IobmV3IEZvcm1hdEVycm9yKCJQYWdlIGRpY3Rpb25hcnkga2lkcyBvYmplY3QgaXMgbm90IGFuIGFycmF5LiIpKTticmVha31pZihyPj1zLmxlbmd0aCl7aS5wb3AoKTtjb250aW51ZX1jb25zdCBvPXNbcl07bGV0IGc7aWYobyBpbnN0YW5jZW9mIFJlZil7aWYoYS5oYXMobykpe2FkZFBhZ2VFcnJvcihuZXcgRm9ybWF0RXJyb3IoIlBhZ2VzIHRyZWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlLiIpKTticmVha31hLnB1dChvKTt0cnl7Zz1hd2FpdCBuLmZldGNoQXN5bmMobyl9Y2F0Y2goZSl7YWRkUGFnZUVycm9yKGUpO2JyZWFrfX1lbHNlIGc9bztpZighKGcgaW5zdGFuY2VvZiBEaWN0KSl7YWRkUGFnZUVycm9yKG5ldyBGb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKTticmVha31sZXQgYz1nLmdldFJhdygiVHlwZSIpO2lmKGMgaW5zdGFuY2VvZiBSZWYpdHJ5e2M9YXdhaXQgbi5mZXRjaEFzeW5jKGMpfWNhdGNoKGUpe2FkZFBhZ2VFcnJvcihlKTticmVha31pc05hbWUoYywiUGFnZSIpfHwhZy5oYXMoIktpZHMiKT9hZGRQYWdlRGljdChnLG8gaW5zdGFuY2VvZiBSZWY/bzpudWxsKTppLnB1c2goe2N1cnJlbnROb2RlOmcscG9zSW5LaWRzOjB9KTtlLnBvc0luS2lkcysrfXJldHVybiBzfWdldFBhZ2VJbmRleChlKXtjb25zdCB0PXRoaXMucGFnZUluZGV4Q2FjaGUuZ2V0KGUpO2lmKHZvaWQgMCE9PXQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KTtjb25zdCBpPXRoaXMueHJlZjtsZXQgYT0wO2NvbnN0IG5leHQ9dD0+ZnVuY3Rpb24gcGFnZXNCZWZvcmVSZWYodCl7bGV0IGEscj0wO3JldHVybiBpLmZldGNoQXN5bmModCkudGhlbigoZnVuY3Rpb24oaSl7aWYoaXNSZWZzRXF1YWwodCxlKSYmIWlzRGljdChpLCJQYWdlIikmJiEoaSBpbnN0YW5jZW9mIERpY3QmJiFpLmhhcygiVHlwZSIpJiZpLmhhcygiQ29udGVudHMiKSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJUaGUgcmVmZXJlbmNlIGRvZXMgbm90IHBvaW50IHRvIGEgL1BhZ2UgZGljdGlvbmFyeS4iKTtpZighaSlyZXR1cm4gbnVsbDtpZighKGkgaW5zdGFuY2VvZiBEaWN0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7YT1pLmdldFJhdygiUGFyZW50Iik7cmV0dXJuIGkuZ2V0QXN5bmMoIlBhcmVudCIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCEoZSBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiUGFyZW50IG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3JldHVybiBlLmdldEFzeW5jKCJLaWRzIil9KSkudGhlbigoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3Qgcz1bXTtsZXQgbj0hMTtmb3IoY29uc3QgYSBvZiBlKXtpZighKGEgaW5zdGFuY2VvZiBSZWYpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiS2lkIG11c3QgYmUgYSByZWZlcmVuY2UuIik7aWYoaXNSZWZzRXF1YWwoYSx0KSl7bj0hMDticmVha31zLnB1c2goaS5mZXRjaEFzeW5jKGEpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiS2lkIG5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7ZS5oYXMoIkNvdW50Iik/cis9ZS5nZXQoIkNvdW50Iik6cisrfSkpKX1pZighbil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIktpZCByZWZlcmVuY2Ugbm90IGZvdW5kIGluIHBhcmVudCdzIGtpZHMuIik7cmV0dXJuIFByb21pc2UuYWxsKHMpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuW3IsYV19KSl9KSl9KHQpLnRoZW4oKHQ9PntpZighdCl7dGhpcy5wYWdlSW5kZXhDYWNoZS5wdXQoZSxhKTtyZXR1cm4gYX1jb25zdFtpLHJdPXQ7YSs9aTtyZXR1cm4gbmV4dChyKX0pKTtyZXR1cm4gbmV4dChlKX1nZXQgYmFzZVVybCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlVSSSIpO2lmKGUgaW5zdGFuY2VvZiBEaWN0KXtjb25zdCB0PWUuZ2V0KCJCYXNlIik7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtjb25zdCBlPWNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwodCxudWxsLHt0cnlDb252ZXJ0RW5jb2Rpbmc6ITB9KTtpZihlKXJldHVybiBzaGFkb3codGhpcywiYmFzZVVybCIsZS5ocmVmKX19cmV0dXJuIHNoYWRvdyh0aGlzLCJiYXNlVXJsIix0aGlzLnBkZk1hbmFnZXIuZG9jQmFzZVVybCl9c3RhdGljIHBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmUscmVzdWx0T2JqOnQsZG9jQmFzZVVybDppPW51bGwsZG9jQXR0YWNobWVudHM6YT1udWxsfSl7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpe3dhcm4oInBhcnNlRGVzdERpY3Rpb25hcnk6IGBkZXN0RGljdGAgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cmV0dXJufWxldCByLHMsbj1lLmdldCgiQSIpO2lmKCEobiBpbnN0YW5jZW9mIERpY3QpKWlmKGUuaGFzKCJEZXN0Iikpbj1lLmdldCgiRGVzdCIpO2Vsc2V7bj1lLmdldCgiQUEiKTtuIGluc3RhbmNlb2YgRGljdCYmKG4uaGFzKCJEIik/bj1uLmdldCgiRCIpOm4uaGFzKCJVIikmJihuPW4uZ2V0KCJVIikpKX1pZihuIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1uLmdldCgiUyIpO2lmKCEoZSBpbnN0YW5jZW9mIE5hbWUpKXt3YXJuKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBJbnZhbGlkIHR5cGUgaW4gQWN0aW9uIGRpY3Rpb25hcnkuIik7cmV0dXJufWNvbnN0IGk9ZS5uYW1lO3N3aXRjaChpKXtjYXNlIlJlc2V0Rm9ybSI6Y29uc3QgZT1uLmdldCgiRmxhZ3MiKSxvPTA9PSgxJigibnVtYmVyIj09dHlwZW9mIGU/ZTowKSksZz1bXSxjPVtdO2Zvcihjb25zdCBlIG9mIG4uZ2V0KCJGaWVsZHMiKXx8W10pZSBpbnN0YW5jZW9mIFJlZj9jLnB1c2goZS50b1N0cmluZygpKToic3RyaW5nIj09dHlwZW9mIGUmJmcucHVzaChzdHJpbmdUb1BERlN0cmluZyhlKSk7dC5yZXNldEZvcm09e2ZpZWxkczpnLHJlZnM6YyxpbmNsdWRlOm99O2JyZWFrO2Nhc2UiVVJJIjpyPW4uZ2V0KCJVUkkiKTtyIGluc3RhbmNlb2YgTmFtZSYmKHI9Ii8iK3IubmFtZSk7YnJlYWs7Y2FzZSJHb1RvIjpzPW4uZ2V0KCJEIik7YnJlYWs7Y2FzZSJMYXVuY2giOmNhc2UiR29Ub1IiOmNvbnN0IEM9bi5nZXQoIkYiKTtpZihDIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1uZXcgRmlsZVNwZWMoQyxudWxsLCEwKSx7cmF3RmlsZW5hbWU6dH09ZS5zZXJpYWxpemFibGU7cj10fWVsc2Uic3RyaW5nIj09dHlwZW9mIEMmJihyPUMpO2NvbnN0IGg9ZmV0Y2hSZW1vdGVEZXN0KG4pO2gmJiJzdHJpbmciPT10eXBlb2YgciYmKHI9ci5zcGxpdCgiIyIsMSlbMF0rIiMiK2gpO2NvbnN0IGw9bi5nZXQoIk5ld1dpbmRvdyIpOyJib29sZWFuIj09dHlwZW9mIGwmJih0Lm5ld1dpbmRvdz1sKTticmVhaztjYXNlIkdvVG9FIjpjb25zdCBRPW4uZ2V0KCJUIik7bGV0IEU7aWYoYSYmUSBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGU9US5nZXQoIlIiKSx0PVEuZ2V0KCJOIik7aXNOYW1lKGUsIkMiKSYmInN0cmluZyI9PXR5cGVvZiB0JiYoRT1hW3N0cmluZ1RvUERGU3RyaW5nKHQpXSl9aWYoRSl7dC5hdHRhY2htZW50PUU7Y29uc3QgZT1mZXRjaFJlbW90ZURlc3Qobik7ZSYmKHQuYXR0YWNobWVudERlc3Q9ZSl9ZWxzZSB3YXJuKCdwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5pbXBsZW1lbnRlZCAiR29Ub0UiIGFjdGlvbi4nKTticmVhaztjYXNlIk5hbWVkIjpjb25zdCB1PW4uZ2V0KCJOIik7dSBpbnN0YW5jZW9mIE5hbWUmJih0LmFjdGlvbj11Lm5hbWUpO2JyZWFrO2Nhc2UiU2V0T0NHU3RhdGUiOmNvbnN0IGQ9bi5nZXQoIlN0YXRlIiksZj1uLmdldCgiUHJlc2VydmVSQiIpO2lmKCFBcnJheS5pc0FycmF5KGQpfHwwPT09ZC5sZW5ndGgpYnJlYWs7Y29uc3QgcD1bXTtmb3IoY29uc3QgZSBvZiBkKWlmKGUgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiT04iOmNhc2UiT0ZGIjpjYXNlIlRvZ2dsZSI6cC5wdXNoKGUubmFtZSl9ZWxzZSBlIGluc3RhbmNlb2YgUmVmJiZwLnB1c2goZS50b1N0cmluZygpKTtpZihwLmxlbmd0aCE9PWQubGVuZ3RoKWJyZWFrO3Quc2V0T0NHU3RhdGU9e3N0YXRlOnAscHJlc2VydmVSQjoiYm9vbGVhbiIhPXR5cGVvZiBmfHxmfTticmVhaztjYXNlIkphdmFTY3JpcHQiOmNvbnN0IG09bi5nZXQoIkpTIik7bGV0IHk7bSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/eT1tLmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgbSYmKHk9bSk7Y29uc3Qgdz15JiZyZWNvdmVySnNVUkwoc3RyaW5nVG9QREZTdHJpbmcoeSkpO2lmKHcpe3I9dy51cmw7dC5uZXdXaW5kb3c9dy5uZXdXaW5kb3c7YnJlYWt9ZGVmYXVsdDppZigiSmF2YVNjcmlwdCI9PT1pfHwiU3VibWl0Rm9ybSI9PT1pKWJyZWFrO3dhcm4oYHBhcnNlRGVzdERpY3Rpb25hcnkgLSB1bnN1cHBvcnRlZCBhY3Rpb246ICIke2l9Ii5gKX19ZWxzZSBlLmhhcygiRGVzdCIpJiYocz1lLmdldCgiRGVzdCIpKTtpZigic3RyaW5nIj09dHlwZW9mIHIpe2NvbnN0IGU9Y3JlYXRlVmFsaWRBYnNvbHV0ZVVybChyLGkse2FkZERlZmF1bHRQcm90b2NvbDohMCx0cnlDb252ZXJ0RW5jb2Rpbmc6ITB9KTtlJiYodC51cmw9ZS5ocmVmKTt0LnVuc2FmZVVybD1yfWlmKHMpe3MgaW5zdGFuY2VvZiBOYW1lJiYocz1zLm5hbWUpOyJzdHJpbmciPT10eXBlb2Ygcz90LmRlc3Q9c3RyaW5nVG9QREZTdHJpbmcocyk6aXNWYWxpZEV4cGxpY2l0RGVzdChzKSYmKHQuZGVzdD1zKX19fWZ1bmN0aW9uIGFkZENoaWxkcmVuKGUsdCl7aWYoZSBpbnN0YW5jZW9mIERpY3QpZT1lLmdldFJhd1ZhbHVlcygpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pZT1lLmRpY3QuZ2V0UmF3VmFsdWVzKCk7ZWxzZSBpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm47Zm9yKGNvbnN0IGEgb2YgZSkoKGk9YSlpbnN0YW5jZW9mIFJlZnx8aSBpbnN0YW5jZW9mIERpY3R8fGkgaW5zdGFuY2VvZiBCYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KGkpKSYmdC5wdXNoKGEpO3ZhciBpfWNsYXNzIE9iamVjdExvYWRlcntjb25zdHJ1Y3RvcihlLHQsaSl7dGhpcy5kaWN0PWU7dGhpcy5rZXlzPXQ7dGhpcy54cmVmPWk7dGhpcy5yZWZTZXQ9bnVsbH1hc3luYyBsb2FkKCl7aWYodGhpcy54cmVmLnN0cmVhbS5pc0RhdGFMb2FkZWQpcmV0dXJuO2NvbnN0e2tleXM6ZSxkaWN0OnR9PXRoaXM7dGhpcy5yZWZTZXQ9bmV3IFJlZlNldDtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGU9dC5nZXRSYXcoYSk7dm9pZCAwIT09ZSYmaS5wdXNoKGUpfXJldHVybiB0aGlzLl93YWxrKGkpfWFzeW5jIF93YWxrKGUpe2NvbnN0IHQ9W10saT1bXTtmb3IoO2UubGVuZ3RoOyl7bGV0IGE9ZS5wb3AoKTtpZihhIGluc3RhbmNlb2YgUmVmKXtpZih0aGlzLnJlZlNldC5oYXMoYSkpY29udGludWU7dHJ5e3RoaXMucmVmU2V0LnB1dChhKTthPXRoaXMueHJlZi5mZXRjaChhKX1jYXRjaChlKXtpZighKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbikpe3dhcm4oYE9iamVjdExvYWRlci5fd2FsayAtIHJlcXVlc3RpbmcgYWxsIGRhdGE6ICIke2V9Ii5gKTt0aGlzLnJlZlNldD1udWxsO2NvbnN0e21hbmFnZXI6dH09dGhpcy54cmVmLnN0cmVhbTtyZXR1cm4gdC5yZXF1ZXN0QWxsQ2h1bmtzKCl9dC5wdXNoKGEpO2kucHVzaCh7YmVnaW46ZS5iZWdpbixlbmQ6ZS5lbmR9KX19aWYoYSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pe2NvbnN0IGU9YS5nZXRCYXNlU3RyZWFtcygpO2lmKGUpe2xldCByPSExO2Zvcihjb25zdCB0IG9mIGUpaWYoIXQuaXNEYXRhTG9hZGVkKXtyPSEwO2kucHVzaCh7YmVnaW46dC5zdGFydCxlbmQ6dC5lbmR9KX1yJiZ0LnB1c2goYSl9fWFkZENoaWxkcmVuKGEsZSl9aWYoaS5sZW5ndGgpe2F3YWl0IHRoaXMueHJlZi5zdHJlYW0ubWFuYWdlci5yZXF1ZXN0UmFuZ2VzKGkpO2Zvcihjb25zdCBlIG9mIHQpZSBpbnN0YW5jZW9mIFJlZiYmdGhpcy5yZWZTZXQucmVtb3ZlKGUpO3JldHVybiB0aGlzLl93YWxrKHQpfXRoaXMucmVmU2V0PW51bGx9fWNvbnN0IHpyPVN5bWJvbCgpLCRyPVN5bWJvbCgpLEFzPVN5bWJvbCgpLGVzPVN5bWJvbCgpLHRzPVN5bWJvbCgpLGlzPVN5bWJvbCgpLGFzPVN5bWJvbCgpLHJzPVN5bWJvbCgpLHNzPVN5bWJvbCgpLG5zPVN5bWJvbCgiY29udGVudCIpLG9zPVN5bWJvbCgiZGF0YSIpLGdzPVN5bWJvbCgpLElzPVN5bWJvbCgiZXh0cmEiKSxjcz1TeW1ib2woKSxDcz1TeW1ib2woKSxocz1TeW1ib2woKSxscz1TeW1ib2woKSxCcz1TeW1ib2woKSxRcz1TeW1ib2woKSxFcz1TeW1ib2woKSx1cz1TeW1ib2woKSxkcz1TeW1ib2woKSxmcz1TeW1ib2woKSxwcz1TeW1ib2woKSxtcz1TeW1ib2woKSx5cz1TeW1ib2woKSx3cz1TeW1ib2woKSxicz1TeW1ib2woKSxEcz1TeW1ib2woKSxGcz1TeW1ib2woKSxTcz1TeW1ib2woKSxrcz1TeW1ib2woKSxScz1TeW1ib2woKSxOcz1TeW1ib2woKSxHcz1TeW1ib2woKSx4cz1TeW1ib2woKSxVcz1TeW1ib2woKSxNcz1TeW1ib2woKSxMcz1TeW1ib2woKSxIcz1TeW1ib2woKSxKcz1TeW1ib2woKSx2cz1TeW1ib2woKSxZcz1TeW1ib2woKSxUcz1TeW1ib2woKSxLcz1TeW1ib2woKSxxcz1TeW1ib2woIm5hbWVzcGFjZUlkIiksT3M9U3ltYm9sKCJub2RlTmFtZSIpLFdzPVN5bWJvbCgpLGpzPVN5bWJvbCgpLFhzPVN5bWJvbCgpLFpzPVN5bWJvbCgpLFZzPVN5bWJvbCgpLF9zPVN5bWJvbCgpLHpzPVN5bWJvbCgpLCRzPVN5bWJvbCgpLEFuPVN5bWJvbCgicm9vdCIpLGVuPVN5bWJvbCgpLHRuPVN5bWJvbCgpLGFuPVN5bWJvbCgpLHJuPVN5bWJvbCgpLHNuPVN5bWJvbCgpLG5uPVN5bWJvbCgpLG9uPVN5bWJvbCgpLGduPVN5bWJvbCgpLEluPVN5bWJvbCgpLGNuPVN5bWJvbCgpLENuPVN5bWJvbCgpLGhuPVN5bWJvbCgidWlkIiksbG49U3ltYm9sKCksQm49e2NvbmZpZzp7aWQ6MCxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGNpLyIpfSxjb25uZWN0aW9uU2V0OntpZDoxLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtY29ubmVjdGlvbi1zZXQvIil9LGRhdGFzZXRzOntpZDoyLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtZGF0YS8iKX0sZm9ybTp7aWQ6MyxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWZvcm0vIil9LGxvY2FsZVNldDp7aWQ6NCxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWxvY2FsZS1zZXQvIil9LHBkZjp7aWQ6NSxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZHAvcGRmLyI9PT1lfSxzaWduYXR1cmU6e2lkOjYsY2hlY2s6ZT0+Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPT09ZX0sc291cmNlU2V0OntpZDo3LGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtc291cmNlLXNldC8iKX0sc3R5bGVzaGVldDp7aWQ6OCxjaGVjazplPT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj09PWV9LHRlbXBsYXRlOntpZDo5LGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtdGVtcGxhdGUvIil9LHhkYzp7aWQ6MTAsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hkYy8iKX0seGRwOntpZDoxMSxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZHAvIj09PWV9LHhmZGY6e2lkOjEyLGNoZWNrOmU9PiJodHRwOi8vbnMuYWRvYmUuY29tL3hmZGYvIj09PWV9LHhodG1sOntpZDoxMyxjaGVjazplPT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lfSx4bXBtZXRhOntpZDoxNCxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94bXBtZXRhLyI9PT1lfX0sUW49e3B0OmU9PmUsY206ZT0+ZS8yLjU0KjcyLG1tOmU9PmUvMjUuNCo3MixpbjplPT43MiplLHB4OmU9PmV9LEVuPS8oWystXT9cZCtcLj9cZCopKC4qKS87ZnVuY3Rpb24gc3RyaXBRdW90ZXMoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiJyIpfHxlLnN0YXJ0c1dpdGgoJyInKT9lLnNsaWNlKDEsLTEpOmV9ZnVuY3Rpb24gZ2V0SW50ZWdlcih7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0LHZhbGlkYXRlOml9KXtpZighZSlyZXR1cm4gdDtlPWUudHJpbSgpO2NvbnN0IGE9cGFyc2VJbnQoZSwxMCk7cmV0dXJuIWlzTmFOKGEpJiZpKGEpP2E6dH1mdW5jdGlvbiBnZXRGbG9hdCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0LHZhbGlkYXRlOml9KXtpZighZSlyZXR1cm4gdDtlPWUudHJpbSgpO2NvbnN0IGE9cGFyc2VGbG9hdChlKTtyZXR1cm4haXNOYU4oYSkmJmkoYSk/YTp0fWZ1bmN0aW9uIGdldEtleXdvcmQoe2RhdGE6ZSxkZWZhdWx0VmFsdWU6dCx2YWxpZGF0ZTppfSl7cmV0dXJuIGUmJmkoZT1lLnRyaW0oKSk/ZTp0fWZ1bmN0aW9uIGdldFN0cmluZ09wdGlvbihlLHQpe3JldHVybiBnZXRLZXl3b3JkKHtkYXRhOmUsZGVmYXVsdFZhbHVlOnRbMF0sdmFsaWRhdGU6ZT0+dC5pbmNsdWRlcyhlKX0pfWZ1bmN0aW9uIGdldE1lYXN1cmVtZW50KGUsdD0iMCIpe3R8fD0iMCI7aWYoIWUpcmV0dXJuIGdldE1lYXN1cmVtZW50KHQpO2NvbnN0IGk9ZS50cmltKCkubWF0Y2goRW4pO2lmKCFpKXJldHVybiBnZXRNZWFzdXJlbWVudCh0KTtjb25zdFssYSxyXT1pLHM9cGFyc2VGbG9hdChhKTtpZihpc05hTihzKSlyZXR1cm4gZ2V0TWVhc3VyZW1lbnQodCk7aWYoMD09PXMpcmV0dXJuIDA7Y29uc3Qgbj1RbltyXTtyZXR1cm4gbj9uKHMpOnN9ZnVuY3Rpb24gZ2V0UmF0aW8oZSl7aWYoIWUpcmV0dXJue251bToxLGRlbjoxfTtjb25zdCB0PWUudHJpbSgpLnNwbGl0KC9ccyo6XHMqLykubWFwKChlPT5wYXJzZUZsb2F0KGUpKSkuZmlsdGVyKChlPT4haXNOYU4oZSkpKTsxPT09dC5sZW5ndGgmJnQucHVzaCgxKTtpZigwPT09dC5sZW5ndGgpcmV0dXJue251bToxLGRlbjoxfTtjb25zdFtpLGFdPXQ7cmV0dXJue251bTppLGRlbjphfX1mdW5jdGlvbiBnZXRSZWxldmFudChlKXtyZXR1cm4gZT9lLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChlPT4oe2V4Y2x1ZGVkOiItIj09PWVbMF0sdmlld25hbWU6ZS5zdWJzdHJpbmcoMSl9KSkpOltdfWNsYXNzIEhUTUxSZXN1bHR7c3RhdGljIGdldCBGQUlMVVJFKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJGQUlMVVJFIixuZXcgSFRNTFJlc3VsdCghMSxudWxsLG51bGwsbnVsbCkpfXN0YXRpYyBnZXQgRU1QVFkoKXtyZXR1cm4gc2hhZG93KHRoaXMsIkVNUFRZIixuZXcgSFRNTFJlc3VsdCghMCxudWxsLG51bGwsbnVsbCkpfWNvbnN0cnVjdG9yKGUsdCxpLGEpe3RoaXMuc3VjY2Vzcz1lO3RoaXMuaHRtbD10O3RoaXMuYmJveD1pO3RoaXMuYnJlYWtOb2RlPWF9aXNCcmVhaygpe3JldHVybiEhdGhpcy5icmVha05vZGV9c3RhdGljIGJyZWFrTm9kZShlKXtyZXR1cm4gbmV3IEhUTUxSZXN1bHQoITEsbnVsbCxudWxsLGUpfXN0YXRpYyBzdWNjZXNzKGUsdD1udWxsKXtyZXR1cm4gbmV3IEhUTUxSZXN1bHQoITAsZSx0LG51bGwpfX1jbGFzcyBGb250RmluZGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuZm9udHM9bmV3IE1hcDt0aGlzLmNhY2hlPW5ldyBNYXA7dGhpcy53YXJuZWQ9bmV3IFNldDt0aGlzLmRlZmF1bHRGb250PW51bGw7dGhpcy5hZGQoZSl9YWRkKGUsdD1udWxsKXtmb3IoY29uc3QgdCBvZiBlKXRoaXMuYWRkUGRmRm9udCh0KTtmb3IoY29uc3QgZSBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKWUucmVndWxhcnx8KGUucmVndWxhcj1lLml0YWxpY3x8ZS5ib2xkfHxlLmJvbGRpdGFsaWMpO2lmKCF0fHwwPT09dC5zaXplKXJldHVybjtjb25zdCBpPXRoaXMuZm9udHMuZ2V0KCJQZGZKUy1GYWxsYmFjay1QZGZKUy1YRkEiKTtmb3IoY29uc3QgZSBvZiB0KXRoaXMuZm9udHMuc2V0KGUsaSl9YWRkUGRmRm9udChlKXtjb25zdCB0PWUuY3NzRm9udEluZm8saT10LmZvbnRGYW1pbHk7bGV0IGE9dGhpcy5mb250cy5nZXQoaSk7aWYoIWEpe2E9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZvbnRzLnNldChpLGEpO3RoaXMuZGVmYXVsdEZvbnR8fCh0aGlzLmRlZmF1bHRGb250PWEpfWxldCByPSIiO2NvbnN0IHM9cGFyc2VGbG9hdCh0LmZvbnRXZWlnaHQpOzAhPT1wYXJzZUZsb2F0KHQuaXRhbGljQW5nbGUpP3I9cz49NzAwPyJib2xkaXRhbGljIjoiaXRhbGljIjpzPj03MDAmJihyPSJib2xkIik7aWYoIXIpeyhlLm5hbWUuaW5jbHVkZXMoIkJvbGQiKXx8ZS5wc05hbWU/LmluY2x1ZGVzKCJCb2xkIikpJiYocj0iYm9sZCIpOyhlLm5hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLm5hbWUuZW5kc1dpdGgoIkl0Iil8fGUucHNOYW1lPy5pbmNsdWRlcygiSXRhbGljIil8fGUucHNOYW1lPy5lbmRzV2l0aCgiSXQiKSkmJihyKz0iaXRhbGljIil9cnx8KHI9InJlZ3VsYXIiKTthW3JdPWV9Z2V0RGVmYXVsdCgpe3JldHVybiB0aGlzLmRlZmF1bHRGb250fWZpbmQoZSx0PSEwKXtsZXQgaT10aGlzLmZvbnRzLmdldChlKXx8dGhpcy5jYWNoZS5nZXQoZSk7aWYoaSlyZXR1cm4gaTtjb25zdCBhPS8sfC18X3wgfGJvbGRpdGFsaWN8Ym9sZHxpdGFsaWN8cmVndWxhcnxpdC9naTtsZXQgcj1lLnJlcGxhY2VBbGwoYSwiIik7aT10aGlzLmZvbnRzLmdldChyKTtpZihpKXt0aGlzLmNhY2hlLnNldChlLGkpO3JldHVybiBpfXI9ci50b0xvd2VyQ2FzZSgpO2NvbnN0IHM9W107Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLmZvbnRzLmVudHJpZXMoKSllLnJlcGxhY2VBbGwoYSwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHIpJiZzLnB1c2godCk7aWYoMD09PXMubGVuZ3RoKWZvcihjb25zdFssZV1vZiB0aGlzLmZvbnRzLmVudHJpZXMoKSllLnJlZ3VsYXIubmFtZT8ucmVwbGFjZUFsbChhLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocikmJnMucHVzaChlKTtpZigwPT09cy5sZW5ndGgpe3I9ci5yZXBsYWNlQWxsKC9wc210fG10L2dpLCIiKTtmb3IoY29uc3RbZSx0XW9mIHRoaXMuZm9udHMuZW50cmllcygpKWUucmVwbGFjZUFsbChhLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocikmJnMucHVzaCh0KX1pZigwPT09cy5sZW5ndGgpZm9yKGNvbnN0IGUgb2YgdGhpcy5mb250cy52YWx1ZXMoKSllLnJlZ3VsYXIubmFtZT8ucmVwbGFjZUFsbChhLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocikmJnMucHVzaChlKTtpZihzLmxlbmd0aD49MSl7MSE9PXMubGVuZ3RoJiZ0JiZ3YXJuKGBYRkEgLSBUb28gbWFueSBjaG9pY2VzIHRvIGd1ZXNzIHRoZSBjb3JyZWN0IGZvbnQ6ICR7ZX1gKTt0aGlzLmNhY2hlLnNldChlLHNbMF0pO3JldHVybiBzWzBdfWlmKHQmJiF0aGlzLndhcm5lZC5oYXMoZSkpe3RoaXMud2FybmVkLmFkZChlKTt3YXJuKGBYRkEgLSBDYW5ub3QgZmluZCB0aGUgZm9udDogJHtlfWApfXJldHVybiBudWxsfX1mdW5jdGlvbiBzZWxlY3RGb250KGUsdCl7cmV0dXJuIml0YWxpYyI9PT1lLnBvc3R1cmU/ImJvbGQiPT09ZS53ZWlnaHQ/dC5ib2xkaXRhbGljOnQuaXRhbGljOiJib2xkIj09PWUud2VpZ2h0P3QuYm9sZDp0LnJlZ3VsYXJ9Y2xhc3MgRm9udEluZm97Y29uc3RydWN0b3IoZSx0LGksYSl7dGhpcy5saW5lSGVpZ2h0PWk7dGhpcy5wYXJhTWFyZ2luPXR8fHt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MH07aWYoIWUpe1t0aGlzLnBkZkZvbnQsdGhpcy54ZmFGb250XT10aGlzLmRlZmF1bHRGb250KGEpO3JldHVybn10aGlzLnhmYUZvbnQ9e3R5cGVmYWNlOmUudHlwZWZhY2UscG9zdHVyZTplLnBvc3R1cmUsd2VpZ2h0OmUud2VpZ2h0LHNpemU6ZS5zaXplLGxldHRlclNwYWNpbmc6ZS5sZXR0ZXJTcGFjaW5nfTtjb25zdCByPWEuZmluZChlLnR5cGVmYWNlKTtpZihyKXt0aGlzLnBkZkZvbnQ9c2VsZWN0Rm9udChlLHIpO3RoaXMucGRmRm9udHx8KFt0aGlzLnBkZkZvbnQsdGhpcy54ZmFGb250XT10aGlzLmRlZmF1bHRGb250KGEpKX1lbHNlW3RoaXMucGRmRm9udCx0aGlzLnhmYUZvbnRdPXRoaXMuZGVmYXVsdEZvbnQoYSl9ZGVmYXVsdEZvbnQoZSl7Y29uc3QgdD1lLmZpbmQoIkhlbHZldGljYSIsITEpfHxlLmZpbmQoIk15cmlhZCBQcm8iLCExKXx8ZS5maW5kKCJBcmlhbCIsITEpfHxlLmdldERlZmF1bHQoKTtpZih0Py5yZWd1bGFyKXtjb25zdCBlPXQucmVndWxhcjtyZXR1cm5bZSx7dHlwZWZhY2U6ZS5jc3NGb250SW5mby5mb250RmFtaWx5LHBvc3R1cmU6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwiLHNpemU6MTAsbGV0dGVyU3BhY2luZzowfV19cmV0dXJuW251bGwse3R5cGVmYWNlOiJDb3VyaWVyIixwb3N0dXJlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzaXplOjEwLGxldHRlclNwYWNpbmc6MH1dfX1jbGFzcyBGb250U2VsZWN0b3J7Y29uc3RydWN0b3IoZSx0LGksYSl7dGhpcy5mb250RmluZGVyPWE7dGhpcy5zdGFjaz1bbmV3IEZvbnRJbmZvKGUsdCxpLGEpXX1wdXNoRGF0YShlLHQsaSl7Y29uc3QgYT10aGlzLnN0YWNrLmF0KC0xKTtmb3IoY29uc3QgdCBvZlsidHlwZWZhY2UiLCJwb3N0dXJlIiwid2VpZ2h0Iiwic2l6ZSIsImxldHRlclNwYWNpbmciXSllW3RdfHwoZVt0XT1hLnhmYUZvbnRbdF0pO2Zvcihjb25zdCBlIG9mWyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSlpc05hTih0W2VdKSYmKHRbZV09YS5wYXJhTWFyZ2luW2VdKTtjb25zdCByPW5ldyBGb250SW5mbyhlLHQsaXx8YS5saW5lSGVpZ2h0LHRoaXMuZm9udEZpbmRlcik7ci5wZGZGb250fHwoci5wZGZGb250PWEucGRmRm9udCk7dGhpcy5zdGFjay5wdXNoKHIpfXBvcEZvbnQoKXt0aGlzLnN0YWNrLnBvcCgpfXRvcEZvbnQoKXtyZXR1cm4gdGhpcy5zdGFjay5hdCgtMSl9fWNsYXNzIFRleHRNZWFzdXJle2NvbnN0cnVjdG9yKGUsdCxpLGEpe3RoaXMuZ2x5cGhzPVtdO3RoaXMuZm9udFNlbGVjdG9yPW5ldyBGb250U2VsZWN0b3IoZSx0LGksYSk7dGhpcy5leHRyYUhlaWdodD0wfXB1c2hEYXRhKGUsdCxpKXt0aGlzLmZvbnRTZWxlY3Rvci5wdXNoRGF0YShlLHQsaSl9cG9wRm9udChlKXtyZXR1cm4gdGhpcy5mb250U2VsZWN0b3IucG9wRm9udCgpfWFkZFBhcmEoKXtjb25zdCBlPXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKTt0aGlzLmV4dHJhSGVpZ2h0Kz1lLnBhcmFNYXJnaW4udG9wK2UucGFyYU1hcmdpbi5ib3R0b219YWRkU3RyaW5nKGUpe2lmKCFlKXJldHVybjtjb25zdCB0PXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKSxpPXQueGZhRm9udC5zaXplO2lmKHQucGRmRm9udCl7Y29uc3QgYT10LnhmYUZvbnQubGV0dGVyU3BhY2luZyxyPXQucGRmRm9udCxzPXIubGluZUhlaWdodHx8MS4yLG49dC5saW5lSGVpZ2h0fHxNYXRoLm1heCgxLjIscykqaSxvPXMtKHZvaWQgMD09PXIubGluZUdhcD8uMjpyLmxpbmVHYXApLGc9TWF0aC5tYXgoMSxvKSppLGM9aS8xZTMsQz1yLmRlZmF1bHRXaWR0aHx8ci5jaGFyc1RvR2x5cGhzKCIgIilbMF0ud2lkdGg7Zm9yKGNvbnN0IHQgb2YgZS5zcGxpdCgvW1x1MjAyOVxuXS8pKXtjb25zdCBlPXIuZW5jb2RlU3RyaW5nKHQpLmpvaW4oIiIpLGk9ci5jaGFyc1RvR2x5cGhzKGUpO2Zvcihjb25zdCBlIG9mIGkpe2NvbnN0IHQ9ZS53aWR0aHx8Qzt0aGlzLmdseXBocy5wdXNoKFt0KmMrYSxuLGcsZS51bmljb2RlLCExXSl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfXRoaXMuZ2x5cGhzLnBvcCgpfWVsc2V7Zm9yKGNvbnN0IHQgb2YgZS5zcGxpdCgvW1x1MjAyOVxuXS8pKXtmb3IoY29uc3QgZSBvZiB0LnNwbGl0KCIiKSl0aGlzLmdseXBocy5wdXNoKFtpLDEuMippLGksZSwhMV0pO3RoaXMuZ2x5cGhzLnB1c2goWzAsMCwwLCJcbiIsITBdKX10aGlzLmdseXBocy5wb3AoKX19Y29tcHV0ZShlKXtsZXQgdD0tMSxpPTAsYT0wLHI9MCxzPTAsbj0wLG89ITEsZz0hMDtmb3IobGV0IGM9MCxDPXRoaXMuZ2x5cGhzLmxlbmd0aDtjPEM7YysrKXtjb25zdFtDLGgsbCxRLEVdPXRoaXMuZ2x5cGhzW2NdLHU9IiAiPT09USxkPWc/bDpoO2lmKEUpe2E9TWF0aC5tYXgoYSxzKTtzPTA7cis9bjtuPWQ7dD0tMTtpPTA7Zz0hMX1lbHNlIGlmKHUpaWYocytDPmUpe2E9TWF0aC5tYXgoYSxzKTtzPTA7cis9bjtuPWQ7dD0tMTtpPTA7bz0hMDtnPSExfWVsc2V7bj1NYXRoLm1heChkLG4pO2k9cztzKz1DO3Q9Y31lbHNlIGlmKHMrQz5lKXtyKz1uO249ZDtpZigtMSE9PXQpe2M9dDthPU1hdGgubWF4KGEsaSk7cz0wO3Q9LTE7aT0wfWVsc2V7YT1NYXRoLm1heChhLHMpO3M9Q31vPSEwO2c9ITF9ZWxzZXtzKz1DO249TWF0aC5tYXgoZCxuKX19YT1NYXRoLm1heChhLHMpO3IrPW4rdGhpcy5leHRyYUhlaWdodDtyZXR1cm57d2lkdGg6MS4wMiphLGhlaWdodDpyLGlzQnJva2VuOm99fX1jb25zdCB1bj0vXlteLltdKy8sZG49L15bXlxdXSsvLGZuPXtkb3Q6MCxkb3REb3Q6MSxkb3RIYXNoOjIsZG90QnJhY2tldDozLGRvdFBhcmVuOjR9LHBuPW5ldyBNYXAoW1siJGRhdGEiLChlLHQpPT5lLmRhdGFzZXRzP2UuZGF0YXNldHMuZGF0YTplXSxbIiRyZWNvcmQiLChlLHQpPT4oZS5kYXRhc2V0cz9lLmRhdGFzZXRzLmRhdGE6ZSlbbXNdKClbMF1dLFsiJHRlbXBsYXRlIiwoZSx0KT0+ZS50ZW1wbGF0ZV0sWyIkY29ubmVjdGlvblNldCIsKGUsdCk9PmUuY29ubmVjdGlvblNldF0sWyIkZm9ybSIsKGUsdCk9PmUuZm9ybV0sWyIkbGF5b3V0IiwoZSx0KT0+ZS5sYXlvdXRdLFsiJGhvc3QiLChlLHQpPT5lLmhvc3RdLFsiJGRhdGFXaW5kb3ciLChlLHQpPT5lLmRhdGFXaW5kb3ddLFsiJGV2ZW50IiwoZSx0KT0+ZS5ldmVudF0sWyIhIiwoZSx0KT0+ZS5kYXRhc2V0c10sWyIkeGZhIiwoZSx0KT0+ZV0sWyJ4ZmEiLChlLHQpPT5lXSxbIiQiLChlLHQpPT50XV0pLG1uPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbihlLHQsaT0hMCl7bGV0IGE9ZS5tYXRjaCh1bik7aWYoIWEpcmV0dXJuIG51bGw7bGV0W3JdPWE7Y29uc3Qgcz1be25hbWU6cixjYWNoZU5hbWU6Ii4iK3IsaW5kZXg6MCxqczpudWxsLGZvcm1DYWxjOm51bGwsb3BlcmF0b3I6Zm4uZG90fV07bGV0IG49ci5sZW5ndGg7Zm9yKDtuPGUubGVuZ3RoOyl7Y29uc3QgZz1uO2lmKCJbIj09PWUuY2hhckF0KG4rKykpe2E9ZS5zbGljZShuKS5tYXRjaChkbik7aWYoIWEpe3dhcm4oIlhGQSAtIEludmFsaWQgaW5kZXggaW4gU09NIGV4cHJlc3Npb24iKTtyZXR1cm4gbnVsbH1zLmF0KC0xKS5pbmRleD0iKiI9PT0obz0obz1hWzBdKS50cmltKCkpPzEvMDpwYXJzZUludChvLDEwKXx8MDtuKz1hWzBdLmxlbmd0aCsxO2NvbnRpbnVlfWxldCBjO3N3aXRjaChlLmNoYXJBdChuKSl7Y2FzZSIuIjppZighdClyZXR1cm4gbnVsbDtuKys7Yz1mbi5kb3REb3Q7YnJlYWs7Y2FzZSIjIjpuKys7Yz1mbi5kb3RIYXNoO2JyZWFrO2Nhc2UiWyI6aWYoaSl7d2FybigiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBGb3JtQ2FsYyBzdWJleHByZXNzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4iKTtyZXR1cm4gbnVsbH1jPWZuLmRvdEJyYWNrZXQ7YnJlYWs7Y2FzZSIoIjppZihpKXt3YXJuKCJYRkEgLSBTT00gZXhwcmVzc2lvbiBjb250YWlucyBhIEphdmFTY3JpcHQgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuIik7cmV0dXJuIG51bGx9Yz1mbi5kb3RQYXJlbjticmVhaztkZWZhdWx0OmM9Zm4uZG90fWE9ZS5zbGljZShuKS5tYXRjaCh1bik7aWYoIWEpYnJlYWs7W3JdPWE7bis9ci5sZW5ndGg7cy5wdXNoKHtuYW1lOnIsY2FjaGVOYW1lOmUuc2xpY2UoZyxuKSxvcGVyYXRvcjpjLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsfSl9dmFyIG87cmV0dXJuIHN9ZnVuY3Rpb24gc2VhcmNoTm9kZShlLHQsaSxhPSEwLHI9ITApe2NvbnN0IHM9cGFyc2VFeHByZXNzaW9uKGksYSk7aWYoIXMpcmV0dXJuIG51bGw7Y29uc3Qgbj1wbi5nZXQoc1swXS5uYW1lKTtsZXQgbyxnPTA7aWYobil7bz0hMDtlPVtuKGUsdCldO2c9MX1lbHNle289bnVsbD09PXQ7ZT1bdHx8ZV19Zm9yKGxldCBpPXMubGVuZ3RoO2c8aTtnKyspe2NvbnN0e25hbWU6aSxjYWNoZU5hbWU6YSxvcGVyYXRvcjpuLGluZGV4OmN9PXNbZ10sQz1bXTtmb3IoY29uc3QgdCBvZiBlKXtpZighdC5pc1hGQU9iamVjdCljb250aW51ZTtsZXQgZSxzO2lmKHIpe3M9bW4uZ2V0KHQpO2lmKCFzKXtzPW5ldyBNYXA7bW4uc2V0KHQscyl9ZT1zLmdldChhKX1pZighZSl7c3dpdGNoKG4pe2Nhc2UgZm4uZG90OmU9dFtFc10oaSwhMSk7YnJlYWs7Y2FzZSBmbi5kb3REb3Q6ZT10W0VzXShpLCEwKTticmVhaztjYXNlIGZuLmRvdEhhc2g6ZT10W1FzXShpKTtlPWUuaXNYRkFPYmplY3RBcnJheT9lLmNoaWxkcmVuOltlXX1yJiZzLnNldChhLGUpfWUubGVuZ3RoPjAmJkMucHVzaChlKX1pZigwIT09Qy5sZW5ndGh8fG98fDAhPT1nKWU9aXNGaW5pdGUoYyk/Qy5maWx0ZXIoKGU9PmM8ZS5sZW5ndGgpKS5tYXAoKGU9PmVbY10pKTpDLmZsYXQoKTtlbHNle2NvbnN0IGk9dFtEc10oKTtpZighKHQ9aSkpcmV0dXJuIG51bGw7Zz0tMTtlPVt0XX19cmV0dXJuIDA9PT1lLmxlbmd0aD9udWxsOmV9ZnVuY3Rpb24gY3JlYXRlRGF0YU5vZGUoZSx0LGkpe2NvbnN0IGE9cGFyc2VFeHByZXNzaW9uKGkpO2lmKCFhKXJldHVybiBudWxsO2lmKGEuc29tZSgoZT0+ZS5vcGVyYXRvcj09PWZuLmRvdERvdCkpKXJldHVybiBudWxsO2NvbnN0IHI9cG4uZ2V0KGFbMF0ubmFtZSk7bGV0IHM9MDtpZihyKXtlPXIoZSx0KTtzPTF9ZWxzZSBlPXR8fGU7Zm9yKGxldCB0PWEubGVuZ3RoO3M8dDtzKyspe2NvbnN0e25hbWU6dCxvcGVyYXRvcjppLGluZGV4OnJ9PWFbc107aWYoIWlzRmluaXRlKHIpKXthW3NdLmluZGV4PTA7cmV0dXJuIGUuY3JlYXRlTm9kZXMoYS5zbGljZShzKSl9bGV0IG47c3dpdGNoKGkpe2Nhc2UgZm4uZG90Om49ZVtFc10odCwhMSk7YnJlYWs7Y2FzZSBmbi5kb3REb3Q6bj1lW0VzXSh0LCEwKTticmVhaztjYXNlIGZuLmRvdEhhc2g6bj1lW1FzXSh0KTtuPW4uaXNYRkFPYmplY3RBcnJheT9uLmNoaWxkcmVuOltuXX1pZigwPT09bi5sZW5ndGgpcmV0dXJuIGUuY3JlYXRlTm9kZXMoYS5zbGljZShzKSk7aWYoIShyPG4ubGVuZ3RoKSl7YVtzXS5pbmRleD1yLW4ubGVuZ3RoO3JldHVybiBlLmNyZWF0ZU5vZGVzKGEuc2xpY2UocykpfXtjb25zdCB0PW5bcl07aWYoIXQuaXNYRkFPYmplY3Qpe3dhcm4oIlhGQSAtIENhbm5vdCBjcmVhdGUgYSBub2RlLiIpO3JldHVybiBudWxsfWU9dH19cmV0dXJuIG51bGx9Y29uc3QgeW49U3ltYm9sKCksd249U3ltYm9sKCksYm49U3ltYm9sKCksRG49U3ltYm9sKCJfY2hpbGRyZW4iKSxGbj1TeW1ib2woKSxTbj1TeW1ib2woKSxrbj1TeW1ib2woKSxSbj1TeW1ib2woKSxObj1TeW1ib2woKSxHbj1TeW1ib2woKSx4bj1TeW1ib2woKSxVbj1TeW1ib2woKSxNbj1TeW1ib2woKSxMbj1TeW1ib2woInBhcmVudCIpLEhuPVN5bWJvbCgpLEpuPVN5bWJvbCgpLHZuPVN5bWJvbCgpO2xldCBZbj0wO2NvbnN0IFRuPUJuLmRhdGFzZXRzLmlkO2NsYXNzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlLHQsaT0hMSl7dGhpc1txc109ZTt0aGlzW09zXT10O3RoaXNbeG5dPWk7dGhpc1tMbl09bnVsbDt0aGlzW0RuXT1bXTt0aGlzW2huXT1gJHt0fSR7WW4rK31gO3RoaXNbU3NdPW51bGx9Z2V0IGlzWEZBT2JqZWN0KCl7cmV0dXJuITB9Z2V0IGlzWEZBT2JqZWN0QXJyYXkoKXtyZXR1cm4hMX1jcmVhdGVOb2RlcyhlKXtsZXQgdD10aGlzLGk9bnVsbDtmb3IoY29uc3R7bmFtZTphLGluZGV4OnJ9b2YgZSl7Zm9yKGxldCBlPTAscz1pc0Zpbml0ZShyKT9yOjA7ZTw9cztlKyspe2NvbnN0IGU9dFtxc109PT1Ubj8tMTp0W3FzXTtpPW5ldyBYbWxPYmplY3QoZSxhKTt0W0FzXShpKX10PWl9cmV0dXJuIGl9W2pzXShlKXtpZighdGhpc1t4bl18fCF0aGlzW1hzXShlKSlyZXR1cm4hMTtjb25zdCB0PWVbT3NdLGk9dGhpc1t0XTtpZighKGkgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSkpe251bGwhPT1pJiZ0aGlzWyRzXShpKTt0aGlzW3RdPWU7dGhpc1tBc10oZSk7cmV0dXJuITB9aWYoaS5wdXNoKGUpKXt0aGlzW0FzXShlKTtyZXR1cm4hMH1sZXQgYT0iIjt0aGlzLmlkP2E9YCAoaWQ6ICR7dGhpcy5pZH0pYDp0aGlzLm5hbWUmJihhPWAgKG5hbWU6ICR7dGhpcy5uYW1lfSAke3RoaXMuaC52YWx1ZX0pYCk7d2FybihgWEZBIC0gbm9kZSAiJHt0aGlzW09zXX0iJHthfSBoYXMgYWxyZWFkeSBlbm91Z2ggIiR7dH0iIWApO3JldHVybiExfVtYc10oZSl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoZVtPc10pJiZlW3FzXT09PXRoaXNbcXNdfVtIc10oKXtyZXR1cm4hMX1benJdKCl7cmV0dXJuITF9W3hzXSgpe3JldHVybiExfVtVc10oKXtyZXR1cm4hMX1bX3NdKCl7dGhpcy5wYXJhJiZ0aGlzW0ZzXSgpW0lzXS5wYXJhU3RhY2sucG9wKCl9W3pzXSgpe3RoaXNbRnNdKClbSXNdLnBhcmFTdGFjay5wdXNoKHRoaXMucGFyYSl9W2FuXShlKXt0aGlzLmlkJiZ0aGlzW3FzXT09PUJuLnRlbXBsYXRlLmlkJiZlLnNldCh0aGlzLmlkLHRoaXMpfVtGc10oKXtyZXR1cm4gdGhpc1tTc10udGVtcGxhdGV9W0pzXSgpe3JldHVybiExfVt2c10oKXtyZXR1cm4hMX1bQXNdKGUpe2VbTG5dPXRoaXM7dGhpc1tEbl0ucHVzaChlKTshZVtTc10mJnRoaXNbU3NdJiYoZVtTc109dGhpc1tTc10pfVskc10oZSl7Y29uc3QgdD10aGlzW0RuXS5pbmRleE9mKGUpO3RoaXNbRG5dLnNwbGljZSh0LDEpfVtrc10oKXtyZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKX1bc25dKGUpe31bWnNdKGUpe31bY3NdKCl7fVt0c10oZSl7ZGVsZXRlIHRoaXNbeG5dO2lmKHRoaXNbYXNdKXtlLmNsZWFuKHRoaXNbYXNdKTtkZWxldGUgdGhpc1thc119fVtOc10oZSl7cmV0dXJuIHRoaXNbRG5dLmluZGV4T2YoZSl9W0dzXShlLHQpe3RbTG5dPXRoaXM7dGhpc1tEbl0uc3BsaWNlKGUsMCx0KTshdFtTc10mJnRoaXNbU3NdJiYodFtTc109dGhpc1tTc10pfVtZc10oKXtyZXR1cm4hdGhpcy5uYW1lfVtLc10oKXtyZXR1cm4iIn1bb25dKCl7cmV0dXJuIDA9PT10aGlzW0RuXS5sZW5ndGg/dGhpc1tuc106dGhpc1tEbl0ubWFwKChlPT5lW29uXSgpKSkuam9pbigiIil9Z2V0W2JuXSgpe2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2lmKCFlLl9hdHRyaWJ1dGVzKXtjb25zdCB0PWUuX2F0dHJpYnV0ZXM9bmV3IFNldDtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYobnVsbD09PXRoaXNbZV18fHRoaXNbZV1pbnN0YW5jZW9mIFhGQU9iamVjdHx8dGhpc1tlXWluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpYnJlYWs7dC5hZGQoZSl9fXJldHVybiBzaGFkb3codGhpcyxibixlLl9hdHRyaWJ1dGVzKX1bTHNdKGUpe2xldCB0PXRoaXM7Zm9yKDt0Oyl7aWYodD09PWUpcmV0dXJuITA7dD10W0RzXSgpfXJldHVybiExfVtEc10oKXtyZXR1cm4gdGhpc1tMbl19W2JzXSgpe3JldHVybiB0aGlzW0RzXSgpfVttc10oZT1udWxsKXtyZXR1cm4gZT90aGlzW2VdOnRoaXNbRG5dfVtnc10oKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpc1tuc10mJihlLiRjb250ZW50PXRoaXNbbnNdKTtmb3IoY29uc3QgdCBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7Y29uc3QgaT10aGlzW3RdO251bGwhPT1pJiYoaSBpbnN0YW5jZW9mIFhGQU9iamVjdD9lW3RdPWlbZ3NdKCk6aSBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5P2kuaXNFbXB0eSgpfHwoZVt0XT1pLmR1bXAoKSk6ZVt0XT1pKX1yZXR1cm4gZX1bQ25dKCl7cmV0dXJuIG51bGx9W0luXSgpe3JldHVybiBIVE1MUmVzdWx0LkVNUFRZfSpbeXNdKCl7Zm9yKGNvbnN0IGUgb2YgdGhpc1ttc10oKSl5aWVsZCBlfSpbUm5dKGUsdCl7Zm9yKGNvbnN0IGkgb2YgdGhpc1t5c10oKSlpZighZXx8dD09PWUuaGFzKGlbT3NdKSl7Y29uc3QgZT10aGlzW0JzXSgpLHQ9aVtJbl0oZSk7dC5zdWNjZXNzfHwodGhpc1tJc10uZmFpbGluZ05vZGU9aSk7eWllbGQgdH19W0NzXSgpe3JldHVybiBudWxsfVskcl0oZSx0KXt0aGlzW0lzXS5jaGlsZHJlbi5wdXNoKGUpfVtCc10oKXt9W2VzXSh7ZmlsdGVyOmU9bnVsbCxpbmNsdWRlOnQ9ITB9KXtpZih0aGlzW0lzXS5nZW5lcmF0b3Ipe2NvbnN0IGU9dGhpc1tCc10oKSx0PXRoaXNbSXNdLmZhaWxpbmdOb2RlW0luXShlKTtpZighdC5zdWNjZXNzKXJldHVybiB0O3QuaHRtbCYmdGhpc1skcl0odC5odG1sLHQuYmJveCk7ZGVsZXRlIHRoaXNbSXNdLmZhaWxpbmdOb2RlfWVsc2UgdGhpc1tJc10uZ2VuZXJhdG9yPXRoaXNbUm5dKGUsdCk7Zm9yKDs7KXtjb25zdCBlPXRoaXNbSXNdLmdlbmVyYXRvci5uZXh0KCk7aWYoZS5kb25lKWJyZWFrO2NvbnN0IHQ9ZS52YWx1ZTtpZighdC5zdWNjZXNzKXJldHVybiB0O3QuaHRtbCYmdGhpc1skcl0odC5odG1sLHQuYmJveCl9dGhpc1tJc10uZ2VuZXJhdG9yPW51bGw7cmV0dXJuIEhUTUxSZXN1bHQuRU1QVFl9W3JuXShlKXt0aGlzW0puXT1uZXcgU2V0KE9iamVjdC5rZXlzKGUpKX1bR25dKGUpe2NvbnN0IHQ9dGhpc1tibl0saT10aGlzW0puXTtyZXR1cm5bLi4uZV0uZmlsdGVyKChlPT50LmhhcyhlKSYmIWkuaGFzKGUpKSl9W2VuXShlLHQ9bmV3IFNldCl7Zm9yKGNvbnN0IGkgb2YgdGhpc1tEbl0paVtIbl0oZSx0KX1bSG5dKGUsdCl7Y29uc3QgaT10aGlzW05uXShlLHQpO2k/dGhpc1t5bl0oaSxlLHQpOnRoaXNbZW5dKGUsdCl9W05uXShlLHQpe2NvbnN0e3VzZTppLHVzZWhyZWY6YX09dGhpcztpZighaSYmIWEpcmV0dXJuIG51bGw7bGV0IHI9bnVsbCxzPW51bGwsbj1udWxsLG89aTtpZihhKXtvPWE7YS5zdGFydHNXaXRoKCIjc29tKCIpJiZhLmVuZHNXaXRoKCIpIik/cz1hLnNsaWNlKDUsLTEpOmEuc3RhcnRzV2l0aCgiLiNzb20oIikmJmEuZW5kc1dpdGgoIikiKT9zPWEuc2xpY2UoNiwtMSk6YS5zdGFydHNXaXRoKCIjIik/bj1hLnNsaWNlKDEpOmEuc3RhcnRzV2l0aCgiLiMiKSYmKG49YS5zbGljZSgyKSl9ZWxzZSBpLnN0YXJ0c1dpdGgoIiMiKT9uPWkuc2xpY2UoMSk6cz1pO3RoaXMudXNlPXRoaXMudXNlaHJlZj0iIjtpZihuKXI9ZS5nZXQobik7ZWxzZXtyPXNlYXJjaE5vZGUoZS5nZXQoQW4pLHRoaXMscywhMCwhMSk7ciYmKHI9clswXSl9aWYoIXIpe3dhcm4oYFhGQSAtIEludmFsaWQgcHJvdG90eXBlIHJlZmVyZW5jZTogJHtvfS5gKTtyZXR1cm4gbnVsbH1pZihyW09zXSE9PXRoaXNbT3NdKXt3YXJuKGBYRkEgLSBJbmNvbXBhdGlibGUgcHJvdG90eXBlOiAke3JbT3NdfSAhPT0gJHt0aGlzW09zXX0uYCk7cmV0dXJuIG51bGx9aWYodC5oYXMocikpe3dhcm4oIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpO3JldHVybiBudWxsfXQuYWRkKHIpO2NvbnN0IGc9cltObl0oZSx0KTtnJiZyW3luXShnLGUsdCk7cltlbl0oZSx0KTt0LmRlbGV0ZShyKTtyZXR1cm4gcn1beW5dKGUsdCxpKXtpZihpLmhhcyhlKSl7d2FybigiWEZBIC0gQ3ljbGUgZGV0ZWN0ZWQgaW4gcHJvdG90eXBlcyB1c2UuIik7cmV0dXJufSF0aGlzW25zXSYmZVtuc10mJih0aGlzW25zXT1lW25zXSk7bmV3IFNldChpKS5hZGQoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpc1tHbl0oZVtKbl0pKXt0aGlzW3RdPWVbdF07dGhpc1tKbl0mJnRoaXNbSm5dLmFkZCh0KX1mb3IoY29uc3QgYSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYodGhpc1tibl0uaGFzKGEpKWNvbnRpbnVlO2NvbnN0IHI9dGhpc1thXSxzPWVbYV07aWYociBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5KXtmb3IoY29uc3QgZSBvZiByW0RuXSllW0huXSh0LGkpO2ZvcihsZXQgYT1yW0RuXS5sZW5ndGgsbj1zW0RuXS5sZW5ndGg7YTxuO2ErKyl7Y29uc3Qgcz1lW0RuXVthXVtyc10oKTtpZighci5wdXNoKHMpKWJyZWFrO3NbTG5dPXRoaXM7dGhpc1tEbl0ucHVzaChzKTtzW0huXSh0LGkpfX1lbHNlIGlmKG51bGw9PT1yKXtpZihudWxsIT09cyl7Y29uc3QgZT1zW3JzXSgpO2VbTG5dPXRoaXM7dGhpc1thXT1lO3RoaXNbRG5dLnB1c2goZSk7ZVtIbl0odCxpKX19ZWxzZXtyW2VuXSh0LGkpO3MmJnJbeW5dKHMsdCxpKX19fXN0YXRpY1tGbl0oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoKGU9PlhGQU9iamVjdFtGbl0oZSkpKToib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lP09iamVjdC5hc3NpZ24oe30sZSk6ZX1bcnNdKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSk7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSl0cnl7ZVt0XT10aGlzW3RdfWNhdGNoe3NoYWRvdyhlLHQsdGhpc1t0XSl9ZVtobl09YCR7ZVtPc119JHtZbisrfWA7ZVtEbl09W107Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKHRoaXNbYm5dLmhhcyh0KSl7ZVt0XT1YRkFPYmplY3RbRm5dKHRoaXNbdF0pO2NvbnRpbnVlfWNvbnN0IGk9dGhpc1t0XTtlW3RdPWkgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheT9uZXcgWEZBT2JqZWN0QXJyYXkoaVtVbl0pOm51bGx9Zm9yKGNvbnN0IHQgb2YgdGhpc1tEbl0pe2NvbnN0IGk9dFtPc10sYT10W3JzXSgpO2VbRG5dLnB1c2goYSk7YVtMbl09ZTtudWxsPT09ZVtpXT9lW2ldPWE6ZVtpXVtEbl0ucHVzaChhKX1yZXR1cm4gZX1bbXNdKGU9bnVsbCl7cmV0dXJuIGU/dGhpc1tEbl0uZmlsdGVyKCh0PT50W09zXT09PWUpKTp0aGlzW0RuXX1bUXNdKGUpe3JldHVybiB0aGlzW2VdfVtFc10oZSx0LGk9ITApe3JldHVybiBBcnJheS5mcm9tKHRoaXNbdXNdKGUsdCxpKSl9Klt1c10oZSx0LGk9ITApe2lmKCJwYXJlbnQiIT09ZSl7Zm9yKGNvbnN0IGkgb2YgdGhpc1tEbl0pe2lbT3NdPT09ZSYmKHlpZWxkIGkpO2kubmFtZT09PWUmJih5aWVsZCBpKTsodHx8aVtZc10oKSkmJih5aWVsZCppW3VzXShlLHQsITEpKX1pJiZ0aGlzW2JuXS5oYXMoZSkmJih5aWVsZCBuZXcgWEZBQXR0cmlidXRlKHRoaXMsZSx0aGlzW2VdKSl9ZWxzZSB5aWVsZCB0aGlzW0xuXX19Y2xhc3MgWEZBT2JqZWN0QXJyYXl7Y29uc3RydWN0b3IoZT0xLzApe3RoaXNbVW5dPWU7dGhpc1tEbl09W119Z2V0IGlzWEZBT2JqZWN0KCl7cmV0dXJuITF9Z2V0IGlzWEZBT2JqZWN0QXJyYXkoKXtyZXR1cm4hMH1wdXNoKGUpe2lmKHRoaXNbRG5dLmxlbmd0aDw9dGhpc1tVbl0pe3RoaXNbRG5dLnB1c2goZSk7cmV0dXJuITB9d2FybihgWEZBIC0gbm9kZSAiJHtlW09zXX0iIGFjY2VwdHMgbm8gbW9yZSB0aGFuICR7dGhpc1tVbl19IGNoaWxkcmVuYCk7cmV0dXJuITF9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpc1tEbl0ubGVuZ3RofWR1bXAoKXtyZXR1cm4gMT09PXRoaXNbRG5dLmxlbmd0aD90aGlzW0RuXVswXVtnc10oKTp0aGlzW0RuXS5tYXAoKGU9PmVbZ3NdKCkpKX1bcnNdKCl7Y29uc3QgZT1uZXcgWEZBT2JqZWN0QXJyYXkodGhpc1tVbl0pO2VbRG5dPXRoaXNbRG5dLm1hcCgoZT0+ZVtyc10oKSkpO3JldHVybiBlfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzW0RuXX1jbGVhcigpe3RoaXNbRG5dLmxlbmd0aD0wfX1jbGFzcyBYRkFBdHRyaWJ1dGV7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXNbTG5dPWU7dGhpc1tPc109dDt0aGlzW25zXT1pO3RoaXNbc3NdPSExO3RoaXNbaG5dPSJhdHRyaWJ1dGUiK1luKyt9W0RzXSgpe3JldHVybiB0aGlzW0xuXX1bTXNdKCl7cmV0dXJuITB9W2RzXSgpe3JldHVybiB0aGlzW25zXS50cmltKCl9W3NuXShlKXtlPWUudmFsdWV8fCIiO3RoaXNbbnNdPWUudG9TdHJpbmcoKX1bb25dKCl7cmV0dXJuIHRoaXNbbnNdfVtMc10oZSl7cmV0dXJuIHRoaXNbTG5dPT09ZXx8dGhpc1tMbl1bTHNdKGUpfX1jbGFzcyBYbWxPYmplY3QgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSx0LGk9e30pe3N1cGVyKGUsdCk7dGhpc1tuc109IiI7dGhpc1tTbl09bnVsbDtpZigiI3RleHQiIT09dCl7Y29uc3QgZT1uZXcgTWFwO3RoaXNbd25dPWU7Zm9yKGNvbnN0W3QsYV1vZiBPYmplY3QuZW50cmllcyhpKSllLnNldCh0LG5ldyBYRkFBdHRyaWJ1dGUodGhpcyx0LGEpKTtpZihpLmhhc093blByb3BlcnR5KFdzKSl7Y29uc3QgZT1pW1dzXS54ZmEuZGF0YU5vZGU7dm9pZCAwIT09ZSYmKCJkYXRhR3JvdXAiPT09ZT90aGlzW1NuXT0hMToiZGF0YVZhbHVlIj09PWUmJih0aGlzW1NuXT0hMCkpfX10aGlzW3NzXT0hMX1bY25dKGUpe2NvbnN0IHQ9dGhpc1tPc107aWYoIiN0ZXh0Ij09PXQpe2UucHVzaChlbmNvZGVUb1htbFN0cmluZyh0aGlzW25zXSkpO3JldHVybn1jb25zdCBpPXV0ZjhTdHJpbmdUb1N0cmluZyh0KSxhPXRoaXNbcXNdPT09VG4/InhmYToiOiIiO2UucHVzaChgPCR7YX0ke2l9YCk7Zm9yKGNvbnN0W3QsaV1vZiB0aGlzW3duXS5lbnRyaWVzKCkpe2NvbnN0IGE9dXRmOFN0cmluZ1RvU3RyaW5nKHQpO2UucHVzaChgICR7YX09IiR7ZW5jb2RlVG9YbWxTdHJpbmcoaVtuc10pfSJgKX1udWxsIT09dGhpc1tTbl0mJih0aGlzW1NuXT9lLnB1c2goJyB4ZmE6ZGF0YU5vZGU9ImRhdGFWYWx1ZSInKTplLnB1c2goJyB4ZmE6ZGF0YU5vZGU9ImRhdGFHcm91cCInKSk7aWYodGhpc1tuc118fDAhPT10aGlzW0RuXS5sZW5ndGgpe2UucHVzaCgiPiIpO2lmKHRoaXNbbnNdKSJzdHJpbmciPT10eXBlb2YgdGhpc1tuc10/ZS5wdXNoKGVuY29kZVRvWG1sU3RyaW5nKHRoaXNbbnNdKSk6dGhpc1tuc11bY25dKGUpO2Vsc2UgZm9yKGNvbnN0IHQgb2YgdGhpc1tEbl0pdFtjbl0oZSk7ZS5wdXNoKGA8LyR7YX0ke2l9PmApfWVsc2UgZS5wdXNoKCIvPiIpfVtqc10oZSl7aWYodGhpc1tuc10pe2NvbnN0IGU9bmV3IFhtbE9iamVjdCh0aGlzW3FzXSwiI3RleHQiKTt0aGlzW0FzXShlKTtlW25zXT10aGlzW25zXTt0aGlzW25zXT0iIn10aGlzW0FzXShlKTtyZXR1cm4hMH1bWnNdKGUpe3RoaXNbbnNdKz1lfVtjc10oKXtpZih0aGlzW25zXSYmdGhpc1tEbl0ubGVuZ3RoPjApe2NvbnN0IGU9bmV3IFhtbE9iamVjdCh0aGlzW3FzXSwiI3RleHQiKTt0aGlzW0FzXShlKTtlW25zXT10aGlzW25zXTtkZWxldGUgdGhpc1tuc119fVtJbl0oKXtyZXR1cm4iI3RleHQiPT09dGhpc1tPc10/SFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiIjdGV4dCIsdmFsdWU6dGhpc1tuc119KTpIVE1MUmVzdWx0LkVNUFRZfVttc10oZT1udWxsKXtyZXR1cm4gZT90aGlzW0RuXS5maWx0ZXIoKHQ9PnRbT3NdPT09ZSkpOnRoaXNbRG5dfVtsc10oKXtyZXR1cm4gdGhpc1t3bl19W1FzXShlKXtjb25zdCB0PXRoaXNbd25dLmdldChlKTtyZXR1cm4gdm9pZCAwIT09dD90OnRoaXNbbXNdKGUpfSpbdXNdKGUsdCl7Y29uc3QgaT10aGlzW3duXS5nZXQoZSk7aSYmKHlpZWxkIGkpO2Zvcihjb25zdCBpIG9mIHRoaXNbRG5dKXtpW09zXT09PWUmJih5aWVsZCBpKTt0JiYoeWllbGQqaVt1c10oZSx0KSl9fSpbaHNdKGUsdCl7Y29uc3QgaT10aGlzW3duXS5nZXQoZSk7IWl8fHQmJmlbc3NdfHwoeWllbGQgaSk7Zm9yKGNvbnN0IGkgb2YgdGhpc1tEbl0peWllbGQqaVtoc10oZSx0KX0qW3BzXShlLHQsaSl7Zm9yKGNvbnN0IGEgb2YgdGhpc1tEbl0pe2FbT3NdIT09ZXx8aSYmYVtzc118fCh5aWVsZCBhKTt0JiYoeWllbGQqYVtwc10oZSx0LGkpKX19W01zXSgpe3JldHVybiBudWxsPT09dGhpc1tTbl0/MD09PXRoaXNbRG5dLmxlbmd0aHx8dGhpc1tEbl1bMF1bcXNdPT09Qm4ueGh0bWwuaWQ6dGhpc1tTbl19W2RzXSgpe3JldHVybiBudWxsPT09dGhpc1tTbl0/MD09PXRoaXNbRG5dLmxlbmd0aD90aGlzW25zXS50cmltKCk6dGhpc1tEbl1bMF1bcXNdPT09Qm4ueGh0bWwuaWQ/dGhpc1tEbl1bMF1bb25dKCkudHJpbSgpOm51bGw6dGhpc1tuc10udHJpbSgpfVtzbl0oZSl7ZT1lLnZhbHVlfHwiIjt0aGlzW25zXT1lLnRvU3RyaW5nKCl9W2dzXShlPSExKXtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7ZSYmKHQuJG5zPXRoaXNbcXNdKTt0aGlzW25zXSYmKHQuJGNvbnRlbnQ9dGhpc1tuc10pO3QuJG5hbWU9dGhpc1tPc107dC5jaGlsZHJlbj1bXTtmb3IoY29uc3QgaSBvZiB0aGlzW0RuXSl0LmNoaWxkcmVuLnB1c2goaVtnc10oZSkpO3QuYXR0cmlidXRlcz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFtlLGldb2YgdGhpc1t3bl0pdC5hdHRyaWJ1dGVzW2VdPWlbbnNdO3JldHVybiB0fX1jbGFzcyBDb250ZW50T2JqZWN0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KTt0aGlzW25zXT0iIn1bWnNdKGUpe3RoaXNbbnNdKz1lfVtjc10oKXt9fWNsYXNzIE9wdGlvbk9iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKGUsdCk7dGhpc1tNbl09aX1bY3NdKCl7dGhpc1tuc109Z2V0S2V5d29yZCh7ZGF0YTp0aGlzW25zXSxkZWZhdWx0VmFsdWU6dGhpc1tNbl1bMF0sdmFsaWRhdGU6ZT0+dGhpc1tNbl0uaW5jbHVkZXMoZSl9KX1bdHNdKGUpe3N1cGVyW3RzXShlKTtkZWxldGUgdGhpc1tNbl19fWNsYXNzIFN0cmluZ09iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3R7W2NzXSgpe3RoaXNbbnNdPXRoaXNbbnNdLnRyaW0oKX19Y2xhc3MgSW50ZWdlck9iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSx0LGksYSl7c3VwZXIoZSx0KTt0aGlzW2tuXT1pO3RoaXNbdm5dPWF9W2NzXSgpe3RoaXNbbnNdPWdldEludGVnZXIoe2RhdGE6dGhpc1tuc10sZGVmYXVsdFZhbHVlOnRoaXNba25dLHZhbGlkYXRlOnRoaXNbdm5dfSl9W3RzXShlKXtzdXBlclt0c10oZSk7ZGVsZXRlIHRoaXNba25dO2RlbGV0ZSB0aGlzW3ZuXX19Y2xhc3MgT3B0aW9uMDEgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0LDAsKGU9PjE9PT1lKSl9fWNsYXNzIE9wdGlvbjEwIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCwxLChlPT4wPT09ZSkpfX1mdW5jdGlvbiBtZWFzdXJlVG9TdHJpbmcoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlPyIwcHgiOk51bWJlci5pc0ludGVnZXIoZSk/YCR7ZX1weGA6YCR7ZS50b0ZpeGVkKDIpfXB4YH1jb25zdCBLbj17YW5jaG9yVHlwZShlLHQpe2NvbnN0IGk9ZVtic10oKTtpZihpJiYoIWkubGF5b3V0fHwicG9zaXRpb24iPT09aS5sYXlvdXQpKXsidHJhbnNmb3JtImluIHR8fCh0LnRyYW5zZm9ybT0iIik7c3dpdGNoKGUuYW5jaG9yVHlwZSl7Y2FzZSJib3R0b21DZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsIC0xMDAlKSI7YnJlYWs7Y2FzZSJib3R0b21MZWZ0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgwLC0xMDAlKSI7YnJlYWs7Y2FzZSJib3R0b21SaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsLTEwMCUpIjticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTUwJSwtNTAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVMZWZ0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgwLC01MCUpIjticmVhaztjYXNlIm1pZGRsZVJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwtNTAlKSI7YnJlYWs7Y2FzZSJ0b3BDZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsMCkiO2JyZWFrO2Nhc2UidG9wUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLDApIn19fSxkaW1lbnNpb25zKGUsdCl7Y29uc3QgaT1lW2JzXSgpO2xldCBhPWUudztjb25zdCByPWUuaDtpZihpLmxheW91dD8uaW5jbHVkZXMoInJvdyIpKXtjb25zdCB0PWlbSXNdLHI9ZS5jb2xTcGFuO2xldCBzO2lmKC0xPT09cil7cz10LmNvbHVtbldpZHRocy5zbGljZSh0LmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk7dC5jdXJyZW50Q29sdW1uPTB9ZWxzZXtzPXQuY29sdW1uV2lkdGhzLnNsaWNlKHQuY3VycmVudENvbHVtbix0LmN1cnJlbnRDb2x1bW4rcikucmVkdWNlKCgoZSx0KT0+ZSt0KSwwKTt0LmN1cnJlbnRDb2x1bW49KHQuY3VycmVudENvbHVtbitlLmNvbFNwYW4pJXQuY29sdW1uV2lkdGhzLmxlbmd0aH1pc05hTihzKXx8KGE9ZS53PXMpfXQud2lkdGg9IiIhPT1hP21lYXN1cmVUb1N0cmluZyhhKToiYXV0byI7dC5oZWlnaHQ9IiIhPT1yP21lYXN1cmVUb1N0cmluZyhyKToiYXV0byJ9LHBvc2l0aW9uKGUsdCl7Y29uc3QgaT1lW2JzXSgpO2lmKCFpPy5sYXlvdXR8fCJwb3NpdGlvbiI9PT1pLmxheW91dCl7dC5wb3NpdGlvbj0iYWJzb2x1dGUiO3QubGVmdD1tZWFzdXJlVG9TdHJpbmcoZS54KTt0LnRvcD1tZWFzdXJlVG9TdHJpbmcoZS55KX19LHJvdGF0ZShlLHQpe2lmKGUucm90YXRlKXsidHJhbnNmb3JtImluIHR8fCh0LnRyYW5zZm9ybT0iIik7dC50cmFuc2Zvcm0rPWByb3RhdGUoLSR7ZS5yb3RhdGV9ZGVnKWA7dC50cmFuc2Zvcm1PcmlnaW49InRvcCBsZWZ0In19LHByZXNlbmNlKGUsdCl7c3dpdGNoKGUucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjp0LnZpc2liaWxpdHk9ImhpZGRlbiI7YnJlYWs7Y2FzZSJoaWRkZW4iOmNhc2UiaW5hY3RpdmUiOnQuZGlzcGxheT0ibm9uZSJ9fSxoQWxpZ24oZSx0KXtpZigicGFyYSI9PT1lW09zXSlzd2l0Y2goZS5oQWxpZ24pe2Nhc2UianVzdGlmeUFsbCI6dC50ZXh0QWxpZ249Imp1c3RpZnktYWxsIjticmVhaztjYXNlInJhZGl4Ijp0LnRleHRBbGlnbj0ibGVmdCI7YnJlYWs7ZGVmYXVsdDp0LnRleHRBbGlnbj1lLmhBbGlnbn1lbHNlIHN3aXRjaChlLmhBbGlnbil7Y2FzZSJsZWZ0Ijp0LmFsaWduU2VsZj0ic3RhcnQiO2JyZWFrO2Nhc2UiY2VudGVyIjp0LmFsaWduU2VsZj0iY2VudGVyIjticmVhaztjYXNlInJpZ2h0Ijp0LmFsaWduU2VsZj0iZW5kIn19LG1hcmdpbihlLHQpe2UubWFyZ2luJiYodC5tYXJnaW49ZS5tYXJnaW5bQ25dKCkubWFyZ2luKX19O2Z1bmN0aW9uIHNldE1pbk1heERpbWVuc2lvbnMoZSx0KXtpZigicG9zaXRpb24iPT09ZVtic10oKS5sYXlvdXQpe2UubWluVz4wJiYodC5taW5XaWR0aD1tZWFzdXJlVG9TdHJpbmcoZS5taW5XKSk7ZS5tYXhXPjAmJih0Lm1heFdpZHRoPW1lYXN1cmVUb1N0cmluZyhlLm1heFcpKTtlLm1pbkg+MCYmKHQubWluSGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhlLm1pbkgpKTtlLm1heEg+MCYmKHQubWF4SGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhlLm1heEgpKX19ZnVuY3Rpb24gbGF5b3V0VGV4dChlLHQsaSxhLHIscyl7Y29uc3Qgbj1uZXcgVGV4dE1lYXN1cmUodCxpLGEscik7InN0cmluZyI9PXR5cGVvZiBlP24uYWRkU3RyaW5nKGUpOmVbVnNdKG4pO3JldHVybiBuLmNvbXB1dGUocyl9ZnVuY3Rpb24gbGF5b3V0Tm9kZShlLHQpe2xldCBpPW51bGwsYT1udWxsLHI9ITE7aWYoKCFlLnd8fCFlLmgpJiZlLnZhbHVlKXtsZXQgcz0wLG49MDtpZihlLm1hcmdpbil7cz1lLm1hcmdpbi5sZWZ0SW5zZXQrZS5tYXJnaW4ucmlnaHRJbnNldDtuPWUubWFyZ2luLnRvcEluc2V0K2UubWFyZ2luLmJvdHRvbUluc2V0fWxldCBvPW51bGwsZz1udWxsO2lmKGUucGFyYSl7Zz1PYmplY3QuY3JlYXRlKG51bGwpO289IiI9PT1lLnBhcmEubGluZUhlaWdodD9udWxsOmUucGFyYS5saW5lSGVpZ2h0O2cudG9wPSIiPT09ZS5wYXJhLnNwYWNlQWJvdmU/MDplLnBhcmEuc3BhY2VBYm92ZTtnLmJvdHRvbT0iIj09PWUucGFyYS5zcGFjZUJlbG93PzA6ZS5wYXJhLnNwYWNlQmVsb3c7Zy5sZWZ0PSIiPT09ZS5wYXJhLm1hcmdpbkxlZnQ/MDplLnBhcmEubWFyZ2luTGVmdDtnLnJpZ2h0PSIiPT09ZS5wYXJhLm1hcmdpblJpZ2h0PzA6ZS5wYXJhLm1hcmdpblJpZ2h0fWxldCBjPWUuZm9udDtpZighYyl7Y29uc3QgdD1lW0ZzXSgpO2xldCBpPWVbRHNdKCk7Zm9yKDtpJiZpIT09dDspe2lmKGkuZm9udCl7Yz1pLmZvbnQ7YnJlYWt9aT1pW0RzXSgpfX1jb25zdCBDPShlLnd8fHQud2lkdGgpLXMsaD1lW1NzXS5mb250RmluZGVyO2lmKGUudmFsdWUuZXhEYXRhJiZlLnZhbHVlLmV4RGF0YVtuc10mJiJ0ZXh0L2h0bWwiPT09ZS52YWx1ZS5leERhdGEuY29udGVudFR5cGUpe2NvbnN0IHQ9bGF5b3V0VGV4dChlLnZhbHVlLmV4RGF0YVtuc10sYyxnLG8saCxDKTthPXQud2lkdGg7aT10LmhlaWdodDtyPXQuaXNCcm9rZW59ZWxzZXtjb25zdCB0PWUudmFsdWVbb25dKCk7aWYodCl7Y29uc3QgZT1sYXlvdXRUZXh0KHQsYyxnLG8saCxDKTthPWUud2lkdGg7aT1lLmhlaWdodDtyPWUuaXNCcm9rZW59fW51bGw9PT1hfHxlLnd8fChhKz1zKTtudWxsPT09aXx8ZS5ofHwoaSs9bil9cmV0dXJue3c6YSxoOmksaXNCcm9rZW46cn19ZnVuY3Rpb24gY29tcHV0ZUJib3goZSx0LGkpe2xldCBhO2lmKCIiIT09ZS53JiYiIiE9PWUuaClhPVtlLngsZS55LGUudyxlLmhdO2Vsc2V7aWYoIWkpcmV0dXJuIG51bGw7bGV0IHI9ZS53O2lmKCIiPT09cil7aWYoMD09PWUubWF4Vyl7Y29uc3QgdD1lW2JzXSgpO3I9InBvc2l0aW9uIj09PXQubGF5b3V0JiYiIiE9PXQudz8wOmUubWluV31lbHNlIHI9TWF0aC5taW4oZS5tYXhXLGkud2lkdGgpO3QuYXR0cmlidXRlcy5zdHlsZS53aWR0aD1tZWFzdXJlVG9TdHJpbmcocil9bGV0IHM9ZS5oO2lmKCIiPT09cyl7aWYoMD09PWUubWF4SCl7Y29uc3QgdD1lW2JzXSgpO3M9InBvc2l0aW9uIj09PXQubGF5b3V0JiYiIiE9PXQuaD8wOmUubWluSH1lbHNlIHM9TWF0aC5taW4oZS5tYXhILGkuaGVpZ2h0KTt0LmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhzKX1hPVtlLngsZS55LHIsc119cmV0dXJuIGF9ZnVuY3Rpb24gZml4RGltZW5zaW9ucyhlKXtjb25zdCB0PWVbYnNdKCk7aWYodC5sYXlvdXQ/LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgaT10W0lzXSxhPWUuY29sU3BhbjtsZXQgcjtyPS0xPT09YT9pLmNvbHVtbldpZHRocy5zbGljZShpLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk6aS5jb2x1bW5XaWR0aHMuc2xpY2UoaS5jdXJyZW50Q29sdW1uLGkuY3VycmVudENvbHVtbithKS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApO2lzTmFOKHIpfHwoZS53PXIpfXQubGF5b3V0JiYicG9zaXRpb24iIT09dC5sYXlvdXQmJihlLng9ZS55PTApOyJ0YWJsZSI9PT1lLmxheW91dCYmIiI9PT1lLncmJkFycmF5LmlzQXJyYXkoZS5jb2x1bW5XaWR0aHMpJiYoZS53PWUuY29sdW1uV2lkdGhzLnJlZHVjZSgoKGUsdCk9PmUrdCksMCkpfWZ1bmN0aW9uIGxheW91dENsYXNzKGUpe3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6ZGVmYXVsdDpyZXR1cm4ieGZhUG9zaXRpb24iO2Nhc2UibHItdGIiOnJldHVybiJ4ZmFMclRiIjtjYXNlInJsLXJvdyI6cmV0dXJuInhmYVJsUm93IjtjYXNlInJsLXRiIjpyZXR1cm4ieGZhUmxUYiI7Y2FzZSJyb3ciOnJldHVybiJ4ZmFSb3ciO2Nhc2UidGFibGUiOnJldHVybiJ4ZmFUYWJsZSI7Y2FzZSJ0YiI6cmV0dXJuInhmYVRiIn19ZnVuY3Rpb24gdG9TdHlsZShlLC4uLnQpe2NvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3QgYSBvZiB0KXtjb25zdCB0PWVbYV07aWYobnVsbCE9PXQpaWYoS24uaGFzT3duUHJvcGVydHkoYSkpS25bYV0oZSxpKTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBYRkFPYmplY3Qpe2NvbnN0IGU9dFtDbl0oKTtlP09iamVjdC5hc3NpZ24oaSxlKTp3YXJuKGAoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICR7YX0gbm90IGltcGxlbWVudGVkIHlldGApfX1yZXR1cm4gaX1mdW5jdGlvbiBjcmVhdGVXcmFwcGVyKGUsdCl7Y29uc3R7YXR0cmlidXRlczppfT10LHtzdHlsZTphfT1pLHI9e25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFXcmFwcGVyIl0sc3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sY2hpbGRyZW46W119O2kuY2xhc3MucHVzaCgieGZhV3JhcHBlZCIpO2lmKGUuYm9yZGVyKXtjb25zdHt3aWR0aHM6aSxpbnNldHM6c309ZS5ib3JkZXJbSXNdO2xldCBuLG8sZz1zWzBdLGM9c1szXTtjb25zdCBDPXNbMF0rc1syXSxoPXNbMV0rc1szXTtzd2l0Y2goZS5ib3JkZXIuaGFuZCl7Y2FzZSJldmVuIjpnLT1pWzBdLzI7Yy09aVszXS8yO249YGNhbGMoMTAwJSArICR7KGlbMV0raVszXSkvMi1ofXB4KWA7bz1gY2FsYygxMDAlICsgJHsoaVswXStpWzJdKS8yLUN9cHgpYDticmVhaztjYXNlImxlZnQiOmctPWlbMF07Yy09aVszXTtuPWBjYWxjKDEwMCUgKyAke2lbMV0raVszXS1ofXB4KWA7bz1gY2FsYygxMDAlICsgJHtpWzBdK2lbMl0tQ31weClgO2JyZWFrO2Nhc2UicmlnaHQiOm49aD9gY2FsYygxMDAlIC0gJHtofXB4KWA6IjEwMCUiO289Qz9gY2FsYygxMDAlIC0gJHtDfXB4KWA6IjEwMCUifWNvbnN0IGw9WyJ4ZmFCb3JkZXIiXTtpc1ByaW50T25seShlLmJvcmRlcikmJmwucHVzaCgieGZhUHJpbnRPbmx5Iik7Y29uc3QgUT17bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpsLHN0eWxlOnt0b3A6YCR7Z31weGAsbGVmdDpgJHtjfXB4YCx3aWR0aDpuLGhlaWdodDpvfX0sY2hpbGRyZW46W119O2Zvcihjb25zdCBlIG9mWyJib3JkZXIiLCJib3JkZXJXaWR0aCIsImJvcmRlckNvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyU3R5bGUiXSlpZih2b2lkIDAhPT1hW2VdKXtRLmF0dHJpYnV0ZXMuc3R5bGVbZV09YVtlXTtkZWxldGUgYVtlXX1yLmNoaWxkcmVuLnB1c2goUSx0KX1lbHNlIHIuY2hpbGRyZW4ucHVzaCh0KTtmb3IoY29uc3QgZSBvZlsiYmFja2dyb3VuZCIsImJhY2tncm91bmRDbGlwIiwidG9wIiwibGVmdCIsIndpZHRoIiwiaGVpZ2h0IiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsInRyYW5zZm9ybSIsInRyYW5zZm9ybU9yaWdpbiIsInZpc2liaWxpdHkiXSlpZih2b2lkIDAhPT1hW2VdKXtyLmF0dHJpYnV0ZXMuc3R5bGVbZV09YVtlXTtkZWxldGUgYVtlXX1yLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIj09PWEucG9zaXRpb24/ImFic29sdXRlIjoicmVsYXRpdmUiO2RlbGV0ZSBhLnBvc2l0aW9uO2lmKGEuYWxpZ25TZWxmKXtyLmF0dHJpYnV0ZXMuc3R5bGUuYWxpZ25TZWxmPWEuYWxpZ25TZWxmO2RlbGV0ZSBhLmFsaWduU2VsZn1yZXR1cm4gcn1mdW5jdGlvbiBmaXhUZXh0SW5kZW50KGUpe2NvbnN0IHQ9Z2V0TWVhc3VyZW1lbnQoZS50ZXh0SW5kZW50LCIwcHgiKTtpZih0Pj0wKXJldHVybjtjb25zdCBpPSJwYWRkaW5nIisoImxlZnQiPT09KCJyaWdodCI9PT1lLnRleHRBbGlnbj8icmlnaHQiOiJsZWZ0Iik/IkxlZnQiOiJSaWdodCIpLGE9Z2V0TWVhc3VyZW1lbnQoZVtpXSwiMHB4Iik7ZVtpXT1hLXQrInB4In1mdW5jdGlvbiBzZXRBY2Nlc3MoZSx0KXtzd2l0Y2goZS5hY2Nlc3Mpe2Nhc2Uibm9uSW50ZXJhY3RpdmUiOnQucHVzaCgieGZhTm9uSW50ZXJhY3RpdmUiKTticmVhaztjYXNlInJlYWRPbmx5Ijp0LnB1c2goInhmYVJlYWRPbmx5Iik7YnJlYWs7Y2FzZSJwcm90ZWN0ZWQiOnQucHVzaCgieGZhRGlzYWJsZWQiKX19ZnVuY3Rpb24gaXNQcmludE9ubHkoZSl7cmV0dXJuIGUucmVsZXZhbnQubGVuZ3RoPjAmJiFlLnJlbGV2YW50WzBdLmV4Y2x1ZGVkJiYicHJpbnQiPT09ZS5yZWxldmFudFswXS52aWV3bmFtZX1mdW5jdGlvbiBnZXRDdXJyZW50UGFyYShlKXtjb25zdCB0PWVbRnNdKClbSXNdLnBhcmFTdGFjaztyZXR1cm4gdC5sZW5ndGg/dC5hdCgtMSk6bnVsbH1mdW5jdGlvbiBzZXRQYXJhKGUsdCxpKXtpZihpLmF0dHJpYnV0ZXMuY2xhc3M/LmluY2x1ZGVzKCJ4ZmFSaWNoIikpe2lmKHQpeyIiPT09ZS5oJiYodC5oZWlnaHQ9ImF1dG8iKTsiIj09PWUudyYmKHQud2lkdGg9ImF1dG8iKX1jb25zdCBhPWdldEN1cnJlbnRQYXJhKGUpO2lmKGEpe2NvbnN0IGU9aS5hdHRyaWJ1dGVzLnN0eWxlO2UuZGlzcGxheT0iZmxleCI7ZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iO3N3aXRjaChhLnZBbGlnbil7Y2FzZSJ0b3AiOmUuanVzdGlmeUNvbnRlbnQ9InN0YXJ0IjticmVhaztjYXNlImJvdHRvbSI6ZS5qdXN0aWZ5Q29udGVudD0iZW5kIjticmVhaztjYXNlIm1pZGRsZSI6ZS5qdXN0aWZ5Q29udGVudD0iY2VudGVyIn1jb25zdCB0PWFbQ25dKCk7Zm9yKGNvbnN0W2ksYV1vZiBPYmplY3QuZW50cmllcyh0KSlpIGluIGV8fChlW2ldPWEpfX19ZnVuY3Rpb24gc2V0Rm9udEZhbWlseShlLHQsaSxhKXtpZighaSl7ZGVsZXRlIGEuZm9udEZhbWlseTtyZXR1cm59Y29uc3Qgcj1zdHJpcFF1b3RlcyhlLnR5cGVmYWNlKTthLmZvbnRGYW1pbHk9YCIke3J9ImA7Y29uc3Qgcz1pLmZpbmQocik7aWYocyl7Y29uc3R7Zm9udEZhbWlseTppfT1zLnJlZ3VsYXIuY3NzRm9udEluZm87aSE9PXImJihhLmZvbnRGYW1pbHk9YCIke2l9ImApO2NvbnN0IG49Z2V0Q3VycmVudFBhcmEodCk7aWYobiYmIiIhPT1uLmxpbmVIZWlnaHQpcmV0dXJuO2lmKGEubGluZUhlaWdodClyZXR1cm47Y29uc3Qgbz1zZWxlY3RGb250KGUscyk7byYmKGEubGluZUhlaWdodD1NYXRoLm1heCgxLjIsby5saW5lSGVpZ2h0KSl9fWZ1bmN0aW9uIGZpeFVSTChlKXtjb25zdCB0PWNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwoZSxudWxsLHthZGREZWZhdWx0UHJvdG9jb2w6ITAsdHJ5Q29udmVydEVuY29kaW5nOiEwfSk7cmV0dXJuIHQ/dC5ocmVmOm51bGx9ZnVuY3Rpb24gY3JlYXRlTGluZShlLHQpe3JldHVybntuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsibHItdGIiPT09ZS5sYXlvdXQ/InhmYUxyIjoieGZhUmwiXX0sY2hpbGRyZW46dH19ZnVuY3Rpb24gZmx1c2hIVE1MKGUpe2lmKCFlW0lzXSlyZXR1cm4gbnVsbDtjb25zdCB0PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZVtJc10uYXR0cmlidXRlcyxjaGlsZHJlbjplW0lzXS5jaGlsZHJlbn07aWYoZVtJc10uZmFpbGluZ05vZGUpe2NvbnN0IGk9ZVtJc10uZmFpbGluZ05vZGVbQ3NdKCk7aSYmKGUubGF5b3V0LmVuZHNXaXRoKCItdGIiKT90LmNoaWxkcmVuLnB1c2goY3JlYXRlTGluZShlLFtpXSkpOnQuY2hpbGRyZW4ucHVzaChpKSl9cmV0dXJuIDA9PT10LmNoaWxkcmVuLmxlbmd0aD9udWxsOnR9ZnVuY3Rpb24gYWRkSFRNTChlLHQsaSl7Y29uc3QgYT1lW0lzXSxyPWEuYXZhaWxhYmxlU3BhY2UsW3MsbixvLGddPWk7c3dpdGNoKGUubGF5b3V0KXtjYXNlInBvc2l0aW9uIjphLndpZHRoPU1hdGgubWF4KGEud2lkdGgscytvKTthLmhlaWdodD1NYXRoLm1heChhLmhlaWdodCxuK2cpO2EuY2hpbGRyZW4ucHVzaCh0KTticmVhaztjYXNlImxyLXRiIjpjYXNlInJsLXRiIjppZighYS5saW5lfHwxPT09YS5hdHRlbXB0KXthLmxpbmU9Y3JlYXRlTGluZShlLFtdKTthLmNoaWxkcmVuLnB1c2goYS5saW5lKTthLm51bWJlckluTGluZT0wfWEubnVtYmVySW5MaW5lKz0xO2EubGluZS5jaGlsZHJlbi5wdXNoKHQpO2lmKDA9PT1hLmF0dGVtcHQpe2EuY3VycmVudFdpZHRoKz1vO2EuaGVpZ2h0PU1hdGgubWF4KGEuaGVpZ2h0LGEucHJldkhlaWdodCtnKX1lbHNle2EuY3VycmVudFdpZHRoPW87YS5wcmV2SGVpZ2h0PWEuaGVpZ2h0O2EuaGVpZ2h0Kz1nO2EuYXR0ZW1wdD0wfWEud2lkdGg9TWF0aC5tYXgoYS53aWR0aCxhLmN1cnJlbnRXaWR0aCk7YnJlYWs7Y2FzZSJybC1yb3ciOmNhc2Uicm93Ijp7YS5jaGlsZHJlbi5wdXNoKHQpO2Eud2lkdGgrPW87YS5oZWlnaHQ9TWF0aC5tYXgoYS5oZWlnaHQsZyk7Y29uc3QgZT1tZWFzdXJlVG9TdHJpbmcoYS5oZWlnaHQpO2Zvcihjb25zdCB0IG9mIGEuY2hpbGRyZW4pdC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD1lO2JyZWFrfWNhc2UidGFibGUiOmNhc2UidGIiOmEud2lkdGg9TWF0aC5taW4oci53aWR0aCxNYXRoLm1heChhLndpZHRoLG8pKTthLmhlaWdodCs9ZzthLmNoaWxkcmVuLnB1c2godCl9fWZ1bmN0aW9uIGdldEF2YWlsYWJsZVNwYWNlKGUpe2NvbnN0IHQ9ZVtJc10uYXZhaWxhYmxlU3BhY2UsaT1lLm1hcmdpbj9lLm1hcmdpbi50b3BJbnNldCtlLm1hcmdpbi5ib3R0b21JbnNldDowLGE9ZS5tYXJnaW4/ZS5tYXJnaW4ubGVmdEluc2V0K2UubWFyZ2luLnJpZ2h0SW5zZXQ6MDtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOnJldHVybiAwPT09ZVtJc10uYXR0ZW1wdD97d2lkdGg6dC53aWR0aC1hLWVbSXNdLmN1cnJlbnRXaWR0aCxoZWlnaHQ6dC5oZWlnaHQtaS1lW0lzXS5wcmV2SGVpZ2h0fTp7d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1pLWVbSXNdLmhlaWdodH07Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpyZXR1cm57d2lkdGg6ZVtJc10uY29sdW1uV2lkdGhzLnNsaWNlKGVbSXNdLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoKGUsdCk9PmUrdCkpLGhlaWdodDp0LmhlaWdodC1hfTtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm57d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1pLWVbSXNdLmhlaWdodH07ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gY2hlY2tEaW1lbnNpb25zKGUsdCl7aWYobnVsbD09PWVbRnNdKClbSXNdLmZpcnN0VW5zcGxpdHRhYmxlKXJldHVybiEwO2lmKDA9PT1lLnd8fDA9PT1lLmgpcmV0dXJuITA7Y29uc3QgaT1lW2JzXSgpLGE9aVtJc10/LmF0dGVtcHR8fDAsWyxyLHMsbl09ZnVuY3Rpb24gZ2V0VHJhbnNmb3JtZWRCQm94KGUpe2xldCB0LGksYT0iIj09PWUudz9OYU46ZS53LHI9IiI9PT1lLmg/TmFOOmUuaCxbcyxuXT1bMCwwXTtzd2l0Y2goZS5hbmNob3JUeXBlfHwiIil7Y2FzZSJib3R0b21DZW50ZXIiOltzLG5dPVthLzIscl07YnJlYWs7Y2FzZSJib3R0b21MZWZ0IjpbcyxuXT1bMCxyXTticmVhaztjYXNlImJvdHRvbVJpZ2h0IjpbcyxuXT1bYSxyXTticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6W3Msbl09W2EvMixyLzJdO2JyZWFrO2Nhc2UibWlkZGxlTGVmdCI6W3Msbl09WzAsci8yXTticmVhaztjYXNlIm1pZGRsZVJpZ2h0IjpbcyxuXT1bYSxyLzJdO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjpbcyxuXT1bYS8yLDBdO2JyZWFrO2Nhc2UidG9wUmlnaHQiOltzLG5dPVthLDBdfXN3aXRjaChlLnJvdGF0ZXx8MCl7Y2FzZSAwOlt0LGldPVstcywtbl07YnJlYWs7Y2FzZSA5MDpbdCxpXT1bLW4sc107W2Escl09W3IsLWFdO2JyZWFrO2Nhc2UgMTgwOlt0LGldPVtzLG5dO1thLHJdPVstYSwtcl07YnJlYWs7Y2FzZSAyNzA6W3QsaV09W24sLXNdO1thLHJdPVstcixhXX1yZXR1cm5bZS54K3QrTWF0aC5taW4oMCxhKSxlLnkraStNYXRoLm1pbigwLHIpLE1hdGguYWJzKGEpLE1hdGguYWJzKHIpXX0oZSk7c3dpdGNoKGkubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PWE/ZVtGc10oKVtJc10ubm9MYXlvdXRGYWlsdXJlPyIiIT09ZS53P01hdGgucm91bmQocy10LndpZHRoKTw9Mjp0LndpZHRoPjI6ISgiIiE9PWUuaCYmTWF0aC5yb3VuZChuLXQuaGVpZ2h0KT4yKSYmKCIiIT09ZS53P01hdGgucm91bmQocy10LndpZHRoKTw9Mnx8MD09PWlbSXNdLm51bWJlckluTGluZSYmdC5oZWlnaHQ+Mjp0LndpZHRoPjIpOiEhZVtGc10oKVtJc10ubm9MYXlvdXRGYWlsdXJlfHwhKCIiIT09ZS5oJiZNYXRoLnJvdW5kKG4tdC5oZWlnaHQpPjIpJiYoKCIiPT09ZS53fHxNYXRoLnJvdW5kKHMtdC53aWR0aCk8PTJ8fCFpW3ZzXSgpKSYmdC5oZWlnaHQ+Mik7Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6cmV0dXJuISFlW0ZzXSgpW0lzXS5ub0xheW91dEZhaWx1cmV8fCgiIj09PWUuaHx8ZVtKc10oKT8oIiI9PT1lLnd8fE1hdGgucm91bmQocy10LndpZHRoKTw9Mnx8IWlbdnNdKCkpJiZ0LmhlaWdodD4yOk1hdGgucm91bmQobi10LmhlaWdodCk8PTIpO2Nhc2UicG9zaXRpb24iOmlmKGVbRnNdKClbSXNdLm5vTGF5b3V0RmFpbHVyZSlyZXR1cm4hMDtpZigiIj09PWUuaHx8TWF0aC5yb3VuZChuK3ItdC5oZWlnaHQpPD0yKXJldHVybiEwO3JldHVybiBuK3I+ZVtGc10oKVtJc10uY3VycmVudENvbnRlbnRBcmVhLmg7Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpyZXR1cm4hIWVbRnNdKClbSXNdLm5vTGF5b3V0RmFpbHVyZXx8KCIiPT09ZS5ofHxNYXRoLnJvdW5kKG4tdC5oZWlnaHQpPD0yKTtkZWZhdWx0OnJldHVybiEwfX1jb25zdCBxbj1Cbi50ZW1wbGF0ZS5pZCxPbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLFBuPS9eSChcZCspJC8sV249bmV3IFNldChbImltYWdlL2dpZiIsImltYWdlL2pwZWciLCJpbWFnZS9qcGciLCJpbWFnZS9wanBlZyIsImltYWdlL3BuZyIsImltYWdlL2FwbmciLCJpbWFnZS94LXBuZyIsImltYWdlL2JtcCIsImltYWdlL3gtbXMtYm1wIiwiaW1hZ2UvdGlmZiIsImltYWdlL3RpZiIsImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJdKSxqbj1bW1s2Niw3N10sImltYWdlL2JtcCJdLFtbMjU1LDIxNiwyNTVdLCJpbWFnZS9qcGVnIl0sW1s3Myw3Myw0MiwwXSwiaW1hZ2UvdGlmZiJdLFtbNzcsNzcsMCw0Ml0sImltYWdlL3RpZmYiXSxbWzcxLDczLDcwLDU2LDU3LDk3XSwiaW1hZ2UvZ2lmIl0sW1sxMzcsODAsNzgsNzEsMTMsMTAsMjYsMTBdLCJpbWFnZS9wbmciXV07ZnVuY3Rpb24gZ2V0Qm9yZGVyRGltcyhlKXtpZighZXx8IWUuYm9yZGVyKXJldHVybnt3OjAsaDowfTtjb25zdCB0PWUuYm9yZGVyW2ZzXSgpO3JldHVybiB0P3t3OnQud2lkdGhzWzBdK3Qud2lkdGhzWzJdK3QuaW5zZXRzWzBdK3QuaW5zZXRzWzJdLGg6dC53aWR0aHNbMV0rdC53aWR0aHNbM10rdC5pbnNldHNbMV0rdC5pbnNldHNbM119Ont3OjAsaDowfX1mdW5jdGlvbiBoYXNNYXJnaW4oZSl7cmV0dXJuIGUubWFyZ2luJiYoZS5tYXJnaW4udG9wSW5zZXR8fGUubWFyZ2luLnJpZ2h0SW5zZXR8fGUubWFyZ2luLmJvdHRvbUluc2V0fHxlLm1hcmdpbi5sZWZ0SW5zZXQpfWZ1bmN0aW9uIF9zZXRWYWx1ZShlLHQpe2lmKCFlLnZhbHVlKXtjb25zdCB0PW5ldyBWYWx1ZSh7fSk7ZVtBc10odCk7ZS52YWx1ZT10fWUudmFsdWVbc25dKHQpfWZ1bmN0aW9uKmdldENvbnRhaW5lZENoaWxkcmVuKGUpe2Zvcihjb25zdCB0IG9mIGVbbXNdKCkpdCBpbnN0YW5jZW9mIFN1YmZvcm1TZXQ/eWllbGQqdFt5c10oKTp5aWVsZCB0fWZ1bmN0aW9uIGlzUmVxdWlyZWQoZSl7cmV0dXJuImVycm9yIj09PWUudmFsaWRhdGU/Lm51bGxUZXN0fWZ1bmN0aW9uIHNldFRhYkluZGV4KGUpe2Zvcig7ZTspe2lmKCFlLnRyYXZlcnNhbCl7ZVtubl09ZVtEc10oKVtubl07cmV0dXJufWlmKGVbbm5dKXJldHVybjtsZXQgdD1udWxsO2Zvcihjb25zdCBpIG9mIGUudHJhdmVyc2FsW21zXSgpKWlmKCJuZXh0Ij09PWkub3BlcmF0aW9uKXt0PWk7YnJlYWt9aWYoIXR8fCF0LnJlZil7ZVtubl09ZVtEc10oKVtubl07cmV0dXJufWNvbnN0IGk9ZVtGc10oKTtlW25uXT0rK2lbbm5dO2NvbnN0IGE9aVt0bl0odC5yZWYsZSk7aWYoIWEpcmV0dXJuO2U9YVswXX19ZnVuY3Rpb24gYXBwbHlBc3Npc3QoZSx0KXtjb25zdCBpPWUuYXNzaXN0O2lmKGkpe2NvbnN0IGU9aVtJbl0oKTtlJiYodC50aXRsZT1lKTtjb25zdCBhPWkucm9sZS5tYXRjaChQbik7aWYoYSl7Y29uc3QgZT0iaGVhZGluZyIsaT1hWzFdO3Qucm9sZT1lO3RbImFyaWEtbGV2ZWwiXT1pfX1pZigidGFibGUiPT09ZS5sYXlvdXQpdC5yb2xlPSJ0YWJsZSI7ZWxzZSBpZigicm93Ij09PWUubGF5b3V0KXQucm9sZT0icm93IjtlbHNle2NvbnN0IGk9ZVtEc10oKTsicm93Ij09PWkubGF5b3V0JiYodC5yb2xlPSJUSCI9PT1pLmFzc2lzdD8ucm9sZT8iY29sdW1uaGVhZGVyIjoiY2VsbCIpfX1mdW5jdGlvbiBhcmlhTGFiZWwoZSl7aWYoIWUuYXNzaXN0KXJldHVybiBudWxsO2NvbnN0IHQ9ZS5hc3Npc3Q7cmV0dXJuIHQuc3BlYWsmJiIiIT09dC5zcGVha1tuc10/dC5zcGVha1tuc106dC50b29sVGlwP3QudG9vbFRpcFtuc106bnVsbH1mdW5jdGlvbiB2YWx1ZVRvSHRtbChlKXtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOlt7bmFtZToic3BhbiIsYXR0cmlidXRlczp7c3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sdmFsdWU6ZX1dfSl9ZnVuY3Rpb24gc2V0Rmlyc3RVbnNwbGl0dGFibGUoZSl7Y29uc3QgdD1lW0ZzXSgpO2lmKG51bGw9PT10W0lzXS5maXJzdFVuc3BsaXR0YWJsZSl7dFtJc10uZmlyc3RVbnNwbGl0dGFibGU9ZTt0W0lzXS5ub0xheW91dEZhaWx1cmU9ITB9fWZ1bmN0aW9uIHVuc2V0Rmlyc3RVbnNwbGl0dGFibGUoZSl7Y29uc3QgdD1lW0ZzXSgpO3RbSXNdLmZpcnN0VW5zcGxpdHRhYmxlPT09ZSYmKHRbSXNdLm5vTGF5b3V0RmFpbHVyZT0hMSl9ZnVuY3Rpb24gaGFuZGxlQnJlYWsoZSl7aWYoZVtJc10pcmV0dXJuITE7ZVtJc109T2JqZWN0LmNyZWF0ZShudWxsKTtpZigiYXV0byI9PT1lLnRhcmdldFR5cGUpcmV0dXJuITE7Y29uc3QgdD1lW0ZzXSgpO2xldCBpPW51bGw7aWYoZS50YXJnZXQpe2k9dFt0bl0oZS50YXJnZXQsZVtEc10oKSk7aWYoIWkpcmV0dXJuITE7aT1pWzBdfWNvbnN0e2N1cnJlbnRQYWdlQXJlYTphLGN1cnJlbnRDb250ZW50QXJlYTpyfT10W0lzXTtpZigicGFnZUFyZWEiPT09ZS50YXJnZXRUeXBlKXtpIGluc3RhbmNlb2YgUGFnZUFyZWF8fChpPW51bGwpO2lmKGUuc3RhcnROZXcpe2VbSXNdLnRhcmdldD1pfHxhO3JldHVybiEwfWlmKGkmJmkhPT1hKXtlW0lzXS50YXJnZXQ9aTtyZXR1cm4hMH1yZXR1cm4hMX1pIGluc3RhbmNlb2YgQ29udGVudEFyZWF8fChpPW51bGwpO2NvbnN0IHM9aSYmaVtEc10oKTtsZXQgbixvPXM7aWYoZS5zdGFydE5ldylpZihpKXtjb25zdCBlPXMuY29udGVudEFyZWEuY2hpbGRyZW4sdD1lLmluZGV4T2YociksYT1lLmluZGV4T2YoaSk7LTEhPT10JiZ0PGEmJihvPW51bGwpO249YS0xfWVsc2Ugbj1hLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2Yocik7ZWxzZXtpZighaXx8aT09PXIpcmV0dXJuITE7bj1zLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoaSktMTtvPXM9PT1hP251bGw6c31lW0lzXS50YXJnZXQ9bztlW0lzXS5pbmRleD1uO3JldHVybiEwfWZ1bmN0aW9uIGhhbmRsZU92ZXJmbG93KGUsdCxpKXtjb25zdCBhPWVbRnNdKCkscj1hW0lzXS5ub0xheW91dEZhaWx1cmUscz10W2JzXTt0W2JzXT0oKT0+ZTthW0lzXS5ub0xheW91dEZhaWx1cmU9ITA7Y29uc3Qgbj10W0luXShpKTtlWyRyXShuLmh0bWwsbi5iYm94KTthW0lzXS5ub0xheW91dEZhaWx1cmU9cjt0W2JzXT1zfWNsYXNzIEFwcGVhcmFuY2VGaWx0ZXIgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImFwcGVhcmFuY2VGaWx0ZXIiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEFyYyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiYXJjIiwhMCk7dGhpcy5jaXJjdWxhcj1nZXRJbnRlZ2VyKHtkYXRhOmUuY2lyY3VsYXIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmhhbmQ9Z2V0U3RyaW5nT3B0aW9uKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnN0YXJ0QW5nbGU9Z2V0RmxvYXQoe2RhdGE6ZS5zdGFydEFuZ2xlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy5zd2VlcEFuZ2xlPWdldEZsb2F0KHtkYXRhOmUuc3dlZXBBbmdsZSxkZWZhdWx0VmFsdWU6MzYwLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZWRnZT1udWxsO3RoaXMuZmlsbD1udWxsfVtJbl0oKXtjb25zdCBlPXRoaXMuZWRnZXx8bmV3IEVkZ2Uoe30pLHQ9ZVtDbl0oKSxpPU9iamVjdC5jcmVhdGUobnVsbCk7InZpc2libGUiPT09dGhpcy5maWxsPy5wcmVzZW5jZT9PYmplY3QuYXNzaWduKGksdGhpcy5maWxsW0NuXSgpKTppLmZpbGw9InRyYW5zcGFyZW50IjtpLnN0cm9rZVdpZHRoPW1lYXN1cmVUb1N0cmluZygidmlzaWJsZSI9PT1lLnByZXNlbmNlP2UudGhpY2tuZXNzOjApO2kuc3Ryb2tlPXQuY29sb3I7bGV0IGE7Y29uc3Qgcj17eG1sbnM6T24sc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJ2aXNpYmxlIn19O2lmKDM2MD09PXRoaXMuc3dlZXBBbmdsZSlhPXtuYW1lOiJlbGxpcHNlIixhdHRyaWJ1dGVzOnt4bWxuczpPbixjeDoiNTAlIixjeToiNTAlIixyeDoiNTAlIixyeToiNTAlIixzdHlsZTppfX07ZWxzZXtjb25zdCBlPXRoaXMuc3RhcnRBbmdsZSpNYXRoLlBJLzE4MCx0PXRoaXMuc3dlZXBBbmdsZSpNYXRoLlBJLzE4MCxzPXRoaXMuc3dlZXBBbmdsZT4xODA/MTowLFtuLG8sZyxjXT1bNTAqKDErTWF0aC5jb3MoZSkpLDUwKigxLU1hdGguc2luKGUpKSw1MCooMStNYXRoLmNvcyhlK3QpKSw1MCooMS1NYXRoLnNpbihlK3QpKV07YT17bmFtZToicGF0aCIsYXR0cmlidXRlczp7eG1sbnM6T24sZDpgTSAke259ICR7b30gQSA1MCA1MCAwICR7c30gMCAke2d9ICR7Y31gLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTppfX07T2JqZWN0LmFzc2lnbihyLHt2aWV3Qm94OiIwIDAgMTAwIDEwMCIscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KX1jb25zdCBzPXtuYW1lOiJzdmciLGNoaWxkcmVuOlthXSxhdHRyaWJ1dGVzOnJ9O2lmKGhhc01hcmdpbih0aGlzW0RzXSgpW0RzXSgpKSlyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W3NdfSk7cy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhzKX19Y2xhc3MgQXJlYSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiYXJlYSIsITApO3RoaXMuY29sU3Bhbj1nZXRJbnRlZ2VyKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMueD1nZXRNZWFzdXJlbWVudChlLngsIjBwdCIpO3RoaXMueT1nZXRNZWFzdXJlbWVudChlLnksIjBwdCIpO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5hcmVhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRyYXc9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhPYmplY3Q9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZpZWxkPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm09bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybVNldD1uZXcgWEZBT2JqZWN0QXJyYXl9Klt5c10oKXt5aWVsZCpnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKX1bWXNdKCl7cmV0dXJuITB9W1VzXSgpe3JldHVybiEwfVskcl0oZSx0KXtjb25zdFtpLGEscixzXT10O3RoaXNbSXNdLndpZHRoPU1hdGgubWF4KHRoaXNbSXNdLndpZHRoLGkrcik7dGhpc1tJc10uaGVpZ2h0PU1hdGgubWF4KHRoaXNbSXNdLmhlaWdodCxhK3MpO3RoaXNbSXNdLmNoaWxkcmVuLnB1c2goZSl9W0JzXSgpe3JldHVybiB0aGlzW0lzXS5hdmFpbGFibGVTcGFjZX1bSW5dKGUpe2NvbnN0IHQ9dG9TdHlsZSh0aGlzLCJwb3NpdGlvbiIpLGk9e3N0eWxlOnQsaWQ6dGhpc1tobl0sY2xhc3M6WyJ4ZmFBcmVhIl19O2lzUHJpbnRPbmx5KHRoaXMpJiZpLmNsYXNzLnB1c2goInhmYVByaW50T25seSIpO3RoaXMubmFtZSYmKGkueGZhTmFtZT10aGlzLm5hbWUpO2NvbnN0IGE9W107dGhpc1tJc109e2NoaWxkcmVuOmEsd2lkdGg6MCxoZWlnaHQ6MCxhdmFpbGFibGVTcGFjZTplfTtjb25zdCByPXRoaXNbZXNdKHtmaWx0ZXI6bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZmllbGQiLCJleGNsR3JvdXAiLCJzdWJmb3JtIiwic3ViZm9ybVNldCJdKSxpbmNsdWRlOiEwfSk7aWYoIXIuc3VjY2Vzcyl7aWYoci5pc0JyZWFrKCkpcmV0dXJuIHI7ZGVsZXRlIHRoaXNbSXNdO3JldHVybiBIVE1MUmVzdWx0LkZBSUxVUkV9dC53aWR0aD1tZWFzdXJlVG9TdHJpbmcodGhpc1tJc10ud2lkdGgpO3QuaGVpZ2h0PW1lYXN1cmVUb1N0cmluZyh0aGlzW0lzXS5oZWlnaHQpO2NvbnN0IHM9e25hbWU6ImRpdiIsYXR0cmlidXRlczppLGNoaWxkcmVuOmF9LG49W3RoaXMueCx0aGlzLnksdGhpc1tJc10ud2lkdGgsdGhpc1tJc10uaGVpZ2h0XTtkZWxldGUgdGhpc1tJc107cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhzLG4pfX1jbGFzcyBBc3Npc3QgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImFzc2lzdCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5yb2xlPWUucm9sZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc3BlYWs9bnVsbDt0aGlzLnRvb2xUaXA9bnVsbH1bSW5dKCl7cmV0dXJuIHRoaXMudG9vbFRpcD8uW25zXXx8bnVsbH19Y2xhc3MgQmFyY29kZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiYmFyY29kZSIsITApO3RoaXMuY2hhckVuY29kaW5nPWdldEtleXdvcmQoe2RhdGE6ZS5jaGFyRW5jb2Rpbmc/ZS5jaGFyRW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+WyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX0pO3RoaXMuY2hlY2tzdW09Z2V0U3RyaW5nT3B0aW9uKGUuY2hlY2tzdW0sWyJub25lIiwiMW1vZDEwIiwiMW1vZDEwXzFtb2QxMSIsIjJtb2QxMCIsImF1dG8iXSk7dGhpcy5kYXRhQ29sdW1uQ291bnQ9Z2V0SW50ZWdlcih7ZGF0YTplLmRhdGFDb2x1bW5Db3VudCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuZGF0YUxlbmd0aD1nZXRJbnRlZ2VyKHtkYXRhOmUuZGF0YUxlbmd0aCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuZGF0YVByZXA9Z2V0U3RyaW5nT3B0aW9uKGUuZGF0YVByZXAsWyJub25lIiwiZmxhdGVDb21wcmVzcyJdKTt0aGlzLmRhdGFSb3dDb3VudD1nZXRJbnRlZ2VyKHtkYXRhOmUuZGF0YVJvd0NvdW50LGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5lbmRDaGFyPWUuZW5kQ2hhcnx8IiI7dGhpcy5lcnJvckNvcnJlY3Rpb25MZXZlbD1nZXRJbnRlZ2VyKHtkYXRhOmUuZXJyb3JDb3JyZWN0aW9uTGV2ZWwsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PTAmJmU8PTh9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubW9kdWxlSGVpZ2h0PWdldE1lYXN1cmVtZW50KGUubW9kdWxlSGVpZ2h0LCI1bW0iKTt0aGlzLm1vZHVsZVdpZHRoPWdldE1lYXN1cmVtZW50KGUubW9kdWxlV2lkdGgsIjAuMjVtbSIpO3RoaXMucHJpbnRDaGVja0RpZ2l0PWdldEludGVnZXIoe2RhdGE6ZS5wcmludENoZWNrRGlnaXQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnJvd0NvbHVtblJhdGlvPWdldFJhdGlvKGUucm93Q29sdW1uUmF0aW8pO3RoaXMuc3RhcnRDaGFyPWUuc3RhcnRDaGFyfHwiIjt0aGlzLnRleHRMb2NhdGlvbj1nZXRTdHJpbmdPcHRpb24oZS50ZXh0TG9jYXRpb24sWyJiZWxvdyIsImFib3ZlIiwiYWJvdmVFbWJlZGRlZCIsImJlbG93RW1iZWRkZWQiLCJub25lIl0pO3RoaXMudHJ1bmNhdGU9Z2V0SW50ZWdlcih7ZGF0YTplLnRydW5jYXRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGU/ZS50eXBlLnRvTG93ZXJDYXNlKCk6IiIsWyJhenRlYyIsImNvZGFiYXIiLCJjb2RlMm9mNWluZHVzdHJpYWwiLCJjb2RlMm9mNWludGVybGVhdmVkIiwiY29kZTJvZjVtYXRyaXgiLCJjb2RlMm9mNXN0YW5kYXJkIiwiY29kZTNvZjkiLCJjb2RlM29mOWV4dGVuZGVkIiwiY29kZTExIiwiY29kZTQ5IiwiY29kZTkzIiwiY29kZTEyOCIsImNvZGUxMjhhIiwiY29kZTEyOGIiLCJjb2RlMTI4YyIsImNvZGUxMjhzc2NjIiwiZGF0YW1hdHJpeCIsImVhbjgiLCJlYW44YWRkMiIsImVhbjhhZGQ1IiwiZWFuMTMiLCJlYW4xM2FkZDIiLCJlYW4xM2FkZDUiLCJlYW4xM3B3Y2QiLCJmaW0iLCJsb2dtYXJzIiwibWF4aWNvZGUiLCJtc2kiLCJwZGY0MTciLCJwZGY0MTdtYWNybyIsInBsZXNzZXkiLCJwb3N0YXVzY3VzdDIiLCJwb3N0YXVzY3VzdDMiLCJwb3N0YXVzcmVwbHlwYWlkIiwicG9zdGF1c3N0YW5kYXJkIiwicG9zdHVrcm00c2NjIiwicG9zdHVzZHBiYyIsInBvc3R1c2ltYiIsInBvc3R1c3N0YW5kYXJkIiwicG9zdHVzNXppcCIsInFyY29kZSIsInJmaWQiLCJyc3MxNCIsInJzczE0ZXhwYW5kZWQiLCJyc3MxNGxpbWl0ZWQiLCJyc3MxNHN0YWNrZWQiLCJyc3MxNHN0YWNrZWRvbW5pIiwicnNzMTR0cnVuY2F0ZWQiLCJ0ZWxlcGVuIiwidWNjMTI4IiwidWNjMTI4cmFuZG9tIiwidWNjMTI4c3NjYyIsInVwY2EiLCJ1cGNhYWRkMiIsInVwY2FhZGQ1IiwidXBjYXB3Y2QiLCJ1cGNlIiwidXBjZWFkZDIiLCJ1cGNlYWRkNSIsInVwY2VhbjIiLCJ1cGNlYW41IiwidXBzbWF4aWNvZGUiXSk7dGhpcy51cHNNb2RlPWdldFN0cmluZ09wdGlvbihlLnVwc01vZGUsWyJ1c0NhcnJpZXIiLCJpbnRlcm5hdGlvbmFsQ2FycmllciIsInNlY3VyZVN5bWJvbCIsInN0YW5kYXJkU3ltYm9sIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLndpZGVOYXJyb3dSYXRpbz1nZXRSYXRpbyhlLndpZGVOYXJyb3dSYXRpbyk7dGhpcy5lbmNyeXB0PW51bGw7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgQmluZCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiYmluZCIsITApO3RoaXMubWF0Y2g9Z2V0U3RyaW5nT3B0aW9uKGUubWF0Y2gsWyJvbmNlIiwiZGF0YVJlZiIsImdsb2JhbCIsIm5vbmUiXSk7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMucGljdHVyZT1udWxsfX1jbGFzcyBCaW5kSXRlbXMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImJpbmRJdGVtcyIpO3RoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiO3RoaXMubGFiZWxSZWY9ZS5sYWJlbFJlZnx8IiI7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudmFsdWVSZWY9ZS52YWx1ZVJlZnx8IiJ9fWNsYXNzIEJvb2tlbmQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImJvb2tlbmQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZGVyPWUubGVhZGVyfHwiIjt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEJvb2xlYW5FbGVtZW50IGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImJvb2xlYW4iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bSW5dKGUpe3JldHVybiB2YWx1ZVRvSHRtbCgxPT09dGhpc1tuc10/IjEiOiIwIil9fWNsYXNzIEJvcmRlciBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiYm9yZGVyIiwhMCk7dGhpcy5icmVhaz1nZXRTdHJpbmdPcHRpb24oZS5icmVhayxbImNsb3NlIiwib3BlbiJdKTt0aGlzLmhhbmQ9Z2V0U3RyaW5nT3B0aW9uKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnByZXNlbmNlPWdldFN0cmluZ09wdGlvbihlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29ybmVyPW5ldyBYRkFPYmplY3RBcnJheSg0KTt0aGlzLmVkZ2U9bmV3IFhGQU9iamVjdEFycmF5KDQpO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5maWxsPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bZnNdKCl7aWYoIXRoaXNbSXNdKXtjb25zdCBlPXRoaXMuZWRnZS5jaGlsZHJlbi5zbGljZSgpO2lmKGUubGVuZ3RoPDQpe2NvbnN0IHQ9ZS5hdCgtMSl8fG5ldyBFZGdlKHt9KTtmb3IobGV0IGk9ZS5sZW5ndGg7aTw0O2krKyllLnB1c2godCl9Y29uc3QgdD1lLm1hcCgoZT0+ZS50aGlja25lc3MpKSxpPVswLDAsMCwwXTtpZih0aGlzLm1hcmdpbil7aVswXT10aGlzLm1hcmdpbi50b3BJbnNldDtpWzFdPXRoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7aVsyXT10aGlzLm1hcmdpbi5ib3R0b21JbnNldDtpWzNdPXRoaXMubWFyZ2luLmxlZnRJbnNldH10aGlzW0lzXT17d2lkdGhzOnQsaW5zZXRzOmksZWRnZXM6ZX19cmV0dXJuIHRoaXNbSXNdfVtDbl0oKXtjb25zdHtlZGdlczplfT10aGlzW2ZzXSgpLHQ9ZS5tYXAoKGU9Pntjb25zdCB0PWVbQ25dKCk7dC5jb2xvcnx8PSIjMDAwMDAwIjtyZXR1cm4gdH0pKSxpPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5tYXJnaW4mJk9iamVjdC5hc3NpZ24oaSx0aGlzLm1hcmdpbltDbl0oKSk7InZpc2libGUiPT09dGhpcy5maWxsPy5wcmVzZW5jZSYmT2JqZWN0LmFzc2lnbihpLHRoaXMuZmlsbFtDbl0oKSk7aWYodGhpcy5jb3JuZXIuY2hpbGRyZW4uc29tZSgoZT0+MCE9PWUucmFkaXVzKSkpe2NvbnN0IGU9dGhpcy5jb3JuZXIuY2hpbGRyZW4ubWFwKChlPT5lW0NuXSgpKSk7aWYoMj09PWUubGVuZ3RofHwzPT09ZS5sZW5ndGgpe2NvbnN0IHQ9ZS5hdCgtMSk7Zm9yKGxldCBpPWUubGVuZ3RoO2k8NDtpKyspZS5wdXNoKHQpfWkuYm9yZGVyUmFkaXVzPWUubWFwKChlPT5lLnJhZGl1cykpLmpvaW4oIiAiKX1zd2l0Y2godGhpcy5wcmVzZW5jZSl7Y2FzZSJpbnZpc2libGUiOmNhc2UiaGlkZGVuIjppLmJvcmRlclN0eWxlPSIiO2JyZWFrO2Nhc2UiaW5hY3RpdmUiOmkuYm9yZGVyU3R5bGU9Im5vbmUiO2JyZWFrO2RlZmF1bHQ6aS5ib3JkZXJTdHlsZT10Lm1hcCgoZT0+ZS5zdHlsZSkpLmpvaW4oIiAiKX1pLmJvcmRlcldpZHRoPXQubWFwKChlPT5lLndpZHRoKSkuam9pbigiICIpO2kuYm9yZGVyQ29sb3I9dC5tYXAoKGU9PmUuY29sb3IpKS5qb2luKCIgIik7cmV0dXJuIGl9fWNsYXNzIEJyZWFrIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJicmVhayIsITApO3RoaXMuYWZ0ZXI9Z2V0U3RyaW5nT3B0aW9uKGUuYWZ0ZXIsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKTt0aGlzLmFmdGVyVGFyZ2V0PWUuYWZ0ZXJUYXJnZXR8fCIiO3RoaXMuYmVmb3JlPWdldFN0cmluZ09wdGlvbihlLmJlZm9yZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIiwicGFnZUV2ZW4iLCJwYWdlT2RkIl0pO3RoaXMuYmVmb3JlVGFyZ2V0PWUuYmVmb3JlVGFyZ2V0fHwiIjt0aGlzLmJvb2tlbmRMZWFkZXI9ZS5ib29rZW5kTGVhZGVyfHwiIjt0aGlzLmJvb2tlbmRUcmFpbGVyPWUuYm9va2VuZFRyYWlsZXJ8fCIiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vdmVyZmxvd0xlYWRlcj1lLm92ZXJmbG93TGVhZGVyfHwiIjt0aGlzLm92ZXJmbG93VGFyZ2V0PWUub3ZlcmZsb3dUYXJnZXR8fCIiO3RoaXMub3ZlcmZsb3dUcmFpbGVyPWUub3ZlcmZsb3dUcmFpbGVyfHwiIjt0aGlzLnN0YXJ0TmV3PWdldEludGVnZXIoe2RhdGE6ZS5zdGFydE5ldyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBCcmVha0FmdGVyIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJicmVha0FmdGVyIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlYWRlcj1lLmxlYWRlcnx8IiI7dGhpcy5zdGFydE5ldz1nZXRJbnRlZ2VyKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiI7dGhpcy50YXJnZXRUeXBlPWdldFN0cmluZ09wdGlvbihlLnRhcmdldFR5cGUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdKTt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5zY3JpcHQ9bnVsbH19Y2xhc3MgQnJlYWtCZWZvcmUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImJyZWFrQmVmb3JlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlYWRlcj1lLmxlYWRlcnx8IiI7dGhpcy5zdGFydE5ldz1nZXRJbnRlZ2VyKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiI7dGhpcy50YXJnZXRUeXBlPWdldFN0cmluZ09wdGlvbihlLnRhcmdldFR5cGUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdKTt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5zY3JpcHQ9bnVsbH1bSW5dKGUpe3RoaXNbSXNdPXt9O3JldHVybiBIVE1MUmVzdWx0LkZBSUxVUkV9fWNsYXNzIEJ1dHRvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiYnV0dG9uIiwhMCk7dGhpcy5oaWdobGlnaHQ9Z2V0U3RyaW5nT3B0aW9uKGUuaGlnaGxpZ2h0LFsiaW52ZXJ0ZWQiLCJub25lIiwib3V0bGluZSIsInB1c2giXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bSW5dKGUpe2NvbnN0IHQ9dGhpc1tEc10oKVtEc10oKSxpPXtuYW1lOiJidXR0b24iLGF0dHJpYnV0ZXM6e2lkOnRoaXNbaG5dLGNsYXNzOlsieGZhQnV0dG9uIl0sc3R5bGU6e319LGNoaWxkcmVuOltdfTtmb3IoY29uc3QgZSBvZiB0LmV2ZW50LmNoaWxkcmVuKXtpZigiY2xpY2siIT09ZS5hY3Rpdml0eXx8IWUuc2NyaXB0KWNvbnRpbnVlO2NvbnN0IHQ9cmVjb3ZlckpzVVJMKGUuc2NyaXB0W25zXSk7aWYoIXQpY29udGludWU7Y29uc3QgYT1maXhVUkwodC51cmwpO2EmJmkuY2hpbGRyZW4ucHVzaCh7bmFtZToiYSIsYXR0cmlidXRlczp7aWQ6ImxpbmsiK3RoaXNbaG5dLGhyZWY6YSxuZXdXaW5kb3c6dC5uZXdXaW5kb3csY2xhc3M6WyJ4ZmFMaW5rIl0sc3R5bGU6e319LGNoaWxkcmVuOltdfSl9cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhpKX19Y2xhc3MgQ2FsY3VsYXRlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJjYWxjdWxhdGUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3ZlcnJpZGU9Z2V0U3RyaW5nT3B0aW9uKGUub3ZlcnJpZGUsWyJkaXNhYmxlZCIsImVycm9yIiwiaWdub3JlIiwid2FybmluZyJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1lc3NhZ2U9bnVsbDt0aGlzLnNjcmlwdD1udWxsfX1jbGFzcyBDYXB0aW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJjYXB0aW9uIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnBsYWNlbWVudD1nZXRTdHJpbmdPcHRpb24oZS5wbGFjZW1lbnQsWyJsZWZ0IiwiYm90dG9tIiwiaW5saW5lIiwicmlnaHQiLCJ0b3AiXSk7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlc2VydmU9TWF0aC5jZWlsKGdldE1lYXN1cmVtZW50KGUucmVzZXJ2ZSkpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZm9udD1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy52YWx1ZT1udWxsfVtzbl0oZSl7X3NldFZhbHVlKHRoaXMsZSl9W2ZzXShlKXtpZighdGhpc1tJc10pe2xldHt3aWR0aDp0LGhlaWdodDppfT1lO3N3aXRjaCh0aGlzLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6dD10aGlzLnJlc2VydmU8PTA/dDp0aGlzLnJlc2VydmU7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjppPXRoaXMucmVzZXJ2ZTw9MD9pOnRoaXMucmVzZXJ2ZX10aGlzW0lzXT1sYXlvdXROb2RlKHRoaXMse3dpZHRoOnQsaGVpZ2h0Oml9KX1yZXR1cm4gdGhpc1tJc119W0luXShlKXtpZighdGhpcy52YWx1ZSlyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTt0aGlzW3pzXSgpO2NvbnN0IHQ9dGhpcy52YWx1ZVtJbl0oZSkuaHRtbDtpZighdCl7dGhpc1tfc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWX1jb25zdCBpPXRoaXMucmVzZXJ2ZTtpZih0aGlzLnJlc2VydmU8PTApe2NvbnN0e3c6dCxoOml9PXRoaXNbZnNdKGUpO3N3aXRjaCh0aGlzLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6dGhpcy5yZXNlcnZlPXQ7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjp0aGlzLnJlc2VydmU9aX19Y29uc3QgYT1bXTsic3RyaW5nIj09dHlwZW9mIHQ/YS5wdXNoKHtuYW1lOiIjdGV4dCIsdmFsdWU6dH0pOmEucHVzaCh0KTtjb25zdCByPXRvU3R5bGUodGhpcywiZm9udCIsIm1hcmdpbiIsInZpc2liaWxpdHkiKTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6dGhpcy5yZXNlcnZlPjAmJihyLndpZHRoPW1lYXN1cmVUb1N0cmluZyh0aGlzLnJlc2VydmUpKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnRoaXMucmVzZXJ2ZT4wJiYoci5oZWlnaHQ9bWVhc3VyZVRvU3RyaW5nKHRoaXMucmVzZXJ2ZSkpfXNldFBhcmEodGhpcyxudWxsLHQpO3RoaXNbX3NdKCk7dGhpcy5yZXNlcnZlPWk7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTpyLGNsYXNzOlsieGZhQ2FwdGlvbiJdfSxjaGlsZHJlbjphfSl9fWNsYXNzIENlcnRpZmljYXRlIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJjZXJ0aWZpY2F0ZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBDZXJ0aWZpY2F0ZXMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImNlcnRpZmljYXRlcyIsITApO3RoaXMuY3JlZGVudGlhbFNlcnZlclBvbGljeT1nZXRTdHJpbmdPcHRpb24oZS5jcmVkZW50aWFsU2VydmVyUG9saWN5LFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXJsPWUudXJsfHwiIjt0aGlzLnVybFBvbGljeT1lLnVybFBvbGljeXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZW5jcnlwdGlvbj1udWxsO3RoaXMuaXNzdWVycz1udWxsO3RoaXMua2V5VXNhZ2U9bnVsbDt0aGlzLm9pZHM9bnVsbDt0aGlzLnNpZ25pbmc9bnVsbDt0aGlzLnN1YmplY3RETnM9bnVsbH19Y2xhc3MgQ2hlY2tCdXR0b24gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImNoZWNrQnV0dG9uIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm1hcms9Z2V0U3RyaW5nT3B0aW9uKGUubWFyayxbImRlZmF1bHQiLCJjaGVjayIsImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiXSk7dGhpcy5zaGFwZT1nZXRTdHJpbmdPcHRpb24oZS5zaGFwZSxbInNxdWFyZSIsInJvdW5kIl0pO3RoaXMuc2l6ZT1nZXRNZWFzdXJlbWVudChlLnNpemUsIjEwcHQiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W0luXShlKXtjb25zdCB0PXRvU3R5bGUoIm1hcmdpbiIpLGk9bWVhc3VyZVRvU3RyaW5nKHRoaXMuc2l6ZSk7dC53aWR0aD10LmhlaWdodD1pO2xldCBhLHIscztjb25zdCBuPXRoaXNbRHNdKClbRHNdKCksbz1uLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCYmbi5pdGVtcy5jaGlsZHJlblswXVtJbl0oKS5odG1sfHxbXSxnPXtvbjoodm9pZCAwIT09b1swXT9vWzBdOiJvbiIpLnRvU3RyaW5nKCksb2ZmOih2b2lkIDAhPT1vWzFdP29bMV06Im9mZiIpLnRvU3RyaW5nKCl9LGM9KG4udmFsdWU/Lltvbl0oKXx8Im9mZiIpPT09Zy5vbnx8dm9pZCAwLEM9bltic10oKSxoPW5baG5dO2xldCBsO2lmKEMgaW5zdGFuY2VvZiBFeGNsR3JvdXApe3M9Q1tobl07YT0icmFkaW8iO3I9InhmYVJhZGlvIjtsPUNbb3NdPy5baG5dfHxDW2huXX1lbHNle2E9ImNoZWNrYm94IjtyPSJ4ZmFDaGVja2JveCI7bD1uW29zXT8uW2huXXx8bltobl19Y29uc3QgUT17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e2NsYXNzOltyXSxzdHlsZTp0LGZpZWxkSWQ6aCxkYXRhSWQ6bCx0eXBlOmEsY2hlY2tlZDpjLHhmYU9uOmcub24seGZhT2ZmOmcub2ZmLCJhcmlhLWxhYmVsIjphcmlhTGFiZWwobiksImFyaWEtcmVxdWlyZWQiOiExfX07cyYmKFEuYXR0cmlidXRlcy5uYW1lPXMpO2lmKGlzUmVxdWlyZWQobikpe1EuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO1EuYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbUV19KX19Y2xhc3MgQ2hvaWNlTGlzdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiY2hvaWNlTGlzdCIsITApO3RoaXMuY29tbWl0T249Z2V0U3RyaW5nT3B0aW9uKGUuY29tbWl0T24sWyJzZWxlY3QiLCJleGl0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVuPWdldFN0cmluZ09wdGlvbihlLm9wZW4sWyJ1c2VyQ29udHJvbCIsImFsd2F5cyIsIm11bHRpU2VsZWN0Iiwib25FbnRyeSJdKTt0aGlzLnRleHRFbnRyeT1nZXRJbnRlZ2VyKHtkYXRhOmUudGV4dEVudHJ5LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtJbl0oZSl7Y29uc3QgdD10b1N0eWxlKHRoaXMsImJvcmRlciIsIm1hcmdpbiIpLGk9dGhpc1tEc10oKVtEc10oKSxhPXtmb250U2l6ZTpgY2FsYygke2kuZm9udD8uc2l6ZXx8MTB9cHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKWB9LHI9W107aWYoaS5pdGVtcy5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgZT1pLml0ZW1zO2xldCB0PTAscz0wO2lmKDI9PT1lLmNoaWxkcmVuLmxlbmd0aCl7dD1lLmNoaWxkcmVuWzBdLnNhdmU7cz0xLXR9Y29uc3Qgbj1lLmNoaWxkcmVuW3RdW0luXSgpLmh0bWwsbz1lLmNoaWxkcmVuW3NdW0luXSgpLmh0bWw7bGV0IGc9ITE7Y29uc3QgYz1pLnZhbHVlPy5bb25dKCl8fCIiO2ZvcihsZXQgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD17bmFtZToib3B0aW9uIixhdHRyaWJ1dGVzOnt2YWx1ZTpvW2VdfHxuW2VdLHN0eWxlOmF9LHZhbHVlOm5bZV19O29bZV09PT1jJiYodC5hdHRyaWJ1dGVzLnNlbGVjdGVkPWc9ITApO3IucHVzaCh0KX1nfHxyLnNwbGljZSgwLDAse25hbWU6Im9wdGlvbiIsYXR0cmlidXRlczp7aGlkZGVuOiEwLHNlbGVjdGVkOiEwfSx2YWx1ZToiICJ9KX1jb25zdCBzPXtjbGFzczpbInhmYVNlbGVjdCJdLGZpZWxkSWQ6aVtobl0sZGF0YUlkOmlbb3NdPy5baG5dfHxpW2huXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwoaSksImFyaWEtcmVxdWlyZWQiOiExfTtpZihpc1JlcXVpcmVkKGkpKXtzWyJhcmlhLXJlcXVpcmVkIl09ITA7cy5yZXF1aXJlZD0hMH0ibXVsdGlTZWxlY3QiPT09dGhpcy5vcGVuJiYocy5tdWx0aXBsZT0hMCk7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W3tuYW1lOiJzZWxlY3QiLGNoaWxkcmVuOnIsYXR0cmlidXRlczpzfV19KX19Y2xhc3MgQ29sb3IgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImNvbG9yIiwhMCk7dGhpcy5jU3BhY2U9Z2V0U3RyaW5nT3B0aW9uKGUuY1NwYWNlLFsiU1JHQiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnZhbHVlPWUudmFsdWU/ZnVuY3Rpb24gZ2V0Q29sb3IoZSx0PVswLDAsMF0pe2xldFtpLGEscl09dDtpZighZSlyZXR1cm57cjppLGc6YSxiOnJ9O2NvbnN0IHM9ZS50cmltKCkuc3BsaXQoL1xzKixccyovKS5tYXAoKGU9Pk1hdGgubWluKE1hdGgubWF4KDAscGFyc2VJbnQoZS50cmltKCksMTApKSwyNTUpKSkubWFwKChlPT5pc05hTihlKT8wOmUpKTtpZihzLmxlbmd0aDwzKXJldHVybntyOmksZzphLGI6cn07W2ksYSxyXT1zO3JldHVybntyOmksZzphLGI6cn19KGUudmFsdWUpOiIiO3RoaXMuZXh0cmFzPW51bGx9W2tzXSgpe3JldHVybiExfVtDbl0oKXtyZXR1cm4gdGhpcy52YWx1ZT9VdGlsLm1ha2VIZXhDb2xvcih0aGlzLnZhbHVlLnIsdGhpcy52YWx1ZS5nLHRoaXMudmFsdWUuYik6bnVsbH19Y2xhc3MgQ29tYiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiY29tYiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5udW1iZXJPZkNlbGxzPWdldEludGVnZXIoe2RhdGE6ZS5udW1iZXJPZkNlbGxzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIENvbm5lY3QgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImNvbm5lY3QiLCEwKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzYWdlPWdldFN0cmluZ09wdGlvbihlLnVzYWdlLFsiZXhwb3J0QW5kSW1wb3J0IiwiZXhwb3J0T25seSIsImltcG9ydE9ubHkiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMucGljdHVyZT1udWxsfX1jbGFzcyBDb250ZW50QXJlYSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiY29udGVudEFyZWEiLCEwKTt0aGlzLmg9Z2V0TWVhc3VyZW1lbnQoZS5oKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz1nZXRNZWFzdXJlbWVudChlLncpO3RoaXMueD1nZXRNZWFzdXJlbWVudChlLngsIjBwdCIpO3RoaXMueT1nZXRNZWFzdXJlbWVudChlLnksIjBwdCIpO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGx9W0luXShlKXtjb25zdCB0PXtsZWZ0Om1lYXN1cmVUb1N0cmluZyh0aGlzLngpLHRvcDptZWFzdXJlVG9TdHJpbmcodGhpcy55KSx3aWR0aDptZWFzdXJlVG9TdHJpbmcodGhpcy53KSxoZWlnaHQ6bWVhc3VyZVRvU3RyaW5nKHRoaXMuaCl9LGk9WyJ4ZmFDb250ZW50YXJlYSJdO2lzUHJpbnRPbmx5KHRoaXMpJiZpLnB1c2goInhmYVByaW50T25seSIpO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46W10sYXR0cmlidXRlczp7c3R5bGU6dCxjbGFzczppLGlkOnRoaXNbaG5dfX0pfX1jbGFzcyBDb3JuZXIgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImNvcm5lciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbnZlcnRlZD1nZXRJbnRlZ2VyKHtkYXRhOmUuaW52ZXJ0ZWQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmpvaW49Z2V0U3RyaW5nT3B0aW9uKGUuam9pbixbInNxdWFyZSIsInJvdW5kIl0pO3RoaXMucHJlc2VuY2U9Z2V0U3RyaW5nT3B0aW9uKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yYWRpdXM9Z2V0TWVhc3VyZW1lbnQoZS5yYWRpdXMpO3RoaXMuc3Ryb2tlPWdldFN0cmluZ09wdGlvbihlLnN0cm9rZSxbInNvbGlkIiwiZGFzaERvdCIsImRhc2hEb3REb3QiLCJkYXNoZWQiLCJkb3R0ZWQiLCJlbWJvc3NlZCIsImV0Y2hlZCIsImxvd2VyZWQiLCJyYWlzZWQiXSk7dGhpcy50aGlja25lc3M9Z2V0TWVhc3VyZW1lbnQoZS50aGlja25lc3MsIjAuNXB0Iik7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtDbl0oKXtjb25zdCBlPXRvU3R5bGUodGhpcywidmlzaWJpbGl0eSIpO2UucmFkaXVzPW1lYXN1cmVUb1N0cmluZygic3F1YXJlIj09PXRoaXMuam9pbj8wOnRoaXMucmFkaXVzKTtyZXR1cm4gZX19Y2xhc3MgRGF0ZUVsZW1lbnQgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJkYXRlIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W2NzXSgpe2NvbnN0IGU9dGhpc1tuc10udHJpbSgpO3RoaXNbbnNdPWU/bmV3IERhdGUoZSk6bnVsbH1bSW5dKGUpe3JldHVybiB2YWx1ZVRvSHRtbCh0aGlzW25zXT90aGlzW25zXS50b1N0cmluZygpOiIiKX19Y2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJkYXRlVGltZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtjc10oKXtjb25zdCBlPXRoaXNbbnNdLnRyaW0oKTt0aGlzW25zXT1lP25ldyBEYXRlKGUpOm51bGx9W0luXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tuc10/dGhpc1tuc10udG9TdHJpbmcoKToiIil9fWNsYXNzIERhdGVUaW1lRWRpdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZGF0ZVRpbWVFZGl0IiwhMCk7dGhpcy5oU2Nyb2xsUG9saWN5PWdldFN0cmluZ09wdGlvbihlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnBpY2tlcj1nZXRTdHJpbmdPcHRpb24oZS5waWNrZXIsWyJob3N0Iiwibm9uZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNvbWI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W0luXShlKXtjb25zdCB0PXRvU3R5bGUodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLGk9dGhpc1tEc10oKVtEc10oKSxhPXtuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7dHlwZToidGV4dCIsZmllbGRJZDppW2huXSxkYXRhSWQ6aVtvc10/Lltobl18fGlbaG5dLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKGkpLCJhcmlhLXJlcXVpcmVkIjohMX19O2lmKGlzUmVxdWlyZWQoaSkpe2EuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO2EuYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbYV19KX19Y2xhc3MgRGVjaW1hbCBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImRlY2ltYWwiKTt0aGlzLmZyYWNEaWdpdHM9Z2V0SW50ZWdlcih7ZGF0YTplLmZyYWNEaWdpdHMsZGVmYXVsdFZhbHVlOjIsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZERpZ2l0cz1nZXRJbnRlZ2VyKHtkYXRhOmUubGVhZERpZ2l0cyxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W2NzXSgpe2NvbnN0IGU9cGFyc2VGbG9hdCh0aGlzW25zXS50cmltKCkpO3RoaXNbbnNdPWlzTmFOKGUpP251bGw6ZX1bSW5dKGUpe3JldHVybiB2YWx1ZVRvSHRtbChudWxsIT09dGhpc1tuc10/dGhpc1tuc10udG9TdHJpbmcoKToiIil9fWNsYXNzIERlZmF1bHRVaSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZGVmYXVsdFVpIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgRGVzYyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZGVzYyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9vbGVhbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRGlnZXN0TWV0aG9kIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJkaWdlc3RNZXRob2QiLFsiIiwiU0hBMSIsIlNIQTI1NiIsIlNIQTUxMiIsIlJJUEVNRDE2MCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRGlnZXN0TWV0aG9kcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZGlnZXN0TWV0aG9kcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmRpZ2VzdE1ldGhvZD1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIERyYXcgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImRyYXciLCEwKTt0aGlzLmFuY2hvclR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKTt0aGlzLmNvbFNwYW49Z2V0SW50ZWdlcih7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5oPWUuaD9nZXRNZWFzdXJlbWVudChlLmgpOiIiO3RoaXMuaEFsaWduPWdldFN0cmluZ09wdGlvbihlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxvY2FsZT1lLmxvY2FsZXx8IiI7dGhpcy5tYXhIPWdldE1lYXN1cmVtZW50KGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPWdldE1lYXN1cmVtZW50KGUubWF4VywiMHB0Iik7dGhpcy5taW5IPWdldE1lYXN1cmVtZW50KGUubWluSCwiMHB0Iik7dGhpcy5taW5XPWdldE1lYXN1cmVtZW50KGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMucm90YXRlPWdldEludGVnZXIoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZSU5MD09MH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53P2dldE1lYXN1cmVtZW50KGUudyk6IiI7dGhpcy54PWdldE1lYXN1cmVtZW50KGUueCwiMHB0Iik7dGhpcy55PWdldE1lYXN1cmVtZW50KGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY2FwdGlvbj1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5mb250PW51bGw7dGhpcy5rZWVwPW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLnBhcmE9bnVsbDt0aGlzLnRyYXZlcnNhbD1udWxsO3RoaXMudWk9bnVsbDt0aGlzLnZhbHVlPW51bGw7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgWEZBT2JqZWN0QXJyYXl9W3NuXShlKXtfc2V0VmFsdWUodGhpcyxlKX1bSW5dKGUpe3NldFRhYkluZGV4KHRoaXMpO2lmKCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2UpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7Zml4RGltZW5zaW9ucyh0aGlzKTt0aGlzW3pzXSgpO2NvbnN0IHQ9dGhpcy53LGk9dGhpcy5oLHt3OmEsaDpyLGlzQnJva2VuOnN9PWxheW91dE5vZGUodGhpcyxlKTtpZihhJiYiIj09PXRoaXMudyl7aWYocyYmdGhpc1tic10oKVt2c10oKSl7dGhpc1tfc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFfXRoaXMudz1hfXImJiIiPT09dGhpcy5oJiYodGhpcy5oPXIpO3NldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCFjaGVja0RpbWVuc2lvbnModGhpcyxlKSl7dGhpcy53PXQ7dGhpcy5oPWk7dGhpc1tfc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFfXVuc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7Y29uc3Qgbj10b1N0eWxlKHRoaXMsImZvbnQiLCJoQWxpZ24iLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJwcmVzZW5jZSIsInJvdGF0ZSIsImFuY2hvclR5cGUiLCJib3JkZXIiLCJtYXJnaW4iKTtzZXRNaW5NYXhEaW1lbnNpb25zKHRoaXMsbik7aWYobi5tYXJnaW4pe24ucGFkZGluZz1uLm1hcmdpbjtkZWxldGUgbi5tYXJnaW59Y29uc3Qgbz1bInhmYURyYXciXTt0aGlzLmZvbnQmJm8ucHVzaCgieGZhRm9udCIpO2lzUHJpbnRPbmx5KHRoaXMpJiZvLnB1c2goInhmYVByaW50T25seSIpO2NvbnN0IGc9e3N0eWxlOm4saWQ6dGhpc1tobl0sY2xhc3M6b307dGhpcy5uYW1lJiYoZy54ZmFOYW1lPXRoaXMubmFtZSk7Y29uc3QgYz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmcsY2hpbGRyZW46W119O2FwcGx5QXNzaXN0KHRoaXMsZyk7Y29uc3QgQz1jb21wdXRlQmJveCh0aGlzLGMsZSksaD10aGlzLnZhbHVlP3RoaXMudmFsdWVbSW5dKGUpLmh0bWw6bnVsbDtpZihudWxsPT09aCl7dGhpcy53PXQ7dGhpcy5oPWk7dGhpc1tfc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyxjKSxDKX1jLmNoaWxkcmVuLnB1c2goaCk7c2V0UGFyYSh0aGlzLG4saCk7dGhpcy53PXQ7dGhpcy5oPWk7dGhpc1tfc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyxjKSxDKX19Y2xhc3MgRWRnZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZWRnZSIsITApO3RoaXMuY2FwPWdldFN0cmluZ09wdGlvbihlLmNhcCxbInNxdWFyZSIsImJ1dHQiLCJyb3VuZCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJlc2VuY2U9Z2V0U3RyaW5nT3B0aW9uKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5zdHJva2U9Z2V0U3RyaW5nT3B0aW9uKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKTt0aGlzLnRoaWNrbmVzcz1nZXRNZWFzdXJlbWVudChlLnRoaWNrbmVzcywiMC41cHQiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W0NuXSgpe2NvbnN0IGU9dG9TdHlsZSh0aGlzLCJ2aXNpYmlsaXR5Iik7T2JqZWN0LmFzc2lnbihlLHtsaW5lY2FwOnRoaXMuY2FwLHdpZHRoOm1lYXN1cmVUb1N0cmluZyh0aGlzLnRoaWNrbmVzcyksY29sb3I6dGhpcy5jb2xvcj90aGlzLmNvbG9yW0NuXSgpOiIjMDAwMDAwIixzdHlsZToiIn0pO2lmKCJ2aXNpYmxlIiE9PXRoaXMucHJlc2VuY2UpZS5zdHlsZT0ibm9uZSI7ZWxzZSBzd2l0Y2godGhpcy5zdHJva2Upe2Nhc2Uic29saWQiOmUuc3R5bGU9InNvbGlkIjticmVhaztjYXNlImRhc2hEb3QiOmNhc2UiZGFzaERvdERvdCI6Y2FzZSJkYXNoZWQiOmUuc3R5bGU9ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmUuc3R5bGU9ImRvdHRlZCI7YnJlYWs7Y2FzZSJlbWJvc3NlZCI6ZS5zdHlsZT0icmlkZ2UiO2JyZWFrO2Nhc2UiZXRjaGVkIjplLnN0eWxlPSJncm9vdmUiO2JyZWFrO2Nhc2UibG93ZXJlZCI6ZS5zdHlsZT0iaW5zZXQiO2JyZWFrO2Nhc2UicmFpc2VkIjplLnN0eWxlPSJvdXRzZXQifXJldHVybiBlfX1jbGFzcyBFbmNvZGluZyBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZW5jb2RpbmciLFsiYWRiZS54NTA5LnJzYV9zaGExIiwiYWRiZS5wa2NzNy5kZXRhY2hlZCIsImFkYmUucGtjczcuc2hhMSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRW5jb2RpbmdzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJlbmNvZGluZ3MiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNvZGluZz1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEVuY3J5cHQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImVuY3J5cHQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW51bGx9fWNsYXNzIEVuY3J5cHREYXRhIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJlbmNyeXB0RGF0YSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVyYXRpb249Z2V0U3RyaW5nT3B0aW9uKGUub3BlcmF0aW9uLFsiZW5jcnlwdCIsImRlY3J5cHQiXSk7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmZpbHRlcj1udWxsO3RoaXMubWFuaWZlc3Q9bnVsbH19Y2xhc3MgRW5jcnlwdGlvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZW5jcnlwdGlvbiIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRW5jcnlwdGlvbk1ldGhvZCBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZW5jcnlwdGlvbk1ldGhvZCIsWyIiLCJBRVMyNTYtQ0JDIiwiVFJJUExFREVTLUNCQyIsIkFFUzEyOC1DQkMiLCJBRVMxOTItQ0JDIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBFbmNyeXB0aW9uTWV0aG9kcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZW5jcnlwdGlvbk1ldGhvZHMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNyeXB0aW9uTWV0aG9kPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRXZlbnQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImV2ZW50IiwhMCk7dGhpcy5hY3Rpdml0eT1nZXRTdHJpbmdPcHRpb24oZS5hY3Rpdml0eSxbImNsaWNrIiwiY2hhbmdlIiwiZG9jQ2xvc2UiLCJkb2NSZWFkeSIsImVudGVyIiwiZXhpdCIsImZ1bGwiLCJpbmRleENoYW5nZSIsImluaXRpYWxpemUiLCJtb3VzZURvd24iLCJtb3VzZUVudGVyIiwibW91c2VFeGl0IiwibW91c2VVcCIsInBvc3RFeGVjdXRlIiwicG9zdE9wZW4iLCJwb3N0UHJpbnQiLCJwb3N0U2F2ZSIsInBvc3RTaWduIiwicG9zdFN1Ym1pdCIsInByZUV4ZWN1dGUiLCJwcmVPcGVuIiwicHJlUHJpbnQiLCJwcmVTYXZlIiwicHJlU2lnbiIsInByZVN1Ym1pdCIsInJlYWR5IiwidmFsaWRhdGlvblN0YXRlIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5saXN0ZW49Z2V0U3RyaW5nT3B0aW9uKGUubGlzdGVuLFsicmVmT25seSIsInJlZkFuZERlc2NlbmRlbnRzIl0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmVuY3J5cHREYXRhPW51bGw7dGhpcy5leGVjdXRlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbDt0aGlzLnNpZ25EYXRhPW51bGw7dGhpcy5zdWJtaXQ9bnVsbH19Y2xhc3MgRXhEYXRhIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZXhEYXRhIik7dGhpcy5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIjt0aGlzLmhyZWY9ZS5ocmVmfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubWF4TGVuZ3RoPWdldEludGVnZXIoe2RhdGE6ZS5tYXhMZW5ndGgsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PS0xfSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yaWQ9ZS5yaWR8fCIiO3RoaXMudHJhbnNmZXJFbmNvZGluZz1nZXRTdHJpbmdPcHRpb24oZS50cmFuc2ZlckVuY29kaW5nLFsibm9uZSIsImJhc2U2NCIsInBhY2thZ2UiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVt4c10oKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGV9W2pzXShlKXtpZigidGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJmVbcXNdPT09Qm4ueGh0bWwuaWQpe3RoaXNbbnNdPWU7cmV0dXJuITB9aWYoInRleHQveG1sIj09PXRoaXMuY29udGVudFR5cGUpe3RoaXNbbnNdPWU7cmV0dXJuITB9cmV0dXJuITF9W0luXShlKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJnRoaXNbbnNdP3RoaXNbbnNdW0luXShlKTpIVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBFeE9iamVjdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZXhPYmplY3QiLCEwKTt0aGlzLmFyY2hpdmU9ZS5hcmNoaXZlfHwiIjt0aGlzLmNsYXNzSWQ9ZS5jbGFzc0lkfHwiIjt0aGlzLmNvZGVCYXNlPWUuY29kZUJhc2V8fCIiO3RoaXMuY29kZVR5cGU9ZS5jb2RlVHlwZXx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmJvb2xlYW49bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leE9iamVjdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEV4Y2xHcm91cCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZXhjbEdyb3VwIiwhMCk7dGhpcy5hY2Nlc3M9Z2V0U3RyaW5nT3B0aW9uKGUuYWNjZXNzLFsib3BlbiIsIm5vbkludGVyYWN0aXZlIiwicHJvdGVjdGVkIiwicmVhZE9ubHkiXSk7dGhpcy5hY2Nlc3NLZXk9ZS5hY2Nlc3NLZXl8fCIiO3RoaXMuYW5jaG9yVHlwZT1nZXRTdHJpbmdPcHRpb24oZS5hbmNob3JUeXBlLFsidG9wTGVmdCIsImJvdHRvbUNlbnRlciIsImJvdHRvbUxlZnQiLCJib3R0b21SaWdodCIsIm1pZGRsZUNlbnRlciIsIm1pZGRsZUxlZnQiLCJtaWRkbGVSaWdodCIsInRvcENlbnRlciIsInRvcFJpZ2h0Il0pO3RoaXMuY29sU3Bhbj1nZXRJbnRlZ2VyKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmg9ZS5oP2dldE1lYXN1cmVtZW50KGUuaCk6IiI7dGhpcy5oQWxpZ249Z2V0U3RyaW5nT3B0aW9uKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGF5b3V0PWdldFN0cmluZ09wdGlvbihlLmxheW91dCxbInBvc2l0aW9uIiwibHItdGIiLCJybC1yb3ciLCJybC10YiIsInJvdyIsInRhYmxlIiwidGIiXSk7dGhpcy5tYXhIPWdldE1lYXN1cmVtZW50KGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPWdldE1lYXN1cmVtZW50KGUubWF4VywiMHB0Iik7dGhpcy5taW5IPWdldE1lYXN1cmVtZW50KGUubWluSCwiMHB0Iik7dGhpcy5taW5XPWdldE1lYXN1cmVtZW50KGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53P2dldE1lYXN1cmVtZW50KGUudyk6IiI7dGhpcy54PWdldE1lYXN1cmVtZW50KGUueCwiMHB0Iik7dGhpcy55PWdldE1lYXN1cmVtZW50KGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJpbmQ9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY2FsY3VsYXRlPW51bGw7dGhpcy5jYXB0aW9uPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMuY29ubmVjdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgWEZBT2JqZWN0QXJyYXl9W1VzXSgpe3JldHVybiEwfVtrc10oKXtyZXR1cm4hMH1bc25dKGUpe2Zvcihjb25zdCB0IG9mIHRoaXMuZmllbGQuY2hpbGRyZW4pe2lmKCF0LnZhbHVlKXtjb25zdCBlPW5ldyBWYWx1ZSh7fSk7dFtBc10oZSk7dC52YWx1ZT1lfXQudmFsdWVbc25dKGUpfX1bdnNdKCl7cmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMD09PXRoaXNbSXNdLmF0dGVtcHQmJnRoaXNbSXNdLm51bWJlckluTGluZT4wfHx0aGlzW0RzXSgpW3ZzXSgpfVtKc10oKXtjb25zdCBlPXRoaXNbYnNdKCk7aWYoIWVbSnNdKCkpcmV0dXJuITE7aWYodm9pZCAwIT09dGhpc1tJc10uX2lzU3BsaXR0YWJsZSlyZXR1cm4gdGhpc1tJc10uX2lzU3BsaXR0YWJsZTtpZigicG9zaXRpb24iPT09dGhpcy5sYXlvdXR8fHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7dGhpc1tJc10uX2lzU3BsaXR0YWJsZT0hMTtyZXR1cm4hMX1pZihlLmxheW91dD8uZW5kc1dpdGgoIi10YiIpJiYwIT09ZVtJc10ubnVtYmVySW5MaW5lKXJldHVybiExO3RoaXNbSXNdLl9pc1NwbGl0dGFibGU9ITA7cmV0dXJuITB9W0NzXSgpe3JldHVybiBmbHVzaEhUTUwodGhpcyl9WyRyXShlLHQpe2FkZEhUTUwodGhpcyxlLHQpfVtCc10oKXtyZXR1cm4gZ2V0QXZhaWxhYmxlU3BhY2UodGhpcyl9W0luXShlKXtzZXRUYWJJbmRleCh0aGlzKTtpZigiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlfHwwPT09dGhpcy5ofHwwPT09dGhpcy53KXJldHVybiBIVE1MUmVzdWx0LkVNUFRZO2ZpeERpbWVuc2lvbnModGhpcyk7Y29uc3QgdD1bXSxpPXtpZDp0aGlzW2huXSxjbGFzczpbXX07c2V0QWNjZXNzKHRoaXMsaS5jbGFzcyk7dGhpc1tJc118fCh0aGlzW0lzXT1PYmplY3QuY3JlYXRlKG51bGwpKTtPYmplY3QuYXNzaWduKHRoaXNbSXNdLHtjaGlsZHJlbjp0LGF0dHJpYnV0ZXM6aSxhdHRlbXB0OjAsbGluZTpudWxsLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO2NvbnN0IGE9dGhpc1tKc10oKTthfHxzZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtpZighY2hlY2tEaW1lbnNpb25zKHRoaXMsZSkpcmV0dXJuIEhUTUxSZXN1bHQuRkFJTFVSRTtjb25zdCByPW5ldyBTZXQoWyJmaWVsZCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe2NvbnN0IGU9dGhpc1tic10oKS5jb2x1bW5XaWR0aHM7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7dGhpc1tJc10uY29sdW1uV2lkdGhzPWU7dGhpc1tJc10uY3VycmVudENvbHVtbj0wfX1jb25zdCBzPXRvU3R5bGUodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksbj1bInhmYUV4Y2xncm91cCJdLG89bGF5b3V0Q2xhc3ModGhpcyk7byYmbi5wdXNoKG8pO2lzUHJpbnRPbmx5KHRoaXMpJiZuLnB1c2goInhmYVByaW50T25seSIpO2kuc3R5bGU9cztpLmNsYXNzPW47dGhpcy5uYW1lJiYoaS54ZmFOYW1lPXRoaXMubmFtZSk7dGhpc1t6c10oKTtjb25zdCBnPSJsci10YiI9PT10aGlzLmxheW91dHx8InJsLXRiIj09PXRoaXMubGF5b3V0LGM9Zz8yOjE7Zm9yKDt0aGlzW0lzXS5hdHRlbXB0PGM7dGhpc1tJc10uYXR0ZW1wdCsrKXtnJiYxPT09dGhpc1tJc10uYXR0ZW1wdCYmKHRoaXNbSXNdLm51bWJlckluTGluZT0wKTtjb25zdCBlPXRoaXNbZXNdKHtmaWx0ZXI6cixpbmNsdWRlOiEwfSk7aWYoZS5zdWNjZXNzKWJyZWFrO2lmKGUuaXNCcmVhaygpKXt0aGlzW19zXSgpO3JldHVybiBlfWlmKGcmJjA9PT10aGlzW0lzXS5hdHRlbXB0JiYwPT09dGhpc1tJc10ubnVtYmVySW5MaW5lJiYhdGhpc1tGc10oKVtJc10ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW0lzXS5hdHRlbXB0PWM7YnJlYWt9fXRoaXNbX3NdKCk7YXx8dW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtpZih0aGlzW0lzXS5hdHRlbXB0PT09Yyl7YXx8ZGVsZXRlIHRoaXNbSXNdO3JldHVybiBIVE1MUmVzdWx0LkZBSUxVUkV9bGV0IEM9MCxoPTA7aWYodGhpcy5tYXJnaW4pe0M9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7aD10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldH1jb25zdCBsPU1hdGgubWF4KHRoaXNbSXNdLndpZHRoK0MsdGhpcy53fHwwKSxRPU1hdGgubWF4KHRoaXNbSXNdLmhlaWdodCtoLHRoaXMuaHx8MCksRT1bdGhpcy54LHRoaXMueSxsLFFdOyIiPT09dGhpcy53JiYocy53aWR0aD1tZWFzdXJlVG9TdHJpbmcobCkpOyIiPT09dGhpcy5oJiYocy5oZWlnaHQ9bWVhc3VyZVRvU3RyaW5nKFEpKTtjb25zdCB1PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6aSxjaGlsZHJlbjp0fTthcHBseUFzc2lzdCh0aGlzLGkpO2RlbGV0ZSB0aGlzW0lzXTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyx1KSxFKX19Y2xhc3MgRXhlY3V0ZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZXhlY3V0ZSIpO3RoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiO3RoaXMuZXhlY3V0ZVR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUuZXhlY3V0ZVR5cGUsWyJpbXBvcnQiLCJyZW1lcmdlIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5ydW5BdD1nZXRTdHJpbmdPcHRpb24oZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBFeHRyYXMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImV4dHJhcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9vbGVhbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4dHJhcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEZpZWxkIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJmaWVsZCIsITApO3RoaXMuYWNjZXNzPWdldFN0cmluZ09wdGlvbihlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pO3RoaXMuYWNjZXNzS2V5PWUuYWNjZXNzS2V5fHwiIjt0aGlzLmFuY2hvclR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKTt0aGlzLmNvbFNwYW49Z2V0SW50ZWdlcih7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5oPWUuaD9nZXRNZWFzdXJlbWVudChlLmgpOiIiO3RoaXMuaEFsaWduPWdldFN0cmluZ09wdGlvbihlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxvY2FsZT1lLmxvY2FsZXx8IiI7dGhpcy5tYXhIPWdldE1lYXN1cmVtZW50KGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPWdldE1lYXN1cmVtZW50KGUubWF4VywiMHB0Iik7dGhpcy5taW5IPWdldE1lYXN1cmVtZW50KGUubWluSCwiMHB0Iik7dGhpcy5taW5XPWdldE1lYXN1cmVtZW50KGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMucm90YXRlPWdldEludGVnZXIoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZSU5MD09MH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53P2dldE1lYXN1cmVtZW50KGUudyk6IiI7dGhpcy54PWdldE1lYXN1cmVtZW50KGUueCwiMHB0Iik7dGhpcy55PWdldE1lYXN1cmVtZW50KGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJpbmQ9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY2FsY3VsYXRlPW51bGw7dGhpcy5jYXB0aW9uPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZvbnQ9bnVsbDt0aGlzLmZvcm1hdD1udWxsO3RoaXMuaXRlbXM9bmV3IFhGQU9iamVjdEFycmF5KDIpO3RoaXMua2VlcD1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy50cmF2ZXJzYWw9bnVsbDt0aGlzLnVpPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMudmFsdWU9bnVsbDt0aGlzLmJpbmRJdGVtcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jb25uZWN0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV2ZW50PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyBYRkFPYmplY3RBcnJheX1bVXNdKCl7cmV0dXJuITB9W3NuXShlKXtfc2V0VmFsdWUodGhpcyxlKX1bSW5dKGUpe3NldFRhYkluZGV4KHRoaXMpO2lmKCF0aGlzLnVpKXt0aGlzLnVpPW5ldyBVaSh7fSk7dGhpcy51aVtTc109dGhpc1tTc107dGhpc1tBc10odGhpcy51aSk7bGV0IGU7c3dpdGNoKHRoaXMuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtjYXNlIDA6ZT1uZXcgVGV4dEVkaXQoe30pO3RoaXMudWkudGV4dEVkaXQ9ZTticmVhaztjYXNlIDE6ZT1uZXcgQ2hlY2tCdXR0b24oe30pO3RoaXMudWkuY2hlY2tCdXR0b249ZTticmVhaztjYXNlIDI6ZT1uZXcgQ2hvaWNlTGlzdCh7fSk7dGhpcy51aS5jaG9pY2VMaXN0PWV9dGhpcy51aVtBc10oZSl9aWYoIXRoaXMudWl8fCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2V8fDA9PT10aGlzLmh8fDA9PT10aGlzLncpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7dGhpcy5jYXB0aW9uJiZkZWxldGUgdGhpcy5jYXB0aW9uW0lzXTt0aGlzW3pzXSgpO2NvbnN0IHQ9dGhpcy5jYXB0aW9uP3RoaXMuY2FwdGlvbltJbl0oZSkuaHRtbDpudWxsLGk9dGhpcy53LGE9dGhpcy5oO2xldCByPTAscz0wO2lmKHRoaXMubWFyZ2luKXtyPXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0O3M9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXR9bGV0IG49bnVsbDtpZigiIj09PXRoaXMud3x8IiI9PT10aGlzLmgpe2xldCB0PW51bGwsaT1udWxsLGE9MCxvPTA7aWYodGhpcy51aS5jaGVja0J1dHRvbilhPW89dGhpcy51aS5jaGVja0J1dHRvbi5zaXplO2Vsc2V7Y29uc3R7dzp0LGg6aX09bGF5b3V0Tm9kZSh0aGlzLGUpO2lmKG51bGwhPT10KXthPXQ7bz1pfWVsc2Ugbz1mdW5jdGlvbiBmb250c19nZXRNZXRyaWNzKGUsdD0hMSl7bGV0IGk9bnVsbDtpZihlKXtjb25zdCB0PXN0cmlwUXVvdGVzKGUudHlwZWZhY2UpLGE9ZVtTc10uZm9udEZpbmRlci5maW5kKHQpO2k9c2VsZWN0Rm9udChlLGEpfWlmKCFpKXJldHVybntsaW5lSGVpZ2h0OjEyLGxpbmVHYXA6MixsaW5lTm9HYXA6MTB9O2NvbnN0IGE9ZS5zaXplfHwxMCxyPWkubGluZUhlaWdodD9NYXRoLm1heCh0PzA6MS4yLGkubGluZUhlaWdodCk6MS4yLHM9dm9pZCAwPT09aS5saW5lR2FwPy4yOmkubGluZUdhcDtyZXR1cm57bGluZUhlaWdodDpyKmEsbGluZUdhcDpzKmEsbGluZU5vR2FwOk1hdGgubWF4KDEsci1zKSphfX0odGhpcy5mb250LCEwKS5saW5lTm9HYXB9bj1nZXRCb3JkZXJEaW1zKHRoaXMudWlbZnNdKCkpO2ErPW4udztvKz1uLmg7aWYodGhpcy5jYXB0aW9uKXtjb25zdHt3OnIsaDpzLGlzQnJva2VuOm59PXRoaXMuY2FwdGlvbltmc10oZSk7aWYobiYmdGhpc1tic10oKVt2c10oKSl7dGhpc1tfc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFfXQ9cjtpPXM7c3dpdGNoKHRoaXMuY2FwdGlvbi5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnQrPWE7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjppKz1vfX1lbHNle3Q9YTtpPW99aWYodCYmIiI9PT10aGlzLncpe3QrPXI7dGhpcy53PU1hdGgubWluKHRoaXMubWF4Vzw9MD8xLzA6dGhpcy5tYXhXLHRoaXMubWluVysxPHQ/dDp0aGlzLm1pblcpfWlmKGkmJiIiPT09dGhpcy5oKXtpKz1zO3RoaXMuaD1NYXRoLm1pbih0aGlzLm1heEg8PTA/MS8wOnRoaXMubWF4SCx0aGlzLm1pbkgrMTxpP2k6dGhpcy5taW5IKX19dGhpc1tfc10oKTtmaXhEaW1lbnNpb25zKHRoaXMpO3NldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCFjaGVja0RpbWVuc2lvbnModGhpcyxlKSl7dGhpcy53PWk7dGhpcy5oPWE7dGhpc1tfc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFfXVuc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7Y29uc3Qgbz10b1N0eWxlKHRoaXMsImZvbnQiLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJyb3RhdGUiLCJhbmNob3JUeXBlIiwicHJlc2VuY2UiLCJtYXJnaW4iLCJoQWxpZ24iKTtzZXRNaW5NYXhEaW1lbnNpb25zKHRoaXMsbyk7Y29uc3QgZz1bInhmYUZpZWxkIl07dGhpcy5mb250JiZnLnB1c2goInhmYUZvbnQiKTtpc1ByaW50T25seSh0aGlzKSYmZy5wdXNoKCJ4ZmFQcmludE9ubHkiKTtjb25zdCBjPXtzdHlsZTpvLGlkOnRoaXNbaG5dLGNsYXNzOmd9O2lmKG8ubWFyZ2luKXtvLnBhZGRpbmc9by5tYXJnaW47ZGVsZXRlIG8ubWFyZ2lufXNldEFjY2Vzcyh0aGlzLGcpO3RoaXMubmFtZSYmKGMueGZhTmFtZT10aGlzLm5hbWUpO2NvbnN0IEM9W10saD17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmMsY2hpbGRyZW46Q307YXBwbHlBc3Npc3QodGhpcyxjKTtjb25zdCBsPXRoaXMuYm9yZGVyP3RoaXMuYm9yZGVyW0NuXSgpOm51bGwsUT1jb21wdXRlQmJveCh0aGlzLGgsZSksRT10aGlzLnVpW0luXSgpLmh0bWw7aWYoIUUpe09iamVjdC5hc3NpZ24obyxsKTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyxoKSxRKX10aGlzW25uXSYmKEUuY2hpbGRyZW4/LlswXT9FLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGFiaW5kZXg9dGhpc1tubl06RS5hdHRyaWJ1dGVzLnRhYmluZGV4PXRoaXNbbm5dKTtFLmF0dHJpYnV0ZXMuc3R5bGV8fChFLmF0dHJpYnV0ZXMuc3R5bGU9T2JqZWN0LmNyZWF0ZShudWxsKSk7bGV0IHU9bnVsbDtpZih0aGlzLnVpLmJ1dHRvbil7MT09PUUuY2hpbGRyZW4ubGVuZ3RoJiYoW3VdPUUuY2hpbGRyZW4uc3BsaWNlKDAsMSkpO09iamVjdC5hc3NpZ24oRS5hdHRyaWJ1dGVzLnN0eWxlLGwpfWVsc2UgT2JqZWN0LmFzc2lnbihvLGwpO0MucHVzaChFKTtpZih0aGlzLnZhbHVlKWlmKHRoaXMudWkuaW1hZ2VFZGl0KUUuY2hpbGRyZW4ucHVzaCh0aGlzLnZhbHVlW0luXSgpLmh0bWwpO2Vsc2UgaWYoIXRoaXMudWkuYnV0dG9uKXtsZXQgZT0iIjtpZih0aGlzLnZhbHVlLmV4RGF0YSllPXRoaXMudmFsdWUuZXhEYXRhW29uXSgpO2Vsc2UgaWYodGhpcy52YWx1ZS50ZXh0KWU9dGhpcy52YWx1ZS50ZXh0W2ZzXSgpO2Vsc2V7Y29uc3QgdD10aGlzLnZhbHVlW0luXSgpLmh0bWw7bnVsbCE9PXQmJihlPXQuY2hpbGRyZW5bMF0udmFsdWUpfXRoaXMudWkudGV4dEVkaXQmJnRoaXMudmFsdWUudGV4dD8ubWF4Q2hhcnMmJihFLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMubWF4TGVuZ3RoPXRoaXMudmFsdWUudGV4dC5tYXhDaGFycyk7aWYoZSl7aWYodGhpcy51aS5udW1lcmljRWRpdCl7ZT1wYXJzZUZsb2F0KGUpO2U9aXNOYU4oZSk/IiI6ZS50b1N0cmluZygpfSJ0ZXh0YXJlYSI9PT1FLmNoaWxkcmVuWzBdLm5hbWU/RS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnRleHRDb250ZW50PWU6RS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnZhbHVlPWV9fWlmKCF0aGlzLnVpLmltYWdlRWRpdCYmRS5jaGlsZHJlbj8uWzBdJiZ0aGlzLmgpe249bnx8Z2V0Qm9yZGVyRGltcyh0aGlzLnVpW2ZzXSgpKTtsZXQgdD0wO2lmKHRoaXMuY2FwdGlvbiYmWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSl7dD10aGlzLmNhcHRpb24ucmVzZXJ2ZTt0PD0wJiYodD10aGlzLmNhcHRpb25bZnNdKGUpLmgpO2NvbnN0IGk9dGhpcy5oLXQtcy1uLmg7RS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD1tZWFzdXJlVG9TdHJpbmcoaSl9ZWxzZSBFLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PSIxMDAlIn11JiZFLmNoaWxkcmVuLnB1c2godSk7aWYoIXQpe0UuYXR0cmlidXRlcy5jbGFzcyYmRS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTt0aGlzLnc9aTt0aGlzLmg9YTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyxoKSxRKX1pZih0aGlzLnVpLmJ1dHRvbil7by5wYWRkaW5nJiZkZWxldGUgby5wYWRkaW5nOyJkaXYiPT09dC5uYW1lJiYodC5uYW1lPSJzcGFuIik7RS5jaGlsZHJlbi5wdXNoKHQpO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoaCxRKX10aGlzLnVpLmNoZWNrQnV0dG9uJiYodC5hdHRyaWJ1dGVzLmNsYXNzWzBdPSJ4ZmFDYXB0aW9uRm9yQ2hlY2tCdXR0b24iKTtFLmF0dHJpYnV0ZXMuY2xhc3N8fChFLmF0dHJpYnV0ZXMuY2xhc3M9W10pO0UuY2hpbGRyZW4uc3BsaWNlKDAsMCx0KTtzd2l0Y2godGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlImlubGluZSI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTticmVhaztjYXNlInJpZ2h0IjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhUmlnaHQiKTticmVhaztjYXNlInRvcCI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYVRvcCIpO2JyZWFrO2Nhc2UiYm90dG9tIjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhQm90dG9tIil9dGhpcy53PWk7dGhpcy5oPWE7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhjcmVhdGVXcmFwcGVyKHRoaXMsaCksUSl9fWNsYXNzIEZpbGwgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImZpbGwiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJlc2VuY2U9Z2V0U3RyaW5nT3B0aW9uKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubGluZWFyPW51bGw7dGhpcy5wYXR0ZXJuPW51bGw7dGhpcy5yYWRpYWw9bnVsbDt0aGlzLnNvbGlkPW51bGw7dGhpcy5zdGlwcGxlPW51bGx9W0NuXSgpe2NvbnN0IGU9dGhpc1tEc10oKSx0PWVbRHNdKClbRHNdKCksaT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBhPSJjb2xvciIscj1hO2lmKGUgaW5zdGFuY2VvZiBCb3JkZXIpe2E9ImJhY2tncm91bmQtY29sb3IiO3I9ImJhY2tncm91bmQiO3QgaW5zdGFuY2VvZiBVaSYmKGkuYmFja2dyb3VuZENvbG9yPSJ3aGl0ZSIpfWlmKGUgaW5zdGFuY2VvZiBSZWN0YW5nbGV8fGUgaW5zdGFuY2VvZiBBcmMpe2E9cj0iZmlsbCI7aS5maWxsPSJ3aGl0ZSJ9Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKCJleHRyYXMiPT09ZXx8ImNvbG9yIj09PWUpY29udGludWU7Y29uc3QgdD10aGlzW2VdO2lmKCEodCBpbnN0YW5jZW9mIFhGQU9iamVjdCkpY29udGludWU7Y29uc3Qgcz10W0NuXSh0aGlzLmNvbG9yKTtzJiYoaVtzLnN0YXJ0c1dpdGgoIiMiKT9hOnJdPXMpO3JldHVybiBpfWlmKHRoaXMuY29sb3I/LnZhbHVlKXtjb25zdCBlPXRoaXMuY29sb3JbQ25dKCk7aVtlLnN0YXJ0c1dpdGgoIiMiKT9hOnJdPWV9cmV0dXJuIGl9fWNsYXNzIEZpbHRlciBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiZmlsdGVyIiwhMCk7dGhpcy5hZGRSZXZvY2F0aW9uSW5mbz1nZXRTdHJpbmdPcHRpb24oZS5hZGRSZXZvY2F0aW9uSW5mbyxbIiIsInJlcXVpcmVkIiwib3B0aW9uYWwiLCJub25lIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudmVyc2lvbj1nZXRJbnRlZ2VyKHtkYXRhOnRoaXMudmVyc2lvbixkZWZhdWx0VmFsdWU6NSx2YWxpZGF0ZTplPT5lPj0xJiZlPD01fSk7dGhpcy5hcHBlYXJhbmNlRmlsdGVyPW51bGw7dGhpcy5jZXJ0aWZpY2F0ZXM9bnVsbDt0aGlzLmRpZ2VzdE1ldGhvZHM9bnVsbDt0aGlzLmVuY29kaW5ncz1udWxsO3RoaXMuZW5jcnlwdGlvbk1ldGhvZHM9bnVsbDt0aGlzLmhhbmRsZXI9bnVsbDt0aGlzLmxvY2tEb2N1bWVudD1udWxsO3RoaXMubWRwPW51bGw7dGhpcy5yZWFzb25zPW51bGw7dGhpcy50aW1lU3RhbXA9bnVsbH19Y2xhc3MgRmxvYXQgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJmbG9hdCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtjc10oKXtjb25zdCBlPXBhcnNlRmxvYXQodGhpc1tuc10udHJpbSgpKTt0aGlzW25zXT1pc05hTihlKT9udWxsOmV9W0luXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwobnVsbCE9PXRoaXNbbnNdP3RoaXNbbnNdLnRvU3RyaW5nKCk6IiIpfX1jbGFzcyB0ZW1wbGF0ZV9Gb250IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJmb250IiwhMCk7dGhpcy5iYXNlbGluZVNoaWZ0PWdldE1lYXN1cmVtZW50KGUuYmFzZWxpbmVTaGlmdCk7dGhpcy5mb250SG9yaXpvbnRhbFNjYWxlPWdldEZsb2F0KHtkYXRhOmUuZm9udEhvcml6b250YWxTY2FsZSxkZWZhdWx0VmFsdWU6MTAwLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmZvbnRWZXJ0aWNhbFNjYWxlPWdldEZsb2F0KHtkYXRhOmUuZm9udFZlcnRpY2FsU2NhbGUsZGVmYXVsdFZhbHVlOjEwMCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmtlcm5pbmdNb2RlPWdldFN0cmluZ09wdGlvbihlLmtlcm5pbmdNb2RlLFsibm9uZSIsInBhaXIiXSk7dGhpcy5sZXR0ZXJTcGFjaW5nPWdldE1lYXN1cmVtZW50KGUubGV0dGVyU3BhY2luZywiMCIpO3RoaXMubGluZVRocm91Z2g9Z2V0SW50ZWdlcih7ZGF0YTplLmxpbmVUaHJvdWdoLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfHwyPT09ZX0pO3RoaXMubGluZVRocm91Z2hQZXJpb2Q9Z2V0U3RyaW5nT3B0aW9uKGUubGluZVRocm91Z2hQZXJpb2QsWyJhbGwiLCJ3b3JkIl0pO3RoaXMub3ZlcmxpbmU9Z2V0SW50ZWdlcih7ZGF0YTplLm92ZXJsaW5lLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfHwyPT09ZX0pO3RoaXMub3ZlcmxpbmVQZXJpb2Q9Z2V0U3RyaW5nT3B0aW9uKGUub3ZlcmxpbmVQZXJpb2QsWyJhbGwiLCJ3b3JkIl0pO3RoaXMucG9zdHVyZT1nZXRTdHJpbmdPcHRpb24oZS5wb3N0dXJlLFsibm9ybWFsIiwiaXRhbGljIl0pO3RoaXMuc2l6ZT1nZXRNZWFzdXJlbWVudChlLnNpemUsIjEwcHQiKTt0aGlzLnR5cGVmYWNlPWUudHlwZWZhY2V8fCJDb3VyaWVyIjt0aGlzLnVuZGVybGluZT1nZXRJbnRlZ2VyKHtkYXRhOmUudW5kZXJsaW5lLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfHwyPT09ZX0pO3RoaXMudW5kZXJsaW5lUGVyaW9kPWdldFN0cmluZ09wdGlvbihlLnVuZGVybGluZVBlcmlvZCxbImFsbCIsIndvcmQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMud2VpZ2h0PWdldFN0cmluZ09wdGlvbihlLndlaWdodCxbIm5vcm1hbCIsImJvbGQiXSk7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZpbGw9bnVsbH1bdHNdKGUpe3N1cGVyW3RzXShlKTt0aGlzW1NzXS51c2VkVHlwZWZhY2VzLmFkZCh0aGlzLnR5cGVmYWNlKX1bQ25dKCl7Y29uc3QgZT10b1N0eWxlKHRoaXMsImZpbGwiKSx0PWUuY29sb3I7aWYodClpZigiIzAwMDAwMCI9PT10KWRlbGV0ZSBlLmNvbG9yO2Vsc2UgaWYoIXQuc3RhcnRzV2l0aCgiIyIpKXtlLmJhY2tncm91bmQ9dDtlLmJhY2tncm91bmRDbGlwPSJ0ZXh0IjtlLmNvbG9yPSJ0cmFuc3BhcmVudCJ9dGhpcy5iYXNlbGluZVNoaWZ0JiYoZS52ZXJ0aWNhbEFsaWduPW1lYXN1cmVUb1N0cmluZyh0aGlzLmJhc2VsaW5lU2hpZnQpKTtlLmZvbnRLZXJuaW5nPSJub25lIj09PXRoaXMua2VybmluZ01vZGU/Im5vbmUiOiJub3JtYWwiO2UubGV0dGVyU3BhY2luZz1tZWFzdXJlVG9TdHJpbmcodGhpcy5sZXR0ZXJTcGFjaW5nKTtpZigwIT09dGhpcy5saW5lVGhyb3VnaCl7ZS50ZXh0RGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIjsyPT09dGhpcy5saW5lVGhyb3VnaCYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9aWYoMCE9PXRoaXMub3ZlcmxpbmUpe2UudGV4dERlY29yYXRpb249Im92ZXJsaW5lIjsyPT09dGhpcy5vdmVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9ZS5mb250U3R5bGU9dGhpcy5wb3N0dXJlO2UuZm9udFNpemU9bWVhc3VyZVRvU3RyaW5nKC45OSp0aGlzLnNpemUpO3NldEZvbnRGYW1pbHkodGhpcyx0aGlzLHRoaXNbU3NdLmZvbnRGaW5kZXIsZSk7aWYoMCE9PXRoaXMudW5kZXJsaW5lKXtlLnRleHREZWNvcmF0aW9uPSJ1bmRlcmxpbmUiOzI9PT10aGlzLnVuZGVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9ZS5mb250V2VpZ2h0PXRoaXMud2VpZ2h0O3JldHVybiBlfX1jbGFzcyBGb3JtYXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImZvcm1hdCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5waWN0dXJlPW51bGx9fWNsYXNzIEhhbmRsZXIgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImhhbmRsZXIiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEh5cGhlbmF0aW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJoeXBoZW5hdGlvbiIpO3RoaXMuZXhjbHVkZUFsbENhcHM9Z2V0SW50ZWdlcih7ZGF0YTplLmV4Y2x1ZGVBbGxDYXBzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5leGNsdWRlSW5pdGlhbENhcD1nZXRJbnRlZ2VyKHtkYXRhOmUuZXhjbHVkZUluaXRpYWxDYXAsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmh5cGhlbmF0ZT1nZXRJbnRlZ2VyKHtkYXRhOmUuaHlwaGVuYXRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnB1c2hDaGFyYWN0ZXJDb3VudD1nZXRJbnRlZ2VyKHtkYXRhOmUucHVzaENoYXJhY3RlckNvdW50LGRlZmF1bHRWYWx1ZTozLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLnJlbWFpbkNoYXJhY3RlckNvdW50PWdldEludGVnZXIoe2RhdGE6ZS5yZW1haW5DaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMud29yZENoYXJhY3RlckNvdW50PWdldEludGVnZXIoe2RhdGE6ZS53b3JkQ2hhcmFjdGVyQ291bnQsZGVmYXVsdFZhbHVlOjcsdmFsaWRhdGU6ZT0+ZT49MH0pfX1jbGFzcyBJbWFnZSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiaW1hZ2UiKTt0aGlzLmFzcGVjdD1nZXRTdHJpbmdPcHRpb24oZS5hc3BlY3QsWyJmaXQiLCJhY3R1YWwiLCJoZWlnaHQiLCJub25lIiwid2lkdGgiXSk7dGhpcy5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIjt0aGlzLmhyZWY9ZS5ocmVmfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudHJhbnNmZXJFbmNvZGluZz1nZXRTdHJpbmdPcHRpb24oZS50cmFuc2ZlckVuY29kaW5nLFsiYmFzZTY0Iiwibm9uZSIsInBhY2thZ2UiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtJbl0oKXtpZih0aGlzLmNvbnRlbnRUeXBlJiYhV24uaGFzKHRoaXMuY29udGVudFR5cGUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7bGV0IGU9dGhpc1tTc10uaW1hZ2VzJiZ0aGlzW1NzXS5pbWFnZXMuZ2V0KHRoaXMuaHJlZik7aWYoIWUmJih0aGlzLmhyZWZ8fCF0aGlzW25zXSkpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7ZXx8ImJhc2U2NCIhPT10aGlzLnRyYW5zZmVyRW5jb2Rpbmd8fChlPXN0cmluZ1RvQnl0ZXMoYXRvYih0aGlzW25zXSkpKTtpZighZSlyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTtpZighdGhpcy5jb250ZW50VHlwZSl7Zm9yKGNvbnN0W3QsaV1vZiBqbilpZihlLmxlbmd0aD50Lmxlbmd0aCYmdC5ldmVyeSgoKHQsaSk9PnQ9PT1lW2ldKSkpe3RoaXMuY29udGVudFR5cGU9aTticmVha31pZighdGhpcy5jb250ZW50VHlwZSlyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWX1jb25zdCB0PW5ldyBCbG9iKFtlXSx7dHlwZTp0aGlzLmNvbnRlbnRUeXBlfSk7bGV0IGk7c3dpdGNoKHRoaXMuYXNwZWN0KXtjYXNlImZpdCI6Y2FzZSJhY3R1YWwiOmJyZWFrO2Nhc2UiaGVpZ2h0IjppPXtoZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9O2JyZWFrO2Nhc2Uibm9uZSI6aT17d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb2JqZWN0Rml0OiJmaWxsIn07YnJlYWs7Y2FzZSJ3aWR0aCI6aT17d2lkdGg6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9fWNvbnN0IGE9dGhpc1tEc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJpbWciLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhSW1hZ2UiXSxzdHlsZTppLHNyYzpVUkwuY3JlYXRlT2JqZWN0VVJMKHQpLGFsdDphP2FyaWFMYWJlbChhW0RzXSgpKTpudWxsfX0pfX1jbGFzcyBJbWFnZUVkaXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sImltYWdlRWRpdCIsITApO3RoaXMuZGF0YT1nZXRTdHJpbmdPcHRpb24oZS5kYXRhLFsibGluayIsImVtYmVkIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtJbl0oZSl7cmV0dXJuImVtYmVkIj09PXRoaXMuZGF0YT9IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46W10sYXR0cmlidXRlczp7fX0pOkhUTUxSZXN1bHQuRU1QVFl9fWNsYXNzIEludGVnZXIgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJpbnRlZ2VyIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W2NzXSgpe2NvbnN0IGU9cGFyc2VJbnQodGhpc1tuc10udHJpbSgpLDEwKTt0aGlzW25zXT1pc05hTihlKT9udWxsOmV9W0luXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwobnVsbCE9PXRoaXNbbnNdP3RoaXNbbnNdLnRvU3RyaW5nKCk6IiIpfX1jbGFzcyBJc3N1ZXJzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJpc3N1ZXJzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY2VydGlmaWNhdGU9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBJdGVtcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwiaXRlbXMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucHJlc2VuY2U9Z2V0U3RyaW5nT3B0aW9uKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMuc2F2ZT1nZXRJbnRlZ2VyKHtkYXRhOmUuc2F2ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2xlYW49bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgWEZBT2JqZWN0QXJyYXl9W0luXSgpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgdGhpc1ttc10oKSllLnB1c2godFtvbl0oKSk7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhlKX19Y2xhc3MgS2VlcCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwia2VlcCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7Y29uc3QgdD1bIm5vbmUiLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl07dGhpcy5pbnRhY3Q9Z2V0U3RyaW5nT3B0aW9uKGUuaW50YWN0LHQpO3RoaXMubmV4dD1nZXRTdHJpbmdPcHRpb24oZS5uZXh0LHQpO3RoaXMucHJldmlvdXM9Z2V0U3RyaW5nT3B0aW9uKGUucHJldmlvdXMsdCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9fWNsYXNzIEtleVVzYWdlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJrZXlVc2FnZSIpO2NvbnN0IHQ9WyIiLCJ5ZXMiLCJubyJdO3RoaXMuY3JsU2lnbj1nZXRTdHJpbmdPcHRpb24oZS5jcmxTaWduLHQpO3RoaXMuZGF0YUVuY2lwaGVybWVudD1nZXRTdHJpbmdPcHRpb24oZS5kYXRhRW5jaXBoZXJtZW50LHQpO3RoaXMuZGVjaXBoZXJPbmx5PWdldFN0cmluZ09wdGlvbihlLmRlY2lwaGVyT25seSx0KTt0aGlzLmRpZ2l0YWxTaWduYXR1cmU9Z2V0U3RyaW5nT3B0aW9uKGUuZGlnaXRhbFNpZ25hdHVyZSx0KTt0aGlzLmVuY2lwaGVyT25seT1nZXRTdHJpbmdPcHRpb24oZS5lbmNpcGhlck9ubHksdCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmtleUFncmVlbWVudD1nZXRTdHJpbmdPcHRpb24oZS5rZXlBZ3JlZW1lbnQsdCk7dGhpcy5rZXlDZXJ0U2lnbj1nZXRTdHJpbmdPcHRpb24oZS5rZXlDZXJ0U2lnbix0KTt0aGlzLmtleUVuY2lwaGVybWVudD1nZXRTdHJpbmdPcHRpb24oZS5rZXlFbmNpcGhlcm1lbnQsdCk7dGhpcy5ub25SZXB1ZGlhdGlvbj1nZXRTdHJpbmdPcHRpb24oZS5ub25SZXB1ZGlhdGlvbix0KTt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBMaW5lIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJsaW5lIiwhMCk7dGhpcy5oYW5kPWdldFN0cmluZ09wdGlvbihlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5zbG9wZT1nZXRTdHJpbmdPcHRpb24oZS5zbG9wZSxbIlxcIiwiLyJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lZGdlPW51bGx9W0luXSgpe2NvbnN0IGU9dGhpc1tEc10oKVtEc10oKSx0PXRoaXMuZWRnZXx8bmV3IEVkZ2Uoe30pLGk9dFtDbl0oKSxhPU9iamVjdC5jcmVhdGUobnVsbCkscj0idmlzaWJsZSI9PT10LnByZXNlbmNlP3QudGhpY2tuZXNzOjA7YS5zdHJva2VXaWR0aD1tZWFzdXJlVG9TdHJpbmcocik7YS5zdHJva2U9aS5jb2xvcjtsZXQgcyxuLG8sZyxjPSIxMDAlIixDPSIxMDAlIjtpZihlLnc8PXIpe1tzLG4sbyxnXT1bIjUwJSIsMCwiNTAlIiwiMTAwJSJdO2M9YS5zdHJva2VXaWR0aH1lbHNlIGlmKGUuaDw9cil7W3MsbixvLGddPVswLCI1MCUiLCIxMDAlIiwiNTAlIl07Qz1hLnN0cm9rZVdpZHRofWVsc2UiXFwiPT09dGhpcy5zbG9wZT9bcyxuLG8sZ109WzAsMCwiMTAwJSIsIjEwMCUiXTpbcyxuLG8sZ109WzAsIjEwMCUiLCIxMDAlIiwwXTtjb25zdCBoPXtuYW1lOiJzdmciLGNoaWxkcmVuOlt7bmFtZToibGluZSIsYXR0cmlidXRlczp7eG1sbnM6T24seDE6cyx5MTpuLHgyOm8seTI6ZyxzdHlsZTphfX1dLGF0dHJpYnV0ZXM6e3htbG5zOk9uLHdpZHRoOmMsaGVpZ2h0OkMsc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn19fTtpZihoYXNNYXJnaW4oZSkpcmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTp7ZGlzcGxheToiaW5saW5lIix3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn19LGNoaWxkcmVuOltoXX0pO2guYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoaCl9fWNsYXNzIExpbmVhciBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwibGluZWFyIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbInRvUmlnaHQiLCJ0b0JvdHRvbSIsInRvTGVmdCIsInRvVG9wIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bQ25dKGUpe2U9ZT9lW0NuXSgpOiIjRkZGRkZGIjtyZXR1cm5gbGluZWFyLWdyYWRpZW50KCR7dGhpcy50eXBlLnJlcGxhY2UoLyhbUkJMVF0pLywiICQxIikudG9Mb3dlckNhc2UoKX0sICR7ZX0sICR7dGhpcy5jb2xvcj90aGlzLmNvbG9yW0NuXSgpOiIjMDAwMDAwIn0pYH19Y2xhc3MgTG9ja0RvY3VtZW50IGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwibG9ja0RvY3VtZW50Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtjc10oKXt0aGlzW25zXT1nZXRTdHJpbmdPcHRpb24odGhpc1tuc10sWyJhdXRvIiwiMCIsIjEiXSl9fWNsYXNzIE1hbmlmZXN0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJtYW5pZmVzdCIsITApO3RoaXMuYWN0aW9uPWdldFN0cmluZ09wdGlvbihlLmFjdGlvbixbImluY2x1ZGUiLCJhbGwiLCJleGNsdWRlIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5yZWY9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBNYXJnaW4gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sIm1hcmdpbiIsITApO3RoaXMuYm90dG9tSW5zZXQ9Z2V0TWVhc3VyZW1lbnQoZS5ib3R0b21JbnNldCwiMCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWZ0SW5zZXQ9Z2V0TWVhc3VyZW1lbnQoZS5sZWZ0SW5zZXQsIjAiKTt0aGlzLnJpZ2h0SW5zZXQ9Z2V0TWVhc3VyZW1lbnQoZS5yaWdodEluc2V0LCIwIik7dGhpcy50b3BJbnNldD1nZXRNZWFzdXJlbWVudChlLnRvcEluc2V0LCIwIik7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9W0NuXSgpe3JldHVybnttYXJnaW46bWVhc3VyZVRvU3RyaW5nKHRoaXMudG9wSW5zZXQpKyIgIittZWFzdXJlVG9TdHJpbmcodGhpcy5yaWdodEluc2V0KSsiICIrbWVhc3VyZVRvU3RyaW5nKHRoaXMuYm90dG9tSW5zZXQpKyIgIittZWFzdXJlVG9TdHJpbmcodGhpcy5sZWZ0SW5zZXQpfX19Y2xhc3MgTWRwIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJtZHAiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucGVybWlzc2lvbnM9Z2V0SW50ZWdlcih7ZGF0YTplLnBlcm1pc3Npb25zLGRlZmF1bHRWYWx1ZToyLHZhbGlkYXRlOmU9PjE9PT1lfHwzPT09ZX0pO3RoaXMuc2lnbmF0dXJlVHlwZT1nZXRTdHJpbmdPcHRpb24oZS5zaWduYXR1cmVUeXBlLFsiZmlsbGVyIiwiYXV0aG9yIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgTWVkaXVtIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJtZWRpdW0iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuaW1hZ2luZ0JCb3g9ZnVuY3Rpb24gZ2V0QkJveChlKXtjb25zdCB0PS0xO2lmKCFlKXJldHVybnt4OnQseTp0LHdpZHRoOnQsaGVpZ2h0OnR9O2NvbnN0IGk9ZS50cmltKCkuc3BsaXQoL1xzKixccyovKS5tYXAoKGU9PmdldE1lYXN1cmVtZW50KGUsIi0xIikpKTtpZihpLmxlbmd0aDw0fHxpWzJdPDB8fGlbM108MClyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTtjb25zdFthLHIscyxuXT1pO3JldHVybnt4OmEseTpyLHdpZHRoOnMsaGVpZ2h0Om59fShlLmltYWdpbmdCQm94KTt0aGlzLmxvbmc9Z2V0TWVhc3VyZW1lbnQoZS5sb25nKTt0aGlzLm9yaWVudGF0aW9uPWdldFN0cmluZ09wdGlvbihlLm9yaWVudGF0aW9uLFsicG9ydHJhaXQiLCJsYW5kc2NhcGUiXSk7dGhpcy5zaG9ydD1nZXRNZWFzdXJlbWVudChlLnNob3J0KTt0aGlzLnN0b2NrPWUuc3RvY2t8fCIiO3RoaXMudHJheUluPWdldFN0cmluZ09wdGlvbihlLnRyYXlJbixbImF1dG8iLCJkZWxlZ2F0ZSIsInBhZ2VGcm9udCJdKTt0aGlzLnRyYXlPdXQ9Z2V0U3RyaW5nT3B0aW9uKGUudHJheU91dCxbImF1dG8iLCJkZWxlZ2F0ZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sIm1lc3NhZ2UiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnRleHQ9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBOdW1lcmljRWRpdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwibnVtZXJpY0VkaXQiLCEwKTt0aGlzLmhTY3JvbGxQb2xpY3k9Z2V0U3RyaW5nT3B0aW9uKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY29tYj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bSW5dKGUpe2NvbnN0IHQ9dG9TdHlsZSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIiksaT10aGlzW0RzXSgpW0RzXSgpLGE9e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixmaWVsZElkOmlbaG5dLGRhdGFJZDppW29zXT8uW2huXXx8aVtobl0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwoaSksImFyaWEtcmVxdWlyZWQiOiExfX07aWYoaXNSZXF1aXJlZChpKSl7YS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7YS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlthXX0pfX1jbGFzcyBPY2N1ciBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwib2NjdXIiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuaW5pdGlhbD0iIiE9PWUuaW5pdGlhbD9nZXRJbnRlZ2VyKHtkYXRhOmUuaW5pdGlhbCxkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+ITB9KToiIjt0aGlzLm1heD0iIiE9PWUubWF4P2dldEludGVnZXIoe2RhdGE6ZS5tYXgsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ITB9KToiIjt0aGlzLm1pbj0iIiE9PWUubWluP2dldEludGVnZXIoe2RhdGE6ZS5taW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ITB9KToiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bdHNdKCl7Y29uc3QgZT10aGlzW0RzXSgpLHQ9dGhpcy5taW47IiI9PT10aGlzLm1pbiYmKHRoaXMubWluPWUgaW5zdGFuY2VvZiBQYWdlQXJlYXx8ZSBpbnN0YW5jZW9mIFBhZ2VTZXQ/MDoxKTsiIj09PXRoaXMubWF4JiYodGhpcy5tYXg9IiI9PT10P2UgaW5zdGFuY2VvZiBQYWdlQXJlYXx8ZSBpbnN0YW5jZW9mIFBhZ2VTZXQ/LTE6MTp0aGlzLm1pbik7LTEhPT10aGlzLm1heCYmdGhpcy5tYXg8dGhpcy5taW4mJih0aGlzLm1heD10aGlzLm1pbik7IiI9PT10aGlzLmluaXRpYWwmJih0aGlzLmluaXRpYWw9ZSBpbnN0YW5jZW9mIFRlbXBsYXRlPzE6dGhpcy5taW4pfX1jbGFzcyBPaWQgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sIm9pZCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBPaWRzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJvaWRzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMub2lkPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgT3ZlcmZsb3cgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sIm92ZXJmbG93Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlYWRlcj1lLmxlYWRlcnx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudHJhaWxlcj1lLnRyYWlsZXJ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bZnNdKCl7aWYoIXRoaXNbSXNdKXtjb25zdCBlPXRoaXNbRHNdKCksdD10aGlzW0ZzXSgpLGk9dFt0bl0odGhpcy50YXJnZXQsZSksYT10W3RuXSh0aGlzLmxlYWRlcixlKSxyPXRbdG5dKHRoaXMudHJhaWxlcixlKTt0aGlzW0lzXT17dGFyZ2V0Omk/LlswXXx8bnVsbCxsZWFkZXI6YT8uWzBdfHxudWxsLHRyYWlsZXI6cj8uWzBdfHxudWxsLGFkZExlYWRlcjohMSxhZGRUcmFpbGVyOiExfX1yZXR1cm4gdGhpc1tJc119fWNsYXNzIFBhZ2VBcmVhIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJwYWdlQXJlYSIsITApO3RoaXMuYmxhbmtPck5vdEJsYW5rPWdldFN0cmluZ09wdGlvbihlLmJsYW5rT3JOb3RCbGFuayxbImFueSIsImJsYW5rIiwibm90QmxhbmsiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmluaXRpYWxOdW1iZXI9Z2V0SW50ZWdlcih7ZGF0YTplLmluaXRpYWxOdW1iZXIsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLm51bWJlcmVkPWdldEludGVnZXIoe2RhdGE6ZS5udW1iZXJlZCxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4hMH0pO3RoaXMub2RkT3JFdmVuPWdldFN0cmluZ09wdGlvbihlLm9kZE9yRXZlbixbImFueSIsImV2ZW4iLCJvZGQiXSk7dGhpcy5wYWdlUG9zaXRpb249Z2V0U3RyaW5nT3B0aW9uKGUucGFnZVBvc2l0aW9uLFsiYW55IiwiZmlyc3QiLCJsYXN0Iiwib25seSIsInJlc3QiXSk7dGhpcy5yZWxldmFudD1nZXRSZWxldmFudChlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1lZGl1bT1udWxsO3RoaXMub2NjdXI9bnVsbDt0aGlzLmFyZWE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY29udGVudEFyZWE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZHJhdz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leGNsR3JvdXA9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgWEZBT2JqZWN0QXJyYXl9W1RzXSgpe2lmKCF0aGlzW0lzXSl7dGhpc1tJc109e251bWJlck9mVXNlOjB9O3JldHVybiEwfXJldHVybiF0aGlzLm9jY3VyfHwtMT09PXRoaXMub2NjdXIubWF4fHx0aGlzW0lzXS5udW1iZXJPZlVzZTx0aGlzLm9jY3VyLm1heH1baXNdKCl7ZGVsZXRlIHRoaXNbSXNdfVt3c10oKXt0aGlzW0lzXXx8KHRoaXNbSXNdPXtudW1iZXJPZlVzZTowfSk7Y29uc3QgZT10aGlzW0RzXSgpO2lmKCJvcmRlcmVkT2NjdXJyZW5jZSI9PT1lLnJlbGF0aW9uJiZ0aGlzW1RzXSgpKXt0aGlzW0lzXS5udW1iZXJPZlVzZSs9MTtyZXR1cm4gdGhpc31yZXR1cm4gZVt3c10oKX1bQnNdKCl7cmV0dXJuIHRoaXNbSXNdLnNwYWNlfHx7d2lkdGg6MCxoZWlnaHQ6MH19W0luXSgpe3RoaXNbSXNdfHwodGhpc1tJc109e251bWJlck9mVXNlOjF9KTtjb25zdCBlPVtdO3RoaXNbSXNdLmNoaWxkcmVuPWU7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHRoaXMubWVkaXVtJiZ0aGlzLm1lZGl1bS5zaG9ydCYmdGhpcy5tZWRpdW0ubG9uZyl7dC53aWR0aD1tZWFzdXJlVG9TdHJpbmcodGhpcy5tZWRpdW0uc2hvcnQpO3QuaGVpZ2h0PW1lYXN1cmVUb1N0cmluZyh0aGlzLm1lZGl1bS5sb25nKTt0aGlzW0lzXS5zcGFjZT17d2lkdGg6dGhpcy5tZWRpdW0uc2hvcnQsaGVpZ2h0OnRoaXMubWVkaXVtLmxvbmd9O2lmKCJsYW5kc2NhcGUiPT09dGhpcy5tZWRpdW0ub3JpZW50YXRpb24pe2NvbnN0IGU9dC53aWR0aDt0LndpZHRoPXQuaGVpZ2h0O3QuaGVpZ2h0PWU7dGhpc1tJc10uc3BhY2U9e3dpZHRoOnRoaXMubWVkaXVtLmxvbmcsaGVpZ2h0OnRoaXMubWVkaXVtLnNob3J0fX19ZWxzZSB3YXJuKCJYRkEgLSBObyBtZWRpdW0gc3BlY2lmaWVkIGluIHBhZ2VBcmVhOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTt0aGlzW2VzXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwic3ViZm9ybSJdKSxpbmNsdWRlOiEwfSk7dGhpc1tlc10oe2ZpbHRlcjpuZXcgU2V0KFsiY29udGVudEFyZWEiXSksaW5jbHVkZTohMH0pO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46ZSxhdHRyaWJ1dGVzOntjbGFzczpbInhmYVBhZ2UiXSxpZDp0aGlzW2huXSxzdHlsZTp0LHhmYU5hbWU6dGhpcy5uYW1lfX0pfX1jbGFzcyBQYWdlU2V0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJwYWdlU2V0IiwhMCk7dGhpcy5kdXBsZXhJbXBvc2l0aW9uPWdldFN0cmluZ09wdGlvbihlLmR1cGxleEltcG9zaXRpb24sWyJsb25nRWRnZSIsInNob3J0RWRnZSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsYXRpb249Z2V0U3RyaW5nT3B0aW9uKGUucmVsYXRpb24sWyJvcmRlcmVkT2NjdXJyZW5jZSIsImR1cGxleFBhZ2luYXRlZCIsInNpbXBsZXhQYWdpbmF0ZWQiXSk7dGhpcy5yZWxldmFudD1nZXRSZWxldmFudChlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5wYWdlQXJlYT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5wYWdlU2V0PW5ldyBYRkFPYmplY3RBcnJheX1baXNdKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5wYWdlQXJlYS5jaGlsZHJlbillW2lzXSgpO2Zvcihjb25zdCBlIG9mIHRoaXMucGFnZVNldC5jaGlsZHJlbillW2lzXSgpfVtUc10oKXtyZXR1cm4hdGhpcy5vY2N1cnx8LTE9PT10aGlzLm9jY3VyLm1heHx8dGhpc1tJc10ubnVtYmVyT2ZVc2U8dGhpcy5vY2N1ci5tYXh9W3dzXSgpe3RoaXNbSXNdfHwodGhpc1tJc109e251bWJlck9mVXNlOjEscGFnZUluZGV4Oi0xLHBhZ2VTZXRJbmRleDotMX0pO2lmKCJvcmRlcmVkT2NjdXJyZW5jZSI9PT10aGlzLnJlbGF0aW9uKXtpZih0aGlzW0lzXS5wYWdlSW5kZXgrMTx0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmxlbmd0aCl7dGhpc1tJc10ucGFnZUluZGV4Kz0xO3JldHVybiB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuW3RoaXNbSXNdLnBhZ2VJbmRleF1bd3NdKCl9aWYodGhpc1tJc10ucGFnZVNldEluZGV4KzE8dGhpcy5wYWdlU2V0LmNoaWxkcmVuLmxlbmd0aCl7dGhpc1tJc10ucGFnZVNldEluZGV4Kz0xO3JldHVybiB0aGlzLnBhZ2VTZXQuY2hpbGRyZW5bdGhpc1tJc10ucGFnZVNldEluZGV4XVt3c10oKX1pZih0aGlzW1RzXSgpKXt0aGlzW0lzXS5udW1iZXJPZlVzZSs9MTt0aGlzW0lzXS5wYWdlSW5kZXg9LTE7dGhpc1tJc10ucGFnZVNldEluZGV4PS0xO3JldHVybiB0aGlzW3dzXSgpfWNvbnN0IGU9dGhpc1tEc10oKTtpZihlIGluc3RhbmNlb2YgUGFnZVNldClyZXR1cm4gZVt3c10oKTt0aGlzW2lzXSgpO3JldHVybiB0aGlzW3dzXSgpfWNvbnN0IGU9dGhpc1tGc10oKVtJc10ucGFnZU51bWJlcix0PWUlMj09MD8iZXZlbiI6Im9kZCIsaT0wPT09ZT8iZmlyc3QiOiJyZXN0IjtsZXQgYT10aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmZpbmQoKGU9PmUub2RkT3JFdmVuPT09dCYmZS5wYWdlUG9zaXRpb249PT1pKSk7aWYoYSlyZXR1cm4gYTthPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZT0+ImFueSI9PT1lLm9kZE9yRXZlbiYmZS5wYWdlUG9zaXRpb249PT1pKSk7aWYoYSlyZXR1cm4gYTthPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZT0+ImFueSI9PT1lLm9kZE9yRXZlbiYmImFueSI9PT1lLnBhZ2VQb3NpdGlvbikpO3JldHVybiBhfHx0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuWzBdfX1jbGFzcyBQYXJhIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJwYXJhIiwhMCk7dGhpcy5oQWxpZ249Z2V0U3RyaW5nT3B0aW9uKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGluZUhlaWdodD1lLmxpbmVIZWlnaHQ/Z2V0TWVhc3VyZW1lbnQoZS5saW5lSGVpZ2h0LCIwcHQiKToiIjt0aGlzLm1hcmdpbkxlZnQ9ZS5tYXJnaW5MZWZ0P2dldE1lYXN1cmVtZW50KGUubWFyZ2luTGVmdCwiMHB0Iik6IiI7dGhpcy5tYXJnaW5SaWdodD1lLm1hcmdpblJpZ2h0P2dldE1lYXN1cmVtZW50KGUubWFyZ2luUmlnaHQsIjBwdCIpOiIiO3RoaXMub3JwaGFucz1nZXRJbnRlZ2VyKHtkYXRhOmUub3JwaGFucyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5wcmVzZXJ2ZT1lLnByZXNlcnZlfHwiIjt0aGlzLnJhZGl4T2Zmc2V0PWUucmFkaXhPZmZzZXQ/Z2V0TWVhc3VyZW1lbnQoZS5yYWRpeE9mZnNldCwiMHB0Iik6IiI7dGhpcy5zcGFjZUFib3ZlPWUuc3BhY2VBYm92ZT9nZXRNZWFzdXJlbWVudChlLnNwYWNlQWJvdmUsIjBwdCIpOiIiO3RoaXMuc3BhY2VCZWxvdz1lLnNwYWNlQmVsb3c/Z2V0TWVhc3VyZW1lbnQoZS5zcGFjZUJlbG93LCIwcHQiKToiIjt0aGlzLnRhYkRlZmF1bHQ9ZS50YWJEZWZhdWx0P2dldE1lYXN1cmVtZW50KHRoaXMudGFiRGVmYXVsdCk6IiI7dGhpcy50YWJTdG9wcz0oZS50YWJTdG9wc3x8IiIpLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKCgoZSx0KT0+dCUyPT0xP2dldE1lYXN1cmVtZW50KGUpOmUpKTt0aGlzLnRleHRJbmRlbnQ9ZS50ZXh0SW5kZW50P2dldE1lYXN1cmVtZW50KGUudGV4dEluZGVudCwiMHB0Iik6IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudkFsaWduPWdldFN0cmluZ09wdGlvbihlLnZBbGlnbixbInRvcCIsImJvdHRvbSIsIm1pZGRsZSJdKTt0aGlzLndpZG93cz1nZXRJbnRlZ2VyKHtkYXRhOmUud2lkb3dzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmh5cGhlbmF0aW9uPW51bGx9W0NuXSgpe2NvbnN0IGU9dG9TdHlsZSh0aGlzLCJoQWxpZ24iKTsiIiE9PXRoaXMubWFyZ2luTGVmdCYmKGUucGFkZGluZ0xlZnQ9bWVhc3VyZVRvU3RyaW5nKHRoaXMubWFyZ2luTGVmdCkpOyIiIT09dGhpcy5tYXJnaW5SaWdodCYmKGUucGFkZGluZ2lnaHQ9bWVhc3VyZVRvU3RyaW5nKHRoaXMubWFyZ2luUmlnaHQpKTsiIiE9PXRoaXMuc3BhY2VBYm92ZSYmKGUucGFkZGluZ1RvcD1tZWFzdXJlVG9TdHJpbmcodGhpcy5zcGFjZUFib3ZlKSk7IiIhPT10aGlzLnNwYWNlQmVsb3cmJihlLnBhZGRpbmdCb3R0b209bWVhc3VyZVRvU3RyaW5nKHRoaXMuc3BhY2VCZWxvdykpO2lmKCIiIT09dGhpcy50ZXh0SW5kZW50KXtlLnRleHRJbmRlbnQ9bWVhc3VyZVRvU3RyaW5nKHRoaXMudGV4dEluZGVudCk7Zml4VGV4dEluZGVudChlKX10aGlzLmxpbmVIZWlnaHQ+MCYmKGUubGluZUhlaWdodD1tZWFzdXJlVG9TdHJpbmcodGhpcy5saW5lSGVpZ2h0KSk7IiIhPT10aGlzLnRhYkRlZmF1bHQmJihlLnRhYlNpemU9bWVhc3VyZVRvU3RyaW5nKHRoaXMudGFiRGVmYXVsdCkpO3RoaXMudGFiU3RvcHMubGVuZ3RoO3RoaXMuaHlwaGVuYXRhdGlvbiYmT2JqZWN0LmFzc2lnbihlLHRoaXMuaHlwaGVuYXRhdGlvbltDbl0oKSk7cmV0dXJuIGV9fWNsYXNzIFBhc3N3b3JkRWRpdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwicGFzc3dvcmRFZGl0IiwhMCk7dGhpcy5oU2Nyb2xsUG9saWN5PWdldFN0cmluZ09wdGlvbihlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnBhc3N3b3JkQ2hhcj1lLnBhc3N3b3JkQ2hhcnx8IioiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH19Y2xhc3MgdGVtcGxhdGVfUGF0dGVybiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwicGF0dGVybiIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJjcm9zc0hhdGNoIiwiY3Jvc3NEaWFnb25hbCIsImRpYWdvbmFsTGVmdCIsImRpYWdvbmFsUmlnaHQiLCJob3Jpem9udGFsIiwidmVydGljYWwiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtDbl0oZSl7ZT1lP2VbQ25dKCk6IiNGRkZGRkYiO2NvbnN0IHQ9dGhpcy5jb2xvcj90aGlzLmNvbG9yW0NuXSgpOiIjMDAwMDAwIixpPSJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50IixhPWAke2V9LCR7ZX0gNXB4LCR7dH0gNXB4LCR7dH0gMTBweGA7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSJjcm9zc0hhdGNoIjpyZXR1cm5gJHtpfSh0byB0b3AsJHthfSkgJHtpfSh0byByaWdodCwke2F9KWA7Y2FzZSJjcm9zc0RpYWdvbmFsIjpyZXR1cm5gJHtpfSg0NWRlZywke2F9KSAke2l9KC00NWRlZywke2F9KWA7Y2FzZSJkaWFnb25hbExlZnQiOnJldHVybmAke2l9KDQ1ZGVnLCR7YX0pYDtjYXNlImRpYWdvbmFsUmlnaHQiOnJldHVybmAke2l9KC00NWRlZywke2F9KWA7Y2FzZSJob3Jpem9udGFsIjpyZXR1cm5gJHtpfSh0byB0b3AsJHthfSlgO2Nhc2UidmVydGljYWwiOnJldHVybmAke2l9KHRvIHJpZ2h0LCR7YX0pYH1yZXR1cm4iIn19Y2xhc3MgUGljdHVyZSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwicGljdHVyZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBQcm90byBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwicHJvdG8iLCEwKTt0aGlzLmFwcGVhcmFuY2VGaWx0ZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYXJjPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmFyZWE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYXNzaXN0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJhcmNvZGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYmluZEl0ZW1zPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJvb2tlbmQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYm9vbGVhbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5ib3JkZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWs9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWtBZnRlcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVha0JlZm9yZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5idXR0b249bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY2FsY3VsYXRlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNhcHRpb249bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY2VydGlmaWNhdGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY2VydGlmaWNhdGVzPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNoZWNrQnV0dG9uPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNob2ljZUxpc3Q9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY29sb3I9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY29tYj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jb25uZWN0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNvbnRlbnRBcmVhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNvcm5lcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lRWRpdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRlZmF1bHRVaT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kZXNjPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRpZ2VzdE1ldGhvZD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kaWdlc3RNZXRob2RzPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRyYXc9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZWRnZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNvZGluZz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNvZGluZ3M9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0RGF0YT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0aW9uPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmVuY3J5cHRpb25NZXRob2Q9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdGlvbk1ldGhvZHM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXZlbnQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4T2JqZWN0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4Y2xHcm91cD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leGVjdXRlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4dHJhcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5maWxsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZpbHRlcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5mb250PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZvcm1hdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5oYW5kbGVyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmh5cGhlbmF0aW9uPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmltYWdlRWRpdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmlzc3VlcnM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuaXRlbXM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMua2VlcD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5rZXlVc2FnZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5saW5lPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmxpbmVhcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5sb2NrRG9jdW1lbnQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMubWFuaWZlc3Q9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMubWFyZ2luPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm1kcD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5tZWRpdW09bmV3IFhGQU9iamVjdEFycmF5O3RoaXMubWVzc2FnZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5udW1lcmljRWRpdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5vY2N1cj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5vaWQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMub2lkcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5vdmVyZmxvdz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5wYWdlQXJlYT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5wYWdlU2V0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnBhcmE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucGFzc3dvcmRFZGl0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnBhdHRlcm49bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucGljdHVyZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5yYWRpYWw9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucmVhc29uPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnJlYXNvbnM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucmVjdGFuZ2xlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnJlZj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zY3JpcHQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc2V0UHJvcGVydHk9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc2lnbkRhdGE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc2lnbmF0dXJlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNpZ25pbmc9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc29saWQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3BlYWs9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3RpcHBsZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3ViamVjdEROPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN1YmplY3RETnM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3VibWl0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGV4dEVkaXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lU3RhbXA9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudG9vbFRpcD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50cmF2ZXJzYWw9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudHJhdmVyc2U9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudWk9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudmFsaWRhdGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudmFsdWU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudmFyaWFibGVzPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgUmFkaWFsIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJyYWRpYWwiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsidG9FZGdlIiwidG9DZW50ZXIiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtDbl0oZSl7ZT1lP2VbQ25dKCk6IiNGRkZGRkYiO2NvbnN0IHQ9dGhpcy5jb2xvcj90aGlzLmNvbG9yW0NuXSgpOiIjMDAwMDAwIjtyZXR1cm5gcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCBjZW50ZXIsICR7InRvRWRnZSI9PT10aGlzLnR5cGU/YCR7ZX0sJHt0fWA6YCR7dH0sJHtlfWB9KWB9fWNsYXNzIFJlYXNvbiBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwicmVhc29uIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFJlYXNvbnMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sInJlYXNvbnMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5yZWFzb249bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBSZWN0YW5nbGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sInJlY3RhbmdsZSIsITApO3RoaXMuaGFuZD1nZXRTdHJpbmdPcHRpb24oZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvcm5lcj1uZXcgWEZBT2JqZWN0QXJyYXkoNCk7dGhpcy5lZGdlPW5ldyBYRkFPYmplY3RBcnJheSg0KTt0aGlzLmZpbGw9bnVsbH1bSW5dKCl7Y29uc3QgZT10aGlzLmVkZ2UuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuZWRnZS5jaGlsZHJlblswXTpuZXcgRWRnZSh7fSksdD1lW0NuXSgpLGk9T2JqZWN0LmNyZWF0ZShudWxsKTsidmlzaWJsZSI9PT10aGlzLmZpbGw/LnByZXNlbmNlP09iamVjdC5hc3NpZ24oaSx0aGlzLmZpbGxbQ25dKCkpOmkuZmlsbD0idHJhbnNwYXJlbnQiO2kuc3Ryb2tlV2lkdGg9bWVhc3VyZVRvU3RyaW5nKCJ2aXNpYmxlIj09PWUucHJlc2VuY2U/ZS50aGlja25lc3M6MCk7aS5zdHJva2U9dC5jb2xvcjtjb25zdCBhPSh0aGlzLmNvcm5lci5jaGlsZHJlbi5sZW5ndGg/dGhpcy5jb3JuZXIuY2hpbGRyZW5bMF06bmV3IENvcm5lcih7fSkpW0NuXSgpLHI9e25hbWU6InN2ZyIsY2hpbGRyZW46W3tuYW1lOiJyZWN0IixhdHRyaWJ1dGVzOnt4bWxuczpPbix3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIix4OjAseTowLHJ4OmEucmFkaXVzLHJ5OmEucmFkaXVzLHN0eWxlOml9fV0sYXR0cmlidXRlczp7eG1sbnM6T24sc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fTtpZihoYXNNYXJnaW4odGhpc1tEc10oKVtEc10oKSkpcmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTp7ZGlzcGxheToiaW5saW5lIix3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn19LGNoaWxkcmVuOltyXX0pO3IuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Mocil9fWNsYXNzIFJlZkVsZW1lbnQgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sInJlZiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTY3JpcHQgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sInNjcmlwdCIpO3RoaXMuYmluZGluZz1lLmJpbmRpbmd8fCIiO3RoaXMuY29udGVudFR5cGU9ZS5jb250ZW50VHlwZXx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJ1bkF0PWdldFN0cmluZ09wdGlvbihlLnJ1bkF0LFsiY2xpZW50IiwiYm90aCIsInNlcnZlciJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFNldFByb3BlcnR5IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJzZXRQcm9wZXJ0eSIpO3RoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiJ9fWNsYXNzIFNpZ25EYXRhIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJzaWduRGF0YSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVyYXRpb249Z2V0U3RyaW5nT3B0aW9uKGUub3BlcmF0aW9uLFsic2lnbiIsImNsZWFyIiwidmVyaWZ5Il0pO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZmlsdGVyPW51bGw7dGhpcy5tYW5pZmVzdD1udWxsfX1jbGFzcyBTaWduYXR1cmUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sInNpZ25hdHVyZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJQREYxLjMiLCJQREYxLjYiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZpbHRlcj1udWxsO3RoaXMubWFuaWZlc3Q9bnVsbDt0aGlzLm1hcmdpbj1udWxsfX1jbGFzcyBTaWduaW5nIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJzaWduaW5nIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY2VydGlmaWNhdGU9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBTb2xpZCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwic29saWQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfVtDbl0oZSl7cmV0dXJuIGU/ZVtDbl0oKToiI0ZGRkZGRiJ9fWNsYXNzIFNwZWFrIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJzcGVhayIpO3RoaXMuZGlzYWJsZT1nZXRJbnRlZ2VyKHtkYXRhOmUuZGlzYWJsZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wcmlvcml0eT1nZXRTdHJpbmdPcHRpb24oZS5wcmlvcml0eSxbImN1c3RvbSIsImNhcHRpb24iLCJuYW1lIiwidG9vbFRpcCJdKTt0aGlzLnJpZD1lLnJpZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTdGlwcGxlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJzdGlwcGxlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnJhdGU9Z2V0SW50ZWdlcih7ZGF0YTplLnJhdGUsZGVmYXVsdFZhbHVlOjUwLHZhbGlkYXRlOmU9PmU+PTAmJmU8PTEwMH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bQ25dKGUpe2NvbnN0IHQ9dGhpcy5yYXRlLzEwMDtyZXR1cm4gVXRpbC5tYWtlSGV4Q29sb3IoTWF0aC5yb3VuZChlLnZhbHVlLnIqKDEtdCkrdGhpcy52YWx1ZS5yKnQpLE1hdGgucm91bmQoZS52YWx1ZS5nKigxLXQpK3RoaXMudmFsdWUuZyp0KSxNYXRoLnJvdW5kKGUudmFsdWUuYiooMS10KSt0aGlzLnZhbHVlLmIqdCkpfX1jbGFzcyBTdWJmb3JtIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJzdWJmb3JtIiwhMCk7dGhpcy5hY2Nlc3M9Z2V0U3RyaW5nT3B0aW9uKGUuYWNjZXNzLFsib3BlbiIsIm5vbkludGVyYWN0aXZlIiwicHJvdGVjdGVkIiwicmVhZE9ubHkiXSk7dGhpcy5hbGxvd01hY3JvPWdldEludGVnZXIoe2RhdGE6ZS5hbGxvd01hY3JvLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5hbmNob3JUeXBlPWdldFN0cmluZ09wdGlvbihlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSk7dGhpcy5jb2xTcGFuPWdldEludGVnZXIoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pO3RoaXMuY29sdW1uV2lkdGhzPShlLmNvbHVtbldpZHRoc3x8IiIpLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChlPT4iLTEiPT09ZT8tMTpnZXRNZWFzdXJlbWVudChlKSkpO3RoaXMuaD1lLmg/Z2V0TWVhc3VyZW1lbnQoZS5oKToiIjt0aGlzLmhBbGlnbj1nZXRTdHJpbmdPcHRpb24oZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sYXlvdXQ9Z2V0U3RyaW5nT3B0aW9uKGUubGF5b3V0LFsicG9zaXRpb24iLCJsci10YiIsInJsLXJvdyIsInJsLXRiIiwicm93IiwidGFibGUiLCJ0YiJdKTt0aGlzLmxvY2FsZT1lLmxvY2FsZXx8IiI7dGhpcy5tYXhIPWdldE1lYXN1cmVtZW50KGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPWdldE1lYXN1cmVtZW50KGUubWF4VywiMHB0Iik7dGhpcy5tZXJnZU1vZGU9Z2V0U3RyaW5nT3B0aW9uKGUubWVyZ2VNb2RlLFsiY29uc3VtZURhdGEiLCJtYXRjaFRlbXBsYXRlIl0pO3RoaXMubWluSD1nZXRNZWFzdXJlbWVudChlLm1pbkgsIjBwdCIpO3RoaXMubWluVz1nZXRNZWFzdXJlbWVudChlLm1pblcsIjBwdCIpO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucHJlc2VuY2U9Z2V0U3RyaW5nT3B0aW9uKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWxldmFudD1nZXRSZWxldmFudChlLnJlbGV2YW50KTt0aGlzLnJlc3RvcmVTdGF0ZT1nZXRTdHJpbmdPcHRpb24oZS5yZXN0b3JlU3RhdGUsWyJtYW51YWwiLCJhdXRvIl0pO3RoaXMuc2NvcGU9Z2V0U3RyaW5nT3B0aW9uKGUuc2NvcGUsWyJuYW1lIiwibm9uZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53PWUudz9nZXRNZWFzdXJlbWVudChlLncpOiIiO3RoaXMueD1nZXRNZWFzdXJlbWVudChlLngsIjBwdCIpO3RoaXMueT1nZXRNZWFzdXJlbWVudChlLnksIjBwdCIpO3RoaXMuYXNzaXN0PW51bGw7dGhpcy5iaW5kPW51bGw7dGhpcy5ib29rZW5kPW51bGw7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmJyZWFrPW51bGw7dGhpcy5jYWxjdWxhdGU9bnVsbDt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMua2VlcD1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5vY2N1cj1udWxsO3RoaXMub3ZlcmZsb3c9bnVsbDt0aGlzLnBhZ2VTZXQ9bnVsbDt0aGlzLnBhcmE9bnVsbDt0aGlzLnRyYXZlcnNhbD1udWxsO3RoaXMudmFsaWRhdGU9bnVsbDt0aGlzLnZhcmlhYmxlcz1udWxsO3RoaXMuYXJlYT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVha0FmdGVyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQmVmb3JlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNvbm5lY3Q9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZHJhdz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leE9iamVjdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leGNsR3JvdXA9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZmllbGQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucHJvdG89bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc2V0UHJvcGVydHk9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtU2V0PW5ldyBYRkFPYmplY3RBcnJheX1bYnNdKCl7Y29uc3QgZT10aGlzW0RzXSgpO3JldHVybiBlIGluc3RhbmNlb2YgU3ViZm9ybVNldD9lW2JzXSgpOmV9W1VzXSgpe3JldHVybiEwfVt2c10oKXtyZXR1cm4gdGhpcy5sYXlvdXQuZW5kc1dpdGgoIi10YiIpJiYwPT09dGhpc1tJc10uYXR0ZW1wdCYmdGhpc1tJc10ubnVtYmVySW5MaW5lPjB8fHRoaXNbRHNdKClbdnNdKCl9Klt5c10oKXt5aWVsZCpnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKX1bQ3NdKCl7cmV0dXJuIGZsdXNoSFRNTCh0aGlzKX1bJHJdKGUsdCl7YWRkSFRNTCh0aGlzLGUsdCl9W0JzXSgpe3JldHVybiBnZXRBdmFpbGFibGVTcGFjZSh0aGlzKX1bSnNdKCl7Y29uc3QgZT10aGlzW2JzXSgpO2lmKCFlW0pzXSgpKXJldHVybiExO2lmKHZvaWQgMCE9PXRoaXNbSXNdLl9pc1NwbGl0dGFibGUpcmV0dXJuIHRoaXNbSXNdLl9pc1NwbGl0dGFibGU7aWYoInBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe3RoaXNbSXNdLl9pc1NwbGl0dGFibGU9ITE7cmV0dXJuITF9aWYodGhpcy5rZWVwJiYibm9uZSIhPT10aGlzLmtlZXAuaW50YWN0KXt0aGlzW0lzXS5faXNTcGxpdHRhYmxlPSExO3JldHVybiExfWlmKGUubGF5b3V0Py5lbmRzV2l0aCgiLXRiIikmJjAhPT1lW0lzXS5udW1iZXJJbkxpbmUpcmV0dXJuITE7dGhpc1tJc10uX2lzU3BsaXR0YWJsZT0hMDtyZXR1cm4hMH1bSW5dKGUpe3NldFRhYkluZGV4KHRoaXMpO2lmKHRoaXMuYnJlYWspe2lmKCJhdXRvIiE9PXRoaXMuYnJlYWsuYWZ0ZXJ8fCIiIT09dGhpcy5icmVhay5hZnRlclRhcmdldCl7Y29uc3QgZT1uZXcgQnJlYWtBZnRlcih7dGFyZ2V0VHlwZTp0aGlzLmJyZWFrLmFmdGVyLHRhcmdldDp0aGlzLmJyZWFrLmFmdGVyVGFyZ2V0LHN0YXJ0TmV3OnRoaXMuYnJlYWsuc3RhcnROZXcudG9TdHJpbmcoKX0pO2VbU3NdPXRoaXNbU3NdO3RoaXNbQXNdKGUpO3RoaXMuYnJlYWtBZnRlci5wdXNoKGUpfWlmKCJhdXRvIiE9PXRoaXMuYnJlYWsuYmVmb3JlfHwiIiE9PXRoaXMuYnJlYWsuYmVmb3JlVGFyZ2V0KXtjb25zdCBlPW5ldyBCcmVha0JlZm9yZSh7dGFyZ2V0VHlwZTp0aGlzLmJyZWFrLmJlZm9yZSx0YXJnZXQ6dGhpcy5icmVhay5iZWZvcmVUYXJnZXQsc3RhcnROZXc6dGhpcy5icmVhay5zdGFydE5ldy50b1N0cmluZygpfSk7ZVtTc109dGhpc1tTc107dGhpc1tBc10oZSk7dGhpcy5icmVha0JlZm9yZS5wdXNoKGUpfWlmKCIiIT09dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCl7Y29uc3QgZT1uZXcgT3ZlcmZsb3coe3RhcmdldDp0aGlzLmJyZWFrLm92ZXJmbG93VGFyZ2V0LGxlYWRlcjp0aGlzLmJyZWFrLm92ZXJmbG93TGVhZGVyLHRyYWlsZXI6dGhpcy5icmVhay5vdmVyZmxvd1RyYWlsZXJ9KTtlW1NzXT10aGlzW1NzXTt0aGlzW0FzXShlKTt0aGlzLm92ZXJmbG93LnB1c2goZSl9dGhpc1skc10odGhpcy5icmVhayk7dGhpcy5icmVhaz1udWxsfWlmKCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2UpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7KHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPjF8fHRoaXMuYnJlYWtBZnRlci5jaGlsZHJlbi5sZW5ndGg+MSkmJndhcm4oIlhGQSAtIFNldmVyYWwgYnJlYWtCZWZvcmUgb3IgYnJlYWtBZnRlciBpbiBzdWJmb3JtczogcGxlYXNlIGZpbGUgYSBidWcuIik7aWYodGhpcy5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTEpe2NvbnN0IGU9dGhpcy5icmVha0JlZm9yZS5jaGlsZHJlblswXTtpZihoYW5kbGVCcmVhayhlKSlyZXR1cm4gSFRNTFJlc3VsdC5icmVha05vZGUoZSl9aWYodGhpc1tJc10/LmFmdGVyQnJlYWtBZnRlcilyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTtmaXhEaW1lbnNpb25zKHRoaXMpO2NvbnN0IHQ9W10saT17aWQ6dGhpc1tobl0sY2xhc3M6W119O3NldEFjY2Vzcyh0aGlzLGkuY2xhc3MpO3RoaXNbSXNdfHwodGhpc1tJc109T2JqZWN0LmNyZWF0ZShudWxsKSk7T2JqZWN0LmFzc2lnbih0aGlzW0lzXSx7Y2hpbGRyZW46dCxsaW5lOm51bGwsYXR0cmlidXRlczppLGF0dGVtcHQ6MCxudW1iZXJJbkxpbmU6MCxhdmFpbGFibGVTcGFjZTp7d2lkdGg6TWF0aC5taW4odGhpcy53fHwxLzAsZS53aWR0aCksaGVpZ2h0Ok1hdGgubWluKHRoaXMuaHx8MS8wLGUuaGVpZ2h0KX0sd2lkdGg6MCxoZWlnaHQ6MCxwcmV2SGVpZ2h0OjAsY3VycmVudFdpZHRoOjB9KTtjb25zdCBhPXRoaXNbRnNdKCkscj1hW0lzXS5ub0xheW91dEZhaWx1cmUscz10aGlzW0pzXSgpO3N8fHNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCFjaGVja0RpbWVuc2lvbnModGhpcyxlKSlyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFO2NvbnN0IG49bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZXhjbEdyb3VwIiwiZmllbGQiLCJzdWJmb3JtIiwic3ViZm9ybVNldCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe2NvbnN0IGU9dGhpc1tic10oKS5jb2x1bW5XaWR0aHM7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7dGhpc1tJc10uY29sdW1uV2lkdGhzPWU7dGhpc1tJc10uY3VycmVudENvbHVtbj0wfX1jb25zdCBvPXRvU3R5bGUodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksZz1bInhmYVN1YmZvcm0iXSxjPWxheW91dENsYXNzKHRoaXMpO2MmJmcucHVzaChjKTtpLnN0eWxlPW87aS5jbGFzcz1nO3RoaXMubmFtZSYmKGkueGZhTmFtZT10aGlzLm5hbWUpO2lmKHRoaXMub3ZlcmZsb3cpe2NvbnN0IHQ9dGhpcy5vdmVyZmxvd1tmc10oKTtpZih0LmFkZExlYWRlcil7dC5hZGRMZWFkZXI9ITE7aGFuZGxlT3ZlcmZsb3codGhpcyx0LmxlYWRlcixlKX19dGhpc1t6c10oKTtjb25zdCBDPSJsci10YiI9PT10aGlzLmxheW91dHx8InJsLXRiIj09PXRoaXMubGF5b3V0LGg9Qz8yOjE7Zm9yKDt0aGlzW0lzXS5hdHRlbXB0PGg7dGhpc1tJc10uYXR0ZW1wdCsrKXtDJiYxPT09dGhpc1tJc10uYXR0ZW1wdCYmKHRoaXNbSXNdLm51bWJlckluTGluZT0wKTtjb25zdCBlPXRoaXNbZXNdKHtmaWx0ZXI6bixpbmNsdWRlOiEwfSk7aWYoZS5zdWNjZXNzKWJyZWFrO2lmKGUuaXNCcmVhaygpKXt0aGlzW19zXSgpO3JldHVybiBlfWlmKEMmJjA9PT10aGlzW0lzXS5hdHRlbXB0JiYwPT09dGhpc1tJc10ubnVtYmVySW5MaW5lJiYhYVtJc10ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW0lzXS5hdHRlbXB0PWg7YnJlYWt9fXRoaXNbX3NdKCk7c3x8dW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTthW0lzXS5ub0xheW91dEZhaWx1cmU9cjtpZih0aGlzW0lzXS5hdHRlbXB0PT09aCl7dGhpcy5vdmVyZmxvdyYmKHRoaXNbRnNdKClbSXNdLm92ZXJmbG93Tm9kZT10aGlzLm92ZXJmbG93KTtzfHxkZWxldGUgdGhpc1tJc107cmV0dXJuIEhUTUxSZXN1bHQuRkFJTFVSRX1pZih0aGlzLm92ZXJmbG93KXtjb25zdCB0PXRoaXMub3ZlcmZsb3dbZnNdKCk7aWYodC5hZGRUcmFpbGVyKXt0LmFkZFRyYWlsZXI9ITE7aGFuZGxlT3ZlcmZsb3codGhpcyx0LnRyYWlsZXIsZSl9fWxldCBsPTAsUT0wO2lmKHRoaXMubWFyZ2luKXtsPXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0O1E9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXR9Y29uc3QgRT1NYXRoLm1heCh0aGlzW0lzXS53aWR0aCtsLHRoaXMud3x8MCksdT1NYXRoLm1heCh0aGlzW0lzXS5oZWlnaHQrUSx0aGlzLmh8fDApLGQ9W3RoaXMueCx0aGlzLnksRSx1XTsiIj09PXRoaXMudyYmKG8ud2lkdGg9bWVhc3VyZVRvU3RyaW5nKEUpKTsiIj09PXRoaXMuaCYmKG8uaGVpZ2h0PW1lYXN1cmVUb1N0cmluZyh1KSk7aWYoKCIwcHgiPT09by53aWR0aHx8IjBweCI9PT1vLmhlaWdodCkmJjA9PT10Lmxlbmd0aClyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTtjb25zdCBmPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6aSxjaGlsZHJlbjp0fTthcHBseUFzc2lzdCh0aGlzLGkpO2NvbnN0IHA9SFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyxmKSxkKTtpZih0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPj0xKXtjb25zdCBlPXRoaXMuYnJlYWtBZnRlci5jaGlsZHJlblswXTtpZihoYW5kbGVCcmVhayhlKSl7dGhpc1tJc10uYWZ0ZXJCcmVha0FmdGVyPXA7cmV0dXJuIEhUTUxSZXN1bHQuYnJlYWtOb2RlKGUpfX1kZWxldGUgdGhpc1tJc107cmV0dXJuIHB9fWNsYXNzIFN1YmZvcm1TZXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sInN1YmZvcm1TZXQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsYXRpb249Z2V0U3RyaW5nT3B0aW9uKGUucmVsYXRpb24sWyJvcmRlcmVkIiwiY2hvaWNlIiwidW5vcmRlcmVkIl0pO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9va2VuZD1udWxsO3RoaXMuYnJlYWs9bnVsbDt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMub2NjdXI9bnVsbDt0aGlzLm92ZXJmbG93PW51bGw7dGhpcy5icmVha0FmdGVyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQmVmb3JlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm09bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybVNldD1uZXcgWEZBT2JqZWN0QXJyYXl9Klt5c10oKXt5aWVsZCpnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKX1bYnNdKCl7bGV0IGU9dGhpc1tEc10oKTtmb3IoOyEoZSBpbnN0YW5jZW9mIFN1YmZvcm0pOyllPWVbRHNdKCk7cmV0dXJuIGV9W1VzXSgpe3JldHVybiEwfX1jbGFzcyBTdWJqZWN0RE4gZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJzdWJqZWN0RE4iKTt0aGlzLmRlbGltaXRlcj1lLmRlbGltaXRlcnx8IiwiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtjc10oKXt0aGlzW25zXT1uZXcgTWFwKHRoaXNbbnNdLnNwbGl0KHRoaXMuZGVsaW1pdGVyKS5tYXAoKGU9PnsoZT1lLnNwbGl0KCI9IiwyKSlbMF09ZVswXS50cmltKCk7cmV0dXJuIGV9KSkpfX1jbGFzcyBTdWJqZWN0RE5zIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJzdWJqZWN0RE5zIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc3ViamVjdEROPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgU3VibWl0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJzdWJtaXQiLCEwKTt0aGlzLmVtYmVkUERGPWdldEludGVnZXIoe2RhdGE6ZS5lbWJlZFBERixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuZm9ybWF0PWdldFN0cmluZ09wdGlvbihlLmZvcm1hdCxbInhkcCIsImZvcm1kYXRhIiwicGRmIiwidXJsZW5jb2RlZCIsInhmZCIsInhtbCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnRleHRFbmNvZGluZz1nZXRLZXl3b3JkKHtkYXRhOmUudGV4dEVuY29kaW5nP2UudGV4dEVuY29kaW5nLnRvTG93ZXJDYXNlKCk6IiIsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PlsidXRmLTgiLCJiaWctZml2ZSIsImZvbnRzcGVjaWZpYyIsImdiayIsImdiLTE4MDMwIiwiZ2ItMjMxMiIsImtzYy01NjAxIiwibm9uZSIsInNoaWZ0LWppcyIsInVjcy0yIiwidXRmLTE2Il0uaW5jbHVkZXMoZSl8fGUubWF0Y2goL2lzby04ODU5LVxkezJ9Lyl9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy54ZHBDb250ZW50PWUueGRwQ29udGVudHx8IiI7dGhpcy5lbmNyeXB0PW51bGw7dGhpcy5lbmNyeXB0RGF0YT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zaWduRGF0YT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJ0ZW1wbGF0ZSIsITApO3RoaXMuYmFzZVByb2ZpbGU9Z2V0U3RyaW5nT3B0aW9uKGUuYmFzZVByb2ZpbGUsWyJmdWxsIiwiaW50ZXJhY3RpdmVGb3JtcyJdKTt0aGlzLmV4dHJhcz1udWxsO3RoaXMuc3ViZm9ybT1uZXcgWEZBT2JqZWN0QXJyYXl9W2NzXSgpezA9PT10aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoJiZ3YXJuKCJYRkEgLSBObyBzdWJmb3JtcyBpbiB0ZW1wbGF0ZSBub2RlLiIpO3RoaXMuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTImJndhcm4oIlhGQSAtIFNldmVyYWwgc3ViZm9ybXMgaW4gdGVtcGxhdGUgbm9kZTogcGxlYXNlIGZpbGUgYSBidWcuIik7dGhpc1tubl09NWUzfVtKc10oKXtyZXR1cm4hMH1bdG5dKGUsdCl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiIyIpP1t0aGlzW1JzXS5nZXQoZS5zbGljZSgxKSldOnNlYXJjaE5vZGUodGhpcyx0LGUsITAsITApfSpbZ25dKCl7aWYoIXRoaXMuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXX0pO3RoaXNbSXNdPXtvdmVyZmxvd05vZGU6bnVsbCxmaXJzdFVuc3BsaXR0YWJsZTpudWxsLGN1cnJlbnRDb250ZW50QXJlYTpudWxsLGN1cnJlbnRQYWdlQXJlYTpudWxsLG5vTGF5b3V0RmFpbHVyZTohMSxwYWdlTnVtYmVyOjEscGFnZVBvc2l0aW9uOiJmaXJzdCIsb2RkT3JFdmVuOiJvZGQiLGJsYW5rT3JOb3RCbGFuazoibm9uQmxhbmsiLHBhcmFTdGFjazpbXX07Y29uc3QgZT10aGlzLnN1YmZvcm0uY2hpbGRyZW5bMF07ZS5wYWdlU2V0W2lzXSgpO2NvbnN0IHQ9ZS5wYWdlU2V0LnBhZ2VBcmVhLmNoaWxkcmVuLGk9e25hbWU6ImRpdiIsY2hpbGRyZW46W119O2xldCBhPW51bGwscj1udWxsLHM9bnVsbDtpZihlLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD49MSl7cj1lLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO3M9ci50YXJnZXR9ZWxzZSBpZihlLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0xJiZlLnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xKXtyPWUuc3ViZm9ybS5jaGlsZHJlblswXS5icmVha0JlZm9yZS5jaGlsZHJlblswXTtzPXIudGFyZ2V0fWVsc2UgaWYoZS5icmVhaz8uYmVmb3JlVGFyZ2V0KXtyPWUuYnJlYWs7cz1yLmJlZm9yZVRhcmdldH1lbHNlIGlmKGUuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTEmJmUuc3ViZm9ybS5jaGlsZHJlblswXS5icmVhaz8uYmVmb3JlVGFyZ2V0KXtyPWUuc3ViZm9ybS5jaGlsZHJlblswXS5icmVhaztzPXIuYmVmb3JlVGFyZ2V0fWlmKHIpe2NvbnN0IGU9dGhpc1t0bl0ocyxyW0RzXSgpKTtpZihlIGluc3RhbmNlb2YgUGFnZUFyZWEpe2E9ZTtyW0lzXT17fX19YXx8KGE9dFswXSk7YVtJc109e251bWJlck9mVXNlOjF9O2NvbnN0IG49YVtEc10oKTtuW0lzXT17bnVtYmVyT2ZVc2U6MSxwYWdlSW5kZXg6bi5wYWdlQXJlYS5jaGlsZHJlbi5pbmRleE9mKGEpLHBhZ2VTZXRJbmRleDowfTtsZXQgbyxnPW51bGwsYz1udWxsLEM9ITAsaD0wLGw9MDtmb3IoOzspe2lmKEMpaD0wO2Vsc2V7aS5jaGlsZHJlbi5wb3AoKTtpZigzPT0rK2gpe3dhcm4oIlhGQSAtIFNvbWV0aGluZyBnb2VzIHdyb25nOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTtyZXR1cm4gaX19bz1udWxsO3RoaXNbSXNdLmN1cnJlbnRQYWdlQXJlYT1hO2NvbnN0IHQ9YVtJbl0oKS5odG1sO2kuY2hpbGRyZW4ucHVzaCh0KTtpZihnKXt0aGlzW0lzXS5ub0xheW91dEZhaWx1cmU9ITA7dC5jaGlsZHJlbi5wdXNoKGdbSW5dKGFbSXNdLnNwYWNlKS5odG1sKTtnPW51bGx9aWYoYyl7dGhpc1tJc10ubm9MYXlvdXRGYWlsdXJlPSEwO3QuY2hpbGRyZW4ucHVzaChjW0luXShhW0lzXS5zcGFjZSkuaHRtbCk7Yz1udWxsfWNvbnN0IHI9YS5jb250ZW50QXJlYS5jaGlsZHJlbixzPXQuY2hpbGRyZW4uZmlsdGVyKChlPT5lLmF0dHJpYnV0ZXMuY2xhc3MuaW5jbHVkZXMoInhmYUNvbnRlbnRhcmVhIikpKTtDPSExO3RoaXNbSXNdLmZpcnN0VW5zcGxpdHRhYmxlPW51bGw7dGhpc1tJc10ubm9MYXlvdXRGYWlsdXJlPSExO2NvbnN0IGZsdXNoPXQ9Pntjb25zdCBpPWVbQ3NdKCk7aWYoaSl7Q3x8PWkuY2hpbGRyZW4/Lmxlbmd0aD4wO3NbdF0uY2hpbGRyZW4ucHVzaChpKX19O2ZvcihsZXQgdD1sLGE9ci5sZW5ndGg7dDxhO3QrKyl7Y29uc3QgYT10aGlzW0lzXS5jdXJyZW50Q29udGVudEFyZWE9clt0XSxuPXt3aWR0aDphLncsaGVpZ2h0OmEuaH07bD0wO2lmKGcpe3NbdF0uY2hpbGRyZW4ucHVzaChnW0luXShuKS5odG1sKTtnPW51bGx9aWYoYyl7c1t0XS5jaGlsZHJlbi5wdXNoKGNbSW5dKG4pLmh0bWwpO2M9bnVsbH1jb25zdCBoPWVbSW5dKG4pO2lmKGguc3VjY2Vzcyl7aWYoaC5odG1sKXtDfHw9aC5odG1sLmNoaWxkcmVuPy5sZW5ndGg+MDtzW3RdLmNoaWxkcmVuLnB1c2goaC5odG1sKX1lbHNlIUMmJmkuY2hpbGRyZW4ubGVuZ3RoPjEmJmkuY2hpbGRyZW4ucG9wKCk7cmV0dXJuIGl9aWYoaC5pc0JyZWFrKCkpe2NvbnN0IGU9aC5icmVha05vZGU7Zmx1c2godCk7aWYoImF1dG8iPT09ZS50YXJnZXRUeXBlKWNvbnRpbnVlO2lmKGUubGVhZGVyKXtnPXRoaXNbdG5dKGUubGVhZGVyLGVbRHNdKCkpO2c9Zz9nWzBdOm51bGx9aWYoZS50cmFpbGVyKXtjPXRoaXNbdG5dKGUudHJhaWxlcixlW0RzXSgpKTtjPWM/Y1swXTpudWxsfWlmKCJwYWdlQXJlYSI9PT1lLnRhcmdldFR5cGUpe289ZVtJc10udGFyZ2V0O3Q9MS8wfWVsc2UgaWYoZVtJc10udGFyZ2V0KXtvPWVbSXNdLnRhcmdldDtsPWVbSXNdLmluZGV4KzE7dD0xLzB9ZWxzZSB0PWVbSXNdLmluZGV4fWVsc2UgaWYodGhpc1tJc10ub3ZlcmZsb3dOb2RlKXtjb25zdCBlPXRoaXNbSXNdLm92ZXJmbG93Tm9kZTt0aGlzW0lzXS5vdmVyZmxvd05vZGU9bnVsbDtjb25zdCBpPWVbZnNdKCksYT1pLnRhcmdldDtpLmFkZExlYWRlcj1udWxsIT09aS5sZWFkZXI7aS5hZGRUcmFpbGVyPW51bGwhPT1pLnRyYWlsZXI7Zmx1c2godCk7Y29uc3Qgcz10O3Q9MS8wO2lmKGEgaW5zdGFuY2VvZiBQYWdlQXJlYSlvPWE7ZWxzZSBpZihhIGluc3RhbmNlb2YgQ29udGVudEFyZWEpe2NvbnN0IGU9ci5pbmRleE9mKGEpO2lmKC0xIT09ZSllPnM/dD1lLTE6bD1lO2Vsc2V7bz1hW0RzXSgpO2w9by5jb250ZW50QXJlYS5jaGlsZHJlbi5pbmRleE9mKGEpfX19ZWxzZSBmbHVzaCh0KX10aGlzW0lzXS5wYWdlTnVtYmVyKz0xO28mJihvW1RzXSgpP29bSXNdLm51bWJlck9mVXNlKz0xOm89bnVsbCk7YT1vfHxhW3dzXSgpO3lpZWxkIG51bGx9fX1jbGFzcyBUZXh0IGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwidGV4dCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5tYXhDaGFycz1nZXRJbnRlZ2VyKHtkYXRhOmUubWF4Q2hhcnMsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmlkPWUucmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3pyXSgpe3JldHVybiEwfVtqc10oZSl7aWYoZVtxc109PT1Cbi54aHRtbC5pZCl7dGhpc1tuc109ZTtyZXR1cm4hMH13YXJuKGBYRkEgLSBJbnZhbGlkIGNvbnRlbnQgaW4gVGV4dDogJHtlW09zXX0uYCk7cmV0dXJuITF9W1pzXShlKXt0aGlzW25zXWluc3RhbmNlb2YgWEZBT2JqZWN0fHxzdXBlcltac10oZSl9W2NzXSgpeyJzdHJpbmciPT10eXBlb2YgdGhpc1tuc10mJih0aGlzW25zXT10aGlzW25zXS5yZXBsYWNlQWxsKCJcclxuIiwiXG4iKSl9W2ZzXSgpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdGhpc1tuc10/dGhpc1tuc10uc3BsaXQoL1tcdTIwMjlcdTIwMjhcbl0vKS5yZWR1Y2UoKChlLHQpPT57dCYmZS5wdXNoKHQpO3JldHVybiBlfSksW10pLmpvaW4oIlxuIik6dGhpc1tuc11bb25dKCl9W0luXShlKXtpZigic3RyaW5nIj09dHlwZW9mIHRoaXNbbnNdKXtjb25zdCBlPXZhbHVlVG9IdG1sKHRoaXNbbnNdKS5odG1sO2lmKHRoaXNbbnNdLmluY2x1ZGVzKCJcdTIwMjkiKSl7ZS5uYW1lPSJkaXYiO2UuY2hpbGRyZW49W107dGhpc1tuc10uc3BsaXQoIlx1MjAyOSIpLm1hcCgoZT0+ZS5zcGxpdCgvW1x1MjAyOFxuXS8pLnJlZHVjZSgoKGUsdCk9PntlLnB1c2goe25hbWU6InNwYW4iLHZhbHVlOnR9LHtuYW1lOiJiciJ9KTtyZXR1cm4gZX0pLFtdKSkpLmZvckVhY2goKHQ9PntlLmNoaWxkcmVuLnB1c2goe25hbWU6InAiLGNoaWxkcmVuOnR9KX0pKX1lbHNlIGlmKC9bXHUyMDI4XG5dLy50ZXN0KHRoaXNbbnNdKSl7ZS5uYW1lPSJkaXYiO2UuY2hpbGRyZW49W107dGhpc1tuc10uc3BsaXQoL1tcdTIwMjhcbl0vKS5mb3JFYWNoKCh0PT57ZS5jaGlsZHJlbi5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTp0fSx7bmFtZToiYnIifSl9KSl9cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhlKX1yZXR1cm4gdGhpc1tuc11bSW5dKGUpfX1jbGFzcyBUZXh0RWRpdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwidGV4dEVkaXQiLCEwKTt0aGlzLmFsbG93UmljaFRleHQ9Z2V0SW50ZWdlcih7ZGF0YTplLmFsbG93UmljaFRleHQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmhTY3JvbGxQb2xpY3k9Z2V0U3RyaW5nT3B0aW9uKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubXVsdGlMaW5lPWdldEludGVnZXIoe2RhdGE6ZS5tdWx0aUxpbmUsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PjA9PT1lfHwxPT09ZX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnZTY3JvbGxQb2xpY3k9Z2V0U3RyaW5nT3B0aW9uKGUudlNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY29tYj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bSW5dKGUpe2NvbnN0IHQ9dG9TdHlsZSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIik7bGV0IGk7Y29uc3QgYT10aGlzW0RzXSgpW0RzXSgpOyIiPT09dGhpcy5tdWx0aUxpbmUmJih0aGlzLm11bHRpTGluZT1hIGluc3RhbmNlb2YgRHJhdz8xOjApO2k9MT09PXRoaXMubXVsdGlMaW5lP3tuYW1lOiJ0ZXh0YXJlYSIsYXR0cmlidXRlczp7ZGF0YUlkOmFbb3NdPy5baG5dfHxhW2huXSxmaWVsZElkOmFbaG5dLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKGEpLCJhcmlhLXJlcXVpcmVkIjohMX19OntuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7dHlwZToidGV4dCIsZGF0YUlkOmFbb3NdPy5baG5dfHxhW2huXSxmaWVsZElkOmFbaG5dLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKGEpLCJhcmlhLXJlcXVpcmVkIjohMX19O2lmKGlzUmVxdWlyZWQoYSkpe2kuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO2kuYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbaV19KX19Y2xhc3MgVGltZSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwidGltZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtjc10oKXtjb25zdCBlPXRoaXNbbnNdLnRyaW0oKTt0aGlzW25zXT1lP25ldyBEYXRlKGUpOm51bGx9W0luXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tuc10/dGhpc1tuc10udG9TdHJpbmcoKToiIil9fWNsYXNzIFRpbWVTdGFtcCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwidGltZVN0YW1wIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnNlcnZlcj1lLnNlcnZlcnx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgVG9vbFRpcCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwidG9vbFRpcCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5yaWQ9ZS5yaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgVHJhdmVyc2FsIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJ0cmF2ZXJzYWwiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMudHJhdmVyc2U9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBUcmF2ZXJzZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwidHJhdmVyc2UiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3BlcmF0aW9uPWdldFN0cmluZ09wdGlvbihlLm9wZXJhdGlvbixbIm5leHQiLCJiYWNrIiwiZG93biIsImZpcnN0IiwibGVmdCIsInJpZ2h0IiwidXAiXSk7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMuc2NyaXB0PW51bGx9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5vcGVyYXRpb259W1lzXSgpe3JldHVybiExfX1jbGFzcyBVaSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwidWkiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMucGljdHVyZT1udWxsO3RoaXMuYmFyY29kZT1udWxsO3RoaXMuYnV0dG9uPW51bGw7dGhpcy5jaGVja0J1dHRvbj1udWxsO3RoaXMuY2hvaWNlTGlzdD1udWxsO3RoaXMuZGF0ZVRpbWVFZGl0PW51bGw7dGhpcy5kZWZhdWx0VWk9bnVsbDt0aGlzLmltYWdlRWRpdD1udWxsO3RoaXMubnVtZXJpY0VkaXQ9bnVsbDt0aGlzLnBhc3N3b3JkRWRpdD1udWxsO3RoaXMuc2lnbmF0dXJlPW51bGw7dGhpcy50ZXh0RWRpdD1udWxsfVtmc10oKXtpZih2b2lkIDA9PT10aGlzW0lzXSl7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKCJleHRyYXMiPT09ZXx8InBpY3R1cmUiPT09ZSljb250aW51ZTtjb25zdCB0PXRoaXNbZV07aWYodCBpbnN0YW5jZW9mIFhGQU9iamVjdCl7dGhpc1tJc109dDtyZXR1cm4gdH19dGhpc1tJc109bnVsbH1yZXR1cm4gdGhpc1tJc119W0luXShlKXtjb25zdCB0PXRoaXNbZnNdKCk7cmV0dXJuIHQ/dFtJbl0oZSk6SFRNTFJlc3VsdC5FTVBUWX19Y2xhc3MgVmFsaWRhdGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sInZhbGlkYXRlIiwhMCk7dGhpcy5mb3JtYXRUZXN0PWdldFN0cmluZ09wdGlvbihlLmZvcm1hdFRlc3QsWyJ3YXJuaW5nIiwiZGlzYWJsZWQiLCJlcnJvciJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubnVsbFRlc3Q9Z2V0U3RyaW5nT3B0aW9uKGUubnVsbFRlc3QsWyJkaXNhYmxlZCIsImVycm9yIiwid2FybmluZyJdKTt0aGlzLnNjcmlwdFRlc3Q9Z2V0U3RyaW5nT3B0aW9uKGUuc2NyaXB0VGVzdCxbImVycm9yIiwiZGlzYWJsZWQiLCJ3YXJuaW5nIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWVzc2FnZT1udWxsO3RoaXMucGljdHVyZT1udWxsO3RoaXMuc2NyaXB0PW51bGx9fWNsYXNzIFZhbHVlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHFuLCJ2YWx1ZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vdmVycmlkZT1nZXRJbnRlZ2VyKHtkYXRhOmUub3ZlcnJpZGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmFyYz1udWxsO3RoaXMuYm9vbGVhbj1udWxsO3RoaXMuZGF0ZT1udWxsO3RoaXMuZGF0ZVRpbWU9bnVsbDt0aGlzLmRlY2ltYWw9bnVsbDt0aGlzLmV4RGF0YT1udWxsO3RoaXMuZmxvYXQ9bnVsbDt0aGlzLmltYWdlPW51bGw7dGhpcy5pbnRlZ2VyPW51bGw7dGhpcy5saW5lPW51bGw7dGhpcy5yZWN0YW5nbGU9bnVsbDt0aGlzLnRleHQ9bnVsbDt0aGlzLnRpbWU9bnVsbH1bc25dKGUpe2NvbnN0IHQ9dGhpc1tEc10oKTtpZih0IGluc3RhbmNlb2YgRmllbGQmJnQudWk/LmltYWdlRWRpdCl7aWYoIXRoaXMuaW1hZ2Upe3RoaXMuaW1hZ2U9bmV3IEltYWdlKHt9KTt0aGlzW0FzXSh0aGlzLmltYWdlKX10aGlzLmltYWdlW25zXT1lW25zXTtyZXR1cm59Y29uc3QgaT1lW09zXTtpZihudWxsPT09dGhpc1tpXSl7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2NvbnN0IHQ9dGhpc1tlXTtpZih0IGluc3RhbmNlb2YgWEZBT2JqZWN0KXt0aGlzW2VdPW51bGw7dGhpc1skc10odCl9fXRoaXNbZVtPc11dPWU7dGhpc1tBc10oZSl9ZWxzZSB0aGlzW2ldW25zXT1lW25zXX1bb25dKCl7aWYodGhpcy5leERhdGEpcmV0dXJuInN0cmluZyI9PXR5cGVvZiB0aGlzLmV4RGF0YVtuc10/dGhpcy5leERhdGFbbnNdLnRyaW0oKTp0aGlzLmV4RGF0YVtuc11bb25dKCkudHJpbSgpO2Zvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZigiaW1hZ2UiPT09ZSljb250aW51ZTtjb25zdCB0PXRoaXNbZV07aWYodCBpbnN0YW5jZW9mIFhGQU9iamVjdClyZXR1cm4odFtuc118fCIiKS50b1N0cmluZygpLnRyaW0oKX1yZXR1cm4gbnVsbH1bSW5dKGUpe2Zvcihjb25zdCB0IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtjb25zdCBpPXRoaXNbdF07aWYoaSBpbnN0YW5jZW9mIFhGQU9iamVjdClyZXR1cm4gaVtJbl0oZSl9cmV0dXJuIEhUTUxSZXN1bHQuRU1QVFl9fWNsYXNzIFZhcmlhYmxlcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihxbiwidmFyaWFibGVzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib29sZWFuPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGVjaW1hbD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2U9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5tYW5pZmVzdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zY3JpcHQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyBYRkFPYmplY3RBcnJheX1bWXNdKCl7cmV0dXJuITB9fWNsYXNzIFRlbXBsYXRlTmFtZXNwYWNle3N0YXRpY1tsbl0oZSx0KXtpZihUZW1wbGF0ZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSl7Y29uc3QgaT1UZW1wbGF0ZU5hbWVzcGFjZVtlXSh0KTtpW3JuXSh0KTtyZXR1cm4gaX19c3RhdGljIGFwcGVhcmFuY2VGaWx0ZXIoZSl7cmV0dXJuIG5ldyBBcHBlYXJhbmNlRmlsdGVyKGUpfXN0YXRpYyBhcmMoZSl7cmV0dXJuIG5ldyBBcmMoZSl9c3RhdGljIGFyZWEoZSl7cmV0dXJuIG5ldyBBcmVhKGUpfXN0YXRpYyBhc3Npc3QoZSl7cmV0dXJuIG5ldyBBc3Npc3QoZSl9c3RhdGljIGJhcmNvZGUoZSl7cmV0dXJuIG5ldyBCYXJjb2RlKGUpfXN0YXRpYyBiaW5kKGUpe3JldHVybiBuZXcgQmluZChlKX1zdGF0aWMgYmluZEl0ZW1zKGUpe3JldHVybiBuZXcgQmluZEl0ZW1zKGUpfXN0YXRpYyBib29rZW5kKGUpe3JldHVybiBuZXcgQm9va2VuZChlKX1zdGF0aWMgYm9vbGVhbihlKXtyZXR1cm4gbmV3IEJvb2xlYW5FbGVtZW50KGUpfXN0YXRpYyBib3JkZXIoZSl7cmV0dXJuIG5ldyBCb3JkZXIoZSl9c3RhdGljIGJyZWFrKGUpe3JldHVybiBuZXcgQnJlYWsoZSl9c3RhdGljIGJyZWFrQWZ0ZXIoZSl7cmV0dXJuIG5ldyBCcmVha0FmdGVyKGUpfXN0YXRpYyBicmVha0JlZm9yZShlKXtyZXR1cm4gbmV3IEJyZWFrQmVmb3JlKGUpfXN0YXRpYyBidXR0b24oZSl7cmV0dXJuIG5ldyBCdXR0b24oZSl9c3RhdGljIGNhbGN1bGF0ZShlKXtyZXR1cm4gbmV3IENhbGN1bGF0ZShlKX1zdGF0aWMgY2FwdGlvbihlKXtyZXR1cm4gbmV3IENhcHRpb24oZSl9c3RhdGljIGNlcnRpZmljYXRlKGUpe3JldHVybiBuZXcgQ2VydGlmaWNhdGUoZSl9c3RhdGljIGNlcnRpZmljYXRlcyhlKXtyZXR1cm4gbmV3IENlcnRpZmljYXRlcyhlKX1zdGF0aWMgY2hlY2tCdXR0b24oZSl7cmV0dXJuIG5ldyBDaGVja0J1dHRvbihlKX1zdGF0aWMgY2hvaWNlTGlzdChlKXtyZXR1cm4gbmV3IENob2ljZUxpc3QoZSl9c3RhdGljIGNvbG9yKGUpe3JldHVybiBuZXcgQ29sb3IoZSl9c3RhdGljIGNvbWIoZSl7cmV0dXJuIG5ldyBDb21iKGUpfXN0YXRpYyBjb25uZWN0KGUpe3JldHVybiBuZXcgQ29ubmVjdChlKX1zdGF0aWMgY29udGVudEFyZWEoZSl7cmV0dXJuIG5ldyBDb250ZW50QXJlYShlKX1zdGF0aWMgY29ybmVyKGUpe3JldHVybiBuZXcgQ29ybmVyKGUpfXN0YXRpYyBkYXRlKGUpe3JldHVybiBuZXcgRGF0ZUVsZW1lbnQoZSl9c3RhdGljIGRhdGVUaW1lKGUpe3JldHVybiBuZXcgRGF0ZVRpbWUoZSl9c3RhdGljIGRhdGVUaW1lRWRpdChlKXtyZXR1cm4gbmV3IERhdGVUaW1lRWRpdChlKX1zdGF0aWMgZGVjaW1hbChlKXtyZXR1cm4gbmV3IERlY2ltYWwoZSl9c3RhdGljIGRlZmF1bHRVaShlKXtyZXR1cm4gbmV3IERlZmF1bHRVaShlKX1zdGF0aWMgZGVzYyhlKXtyZXR1cm4gbmV3IERlc2MoZSl9c3RhdGljIGRpZ2VzdE1ldGhvZChlKXtyZXR1cm4gbmV3IERpZ2VzdE1ldGhvZChlKX1zdGF0aWMgZGlnZXN0TWV0aG9kcyhlKXtyZXR1cm4gbmV3IERpZ2VzdE1ldGhvZHMoZSl9c3RhdGljIGRyYXcoZSl7cmV0dXJuIG5ldyBEcmF3KGUpfXN0YXRpYyBlZGdlKGUpe3JldHVybiBuZXcgRWRnZShlKX1zdGF0aWMgZW5jb2RpbmcoZSl7cmV0dXJuIG5ldyBFbmNvZGluZyhlKX1zdGF0aWMgZW5jb2RpbmdzKGUpe3JldHVybiBuZXcgRW5jb2RpbmdzKGUpfXN0YXRpYyBlbmNyeXB0KGUpe3JldHVybiBuZXcgRW5jcnlwdChlKX1zdGF0aWMgZW5jcnlwdERhdGEoZSl7cmV0dXJuIG5ldyBFbmNyeXB0RGF0YShlKX1zdGF0aWMgZW5jcnlwdGlvbihlKXtyZXR1cm4gbmV3IEVuY3J5cHRpb24oZSl9c3RhdGljIGVuY3J5cHRpb25NZXRob2QoZSl7cmV0dXJuIG5ldyBFbmNyeXB0aW9uTWV0aG9kKGUpfXN0YXRpYyBlbmNyeXB0aW9uTWV0aG9kcyhlKXtyZXR1cm4gbmV3IEVuY3J5cHRpb25NZXRob2RzKGUpfXN0YXRpYyBldmVudChlKXtyZXR1cm4gbmV3IEV2ZW50KGUpfXN0YXRpYyBleERhdGEoZSl7cmV0dXJuIG5ldyBFeERhdGEoZSl9c3RhdGljIGV4T2JqZWN0KGUpe3JldHVybiBuZXcgRXhPYmplY3QoZSl9c3RhdGljIGV4Y2xHcm91cChlKXtyZXR1cm4gbmV3IEV4Y2xHcm91cChlKX1zdGF0aWMgZXhlY3V0ZShlKXtyZXR1cm4gbmV3IEV4ZWN1dGUoZSl9c3RhdGljIGV4dHJhcyhlKXtyZXR1cm4gbmV3IEV4dHJhcyhlKX1zdGF0aWMgZmllbGQoZSl7cmV0dXJuIG5ldyBGaWVsZChlKX1zdGF0aWMgZmlsbChlKXtyZXR1cm4gbmV3IEZpbGwoZSl9c3RhdGljIGZpbHRlcihlKXtyZXR1cm4gbmV3IEZpbHRlcihlKX1zdGF0aWMgZmxvYXQoZSl7cmV0dXJuIG5ldyBGbG9hdChlKX1zdGF0aWMgZm9udChlKXtyZXR1cm4gbmV3IHRlbXBsYXRlX0ZvbnQoZSl9c3RhdGljIGZvcm1hdChlKXtyZXR1cm4gbmV3IEZvcm1hdChlKX1zdGF0aWMgaGFuZGxlcihlKXtyZXR1cm4gbmV3IEhhbmRsZXIoZSl9c3RhdGljIGh5cGhlbmF0aW9uKGUpe3JldHVybiBuZXcgSHlwaGVuYXRpb24oZSl9c3RhdGljIGltYWdlKGUpe3JldHVybiBuZXcgSW1hZ2UoZSl9c3RhdGljIGltYWdlRWRpdChlKXtyZXR1cm4gbmV3IEltYWdlRWRpdChlKX1zdGF0aWMgaW50ZWdlcihlKXtyZXR1cm4gbmV3IEludGVnZXIoZSl9c3RhdGljIGlzc3VlcnMoZSl7cmV0dXJuIG5ldyBJc3N1ZXJzKGUpfXN0YXRpYyBpdGVtcyhlKXtyZXR1cm4gbmV3IEl0ZW1zKGUpfXN0YXRpYyBrZWVwKGUpe3JldHVybiBuZXcgS2VlcChlKX1zdGF0aWMga2V5VXNhZ2UoZSl7cmV0dXJuIG5ldyBLZXlVc2FnZShlKX1zdGF0aWMgbGluZShlKXtyZXR1cm4gbmV3IExpbmUoZSl9c3RhdGljIGxpbmVhcihlKXtyZXR1cm4gbmV3IExpbmVhcihlKX1zdGF0aWMgbG9ja0RvY3VtZW50KGUpe3JldHVybiBuZXcgTG9ja0RvY3VtZW50KGUpfXN0YXRpYyBtYW5pZmVzdChlKXtyZXR1cm4gbmV3IE1hbmlmZXN0KGUpfXN0YXRpYyBtYXJnaW4oZSl7cmV0dXJuIG5ldyBNYXJnaW4oZSl9c3RhdGljIG1kcChlKXtyZXR1cm4gbmV3IE1kcChlKX1zdGF0aWMgbWVkaXVtKGUpe3JldHVybiBuZXcgTWVkaXVtKGUpfXN0YXRpYyBtZXNzYWdlKGUpe3JldHVybiBuZXcgTWVzc2FnZShlKX1zdGF0aWMgbnVtZXJpY0VkaXQoZSl7cmV0dXJuIG5ldyBOdW1lcmljRWRpdChlKX1zdGF0aWMgb2NjdXIoZSl7cmV0dXJuIG5ldyBPY2N1cihlKX1zdGF0aWMgb2lkKGUpe3JldHVybiBuZXcgT2lkKGUpfXN0YXRpYyBvaWRzKGUpe3JldHVybiBuZXcgT2lkcyhlKX1zdGF0aWMgb3ZlcmZsb3coZSl7cmV0dXJuIG5ldyBPdmVyZmxvdyhlKX1zdGF0aWMgcGFnZUFyZWEoZSl7cmV0dXJuIG5ldyBQYWdlQXJlYShlKX1zdGF0aWMgcGFnZVNldChlKXtyZXR1cm4gbmV3IFBhZ2VTZXQoZSl9c3RhdGljIHBhcmEoZSl7cmV0dXJuIG5ldyBQYXJhKGUpfXN0YXRpYyBwYXNzd29yZEVkaXQoZSl7cmV0dXJuIG5ldyBQYXNzd29yZEVkaXQoZSl9c3RhdGljIHBhdHRlcm4oZSl7cmV0dXJuIG5ldyB0ZW1wbGF0ZV9QYXR0ZXJuKGUpfXN0YXRpYyBwaWN0dXJlKGUpe3JldHVybiBuZXcgUGljdHVyZShlKX1zdGF0aWMgcHJvdG8oZSl7cmV0dXJuIG5ldyBQcm90byhlKX1zdGF0aWMgcmFkaWFsKGUpe3JldHVybiBuZXcgUmFkaWFsKGUpfXN0YXRpYyByZWFzb24oZSl7cmV0dXJuIG5ldyBSZWFzb24oZSl9c3RhdGljIHJlYXNvbnMoZSl7cmV0dXJuIG5ldyBSZWFzb25zKGUpfXN0YXRpYyByZWN0YW5nbGUoZSl7cmV0dXJuIG5ldyBSZWN0YW5nbGUoZSl9c3RhdGljIHJlZihlKXtyZXR1cm4gbmV3IFJlZkVsZW1lbnQoZSl9c3RhdGljIHNjcmlwdChlKXtyZXR1cm4gbmV3IFNjcmlwdChlKX1zdGF0aWMgc2V0UHJvcGVydHkoZSl7cmV0dXJuIG5ldyBTZXRQcm9wZXJ0eShlKX1zdGF0aWMgc2lnbkRhdGEoZSl7cmV0dXJuIG5ldyBTaWduRGF0YShlKX1zdGF0aWMgc2lnbmF0dXJlKGUpe3JldHVybiBuZXcgU2lnbmF0dXJlKGUpfXN0YXRpYyBzaWduaW5nKGUpe3JldHVybiBuZXcgU2lnbmluZyhlKX1zdGF0aWMgc29saWQoZSl7cmV0dXJuIG5ldyBTb2xpZChlKX1zdGF0aWMgc3BlYWsoZSl7cmV0dXJuIG5ldyBTcGVhayhlKX1zdGF0aWMgc3RpcHBsZShlKXtyZXR1cm4gbmV3IFN0aXBwbGUoZSl9c3RhdGljIHN1YmZvcm0oZSl7cmV0dXJuIG5ldyBTdWJmb3JtKGUpfXN0YXRpYyBzdWJmb3JtU2V0KGUpe3JldHVybiBuZXcgU3ViZm9ybVNldChlKX1zdGF0aWMgc3ViamVjdEROKGUpe3JldHVybiBuZXcgU3ViamVjdEROKGUpfXN0YXRpYyBzdWJqZWN0RE5zKGUpe3JldHVybiBuZXcgU3ViamVjdEROcyhlKX1zdGF0aWMgc3VibWl0KGUpe3JldHVybiBuZXcgU3VibWl0KGUpfXN0YXRpYyB0ZW1wbGF0ZShlKXtyZXR1cm4gbmV3IFRlbXBsYXRlKGUpfXN0YXRpYyB0ZXh0KGUpe3JldHVybiBuZXcgVGV4dChlKX1zdGF0aWMgdGV4dEVkaXQoZSl7cmV0dXJuIG5ldyBUZXh0RWRpdChlKX1zdGF0aWMgdGltZShlKXtyZXR1cm4gbmV3IFRpbWUoZSl9c3RhdGljIHRpbWVTdGFtcChlKXtyZXR1cm4gbmV3IFRpbWVTdGFtcChlKX1zdGF0aWMgdG9vbFRpcChlKXtyZXR1cm4gbmV3IFRvb2xUaXAoZSl9c3RhdGljIHRyYXZlcnNhbChlKXtyZXR1cm4gbmV3IFRyYXZlcnNhbChlKX1zdGF0aWMgdHJhdmVyc2UoZSl7cmV0dXJuIG5ldyBUcmF2ZXJzZShlKX1zdGF0aWMgdWkoZSl7cmV0dXJuIG5ldyBVaShlKX1zdGF0aWMgdmFsaWRhdGUoZSl7cmV0dXJuIG5ldyBWYWxpZGF0ZShlKX1zdGF0aWMgdmFsdWUoZSl7cmV0dXJuIG5ldyBWYWx1ZShlKX1zdGF0aWMgdmFyaWFibGVzKGUpe3JldHVybiBuZXcgVmFyaWFibGVzKGUpfX1jb25zdCBYbj1Cbi5kYXRhc2V0cy5pZDtmdW5jdGlvbiBjcmVhdGVUZXh0KGUpe2NvbnN0IHQ9bmV3IFRleHQoe30pO3RbbnNdPWU7cmV0dXJuIHR9Y2xhc3MgQmluZGVye2NvbnN0cnVjdG9yKGUpe3RoaXMucm9vdD1lO3RoaXMuZGF0YXNldHM9ZS5kYXRhc2V0czt0aGlzLmRhdGE9ZS5kYXRhc2V0cz8uZGF0YXx8bmV3IFhtbE9iamVjdChCbi5kYXRhc2V0cy5pZCwiZGF0YSIpO3RoaXMuZW1wdHlNZXJnZT0wPT09dGhpcy5kYXRhW21zXSgpLmxlbmd0aDt0aGlzLnJvb3QuZm9ybT10aGlzLmZvcm09ZS50ZW1wbGF0ZVtyc10oKX1faXNDb25zdW1lRGF0YSgpe3JldHVybiF0aGlzLmVtcHR5TWVyZ2UmJnRoaXMuX21lcmdlTW9kZX1faXNNYXRjaFRlbXBsYXRlKCl7cmV0dXJuIXRoaXMuX2lzQ29uc3VtZURhdGEoKX1iaW5kKCl7dGhpcy5fYmluZEVsZW1lbnQodGhpcy5mb3JtLHRoaXMuZGF0YSk7cmV0dXJuIHRoaXMuZm9ybX1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1fYmluZFZhbHVlKGUsdCxpKXtlW29zXT10O2lmKGVba3NdKCkpaWYodFtNc10oKSl7Y29uc3QgaT10W2RzXSgpO2Vbc25dKGNyZWF0ZVRleHQoaSkpfWVsc2UgaWYoZSBpbnN0YW5jZW9mIEZpZWxkJiYibXVsdGlTZWxlY3QiPT09ZS51aT8uY2hvaWNlTGlzdD8ub3Blbil7Y29uc3QgaT10W21zXSgpLm1hcCgoZT0+ZVtuc10udHJpbSgpKSkuam9pbigiXG4iKTtlW3NuXShjcmVhdGVUZXh0KGkpKX1lbHNlIHRoaXMuX2lzQ29uc3VtZURhdGEoKSYmd2FybigiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpO2Vsc2UhdFtNc10oKXx8dGhpcy5faXNNYXRjaFRlbXBsYXRlKCk/dGhpcy5fYmluZEVsZW1lbnQoZSx0KTp3YXJuKCJYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuIil9X2ZpbmREYXRhQnlOYW1lVG9Db25zdW1lKGUsdCxpLGEpe2lmKCFlKXJldHVybiBudWxsO2xldCByLHM7Zm9yKGxldCBhPTA7YTwzO2ErKyl7cj1pW3BzXShlLCExLCEwKTtmb3IoOzspe3M9ci5uZXh0KCkudmFsdWU7aWYoIXMpYnJlYWs7aWYodD09PXNbTXNdKCkpcmV0dXJuIHN9aWYoaVtxc109PT1Cbi5kYXRhc2V0cy5pZCYmImRhdGEiPT09aVtPc10pYnJlYWs7aT1pW0RzXSgpfWlmKCFhKXJldHVybiBudWxsO3I9dGhpcy5kYXRhW3BzXShlLCEwLCExKTtzPXIubmV4dCgpLnZhbHVlO2lmKHMpcmV0dXJuIHM7cj10aGlzLmRhdGFbaHNdKGUsITApO3M9ci5uZXh0KCkudmFsdWU7cmV0dXJuIHM/LltNc10oKT9zOm51bGx9X3NldFByb3BlcnRpZXMoZSx0KXtpZihlLmhhc093blByb3BlcnR5KCJzZXRQcm9wZXJ0eSIpKWZvcihjb25zdHtyZWY6aSx0YXJnZXQ6YSxjb25uZWN0aW9uOnJ9b2YgZS5zZXRQcm9wZXJ0eS5jaGlsZHJlbil7aWYociljb250aW51ZTtpZighaSljb250aW51ZTtjb25zdCBzPXNlYXJjaE5vZGUodGhpcy5yb290LHQsaSwhMSwhMSk7aWYoIXMpe3dhcm4oYFhGQSAtIEludmFsaWQgcmVmZXJlbmNlOiAke2l9LmApO2NvbnRpbnVlfWNvbnN0W25dPXM7aWYoIW5bTHNdKHRoaXMuZGF0YSkpe3dhcm4oIlhGQSAtIEludmFsaWQgbm9kZTogbXVzdCBiZSBhIGRhdGEgbm9kZS4iKTtjb250aW51ZX1jb25zdCBvPXNlYXJjaE5vZGUodGhpcy5yb290LGUsYSwhMSwhMSk7aWYoIW8pe3dhcm4oYFhGQSAtIEludmFsaWQgdGFyZ2V0OiAke2F9LmApO2NvbnRpbnVlfWNvbnN0W2ddPW87aWYoIWdbTHNdKGUpKXt3YXJuKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogbXVzdCBiZSBhIHByb3BlcnR5IG9yIHN1YnByb3BlcnR5LiIpO2NvbnRpbnVlfWNvbnN0IGM9Z1tEc10oKTtpZihnIGluc3RhbmNlb2YgU2V0UHJvcGVydHl8fGMgaW5zdGFuY2VvZiBTZXRQcm9wZXJ0eSl7d2FybigiWEZBIC0gSW52YWxpZCB0YXJnZXQ6IGNhbm5vdCBiZSBhIHNldFByb3BlcnR5IG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtjb250aW51ZX1pZihnIGluc3RhbmNlb2YgQmluZEl0ZW1zfHxjIGluc3RhbmNlb2YgQmluZEl0ZW1zKXt3YXJuKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgYmluZEl0ZW1zIG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtjb250aW51ZX1jb25zdCBDPW5bb25dKCksaD1nW09zXTtpZihnIGluc3RhbmNlb2YgWEZBQXR0cmlidXRlKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7ZVtoXT1DO2NvbnN0IHQ9UmVmbGVjdC5jb25zdHJ1Y3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKGMpLmNvbnN0cnVjdG9yLFtlXSk7Y1toXT10W2hdfWVsc2UgaWYoZy5oYXNPd25Qcm9wZXJ0eShucykpe2dbb3NdPW47Z1tuc109QztnW2NzXSgpfWVsc2Ugd2FybigiWEZBIC0gSW52YWxpZCBub2RlIHRvIHVzZSBpbiBzZXRQcm9wZXJ0eSIpfX1fYmluZEl0ZW1zKGUsdCl7aWYoIWUuaGFzT3duUHJvcGVydHkoIml0ZW1zIil8fCFlLmhhc093blByb3BlcnR5KCJiaW5kSXRlbXMiKXx8ZS5iaW5kSXRlbXMuaXNFbXB0eSgpKXJldHVybjtmb3IoY29uc3QgdCBvZiBlLml0ZW1zLmNoaWxkcmVuKWVbJHNdKHQpO2UuaXRlbXMuY2xlYXIoKTtjb25zdCBpPW5ldyBJdGVtcyh7fSksYT1uZXcgSXRlbXMoe30pO2VbQXNdKGkpO2UuaXRlbXMucHVzaChpKTtlW0FzXShhKTtlLml0ZW1zLnB1c2goYSk7Zm9yKGNvbnN0e3JlZjpyLGxhYmVsUmVmOnMsdmFsdWVSZWY6bixjb25uZWN0aW9uOm99b2YgZS5iaW5kSXRlbXMuY2hpbGRyZW4pe2lmKG8pY29udGludWU7aWYoIXIpY29udGludWU7Y29uc3QgZT1zZWFyY2hOb2RlKHRoaXMucm9vdCx0LHIsITEsITEpO2lmKGUpZm9yKGNvbnN0IHQgb2YgZSl7aWYoIXRbTHNdKHRoaXMuZGF0YXNldHMpKXt3YXJuKGBYRkEgLSBJbnZhbGlkIHJlZiAoJHtyfSk6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC5gKTtjb250aW51ZX1jb25zdCBlPXNlYXJjaE5vZGUodGhpcy5yb290LHQscywhMCwhMSk7aWYoIWUpe3dhcm4oYFhGQSAtIEludmFsaWQgbGFiZWw6ICR7c30uYCk7Y29udGludWV9Y29uc3Rbb109ZTtpZighb1tMc10odGhpcy5kYXRhc2V0cykpe3dhcm4oIlhGQSAtIEludmFsaWQgbGFiZWw6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC4iKTtjb250aW51ZX1jb25zdCBnPXNlYXJjaE5vZGUodGhpcy5yb290LHQsbiwhMCwhMSk7aWYoIWcpe3dhcm4oYFhGQSAtIEludmFsaWQgdmFsdWU6ICR7bn0uYCk7Y29udGludWV9Y29uc3RbY109ZztpZighY1tMc10odGhpcy5kYXRhc2V0cykpe3dhcm4oIlhGQSAtIEludmFsaWQgdmFsdWU6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC4iKTtjb250aW51ZX1jb25zdCBDPWNyZWF0ZVRleHQob1tvbl0oKSksaD1jcmVhdGVUZXh0KGNbb25dKCkpO2lbQXNdKEMpO2kudGV4dC5wdXNoKEMpO2FbQXNdKGgpO2EudGV4dC5wdXNoKGgpfWVsc2Ugd2FybihgWEZBIC0gSW52YWxpZCByZWZlcmVuY2U6ICR7cn0uYCl9fV9iaW5kT2NjdXJyZW5jZXMoZSx0LGkpe2xldCBhO2lmKHQubGVuZ3RoPjEpe2E9ZVtyc10oKTthWyRzXShhLm9jY3VyKTthLm9jY3VyPW51bGx9dGhpcy5fYmluZFZhbHVlKGUsdFswXSxpKTt0aGlzLl9zZXRQcm9wZXJ0aWVzKGUsdFswXSk7dGhpcy5fYmluZEl0ZW1zKGUsdFswXSk7aWYoMT09PXQubGVuZ3RoKXJldHVybjtjb25zdCByPWVbRHNdKCkscz1lW09zXSxuPXJbTnNdKGUpO2ZvcihsZXQgZT0xLG89dC5sZW5ndGg7ZTxvO2UrKyl7Y29uc3Qgbz10W2VdLGc9YVtyc10oKTtyW3NdLnB1c2goZyk7cltHc10obitlLGcpO3RoaXMuX2JpbmRWYWx1ZShnLG8saSk7dGhpcy5fc2V0UHJvcGVydGllcyhnLG8pO3RoaXMuX2JpbmRJdGVtcyhnLG8pfX1fY3JlYXRlT2NjdXJyZW5jZXMoZSl7aWYoIXRoaXMuZW1wdHlNZXJnZSlyZXR1cm47Y29uc3R7b2NjdXI6dH09ZTtpZighdHx8dC5pbml0aWFsPD0xKXJldHVybjtjb25zdCBpPWVbRHNdKCksYT1lW09zXTtpZighKGlbYV1pbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5KSlyZXR1cm47bGV0IHI7cj1lLm5hbWU/aVthXS5jaGlsZHJlbi5maWx0ZXIoKHQ9PnQubmFtZT09PWUubmFtZSkpLmxlbmd0aDppW2FdLmNoaWxkcmVuLmxlbmd0aDtjb25zdCBzPWlbTnNdKGUpKzEsbj10LmluaXRpYWwtcjtpZihuKXtjb25zdCB0PWVbcnNdKCk7dFskc10odC5vY2N1cik7dC5vY2N1cj1udWxsO2lbYV0ucHVzaCh0KTtpW0dzXShzLHQpO2ZvcihsZXQgZT0xO2U8bjtlKyspe2NvbnN0IHI9dFtyc10oKTtpW2FdLnB1c2gocik7aVtHc10ocytlLHIpfX19X2dldE9jY3VySW5mbyhlKXtjb25zdHtuYW1lOnQsb2NjdXI6aX09ZTtpZighaXx8IXQpcmV0dXJuWzEsMV07Y29uc3QgYT0tMT09PWkubWF4PzEvMDppLm1heDtyZXR1cm5baS5taW4sYV19X3NldEFuZEJpbmQoZSx0KXt0aGlzLl9zZXRQcm9wZXJ0aWVzKGUsdCk7dGhpcy5fYmluZEl0ZW1zKGUsdCk7dGhpcy5fYmluZEVsZW1lbnQoZSx0KX1fYmluZEVsZW1lbnQoZSx0KXtjb25zdCBpPVtdO3RoaXMuX2NyZWF0ZU9jY3VycmVuY2VzKGUpO2Zvcihjb25zdCBhIG9mIGVbbXNdKCkpe2lmKGFbb3NdKWNvbnRpbnVlO2lmKHZvaWQgMD09PXRoaXMuX21lcmdlTW9kZSYmInN1YmZvcm0iPT09YVtPc10pe3RoaXMuX21lcmdlTW9kZT0iY29uc3VtZURhdGEiPT09YS5tZXJnZU1vZGU7Y29uc3QgZT10W21zXSgpO2lmKGUubGVuZ3RoPjApdGhpcy5fYmluZE9jY3VycmVuY2VzKGEsW2VbMF1dLG51bGwpO2Vsc2UgaWYodGhpcy5lbXB0eU1lcmdlKXtjb25zdCBlPXRbcXNdPT09WG4/LTE6dFtxc10saT1hW29zXT1uZXcgWG1sT2JqZWN0KGUsYS5uYW1lfHwicm9vdCIpO3RbQXNdKGkpO3RoaXMuX2JpbmRFbGVtZW50KGEsaSl9Y29udGludWV9aWYoIWFbVXNdKCkpY29udGludWU7bGV0IGU9ITEscj1udWxsLHM9bnVsbCxuPW51bGw7aWYoYS5iaW5kKXtzd2l0Y2goYS5iaW5kLm1hdGNoKXtjYXNlIm5vbmUiOnRoaXMuX3NldEFuZEJpbmQoYSx0KTtjb250aW51ZTtjYXNlImdsb2JhbCI6ZT0hMDticmVhaztjYXNlImRhdGFSZWYiOmlmKCFhLmJpbmQucmVmKXt3YXJuKGBYRkEgLSByZWYgaXMgZW1wdHkgaW4gbm9kZSAke2FbT3NdfS5gKTt0aGlzLl9zZXRBbmRCaW5kKGEsdCk7Y29udGludWV9cz1hLmJpbmQucmVmfWEuYmluZC5waWN0dXJlJiYocj1hLmJpbmQucGljdHVyZVtuc10pfWNvbnN0W28sZ109dGhpcy5fZ2V0T2NjdXJJbmZvKGEpO2lmKHMpe249c2VhcmNoTm9kZSh0aGlzLnJvb3QsdCxzLCEwLCExKTtpZihudWxsPT09bil7bj1jcmVhdGVEYXRhTm9kZSh0aGlzLmRhdGEsdCxzKTtpZighbiljb250aW51ZTt0aGlzLl9pc0NvbnN1bWVEYXRhKCkmJihuW3NzXT0hMCk7dGhpcy5fc2V0QW5kQmluZChhLG4pO2NvbnRpbnVlfXRoaXMuX2lzQ29uc3VtZURhdGEoKSYmKG49bi5maWx0ZXIoKGU9PiFlW3NzXSkpKTtuLmxlbmd0aD5nP249bi5zbGljZSgwLGcpOjA9PT1uLmxlbmd0aCYmKG49bnVsbCk7biYmdGhpcy5faXNDb25zdW1lRGF0YSgpJiZuLmZvckVhY2goKGU9PntlW3NzXT0hMH0pKX1lbHNle2lmKCFhLm5hbWUpe3RoaXMuX3NldEFuZEJpbmQoYSx0KTtjb250aW51ZX1pZih0aGlzLl9pc0NvbnN1bWVEYXRhKCkpe2NvbnN0IGk9W107Zm9yKDtpLmxlbmd0aDxnOyl7Y29uc3Qgcj10aGlzLl9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShhLm5hbWUsYVtrc10oKSx0LGUpO2lmKCFyKWJyZWFrO3Jbc3NdPSEwO2kucHVzaChyKX1uPWkubGVuZ3RoPjA/aTpudWxsfWVsc2V7bj10W3BzXShhLm5hbWUsITEsdGhpcy5lbXB0eU1lcmdlKS5uZXh0KCkudmFsdWU7aWYoIW4pe2lmKDA9PT1vKXtpLnB1c2goYSk7Y29udGludWV9Y29uc3QgZT10W3FzXT09PVhuPy0xOnRbcXNdO249YVtvc109bmV3IFhtbE9iamVjdChlLGEubmFtZSk7dGhpcy5lbXB0eU1lcmdlJiYobltzc109ITApO3RbQXNdKG4pO3RoaXMuX3NldEFuZEJpbmQoYSxuKTtjb250aW51ZX10aGlzLmVtcHR5TWVyZ2UmJihuW3NzXT0hMCk7bj1bbl19fW4/dGhpcy5fYmluZE9jY3VycmVuY2VzKGEsbixyKTpvPjA/dGhpcy5fc2V0QW5kQmluZChhLHQpOmkucHVzaChhKX1pLmZvckVhY2goKGU9PmVbRHNdKClbJHNdKGUpKSl9fWNsYXNzIERhdGFIYW5kbGVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5kYXRhPXQ7dGhpcy5kYXRhc2V0PWUuZGF0YXNldHN8fG51bGx9c2VyaWFsaXplKGUpe2NvbnN0IHQ9W1stMSx0aGlzLmRhdGFbbXNdKCldXTtmb3IoO3QubGVuZ3RoPjA7KXtjb25zdCBpPXQuYXQoLTEpLFthLHJdPWk7aWYoYSsxPT09ci5sZW5ndGgpe3QucG9wKCk7Y29udGludWV9Y29uc3Qgcz1yWysraVswXV0sbj1lLmdldChzW2huXSk7aWYobilzW3NuXShuKTtlbHNle2NvbnN0IHQ9c1tsc10oKTtmb3IoY29uc3QgaSBvZiB0LnZhbHVlcygpKXtjb25zdCB0PWUuZ2V0KGlbaG5dKTtpZih0KXtpW3NuXSh0KTticmVha319fWNvbnN0IG89c1ttc10oKTtvLmxlbmd0aD4wJiZ0LnB1c2goWy0xLG9dKX1jb25zdCBpPVsnPHhmYTpkYXRhc2V0cyB4bWxuczp4ZmE9Imh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWRhdGEvMS4wLyI+J107aWYodGhpcy5kYXRhc2V0KWZvcihjb25zdCBlIG9mIHRoaXMuZGF0YXNldFttc10oKSkiZGF0YSIhPT1lW09zXSYmZVtjbl0oaSk7dGhpcy5kYXRhW2NuXShpKTtpLnB1c2goIjwveGZhOmRhdGFzZXRzPiIpO3JldHVybiBpLmpvaW4oIiIpfX1jb25zdCBabj1Cbi5jb25maWcuaWQ7Y2xhc3MgQWNyb2JhdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiYWNyb2JhdCIsITApO3RoaXMuYWNyb2JhdDc9bnVsbDt0aGlzLmF1dG9TYXZlPW51bGw7dGhpcy5jb21tb249bnVsbDt0aGlzLnZhbGlkYXRlPW51bGw7dGhpcy52YWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcz1udWxsO3RoaXMuc3VibWl0VXJsPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgQWNyb2JhdDcgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImFjcm9iYXQ3IiwhMCk7dGhpcy5keW5hbWljUmVuZGVyPW51bGx9fWNsYXNzIEFEQkVfSlNDb25zb2xlIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJBREJFX0pTQ29uc29sZSIsWyJkZWxlZ2F0ZSIsIkVuYWJsZSIsIkRpc2FibGUiXSl9fWNsYXNzIEFEQkVfSlNEZWJ1Z2dlciBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiQURCRV9KU0RlYnVnZ2VyIixbImRlbGVnYXRlIiwiRW5hYmxlIiwiRGlzYWJsZSJdKX19Y2xhc3MgQWRkU2lsZW50UHJpbnQgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiYWRkU2lsZW50UHJpbnQiKX19Y2xhc3MgQWRkVmlld2VyUHJlZmVyZW5jZXMgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiYWRkVmlld2VyUHJlZmVyZW5jZXMiKX19Y2xhc3MgQWRqdXN0RGF0YSBleHRlbmRzIE9wdGlvbjEwe2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJhZGp1c3REYXRhIil9fWNsYXNzIEFkb2JlRXh0ZW5zaW9uTGV2ZWwgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJhZG9iZUV4dGVuc2lvbkxldmVsIiwwLChlPT5lPj0xJiZlPD04KSl9fWNsYXNzIEFnZW50IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJhZ2VudCIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmNvbW1vbj1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEFsd2F5c0VtYmVkIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiYWx3YXlzRW1iZWQiKX19Y2xhc3MgQW1kIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJhbWQiKX19Y2xhc3MgY29uZmlnX0FyZWEgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImFyZWEiKTt0aGlzLmxldmVsPWdldEludGVnZXIoe2RhdGE6ZS5sZXZlbCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0xJiZlPD0zfSk7dGhpcy5uYW1lPWdldFN0cmluZ09wdGlvbihlLm5hbWUsWyIiLCJiYXJjb2RlIiwiY29yZWluaXQiLCJkZXZpY2VEcml2ZXIiLCJmb250IiwiZ2VuZXJhbCIsImxheW91dCIsIm1lcmdlIiwic2NyaXB0Iiwic2lnbmF0dXJlIiwic291cmNlU2V0IiwidGVtcGxhdGVDYWNoZSJdKX19Y2xhc3MgQXR0cmlidXRlcyBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiYXR0cmlidXRlcyIsWyJwcmVzZXJ2ZSIsImRlbGVnYXRlIiwiaWdub3JlIl0pfX1jbGFzcyBBdXRvU2F2ZSBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiYXV0b1NhdmUiLFsiZGlzYWJsZWQiLCJlbmFibGVkIl0pfX1jbGFzcyBCYXNlIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJiYXNlIil9fWNsYXNzIEJhdGNoT3V0cHV0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJiYXRjaE91dHB1dCIpO3RoaXMuZm9ybWF0PWdldFN0cmluZ09wdGlvbihlLmZvcm1hdCxbIm5vbmUiLCJjb25jYXQiLCJ6aXAiLCJ6aXBDb21wcmVzcyJdKX19Y2xhc3MgQmVoYXZpb3JPdmVycmlkZSBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImJlaGF2aW9yT3ZlcnJpZGUiKX1bY3NdKCl7dGhpc1tuc109bmV3IE1hcCh0aGlzW25zXS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+ZS5pbmNsdWRlcygiOiIpKSkubWFwKChlPT5lLnNwbGl0KCI6IiwyKSkpKX19Y2xhc3MgQ2FjaGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImNhY2hlIiwhMCk7dGhpcy50ZW1wbGF0ZUNhY2hlPW51bGx9fWNsYXNzIENoYW5nZSBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJjaGFuZ2UiKX19Y2xhc3MgQ29tbW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJjb21tb24iLCEwKTt0aGlzLmRhdGE9bnVsbDt0aGlzLmxvY2FsZT1udWxsO3RoaXMubG9jYWxlU2V0PW51bGw7dGhpcy5tZXNzYWdpbmc9bnVsbDt0aGlzLnN1cHByZXNzQmFubmVyPW51bGw7dGhpcy50ZW1wbGF0ZT1udWxsO3RoaXMudmFsaWRhdGlvbk1lc3NhZ2luZz1udWxsO3RoaXMudmVyc2lvbkNvbnRyb2w9bnVsbDt0aGlzLmxvZz1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIENvbXByZXNzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJjb21wcmVzcyIpO3RoaXMuc2NvcGU9Z2V0U3RyaW5nT3B0aW9uKGUuc2NvcGUsWyJpbWFnZU9ubHkiLCJkb2N1bWVudCJdKX19Y2xhc3MgQ29tcHJlc3NMb2dpY2FsU3RydWN0dXJlIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImNvbXByZXNzTG9naWNhbFN0cnVjdHVyZSIpfX1jbGFzcyBDb21wcmVzc09iamVjdFN0cmVhbSBleHRlbmRzIE9wdGlvbjEwe2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJjb21wcmVzc09iamVjdFN0cmVhbSIpfX1jbGFzcyBDb21wcmVzc2lvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiY29tcHJlc3Npb24iLCEwKTt0aGlzLmNvbXByZXNzTG9naWNhbFN0cnVjdHVyZT1udWxsO3RoaXMuY29tcHJlc3NPYmplY3RTdHJlYW09bnVsbDt0aGlzLmxldmVsPW51bGw7dGhpcy50eXBlPW51bGx9fWNsYXNzIENvbmZpZyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiY29uZmlnIiwhMCk7dGhpcy5hY3JvYmF0PW51bGw7dGhpcy5wcmVzZW50PW51bGw7dGhpcy50cmFjZT1udWxsO3RoaXMuYWdlbnQ9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBDb25mb3JtYW5jZSBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiY29uZm9ybWFuY2UiLFsiQSIsIkIiXSl9fWNsYXNzIENvbnRlbnRDb3B5IGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImNvbnRlbnRDb3B5Iil9fWNsYXNzIENvcGllcyBleHRlbmRzIEludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImNvcGllcyIsMSwoZT0+ZT49MSkpfX1jbGFzcyBDcmVhdG9yIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJjcmVhdG9yIil9fWNsYXNzIEN1cnJlbnRQYWdlIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiY3VycmVudFBhZ2UiLDAsKGU9PmU+PTApKX19Y2xhc3MgRGF0YSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiZGF0YSIsITApO3RoaXMuYWRqdXN0RGF0YT1udWxsO3RoaXMuYXR0cmlidXRlcz1udWxsO3RoaXMuaW5jcmVtZW50YWxMb2FkPW51bGw7dGhpcy5vdXRwdXRYU0w9bnVsbDt0aGlzLnJhbmdlPW51bGw7dGhpcy5yZWNvcmQ9bnVsbDt0aGlzLnN0YXJ0Tm9kZT1udWxsO3RoaXMudXJpPW51bGw7dGhpcy53aW5kb3c9bnVsbDt0aGlzLnhzbD1udWxsO3RoaXMuZXhjbHVkZU5TPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRyYW5zZm9ybT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIERlYnVnIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJkZWJ1ZyIsITApO3RoaXMudXJpPW51bGx9fWNsYXNzIERlZmF1bHRUeXBlZmFjZSBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImRlZmF1bHRUeXBlZmFjZSIpO3RoaXMud3JpdGluZ1NjcmlwdD1nZXRTdHJpbmdPcHRpb24oZS53cml0aW5nU2NyaXB0LFsiKiIsIkFyYWJpYyIsIkN5cmlsbGljIiwiRWFzdEV1cm9wZWFuUm9tYW4iLCJHcmVlayIsIkhlYnJldyIsIkphcGFuZXNlIiwiS29yZWFuIiwiUm9tYW4iLCJTaW1wbGlmaWVkQ2hpbmVzZSIsIlRoYWkiLCJUcmFkaXRpb25hbENoaW5lc2UiLCJWaWV0bmFtZXNlIl0pfX1jbGFzcyBEZXN0aW5hdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiZGVzdGluYXRpb24iLFsicGRmIiwicGNsIiwicHMiLCJ3ZWJDbGllbnQiLCJ6cGwiXSl9fWNsYXNzIERvY3VtZW50QXNzZW1ibHkgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiZG9jdW1lbnRBc3NlbWJseSIpfX1jbGFzcyBEcml2ZXIgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImRyaXZlciIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgRHVwbGV4T3B0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJkdXBsZXhPcHRpb24iLFsic2ltcGxleCIsImR1cGxleEZsaXBMb25nRWRnZSIsImR1cGxleEZsaXBTaG9ydEVkZ2UiXSl9fWNsYXNzIER5bmFtaWNSZW5kZXIgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImR5bmFtaWNSZW5kZXIiLFsiZm9yYmlkZGVuIiwicmVxdWlyZWQiXSl9fWNsYXNzIEVtYmVkIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImVtYmVkIil9fWNsYXNzIGNvbmZpZ19FbmNyeXB0IGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImVuY3J5cHQiKX19Y2xhc3MgY29uZmlnX0VuY3J5cHRpb24gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImVuY3J5cHRpb24iLCEwKTt0aGlzLmVuY3J5cHQ9bnVsbDt0aGlzLmVuY3J5cHRpb25MZXZlbD1udWxsO3RoaXMucGVybWlzc2lvbnM9bnVsbH19Y2xhc3MgRW5jcnlwdGlvbkxldmVsIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJlbmNyeXB0aW9uTGV2ZWwiLFsiNDBiaXQiLCIxMjhiaXQiXSl9fWNsYXNzIEVuZm9yY2UgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImVuZm9yY2UiKX19Y2xhc3MgRXF1YXRlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJlcXVhdGUiKTt0aGlzLmZvcmNlPWdldEludGVnZXIoe2RhdGE6ZS5mb3JjZSxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4wPT09ZX0pO3RoaXMuZnJvbT1lLmZyb218fCIiO3RoaXMudG89ZS50b3x8IiJ9fWNsYXNzIEVxdWF0ZVJhbmdlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJlcXVhdGVSYW5nZSIpO3RoaXMuZnJvbT1lLmZyb218fCIiO3RoaXMudG89ZS50b3x8IiI7dGhpcy5fdW5pY29kZVJhbmdlPWUudW5pY29kZVJhbmdlfHwiIn1nZXQgdW5pY29kZVJhbmdlKCl7Y29uc3QgZT1bXSx0PS9VXCsoWzAtOWEtZkEtRl0rKS8saT10aGlzLl91bmljb2RlUmFuZ2U7Zm9yKGxldCBhIG9mIGkuc3BsaXQoIiwiKS5tYXAoKGU9PmUudHJpbSgpKSkuZmlsdGVyKChlPT4hIWUpKSl7YT1hLnNwbGl0KCItIiwyKS5tYXAoKGU9Pntjb25zdCBpPWUubWF0Y2godCk7cmV0dXJuIGk/cGFyc2VJbnQoaVsxXSwxNik6MH0pKTsxPT09YS5sZW5ndGgmJmEucHVzaChhWzBdKTtlLnB1c2goYSl9cmV0dXJuIHNoYWRvdyh0aGlzLCJ1bmljb2RlUmFuZ2UiLGUpfX1jbGFzcyBFeGNsdWRlIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiZXhjbHVkZSIpfVtjc10oKXt0aGlzW25zXT10aGlzW25zXS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+ZSYmWyJjYWxjdWxhdGUiLCJjbG9zZSIsImVudGVyIiwiZXhpdCIsImluaXRpYWxpemUiLCJyZWFkeSIsInZhbGlkYXRlIl0uaW5jbHVkZXMoZSkpKX19Y2xhc3MgRXhjbHVkZU5TIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJleGNsdWRlTlMiKX19Y2xhc3MgRmxpcExhYmVsIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJmbGlwTGFiZWwiLFsidXNlUHJpbnRlclNldHRpbmciLCJvbiIsIm9mZiJdKX19Y2xhc3MgY29uZmlnX0ZvbnRJbmZvIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJmb250SW5mbyIsITApO3RoaXMuZW1iZWQ9bnVsbDt0aGlzLm1hcD1udWxsO3RoaXMuc3Vic2V0QmVsb3c9bnVsbDt0aGlzLmFsd2F5c0VtYmVkPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRlZmF1bHRUeXBlZmFjZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5uZXZlckVtYmVkPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRm9ybUZpZWxkRmlsbGluZyBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJmb3JtRmllbGRGaWxsaW5nIil9fWNsYXNzIEdyb3VwUGFyZW50IGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJncm91cFBhcmVudCIpfX1jbGFzcyBJZkVtcHR5IGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJpZkVtcHR5IixbImRhdGFWYWx1ZSIsImRhdGFHcm91cCIsImlnbm9yZSIsInJlbW92ZSJdKX19Y2xhc3MgSW5jbHVkZVhEUENvbnRlbnQgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImluY2x1ZGVYRFBDb250ZW50Iil9fWNsYXNzIEluY3JlbWVudGFsTG9hZCBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiaW5jcmVtZW50YWxMb2FkIixbIm5vbmUiLCJmb3J3YXJkT25seSJdKX19Y2xhc3MgSW5jcmVtZW50YWxNZXJnZSBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJpbmNyZW1lbnRhbE1lcmdlIil9fWNsYXNzIEludGVyYWN0aXZlIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImludGVyYWN0aXZlIil9fWNsYXNzIEpvZyBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwiam9nIixbInVzZVByaW50ZXJTZXR0aW5nIiwibm9uZSIsInBhZ2VTZXQiXSl9fWNsYXNzIExhYmVsUHJpbnRlciBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwibGFiZWxQcmludGVyIiwhMCk7dGhpcy5uYW1lPWdldFN0cmluZ09wdGlvbihlLm5hbWUsWyJ6cGwiLCJkcGwiLCJpcGwiLCJ0Y3BsIl0pO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZsaXBMYWJlbD1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBMYXlvdXQgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImxheW91dCIsWyJwYWdpbmF0ZSIsInBhbmVsIl0pfX1jbGFzcyBMZXZlbCBleHRlbmRzIEludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sImxldmVsIiwwLChlPT5lPjApKX19Y2xhc3MgTGluZWFyaXplZCBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJsaW5lYXJpemVkIil9fWNsYXNzIExvY2FsZSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwibG9jYWxlIil9fWNsYXNzIExvY2FsZVNldCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwibG9jYWxlU2V0Iil9fWNsYXNzIExvZyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwibG9nIiwhMCk7dGhpcy5tb2RlPW51bGw7dGhpcy50aHJlc2hvbGQ9bnVsbDt0aGlzLnRvPW51bGw7dGhpcy51cmk9bnVsbH19Y2xhc3MgTWFwRWxlbWVudCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwibWFwIiwhMCk7dGhpcy5lcXVhdGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXF1YXRlUmFuZ2U9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBNZWRpdW1JbmZvIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJtZWRpdW1JbmZvIiwhMCk7dGhpcy5tYXA9bnVsbH19Y2xhc3MgY29uZmlnX01lc3NhZ2UgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sIm1lc3NhZ2UiLCEwKTt0aGlzLm1zZ0lkPW51bGw7dGhpcy5zZXZlcml0eT1udWxsfX1jbGFzcyBNZXNzYWdpbmcgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sIm1lc3NhZ2luZyIsITApO3RoaXMubWVzc2FnZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIE1vZGUgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sIm1vZGUiLFsiYXBwZW5kIiwib3ZlcndyaXRlIl0pfX1jbGFzcyBNb2RpZnlBbm5vdHMgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwibW9kaWZ5QW5ub3RzIil9fWNsYXNzIE1zZ0lkIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwibXNnSWQiLDEsKGU9PmU+PTEpKX19Y2xhc3MgTmFtZUF0dHIgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sIm5hbWVBdHRyIil9fWNsYXNzIE5ldmVyRW1iZWQgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJuZXZlckVtYmVkIil9fWNsYXNzIE51bWJlck9mQ29waWVzIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwibnVtYmVyT2ZDb3BpZXMiLG51bGwsKGU9PmU+PTImJmU8PTUpKX19Y2xhc3MgT3BlbkFjdGlvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwib3BlbkFjdGlvbiIsITApO3RoaXMuZGVzdGluYXRpb249bnVsbH19Y2xhc3MgT3V0cHV0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJvdXRwdXQiLCEwKTt0aGlzLnRvPW51bGw7dGhpcy50eXBlPW51bGw7dGhpcy51cmk9bnVsbH19Y2xhc3MgT3V0cHV0QmluIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJvdXRwdXRCaW4iKX19Y2xhc3MgT3V0cHV0WFNMIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJvdXRwdXRYU0wiLCEwKTt0aGlzLnVyaT1udWxsfX1jbGFzcyBPdmVycHJpbnQgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sIm92ZXJwcmludCIsWyJub25lIiwiYm90aCIsImRyYXciLCJmaWVsZCJdKX19Y2xhc3MgUGFja2V0cyBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwicGFja2V0cyIpfVtjc10oKXsiKiIhPT10aGlzW25zXSYmKHRoaXNbbnNdPXRoaXNbbnNdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChlPT5bImNvbmZpZyIsImRhdGFzZXRzIiwidGVtcGxhdGUiLCJ4ZmRmIiwieHNsdCJdLmluY2x1ZGVzKGUpKSkpfX1jbGFzcyBQYWdlT2Zmc2V0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJwYWdlT2Zmc2V0Iik7dGhpcy54PWdldEludGVnZXIoe2RhdGE6ZS54LGRlZmF1bHRWYWx1ZToidXNlWERDU2V0dGluZyIsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLnk9Z2V0SW50ZWdlcih7ZGF0YTplLnksZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTplPT4hMH0pfX1jbGFzcyBQYWdlUmFuZ2UgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInBhZ2VSYW5nZSIpfVtjc10oKXtjb25zdCBlPXRoaXNbbnNdLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChlPT5wYXJzZUludChlLDEwKSkpLHQ9W107Zm9yKGxldCBpPTAsYT1lLmxlbmd0aDtpPGE7aSs9Mil0LnB1c2goZS5zbGljZShpLGkrMikpO3RoaXNbbnNdPXR9fWNsYXNzIFBhZ2luYXRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInBhZ2luYXRpb24iLFsic2ltcGxleCIsImR1cGxleFNob3J0RWRnZSIsImR1cGxleExvbmdFZGdlIl0pfX1jbGFzcyBQYWdpbmF0aW9uT3ZlcnJpZGUgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInBhZ2luYXRpb25PdmVycmlkZSIsWyJub25lIiwiZm9yY2VEdXBsZXgiLCJmb3JjZUR1cGxleExvbmdFZGdlIiwiZm9yY2VEdXBsZXhTaG9ydEVkZ2UiLCJmb3JjZVNpbXBsZXgiXSl9fWNsYXNzIFBhcnQgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJwYXJ0IiwxLChlPT4hMSkpfX1jbGFzcyBQY2wgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInBjbCIsITApO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy5qb2c9bnVsbDt0aGlzLm1lZGl1bUluZm89bnVsbDt0aGlzLm91dHB1dEJpbj1udWxsO3RoaXMucGFnZU9mZnNldD1udWxsO3RoaXMuc3RhcGxlPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgUGRmIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJwZGYiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLmFkb2JlRXh0ZW5zaW9uTGV2ZWw9bnVsbDt0aGlzLmJhdGNoT3V0cHV0PW51bGw7dGhpcy5jb21wcmVzc2lvbj1udWxsO3RoaXMuY3JlYXRvcj1udWxsO3RoaXMuZW5jcnlwdGlvbj1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLmludGVyYWN0aXZlPW51bGw7dGhpcy5saW5lYXJpemVkPW51bGw7dGhpcy5vcGVuQWN0aW9uPW51bGw7dGhpcy5wZGZhPW51bGw7dGhpcy5wcm9kdWNlcj1udWxsO3RoaXMucmVuZGVyUG9saWN5PW51bGw7dGhpcy5zY3JpcHRNb2RlbD1udWxsO3RoaXMuc2lsZW50UHJpbnQ9bnVsbDt0aGlzLnN1Ym1pdEZvcm1hdD1udWxsO3RoaXMudGFnZ2VkPW51bGw7dGhpcy52ZXJzaW9uPW51bGw7dGhpcy52aWV3ZXJQcmVmZXJlbmNlcz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIFBkZmEgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInBkZmEiLCEwKTt0aGlzLmFtZD1udWxsO3RoaXMuY29uZm9ybWFuY2U9bnVsbDt0aGlzLmluY2x1ZGVYRFBDb250ZW50PW51bGw7dGhpcy5wYXJ0PW51bGx9fWNsYXNzIFBlcm1pc3Npb25zIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJwZXJtaXNzaW9ucyIsITApO3RoaXMuYWNjZXNzaWJsZUNvbnRlbnQ9bnVsbDt0aGlzLmNoYW5nZT1udWxsO3RoaXMuY29udGVudENvcHk9bnVsbDt0aGlzLmRvY3VtZW50QXNzZW1ibHk9bnVsbDt0aGlzLmZvcm1GaWVsZEZpbGxpbmc9bnVsbDt0aGlzLm1vZGlmeUFubm90cz1udWxsO3RoaXMucGxhaW50ZXh0TWV0YWRhdGE9bnVsbDt0aGlzLnByaW50PW51bGw7dGhpcy5wcmludEhpZ2hRdWFsaXR5PW51bGx9fWNsYXNzIFBpY2tUcmF5QnlQREZTaXplIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInBpY2tUcmF5QnlQREZTaXplIil9fWNsYXNzIGNvbmZpZ19QaWN0dXJlIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJwaWN0dXJlIil9fWNsYXNzIFBsYWludGV4dE1ldGFkYXRhIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInBsYWludGV4dE1ldGFkYXRhIil9fWNsYXNzIFByZXNlbmNlIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJwcmVzZW5jZSIsWyJwcmVzZXJ2ZSIsImRpc3NvbHZlIiwiZGlzc29sdmVTdHJ1Y3R1cmUiLCJpZ25vcmUiLCJyZW1vdmUiXSl9fWNsYXNzIFByZXNlbnQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInByZXNlbnQiLCEwKTt0aGlzLmJlaGF2aW9yT3ZlcnJpZGU9bnVsbDt0aGlzLmNhY2hlPW51bGw7dGhpcy5jb21tb249bnVsbDt0aGlzLmNvcGllcz1udWxsO3RoaXMuZGVzdGluYXRpb249bnVsbDt0aGlzLmluY3JlbWVudGFsTWVyZ2U9bnVsbDt0aGlzLmxheW91dD1udWxsO3RoaXMub3V0cHV0PW51bGw7dGhpcy5vdmVycHJpbnQ9bnVsbDt0aGlzLnBhZ2luYXRpb249bnVsbDt0aGlzLnBhZ2luYXRpb25PdmVycmlkZT1udWxsO3RoaXMuc2NyaXB0PW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMueGRwPW51bGw7dGhpcy5kcml2ZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMubGFiZWxQcmludGVyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnBjbD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5wZGY9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucHM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3VibWl0VXJsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLndlYkNsaWVudD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy56cGw9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBQcmludCBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJwcmludCIpfX1jbGFzcyBQcmludEhpZ2hRdWFsaXR5IGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInByaW50SGlnaFF1YWxpdHkiKX19Y2xhc3MgUHJpbnRTY2FsaW5nIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJwcmludFNjYWxpbmciLFsiYXBwZGVmYXVsdCIsIm5vU2NhbGluZyJdKX19Y2xhc3MgUHJpbnRlck5hbWUgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInByaW50ZXJOYW1lIil9fWNsYXNzIFByb2R1Y2VyIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJwcm9kdWNlciIpfX1jbGFzcyBQcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwicHMiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLmJhdGNoT3V0cHV0PW51bGw7dGhpcy5mb250SW5mbz1udWxsO3RoaXMuam9nPW51bGw7dGhpcy5tZWRpdW1JbmZvPW51bGw7dGhpcy5vdXRwdXRCaW49bnVsbDt0aGlzLnN0YXBsZT1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIFJhbmdlIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwicmFuZ2UiKX1bY3NdKCl7dGhpc1tuc109dGhpc1tuc10udHJpbSgpLnNwbGl0KC9ccyosXHMqLywyKS5tYXAoKGU9PmUuc3BsaXQoIi0iKS5tYXAoKGU9PnBhcnNlSW50KGUudHJpbSgpLDEwKSkpKSkuZmlsdGVyKChlPT5lLmV2ZXJ5KChlPT4haXNOYU4oZSkpKSkpLm1hcCgoZT0+ezE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pO3JldHVybiBlfSkpfX1jbGFzcyBSZWNvcmQgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJyZWNvcmQiKX1bY3NdKCl7dGhpc1tuc109dGhpc1tuc10udHJpbSgpO2NvbnN0IGU9cGFyc2VJbnQodGhpc1tuc10sMTApOyFpc05hTihlKSYmZT49MCYmKHRoaXNbbnNdPWUpfX1jbGFzcyBSZWxldmFudCBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInJlbGV2YW50Iil9W2NzXSgpe3RoaXNbbnNdPXRoaXNbbnNdLnRyaW0oKS5zcGxpdCgvXHMrLyl9fWNsYXNzIFJlbmFtZSBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInJlbmFtZSIpfVtjc10oKXt0aGlzW25zXT10aGlzW25zXS50cmltKCk7KHRoaXNbbnNdLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgieG1sIil8fG5ldyBSZWdFeHAoIltcXHB7TH1fXVtcXHB7TH1cXGQuX1xccHtNfS1dKiIsInUiKS50ZXN0KHRoaXNbbnNdKSkmJndhcm4oIlhGQSAtIFJlbmFtZTogaW52YWxpZCBYRkEgbmFtZSIpfX1jbGFzcyBSZW5kZXJQb2xpY3kgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInJlbmRlclBvbGljeSIsWyJzZXJ2ZXIiLCJjbGllbnQiXSl9fWNsYXNzIFJ1blNjcmlwdHMgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInJ1blNjcmlwdHMiLFsiYm90aCIsImNsaWVudCIsIm5vbmUiLCJzZXJ2ZXIiXSl9fWNsYXNzIGNvbmZpZ19TY3JpcHQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInNjcmlwdCIsITApO3RoaXMuY3VycmVudFBhZ2U9bnVsbDt0aGlzLmV4Y2x1ZGU9bnVsbDt0aGlzLnJ1blNjcmlwdHM9bnVsbH19Y2xhc3MgU2NyaXB0TW9kZWwgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInNjcmlwdE1vZGVsIixbIlhGQSIsIm5vbmUiXSl9fWNsYXNzIFNldmVyaXR5IGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJzZXZlcml0eSIsWyJpZ25vcmUiLCJlcnJvciIsImluZm9ybWF0aW9uIiwidHJhY2UiLCJ3YXJuaW5nIl0pfX1jbGFzcyBTaWxlbnRQcmludCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwic2lsZW50UHJpbnQiLCEwKTt0aGlzLmFkZFNpbGVudFByaW50PW51bGw7dGhpcy5wcmludGVyTmFtZT1udWxsfX1jbGFzcyBTdGFwbGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInN0YXBsZSIpO3RoaXMubW9kZT1nZXRTdHJpbmdPcHRpb24oZS5tb2RlLFsidXNlUHJpbnRlclNldHRpbmciLCJvbiIsIm9mZiJdKX19Y2xhc3MgU3RhcnROb2RlIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJzdGFydE5vZGUiKX19Y2xhc3MgU3RhcnRQYWdlIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwic3RhcnRQYWdlIiwwLChlPT4hMCkpfX1jbGFzcyBTdWJtaXRGb3JtYXQgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInN1Ym1pdEZvcm1hdCIsWyJodG1sIiwiZGVsZWdhdGUiLCJmZGYiLCJ4bWwiLCJwZGYiXSl9fWNsYXNzIFN1Ym1pdFVybCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwic3VibWl0VXJsIil9fWNsYXNzIFN1YnNldEJlbG93IGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwic3Vic2V0QmVsb3ciLDEwMCwoZT0+ZT49MCYmZTw9MTAwKSl9fWNsYXNzIFN1cHByZXNzQmFubmVyIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInN1cHByZXNzQmFubmVyIil9fWNsYXNzIFRhZ2dlZCBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJ0YWdnZWQiKX19Y2xhc3MgY29uZmlnX1RlbXBsYXRlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJ0ZW1wbGF0ZSIsITApO3RoaXMuYmFzZT1udWxsO3RoaXMucmVsZXZhbnQ9bnVsbDt0aGlzLnN0YXJ0UGFnZT1udWxsO3RoaXMudXJpPW51bGw7dGhpcy54c2w9bnVsbH19Y2xhc3MgVGhyZXNob2xkIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJ0aHJlc2hvbGQiLFsidHJhY2UiLCJlcnJvciIsImluZm9ybWF0aW9uIiwid2FybmluZyJdKX19Y2xhc3MgVG8gZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInRvIixbIm51bGwiLCJtZW1vcnkiLCJzdGRlcnIiLCJzdGRvdXQiLCJzeXN0ZW0iLCJ1cmkiXSl9fWNsYXNzIFRlbXBsYXRlQ2FjaGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInRlbXBsYXRlQ2FjaGUiKTt0aGlzLm1heEVudHJpZXM9Z2V0SW50ZWdlcih7ZGF0YTplLm1heEVudHJpZXMsZGVmYXVsdFZhbHVlOjUsdmFsaWRhdGU6ZT0+ZT49MH0pfX1jbGFzcyBUcmFjZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwidHJhY2UiLCEwKTt0aGlzLmFyZWE9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBUcmFuc2Zvcm0gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInRyYW5zZm9ybSIsITApO3RoaXMuZ3JvdXBQYXJlbnQ9bnVsbDt0aGlzLmlmRW1wdHk9bnVsbDt0aGlzLm5hbWVBdHRyPW51bGw7dGhpcy5waWN0dXJlPW51bGw7dGhpcy5wcmVzZW5jZT1udWxsO3RoaXMucmVuYW1lPW51bGw7dGhpcy53aGl0ZXNwYWNlPW51bGx9fWNsYXNzIFR5cGUgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInR5cGUiLFsibm9uZSIsImFzY2lpODUiLCJhc2NpaUhleCIsImNjaXR0ZmF4IiwiZmxhdGUiLCJsenciLCJydW5MZW5ndGgiLCJuYXRpdmUiLCJ4ZHAiLCJtZXJnZWRYRFAiXSl9fWNsYXNzIFVyaSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwidXJpIil9fWNsYXNzIGNvbmZpZ19WYWxpZGF0ZSBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwidmFsaWRhdGUiLFsicHJlU3VibWl0IiwicHJlUHJpbnQiLCJwcmVFeGVjdXRlIiwicHJlU2F2ZSJdKX19Y2xhc3MgVmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJ2YWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcyIpfVtjc10oKXt0aGlzW25zXT10aGlzW25zXS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+WyJkb2NSZWFkeSIsInBvc3RTaWduIl0uaW5jbHVkZXMoZSkpKX19Y2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2luZyBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwidmFsaWRhdGlvbk1lc3NhZ2luZyIsWyJhbGxNZXNzYWdlc0luZGl2aWR1YWxseSIsImFsbE1lc3NhZ2VzVG9nZXRoZXIiLCJmaXJzdE1lc3NhZ2VPbmx5Iiwibm9NZXNzYWdlcyJdKX19Y2xhc3MgVmVyc2lvbiBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwidmVyc2lvbiIsWyIxLjciLCIxLjYiLCIxLjUiLCIxLjQiLCIxLjMiLCIxLjIiXSl9fWNsYXNzIFZlcnNpb25Db250cm9sIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJWZXJzaW9uQ29udHJvbCIpO3RoaXMub3V0cHV0QmVsb3c9Z2V0U3RyaW5nT3B0aW9uKGUub3V0cHV0QmVsb3csWyJ3YXJuIiwiZXJyb3IiLCJ1cGRhdGUiXSk7dGhpcy5zb3VyY2VBYm92ZT1nZXRTdHJpbmdPcHRpb24oZS5zb3VyY2VBYm92ZSxbIndhcm4iLCJlcnJvciJdKTt0aGlzLnNvdXJjZUJlbG93PWdldFN0cmluZ09wdGlvbihlLnNvdXJjZUJlbG93LFsidXBkYXRlIiwibWFpbnRhaW4iXSl9fWNsYXNzIFZpZXdlclByZWZlcmVuY2VzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsITApO3RoaXMuQURCRV9KU0NvbnNvbGU9bnVsbDt0aGlzLkFEQkVfSlNEZWJ1Z2dlcj1udWxsO3RoaXMuYWRkVmlld2VyUHJlZmVyZW5jZXM9bnVsbDt0aGlzLmR1cGxleE9wdGlvbj1udWxsO3RoaXMuZW5mb3JjZT1udWxsO3RoaXMubnVtYmVyT2ZDb3BpZXM9bnVsbDt0aGlzLnBhZ2VSYW5nZT1udWxsO3RoaXMucGlja1RyYXlCeVBERlNpemU9bnVsbDt0aGlzLnByaW50U2NhbGluZz1udWxsfX1jbGFzcyBXZWJDbGllbnQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sIndlYkNsaWVudCIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgV2hpdGVzcGFjZSBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihabiwid2hpdGVzcGFjZSIsWyJwcmVzZXJ2ZSIsImx0cmltIiwibm9ybWFsaXplIiwicnRyaW0iLCJ0cmltIl0pfX1jbGFzcyBXaW5kb3cgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJ3aW5kb3ciKX1bY3NdKCl7Y29uc3QgZT10aGlzW25zXS50cmltKCkuc3BsaXQoL1xzKixccyovLDIpLm1hcCgoZT0+cGFyc2VJbnQoZSwxMCkpKTtpZihlLnNvbWUoKGU9PmlzTmFOKGUpKSkpdGhpc1tuc109WzAsMF07ZWxzZXsxPT09ZS5sZW5ndGgmJmUucHVzaChlWzBdKTt0aGlzW25zXT1lfX19Y2xhc3MgWGRjIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFpuLCJ4ZGMiLCEwKTt0aGlzLnVyaT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy54c2w9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBYZHAgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInhkcCIsITApO3RoaXMucGFja2V0cz1udWxsfX1jbGFzcyBYc2wgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInhzbCIsITApO3RoaXMuZGVidWc9bnVsbDt0aGlzLnVyaT1udWxsfX1jbGFzcyBacGwgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWm4sInpwbCIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmJhdGNoT3V0cHV0PW51bGw7dGhpcy5mbGlwTGFiZWw9bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgQ29uZmlnTmFtZXNwYWNle3N0YXRpY1tsbl0oZSx0KXtpZihDb25maWdOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIENvbmZpZ05hbWVzcGFjZVtlXSh0KX1zdGF0aWMgYWNyb2JhdChlKXtyZXR1cm4gbmV3IEFjcm9iYXQoZSl9c3RhdGljIGFjcm9iYXQ3KGUpe3JldHVybiBuZXcgQWNyb2JhdDcoZSl9c3RhdGljIEFEQkVfSlNDb25zb2xlKGUpe3JldHVybiBuZXcgQURCRV9KU0NvbnNvbGUoZSl9c3RhdGljIEFEQkVfSlNEZWJ1Z2dlcihlKXtyZXR1cm4gbmV3IEFEQkVfSlNEZWJ1Z2dlcihlKX1zdGF0aWMgYWRkU2lsZW50UHJpbnQoZSl7cmV0dXJuIG5ldyBBZGRTaWxlbnRQcmludChlKX1zdGF0aWMgYWRkVmlld2VyUHJlZmVyZW5jZXMoZSl7cmV0dXJuIG5ldyBBZGRWaWV3ZXJQcmVmZXJlbmNlcyhlKX1zdGF0aWMgYWRqdXN0RGF0YShlKXtyZXR1cm4gbmV3IEFkanVzdERhdGEoZSl9c3RhdGljIGFkb2JlRXh0ZW5zaW9uTGV2ZWwoZSl7cmV0dXJuIG5ldyBBZG9iZUV4dGVuc2lvbkxldmVsKGUpfXN0YXRpYyBhZ2VudChlKXtyZXR1cm4gbmV3IEFnZW50KGUpfXN0YXRpYyBhbHdheXNFbWJlZChlKXtyZXR1cm4gbmV3IEFsd2F5c0VtYmVkKGUpfXN0YXRpYyBhbWQoZSl7cmV0dXJuIG5ldyBBbWQoZSl9c3RhdGljIGFyZWEoZSl7cmV0dXJuIG5ldyBjb25maWdfQXJlYShlKX1zdGF0aWMgYXR0cmlidXRlcyhlKXtyZXR1cm4gbmV3IEF0dHJpYnV0ZXMoZSl9c3RhdGljIGF1dG9TYXZlKGUpe3JldHVybiBuZXcgQXV0b1NhdmUoZSl9c3RhdGljIGJhc2UoZSl7cmV0dXJuIG5ldyBCYXNlKGUpfXN0YXRpYyBiYXRjaE91dHB1dChlKXtyZXR1cm4gbmV3IEJhdGNoT3V0cHV0KGUpfXN0YXRpYyBiZWhhdmlvck92ZXJyaWRlKGUpe3JldHVybiBuZXcgQmVoYXZpb3JPdmVycmlkZShlKX1zdGF0aWMgY2FjaGUoZSl7cmV0dXJuIG5ldyBDYWNoZShlKX1zdGF0aWMgY2hhbmdlKGUpe3JldHVybiBuZXcgQ2hhbmdlKGUpfXN0YXRpYyBjb21tb24oZSl7cmV0dXJuIG5ldyBDb21tb24oZSl9c3RhdGljIGNvbXByZXNzKGUpe3JldHVybiBuZXcgQ29tcHJlc3MoZSl9c3RhdGljIGNvbXByZXNzTG9naWNhbFN0cnVjdHVyZShlKXtyZXR1cm4gbmV3IENvbXByZXNzTG9naWNhbFN0cnVjdHVyZShlKX1zdGF0aWMgY29tcHJlc3NPYmplY3RTdHJlYW0oZSl7cmV0dXJuIG5ldyBDb21wcmVzc09iamVjdFN0cmVhbShlKX1zdGF0aWMgY29tcHJlc3Npb24oZSl7cmV0dXJuIG5ldyBDb21wcmVzc2lvbihlKX1zdGF0aWMgY29uZmlnKGUpe3JldHVybiBuZXcgQ29uZmlnKGUpfXN0YXRpYyBjb25mb3JtYW5jZShlKXtyZXR1cm4gbmV3IENvbmZvcm1hbmNlKGUpfXN0YXRpYyBjb250ZW50Q29weShlKXtyZXR1cm4gbmV3IENvbnRlbnRDb3B5KGUpfXN0YXRpYyBjb3BpZXMoZSl7cmV0dXJuIG5ldyBDb3BpZXMoZSl9c3RhdGljIGNyZWF0b3IoZSl7cmV0dXJuIG5ldyBDcmVhdG9yKGUpfXN0YXRpYyBjdXJyZW50UGFnZShlKXtyZXR1cm4gbmV3IEN1cnJlbnRQYWdlKGUpfXN0YXRpYyBkYXRhKGUpe3JldHVybiBuZXcgRGF0YShlKX1zdGF0aWMgZGVidWcoZSl7cmV0dXJuIG5ldyBEZWJ1ZyhlKX1zdGF0aWMgZGVmYXVsdFR5cGVmYWNlKGUpe3JldHVybiBuZXcgRGVmYXVsdFR5cGVmYWNlKGUpfXN0YXRpYyBkZXN0aW5hdGlvbihlKXtyZXR1cm4gbmV3IERlc3RpbmF0aW9uKGUpfXN0YXRpYyBkb2N1bWVudEFzc2VtYmx5KGUpe3JldHVybiBuZXcgRG9jdW1lbnRBc3NlbWJseShlKX1zdGF0aWMgZHJpdmVyKGUpe3JldHVybiBuZXcgRHJpdmVyKGUpfXN0YXRpYyBkdXBsZXhPcHRpb24oZSl7cmV0dXJuIG5ldyBEdXBsZXhPcHRpb24oZSl9c3RhdGljIGR5bmFtaWNSZW5kZXIoZSl7cmV0dXJuIG5ldyBEeW5hbWljUmVuZGVyKGUpfXN0YXRpYyBlbWJlZChlKXtyZXR1cm4gbmV3IEVtYmVkKGUpfXN0YXRpYyBlbmNyeXB0KGUpe3JldHVybiBuZXcgY29uZmlnX0VuY3J5cHQoZSl9c3RhdGljIGVuY3J5cHRpb24oZSl7cmV0dXJuIG5ldyBjb25maWdfRW5jcnlwdGlvbihlKX1zdGF0aWMgZW5jcnlwdGlvbkxldmVsKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbkxldmVsKGUpfXN0YXRpYyBlbmZvcmNlKGUpe3JldHVybiBuZXcgRW5mb3JjZShlKX1zdGF0aWMgZXF1YXRlKGUpe3JldHVybiBuZXcgRXF1YXRlKGUpfXN0YXRpYyBlcXVhdGVSYW5nZShlKXtyZXR1cm4gbmV3IEVxdWF0ZVJhbmdlKGUpfXN0YXRpYyBleGNsdWRlKGUpe3JldHVybiBuZXcgRXhjbHVkZShlKX1zdGF0aWMgZXhjbHVkZU5TKGUpe3JldHVybiBuZXcgRXhjbHVkZU5TKGUpfXN0YXRpYyBmbGlwTGFiZWwoZSl7cmV0dXJuIG5ldyBGbGlwTGFiZWwoZSl9c3RhdGljIGZvbnRJbmZvKGUpe3JldHVybiBuZXcgY29uZmlnX0ZvbnRJbmZvKGUpfXN0YXRpYyBmb3JtRmllbGRGaWxsaW5nKGUpe3JldHVybiBuZXcgRm9ybUZpZWxkRmlsbGluZyhlKX1zdGF0aWMgZ3JvdXBQYXJlbnQoZSl7cmV0dXJuIG5ldyBHcm91cFBhcmVudChlKX1zdGF0aWMgaWZFbXB0eShlKXtyZXR1cm4gbmV3IElmRW1wdHkoZSl9c3RhdGljIGluY2x1ZGVYRFBDb250ZW50KGUpe3JldHVybiBuZXcgSW5jbHVkZVhEUENvbnRlbnQoZSl9c3RhdGljIGluY3JlbWVudGFsTG9hZChlKXtyZXR1cm4gbmV3IEluY3JlbWVudGFsTG9hZChlKX1zdGF0aWMgaW5jcmVtZW50YWxNZXJnZShlKXtyZXR1cm4gbmV3IEluY3JlbWVudGFsTWVyZ2UoZSl9c3RhdGljIGludGVyYWN0aXZlKGUpe3JldHVybiBuZXcgSW50ZXJhY3RpdmUoZSl9c3RhdGljIGpvZyhlKXtyZXR1cm4gbmV3IEpvZyhlKX1zdGF0aWMgbGFiZWxQcmludGVyKGUpe3JldHVybiBuZXcgTGFiZWxQcmludGVyKGUpfXN0YXRpYyBsYXlvdXQoZSl7cmV0dXJuIG5ldyBMYXlvdXQoZSl9c3RhdGljIGxldmVsKGUpe3JldHVybiBuZXcgTGV2ZWwoZSl9c3RhdGljIGxpbmVhcml6ZWQoZSl7cmV0dXJuIG5ldyBMaW5lYXJpemVkKGUpfXN0YXRpYyBsb2NhbGUoZSl7cmV0dXJuIG5ldyBMb2NhbGUoZSl9c3RhdGljIGxvY2FsZVNldChlKXtyZXR1cm4gbmV3IExvY2FsZVNldChlKX1zdGF0aWMgbG9nKGUpe3JldHVybiBuZXcgTG9nKGUpfXN0YXRpYyBtYXAoZSl7cmV0dXJuIG5ldyBNYXBFbGVtZW50KGUpfXN0YXRpYyBtZWRpdW1JbmZvKGUpe3JldHVybiBuZXcgTWVkaXVtSW5mbyhlKX1zdGF0aWMgbWVzc2FnZShlKXtyZXR1cm4gbmV3IGNvbmZpZ19NZXNzYWdlKGUpfXN0YXRpYyBtZXNzYWdpbmcoZSl7cmV0dXJuIG5ldyBNZXNzYWdpbmcoZSl9c3RhdGljIG1vZGUoZSl7cmV0dXJuIG5ldyBNb2RlKGUpfXN0YXRpYyBtb2RpZnlBbm5vdHMoZSl7cmV0dXJuIG5ldyBNb2RpZnlBbm5vdHMoZSl9c3RhdGljIG1zZ0lkKGUpe3JldHVybiBuZXcgTXNnSWQoZSl9c3RhdGljIG5hbWVBdHRyKGUpe3JldHVybiBuZXcgTmFtZUF0dHIoZSl9c3RhdGljIG5ldmVyRW1iZWQoZSl7cmV0dXJuIG5ldyBOZXZlckVtYmVkKGUpfXN0YXRpYyBudW1iZXJPZkNvcGllcyhlKXtyZXR1cm4gbmV3IE51bWJlck9mQ29waWVzKGUpfXN0YXRpYyBvcGVuQWN0aW9uKGUpe3JldHVybiBuZXcgT3BlbkFjdGlvbihlKX1zdGF0aWMgb3V0cHV0KGUpe3JldHVybiBuZXcgT3V0cHV0KGUpfXN0YXRpYyBvdXRwdXRCaW4oZSl7cmV0dXJuIG5ldyBPdXRwdXRCaW4oZSl9c3RhdGljIG91dHB1dFhTTChlKXtyZXR1cm4gbmV3IE91dHB1dFhTTChlKX1zdGF0aWMgb3ZlcnByaW50KGUpe3JldHVybiBuZXcgT3ZlcnByaW50KGUpfXN0YXRpYyBwYWNrZXRzKGUpe3JldHVybiBuZXcgUGFja2V0cyhlKX1zdGF0aWMgcGFnZU9mZnNldChlKXtyZXR1cm4gbmV3IFBhZ2VPZmZzZXQoZSl9c3RhdGljIHBhZ2VSYW5nZShlKXtyZXR1cm4gbmV3IFBhZ2VSYW5nZShlKX1zdGF0aWMgcGFnaW5hdGlvbihlKXtyZXR1cm4gbmV3IFBhZ2luYXRpb24oZSl9c3RhdGljIHBhZ2luYXRpb25PdmVycmlkZShlKXtyZXR1cm4gbmV3IFBhZ2luYXRpb25PdmVycmlkZShlKX1zdGF0aWMgcGFydChlKXtyZXR1cm4gbmV3IFBhcnQoZSl9c3RhdGljIHBjbChlKXtyZXR1cm4gbmV3IFBjbChlKX1zdGF0aWMgcGRmKGUpe3JldHVybiBuZXcgUGRmKGUpfXN0YXRpYyBwZGZhKGUpe3JldHVybiBuZXcgUGRmYShlKX1zdGF0aWMgcGVybWlzc2lvbnMoZSl7cmV0dXJuIG5ldyBQZXJtaXNzaW9ucyhlKX1zdGF0aWMgcGlja1RyYXlCeVBERlNpemUoZSl7cmV0dXJuIG5ldyBQaWNrVHJheUJ5UERGU2l6ZShlKX1zdGF0aWMgcGljdHVyZShlKXtyZXR1cm4gbmV3IGNvbmZpZ19QaWN0dXJlKGUpfXN0YXRpYyBwbGFpbnRleHRNZXRhZGF0YShlKXtyZXR1cm4gbmV3IFBsYWludGV4dE1ldGFkYXRhKGUpfXN0YXRpYyBwcmVzZW5jZShlKXtyZXR1cm4gbmV3IFByZXNlbmNlKGUpfXN0YXRpYyBwcmVzZW50KGUpe3JldHVybiBuZXcgUHJlc2VudChlKX1zdGF0aWMgcHJpbnQoZSl7cmV0dXJuIG5ldyBQcmludChlKX1zdGF0aWMgcHJpbnRIaWdoUXVhbGl0eShlKXtyZXR1cm4gbmV3IFByaW50SGlnaFF1YWxpdHkoZSl9c3RhdGljIHByaW50U2NhbGluZyhlKXtyZXR1cm4gbmV3IFByaW50U2NhbGluZyhlKX1zdGF0aWMgcHJpbnRlck5hbWUoZSl7cmV0dXJuIG5ldyBQcmludGVyTmFtZShlKX1zdGF0aWMgcHJvZHVjZXIoZSl7cmV0dXJuIG5ldyBQcm9kdWNlcihlKX1zdGF0aWMgcHMoZSl7cmV0dXJuIG5ldyBQcyhlKX1zdGF0aWMgcmFuZ2UoZSl7cmV0dXJuIG5ldyBSYW5nZShlKX1zdGF0aWMgcmVjb3JkKGUpe3JldHVybiBuZXcgUmVjb3JkKGUpfXN0YXRpYyByZWxldmFudChlKXtyZXR1cm4gbmV3IFJlbGV2YW50KGUpfXN0YXRpYyByZW5hbWUoZSl7cmV0dXJuIG5ldyBSZW5hbWUoZSl9c3RhdGljIHJlbmRlclBvbGljeShlKXtyZXR1cm4gbmV3IFJlbmRlclBvbGljeShlKX1zdGF0aWMgcnVuU2NyaXB0cyhlKXtyZXR1cm4gbmV3IFJ1blNjcmlwdHMoZSl9c3RhdGljIHNjcmlwdChlKXtyZXR1cm4gbmV3IGNvbmZpZ19TY3JpcHQoZSl9c3RhdGljIHNjcmlwdE1vZGVsKGUpe3JldHVybiBuZXcgU2NyaXB0TW9kZWwoZSl9c3RhdGljIHNldmVyaXR5KGUpe3JldHVybiBuZXcgU2V2ZXJpdHkoZSl9c3RhdGljIHNpbGVudFByaW50KGUpe3JldHVybiBuZXcgU2lsZW50UHJpbnQoZSl9c3RhdGljIHN0YXBsZShlKXtyZXR1cm4gbmV3IFN0YXBsZShlKX1zdGF0aWMgc3RhcnROb2RlKGUpe3JldHVybiBuZXcgU3RhcnROb2RlKGUpfXN0YXRpYyBzdGFydFBhZ2UoZSl7cmV0dXJuIG5ldyBTdGFydFBhZ2UoZSl9c3RhdGljIHN1Ym1pdEZvcm1hdChlKXtyZXR1cm4gbmV3IFN1Ym1pdEZvcm1hdChlKX1zdGF0aWMgc3VibWl0VXJsKGUpe3JldHVybiBuZXcgU3VibWl0VXJsKGUpfXN0YXRpYyBzdWJzZXRCZWxvdyhlKXtyZXR1cm4gbmV3IFN1YnNldEJlbG93KGUpfXN0YXRpYyBzdXBwcmVzc0Jhbm5lcihlKXtyZXR1cm4gbmV3IFN1cHByZXNzQmFubmVyKGUpfXN0YXRpYyB0YWdnZWQoZSl7cmV0dXJuIG5ldyBUYWdnZWQoZSl9c3RhdGljIHRlbXBsYXRlKGUpe3JldHVybiBuZXcgY29uZmlnX1RlbXBsYXRlKGUpfXN0YXRpYyB0ZW1wbGF0ZUNhY2hlKGUpe3JldHVybiBuZXcgVGVtcGxhdGVDYWNoZShlKX1zdGF0aWMgdGhyZXNob2xkKGUpe3JldHVybiBuZXcgVGhyZXNob2xkKGUpfXN0YXRpYyB0byhlKXtyZXR1cm4gbmV3IFRvKGUpfXN0YXRpYyB0cmFjZShlKXtyZXR1cm4gbmV3IFRyYWNlKGUpfXN0YXRpYyB0cmFuc2Zvcm0oZSl7cmV0dXJuIG5ldyBUcmFuc2Zvcm0oZSl9c3RhdGljIHR5cGUoZSl7cmV0dXJuIG5ldyBUeXBlKGUpfXN0YXRpYyB1cmkoZSl7cmV0dXJuIG5ldyBVcmkoZSl9c3RhdGljIHZhbGlkYXRlKGUpe3JldHVybiBuZXcgY29uZmlnX1ZhbGlkYXRlKGUpfXN0YXRpYyB2YWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcyhlKXtyZXR1cm4gbmV3IFZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzKGUpfXN0YXRpYyB2YWxpZGF0aW9uTWVzc2FnaW5nKGUpe3JldHVybiBuZXcgVmFsaWRhdGlvbk1lc3NhZ2luZyhlKX1zdGF0aWMgdmVyc2lvbihlKXtyZXR1cm4gbmV3IFZlcnNpb24oZSl9c3RhdGljIHZlcnNpb25Db250cm9sKGUpe3JldHVybiBuZXcgVmVyc2lvbkNvbnRyb2woZSl9c3RhdGljIHZpZXdlclByZWZlcmVuY2VzKGUpe3JldHVybiBuZXcgVmlld2VyUHJlZmVyZW5jZXMoZSl9c3RhdGljIHdlYkNsaWVudChlKXtyZXR1cm4gbmV3IFdlYkNsaWVudChlKX1zdGF0aWMgd2hpdGVzcGFjZShlKXtyZXR1cm4gbmV3IFdoaXRlc3BhY2UoZSl9c3RhdGljIHdpbmRvdyhlKXtyZXR1cm4gbmV3IFdpbmRvdyhlKX1zdGF0aWMgeGRjKGUpe3JldHVybiBuZXcgWGRjKGUpfXN0YXRpYyB4ZHAoZSl7cmV0dXJuIG5ldyBYZHAoZSl9c3RhdGljIHhzbChlKXtyZXR1cm4gbmV3IFhzbChlKX1zdGF0aWMgenBsKGUpe3JldHVybiBuZXcgWnBsKGUpfX1jb25zdCBWbj1Cbi5jb25uZWN0aW9uU2V0LmlkO2NsYXNzIENvbm5lY3Rpb25TZXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoVm4sImNvbm5lY3Rpb25TZXQiLCEwKTt0aGlzLndzZGxDb25uZWN0aW9uPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnhtbENvbm5lY3Rpb249bmV3IFhGQU9iamVjdEFycmF5O3RoaXMueHNkQ29ubmVjdGlvbj1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEVmZmVjdGl2ZUlucHV0UG9saWN5IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFZuLCJlZmZlY3RpdmVJbnB1dFBvbGljeSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBFZmZlY3RpdmVPdXRwdXRQb2xpY3kgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoVm4sImVmZmVjdGl2ZU91dHB1dFBvbGljeSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBPcGVyYXRpb24gZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoVm4sIm9wZXJhdGlvbiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbnB1dD1lLmlucHV0fHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLm91dHB1dD1lLm91dHB1dHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBSb290RWxlbWVudCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihWbiwicm9vdEVsZW1lbnQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgU29hcEFjdGlvbiBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihWbiwic29hcEFjdGlvbiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTb2FwQWRkcmVzcyBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihWbiwic29hcEFkZHJlc3MiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgY29ubmVjdGlvbl9zZXRfVXJpIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFZuLCJ1cmkiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgV3NkbEFkZHJlc3MgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoVm4sIndzZGxBZGRyZXNzIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFdzZGxDb25uZWN0aW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFZuLCJ3c2RsQ29ubmVjdGlvbiIsITApO3RoaXMuZGF0YURlc2NyaXB0aW9uPWUuZGF0YURlc2NyaXB0aW9ufHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLmVmZmVjdGl2ZUlucHV0UG9saWN5PW51bGw7dGhpcy5lZmZlY3RpdmVPdXRwdXRQb2xpY3k9bnVsbDt0aGlzLm9wZXJhdGlvbj1udWxsO3RoaXMuc29hcEFjdGlvbj1udWxsO3RoaXMuc29hcEFkZHJlc3M9bnVsbDt0aGlzLndzZGxBZGRyZXNzPW51bGx9fWNsYXNzIFhtbENvbm5lY3Rpb24gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoVm4sInhtbENvbm5lY3Rpb24iLCEwKTt0aGlzLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51cmk9bnVsbH19Y2xhc3MgWHNkQ29ubmVjdGlvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihWbiwieHNkQ29ubmVjdGlvbiIsITApO3RoaXMuZGF0YURlc2NyaXB0aW9uPWUuZGF0YURlc2NyaXB0aW9ufHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJvb3RFbGVtZW50PW51bGw7dGhpcy51cmk9bnVsbH19Y2xhc3MgQ29ubmVjdGlvblNldE5hbWVzcGFjZXtzdGF0aWNbbG5dKGUsdCl7aWYoQ29ubmVjdGlvblNldE5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gQ29ubmVjdGlvblNldE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgY29ubmVjdGlvblNldChlKXtyZXR1cm4gbmV3IENvbm5lY3Rpb25TZXQoZSl9c3RhdGljIGVmZmVjdGl2ZUlucHV0UG9saWN5KGUpe3JldHVybiBuZXcgRWZmZWN0aXZlSW5wdXRQb2xpY3koZSl9c3RhdGljIGVmZmVjdGl2ZU91dHB1dFBvbGljeShlKXtyZXR1cm4gbmV3IEVmZmVjdGl2ZU91dHB1dFBvbGljeShlKX1zdGF0aWMgb3BlcmF0aW9uKGUpe3JldHVybiBuZXcgT3BlcmF0aW9uKGUpfXN0YXRpYyByb290RWxlbWVudChlKXtyZXR1cm4gbmV3IFJvb3RFbGVtZW50KGUpfXN0YXRpYyBzb2FwQWN0aW9uKGUpe3JldHVybiBuZXcgU29hcEFjdGlvbihlKX1zdGF0aWMgc29hcEFkZHJlc3MoZSl7cmV0dXJuIG5ldyBTb2FwQWRkcmVzcyhlKX1zdGF0aWMgdXJpKGUpe3JldHVybiBuZXcgY29ubmVjdGlvbl9zZXRfVXJpKGUpfXN0YXRpYyB3c2RsQWRkcmVzcyhlKXtyZXR1cm4gbmV3IFdzZGxBZGRyZXNzKGUpfXN0YXRpYyB3c2RsQ29ubmVjdGlvbihlKXtyZXR1cm4gbmV3IFdzZGxDb25uZWN0aW9uKGUpfXN0YXRpYyB4bWxDb25uZWN0aW9uKGUpe3JldHVybiBuZXcgWG1sQ29ubmVjdGlvbihlKX1zdGF0aWMgeHNkQ29ubmVjdGlvbihlKXtyZXR1cm4gbmV3IFhzZENvbm5lY3Rpb24oZSl9fWNvbnN0IF9uPUJuLmRhdGFzZXRzLmlkO2NsYXNzIGRhdGFzZXRzX0RhdGEgZXh0ZW5kcyBYbWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoX24sImRhdGEiLGUpfVtIc10oKXtyZXR1cm4hMH19Y2xhc3MgRGF0YXNldHMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoX24sImRhdGFzZXRzIiwhMCk7dGhpcy5kYXRhPW51bGw7dGhpcy5TaWduYXR1cmU9bnVsbH1banNdKGUpe2NvbnN0IHQ9ZVtPc107KCJkYXRhIj09PXQmJmVbcXNdPT09X258fCJTaWduYXR1cmUiPT09dCYmZVtxc109PT1Cbi5zaWduYXR1cmUuaWQpJiYodGhpc1t0XT1lKTt0aGlzW0FzXShlKX19Y2xhc3MgRGF0YXNldHNOYW1lc3BhY2V7c3RhdGljW2xuXShlLHQpe2lmKERhdGFzZXRzTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBEYXRhc2V0c05hbWVzcGFjZVtlXSh0KX1zdGF0aWMgZGF0YXNldHMoZSl7cmV0dXJuIG5ldyBEYXRhc2V0cyhlKX1zdGF0aWMgZGF0YShlKXtyZXR1cm4gbmV3IGRhdGFzZXRzX0RhdGEoZSl9fWNvbnN0IHpuPUJuLmxvY2FsZVNldC5pZDtjbGFzcyBDYWxlbmRhclN5bWJvbHMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoem4sImNhbGVuZGFyU3ltYm9scyIsITApO3RoaXMubmFtZT0iZ3JlZ29yaWFuIjt0aGlzLmRheU5hbWVzPW5ldyBYRkFPYmplY3RBcnJheSgyKTt0aGlzLmVyYU5hbWVzPW51bGw7dGhpcy5tZXJpZGllbU5hbWVzPW51bGw7dGhpcy5tb250aE5hbWVzPW5ldyBYRkFPYmplY3RBcnJheSgyKX19Y2xhc3MgQ3VycmVuY3lTeW1ib2wgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoem4sImN1cnJlbmN5U3ltYm9sIik7dGhpcy5uYW1lPWdldFN0cmluZ09wdGlvbihlLm5hbWUsWyJzeW1ib2wiLCJpc29uYW1lIiwiZGVjaW1hbCJdKX19Y2xhc3MgQ3VycmVuY3lTeW1ib2xzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHpuLCJjdXJyZW5jeVN5bWJvbHMiLCEwKTt0aGlzLmN1cnJlbmN5U3ltYm9sPW5ldyBYRkFPYmplY3RBcnJheSgzKX19Y2xhc3MgRGF0ZVBhdHRlcm4gZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoem4sImRhdGVQYXR0ZXJuIik7dGhpcy5uYW1lPWdldFN0cmluZ09wdGlvbihlLm5hbWUsWyJmdWxsIiwibG9uZyIsIm1lZCIsInNob3J0Il0pfX1jbGFzcyBEYXRlUGF0dGVybnMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoem4sImRhdGVQYXR0ZXJucyIsITApO3RoaXMuZGF0ZVBhdHRlcm49bmV3IFhGQU9iamVjdEFycmF5KDQpfX1jbGFzcyBEYXRlVGltZVN5bWJvbHMgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHpuLCJkYXRlVGltZVN5bWJvbHMiKX19Y2xhc3MgRGF5IGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHpuLCJkYXkiKX19Y2xhc3MgRGF5TmFtZXMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoem4sImRheU5hbWVzIiwhMCk7dGhpcy5hYmJyPWdldEludGVnZXIoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5kYXk9bmV3IFhGQU9iamVjdEFycmF5KDcpfX1jbGFzcyBFcmEgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoem4sImVyYSIpfX1jbGFzcyBFcmFOYW1lcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih6biwiZXJhTmFtZXMiLCEwKTt0aGlzLmVyYT1uZXcgWEZBT2JqZWN0QXJyYXkoMil9fWNsYXNzIGxvY2FsZV9zZXRfTG9jYWxlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHpuLCJsb2NhbGUiLCEwKTt0aGlzLmRlc2M9ZS5kZXNjfHwiIjt0aGlzLm5hbWU9Imlzb25hbWUiO3RoaXMuY2FsZW5kYXJTeW1ib2xzPW51bGw7dGhpcy5jdXJyZW5jeVN5bWJvbHM9bnVsbDt0aGlzLmRhdGVQYXR0ZXJucz1udWxsO3RoaXMuZGF0ZVRpbWVTeW1ib2xzPW51bGw7dGhpcy5udW1iZXJQYXR0ZXJucz1udWxsO3RoaXMubnVtYmVyU3ltYm9scz1udWxsO3RoaXMudGltZVBhdHRlcm5zPW51bGw7dGhpcy50eXBlRmFjZXM9bnVsbH19Y2xhc3MgbG9jYWxlX3NldF9Mb2NhbGVTZXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoem4sImxvY2FsZVNldCIsITApO3RoaXMubG9jYWxlPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgTWVyaWRpZW0gZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoem4sIm1lcmlkaWVtIil9fWNsYXNzIE1lcmlkaWVtTmFtZXMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoem4sIm1lcmlkaWVtTmFtZXMiLCEwKTt0aGlzLm1lcmlkaWVtPW5ldyBYRkFPYmplY3RBcnJheSgyKX19Y2xhc3MgTW9udGggZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoem4sIm1vbnRoIil9fWNsYXNzIE1vbnRoTmFtZXMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoem4sIm1vbnRoTmFtZXMiLCEwKTt0aGlzLmFiYnI9Z2V0SW50ZWdlcih7ZGF0YTplLmFiYnIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLm1vbnRoPW5ldyBYRkFPYmplY3RBcnJheSgxMil9fWNsYXNzIE51bWJlclBhdHRlcm4gZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoem4sIm51bWJlclBhdHRlcm4iKTt0aGlzLm5hbWU9Z2V0U3RyaW5nT3B0aW9uKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSl9fWNsYXNzIE51bWJlclBhdHRlcm5zIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHpuLCJudW1iZXJQYXR0ZXJucyIsITApO3RoaXMubnVtYmVyUGF0dGVybj1uZXcgWEZBT2JqZWN0QXJyYXkoNCl9fWNsYXNzIE51bWJlclN5bWJvbCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih6biwibnVtYmVyU3ltYm9sIik7dGhpcy5uYW1lPWdldFN0cmluZ09wdGlvbihlLm5hbWUsWyJkZWNpbWFsIiwiZ3JvdXBpbmciLCJwZXJjZW50IiwibWludXMiLCJ6ZXJvIl0pfX1jbGFzcyBOdW1iZXJTeW1ib2xzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHpuLCJudW1iZXJTeW1ib2xzIiwhMCk7dGhpcy5udW1iZXJTeW1ib2w9bmV3IFhGQU9iamVjdEFycmF5KDUpfX1jbGFzcyBUaW1lUGF0dGVybiBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih6biwidGltZVBhdHRlcm4iKTt0aGlzLm5hbWU9Z2V0U3RyaW5nT3B0aW9uKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSl9fWNsYXNzIFRpbWVQYXR0ZXJucyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih6biwidGltZVBhdHRlcm5zIiwhMCk7dGhpcy50aW1lUGF0dGVybj1uZXcgWEZBT2JqZWN0QXJyYXkoNCl9fWNsYXNzIFR5cGVGYWNlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHpuLCJ0eXBlRmFjZSIsITApO3RoaXMubmFtZT0iInxlLm5hbWV9fWNsYXNzIFR5cGVGYWNlcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih6biwidHlwZUZhY2VzIiwhMCk7dGhpcy50eXBlRmFjZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIExvY2FsZVNldE5hbWVzcGFjZXtzdGF0aWNbbG5dKGUsdCl7aWYoTG9jYWxlU2V0TmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBMb2NhbGVTZXROYW1lc3BhY2VbZV0odCl9c3RhdGljIGNhbGVuZGFyU3ltYm9scyhlKXtyZXR1cm4gbmV3IENhbGVuZGFyU3ltYm9scyhlKX1zdGF0aWMgY3VycmVuY3lTeW1ib2woZSl7cmV0dXJuIG5ldyBDdXJyZW5jeVN5bWJvbChlKX1zdGF0aWMgY3VycmVuY3lTeW1ib2xzKGUpe3JldHVybiBuZXcgQ3VycmVuY3lTeW1ib2xzKGUpfXN0YXRpYyBkYXRlUGF0dGVybihlKXtyZXR1cm4gbmV3IERhdGVQYXR0ZXJuKGUpfXN0YXRpYyBkYXRlUGF0dGVybnMoZSl7cmV0dXJuIG5ldyBEYXRlUGF0dGVybnMoZSl9c3RhdGljIGRhdGVUaW1lU3ltYm9scyhlKXtyZXR1cm4gbmV3IERhdGVUaW1lU3ltYm9scyhlKX1zdGF0aWMgZGF5KGUpe3JldHVybiBuZXcgRGF5KGUpfXN0YXRpYyBkYXlOYW1lcyhlKXtyZXR1cm4gbmV3IERheU5hbWVzKGUpfXN0YXRpYyBlcmEoZSl7cmV0dXJuIG5ldyBFcmEoZSl9c3RhdGljIGVyYU5hbWVzKGUpe3JldHVybiBuZXcgRXJhTmFtZXMoZSl9c3RhdGljIGxvY2FsZShlKXtyZXR1cm4gbmV3IGxvY2FsZV9zZXRfTG9jYWxlKGUpfXN0YXRpYyBsb2NhbGVTZXQoZSl7cmV0dXJuIG5ldyBsb2NhbGVfc2V0X0xvY2FsZVNldChlKX1zdGF0aWMgbWVyaWRpZW0oZSl7cmV0dXJuIG5ldyBNZXJpZGllbShlKX1zdGF0aWMgbWVyaWRpZW1OYW1lcyhlKXtyZXR1cm4gbmV3IE1lcmlkaWVtTmFtZXMoZSl9c3RhdGljIG1vbnRoKGUpe3JldHVybiBuZXcgTW9udGgoZSl9c3RhdGljIG1vbnRoTmFtZXMoZSl7cmV0dXJuIG5ldyBNb250aE5hbWVzKGUpfXN0YXRpYyBudW1iZXJQYXR0ZXJuKGUpe3JldHVybiBuZXcgTnVtYmVyUGF0dGVybihlKX1zdGF0aWMgbnVtYmVyUGF0dGVybnMoZSl7cmV0dXJuIG5ldyBOdW1iZXJQYXR0ZXJucyhlKX1zdGF0aWMgbnVtYmVyU3ltYm9sKGUpe3JldHVybiBuZXcgTnVtYmVyU3ltYm9sKGUpfXN0YXRpYyBudW1iZXJTeW1ib2xzKGUpe3JldHVybiBuZXcgTnVtYmVyU3ltYm9scyhlKX1zdGF0aWMgdGltZVBhdHRlcm4oZSl7cmV0dXJuIG5ldyBUaW1lUGF0dGVybihlKX1zdGF0aWMgdGltZVBhdHRlcm5zKGUpe3JldHVybiBuZXcgVGltZVBhdHRlcm5zKGUpfXN0YXRpYyB0eXBlRmFjZShlKXtyZXR1cm4gbmV3IFR5cGVGYWNlKGUpfXN0YXRpYyB0eXBlRmFjZXMoZSl7cmV0dXJuIG5ldyBUeXBlRmFjZXMoZSl9fWNvbnN0ICRuPUJuLnNpZ25hdHVyZS5pZDtjbGFzcyBzaWduYXR1cmVfU2lnbmF0dXJlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCRuLCJzaWduYXR1cmUiLCEwKX19Y2xhc3MgU2lnbmF0dXJlTmFtZXNwYWNle3N0YXRpY1tsbl0oZSx0KXtpZihTaWduYXR1cmVOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFNpZ25hdHVyZU5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgc2lnbmF0dXJlKGUpe3JldHVybiBuZXcgc2lnbmF0dXJlX1NpZ25hdHVyZShlKX19Y29uc3QgQW89Qm4uc3R5bGVzaGVldC5pZDtjbGFzcyBTdHlsZXNoZWV0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKEFvLCJzdHlsZXNoZWV0IiwhMCl9fWNsYXNzIFN0eWxlc2hlZXROYW1lc3BhY2V7c3RhdGljW2xuXShlLHQpe2lmKFN0eWxlc2hlZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFN0eWxlc2hlZXROYW1lc3BhY2VbZV0odCl9c3RhdGljIHN0eWxlc2hlZXQoZSl7cmV0dXJuIG5ldyBTdHlsZXNoZWV0KGUpfX1jb25zdCBlbz1Cbi54ZHAuaWQ7Y2xhc3MgeGRwX1hkcCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlbywieGRwIiwhMCk7dGhpcy51dWlkPWUudXVpZHx8IiI7dGhpcy50aW1lU3RhbXA9ZS50aW1lU3RhbXB8fCIiO3RoaXMuY29uZmlnPW51bGw7dGhpcy5jb25uZWN0aW9uU2V0PW51bGw7dGhpcy5kYXRhc2V0cz1udWxsO3RoaXMubG9jYWxlU2V0PW51bGw7dGhpcy5zdHlsZXNoZWV0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRlbXBsYXRlPW51bGx9W1hzXShlKXtjb25zdCB0PUJuW2VbT3NdXTtyZXR1cm4gdCYmZVtxc109PT10LmlkfX1jbGFzcyBYZHBOYW1lc3BhY2V7c3RhdGljW2xuXShlLHQpe2lmKFhkcE5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gWGRwTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyB4ZHAoZSl7cmV0dXJuIG5ldyB4ZHBfWGRwKGUpfX1jb25zdCB0bz1Cbi54aHRtbC5pZCxpbz1TeW1ib2woKSxhbz1uZXcgU2V0KFsiY29sb3IiLCJmb250IiwiZm9udC1mYW1pbHkiLCJmb250LXNpemUiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC13ZWlnaHQiLCJtYXJnaW4iLCJtYXJnaW4tYm90dG9tIiwibWFyZ2luLWxlZnQiLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW4tdG9wIiwibGV0dGVyLXNwYWNpbmciLCJsaW5lLWhlaWdodCIsIm9ycGhhbnMiLCJwYWdlLWJyZWFrLWFmdGVyIiwicGFnZS1icmVhay1iZWZvcmUiLCJwYWdlLWJyZWFrLWluc2lkZSIsInRhYi1pbnRlcnZhbCIsInRhYi1zdG9wIiwidGV4dC1hbGlnbiIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtaW5kZW50IiwidmVydGljYWwtYWxpZ24iLCJ3aWRvd3MiLCJrZXJuaW5nLW1vZGUiLCJ4ZmEtZm9udC1ob3Jpem9udGFsLXNjYWxlIiwieGZhLWZvbnQtdmVydGljYWwtc2NhbGUiLCJ4ZmEtc3BhY2VydW4iLCJ4ZmEtdGFiLXN0b3BzIl0pLHJvPW5ldyBNYXAoW1sicGFnZS1icmVhay1hZnRlciIsImJyZWFrQWZ0ZXIiXSxbInBhZ2UtYnJlYWstYmVmb3JlIiwiYnJlYWtCZWZvcmUiXSxbInBhZ2UtYnJlYWstaW5zaWRlIiwiYnJlYWtJbnNpZGUiXSxbImtlcm5pbmctbW9kZSIsZT0+Im5vbmUiPT09ZT8ibm9uZSI6Im5vcm1hbCJdLFsieGZhLWZvbnQtaG9yaXpvbnRhbC1zY2FsZSIsZT0+YHNjYWxlWCgke01hdGgubWF4KDAsTWF0aC5taW4ocGFyc2VJbnQoZSkvMTAwKSkudG9GaXhlZCgyKX0pYF0sWyJ4ZmEtZm9udC12ZXJ0aWNhbC1zY2FsZSIsZT0+YHNjYWxlWSgke01hdGgubWF4KDAsTWF0aC5taW4ocGFyc2VJbnQoZSkvMTAwKSkudG9GaXhlZCgyKX0pYF0sWyJ4ZmEtc3BhY2VydW4iLCIiXSxbInhmYS10YWItc3RvcHMiLCIiXSxbImZvbnQtc2l6ZSIsKGUsdCk9Pm1lYXN1cmVUb1N0cmluZyguOTkqKGU9dC5mb250U2l6ZT1nZXRNZWFzdXJlbWVudChlKSkpXSxbImxldHRlci1zcGFjaW5nIixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXSxbImxpbmUtaGVpZ2h0IixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXSxbIm1hcmdpbiIsZT0+bWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KGUpKV0sWyJtYXJnaW4tYm90dG9tIixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXSxbIm1hcmdpbi1sZWZ0IixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXSxbIm1hcmdpbi1yaWdodCIsZT0+bWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KGUpKV0sWyJtYXJnaW4tdG9wIixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXSxbInRleHQtaW5kZW50IixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXSxbImZvbnQtZmFtaWx5IixlPT5lXSxbInZlcnRpY2FsLWFsaWduIixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXV0pLHNvPS9ccysvZyxubz0vW1xyXG5dKy9nLG9vPS9cclxuPy9nO2Z1bmN0aW9uIG1hcFN0eWxlKGUsdCxpKXtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoIWUpcmV0dXJuIGE7Y29uc3Qgcj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFt0LGldb2YgZS5zcGxpdCgiOyIpLm1hcCgoZT0+ZS5zcGxpdCgiOiIsMikpKSl7Y29uc3QgZT1yby5nZXQodCk7aWYoIiI9PT1lKWNvbnRpbnVlO2xldCBzPWk7ZSYmKHM9InN0cmluZyI9PXR5cGVvZiBlP2U6ZShpLHIpKTt0LmVuZHNXaXRoKCJzY2FsZSIpP2EudHJhbnNmb3JtPWEudHJhbnNmb3JtP2Ake2FbdF19ICR7c31gOnM6YVt0LnJlcGxhY2VBbGwoLy0oW2EtekEtWl0pL2csKChlLHQpPT50LnRvVXBwZXJDYXNlKCkpKV09c31hLmZvbnRGYW1pbHkmJnNldEZvbnRGYW1pbHkoe3R5cGVmYWNlOmEuZm9udEZhbWlseSx3ZWlnaHQ6YS5mb250V2VpZ2h0fHwibm9ybWFsIixwb3N0dXJlOmEuZm9udFN0eWxlfHwibm9ybWFsIixzaXplOnIuZm9udFNpemV8fDB9LHQsdFtTc10uZm9udEZpbmRlcixhKTtpZihpJiZhLnZlcnRpY2FsQWxpZ24mJiIwcHgiIT09YS52ZXJ0aWNhbEFsaWduJiZhLmZvbnRTaXplKXtjb25zdCBlPS41ODMsdD0uMzMzLGk9Z2V0TWVhc3VyZW1lbnQoYS5mb250U2l6ZSk7YS5mb250U2l6ZT1tZWFzdXJlVG9TdHJpbmcoaSplKTthLnZlcnRpY2FsQWxpZ249bWVhc3VyZVRvU3RyaW5nKE1hdGguc2lnbihnZXRNZWFzdXJlbWVudChhLnZlcnRpY2FsQWxpZ24pKSppKnQpfWkmJmEuZm9udFNpemUmJihhLmZvbnRTaXplPWBjYWxjKCR7YS5mb250U2l6ZX0gKiB2YXIoLS1zY2FsZS1mYWN0b3IpKWApO2ZpeFRleHRJbmRlbnQoYSk7cmV0dXJuIGF9Y29uc3QgZ289bmV3IFNldChbImJvZHkiLCJodG1sIl0pO2NsYXNzIFhodG1sT2JqZWN0IGV4dGVuZHMgWG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodG8sdCk7dGhpc1tpb109ITE7dGhpcy5zdHlsZT1lLnN0eWxlfHwiIn1bdHNdKGUpe3N1cGVyW3RzXShlKTt0aGlzLnN0eWxlPWZ1bmN0aW9uIGNoZWNrU3R5bGUoZSl7cmV0dXJuIGUuc3R5bGU/ZS5zdHlsZS50cmltKCkuc3BsaXQoL1xzKjtccyovKS5maWx0ZXIoKGU9PiEhZSkpLm1hcCgoZT0+ZS5zcGxpdCgvXHMqOlxzKi8sMikpKS5maWx0ZXIoKChbdCxpXSk9PnsiZm9udC1mYW1pbHkiPT09dCYmZVtTc10udXNlZFR5cGVmYWNlcy5hZGQoaSk7cmV0dXJuIGFvLmhhcyh0KX0pKS5tYXAoKGU9PmUuam9pbigiOiIpKSkuam9pbigiOyIpOiIifSh0aGlzKX1benJdKCl7cmV0dXJuIWdvLmhhcyh0aGlzW09zXSl9W1pzXShlLHQ9ITEpe2lmKHQpdGhpc1tpb109ITA7ZWxzZXtlPWUucmVwbGFjZUFsbChubywiIik7dGhpcy5zdHlsZS5pbmNsdWRlcygieGZhLXNwYWNlcnVuOnllcyIpfHwoZT1lLnJlcGxhY2VBbGwoc28sIiAiKSl9ZSYmKHRoaXNbbnNdKz1lKX1bVnNdKGUsdD0hMCl7Y29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpLGE9e3RvcDpOYU4sYm90dG9tOk5hTixsZWZ0Ok5hTixyaWdodDpOYU59O2xldCByPW51bGw7Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLnN0eWxlLnNwbGl0KCI7IikubWFwKChlPT5lLnNwbGl0KCI6IiwyKSkpKXN3aXRjaChlKXtjYXNlImZvbnQtZmFtaWx5IjppLnR5cGVmYWNlPXN0cmlwUXVvdGVzKHQpO2JyZWFrO2Nhc2UiZm9udC1zaXplIjppLnNpemU9Z2V0TWVhc3VyZW1lbnQodCk7YnJlYWs7Y2FzZSJmb250LXdlaWdodCI6aS53ZWlnaHQ9dDticmVhaztjYXNlImZvbnQtc3R5bGUiOmkucG9zdHVyZT10O2JyZWFrO2Nhc2UibGV0dGVyLXNwYWNpbmciOmkubGV0dGVyU3BhY2luZz1nZXRNZWFzdXJlbWVudCh0KTticmVhaztjYXNlIm1hcmdpbiI6Y29uc3QgZT10LnNwbGl0KC8gXHQvKS5tYXAoKGU9PmdldE1lYXN1cmVtZW50KGUpKSk7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDE6YS50b3A9YS5ib3R0b209YS5sZWZ0PWEucmlnaHQ9ZVswXTticmVhaztjYXNlIDI6YS50b3A9YS5ib3R0b209ZVswXTthLmxlZnQ9YS5yaWdodD1lWzFdO2JyZWFrO2Nhc2UgMzphLnRvcD1lWzBdO2EuYm90dG9tPWVbMl07YS5sZWZ0PWEucmlnaHQ9ZVsxXTticmVhaztjYXNlIDQ6YS50b3A9ZVswXTthLmxlZnQ9ZVsxXTthLmJvdHRvbT1lWzJdO2EucmlnaHQ9ZVszXX1icmVhaztjYXNlIm1hcmdpbi10b3AiOmEudG9wPWdldE1lYXN1cmVtZW50KHQpO2JyZWFrO2Nhc2UibWFyZ2luLWJvdHRvbSI6YS5ib3R0b209Z2V0TWVhc3VyZW1lbnQodCk7YnJlYWs7Y2FzZSJtYXJnaW4tbGVmdCI6YS5sZWZ0PWdldE1lYXN1cmVtZW50KHQpO2JyZWFrO2Nhc2UibWFyZ2luLXJpZ2h0IjphLnJpZ2h0PWdldE1lYXN1cmVtZW50KHQpO2JyZWFrO2Nhc2UibGluZS1oZWlnaHQiOnI9Z2V0TWVhc3VyZW1lbnQodCl9ZS5wdXNoRGF0YShpLGEscik7aWYodGhpc1tuc10pZS5hZGRTdHJpbmcodGhpc1tuc10pO2Vsc2UgZm9yKGNvbnN0IHQgb2YgdGhpc1ttc10oKSkiI3RleHQiIT09dFtPc10/dFtWc10oZSk6ZS5hZGRTdHJpbmcodFtuc10pO3QmJmUucG9wRm9udCgpfVtJbl0oZSl7Y29uc3QgdD1bXTt0aGlzW0lzXT17Y2hpbGRyZW46dH07dGhpc1tlc10oe30pO2lmKDA9PT10Lmxlbmd0aCYmIXRoaXNbbnNdKXJldHVybiBIVE1MUmVzdWx0LkVNUFRZO2xldCBpO2k9dGhpc1tpb10/dGhpc1tuc10/dGhpc1tuc10ucmVwbGFjZUFsbChvbywiXG4iKTp2b2lkIDA6dGhpc1tuc118fHZvaWQgMDtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOnRoaXNbT3NdLGF0dHJpYnV0ZXM6e2hyZWY6dGhpcy5ocmVmLHN0eWxlOm1hcFN0eWxlKHRoaXMuc3R5bGUsdGhpcyx0aGlzW2lvXSl9LGNoaWxkcmVuOnQsdmFsdWU6aX0pfX1jbGFzcyBBIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiYSIpO3RoaXMuaHJlZj1maXhVUkwoZS5ocmVmKXx8IiJ9fWNsYXNzIEIgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJiIil9W1ZzXShlKXtlLnB1c2hGb250KHt3ZWlnaHQ6ImJvbGQifSk7c3VwZXJbVnNdKGUpO2UucG9wRm9udCgpfX1jbGFzcyBCb2R5IGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiYm9keSIpfVtJbl0oZSl7Y29uc3QgdD1zdXBlcltJbl0oZSkse2h0bWw6aX09dDtpZighaSlyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTtpLm5hbWU9ImRpdiI7aS5hdHRyaWJ1dGVzLmNsYXNzPVsieGZhUmljaCJdO3JldHVybiB0fX1jbGFzcyBCciBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImJyIil9W29uXSgpe3JldHVybiJcbiJ9W1ZzXShlKXtlLmFkZFN0cmluZygiXG4iKX1bSW5dKGUpe3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImJyIn0pfX1jbGFzcyBIdG1sIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiaHRtbCIpfVtJbl0oZSl7Y29uc3QgdD1bXTt0aGlzW0lzXT17Y2hpbGRyZW46dH07dGhpc1tlc10oe30pO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOnt9fSx2YWx1ZTp0aGlzW25zXXx8IiJ9KTtpZigxPT09dC5sZW5ndGgpe2NvbnN0IGU9dFswXTtpZihlLmF0dHJpYnV0ZXM/LmNsYXNzLmluY2x1ZGVzKCJ4ZmFSaWNoIikpcmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhlKX1yZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOnt9fSxjaGlsZHJlbjp0fSl9fWNsYXNzIEkgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJpIil9W1ZzXShlKXtlLnB1c2hGb250KHtwb3N0dXJlOiJpdGFsaWMifSk7c3VwZXJbVnNdKGUpO2UucG9wRm9udCgpfX1jbGFzcyBMaSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImxpIil9fWNsYXNzIE9sIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwib2wiKX19Y2xhc3MgUCBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInAiKX1bVnNdKGUpe3N1cGVyW1ZzXShlLCExKTtlLmFkZFN0cmluZygiXG4iKTtlLmFkZFBhcmEoKTtlLnBvcEZvbnQoKX1bb25dKCl7cmV0dXJuIHRoaXNbRHNdKClbbXNdKCkuYXQoLTEpPT09dGhpcz9zdXBlcltvbl0oKTpzdXBlcltvbl0oKSsiXG4ifX1jbGFzcyBTcGFuIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwic3BhbiIpfX1jbGFzcyBTdWIgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzdWIiKX19Y2xhc3MgU3VwIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwic3VwIil9fWNsYXNzIFVsIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwidWwiKX19Y2xhc3MgWGh0bWxOYW1lc3BhY2V7c3RhdGljW2xuXShlLHQpe2lmKFhodG1sTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBYaHRtbE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgYShlKXtyZXR1cm4gbmV3IEEoZSl9c3RhdGljIGIoZSl7cmV0dXJuIG5ldyBCKGUpfXN0YXRpYyBib2R5KGUpe3JldHVybiBuZXcgQm9keShlKX1zdGF0aWMgYnIoZSl7cmV0dXJuIG5ldyBCcihlKX1zdGF0aWMgaHRtbChlKXtyZXR1cm4gbmV3IEh0bWwoZSl9c3RhdGljIGkoZSl7cmV0dXJuIG5ldyBJKGUpfXN0YXRpYyBsaShlKXtyZXR1cm4gbmV3IExpKGUpfXN0YXRpYyBvbChlKXtyZXR1cm4gbmV3IE9sKGUpfXN0YXRpYyBwKGUpe3JldHVybiBuZXcgUChlKX1zdGF0aWMgc3BhbihlKXtyZXR1cm4gbmV3IFNwYW4oZSl9c3RhdGljIHN1YihlKXtyZXR1cm4gbmV3IFN1YihlKX1zdGF0aWMgc3VwKGUpe3JldHVybiBuZXcgU3VwKGUpfXN0YXRpYyB1bChlKXtyZXR1cm4gbmV3IFVsKGUpfX1jb25zdCBJbz17Y29uZmlnOkNvbmZpZ05hbWVzcGFjZSxjb25uZWN0aW9uOkNvbm5lY3Rpb25TZXROYW1lc3BhY2UsZGF0YXNldHM6RGF0YXNldHNOYW1lc3BhY2UsbG9jYWxlU2V0OkxvY2FsZVNldE5hbWVzcGFjZSxzaWduYXR1cmU6U2lnbmF0dXJlTmFtZXNwYWNlLHN0eWxlc2hlZXQ6U3R5bGVzaGVldE5hbWVzcGFjZSx0ZW1wbGF0ZTpUZW1wbGF0ZU5hbWVzcGFjZSx4ZHA6WGRwTmFtZXNwYWNlLHhodG1sOlhodG1sTmFtZXNwYWNlfTtjbGFzcyBVbmtub3duTmFtZXNwYWNle2NvbnN0cnVjdG9yKGUpe3RoaXMubmFtZXNwYWNlSWQ9ZX1bbG5dKGUsdCl7cmV0dXJuIG5ldyBYbWxPYmplY3QodGhpcy5uYW1lc3BhY2VJZCxlLHQpfX1jbGFzcyBSb290IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKC0xLCJyb290IixPYmplY3QuY3JlYXRlKG51bGwpKTt0aGlzLmVsZW1lbnQ9bnVsbDt0aGlzW1JzXT1lfVtqc10oZSl7dGhpcy5lbGVtZW50PWU7cmV0dXJuITB9W2NzXSgpe3N1cGVyW2NzXSgpO2lmKHRoaXMuZWxlbWVudC50ZW1wbGF0ZSBpbnN0YW5jZW9mIFRlbXBsYXRlKXt0aGlzW1JzXS5zZXQoQW4sdGhpcy5lbGVtZW50KTt0aGlzLmVsZW1lbnQudGVtcGxhdGVbZW5dKHRoaXNbUnNdKTt0aGlzLmVsZW1lbnQudGVtcGxhdGVbUnNdPXRoaXNbUnNdfX19Y2xhc3MgRW1wdHkgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoKXtzdXBlcigtMSwiIixPYmplY3QuY3JlYXRlKG51bGwpKX1banNdKGUpe3JldHVybiExfX1jbGFzcyBCdWlsZGVye2NvbnN0cnVjdG9yKGU9bnVsbCl7dGhpcy5fbmFtZXNwYWNlU3RhY2s9W107dGhpcy5fbnNBZ25vc3RpY0xldmVsPTA7dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXM9bmV3IE1hcDt0aGlzLl9uYW1lc3BhY2VzPW5ldyBNYXA7dGhpcy5fbmV4dE5zSWQ9TWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyhCbikubWFwKCgoe2lkOmV9KT0+ZSkpKTt0aGlzLl9jdXJyZW50TmFtZXNwYWNlPWV8fG5ldyBVbmtub3duTmFtZXNwYWNlKCsrdGhpcy5fbmV4dE5zSWQpfWJ1aWxkUm9vdChlKXtyZXR1cm4gbmV3IFJvb3QoZSl9YnVpbGQoe25zUHJlZml4OmUsbmFtZTp0LGF0dHJpYnV0ZXM6aSxuYW1lc3BhY2U6YSxwcmVmaXhlczpyfSl7Y29uc3Qgcz1udWxsIT09YTtpZihzKXt0aGlzLl9uYW1lc3BhY2VTdGFjay5wdXNoKHRoaXMuX2N1cnJlbnROYW1lc3BhY2UpO3RoaXMuX2N1cnJlbnROYW1lc3BhY2U9dGhpcy5fc2VhcmNoTmFtZXNwYWNlKGEpfXImJnRoaXMuX2FkZE5hbWVzcGFjZVByZWZpeChyKTtpZihpLmhhc093blByb3BlcnR5KFdzKSl7Y29uc3QgZT1Jby5kYXRhc2V0cyx0PWlbV3NdO2xldCBhPW51bGw7Zm9yKGNvbnN0W2kscl1vZiBPYmplY3QuZW50cmllcyh0KSl7aWYodGhpcy5fZ2V0TmFtZXNwYWNlVG9Vc2UoaSk9PT1lKXthPXt4ZmE6cn07YnJlYWt9fWE/aVtXc109YTpkZWxldGUgaVtXc119Y29uc3Qgbj10aGlzLl9nZXROYW1lc3BhY2VUb1VzZShlKSxvPW4/Lltsbl0odCxpKXx8bmV3IEVtcHR5O29bSHNdKCkmJnRoaXMuX25zQWdub3N0aWNMZXZlbCsrOyhzfHxyfHxvW0hzXSgpKSYmKG9bYXNdPXtoYXNOYW1lc3BhY2U6cyxwcmVmaXhlczpyLG5zQWdub3N0aWM6b1tIc10oKX0pO3JldHVybiBvfWlzTnNBZ25vc3RpYygpe3JldHVybiB0aGlzLl9uc0Fnbm9zdGljTGV2ZWw+MH1fc2VhcmNoTmFtZXNwYWNlKGUpe2xldCB0PXRoaXMuX25hbWVzcGFjZXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Zm9yKGNvbnN0W2kse2NoZWNrOmF9XW9mIE9iamVjdC5lbnRyaWVzKEJuKSlpZihhKGUpKXt0PUlvW2ldO2lmKHQpe3RoaXMuX25hbWVzcGFjZXMuc2V0KGUsdCk7cmV0dXJuIHR9YnJlYWt9dD1uZXcgVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKTt0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpO3JldHVybiB0fV9hZGROYW1lc3BhY2VQcmVmaXgoZSl7Zm9yKGNvbnN0e3ByZWZpeDp0LHZhbHVlOml9b2YgZSl7Y29uc3QgZT10aGlzLl9zZWFyY2hOYW1lc3BhY2UoaSk7bGV0IGE9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KHQpO2lmKCFhKXthPVtdO3RoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldCh0LGEpfWEucHVzaChlKX19X2dldE5hbWVzcGFjZVRvVXNlKGUpe2lmKCFlKXJldHVybiB0aGlzLl9jdXJyZW50TmFtZXNwYWNlO2NvbnN0IHQ9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpO2lmKHQ/Lmxlbmd0aD4wKXJldHVybiB0LmF0KC0xKTt3YXJuKGBVbmtub3duIG5hbWVzcGFjZSBwcmVmaXg6ICR7ZX0uYCk7cmV0dXJuIG51bGx9Y2xlYW4oZSl7Y29uc3R7aGFzTmFtZXNwYWNlOnQscHJlZml4ZXM6aSxuc0Fnbm9zdGljOmF9PWU7dCYmKHRoaXMuX2N1cnJlbnROYW1lc3BhY2U9dGhpcy5fbmFtZXNwYWNlU3RhY2sucG9wKCkpO2kmJmkuZm9yRWFjaCgoKHtwcmVmaXg6ZX0pPT57dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpLnBvcCgpfSkpO2EmJnRoaXMuX25zQWdub3N0aWNMZXZlbC0tfX1jbGFzcyBYRkFQYXJzZXIgZXh0ZW5kcyBYTUxQYXJzZXJCYXNle2NvbnN0cnVjdG9yKGU9bnVsbCx0PSExKXtzdXBlcigpO3RoaXMuX2J1aWxkZXI9bmV3IEJ1aWxkZXIoZSk7dGhpcy5fc3RhY2s9W107dGhpcy5fZ2xvYmFsRGF0YT17dXNlZFR5cGVmYWNlczpuZXcgU2V0fTt0aGlzLl9pZHM9bmV3IE1hcDt0aGlzLl9jdXJyZW50PXRoaXMuX2J1aWxkZXIuYnVpbGRSb290KHRoaXMuX2lkcyk7dGhpcy5fZXJyb3JDb2RlPUhyO3RoaXMuX3doaXRlUmVnZXg9L15ccyskLzt0aGlzLl9uYnNwcz0vXHhhMCsvZzt0aGlzLl9yaWNoVGV4dD10fXBhcnNlKGUpe3RoaXMucGFyc2VYbWwoZSk7aWYodGhpcy5fZXJyb3JDb2RlPT09SHIpe3RoaXMuX2N1cnJlbnRbY3NdKCk7cmV0dXJuIHRoaXMuX2N1cnJlbnQuZWxlbWVudH19b25UZXh0KGUpe2U9ZS5yZXBsYWNlKHRoaXMuX25ic3BzLChlPT5lLnNsaWNlKDEpKyIgIikpO3RoaXMuX3JpY2hUZXh0fHx0aGlzLl9jdXJyZW50W3pyXSgpP3RoaXMuX2N1cnJlbnRbWnNdKGUsdGhpcy5fcmljaFRleHQpOnRoaXMuX3doaXRlUmVnZXgudGVzdChlKXx8dGhpcy5fY3VycmVudFtac10oZS50cmltKCkpfW9uQ2RhdGEoZSl7dGhpcy5fY3VycmVudFtac10oZSl9X21rQXR0cmlidXRlcyhlLHQpe2xldCBpPW51bGwsYT1udWxsO2NvbnN0IHI9T2JqZWN0LmNyZWF0ZSh7fSk7Zm9yKGNvbnN0e25hbWU6cyx2YWx1ZTpufW9mIGUpaWYoInhtbG5zIj09PXMpaT93YXJuKGBYRkEgLSBtdWx0aXBsZSBuYW1lc3BhY2UgZGVmaW5pdGlvbiBpbiA8JHt0fT5gKTppPW47ZWxzZSBpZihzLnN0YXJ0c1dpdGgoInhtbG5zOiIpKXtjb25zdCBlPXMuc3Vic3RyaW5nKDYpO2F8fChhPVtdKTthLnB1c2goe3ByZWZpeDplLHZhbHVlOm59KX1lbHNle2NvbnN0IGU9cy5pbmRleE9mKCI6Iik7aWYoLTE9PT1lKXJbc109bjtlbHNle2xldCB0PXJbV3NdO3R8fCh0PXJbV3NdPU9iamVjdC5jcmVhdGUobnVsbCkpO2NvbnN0W2ksYV09W3Muc2xpY2UoMCxlKSxzLnNsaWNlKGUrMSldOyh0W2ldfHw9T2JqZWN0LmNyZWF0ZShudWxsKSlbYV09bn19cmV0dXJuW2ksYSxyXX1fZ2V0TmFtZUFuZFByZWZpeChlLHQpe2NvbnN0IGk9ZS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PT1pP1tlLG51bGxdOltlLnN1YnN0cmluZyhpKzEpLHQ/IiI6ZS5zdWJzdHJpbmcoMCxpKV19b25CZWdpbkVsZW1lbnQoZSx0LGkpe2NvbnN0W2EscixzXT10aGlzLl9ta0F0dHJpYnV0ZXModCxlKSxbbixvXT10aGlzLl9nZXROYW1lQW5kUHJlZml4KGUsdGhpcy5fYnVpbGRlci5pc05zQWdub3N0aWMoKSksZz10aGlzLl9idWlsZGVyLmJ1aWxkKHtuc1ByZWZpeDpvLG5hbWU6bixhdHRyaWJ1dGVzOnMsbmFtZXNwYWNlOmEscHJlZml4ZXM6cn0pO2dbU3NdPXRoaXMuX2dsb2JhbERhdGE7aWYoaSl7Z1tjc10oKTt0aGlzLl9jdXJyZW50W2pzXShnKSYmZ1thbl0odGhpcy5faWRzKTtnW3RzXSh0aGlzLl9idWlsZGVyKX1lbHNle3RoaXMuX3N0YWNrLnB1c2godGhpcy5fY3VycmVudCk7dGhpcy5fY3VycmVudD1nfX1vbkVuZEVsZW1lbnQoZSl7Y29uc3QgdD10aGlzLl9jdXJyZW50O2lmKHRbeHNdKCkmJiJzdHJpbmciPT10eXBlb2YgdFtuc10pe2NvbnN0IGU9bmV3IFhGQVBhcnNlcjtlLl9nbG9iYWxEYXRhPXRoaXMuX2dsb2JhbERhdGE7Y29uc3QgaT1lLnBhcnNlKHRbbnNdKTt0W25zXT1udWxsO3RbanNdKGkpfXRbY3NdKCk7dGhpcy5fY3VycmVudD10aGlzLl9zdGFjay5wb3AoKTt0aGlzLl9jdXJyZW50W2pzXSh0KSYmdFthbl0odGhpcy5faWRzKTt0W3RzXSh0aGlzLl9idWlsZGVyKX1vbkVycm9yKGUpe3RoaXMuX2Vycm9yQ29kZT1lfX1jbGFzcyBYRkFGYWN0b3J5e2NvbnN0cnVjdG9yKGUpe3RyeXt0aGlzLnJvb3Q9KG5ldyBYRkFQYXJzZXIpLnBhcnNlKFhGQUZhY3RvcnkuX2NyZWF0ZURvY3VtZW50KGUpKTtjb25zdCB0PW5ldyBCaW5kZXIodGhpcy5yb290KTt0aGlzLmZvcm09dC5iaW5kKCk7dGhpcy5kYXRhSGFuZGxlcj1uZXcgRGF0YUhhbmRsZXIodGhpcy5yb290LHQuZ2V0RGF0YSgpKTt0aGlzLmZvcm1bU3NdLnRlbXBsYXRlPXRoaXMuZm9ybX1jYXRjaChlKXt3YXJuKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBhbmQgYmluZGluZzogJHtlfWApfX1pc1ZhbGlkKCl7cmV0dXJuIHRoaXMucm9vdCYmdGhpcy5mb3JtfV9jcmVhdGVQYWdlc0hlbHBlcigpe2NvbnN0IGU9dGhpcy5mb3JtW2duXSgpO3JldHVybiBuZXcgUHJvbWlzZSgoKHQsaSk9Pntjb25zdCBuZXh0SXRlcmF0aW9uPSgpPT57dHJ5e2NvbnN0IGk9ZS5uZXh0KCk7aS5kb25lP3QoaS52YWx1ZSk6c2V0VGltZW91dChuZXh0SXRlcmF0aW9uLDApfWNhdGNoKGUpe2koZSl9fTtzZXRUaW1lb3V0KG5leHRJdGVyYXRpb24sMCl9KSl9YXN5bmMgX2NyZWF0ZVBhZ2VzKCl7dHJ5e3RoaXMucGFnZXM9YXdhaXQgdGhpcy5fY3JlYXRlUGFnZXNIZWxwZXIoKTt0aGlzLmRpbXM9dGhpcy5wYWdlcy5jaGlsZHJlbi5tYXAoKGU9Pntjb25zdHt3aWR0aDp0LGhlaWdodDppfT1lLmF0dHJpYnV0ZXMuc3R5bGU7cmV0dXJuWzAsMCxwYXJzZUludCh0KSxwYXJzZUludChpKV19KSl9Y2F0Y2goZSl7d2FybihgWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGxheW91dDogJHtlfWApfX1nZXRCb3VuZGluZ0JveChlKXtyZXR1cm4gdGhpcy5kaW1zW2VdfWFzeW5jIGdldE51bVBhZ2VzKCl7dGhpcy5wYWdlc3x8YXdhaXQgdGhpcy5fY3JlYXRlUGFnZXMoKTtyZXR1cm4gdGhpcy5kaW1zLmxlbmd0aH1zZXRJbWFnZXMoZSl7dGhpcy5mb3JtW1NzXS5pbWFnZXM9ZX1zZXRGb250cyhlKXt0aGlzLmZvcm1bU3NdLmZvbnRGaW5kZXI9bmV3IEZvbnRGaW5kZXIoZSk7Y29uc3QgdD1bXTtmb3IobGV0IGUgb2YgdGhpcy5mb3JtW1NzXS51c2VkVHlwZWZhY2VzKXtlPXN0cmlwUXVvdGVzKGUpO3RoaXMuZm9ybVtTc10uZm9udEZpbmRlci5maW5kKGUpfHx0LnB1c2goZSl9cmV0dXJuIHQubGVuZ3RoPjA/dDpudWxsfWFwcGVuZEZvbnRzKGUsdCl7dGhpcy5mb3JtW1NzXS5mb250RmluZGVyLmFkZChlLHQpfWFzeW5jIGdldFBhZ2VzKCl7dGhpcy5wYWdlc3x8YXdhaXQgdGhpcy5fY3JlYXRlUGFnZXMoKTtjb25zdCBlPXRoaXMucGFnZXM7dGhpcy5wYWdlcz1udWxsO3JldHVybiBlfXNlcmlhbGl6ZURhdGEoZSl7cmV0dXJuIHRoaXMuZGF0YUhhbmRsZXIuc2VyaWFsaXplKGUpfXN0YXRpYyBfY3JlYXRlRG9jdW1lbnQoZSl7cmV0dXJuIGVbIi94ZHA6eGRwIl0/T2JqZWN0LnZhbHVlcyhlKS5qb2luKCIiKTplWyJ4ZHA6eGRwIl19c3RhdGljIGdldFJpY2hUZXh0QXNIdG1sKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e2xldCB0PW5ldyBYRkFQYXJzZXIoWGh0bWxOYW1lc3BhY2UsITApLnBhcnNlKGUpO2lmKCFbImJvZHkiLCJ4aHRtbCJdLmluY2x1ZGVzKHRbT3NdKSl7Y29uc3QgZT1YaHRtbE5hbWVzcGFjZS5ib2R5KHt9KTtlW0FzXSh0KTt0PWV9Y29uc3QgaT10W0luXSgpO2lmKCFpLnN1Y2Nlc3MpcmV0dXJuIG51bGw7Y29uc3R7aHRtbDphfT1pLHthdHRyaWJ1dGVzOnJ9PWE7aWYocil7ci5jbGFzcyYmKHIuY2xhc3M9ci5jbGFzcy5maWx0ZXIoKGU9PiFlLnN0YXJ0c1dpdGgoInhmYSIpKSkpO3IuZGlyPSJhdXRvIn1yZXR1cm57aHRtbDphLHN0cjp0W29uXSgpfX1jYXRjaChlKXt3YXJuKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBvZiByaWNoIHRleHQ6ICR7ZX1gKX1yZXR1cm4gbnVsbH19Y2xhc3MgQW5ub3RhdGlvbkZhY3Rvcnl7c3RhdGljIGNyZWF0ZUdsb2JhbHMoZSl7cmV0dXJuIFByb21pc2UuYWxsKFtlLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIiksZS5lbnN1cmVEb2MoInhmYURhdGFzZXRzIiksZS5lbnN1cmVDYXRhbG9nKCJzdHJ1Y3RUcmVlUm9vdCIpLGUuZW5zdXJlQ2F0YWxvZygiYmFzZVVybCIpLGUuZW5zdXJlQ2F0YWxvZygiYXR0YWNobWVudHMiKV0pLnRoZW4oKChbdCxpLGEscixzXSk9Pih7cGRmTWFuYWdlcjplLGFjcm9Gb3JtOnQgaW5zdGFuY2VvZiBEaWN0P3Q6RGljdC5lbXB0eSx4ZmFEYXRhc2V0czppLHN0cnVjdFRyZWVSb290OmEsYmFzZVVybDpyLGF0dGFjaG1lbnRzOnN9KSksKGU9Pnt3YXJuKGBjcmVhdGVHbG9iYWxzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSl9c3RhdGljIGFzeW5jIGNyZWF0ZShlLHQsaSxhLHIscyxuKXtjb25zdCBvPXI/YXdhaXQgdGhpcy5fZ2V0UGFnZUluZGV4KGUsdCxpLnBkZk1hbmFnZXIpOm51bGw7cmV0dXJuIGkucGRmTWFuYWdlci5lbnN1cmUodGhpcywiX2NyZWF0ZSIsW2UsdCxpLGEscixzLG8sbl0pfXN0YXRpYyBfY3JlYXRlKGUsdCxpLGEscj0hMSxzPW51bGwsbj1udWxsLG89bnVsbCl7Y29uc3QgZz1lLmZldGNoSWZSZWYodCk7aWYoIShnIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2NvbnN0e2Fjcm9Gb3JtOmMscGRmTWFuYWdlcjpDfT1pLGg9dCBpbnN0YW5jZW9mIFJlZj90LnRvU3RyaW5nKCk6YGFubm90XyR7YS5jcmVhdGVPYmpJZCgpfWA7bGV0IGw9Zy5nZXQoIlN1YnR5cGUiKTtsPWwgaW5zdGFuY2VvZiBOYW1lP2wubmFtZTpudWxsO2NvbnN0IFE9e3hyZWY6ZSxyZWY6dCxkaWN0Omcsc3VidHlwZTpsLGlkOmgsYW5ub3RhdGlvbkdsb2JhbHM6aSxjb2xsZWN0RmllbGRzOnIsb3JwaGFuRmllbGRzOnMsbmVlZEFwcGVhcmFuY2VzOiFyJiYhMD09PWMuZ2V0KCJOZWVkQXBwZWFyYW5jZXMiKSxwYWdlSW5kZXg6bixldmFsdWF0b3JPcHRpb25zOkMuZXZhbHVhdG9yT3B0aW9ucyxwYWdlUmVmOm99O3N3aXRjaChsKXtjYXNlIkxpbmsiOnJldHVybiBuZXcgTGlua0Fubm90YXRpb24oUSk7Y2FzZSJUZXh0IjpyZXR1cm4gbmV3IFRleHRBbm5vdGF0aW9uKFEpO2Nhc2UiV2lkZ2V0IjpsZXQgZT1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0Omcsa2V5OiJGVCJ9KTtlPWUgaW5zdGFuY2VvZiBOYW1lP2UubmFtZTpudWxsO3N3aXRjaChlKXtjYXNlIlR4IjpyZXR1cm4gbmV3IFRleHRXaWRnZXRBbm5vdGF0aW9uKFEpO2Nhc2UiQnRuIjpyZXR1cm4gbmV3IEJ1dHRvbldpZGdldEFubm90YXRpb24oUSk7Y2FzZSJDaCI6cmV0dXJuIG5ldyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uKFEpO2Nhc2UiU2lnIjpyZXR1cm4gbmV3IFNpZ25hdHVyZVdpZGdldEFubm90YXRpb24oUSl9d2FybihgVW5pbXBsZW1lbnRlZCB3aWRnZXQgZmllbGQgdHlwZSAiJHtlfSIsIGZhbGxpbmcgYmFjayB0byBiYXNlIGZpZWxkIHR5cGUuYCk7cmV0dXJuIG5ldyBXaWRnZXRBbm5vdGF0aW9uKFEpO2Nhc2UiUG9wdXAiOnJldHVybiBuZXcgUG9wdXBBbm5vdGF0aW9uKFEpO2Nhc2UiRnJlZVRleHQiOnJldHVybiBuZXcgRnJlZVRleHRBbm5vdGF0aW9uKFEpO2Nhc2UiTGluZSI6cmV0dXJuIG5ldyBMaW5lQW5ub3RhdGlvbihRKTtjYXNlIlNxdWFyZSI6cmV0dXJuIG5ldyBTcXVhcmVBbm5vdGF0aW9uKFEpO2Nhc2UiQ2lyY2xlIjpyZXR1cm4gbmV3IENpcmNsZUFubm90YXRpb24oUSk7Y2FzZSJQb2x5TGluZSI6cmV0dXJuIG5ldyBQb2x5bGluZUFubm90YXRpb24oUSk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbmV3IFBvbHlnb25Bbm5vdGF0aW9uKFEpO2Nhc2UiQ2FyZXQiOnJldHVybiBuZXcgQ2FyZXRBbm5vdGF0aW9uKFEpO2Nhc2UiSW5rIjpyZXR1cm4gbmV3IElua0Fubm90YXRpb24oUSk7Y2FzZSJIaWdobGlnaHQiOnJldHVybiBuZXcgSGlnaGxpZ2h0QW5ub3RhdGlvbihRKTtjYXNlIlVuZGVybGluZSI6cmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uKFEpO2Nhc2UiU3F1aWdnbHkiOnJldHVybiBuZXcgU3F1aWdnbHlBbm5vdGF0aW9uKFEpO2Nhc2UiU3RyaWtlT3V0IjpyZXR1cm4gbmV3IFN0cmlrZU91dEFubm90YXRpb24oUSk7Y2FzZSJTdGFtcCI6cmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb24oUSk7Y2FzZSJGaWxlQXR0YWNobWVudCI6cmV0dXJuIG5ldyBGaWxlQXR0YWNobWVudEFubm90YXRpb24oUSk7ZGVmYXVsdDpyfHx3YXJuKGw/YFVuaW1wbGVtZW50ZWQgYW5ub3RhdGlvbiB0eXBlICIke2x9IiwgZmFsbGluZyBiYWNrIHRvIGJhc2UgYW5ub3RhdGlvbi5gOiJBbm5vdGF0aW9uIGlzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIC9TdWJ0eXBlLiIpO3JldHVybiBuZXcgQW5ub3RhdGlvbihRKX19c3RhdGljIGFzeW5jIF9nZXRQYWdlSW5kZXgoZSx0LGkpe3RyeXtjb25zdCBhPWF3YWl0IGUuZmV0Y2hJZlJlZkFzeW5jKHQpO2lmKCEoYSBpbnN0YW5jZW9mIERpY3QpKXJldHVybi0xO2NvbnN0IHI9YS5nZXRSYXcoIlAiKTtpZihyIGluc3RhbmNlb2YgUmVmKXRyeXtyZXR1cm4gYXdhaXQgaS5lbnN1cmVDYXRhbG9nKCJnZXRQYWdlSW5kZXgiLFtyXSl9Y2F0Y2goZSl7aW5mbyhgX2dldFBhZ2VJbmRleCAtLSBub3QgYSB2YWxpZCBwYWdlIHJlZmVyZW5jZTogIiR7ZX0iLmApfWlmKGEuaGFzKCJLaWRzIikpcmV0dXJuLTE7Y29uc3Qgcz1hd2FpdCBpLmVuc3VyZURvYygibnVtUGFnZXMiKTtmb3IobGV0IGU9MDtlPHM7ZSsrKXtjb25zdCBhPWF3YWl0IGkuZ2V0UGFnZShlKSxyPWF3YWl0IGkuZW5zdXJlKGEsImFubm90YXRpb25zIik7Zm9yKGNvbnN0IGkgb2YgcilpZihpIGluc3RhbmNlb2YgUmVmJiZpc1JlZnNFcXVhbChpLHQpKXJldHVybiBlfX1jYXRjaChlKXt3YXJuKGBfZ2V0UGFnZUluZGV4OiAiJHtlfSIuYCl9cmV0dXJuLTF9c3RhdGljIGdlbmVyYXRlSW1hZ2VzKGUsdCxpKXtpZighaSl7d2FybigiZ2VuZXJhdGVJbWFnZXM6IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBjYW5ub3Qgc2F2ZSBvciBwcmludCBzb21lIGFubm90YXRpb25zIHdpdGggaW1hZ2VzLiIpO3JldHVybiBudWxsfWxldCBhO2Zvcihjb25zdHtiaXRtYXBJZDppLGJpdG1hcDpyfW9mIGUpaWYocil7YXx8PW5ldyBNYXA7YS5zZXQoaSxTdGFtcEFubm90YXRpb24uY3JlYXRlSW1hZ2Uocix0KSl9cmV0dXJuIGF9c3RhdGljIGFzeW5jIHNhdmVOZXdBbm5vdGF0aW9ucyhlLHQsaSxhKXtjb25zdCByPWUueHJlZjtsZXQgcztjb25zdCBuPVtdLG89W10se2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOmd9PWUub3B0aW9ucztmb3IoY29uc3QgYyBvZiBpKWlmKCFjLmRlbGV0ZWQpc3dpdGNoKGMuYW5ub3RhdGlvblR5cGUpe2Nhc2UgZjppZighcyl7Y29uc3QgZT1uZXcgRGljdChyKTtlLnNldCgiQmFzZUZvbnQiLE5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7ZS5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJGb250IikpO2Uuc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiVHlwZTEiKSk7ZS5zZXQoIkVuY29kaW5nIixOYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO2NvbnN0IHQ9W107cz1yLmdldE5ld1RlbXBvcmFyeVJlZigpO2F3YWl0IHdyaXRlT2JqZWN0KHMsZSx0LHIpO24ucHVzaCh7cmVmOnMsZGF0YTp0LmpvaW4oIiIpfSl9by5wdXNoKEZyZWVUZXh0QW5ub3RhdGlvbi5jcmVhdGVOZXdBbm5vdGF0aW9uKHIsYyxuLHtldmFsdWF0b3I6ZSx0YXNrOnQsYmFzZUZvbnRSZWY6c30pKTticmVhaztjYXNlIHA6Yy5xdWFkUG9pbnRzP28ucHVzaChIaWdobGlnaHRBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24ocixjLG4pKTpvLnB1c2goSW5rQW5ub3RhdGlvbi5jcmVhdGVOZXdBbm5vdGF0aW9uKHIsYyxuKSk7YnJlYWs7Y2FzZSB5Om8ucHVzaChJbmtBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24ocixjLG4pKTticmVhaztjYXNlIG06Y29uc3QgaT1nP2F3YWl0KGE/LmdldChjLmJpdG1hcElkKSk6bnVsbDtpZihpPy5pbWFnZVN0cmVhbSl7Y29uc3R7aW1hZ2VTdHJlYW06ZSxzbWFza1N0cmVhbTp0fT1pLGE9W107aWYodCl7Y29uc3QgaT1yLmdldE5ld1RlbXBvcmFyeVJlZigpO2F3YWl0IHdyaXRlT2JqZWN0KGksdCxhLHIpO24ucHVzaCh7cmVmOmksZGF0YTphLmpvaW4oIiIpfSk7ZS5kaWN0LnNldCgiU01hc2siLGkpO2EubGVuZ3RoPTB9Y29uc3Qgcz1pLmltYWdlUmVmPXIuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7YXdhaXQgd3JpdGVPYmplY3QocyxlLGEscik7bi5wdXNoKHtyZWY6cyxkYXRhOmEuam9pbigiIil9KTtpLmltYWdlU3RyZWFtPWkuc21hc2tTdHJlYW09bnVsbH1vLnB1c2goU3RhbXBBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24ocixjLG4se2ltYWdlOml9KSl9cmV0dXJue2Fubm90YXRpb25zOmF3YWl0IFByb21pc2UuYWxsKG8pLGRlcGVuZGVuY2llczpufX1zdGF0aWMgYXN5bmMgcHJpbnROZXdBbm5vdGF0aW9ucyhlLHQsaSxhLHIpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0e29wdGlvbnM6cyx4cmVmOm59PXQsbz1bXTtmb3IoY29uc3QgZyBvZiBhKWlmKCFnLmRlbGV0ZWQpc3dpdGNoKGcuYW5ub3RhdGlvblR5cGUpe2Nhc2UgZjpvLnB1c2goRnJlZVRleHRBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLG4sZyx7ZXZhbHVhdG9yOnQsdGFzazppLGV2YWx1YXRvck9wdGlvbnM6c30pKTticmVhaztjYXNlIHA6Zy5xdWFkUG9pbnRzP28ucHVzaChIaWdobGlnaHRBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLG4sZyx7ZXZhbHVhdG9yT3B0aW9uczpzfSkpOm8ucHVzaChJbmtBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLG4sZyx7ZXZhbHVhdG9yT3B0aW9uczpzfSkpO2JyZWFrO2Nhc2UgeTpvLnB1c2goSW5rQW5ub3RhdGlvbi5jcmVhdGVOZXdQcmludEFubm90YXRpb24oZSxuLGcse2V2YWx1YXRvck9wdGlvbnM6c30pKTticmVhaztjYXNlIG06Y29uc3QgYT1zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkP2F3YWl0KHI/LmdldChnLmJpdG1hcElkKSk6bnVsbDtpZihhPy5pbWFnZVN0cmVhbSl7Y29uc3R7aW1hZ2VTdHJlYW06ZSxzbWFza1N0cmVhbTp0fT1hO3QmJmUuZGljdC5zZXQoIlNNYXNrIix0KTthLmltYWdlUmVmPW5ldyBKcGVnU3RyZWFtKGUsZS5sZW5ndGgpO2EuaW1hZ2VTdHJlYW09YS5zbWFza1N0cmVhbT1udWxsfW8ucHVzaChTdGFtcEFubm90YXRpb24uY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKGUsbixnLHtpbWFnZTphLGV2YWx1YXRvck9wdGlvbnM6c30pKX1yZXR1cm4gUHJvbWlzZS5hbGwobyl9fWZ1bmN0aW9uIGdldFJnYkNvbG9yKGUsdD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMykpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiB0O2NvbnN0IGk9dHx8bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpDb2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2JJdGVtKGUsMCxpLDApO3JldHVybiBpO2Nhc2UgMzpDb2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oZSwwLGksMCk7cmV0dXJuIGk7Y2FzZSA0OkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYkl0ZW0oZSwwLGksMCk7cmV0dXJuIGk7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gZ2V0UGRmQ29sb3JBcnJheShlKXtyZXR1cm4gQXJyYXkuZnJvbShlLChlPT5lLzI1NSkpfWZ1bmN0aW9uIGdldFF1YWRQb2ludHMoZSx0KXtjb25zdCBpPWUuZ2V0QXJyYXkoIlF1YWRQb2ludHMiKTtpZighaXNOdW1iZXJBcnJheShpLG51bGwpfHwwPT09aS5sZW5ndGh8fGkubGVuZ3RoJTg+MClyZXR1cm4gbnVsbDtjb25zdCBhPW5ldyBGbG9hdDMyQXJyYXkoaS5sZW5ndGgpO2ZvcihsZXQgZT0wLHI9aS5sZW5ndGg7ZTxyO2UrPTgpe2NvbnN0W3IscyxuLG8sZyxjLEMsaF09aS5zbGljZShlLGUrOCksbD1NYXRoLm1pbihyLG4sZyxDKSxRPU1hdGgubWF4KHIsbixnLEMpLEU9TWF0aC5taW4ocyxvLGMsaCksdT1NYXRoLm1heChzLG8sYyxoKTtpZihudWxsIT09dCYmKGw8dFswXXx8UT50WzJdfHxFPHRbMV18fHU+dFszXSkpcmV0dXJuIG51bGw7YS5zZXQoW2wsdSxRLHUsbCxFLFEsRV0sZSl9cmV0dXJuIGF9ZnVuY3Rpb24gZ2V0VHJhbnNmb3JtTWF0cml4KGUsdCxpKXtjb25zdFthLHIscyxuXT1VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHQsaSk7aWYoYT09PXN8fHI9PT1uKXJldHVyblsxLDAsMCwxLGVbMF0sZVsxXV07Y29uc3Qgbz0oZVsyXS1lWzBdKS8ocy1hKSxnPShlWzNdLWVbMV0pLyhuLXIpO3JldHVybltvLDAsMCxnLGVbMF0tYSpvLGVbMV0tcipnXX1jbGFzcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe2NvbnN0e2RpY3Q6dCx4cmVmOmksYW5ub3RhdGlvbkdsb2JhbHM6YSxyZWY6cixvcnBoYW5GaWVsZHM6c309ZSxuPXM/LmdldChyKTtuJiZ0LnNldCgiUGFyZW50IixuKTt0aGlzLnNldFRpdGxlKHQuZ2V0KCJUIikpO3RoaXMuc2V0Q29udGVudHModC5nZXQoIkNvbnRlbnRzIikpO3RoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZSh0LmdldCgiTSIpKTt0aGlzLnNldEZsYWdzKHQuZ2V0KCJGIikpO3RoaXMuc2V0UmVjdGFuZ2xlKHQuZ2V0QXJyYXkoIlJlY3QiKSk7dGhpcy5zZXRDb2xvcih0LmdldEFycmF5KCJDIikpO3RoaXMuc2V0Qm9yZGVyU3R5bGUodCk7dGhpcy5zZXRBcHBlYXJhbmNlKHQpO3RoaXMuc2V0T3B0aW9uYWxDb250ZW50KHQpO2NvbnN0IG89dC5nZXQoIk1LIik7dGhpcy5zZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQ29sb3JzKG8pO3RoaXMuc2V0Um90YXRpb24obyx0KTt0aGlzLnJlZj1lLnJlZiBpbnN0YW5jZW9mIFJlZj9lLnJlZjpudWxsO3RoaXMuX3N0cmVhbXM9W107dGhpcy5hcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlKTtjb25zdCBnPSEhKHRoaXMuZmxhZ3MmaUEpLGM9ISEodGhpcy5mbGFncyZhQSk7dGhpcy5kYXRhPXthbm5vdGF0aW9uRmxhZ3M6dGhpcy5mbGFncyxib3JkZXJTdHlsZTp0aGlzLmJvcmRlclN0eWxlLGNvbG9yOnRoaXMuY29sb3IsYmFja2dyb3VuZENvbG9yOnRoaXMuYmFja2dyb3VuZENvbG9yLGJvcmRlckNvbG9yOnRoaXMuYm9yZGVyQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbixjb250ZW50c09iajp0aGlzLl9jb250ZW50cyxoYXNBcHBlYXJhbmNlOiEhdGhpcy5hcHBlYXJhbmNlLGlkOmUuaWQsbW9kaWZpY2F0aW9uRGF0ZTp0aGlzLm1vZGlmaWNhdGlvbkRhdGUscmVjdDp0aGlzLnJlY3RhbmdsZSxzdWJ0eXBlOmUuc3VidHlwZSxoYXNPd25DYW52YXM6ITEsbm9Sb3RhdGU6ISEodGhpcy5mbGFncyZlQSksbm9IVE1MOmcmJmMsaXNFZGl0YWJsZTohMSxzdHJ1Y3RQYXJlbnQ6LTF9O2lmKGEuc3RydWN0VHJlZVJvb3Qpe2xldCBpPXQuZ2V0KCJTdHJ1Y3RQYXJlbnQiKTt0aGlzLmRhdGEuc3RydWN0UGFyZW50PWk9TnVtYmVyLmlzSW50ZWdlcihpKSYmaT49MD9pOi0xO2Euc3RydWN0VHJlZVJvb3QuYWRkQW5ub3RhdGlvbklkVG9QYWdlKGUucGFnZVJlZixpKX1pZihlLmNvbGxlY3RGaWVsZHMpe2NvbnN0IGE9dC5nZXQoIktpZHMiKTtpZihBcnJheS5pc0FycmF5KGEpKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIGEpdCBpbnN0YW5jZW9mIFJlZiYmZS5wdXNoKHQudG9TdHJpbmcoKSk7MCE9PWUubGVuZ3RoJiYodGhpcy5kYXRhLmtpZElkcz1lKX10aGlzLmRhdGEuYWN0aW9ucz1jb2xsZWN0QWN0aW9ucyhpLHQscEEpO3RoaXMuZGF0YS5maWVsZE5hbWU9dGhpcy5fY29uc3RydWN0RmllbGROYW1lKHQpO3RoaXMuZGF0YS5wYWdlSW5kZXg9ZS5wYWdlSW5kZXh9Y29uc3QgQz10LmdldCgiSVQiKTtDIGluc3RhbmNlb2YgTmFtZSYmKHRoaXMuZGF0YS5pdD1DLm5hbWUpO3RoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPWUuZXZhbHVhdG9yT3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDt0aGlzLl9mYWxsYmFja0ZvbnREaWN0PW51bGw7dGhpcy5fbmVlZEFwcGVhcmFuY2VzPSExfV9oYXNGbGFnKGUsdCl7cmV0dXJuISEoZSZ0KX1fYnVpbGRGbGFncyhlLHQpe2xldHtmbGFnczppfT10aGlzO2lmKHZvaWQgMD09PWUpe2lmKHZvaWQgMD09PXQpcmV0dXJuO3JldHVybiB0P2kmfkFBOmkmfiR8QUF9aWYoZSl7aXw9QUE7cmV0dXJuIHQ/aSZ+dEF8JDppJn4kfHRBfWkmPX4oJHx0QSk7cmV0dXJuIHQ/aSZ+QUE6aXxBQX1faXNWaWV3YWJsZShlKXtyZXR1cm4hdGhpcy5faGFzRmxhZyhlLHopJiYhdGhpcy5faGFzRmxhZyhlLHRBKX1faXNQcmludGFibGUoZSl7cmV0dXJuIHRoaXMuX2hhc0ZsYWcoZSxBQSkmJiF0aGlzLl9oYXNGbGFnKGUsJCkmJiF0aGlzLl9oYXNGbGFnKGUseil9bXVzdEJlVmlld2VkKGUsdCl7Y29uc3QgaT1lPy5nZXQodGhpcy5kYXRhLmlkKT8ubm9WaWV3O3JldHVybiB2b2lkIDAhPT1pPyFpOnRoaXMudmlld2FibGUmJiF0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3MsJCl9bXVzdEJlUHJpbnRlZChlKXtjb25zdCB0PWU/LmdldCh0aGlzLmRhdGEuaWQpPy5ub1ByaW50O3JldHVybiB2b2lkIDAhPT10PyF0OnRoaXMucHJpbnRhYmxlfW11c3RCZVZpZXdlZFdoZW5FZGl0aW5nKGUsdD1udWxsKXtyZXR1cm4gZT8hdGhpcy5kYXRhLmlzRWRpdGFibGU6IXQ/Lmhhcyh0aGlzLmRhdGEuaWQpfWdldCB2aWV3YWJsZSgpe3JldHVybiBudWxsIT09dGhpcy5kYXRhLnF1YWRQb2ludHMmJigwPT09dGhpcy5mbGFnc3x8dGhpcy5faXNWaWV3YWJsZSh0aGlzLmZsYWdzKSl9Z2V0IHByaW50YWJsZSgpe3JldHVybiBudWxsIT09dGhpcy5kYXRhLnF1YWRQb2ludHMmJigwIT09dGhpcy5mbGFncyYmdGhpcy5faXNQcmludGFibGUodGhpcy5mbGFncykpfV9wYXJzZVN0cmluZ0hlbHBlcihlKXtjb25zdCB0PSJzdHJpbmciPT10eXBlb2YgZT9zdHJpbmdUb1BERlN0cmluZyhlKToiIjtyZXR1cm57c3RyOnQsZGlyOnQmJiJydGwiPT09YmlkaSh0KS5kaXI/InJ0bCI6Imx0ciJ9fXNldERlZmF1bHRBcHBlYXJhbmNlKGUpe2NvbnN0e2RpY3Q6dCxhbm5vdGF0aW9uR2xvYmFsczppfT1lLGE9Z2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7ZGljdDp0LGtleToiREEifSl8fGkuYWNyb0Zvcm0uZ2V0KCJEQSIpO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSJzdHJpbmciPT10eXBlb2YgYT9hOiIiO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9cGFyc2VEZWZhdWx0QXBwZWFyYW5jZSh0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSl9c2V0VGl0bGUoZSl7dGhpcy5fdGl0bGU9dGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIoZSl9c2V0Q29udGVudHMoZSl7dGhpcy5fY29udGVudHM9dGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIoZSl9c2V0TW9kaWZpY2F0aW9uRGF0ZShlKXt0aGlzLm1vZGlmaWNhdGlvbkRhdGU9InN0cmluZyI9PXR5cGVvZiBlP2U6bnVsbH1zZXRGbGFncyhlKXt0aGlzLmZsYWdzPU51bWJlci5pc0ludGVnZXIoZSkmJmU+MD9lOjA7dGhpcy5mbGFncyZ6JiYiQW5ub3RhdGlvbiIhPT10aGlzLmNvbnN0cnVjdG9yLm5hbWUmJih0aGlzLmZsYWdzXj16KX1oYXNGbGFnKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3MsZSl9c2V0UmVjdGFuZ2xlKGUpe3RoaXMucmVjdGFuZ2xlPWxvb2t1cE5vcm1hbFJlY3QoZSxbMCwwLDAsMF0pfXNldENvbG9yKGUpe3RoaXMuY29sb3I9Z2V0UmdiQ29sb3IoZSl9c2V0TGluZUVuZGluZ3MoZSl7dGhpcy5saW5lRW5kaW5ncz1bIk5vbmUiLCJOb25lIl07aWYoQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoKWZvcihsZXQgdD0wO3Q8Mjt0Kyspe2NvbnN0IGk9ZVt0XTtpZihpIGluc3RhbmNlb2YgTmFtZSlzd2l0Y2goaS5uYW1lKXtjYXNlIk5vbmUiOmNvbnRpbnVlO2Nhc2UiU3F1YXJlIjpjYXNlIkNpcmNsZSI6Y2FzZSJEaWFtb25kIjpjYXNlIk9wZW5BcnJvdyI6Y2FzZSJDbG9zZWRBcnJvdyI6Y2FzZSJCdXR0IjpjYXNlIlJPcGVuQXJyb3ciOmNhc2UiUkNsb3NlZEFycm93IjpjYXNlIlNsYXNoIjp0aGlzLmxpbmVFbmRpbmdzW3RdPWkubmFtZTtjb250aW51ZX13YXJuKGBJZ25vcmluZyBpbnZhbGlkIGxpbmVFbmRpbmc6ICR7aX1gKX19c2V0Um90YXRpb24oZSx0KXt0aGlzLnJvdGF0aW9uPTA7bGV0IGk9ZSBpbnN0YW5jZW9mIERpY3Q/ZS5nZXQoIlIiKXx8MDp0LmdldCgiUm90YXRlIil8fDA7aWYoTnVtYmVyLmlzSW50ZWdlcihpKSYmMCE9PWkpe2klPTM2MDtpPDAmJihpKz0zNjApO2klOTA9PTAmJih0aGlzLnJvdGF0aW9uPWkpfX1zZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQ29sb3JzKGUpe2lmKGUgaW5zdGFuY2VvZiBEaWN0KXt0aGlzLmJvcmRlckNvbG9yPWdldFJnYkNvbG9yKGUuZ2V0QXJyYXkoIkJDIiksbnVsbCk7dGhpcy5iYWNrZ3JvdW5kQ29sb3I9Z2V0UmdiQ29sb3IoZS5nZXRBcnJheSgiQkciKSxudWxsKX1lbHNlIHRoaXMuYm9yZGVyQ29sb3I9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9bnVsbH1zZXRCb3JkZXJTdHlsZShlKXt0aGlzLmJvcmRlclN0eWxlPW5ldyBBbm5vdGF0aW9uQm9yZGVyU3R5bGU7aWYoZSBpbnN0YW5jZW9mIERpY3QpaWYoZS5oYXMoIkJTIikpe2NvbnN0IHQ9ZS5nZXQoIkJTIik7aWYodCBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGU9dC5nZXQoIlR5cGUiKTtpZighZXx8aXNOYW1lKGUsIkJvcmRlciIpKXt0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKHQuZ2V0KCJXIiksdGhpcy5yZWN0YW5nbGUpO3RoaXMuYm9yZGVyU3R5bGUuc2V0U3R5bGUodC5nZXQoIlMiKSk7dGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkodC5nZXRBcnJheSgiRCIpKX19fWVsc2UgaWYoZS5oYXMoIkJvcmRlciIpKXtjb25zdCB0PWUuZ2V0QXJyYXkoIkJvcmRlciIpO2lmKEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPj0zKXt0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXModFswXSk7dGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyh0WzFdKTt0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKHRbMl0sdGhpcy5yZWN0YW5nbGUpOzQ9PT10Lmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkodFszXSwhMCl9fWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX1zZXRBcHBlYXJhbmNlKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO2NvbnN0IHQ9ZS5nZXQoIkFQIik7aWYoISh0IGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2NvbnN0IGk9dC5nZXQoIk4iKTtpZihpIGluc3RhbmNlb2YgQmFzZVN0cmVhbSl7dGhpcy5hcHBlYXJhbmNlPWk7cmV0dXJufWlmKCEoaSBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtjb25zdCBhPWUuZ2V0KCJBUyIpO2lmKCEoYSBpbnN0YW5jZW9mIE5hbWUmJmkuaGFzKGEubmFtZSkpKXJldHVybjtjb25zdCByPWkuZ2V0KGEubmFtZSk7ciBpbnN0YW5jZW9mIEJhc2VTdHJlYW0mJih0aGlzLmFwcGVhcmFuY2U9cil9c2V0T3B0aW9uYWxDb250ZW50KGUpe3RoaXMub2M9bnVsbDtjb25zdCB0PWUuZ2V0KCJPQyIpO3QgaW5zdGFuY2VvZiBOYW1lP3dhcm4oInNldE9wdGlvbmFsQ29udGVudDogU3VwcG9ydCBmb3IgL05hbWUtZW50cnkgaXMgbm90IGltcGxlbWVudGVkLiIpOnQgaW5zdGFuY2VvZiBEaWN0JiYodGhpcy5vYz10KX1sb2FkUmVzb3VyY2VzKGUsdCl7cmV0dXJuIHQuZGljdC5nZXRBc3luYygiUmVzb3VyY2VzIikudGhlbigodD0+e2lmKCF0KXJldHVybjtyZXR1cm4gbmV3IE9iamVjdExvYWRlcih0LGUsdC54cmVmKS5sb2FkKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKX1hc3luYyBnZXRPcGVyYXRvckxpc3QoZSx0LGkscil7Y29uc3R7aGFzT3duQ2FudmFzOnMsaWQ6bixyZWN0Om99PXRoaXMuZGF0YTtsZXQgZz10aGlzLmFwcGVhcmFuY2U7Y29uc3QgQz0hIShzJiZpJmMpO2lmKEMmJihvWzBdPT09b1syXXx8b1sxXT09PW9bM10pKXt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPSExO3JldHVybntvcExpc3Q6bmV3IE9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fWlmKCFnKXtpZighQylyZXR1cm57b3BMaXN0Om5ldyBPcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfTtnPW5ldyBTdHJpbmdTdHJlYW0oIiIpO2cuZGljdD1uZXcgRGljdH1jb25zdCBoPWcuZGljdCxsPWF3YWl0IHRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkNvbG9yU3BhY2UiLCJQYXR0ZXJuIiwiU2hhZGluZyIsIlhPYmplY3QiLCJGb250Il0sZyksUT1sb29rdXBSZWN0KGguZ2V0QXJyYXkoIkJCb3giKSxbMCwwLDEsMV0pLEU9bG9va3VwTWF0cml4KGguZ2V0QXJyYXkoIk1hdHJpeCIpLGEpLHU9Z2V0VHJhbnNmb3JtTWF0cml4KG8sUSxFKSxkPW5ldyBPcGVyYXRvckxpc3Q7bGV0IGY7dGhpcy5vYyYmKGY9YXdhaXQgZS5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpKTt2b2lkIDAhPT1mJiZkLmFkZE9wKFRlLFsiT0MiLGZdKTtkLmFkZE9wKFplLFtuLG8sdSxFLENdKTthd2FpdCBlLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmcsdGFzazp0LHJlc291cmNlczpsLG9wZXJhdG9yTGlzdDpkLGZhbGxiYWNrRm9udERpY3Q6dGhpcy5fZmFsbGJhY2tGb250RGljdH0pO2QuYWRkT3AoVmUsW10pO3ZvaWQgMCE9PWYmJmQuYWRkT3AoS2UsW10pO3RoaXMucmVzZXQoKTtyZXR1cm57b3BMaXN0OmQsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOkN9fWFzeW5jIHNhdmUoZSx0LGkpe3JldHVybiBudWxsfWdldCBoYXNUZXh0Q29udGVudCgpe3JldHVybiExfWFzeW5jIGV4dHJhY3RUZXh0Q29udGVudChlLHQsaSl7aWYoIXRoaXMuYXBwZWFyYW5jZSlyZXR1cm47Y29uc3QgYT1hd2FpdCB0aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJGb250IiwiUHJvcGVydGllcyIsIlhPYmplY3QiXSx0aGlzLmFwcGVhcmFuY2UpLHI9W10scz1bXTtsZXQgbj1udWxsO2NvbnN0IG89e2Rlc2lyZWRTaXplOk1hdGguSW5maW5pdHkscmVhZHk6ITAsZW5xdWV1ZShlLHQpe2Zvcihjb25zdCB0IG9mIGUuaXRlbXMpaWYodm9pZCAwIT09dC5zdHIpe258fD10LnRyYW5zZm9ybS5zbGljZSgtMik7cy5wdXNoKHQuc3RyKTtpZih0Lmhhc0VPTCl7ci5wdXNoKHMuam9pbigiIikudHJpbUVuZCgpKTtzLmxlbmd0aD0wfX19fTthd2FpdCBlLmdldFRleHRDb250ZW50KHtzdHJlYW06dGhpcy5hcHBlYXJhbmNlLHRhc2s6dCxyZXNvdXJjZXM6YSxpbmNsdWRlTWFya2VkQ29udGVudDohMCxrZWVwV2hpdGVTcGFjZTohMCxzaW5rOm8sdmlld0JveDppfSk7dGhpcy5yZXNldCgpO3MubGVuZ3RoJiZyLnB1c2gocy5qb2luKCIiKS50cmltRW5kKCkpO2lmKHIubGVuZ3RoPjF8fHJbMF0pe2NvbnN0IGU9dGhpcy5hcHBlYXJhbmNlLmRpY3QsdD1sb29rdXBSZWN0KGUuZ2V0QXJyYXkoIkJCb3giKSxudWxsKSxpPWxvb2t1cE1hdHJpeChlLmdldEFycmF5KCJNYXRyaXgiKSxudWxsKTt0aGlzLmRhdGEudGV4dFBvc2l0aW9uPXRoaXMuX3RyYW5zZm9ybVBvaW50KG4sdCxpKTt0aGlzLmRhdGEudGV4dENvbnRlbnQ9cn19X3RyYW5zZm9ybVBvaW50KGUsdCxpKXtjb25zdHtyZWN0OmF9PXRoaXMuZGF0YTt0fHw9WzAsMCwxLDFdO2l8fD1bMSwwLDAsMSwwLDBdO2NvbnN0IHI9Z2V0VHJhbnNmb3JtTWF0cml4KGEsdCxpKTtyWzRdLT1hWzBdO3JbNV0tPWFbMV07ZT1VdGlsLmFwcGx5VHJhbnNmb3JtKGUscik7cmV0dXJuIFV0aWwuYXBwbHlUcmFuc2Zvcm0oZSxpKX1nZXRGaWVsZE9iamVjdCgpe3JldHVybiB0aGlzLmRhdGEua2lkSWRzP3tpZDp0aGlzLmRhdGEuaWQsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHR5cGU6IiIsa2lkSWRzOnRoaXMuZGF0YS5raWRJZHMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHJvdGF0aW9uOnRoaXMucm90YXRpb259Om51bGx9cmVzZXQoKXtmb3IoY29uc3QgZSBvZiB0aGlzLl9zdHJlYW1zKWUucmVzZXQoKX1fY29uc3RydWN0RmllbGROYW1lKGUpe2lmKCFlLmhhcygiVCIpJiYhZS5oYXMoIlBhcmVudCIpKXt3YXJuKCJVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLiIpO3JldHVybiIifWlmKCFlLmhhcygiUGFyZW50IikpcmV0dXJuIHN0cmluZ1RvUERGU3RyaW5nKGUuZ2V0KCJUIikpO2NvbnN0IHQ9W107ZS5oYXMoIlQiKSYmdC51bnNoaWZ0KHN0cmluZ1RvUERGU3RyaW5nKGUuZ2V0KCJUIikpKTtsZXQgaT1lO2NvbnN0IGE9bmV3IFJlZlNldDtlLm9iaklkJiZhLnB1dChlLm9iaklkKTtmb3IoO2kuaGFzKCJQYXJlbnQiKTspe2k9aS5nZXQoIlBhcmVudCIpO2lmKCEoaSBpbnN0YW5jZW9mIERpY3QpfHxpLm9iaklkJiZhLmhhcyhpLm9iaklkKSlicmVhaztpLm9iaklkJiZhLnB1dChpLm9iaklkKTtpLmhhcygiVCIpJiZ0LnVuc2hpZnQoc3RyaW5nVG9QREZTdHJpbmcoaS5nZXQoIlQiKSkpfXJldHVybiB0LmpvaW4oIi4iKX19Y2xhc3MgQW5ub3RhdGlvbkJvcmRlclN0eWxle2NvbnN0cnVjdG9yKCl7dGhpcy53aWR0aD0xO3RoaXMucmF3V2lkdGg9MTt0aGlzLnN0eWxlPVFBO3RoaXMuZGFzaEFycmF5PVszXTt0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXM9MDt0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzPTB9c2V0V2lkdGgoZSx0PVswLDAsMCwwXSl7aWYoZSBpbnN0YW5jZW9mIE5hbWUpdGhpcy53aWR0aD0wO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZihlPjApe3RoaXMucmF3V2lkdGg9ZTtjb25zdCBpPSh0WzJdLXRbMF0pLzIsYT0odFszXS10WzFdKS8yO2lmKGk+MCYmYT4wJiYoZT5pfHxlPmEpKXt3YXJuKGBBbm5vdGF0aW9uQm9yZGVyU3R5bGUuc2V0V2lkdGggLSBpZ25vcmluZyB3aWR0aDogJHtlfWApO2U9MX19dGhpcy53aWR0aD1lfX1zZXRTdHlsZShlKXtpZihlIGluc3RhbmNlb2YgTmFtZSlzd2l0Y2goZS5uYW1lKXtjYXNlIlMiOnRoaXMuc3R5bGU9UUE7YnJlYWs7Y2FzZSJEIjp0aGlzLnN0eWxlPUVBO2JyZWFrO2Nhc2UiQiI6dGhpcy5zdHlsZT11QTticmVhaztjYXNlIkkiOnRoaXMuc3R5bGU9ZEE7YnJlYWs7Y2FzZSJVIjp0aGlzLnN0eWxlPWZBfX1zZXREYXNoQXJyYXkoZSx0PSExKXtpZihBcnJheS5pc0FycmF5KGUpKXtsZXQgaT0hMCxhPSEwO2Zvcihjb25zdCB0IG9mIGUpe2lmKCEoK3Q+PTApKXtpPSExO2JyZWFrfXQ+MCYmKGE9ITEpfWlmKDA9PT1lLmxlbmd0aHx8aSYmIWEpe3RoaXMuZGFzaEFycmF5PWU7dCYmdGhpcy5zZXRTdHlsZShOYW1lLmdldCgiRCIpKX1lbHNlIHRoaXMud2lkdGg9MH1lbHNlIGUmJih0aGlzLndpZHRoPTApfXNldEhvcml6b250YWxDb3JuZXJSYWRpdXMoZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz1lKX1zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYodGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz1lKX19Y2xhc3MgTWFya3VwQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0fT1lO2lmKHQuaGFzKCJJUlQiKSl7Y29uc3QgZT10LmdldFJhdygiSVJUIik7dGhpcy5kYXRhLmluUmVwbHlUbz1lIGluc3RhbmNlb2YgUmVmP2UudG9TdHJpbmcoKTpudWxsO2NvbnN0IGk9dC5nZXQoIlJUIik7dGhpcy5kYXRhLnJlcGx5VHlwZT1pIGluc3RhbmNlb2YgTmFtZT9pLm5hbWU6X31sZXQgaT1udWxsO2lmKHRoaXMuZGF0YS5yZXBseVR5cGU9PT1WKXtjb25zdCBlPXQuZ2V0KCJJUlQiKTt0aGlzLnNldFRpdGxlKGUuZ2V0KCJUIikpO3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENvbnRlbnRzKGUuZ2V0KCJDb250ZW50cyIpKTt0aGlzLmRhdGEuY29udGVudHNPYmo9dGhpcy5fY29udGVudHM7aWYoZS5oYXMoIkNyZWF0aW9uRGF0ZSIpKXt0aGlzLnNldENyZWF0aW9uRGF0ZShlLmdldCgiQ3JlYXRpb25EYXRlIikpO3RoaXMuZGF0YS5jcmVhdGlvbkRhdGU9dGhpcy5jcmVhdGlvbkRhdGV9ZWxzZSB0aGlzLmRhdGEuY3JlYXRpb25EYXRlPW51bGw7aWYoZS5oYXMoIk0iKSl7dGhpcy5zZXRNb2RpZmljYXRpb25EYXRlKGUuZ2V0KCJNIikpO3RoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPXRoaXMubW9kaWZpY2F0aW9uRGF0ZX1lbHNlIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPW51bGw7aT1lLmdldFJhdygiUG9wdXAiKTtpZihlLmhhcygiQyIpKXt0aGlzLnNldENvbG9yKGUuZ2V0QXJyYXkoIkMiKSk7dGhpcy5kYXRhLmNvbG9yPXRoaXMuY29sb3J9ZWxzZSB0aGlzLmRhdGEuY29sb3I9bnVsbH1lbHNle3RoaXMuZGF0YS50aXRsZU9iaj10aGlzLl90aXRsZTt0aGlzLnNldENyZWF0aW9uRGF0ZSh0LmdldCgiQ3JlYXRpb25EYXRlIikpO3RoaXMuZGF0YS5jcmVhdGlvbkRhdGU9dGhpcy5jcmVhdGlvbkRhdGU7aT10LmdldFJhdygiUG9wdXAiKTt0LmhhcygiQyIpfHwodGhpcy5kYXRhLmNvbG9yPW51bGwpfXRoaXMuZGF0YS5wb3B1cFJlZj1pIGluc3RhbmNlb2YgUmVmP2kudG9TdHJpbmcoKTpudWxsO3QuaGFzKCJSQyIpJiYodGhpcy5kYXRhLnJpY2hUZXh0PVhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwodC5nZXQoIlJDIikpKX1zZXRDcmVhdGlvbkRhdGUoZSl7dGhpcy5jcmVhdGlvbkRhdGU9InN0cmluZyI9PXR5cGVvZiBlP2U6bnVsbH1fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6ZSxleHRyYTp0LHN0cm9rZUNvbG9yOmksZmlsbENvbG9yOmEsYmxlbmRNb2RlOnIsc3Ryb2tlQWxwaGE6cyxmaWxsQWxwaGE6bixwb2ludHNDYWxsYmFjazpvfSl7bGV0IGc9TnVtYmVyLk1BWF9WQUxVRSxjPU51bWJlci5NQVhfVkFMVUUsQz1OdW1iZXIuTUlOX1ZBTFVFLGg9TnVtYmVyLk1JTl9WQUxVRTtjb25zdCBsPVsicSJdO3QmJmwucHVzaCh0KTtpJiZsLnB1c2goYCR7aVswXX0gJHtpWzFdfSAke2lbMl19IFJHYCk7YSYmbC5wdXNoKGAke2FbMF19ICR7YVsxXX0gJHthWzJdfSByZ2ApO2xldCBRPXRoaXMuZGF0YS5xdWFkUG9pbnRzO1F8fChRPUZsb2F0MzJBcnJheS5mcm9tKFt0aGlzLnJlY3RhbmdsZVswXSx0aGlzLnJlY3RhbmdsZVszXSx0aGlzLnJlY3RhbmdsZVsyXSx0aGlzLnJlY3RhbmdsZVszXSx0aGlzLnJlY3RhbmdsZVswXSx0aGlzLnJlY3RhbmdsZVsxXSx0aGlzLnJlY3RhbmdsZVsyXSx0aGlzLnJlY3RhbmdsZVsxXV0pKTtmb3IobGV0IGU9MCx0PVEubGVuZ3RoO2U8dDtlKz04KXtjb25zdFt0LGksYSxyXT1vKGwsUS5zdWJhcnJheShlLGUrOCkpO2c9TWF0aC5taW4oZyx0KTtDPU1hdGgubWF4KEMsaSk7Yz1NYXRoLm1pbihjLGEpO2g9TWF0aC5tYXgoaCxyKX1sLnB1c2goIlEiKTtjb25zdCBFPW5ldyBEaWN0KGUpLHU9bmV3IERpY3QoZSk7dS5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJGb3JtIikpO2NvbnN0IGQ9bmV3IFN0cmluZ1N0cmVhbShsLmpvaW4oIiAiKSk7ZC5kaWN0PXU7RS5zZXQoIkZtMCIsZCk7Y29uc3QgZj1uZXcgRGljdChlKTtyJiZmLnNldCgiQk0iLE5hbWUuZ2V0KHIpKTsibnVtYmVyIj09dHlwZW9mIHMmJmYuc2V0KCJDQSIscyk7Im51bWJlciI9PXR5cGVvZiBuJiZmLnNldCgiY2EiLG4pO2NvbnN0IHA9bmV3IERpY3QoZSk7cC5zZXQoIkdTMCIsZik7Y29uc3QgbT1uZXcgRGljdChlKTttLnNldCgiRXh0R1N0YXRlIixwKTttLnNldCgiWE9iamVjdCIsRSk7Y29uc3QgeT1uZXcgRGljdChlKTt5LnNldCgiUmVzb3VyY2VzIixtKTtjb25zdCB3PXRoaXMuZGF0YS5yZWN0PVtnLGMsQyxoXTt5LnNldCgiQkJveCIsdyk7dGhpcy5hcHBlYXJhbmNlPW5ldyBTdHJpbmdTdHJlYW0oIi9HUzAgZ3MgL0ZtMCBEbyIpO3RoaXMuYXBwZWFyYW5jZS5kaWN0PXk7dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSxkKX1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QW5ub3RhdGlvbihlLHQsaSxhKXt0LnJlZnx8KHQucmVmPWUuZ2V0TmV3VGVtcG9yYXJ5UmVmKCkpO2NvbnN0IHI9dC5yZWYscz1hd2FpdCB0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0odCxlLGEpLG49W107bGV0IG87aWYocyl7Y29uc3QgYT1lLmdldE5ld1RlbXBvcmFyeVJlZigpO289dGhpcy5jcmVhdGVOZXdEaWN0KHQsZSx7YXBSZWY6YX0pO2F3YWl0IHdyaXRlT2JqZWN0KGEscyxuLGUpO2kucHVzaCh7cmVmOmEsZGF0YTpuLmpvaW4oIiIpfSl9ZWxzZSBvPXRoaXMuY3JlYXRlTmV3RGljdCh0LGUse30pO051bWJlci5pc0ludGVnZXIodC5wYXJlbnRUcmVlSWQpJiZvLnNldCgiU3RydWN0UGFyZW50Iix0LnBhcmVudFRyZWVJZCk7bi5sZW5ndGg9MDthd2FpdCB3cml0ZU9iamVjdChyLG8sbixlKTtyZXR1cm57cmVmOnIsZGF0YTpuLmpvaW4oIiIpfX1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKGUsdCxpLGEpe2NvbnN0IHI9YXdhaXQgdGhpcy5jcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKGksdCxhKSxzPXRoaXMuY3JlYXRlTmV3RGljdChpLHQscj97YXA6cn06e30pLG49bmV3IHRoaXMucHJvdG90eXBlLmNvbnN0cnVjdG9yKHtkaWN0OnMseHJlZjp0LGFubm90YXRpb25HbG9iYWxzOmUsZXZhbHVhdG9yT3B0aW9uczphLmV2YWx1YXRvck9wdGlvbnN9KTtpLnJlZiYmKG4ucmVmPW4ucmVmVG9SZXBsYWNlPWkucmVmKTtyZXR1cm4gbn19Y2xhc3MgV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6aSxhbm5vdGF0aW9uR2xvYmFsczphfT1lLHI9dGhpcy5kYXRhO3RoaXMuX25lZWRBcHBlYXJhbmNlcz1lLm5lZWRBcHBlYXJhbmNlcztyLmFubm90YXRpb25UeXBlPVo7dm9pZCAwPT09ci5maWVsZE5hbWUmJihyLmZpZWxkTmFtZT10aGlzLl9jb25zdHJ1Y3RGaWVsZE5hbWUodCkpO3ZvaWQgMD09PXIuYWN0aW9ucyYmKHIuYWN0aW9ucz1jb2xsZWN0QWN0aW9ucyhpLHQscEEpKTtsZXQgcz1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJWIixnZXRBcnJheTohMH0pO3IuZmllbGRWYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUocyk7Y29uc3Qgbj1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJEViIsZ2V0QXJyYXk6ITB9KTtyLmRlZmF1bHRGaWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShuKTtpZih2b2lkIDA9PT1zJiZhLnhmYURhdGFzZXRzKXtjb25zdCBlPXRoaXMuX3RpdGxlLnN0cjtpZihlKXt0aGlzLl9oYXNWYWx1ZUZyb21YRkE9ITA7ci5maWVsZFZhbHVlPXM9YS54ZmFEYXRhc2V0cy5nZXRWYWx1ZShlKX19dm9pZCAwPT09cyYmbnVsbCE9PXIuZGVmYXVsdEZpZWxkVmFsdWUmJihyLmZpZWxkVmFsdWU9ci5kZWZhdWx0RmllbGRWYWx1ZSk7ci5hbHRlcm5hdGl2ZVRleHQ9c3RyaW5nVG9QREZTdHJpbmcodC5nZXQoIlRVIil8fCIiKTt0aGlzLnNldERlZmF1bHRBcHBlYXJhbmNlKGUpO3IuaGFzQXBwZWFyYW5jZXx8PXRoaXMuX25lZWRBcHBlYXJhbmNlcyYmdm9pZCAwIT09ci5maWVsZFZhbHVlJiZudWxsIT09ci5maWVsZFZhbHVlO2NvbnN0IG89Z2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7ZGljdDp0LGtleToiRlQifSk7ci5maWVsZFR5cGU9byBpbnN0YW5jZW9mIE5hbWU/by5uYW1lOm51bGw7Y29uc3QgZz1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJEUiJ9KSxjPWEuYWNyb0Zvcm0uZ2V0KCJEUiIpLEM9dGhpcy5hcHBlYXJhbmNlPy5kaWN0LmdldCgiUmVzb3VyY2VzIik7dGhpcy5fZmllbGRSZXNvdXJjZXM9e2xvY2FsUmVzb3VyY2VzOmcsYWNyb0Zvcm1SZXNvdXJjZXM6YyxhcHBlYXJhbmNlUmVzb3VyY2VzOkMsbWVyZ2VkUmVzb3VyY2VzOkRpY3QubWVyZ2Uoe3hyZWY6aSxkaWN0QXJyYXk6W2csQyxjXSxtZXJnZVN1YkRpY3RzOiEwfSl9O3IuZmllbGRGbGFncz1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJGZiJ9KTsoIU51bWJlci5pc0ludGVnZXIoci5maWVsZEZsYWdzKXx8ci5maWVsZEZsYWdzPDApJiYoci5maWVsZEZsYWdzPTApO3IucmVhZE9ubHk9dGhpcy5oYXNGaWVsZEZsYWcockEpO3IucmVxdWlyZWQ9dGhpcy5oYXNGaWVsZEZsYWcoc0EpO3IuaGlkZGVuPXRoaXMuX2hhc0ZsYWcoci5hbm5vdGF0aW9uRmxhZ3MsJCl8fHRoaXMuX2hhc0ZsYWcoci5hbm5vdGF0aW9uRmxhZ3MsdEEpfV9kZWNvZGVGb3JtVmFsdWUoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5maWx0ZXIoKGU9PiJzdHJpbmciPT10eXBlb2YgZSkpLm1hcCgoZT0+c3RyaW5nVG9QREZTdHJpbmcoZSkpKTplIGluc3RhbmNlb2YgTmFtZT9zdHJpbmdUb1BERlN0cmluZyhlLm5hbWUpOiJzdHJpbmciPT10eXBlb2YgZT9zdHJpbmdUb1BERlN0cmluZyhlKTpudWxsfWhhc0ZpZWxkRmxhZyhlKXtyZXR1cm4hISh0aGlzLmRhdGEuZmllbGRGbGFncyZlKX1faXNWaWV3YWJsZShlKXtyZXR1cm4hMH1tdXN0QmVWaWV3ZWQoZSx0KXtyZXR1cm4gdD90aGlzLnZpZXdhYmxlOnN1cGVyLm11c3RCZVZpZXdlZChlLHQpJiYhdGhpcy5faGFzRmxhZyh0aGlzLmZsYWdzLHRBKX1nZXRSb3RhdGlvbk1hdHJpeChlKXtsZXQgdD1lPy5nZXQodGhpcy5kYXRhLmlkKT8ucm90YXRpb247dm9pZCAwPT09dCYmKHQ9dGhpcy5yb3RhdGlvbik7aWYoMD09PXQpcmV0dXJuIGE7cmV0dXJuIGdldFJvdGF0aW9uTWF0cml4KHQsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0pfWdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhlKXtsZXQgdD1lPy5nZXQodGhpcy5kYXRhLmlkKT8ucm90YXRpb247dm9pZCAwPT09dCYmKHQ9dGhpcy5yb3RhdGlvbik7aWYoIXRoaXMuYmFja2dyb3VuZENvbG9yJiYhdGhpcy5ib3JkZXJDb2xvcilyZXR1cm4iIjtjb25zdCBpPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLGE9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0scj0wPT09dHx8MTgwPT09dD9gMCAwICR7aX0gJHthfSByZWA6YDAgMCAke2F9ICR7aX0gcmVgO2xldCBzPSIiO3RoaXMuYmFja2dyb3VuZENvbG9yJiYocz1gJHtnZXRQZGZDb2xvcih0aGlzLmJhY2tncm91bmRDb2xvciwhMCl9ICR7cn0gZiBgKTtpZih0aGlzLmJvcmRlckNvbG9yKXtzKz1gJHt0aGlzLmJvcmRlclN0eWxlLndpZHRofHwxfSB3ICR7Z2V0UGRmQ29sb3IodGhpcy5ib3JkZXJDb2xvciwhMSl9ICR7cn0gUyBgfXJldHVybiBzfWFzeW5jIGdldE9wZXJhdG9yTGlzdChlLHQsaSxhKXtpZihpJmwmJiEodGhpcyBpbnN0YW5jZW9mIFNpZ25hdHVyZVdpZGdldEFubm90YXRpb24pJiYhdGhpcy5kYXRhLm5vSFRNTCYmIXRoaXMuZGF0YS5oYXNPd25DYW52YXMpcmV0dXJue29wTGlzdDpuZXcgT3BlcmF0b3JMaXN0LHNlcGFyYXRlRm9ybTohMCxzZXBhcmF0ZUNhbnZhczohMX07aWYoIXRoaXMuX2hhc1RleHQpcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsaSxhKTtjb25zdCByPWF3YWl0IHRoaXMuX2dldEFwcGVhcmFuY2UoZSx0LGksYSk7aWYodGhpcy5hcHBlYXJhbmNlJiZudWxsPT09cilyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxpLGEpO2NvbnN0IHM9bmV3IE9wZXJhdG9yTGlzdDtpZighdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fG51bGw9PT1yKXJldHVybntvcExpc3Q6cyxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9O2NvbnN0IG49ISEodGhpcy5kYXRhLmhhc093bkNhbnZhcyYmaSZjKSxvPVswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dLGc9Z2V0VHJhbnNmb3JtTWF0cml4KHRoaXMuZGF0YS5yZWN0LG8sWzEsMCwwLDEsMCwwXSk7bGV0IEM7dGhpcy5vYyYmKEM9YXdhaXQgZS5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpKTt2b2lkIDAhPT1DJiZzLmFkZE9wKFRlLFsiT0MiLENdKTtzLmFkZE9wKFplLFt0aGlzLmRhdGEuaWQsdGhpcy5kYXRhLnJlY3QsZyx0aGlzLmdldFJvdGF0aW9uTWF0cml4KGEpLG5dKTtjb25zdCBoPW5ldyBTdHJpbmdTdHJlYW0ocik7YXdhaXQgZS5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTpoLHRhc2s6dCxyZXNvdXJjZXM6dGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLG9wZXJhdG9yTGlzdDpzfSk7cy5hZGRPcChWZSxbXSk7dm9pZCAwIT09QyYmcy5hZGRPcChLZSxbXSk7cmV0dXJue29wTGlzdDpzLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczpufX1fZ2V0TUtEaWN0KGUpe2NvbnN0IHQ9bmV3IERpY3QobnVsbCk7ZSYmdC5zZXQoIlIiLGUpO3RoaXMuYm9yZGVyQ29sb3ImJnQuc2V0KCJCQyIsZ2V0UGRmQ29sb3JBcnJheSh0aGlzLmJvcmRlckNvbG9yKSk7dGhpcy5iYWNrZ3JvdW5kQ29sb3ImJnQuc2V0KCJCRyIsZ2V0UGRmQ29sb3JBcnJheSh0aGlzLmJhY2tncm91bmRDb2xvcikpO3JldHVybiB0LnNpemU+MD90Om51bGx9YW1lbmRTYXZlZERpY3QoZSx0KXt9YXN5bmMgc2F2ZShlLHQsaSl7Y29uc3Qgcj1pPy5nZXQodGhpcy5kYXRhLmlkKSxzPXRoaXMuX2J1aWxkRmxhZ3Mocj8ubm9WaWV3LHI/Lm5vUHJpbnQpO2xldCBuPXI/LnZhbHVlLG89cj8ucm90YXRpb247aWYobj09PXRoaXMuZGF0YS5maWVsZFZhbHVlfHx2b2lkIDA9PT1uKXtpZighdGhpcy5faGFzVmFsdWVGcm9tWEZBJiZ2b2lkIDA9PT1vJiZ2b2lkIDA9PT1zKXJldHVybiBudWxsO258fD10aGlzLmRhdGEuZmllbGRWYWx1ZX1pZih2b2lkIDA9PT1vJiYhdGhpcy5faGFzVmFsdWVGcm9tWEZBJiZBcnJheS5pc0FycmF5KG4pJiZBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5maWVsZFZhbHVlKSYmaXNBcnJheUVxdWFsKG4sdGhpcy5kYXRhLmZpZWxkVmFsdWUpJiZ2b2lkIDA9PT1zKXJldHVybiBudWxsO3ZvaWQgMD09PW8mJihvPXRoaXMucm90YXRpb24pO2xldCBnPW51bGw7aWYoIXRoaXMuX25lZWRBcHBlYXJhbmNlcyl7Zz1hd2FpdCB0aGlzLl9nZXRBcHBlYXJhbmNlKGUsdCxoLGkpO2lmKG51bGw9PT1nJiZ2b2lkIDA9PT1zKXJldHVybiBudWxsfWxldCBjPSExO2lmKGc/Lm5lZWRBcHBlYXJhbmNlcyl7Yz0hMDtnPW51bGx9Y29uc3R7eHJlZjpDfT1lLGw9Qy5mZXRjaElmUmVmKHRoaXMucmVmKTtpZighKGwgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm4gbnVsbDtjb25zdCBRPW5ldyBEaWN0KEMpO2Zvcihjb25zdCBlIG9mIGwuZ2V0S2V5cygpKSJBUCIhPT1lJiZRLnNldChlLGwuZ2V0UmF3KGUpKTtpZih2b2lkIDAhPT1zKXtRLnNldCgiRiIscyk7aWYobnVsbD09PWcmJiFjKXtjb25zdCBlPWwuZ2V0UmF3KCJBUCIpO2UmJlEuc2V0KCJBUCIsZSl9fWNvbnN0IEU9e3BhdGg6dGhpcy5kYXRhLmZpZWxkTmFtZSx2YWx1ZTpufTtRLnNldCgiViIsQXJyYXkuaXNBcnJheShuKT9uLm1hcChzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKTpzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKG4pKTt0aGlzLmFtZW5kU2F2ZWREaWN0KGksUSk7Y29uc3QgdT10aGlzLl9nZXRNS0RpY3Qobyk7dSYmUS5zZXQoIk1LIix1KTtjb25zdCBkPVtdLGY9W3tyZWY6dGhpcy5yZWYsZGF0YToiIix4ZmE6RSxuZWVkQXBwZWFyYW5jZXM6Y31dO2lmKG51bGwhPT1nKXtjb25zdCBlPUMuZ2V0TmV3VGVtcG9yYXJ5UmVmKCksdD1uZXcgRGljdChDKTtRLnNldCgiQVAiLHQpO3Quc2V0KCJOIixlKTtjb25zdCByPXRoaXMuX2dldFNhdmVGaWVsZFJlc291cmNlcyhDKSxzPW5ldyBTdHJpbmdTdHJlYW0oZyksbj1zLmRpY3Q9bmV3IERpY3QoQyk7bi5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJGb3JtIikpO24uc2V0KCJSZXNvdXJjZXMiLHIpO24uc2V0KCJCQm94IixbMCwwLHRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLHRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdXSk7Y29uc3Qgbz10aGlzLmdldFJvdGF0aW9uTWF0cml4KGkpO28hPT1hJiZuLnNldCgiTWF0cml4IixvKTthd2FpdCB3cml0ZU9iamVjdChlLHMsZCxDKTtmLnB1c2goe3JlZjplLGRhdGE6ZC5qb2luKCIiKSx4ZmE6bnVsbCxuZWVkQXBwZWFyYW5jZXM6ITF9KTtkLmxlbmd0aD0wfVEuc2V0KCJNIixgRDoke2dldE1vZGlmaWNhdGlvbkRhdGUoKX1gKTthd2FpdCB3cml0ZU9iamVjdCh0aGlzLnJlZixRLGQsQyk7ZlswXS5kYXRhPWQuam9pbigiIik7cmV0dXJuIGZ9YXN5bmMgX2dldEFwcGVhcmFuY2UoZSx0LGksYSl7aWYodGhpcy5oYXNGaWVsZEZsYWcob0EpKXJldHVybiBudWxsO2NvbnN0IHI9YT8uZ2V0KHRoaXMuZGF0YS5pZCk7bGV0IHMsbjtpZihyKXtzPXIuZm9ybWF0dGVkVmFsdWV8fHIudmFsdWU7bj1yLnJvdGF0aW9ufWlmKHZvaWQgMD09PW4mJnZvaWQgMD09PXMmJiF0aGlzLl9uZWVkQXBwZWFyYW5jZXMmJighdGhpcy5faGFzVmFsdWVGcm9tWEZBfHx0aGlzLmFwcGVhcmFuY2UpKXJldHVybiBudWxsO2NvbnN0IGc9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMoYSk7aWYodm9pZCAwPT09cyl7cz10aGlzLmRhdGEuZmllbGRWYWx1ZTtpZighcylyZXR1cm5gL1R4IEJNQyBxICR7Z31RIEVNQ2B9QXJyYXkuaXNBcnJheShzKSYmMT09PXMubGVuZ3RoJiYocz1zWzBdKTthc3NlcnQoInN0cmluZyI9PXR5cGVvZiBzLCJFeHBlY3RlZCBgdmFsdWVgIHRvIGJlIGEgc3RyaW5nLiIpO3M9cy50cmltRW5kKCk7aWYodGhpcy5kYXRhLmNvbWJvKXtjb25zdCBlPXRoaXMuZGF0YS5vcHRpb25zLmZpbmQoKCh7ZXhwb3J0VmFsdWU6ZX0pPT5zPT09ZSkpO3M9ZT8uZGlzcGxheVZhbHVlfHxzfWlmKCIiPT09cylyZXR1cm5gL1R4IEJNQyBxICR7Z31RIEVNQ2A7dm9pZCAwPT09biYmKG49dGhpcy5yb3RhdGlvbik7bGV0IGMsQz0tMTtpZih0aGlzLmRhdGEubXVsdGlMaW5lKXtjPXMuc3BsaXQoL1xyXG4/fFxuLykubWFwKChlPT5lLm5vcm1hbGl6ZSgiTkZDIikpKTtDPWMubGVuZ3RofWVsc2UgYz1bcy5yZXBsYWNlKC9cclxuP3xcbi8sIiIpLm5vcm1hbGl6ZSgiTkZDIildO2xldCBsPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLFE9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF07OTAhPT1uJiYyNzAhPT1ufHwoW1EsbF09W2wsUV0pO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT1wYXJzZURlZmF1bHRBcHBlYXJhbmNlKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpO2xldCBFLHUsZCxmPWF3YWl0IFdpZGdldEFubm90YXRpb24uX2dldEZvbnREYXRhKGUsdCx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcyk7Y29uc3QgcD1bXTtsZXQgbT0hMTtmb3IoY29uc3QgZSBvZiBjKXtjb25zdCB0PWYuZW5jb2RlU3RyaW5nKGUpO3QubGVuZ3RoPjEmJihtPSEwKTtwLnB1c2godC5qb2luKCIiKSl9aWYobSYmaSZoKXJldHVybntuZWVkQXBwZWFyYW5jZXM6ITB9O2lmKG0mJnRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKXtjb25zdCBpPXRoaXMuZGF0YS5jb21iPyJtb25vc3BhY2UiOiJzYW5zLXNlcmlmIixhPW5ldyBGYWtlVW5pY29kZUZvbnQoZS54cmVmLGkpLHI9YS5jcmVhdGVGb250UmVzb3VyY2VzKGMuam9pbigiIikpLG49ci5nZXRSYXcoIkZvbnQiKTtpZih0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuaGFzKCJGb250Iikpe2NvbnN0IGU9dGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLmdldCgiRm9udCIpO2Zvcihjb25zdCB0IG9mIG4uZ2V0S2V5cygpKWUuc2V0KHQsbi5nZXRSYXcodCkpfWVsc2UgdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLnNldCgiRm9udCIsbik7Y29uc3Qgbz1hLmZvbnROYW1lLm5hbWU7Zj1hd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShlLHQse2ZvbnROYW1lOm8sZm9udFNpemU6MH0scik7Zm9yKGxldCBlPTAsdD1wLmxlbmd0aDtlPHQ7ZSsrKXBbZV09c3RyaW5nVG9VVEYxNlN0cmluZyhjW2VdKTtjb25zdCBnPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhKTt0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRTaXplPTA7dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250TmFtZT1vO1tFLHUsZF09dGhpcy5fY29tcHV0ZUZvbnRTaXplKGwtMixRLTQscyxmLEMpO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9Z31lbHNle3RoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfHx3YXJuKCJfZ2V0QXBwZWFyYW5jZTogT2Zmc2NyZWVuQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQsIGFubm90YXRpb24gbWF5IG5vdCByZW5kZXIgY29ycmVjdGx5LiIpO1tFLHUsZF09dGhpcy5fY29tcHV0ZUZvbnRTaXplKGwtMixRLTQscyxmLEMpfWxldCB5PWYuZGVzY2VudDt5PWlzTmFOKHkpP28qZDpNYXRoLm1heChvKmQsTWF0aC5hYnMoeSkqdSk7Y29uc3Qgdz1NYXRoLm1pbihNYXRoLmZsb29yKChsLXUpLzIpLDEpLGI9dGhpcy5kYXRhLnRleHRBbGlnbm1lbnQ7aWYodGhpcy5kYXRhLm11bHRpTGluZSlyZXR1cm4gdGhpcy5fZ2V0TXVsdGlsaW5lQXBwZWFyYW5jZShFLHAsZix1LFEsbCxiLDIsdyx5LGQsYSk7aWYodGhpcy5kYXRhLmNvbWIpcmV0dXJuIHRoaXMuX2dldENvbWJBcHBlYXJhbmNlKEUsZixwWzBdLHUsUSxsLDIsdyx5LGQsYSk7Y29uc3QgRD13K3k7aWYoMD09PWJ8fGI+MilyZXR1cm5gL1R4IEJNQyBxICR7Z31CVCBgK0UrYCAxIDAgMCAxICR7bnVtYmVyVG9TdHJpbmcoMil9ICR7bnVtYmVyVG9TdHJpbmcoRCl9IFRtICgke2VzY2FwZVN0cmluZyhwWzBdKX0pIFRqIEVUIFEgRU1DYDtyZXR1cm5gL1R4IEJNQyBxICR7Z31CVCBgK0UrYCAxIDAgMCAxIDAgMCBUbSAke3RoaXMuX3JlbmRlclRleHQocFswXSxmLHUsUSxiLHtzaGlmdDowfSwyLEQpfSBFVCBRIEVNQ2B9c3RhdGljIGFzeW5jIF9nZXRGb250RGF0YShlLHQsaSxhKXtjb25zdCByPW5ldyBPcGVyYXRvckxpc3Qscz17Zm9udDpudWxsLGNsb25lKCl7cmV0dXJuIHRoaXN9fSx7Zm9udE5hbWU6bixmb250U2l6ZTpvfT1pO2F3YWl0IGUuaGFuZGxlU2V0Rm9udChhLFtuJiZOYW1lLmdldChuKSxvXSxudWxsLHIsdCxzLG51bGwpO3JldHVybiBzLmZvbnR9X2dldFRleHRXaWR0aChlLHQpe3JldHVybiB0LmNoYXJzVG9HbHlwaHMoZSkucmVkdWNlKCgoZSx0KT0+ZSt0LndpZHRoKSwwKS8xZTN9X2NvbXB1dGVGb250U2l6ZShlLHQsaSxhLHIpe2xldHtmb250U2l6ZTpufT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLG89KG58fDEyKSpzLGc9TWF0aC5yb3VuZChlL28pO2lmKCFuKXtjb25zdCByb3VuZFdpdGhUd29EaWdpdHM9ZT0+TWF0aC5mbG9vcigxMDAqZSkvMTAwO2lmKC0xPT09cil7Y29uc3Qgcj10aGlzLl9nZXRUZXh0V2lkdGgoaSxhKTtuPXJvdW5kV2l0aFR3b0RpZ2l0cyhNYXRoLm1pbihlL3MsdC9yKSk7Zz0xfWVsc2V7Y29uc3QgYz1pLnNwbGl0KC9cclxuP3xcbi8pLEM9W107Zm9yKGNvbnN0IGUgb2YgYyl7Y29uc3QgdD1hLmVuY29kZVN0cmluZyhlKS5qb2luKCIiKSxpPWEuY2hhcnNUb0dseXBocyh0KSxyPWEuZ2V0Q2hhclBvc2l0aW9ucyh0KTtDLnB1c2goe2xpbmU6dCxnbHlwaHM6aSxwb3NpdGlvbnM6cn0pfWNvbnN0IGlzVG9vQmlnPWk9PntsZXQgcj0wO2Zvcihjb25zdCBzIG9mIEMpe3IrPXRoaXMuX3NwbGl0TGluZShudWxsLGEsaSx0LHMpLmxlbmd0aCppO2lmKHI+ZSlyZXR1cm4hMH1yZXR1cm4hMX07Zz1NYXRoLm1heChnLHIpO2Zvcig7Oyl7bz1lL2c7bj1yb3VuZFdpdGhUd29EaWdpdHMoby9zKTtpZighaXNUb29CaWcobikpYnJlYWs7ZysrfX1jb25zdHtmb250TmFtZTpjLGZvbnRDb2xvcjpDfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKHtmb250U2l6ZTplLGZvbnROYW1lOnQsZm9udENvbG9yOml9KXtyZXR1cm5gLyR7ZXNjYXBlUERGTmFtZSh0KX0gJHtlfSBUZiAke2dldFBkZkNvbG9yKGksITApfWB9KHtmb250U2l6ZTpuLGZvbnROYW1lOmMsZm9udENvbG9yOkN9KX1yZXR1cm5bdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UsbixlL2ddfV9yZW5kZXJUZXh0KGUsdCxpLGEscixzLG4sbyl7bGV0IGc7aWYoMT09PXIpe2c9KGEtdGhpcy5fZ2V0VGV4dFdpZHRoKGUsdCkqaSkvMn1lbHNlIGlmKDI9PT1yKXtnPWEtdGhpcy5fZ2V0VGV4dFdpZHRoKGUsdCkqaS1ufWVsc2UgZz1uO2NvbnN0IGM9bnVtYmVyVG9TdHJpbmcoZy1zLnNoaWZ0KTtzLnNoaWZ0PWc7cmV0dXJuYCR7Y30gJHtvPW51bWJlclRvU3RyaW5nKG8pfSBUZCAoJHtlc2NhcGVTdHJpbmcoZSl9KSBUamB9X2dldFNhdmVGaWVsZFJlc291cmNlcyhlKXtjb25zdHtsb2NhbFJlc291cmNlczp0LGFwcGVhcmFuY2VSZXNvdXJjZXM6aSxhY3JvRm9ybVJlc291cmNlczphfT10aGlzLl9maWVsZFJlc291cmNlcyxyPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE/LmZvbnROYW1lO2lmKCFyKXJldHVybiB0fHxEaWN0LmVtcHR5O2Zvcihjb25zdCBlIG9mW3QsaV0paWYoZSBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IHQ9ZS5nZXQoIkZvbnQiKTtpZih0IGluc3RhbmNlb2YgRGljdCYmdC5oYXMocikpcmV0dXJuIGV9aWYoYSBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGk9YS5nZXQoIkZvbnQiKTtpZihpIGluc3RhbmNlb2YgRGljdCYmaS5oYXMocikpe2NvbnN0IGE9bmV3IERpY3QoZSk7YS5zZXQocixpLmdldFJhdyhyKSk7Y29uc3Qgcz1uZXcgRGljdChlKTtzLnNldCgiRm9udCIsYSk7cmV0dXJuIERpY3QubWVyZ2Uoe3hyZWY6ZSxkaWN0QXJyYXk6W3MsdF0sbWVyZ2VTdWJEaWN0czohMH0pfX1yZXR1cm4gdHx8RGljdC5lbXB0eX1nZXRGaWVsZE9iamVjdCgpe3JldHVybiBudWxsfX1jbGFzcyBUZXh0V2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0fT1lO2lmKHQuaGFzKCJQTUQiKSl7dGhpcy5mbGFnc3w9JDt0aGlzLmRhdGEuaGlkZGVuPSEwO3dhcm4oIkJhcmNvZGVzIGFyZSBub3Qgc3VwcG9ydGVkIil9dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEucmVhZE9ubHkmJiF0aGlzLmRhdGEubm9IVE1MO3RoaXMuX2hhc1RleHQ9ITA7InN0cmluZyIhPXR5cGVvZiB0aGlzLmRhdGEuZmllbGRWYWx1ZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPSIiKTtsZXQgaT1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJRIn0pOyghTnVtYmVyLmlzSW50ZWdlcihpKXx8aTwwfHxpPjIpJiYoaT1udWxsKTt0aGlzLmRhdGEudGV4dEFsaWdubWVudD1pO2xldCBhPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6Ik1heExlbiJ9KTsoIU51bWJlci5pc0ludGVnZXIoYSl8fGE8MCkmJihhPTApO3RoaXMuZGF0YS5tYXhMZW49YTt0aGlzLmRhdGEubXVsdGlMaW5lPXRoaXMuaGFzRmllbGRGbGFnKG5BKTt0aGlzLmRhdGEuY29tYj10aGlzLmhhc0ZpZWxkRmxhZyhCQSkmJiF0aGlzLmhhc0ZpZWxkRmxhZyhuQSkmJiF0aGlzLmhhc0ZpZWxkRmxhZyhvQSkmJiF0aGlzLmhhc0ZpZWxkRmxhZyhDQSkmJjAhPT10aGlzLmRhdGEubWF4TGVuO3RoaXMuZGF0YS5kb05vdFNjcm9sbD10aGlzLmhhc0ZpZWxkRmxhZyhsQSl9Z2V0IGhhc1RleHRDb250ZW50KCl7cmV0dXJuISF0aGlzLmFwcGVhcmFuY2UmJiF0aGlzLl9uZWVkQXBwZWFyYW5jZXN9X2dldENvbWJBcHBlYXJhbmNlKGUsdCxpLGEscixzLG4sbyxnLGMsQyl7Y29uc3QgaD1yL3RoaXMuZGF0YS5tYXhMZW4sbD10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhDKSxRPVtdLEU9dC5nZXRDaGFyUG9zaXRpb25zKGkpO2Zvcihjb25zdFtlLHRdb2YgRSlRLnB1c2goYCgke2VzY2FwZVN0cmluZyhpLnN1YnN0cmluZyhlLHQpKX0pIFRqYCk7Y29uc3QgdT1RLmpvaW4oYCAke251bWJlclRvU3RyaW5nKGgpfSAwIFRkIGApO3JldHVybmAvVHggQk1DIHEgJHtsfUJUIGArZStgIDEgMCAwIDEgJHtudW1iZXJUb1N0cmluZyhuKX0gJHtudW1iZXJUb1N0cmluZyhvK2cpfSBUbSAke3V9IEVUIFEgRU1DYH1fZ2V0TXVsdGlsaW5lQXBwZWFyYW5jZShlLHQsaSxhLHIscyxuLG8sZyxjLEMsaCl7Y29uc3QgbD1bXSxRPXItMipvLEU9e3NoaWZ0OjB9O2ZvcihsZXQgZT0wLHM9dC5sZW5ndGg7ZTxzO2UrKyl7Y29uc3Qgcz10W2VdLGg9dGhpcy5fc3BsaXRMaW5lKHMsaSxhLFEpO2ZvcihsZXQgdD0wLHM9aC5sZW5ndGg7dDxzO3QrKyl7Y29uc3Qgcz1oW3RdLFE9MD09PWUmJjA9PT10Py1nLShDLWMpOi1DO2wucHVzaCh0aGlzLl9yZW5kZXJUZXh0KHMsaSxhLHIsbixFLG8sUSkpfX1jb25zdCB1PXRoaXMuZ2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKGgpLGQ9bC5qb2luKCJcbiIpO3JldHVybmAvVHggQk1DIHEgJHt1fUJUIGArZStgIDEgMCAwIDEgMCAke251bWJlclRvU3RyaW5nKHMpfSBUbSAke2R9IEVUIFEgRU1DYH1fc3BsaXRMaW5lKGUsdCxpLGEscj17fSl7ZT1yLmxpbmV8fGU7Y29uc3Qgcz1yLmdseXBoc3x8dC5jaGFyc1RvR2x5cGhzKGUpO2lmKHMubGVuZ3RoPD0xKXJldHVybltlXTtjb25zdCBuPXIucG9zaXRpb25zfHx0LmdldENoYXJQb3NpdGlvbnMoZSksbz1pLzFlMyxnPVtdO2xldCBjPS0xLEM9LTEsaD0tMSxsPTAsUT0wO2ZvcihsZXQgdD0wLGk9cy5sZW5ndGg7dDxpO3QrKyl7Y29uc3RbaSxyXT1uW3RdLEU9c1t0XSx1PUUud2lkdGgqbztpZigiICI9PT1FLnVuaWNvZGUpaWYoUSt1PmEpe2cucHVzaChlLnN1YnN0cmluZyhsLGkpKTtsPWk7UT11O2M9LTE7aD0tMX1lbHNle1ErPXU7Yz1pO0M9cjtoPXR9ZWxzZSBpZihRK3U+YSlpZigtMSE9PWMpe2cucHVzaChlLnN1YnN0cmluZyhsLEMpKTtsPUM7dD1oKzE7Yz0tMTtRPTB9ZWxzZXtnLnB1c2goZS5zdWJzdHJpbmcobCxpKSk7bD1pO1E9dX1lbHNlIFErPXV9bDxlLmxlbmd0aCYmZy5wdXNoKGUuc3Vic3RyaW5nKGwsZS5sZW5ndGgpKTtyZXR1cm4gZ31hc3luYyBleHRyYWN0VGV4dENvbnRlbnQoZSx0LGkpe2F3YWl0IHN1cGVyLmV4dHJhY3RUZXh0Q29udGVudChlLHQsaSk7Y29uc3QgYT10aGlzLmRhdGEudGV4dENvbnRlbnQ7aWYoIWEpcmV0dXJuO2NvbnN0IHI9YS5qb2luKCJcbiIpO2lmKHI9PT10aGlzLmRhdGEuZmllbGRWYWx1ZSlyZXR1cm47Y29uc3Qgcz1yLnJlcGxhY2VBbGwoLyhbLiorP14ke30oKXxbXF1cXF0pfChccyspL2csKChlLHQpPT50P2BcXCR7dH1gOiJcXHMrIikpO25ldyBSZWdFeHAoYF5cXHMqJHtzfVxccyokYCkudGVzdCh0aGlzLmRhdGEuZmllbGRWYWx1ZSkmJih0aGlzLmRhdGEudGV4dENvbnRlbnQ9dGhpcy5kYXRhLmZpZWxkVmFsdWUuc3BsaXQoIlxuIikpfWdldEZpZWxkT2JqZWN0KCl7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZSxkZWZhdWx0VmFsdWU6dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlfHwiIixtdWx0aWxpbmU6dGhpcy5kYXRhLm11bHRpTGluZSxwYXNzd29yZDp0aGlzLmhhc0ZpZWxkRmxhZyhvQSksY2hhckxpbWl0OnRoaXMuZGF0YS5tYXhMZW4sY29tYjp0aGlzLmRhdGEuY29tYixlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6InRleHQifX19Y2xhc3MgQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT1udWxsO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZT1udWxsO3RoaXMuZGF0YS5jaGVja0JveD0hdGhpcy5oYXNGaWVsZEZsYWcoZ0EpJiYhdGhpcy5oYXNGaWVsZEZsYWcoSUEpO3RoaXMuZGF0YS5yYWRpb0J1dHRvbj10aGlzLmhhc0ZpZWxkRmxhZyhnQSkmJiF0aGlzLmhhc0ZpZWxkRmxhZyhJQSk7dGhpcy5kYXRhLnB1c2hCdXR0b249dGhpcy5oYXNGaWVsZEZsYWcoSUEpO3RoaXMuZGF0YS5pc1Rvb2x0aXBPbmx5PSExO2lmKHRoaXMuZGF0YS5jaGVja0JveCl0aGlzLl9wcm9jZXNzQ2hlY2tCb3goZSk7ZWxzZSBpZih0aGlzLmRhdGEucmFkaW9CdXR0b24pdGhpcy5fcHJvY2Vzc1JhZGlvQnV0dG9uKGUpO2Vsc2UgaWYodGhpcy5kYXRhLnB1c2hCdXR0b24pe3RoaXMuZGF0YS5oYXNPd25DYW52YXM9ITA7dGhpcy5kYXRhLm5vSFRNTD0hMTt0aGlzLl9wcm9jZXNzUHVzaEJ1dHRvbihlKX1lbHNlIHdhcm4oIkludmFsaWQgZmllbGQgZmxhZ3MgZm9yIGJ1dHRvbiB3aWRnZXQgYW5ub3RhdGlvbiIpfWFzeW5jIGdldE9wZXJhdG9yTGlzdChlLHQsaSxyKXtpZih0aGlzLmRhdGEucHVzaEJ1dHRvbilyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxpLCExLHIpO2xldCBzPW51bGwsbj1udWxsO2lmKHIpe2NvbnN0IGU9ci5nZXQodGhpcy5kYXRhLmlkKTtzPWU/ZS52YWx1ZTpudWxsO249ZT9lLnJvdGF0aW9uOm51bGx9aWYobnVsbD09PXMmJnRoaXMuYXBwZWFyYW5jZSlyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxpLHIpO251bGw9PXMmJihzPXRoaXMuZGF0YS5jaGVja0JveD90aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5leHBvcnRWYWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSk7Y29uc3Qgbz1zP3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U6dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlO2lmKG8pe2NvbnN0IHM9dGhpcy5hcHBlYXJhbmNlLGc9bG9va3VwTWF0cml4KG8uZGljdC5nZXRBcnJheSgiTWF0cml4IiksYSk7biYmby5kaWN0LnNldCgiTWF0cml4Iix0aGlzLmdldFJvdGF0aW9uTWF0cml4KHIpKTt0aGlzLmFwcGVhcmFuY2U9bztjb25zdCBjPXN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsaSxyKTt0aGlzLmFwcGVhcmFuY2U9cztvLmRpY3Quc2V0KCJNYXRyaXgiLGcpO3JldHVybiBjfXJldHVybntvcExpc3Q6bmV3IE9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fWFzeW5jIHNhdmUoZSx0LGkpe3JldHVybiB0aGlzLmRhdGEuY2hlY2tCb3g/dGhpcy5fc2F2ZUNoZWNrYm94KGUsdCxpKTp0aGlzLmRhdGEucmFkaW9CdXR0b24/dGhpcy5fc2F2ZVJhZGlvQnV0dG9uKGUsdCxpKTpudWxsfWFzeW5jIF9zYXZlQ2hlY2tib3goZSx0LGkpe2lmKCFpKXJldHVybiBudWxsO2NvbnN0IGE9aS5nZXQodGhpcy5kYXRhLmlkKSxyPXRoaXMuX2J1aWxkRmxhZ3MoYT8ubm9WaWV3LGE/Lm5vUHJpbnQpO2xldCBzPWE/LnJvdGF0aW9uLG49YT8udmFsdWU7aWYodm9pZCAwPT09cyYmdm9pZCAwPT09cil7aWYodm9pZCAwPT09bilyZXR1cm4gbnVsbDtpZih0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5leHBvcnRWYWx1ZT09PW4pcmV0dXJuIG51bGx9bGV0IG89ZS54cmVmLmZldGNoSWZSZWYodGhpcy5yZWYpO2lmKCEobyBpbnN0YW5jZW9mIERpY3QpKXJldHVybiBudWxsO289by5jbG9uZSgpO3ZvaWQgMD09PXMmJihzPXRoaXMucm90YXRpb24pO3ZvaWQgMD09PW4mJihuPXRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlKTtjb25zdCBnPXtwYXRoOnRoaXMuZGF0YS5maWVsZE5hbWUsdmFsdWU6bj90aGlzLmRhdGEuZXhwb3J0VmFsdWU6IiJ9LGM9TmFtZS5nZXQobj90aGlzLmRhdGEuZXhwb3J0VmFsdWU6Ik9mZiIpO28uc2V0KCJWIixjKTtvLnNldCgiQVMiLGMpO28uc2V0KCJNIixgRDoke2dldE1vZGlmaWNhdGlvbkRhdGUoKX1gKTt2b2lkIDAhPT1yJiZvLnNldCgiRiIscik7Y29uc3QgQz10aGlzLl9nZXRNS0RpY3Qocyk7QyYmby5zZXQoIk1LIixDKTtjb25zdCBoPVtdO2F3YWl0IHdyaXRlT2JqZWN0KHRoaXMucmVmLG8saCxlLnhyZWYpO3JldHVyblt7cmVmOnRoaXMucmVmLGRhdGE6aC5qb2luKCIiKSx4ZmE6Z31dfWFzeW5jIF9zYXZlUmFkaW9CdXR0b24oZSx0LGkpe2lmKCFpKXJldHVybiBudWxsO2NvbnN0IGE9aS5nZXQodGhpcy5kYXRhLmlkKSxyPXRoaXMuX2J1aWxkRmxhZ3MoYT8ubm9WaWV3LGE/Lm5vUHJpbnQpO2xldCBzPWE/LnJvdGF0aW9uLG49YT8udmFsdWU7aWYodm9pZCAwPT09cyYmdm9pZCAwPT09cil7aWYodm9pZCAwPT09bilyZXR1cm4gbnVsbDtpZih0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZT09PW4pcmV0dXJuIG51bGx9bGV0IG89ZS54cmVmLmZldGNoSWZSZWYodGhpcy5yZWYpO2lmKCEobyBpbnN0YW5jZW9mIERpY3QpKXJldHVybiBudWxsO289by5jbG9uZSgpO3ZvaWQgMD09PW4mJihuPXRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlKTt2b2lkIDA9PT1zJiYocz10aGlzLnJvdGF0aW9uKTtjb25zdCBnPXtwYXRoOnRoaXMuZGF0YS5maWVsZE5hbWUsdmFsdWU6bj90aGlzLmRhdGEuYnV0dG9uVmFsdWU6IiJ9LGM9TmFtZS5nZXQobj90aGlzLmRhdGEuYnV0dG9uVmFsdWU6Ik9mZiIpLEM9W107bGV0IGg9bnVsbDtpZihuKWlmKHRoaXMucGFyZW50IGluc3RhbmNlb2YgUmVmKXtjb25zdCB0PWUueHJlZi5mZXRjaCh0aGlzLnBhcmVudCk7dC5zZXQoIlYiLGMpO2F3YWl0IHdyaXRlT2JqZWN0KHRoaXMucGFyZW50LHQsQyxlLnhyZWYpO2g9Qy5qb2luKCIiKTtDLmxlbmd0aD0wfWVsc2UgdGhpcy5wYXJlbnQgaW5zdGFuY2VvZiBEaWN0JiZ0aGlzLnBhcmVudC5zZXQoIlYiLGMpO3RoaXMucGFyZW50fHxvLnNldCgiViIsYyk7by5zZXQoIkFTIixjKTtvLnNldCgiTSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7dm9pZCAwIT09ciYmby5zZXQoIkYiLHIpO2NvbnN0IGw9dGhpcy5fZ2V0TUtEaWN0KHMpO2wmJm8uc2V0KCJNSyIsbCk7YXdhaXQgd3JpdGVPYmplY3QodGhpcy5yZWYsbyxDLGUueHJlZik7Y29uc3QgUT1be3JlZjp0aGlzLnJlZixkYXRhOkMuam9pbigiIikseGZhOmd9XTtoJiZRLnB1c2goe3JlZjp0aGlzLnBhcmVudCxkYXRhOmgseGZhOm51bGx9KTtyZXR1cm4gUX1fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKGUsdCl7Y29uc3QgaT10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSxhPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLHI9WzAsMCxpLGFdLHM9LjgqTWF0aC5taW4oaSxhKTtsZXQgbixvO2lmKCJjaGVjayI9PT10KXtuPXt3aWR0aDouNzU1KnMsaGVpZ2h0Oi43MDUqc307bz0iMyJ9ZWxzZSBpZigiZGlzYyI9PT10KXtuPXt3aWR0aDouNzkxKnMsaGVpZ2h0Oi43MDUqc307bz0ibCJ9ZWxzZSB1bnJlYWNoYWJsZShgX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZSAtIHVuc3VwcG9ydGVkIHR5cGU6ICR7dH1gKTtjb25zdCBnPWBxIEJUIC9QZGZKc1phRGIgJHtzfSBUZiAwIGcgJHtudW1iZXJUb1N0cmluZygoaS1uLndpZHRoKS8yKX0gJHtudW1iZXJUb1N0cmluZygoYS1uLmhlaWdodCkvMil9IFRkICgke299KSBUaiBFVCBRYCxjPW5ldyBEaWN0KGUueHJlZik7Yy5zZXQoIkZvcm1UeXBlIiwxKTtjLnNldCgiU3VidHlwZSIsTmFtZS5nZXQoIkZvcm0iKSk7Yy5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJYT2JqZWN0IikpO2Muc2V0KCJCQm94IixyKTtjLnNldCgiTWF0cml4IixbMSwwLDAsMSwwLDBdKTtjLnNldCgiTGVuZ3RoIixnLmxlbmd0aCk7Y29uc3QgQz1uZXcgRGljdChlLnhyZWYpLGg9bmV3IERpY3QoZS54cmVmKTtoLnNldCgiUGRmSnNaYURiIix0aGlzLmZhbGxiYWNrRm9udERpY3QpO0Muc2V0KCJGb250IixoKTtjLnNldCgiUmVzb3VyY2VzIixDKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW5ldyBTdHJpbmdTdHJlYW0oZyk7dGhpcy5jaGVja2VkQXBwZWFyYW5jZS5kaWN0PWM7dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpfV9wcm9jZXNzQ2hlY2tCb3goZSl7Y29uc3QgdD1lLmRpY3QuZ2V0KCJBUCIpO2lmKCEodCBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtjb25zdCBpPXQuZ2V0KCJOIik7aWYoIShpIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUuZGljdC5nZXQoIkFTIikpOyJzdHJpbmciPT10eXBlb2YgYSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPWEpO2NvbnN0IHI9bnVsbCE9PXRoaXMuZGF0YS5maWVsZFZhbHVlJiYiT2ZmIiE9PXRoaXMuZGF0YS5maWVsZFZhbHVlP3RoaXMuZGF0YS5maWVsZFZhbHVlOiJZZXMiLHM9aS5nZXRLZXlzKCk7aWYoMD09PXMubGVuZ3RoKXMucHVzaCgiT2ZmIixyKTtlbHNlIGlmKDE9PT1zLmxlbmd0aCkiT2ZmIj09PXNbMF0/cy5wdXNoKHIpOnMudW5zaGlmdCgiT2ZmIik7ZWxzZSBpZihzLmluY2x1ZGVzKHIpKXtzLmxlbmd0aD0wO3MucHVzaCgiT2ZmIixyKX1lbHNle2NvbnN0IGU9cy5maW5kKChlPT4iT2ZmIiE9PWUpKTtzLmxlbmd0aD0wO3MucHVzaCgiT2ZmIixlKX1zLmluY2x1ZGVzKHRoaXMuZGF0YS5maWVsZFZhbHVlKXx8KHRoaXMuZGF0YS5maWVsZFZhbHVlPSJPZmYiKTt0aGlzLmRhdGEuZXhwb3J0VmFsdWU9c1sxXTtjb25zdCBuPWkuZ2V0KHRoaXMuZGF0YS5leHBvcnRWYWx1ZSk7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT1uIGluc3RhbmNlb2YgQmFzZVN0cmVhbT9uOm51bGw7Y29uc3Qgbz1pLmdldCgiT2ZmIik7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlPW8gaW5zdGFuY2VvZiBCYXNlU3RyZWFtP286bnVsbDt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlP3RoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKTp0aGlzLl9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UoZSwiY2hlY2siKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UmJnRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UpO3RoaXMuX2ZhbGxiYWNrRm9udERpY3Q9dGhpcy5mYWxsYmFja0ZvbnREaWN0O251bGw9PT10aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUmJih0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWU9Ik9mZiIpfV9wcm9jZXNzUmFkaW9CdXR0b24oZSl7dGhpcy5kYXRhLmJ1dHRvblZhbHVlPW51bGw7Y29uc3QgdD1lLmRpY3QuZ2V0KCJQYXJlbnQiKTtpZih0IGluc3RhbmNlb2YgRGljdCl7dGhpcy5wYXJlbnQ9ZS5kaWN0LmdldFJhdygiUGFyZW50Iik7Y29uc3QgaT10LmdldCgiViIpO2kgaW5zdGFuY2VvZiBOYW1lJiYodGhpcy5kYXRhLmZpZWxkVmFsdWU9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGkpKX1jb25zdCBpPWUuZGljdC5nZXQoIkFQIik7aWYoIShpIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2NvbnN0IGE9aS5nZXQoIk4iKTtpZighKGEgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm47Zm9yKGNvbnN0IGUgb2YgYS5nZXRLZXlzKCkpaWYoIk9mZiIhPT1lKXt0aGlzLmRhdGEuYnV0dG9uVmFsdWU9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUpO2JyZWFrfWNvbnN0IHI9YS5nZXQodGhpcy5kYXRhLmJ1dHRvblZhbHVlKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPXIgaW5zdGFuY2VvZiBCYXNlU3RyZWFtP3I6bnVsbDtjb25zdCBzPWEuZ2V0KCJPZmYiKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9cyBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/czpudWxsO3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJkaXNjIik7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKTt0aGlzLl9mYWxsYmFja0ZvbnREaWN0PXRoaXMuZmFsbGJhY2tGb250RGljdDtudWxsPT09dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlJiYodGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlPSJPZmYiKX1fcHJvY2Vzc1B1c2hCdXR0b24oZSl7Y29uc3R7ZGljdDp0LGFubm90YXRpb25HbG9iYWxzOml9PWU7aWYodC5oYXMoIkEiKXx8dC5oYXMoIkFBIil8fHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQpe3RoaXMuZGF0YS5pc1Rvb2x0aXBPbmx5PSF0LmhhcygiQSIpJiYhdC5oYXMoIkFBIik7Q2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDp0LHJlc3VsdE9iajp0aGlzLmRhdGEsZG9jQmFzZVVybDppLmJhc2VVcmwsZG9jQXR0YWNobWVudHM6aS5hdHRhY2htZW50c30pfWVsc2Ugd2FybigiUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCIpfWdldEZpZWxkT2JqZWN0KCl7bGV0IGUsdD0iYnV0dG9uIjtpZih0aGlzLmRhdGEuY2hlY2tCb3gpe3Q9ImNoZWNrYm94IjtlPXRoaXMuZGF0YS5leHBvcnRWYWx1ZX1lbHNlIGlmKHRoaXMuZGF0YS5yYWRpb0J1dHRvbil7dD0icmFkaW9idXR0b24iO2U9dGhpcy5kYXRhLmJ1dHRvblZhbHVlfXJldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV8fCJPZmYiLGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUsZXhwb3J0VmFsdWVzOmUsZWRpdGFibGU6IXRoaXMuZGF0YS5yZWFkT25seSxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUscmVjdDp0aGlzLmRhdGEucmVjdCxoaWRkZW46dGhpcy5kYXRhLmhpZGRlbixhY3Rpb25zOnRoaXMuZGF0YS5hY3Rpb25zLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCxzdHJva2VDb2xvcjp0aGlzLmRhdGEuYm9yZGVyQ29sb3IsZmlsbENvbG9yOnRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbix0eXBlOnR9fWdldCBmYWxsYmFja0ZvbnREaWN0KCl7Y29uc3QgZT1uZXcgRGljdDtlLnNldCgiQmFzZUZvbnQiLE5hbWUuZ2V0KCJaYXBmRGluZ2JhdHMiKSk7ZS5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIkVuY29kaW5nIixOYW1lLmdldCgiWmFwZkRpbmdiYXRzRW5jb2RpbmciKSk7cmV0dXJuIHNoYWRvdyh0aGlzLCJmYWxsYmFja0ZvbnREaWN0IixlKX19Y2xhc3MgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6aX09ZTt0aGlzLmluZGljZXM9dC5nZXRBcnJheSgiSSIpO3RoaXMuaGFzSW5kaWNlcz1BcnJheS5pc0FycmF5KHRoaXMuaW5kaWNlcykmJnRoaXMuaW5kaWNlcy5sZW5ndGg+MDt0aGlzLmRhdGEub3B0aW9ucz1bXTtjb25zdCBhPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6Ik9wdCJ9KTtpZihBcnJheS5pc0FycmF5KGEpKWZvcihsZXQgZT0wLHQ9YS5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1pLmZldGNoSWZSZWYoYVtlXSkscj1BcnJheS5pc0FycmF5KHQpO3RoaXMuZGF0YS5vcHRpb25zW2VdPXtleHBvcnRWYWx1ZTp0aGlzLl9kZWNvZGVGb3JtVmFsdWUocj9pLmZldGNoSWZSZWYodFswXSk6dCksZGlzcGxheVZhbHVlOnRoaXMuX2RlY29kZUZvcm1WYWx1ZShyP2kuZmV0Y2hJZlJlZih0WzFdKTp0KX19aWYodGhpcy5oYXNJbmRpY2VzKXt0aGlzLmRhdGEuZmllbGRWYWx1ZT1bXTtjb25zdCBlPXRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aDtmb3IoY29uc3QgdCBvZiB0aGlzLmluZGljZXMpTnVtYmVyLmlzSW50ZWdlcih0KSYmdD49MCYmdDxlJiZ0aGlzLmRhdGEuZmllbGRWYWx1ZS5wdXNoKHRoaXMuZGF0YS5vcHRpb25zW3RdLmV4cG9ydFZhbHVlKX1lbHNlInN0cmluZyI9PXR5cGVvZiB0aGlzLmRhdGEuZmllbGRWYWx1ZT90aGlzLmRhdGEuZmllbGRWYWx1ZT1bdGhpcy5kYXRhLmZpZWxkVmFsdWVdOnRoaXMuZGF0YS5maWVsZFZhbHVlfHwodGhpcy5kYXRhLmZpZWxkVmFsdWU9W10pO3RoaXMuZGF0YS5jb21ibz10aGlzLmhhc0ZpZWxkRmxhZyhjQSk7dGhpcy5kYXRhLm11bHRpU2VsZWN0PXRoaXMuaGFzRmllbGRGbGFnKGhBKTt0aGlzLl9oYXNUZXh0PSEwfWdldEZpZWxkT2JqZWN0KCl7Y29uc3QgZT10aGlzLmRhdGEuY29tYm8/ImNvbWJvYm94IjoibGlzdGJveCIsdD10aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGg+MD90aGlzLmRhdGEuZmllbGRWYWx1ZVswXTpudWxsO3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dCxkZWZhdWx0VmFsdWU6dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsbnVtSXRlbXM6dGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoLG11bHRpcGxlU2VsZWN0aW9uOnRoaXMuZGF0YS5tdWx0aVNlbGVjdCxoaWRkZW46dGhpcy5kYXRhLmhpZGRlbixhY3Rpb25zOnRoaXMuZGF0YS5hY3Rpb25zLGl0ZW1zOnRoaXMuZGF0YS5vcHRpb25zLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCxzdHJva2VDb2xvcjp0aGlzLmRhdGEuYm9yZGVyQ29sb3IsZmlsbENvbG9yOnRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbix0eXBlOmV9fWFtZW5kU2F2ZWREaWN0KGUsdCl7aWYoIXRoaXMuaGFzSW5kaWNlcylyZXR1cm47bGV0IGk9ZT8uZ2V0KHRoaXMuZGF0YS5pZCk/LnZhbHVlO0FycmF5LmlzQXJyYXkoaSl8fChpPVtpXSk7Y29uc3QgYT1bXSx7b3B0aW9uczpyfT10aGlzLmRhdGE7Zm9yKGxldCBlPTAsdD0wLHM9ci5sZW5ndGg7ZTxzO2UrKylpZihyW2VdLmV4cG9ydFZhbHVlPT09aVt0XSl7YS5wdXNoKGUpO3QrPTF9dC5zZXQoIkkiLGEpfWFzeW5jIF9nZXRBcHBlYXJhbmNlKGUsdCxpLGEpe2lmKHRoaXMuZGF0YS5jb21ibylyZXR1cm4gc3VwZXIuX2dldEFwcGVhcmFuY2UoZSx0LGksYSk7bGV0IHIsbjtjb25zdCBvPWE/LmdldCh0aGlzLmRhdGEuaWQpO2lmKG8pe249by5yb3RhdGlvbjtyPW8udmFsdWV9aWYodm9pZCAwPT09biYmdm9pZCAwPT09ciYmIXRoaXMuX25lZWRBcHBlYXJhbmNlcylyZXR1cm4gbnVsbDt2b2lkIDA9PT1yP3I9dGhpcy5kYXRhLmZpZWxkVmFsdWU6QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKTtsZXQgZz10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxjPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdOzkwIT09biYmMjcwIT09bnx8KFtjLGddPVtnLGNdKTtjb25zdCBDPXRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aCxoPVtdO2ZvcihsZXQgZT0wO2U8QztlKyspe2NvbnN0e2V4cG9ydFZhbHVlOnR9PXRoaXMuZGF0YS5vcHRpb25zW2VdO3IuaW5jbHVkZXModCkmJmgucHVzaChlKX10aGlzLl9kZWZhdWx0QXBwZWFyYW5jZXx8KHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9cGFyc2VEZWZhdWx0QXBwZWFyYW5jZSh0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0iL0hlbHZldGljYSAwIFRmIDAgZyIpKTtjb25zdCBsPWF3YWl0IFdpZGdldEFubm90YXRpb24uX2dldEZvbnREYXRhKGUsdCx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcyk7bGV0IFEse2ZvbnRTaXplOkV9PXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7aWYoRSlRPXRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlO2Vsc2V7Y29uc3QgZT0oZy0xKS9DO2xldCB0LGk9LTE7Zm9yKGNvbnN0e2Rpc3BsYXlWYWx1ZTplfW9mIHRoaXMuZGF0YS5vcHRpb25zKXtjb25zdCBhPXRoaXMuX2dldFRleHRXaWR0aChlLGwpO2lmKGE+aSl7aT1hO3Q9ZX19W1EsRV09dGhpcy5fY29tcHV0ZUZvbnRTaXplKGUsYy00LHQsbCwtMSl9Y29uc3QgdT1FKnMsZD0odS1FKS8yLGY9TWF0aC5mbG9vcihnL3UpO2xldCBwPTA7aWYoaC5sZW5ndGg+MCl7Y29uc3QgZT1NYXRoLm1pbiguLi5oKSx0PU1hdGgubWF4KC4uLmgpO3A9TWF0aC5tYXgoMCx0LWYrMSk7cD5lJiYocD1lKX1jb25zdCBtPU1hdGgubWluKHArZisxLEMpLHk9WyIvVHggQk1DIHEiLGAxIDEgJHtjfSAke2d9IHJlIFcgbmBdO2lmKGgubGVuZ3RoKXt5LnB1c2goIjAuNjAwMDA2IDAuNzU2ODY2IDAuODU0OTA0IHJnIik7Zm9yKGNvbnN0IGUgb2YgaClwPD1lJiZlPG0mJnkucHVzaChgMSAke2ctKGUtcCsxKSp1fSAke2N9ICR7dX0gcmUgZmApfXkucHVzaCgiQlQiLFEsYDEgMCAwIDEgMCAke2d9IFRtYCk7Y29uc3Qgdz17c2hpZnQ6MH07Zm9yKGxldCBlPXA7ZTxtO2UrKyl7Y29uc3R7ZGlzcGxheVZhbHVlOnR9PXRoaXMuZGF0YS5vcHRpb25zW2VdLGk9ZT09PXA/ZDowO3kucHVzaCh0aGlzLl9yZW5kZXJUZXh0KHQsbCxFLGMsMCx3LDIsLXUraSkpfXkucHVzaCgiRVQgUSBFTUMiKTtyZXR1cm4geS5qb2luKCJcbiIpfX1jbGFzcyBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuZmllbGRWYWx1ZT1udWxsO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO3RoaXMuZGF0YS5ub0hUTUw9IXRoaXMuZGF0YS5oYXNPd25DYW52YXN9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm57aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOm51bGwscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHR5cGU6InNpZ25hdHVyZSJ9fX1jbGFzcyBUZXh0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLm5vUm90YXRlPSEwO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO3RoaXMuZGF0YS5ub0hUTUw9ITE7Y29uc3R7ZGljdDp0fT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1OO2lmKHRoaXMuZGF0YS5oYXNBcHBlYXJhbmNlKXRoaXMuZGF0YS5uYW1lPSJOb0ljb24iO2Vsc2V7dGhpcy5kYXRhLnJlY3RbMV09dGhpcy5kYXRhLnJlY3RbM10tMjI7dGhpcy5kYXRhLnJlY3RbMl09dGhpcy5kYXRhLnJlY3RbMF0rMjI7dGhpcy5kYXRhLm5hbWU9dC5oYXMoIk5hbWUiKT90LmdldCgiTmFtZSIpLm5hbWU6Ik5vdGUifWlmKHQuaGFzKCJTdGF0ZSIpKXt0aGlzLmRhdGEuc3RhdGU9dC5nZXQoIlN0YXRlIil8fG51bGw7dGhpcy5kYXRhLnN0YXRlTW9kZWw9dC5nZXQoIlN0YXRlTW9kZWwiKXx8bnVsbH1lbHNle3RoaXMuZGF0YS5zdGF0ZT1udWxsO3RoaXMuZGF0YS5zdGF0ZU1vZGVsPW51bGx9fX1jbGFzcyBMaW5rQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LGFubm90YXRpb25HbG9iYWxzOml9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPUc7dGhpcy5kYXRhLm5vSFRNTD0hMTtjb25zdCBhPWdldFF1YWRQb2ludHModCx0aGlzLnJlY3RhbmdsZSk7YSYmKHRoaXMuZGF0YS5xdWFkUG9pbnRzPWEpO3RoaXMuZGF0YS5ib3JkZXJDb2xvcnx8PXRoaXMuZGF0YS5jb2xvcjtDYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OnQscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmkuYmFzZVVybCxkb2NBdHRhY2htZW50czppLmF0dGFjaG1lbnRzfSl9fWNsYXNzIFBvcHVwQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0fT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1qO3RoaXMuZGF0YS5ub0hUTUw9ITE7dGhpcy5kYXRhLnJlY3RbMF0hPT10aGlzLmRhdGEucmVjdFsyXSYmdGhpcy5kYXRhLnJlY3RbMV0hPT10aGlzLmRhdGEucmVjdFszXXx8KHRoaXMuZGF0YS5yZWN0PW51bGwpO2xldCBpPXQuZ2V0KCJQYXJlbnQiKTtpZighaSl7d2FybigiUG9wdXAgYW5ub3RhdGlvbiBoYXMgYSBtaXNzaW5nIG9yIGludmFsaWQgcGFyZW50IGFubm90YXRpb24uIik7cmV0dXJufXRoaXMuZGF0YS5wYXJlbnRSZWN0PWxvb2t1cE5vcm1hbFJlY3QoaS5nZXRBcnJheSgiUmVjdCIpLG51bGwpO2lzTmFtZShpLmdldCgiUlQiKSxWKSYmKGk9aS5nZXQoIklSVCIpKTtpZihpLmhhcygiTSIpKXt0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUoaS5nZXQoIk0iKSk7dGhpcy5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9dGhpcy5tb2RpZmljYXRpb25EYXRlfWVsc2UgdGhpcy5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbDtpZihpLmhhcygiQyIpKXt0aGlzLnNldENvbG9yKGkuZ2V0QXJyYXkoIkMiKSk7dGhpcy5kYXRhLmNvbG9yPXRoaXMuY29sb3J9ZWxzZSB0aGlzLmRhdGEuY29sb3I9bnVsbDtpZighdGhpcy52aWV3YWJsZSl7Y29uc3QgZT1pLmdldCgiRiIpO3RoaXMuX2lzVmlld2FibGUoZSkmJnRoaXMuc2V0RmxhZ3MoZSl9dGhpcy5zZXRUaXRsZShpLmdldCgiVCIpKTt0aGlzLmRhdGEudGl0bGVPYmo9dGhpcy5fdGl0bGU7dGhpcy5zZXRDb250ZW50cyhpLmdldCgiQ29udGVudHMiKSk7dGhpcy5kYXRhLmNvbnRlbnRzT2JqPXRoaXMuX2NvbnRlbnRzO2kuaGFzKCJSQyIpJiYodGhpcy5kYXRhLnJpY2hUZXh0PVhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwoaS5nZXQoIlJDIikpKTt0aGlzLmRhdGEub3Blbj0hIXQuZ2V0KCJPcGVuIil9fWNsYXNzIEZyZWVUZXh0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7dGhpcy5kYXRhLmlzRWRpdGFibGU9IXRoaXMuZGF0YS5ub0hUTUw7dGhpcy5kYXRhLm5vSFRNTD0hMTtjb25zdHtldmFsdWF0b3JPcHRpb25zOnQseHJlZjppfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT14O3RoaXMuc2V0RGVmYXVsdEFwcGVhcmFuY2UoZSk7dGhpcy5faGFzQXBwZWFyYW5jZT0hIXRoaXMuYXBwZWFyYW5jZTtpZih0aGlzLl9oYXNBcHBlYXJhbmNlKXtjb25zdHtmb250Q29sb3I6ZSxmb250U2l6ZTphfT1mdW5jdGlvbiBwYXJzZUFwcGVhcmFuY2VTdHJlYW0oZSx0LGkpe3JldHVybiBuZXcgQXBwZWFyYW5jZVN0cmVhbUV2YWx1YXRvcihlLHQsaSkucGFyc2UoKX0odGhpcy5hcHBlYXJhbmNlLHQsaSk7dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250Q29sb3I9ZTt0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRTaXplPWF8fDEwfWVsc2V7dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250U2l6ZXx8PTEwO2NvbnN0e2ZvbnRDb2xvcjp0LGZvbnRTaXplOmF9PXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7aWYodGhpcy5fY29udGVudHMuc3RyKXt0aGlzLmRhdGEudGV4dENvbnRlbnQ9dGhpcy5fY29udGVudHMuc3RyLnNwbGl0KC9cclxuP3xcbi8pLm1hcCgoZT0+ZS50cmltRW5kKCkpKTtjb25zdHtjb29yZHM6ZSxiYm94OnQsbWF0cml4Oml9PUZha2VVbmljb2RlRm9udC5nZXRGaXJzdFBvc2l0aW9uSW5mbyh0aGlzLnJlY3RhbmdsZSx0aGlzLnJvdGF0aW9uLGEpO3RoaXMuZGF0YS50ZXh0UG9zaXRpb249dGhpcy5fdHJhbnNmb3JtUG9pbnQoZSx0LGkpfWlmKHRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKXtjb25zdCByPWUuZGljdC5nZXQoIkNBIikscz1uZXcgRmFrZVVuaWNvZGVGb250KGksInNhbnMtc2VyaWYiKTt0aGlzLmFwcGVhcmFuY2U9cy5jcmVhdGVBcHBlYXJhbmNlKHRoaXMuX2NvbnRlbnRzLnN0cix0aGlzLnJlY3RhbmdsZSx0aGlzLnJvdGF0aW9uLGEsdCxyKTt0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlKX1lbHNlIHdhcm4oIkZyZWVUZXh0QW5ub3RhdGlvbjogT2Zmc2NyZWVuQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQsIGFubm90YXRpb24gbWF5IG5vdCByZW5kZXIgY29ycmVjdGx5LiIpfX1nZXQgaGFzVGV4dENvbnRlbnQoKXtyZXR1cm4gdGhpcy5faGFzQXBwZWFyYW5jZX1zdGF0aWMgY3JlYXRlTmV3RGljdChlLHQse2FwUmVmOmksYXA6YX0pe2NvbnN0e2NvbG9yOnIsZm9udFNpemU6cyxvbGRBbm5vdGF0aW9uOm4scmVjdDpvLHJvdGF0aW9uOmcsdXNlcjpjLHZhbHVlOkN9PWUsaD1ufHxuZXcgRGljdCh0KTtoLnNldCgiVHlwZSIsTmFtZS5nZXQoIkFubm90IikpO2guc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiRnJlZVRleHQiKSk7aWYobil7aC5zZXQoIk0iLGBEOiR7Z2V0TW9kaWZpY2F0aW9uRGF0ZSgpfWApO2guZGVsZXRlKCJSQyIpfWVsc2UgaC5zZXQoIkNyZWF0aW9uRGF0ZSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7aC5zZXQoIlJlY3QiLG8pO2NvbnN0IGw9YC9IZWx2ICR7c30gVGYgJHtnZXRQZGZDb2xvcihyLCEwKX1gO2guc2V0KCJEQSIsbCk7aC5zZXQoIkNvbnRlbnRzIixzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKEMpKTtoLnNldCgiRiIsNCk7aC5zZXQoIkJvcmRlciIsWzAsMCwwXSk7aC5zZXQoIlJvdGF0ZSIsZyk7YyYmaC5zZXQoIlQiLHN0cmluZ1RvQXNjaWlPclVURjE2QkUoYykpO2lmKGl8fGEpe2NvbnN0IGU9bmV3IERpY3QodCk7aC5zZXQoIkFQIixlKTtpP2Uuc2V0KCJOIixpKTplLnNldCgiTiIsYSl9cmV0dXJuIGh9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0oZSx0LGkpe2NvbnN0e2Jhc2VGb250UmVmOmEsZXZhbHVhdG9yOnIsdGFzazpufT1pLHtjb2xvcjpvLGZvbnRTaXplOmcscmVjdDpjLHJvdGF0aW9uOkMsdmFsdWU6aH09ZSxsPW5ldyBEaWN0KHQpLFE9bmV3IERpY3QodCk7aWYoYSlRLnNldCgiSGVsdiIsYSk7ZWxzZXtjb25zdCBlPW5ldyBEaWN0KHQpO2Uuc2V0KCJCYXNlRm9udCIsTmFtZS5nZXQoIkhlbHZldGljYSIpKTtlLnNldCgiVHlwZSIsTmFtZS5nZXQoIkZvbnQiKSk7ZS5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJUeXBlMSIpKTtlLnNldCgiRW5jb2RpbmciLE5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSk7US5zZXQoIkhlbHYiLGUpfWwuc2V0KCJGb250IixRKTtjb25zdCBFPWF3YWl0IFdpZGdldEFubm90YXRpb24uX2dldEZvbnREYXRhKHIsbix7Zm9udE5hbWU6IkhlbHYiLGZvbnRTaXplOmd9LGwpLFt1LGQsZixwXT1jO2xldCBtPWYtdSx5PXAtZDtDJTE4MCE9MCYmKFttLHldPVt5LG1dKTtjb25zdCB3PWguc3BsaXQoIlxuIiksYj1nLzFlMztsZXQgRD0tMS8wO2NvbnN0IFM9W107Zm9yKGxldCBlIG9mIHcpe2NvbnN0IHQ9RS5lbmNvZGVTdHJpbmcoZSk7aWYodC5sZW5ndGg+MSlyZXR1cm4gbnVsbDtlPXQuam9pbigiIik7Uy5wdXNoKGUpO2xldCBpPTA7Y29uc3QgYT1FLmNoYXJzVG9HbHlwaHMoZSk7Zm9yKGNvbnN0IGUgb2YgYSlpKz1lLndpZHRoKmI7RD1NYXRoLm1heChELGkpfWxldCBrPTE7RD5tJiYoaz1tL0QpO2xldCBSPTE7Y29uc3QgTj1zKmcsRz0xKmcseD1OKncubGVuZ3RoO3g+eSYmKFI9eS94KTtjb25zdCBVPWcqTWF0aC5taW4oayxSKTtsZXQgTSxMLEg7c3dpdGNoKEMpe2Nhc2UgMDpIPVsxLDAsMCwxXTtMPVtjWzBdLGNbMV0sbSx5XTtNPVtjWzBdLGNbM10tR107YnJlYWs7Y2FzZSA5MDpIPVswLDEsLTEsMF07TD1bY1sxXSwtY1syXSxtLHldO009W2NbMV0sLWNbMF0tR107YnJlYWs7Y2FzZSAxODA6SD1bLTEsMCwwLC0xXTtMPVstY1syXSwtY1szXSxtLHldO009Wy1jWzJdLC1jWzFdLUddO2JyZWFrO2Nhc2UgMjcwOkg9WzAsLTEsMSwwXTtMPVstY1szXSxjWzBdLG0seV07TT1bLWNbM10sY1syXS1HXX1jb25zdCBKPVsicSIsYCR7SC5qb2luKCIgIil9IDAgMCBjbWAsYCR7TC5qb2luKCIgIil9IHJlIFcgbmAsIkJUIixgJHtnZXRQZGZDb2xvcihvLCEwKX1gLGAwIFRjIC9IZWx2ICR7bnVtYmVyVG9TdHJpbmcoVSl9IFRmYF07Si5wdXNoKGAke00uam9pbigiICIpfSBUZCAoJHtlc2NhcGVTdHJpbmcoU1swXSl9KSBUamApO2NvbnN0IHY9bnVtYmVyVG9TdHJpbmcoTik7Zm9yKGxldCBlPTEsdD1TLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PVNbZV07Si5wdXNoKGAwIC0ke3Z9IFRkICgke2VzY2FwZVN0cmluZyh0KX0pIFRqYCl9Si5wdXNoKCJFVCIsIlEiKTtjb25zdCBZPUouam9pbigiXG4iKSxUPW5ldyBEaWN0KHQpO1Quc2V0KCJGb3JtVHlwZSIsMSk7VC5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJGb3JtIikpO1Quc2V0KCJUeXBlIixOYW1lLmdldCgiWE9iamVjdCIpKTtULnNldCgiQkJveCIsYyk7VC5zZXQoIlJlc291cmNlcyIsbCk7VC5zZXQoIk1hdHJpeCIsWzEsMCwwLDEsLWNbMF0sLWNbMV1dKTtjb25zdCBLPW5ldyBTdHJpbmdTdHJlYW0oWSk7Sy5kaWN0PVQ7cmV0dXJuIEt9fWNsYXNzIExpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjppfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1VO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO3RoaXMuZGF0YS5ub0hUTUw9ITE7Y29uc3QgYT1sb29rdXBSZWN0KHQuZ2V0QXJyYXkoIkwiKSxbMCwwLDAsMF0pO3RoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXM9VXRpbC5ub3JtYWxpemVSZWN0KGEpO3RoaXMuc2V0TGluZUVuZGluZ3ModC5nZXRBcnJheSgiTEUiKSk7dGhpcy5kYXRhLmxpbmVFbmRpbmdzPXRoaXMubGluZUVuZGluZ3M7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxyPXQuZ2V0KCJDQSIpLHM9Z2V0UmdiQ29sb3IodC5nZXRBcnJheSgiSUMiKSxudWxsKSxuPXM/Z2V0UGRmQ29sb3JBcnJheShzKTpudWxsLG89bj9yOm51bGwsZz10aGlzLmJvcmRlclN0eWxlLndpZHRofHwxLGM9MipnLEM9W3RoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMF0tYyx0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzFdLWMsdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlc1syXStjLHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbM10rY107VXRpbC5pbnRlcnNlY3QodGhpcy5yZWN0YW5nbGUsQyl8fCh0aGlzLnJlY3RhbmdsZT1DKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjppLGV4dHJhOmAke2d9IHdgLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOm4sc3Ryb2tlQWxwaGE6cixmaWxsQWxwaGE6byxwb2ludHNDYWxsYmFjazooZSx0KT0+e2UucHVzaChgJHthWzBdfSAke2FbMV19IG1gLGAke2FbMl19ICR7YVszXX0gbGAsIlMiKTtyZXR1cm5bdFswXS1nLHRbMl0rZyx0WzddLWcsdFszXStnXX19KX19fWNsYXNzIFNxdWFyZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOml9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPU07dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7dGhpcy5kYXRhLm5vSFRNTD0hMTtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKTpbMCwwLDBdLGE9dC5nZXQoIkNBIikscj1nZXRSZ2JDb2xvcih0LmdldEFycmF5KCJJQyIpLG51bGwpLHM9cj9nZXRQZGZDb2xvckFycmF5KHIpOm51bGwsbj1zP2E6bnVsbDtpZigwPT09dGhpcy5ib3JkZXJTdHlsZS53aWR0aCYmIXMpcmV0dXJuO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmksZXh0cmE6YCR7dGhpcy5ib3JkZXJTdHlsZS53aWR0aH0gd2Asc3Ryb2tlQ29sb3I6ZSxmaWxsQ29sb3I6cyxzdHJva2VBbHBoYTphLGZpbGxBbHBoYTpuLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Y29uc3QgaT10WzRdK3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixhPXRbNV0rdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLHI9dFs2XS10WzRdLXRoaXMuYm9yZGVyU3R5bGUud2lkdGgsbj10WzNdLXRbN10tdGhpcy5ib3JkZXJTdHlsZS53aWR0aDtlLnB1c2goYCR7aX0gJHthfSAke3J9ICR7bn0gcmVgKTtzP2UucHVzaCgiQiIpOmUucHVzaCgiUyIpO3JldHVyblt0WzBdLHRbMl0sdFs3XSx0WzNdXX19KX19fWNsYXNzIENpcmNsZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOml9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPUw7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxhPXQuZ2V0KCJDQSIpLHI9Z2V0UmdiQ29sb3IodC5nZXRBcnJheSgiSUMiKSxudWxsKSxzPXI/Z2V0UGRmQ29sb3JBcnJheShyKTpudWxsLG49cz9hOm51bGw7aWYoMD09PXRoaXMuYm9yZGVyU3R5bGUud2lkdGgmJiFzKXJldHVybjtjb25zdCBvPTQvMypNYXRoLnRhbihNYXRoLlBJLzgpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmksZXh0cmE6YCR7dGhpcy5ib3JkZXJTdHlsZS53aWR0aH0gd2Asc3Ryb2tlQ29sb3I6ZSxmaWxsQ29sb3I6cyxzdHJva2VBbHBoYTphLGZpbGxBbHBoYTpuLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Y29uc3QgaT10WzBdK3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixhPXRbMV0tdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLHI9dFs2XS10aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsbj10WzddK3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixnPWkrKHItaSkvMixjPWErKG4tYSkvMixDPShyLWkpLzIqbyxoPShuLWEpLzIqbztlLnB1c2goYCR7Z30gJHtufSBtYCxgJHtnK0N9ICR7bn0gJHtyfSAke2MraH0gJHtyfSAke2N9IGNgLGAke3J9ICR7Yy1ofSAke2crQ30gJHthfSAke2d9ICR7YX0gY2AsYCR7Zy1DfSAke2F9ICR7aX0gJHtjLWh9ICR7aX0gJHtjfSBjYCxgJHtpfSAke2MraH0gJHtnLUN9ICR7bn0gJHtnfSAke259IGNgLCJoIik7cz9lLnB1c2goIkIiKTplLnB1c2goIlMiKTtyZXR1cm5bdFswXSx0WzJdLHRbN10sdFszXV19fSl9fX1jbGFzcyBQb2x5bGluZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOml9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPUo7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7dGhpcy5kYXRhLm5vSFRNTD0hMTt0aGlzLmRhdGEudmVydGljZXM9bnVsbDtpZighKHRoaXMgaW5zdGFuY2VvZiBQb2x5Z29uQW5ub3RhdGlvbikpe3RoaXMuc2V0TGluZUVuZGluZ3ModC5nZXRBcnJheSgiTEUiKSk7dGhpcy5kYXRhLmxpbmVFbmRpbmdzPXRoaXMubGluZUVuZGluZ3N9Y29uc3QgYT10LmdldEFycmF5KCJWZXJ0aWNlcyIpO2lmKCFpc051bWJlckFycmF5KGEsbnVsbCkpcmV0dXJuO2NvbnN0IHI9dGhpcy5kYXRhLnZlcnRpY2VzPUZsb2F0MzJBcnJheS5mcm9tKGEpO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0sYT10LmdldCgiQ0EiKSxzPXRoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDEsbj0yKnMsbz1bMS8wLDEvMCwtMS8wLC0xLzBdO2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrPTIpe29bMF09TWF0aC5taW4ob1swXSxyW2VdLW4pO29bMV09TWF0aC5taW4ob1sxXSxyW2UrMV0tbik7b1syXT1NYXRoLm1heChvWzJdLHJbZV0rbik7b1szXT1NYXRoLm1heChvWzNdLHJbZSsxXStuKX1VdGlsLmludGVyc2VjdCh0aGlzLnJlY3RhbmdsZSxvKXx8KHRoaXMucmVjdGFuZ2xlPW8pO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmksZXh0cmE6YCR7c30gd2Asc3Ryb2tlQ29sb3I6ZSxzdHJva2VBbHBoYTphLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Zm9yKGxldCB0PTAsaT1yLmxlbmd0aDt0PGk7dCs9MillLnB1c2goYCR7clt0XX0gJHtyW3QrMV19ICR7MD09PXQ/Im0iOiJsIn1gKTtlLnB1c2goIlMiKTtyZXR1cm5bdFswXSx0WzJdLHRbN10sdFszXV19fSl9fX1jbGFzcyBQb2x5Z29uQW5ub3RhdGlvbiBleHRlbmRzIFBvbHlsaW5lQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9SH19Y2xhc3MgQ2FyZXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9T319Y2xhc3MgSW5rQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7dGhpcy5kYXRhLm5vSFRNTD0hMTtjb25zdHtkaWN0OnQseHJlZjppfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1XO3RoaXMuZGF0YS5pbmtMaXN0cz1bXTt0aGlzLmRhdGEuaXNFZGl0YWJsZT0hdGhpcy5kYXRhLm5vSFRNTCYmIklua0hpZ2hsaWdodCI9PT10aGlzLmRhdGEuaXQ7dGhpcy5kYXRhLm5vSFRNTD0hMTt0aGlzLmRhdGEub3BhY2l0eT10LmdldCgiQ0EiKXx8MTtjb25zdCBhPXQuZ2V0QXJyYXkoIklua0xpc3QiKTtpZihBcnJheS5pc0FycmF5KGEpKXtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDsrK2Upe2lmKCFBcnJheS5pc0FycmF5KGFbZV0pKWNvbnRpbnVlO2NvbnN0IHQ9bmV3IEZsb2F0MzJBcnJheShhW2VdLmxlbmd0aCk7dGhpcy5kYXRhLmlua0xpc3RzLnB1c2godCk7Zm9yKGxldCByPTAscz1hW2VdLmxlbmd0aDtyPHM7cis9Mil7Y29uc3Qgcz1pLmZldGNoSWZSZWYoYVtlXVtyXSksbj1pLmZldGNoSWZSZWYoYVtlXVtyKzFdKTtpZigibnVtYmVyIj09dHlwZW9mIHMmJiJudW1iZXIiPT10eXBlb2Ygbil7dFtyXT1zO3RbcisxXT1ufX19aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxhPXQuZ2V0KCJDQSIpLHI9dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MSxzPTIqcixuPVsxLzAsMS8wLC0xLzAsLTEvMF07Zm9yKGNvbnN0IGUgb2YgdGhpcy5kYXRhLmlua0xpc3RzKWZvcihsZXQgdD0wLGk9ZS5sZW5ndGg7dDxpO3QrPTIpe25bMF09TWF0aC5taW4oblswXSxlW3RdLXMpO25bMV09TWF0aC5taW4oblsxXSxlW3QrMV0tcyk7blsyXT1NYXRoLm1heChuWzJdLGVbdF0rcyk7blszXT1NYXRoLm1heChuWzNdLGVbdCsxXStzKX1VdGlsLmludGVyc2VjdCh0aGlzLnJlY3RhbmdsZSxuKXx8KHRoaXMucmVjdGFuZ2xlPW4pO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmksZXh0cmE6YCR7cn0gd2Asc3Ryb2tlQ29sb3I6ZSxzdHJva2VBbHBoYTphLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Zm9yKGNvbnN0IHQgb2YgdGhpcy5kYXRhLmlua0xpc3RzKXtmb3IobGV0IGk9MCxhPXQubGVuZ3RoO2k8YTtpKz0yKWUucHVzaChgJHt0W2ldfSAke3RbaSsxXX0gJHswPT09aT8ibSI6ImwifWApO2UucHVzaCgiUyIpfXJldHVyblt0WzBdLHRbMl0sdFs3XSx0WzNdXX19KX19fXN0YXRpYyBjcmVhdGVOZXdEaWN0KGUsdCx7YXBSZWY6aSxhcDphfSl7Y29uc3R7Y29sb3I6cixvcGFjaXR5OnMscGF0aHM6bixvdXRsaW5lczpvLHJlY3Q6Zyxyb3RhdGlvbjpjLHRoaWNrbmVzczpDfT1lLGg9bmV3IERpY3QodCk7aC5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJBbm5vdCIpKTtoLnNldCgiU3VidHlwZSIsTmFtZS5nZXQoIkluayIpKTtoLnNldCgiQ3JlYXRpb25EYXRlIixgRDoke2dldE1vZGlmaWNhdGlvbkRhdGUoKX1gKTtoLnNldCgiUmVjdCIsZyk7aC5zZXQoIklua0xpc3QiLG8/LnBvaW50c3x8bi5tYXAoKGU9PmUucG9pbnRzKSkpO2guc2V0KCJGIiw0KTtoLnNldCgiUm90YXRlIixjKTtvJiZoLnNldCgiSVQiLE5hbWUuZ2V0KCJJbmtIaWdobGlnaHQiKSk7Y29uc3QgbD1uZXcgRGljdCh0KTtoLnNldCgiQlMiLGwpO2wuc2V0KCJXIixDKTtoLnNldCgiQyIsQXJyYXkuZnJvbShyLChlPT5lLzI1NSkpKTtoLnNldCgiQ0EiLHMpO2NvbnN0IFE9bmV3IERpY3QodCk7aC5zZXQoIkFQIixRKTtpP1Euc2V0KCJOIixpKTpRLnNldCgiTiIsYSk7cmV0dXJuIGh9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0oZSx0LGkpe2lmKGUub3V0bGluZXMpcmV0dXJuIHRoaXMuY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbUZvckhpZ2hsaWdodChlLHQsaSk7Y29uc3R7Y29sb3I6YSxyZWN0OnIscGF0aHM6cyx0aGlja25lc3M6bixvcGFjaXR5Om99PWUsZz1bYCR7bn0gdyAxIEogMSBqYCxgJHtnZXRQZGZDb2xvcihhLCExKX1gXTsxIT09byYmZy5wdXNoKCIvUjAgZ3MiKTtjb25zdCBjPVtdO2Zvcihjb25zdHtiZXppZXI6ZX1vZiBzKXtjLmxlbmd0aD0wO2MucHVzaChgJHtudW1iZXJUb1N0cmluZyhlWzBdKX0gJHtudW1iZXJUb1N0cmluZyhlWzFdKX0gbWApO2lmKDI9PT1lLmxlbmd0aCljLnB1c2goYCR7bnVtYmVyVG9TdHJpbmcoZVswXSl9ICR7bnVtYmVyVG9TdHJpbmcoZVsxXSl9IGwgU2ApO2Vsc2V7Zm9yKGxldCB0PTIsaT1lLmxlbmd0aDt0PGk7dCs9Nil7Y29uc3QgaT1lLnNsaWNlKHQsdCs2KS5tYXAobnVtYmVyVG9TdHJpbmcpLmpvaW4oIiAiKTtjLnB1c2goYCR7aX0gY2ApfWMucHVzaCgiUyIpfWcucHVzaChjLmpvaW4oIlxuIikpfWNvbnN0IEM9Zy5qb2luKCJcbiIpLGg9bmV3IERpY3QodCk7aC5zZXQoIkZvcm1UeXBlIiwxKTtoLnNldCgiU3VidHlwZSIsTmFtZS5nZXQoIkZvcm0iKSk7aC5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJYT2JqZWN0IikpO2guc2V0KCJCQm94IixyKTtoLnNldCgiTGVuZ3RoIixDLmxlbmd0aCk7aWYoMSE9PW8pe2NvbnN0IGU9bmV3IERpY3QodCksaT1uZXcgRGljdCh0KSxhPW5ldyBEaWN0KHQpO2Euc2V0KCJDQSIsbyk7YS5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJFeHRHU3RhdGUiKSk7aS5zZXQoIlIwIixhKTtlLnNldCgiRXh0R1N0YXRlIixpKTtoLnNldCgiUmVzb3VyY2VzIixlKX1jb25zdCBsPW5ldyBTdHJpbmdTdHJlYW0oQyk7bC5kaWN0PWg7cmV0dXJuIGx9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW1Gb3JIaWdobGlnaHQoZSx0LGkpe2NvbnN0e2NvbG9yOmEscmVjdDpyLG91dGxpbmVzOntvdXRsaW5lOnN9LG9wYWNpdHk6bn09ZSxvPVtgJHtnZXRQZGZDb2xvcihhLCEwKX1gLCIvUjAgZ3MiXTtvLnB1c2goYCR7bnVtYmVyVG9TdHJpbmcoc1s0XSl9ICR7bnVtYmVyVG9TdHJpbmcoc1s1XSl9IG1gKTtmb3IobGV0IGU9Nix0PXMubGVuZ3RoO2U8dDtlKz02KWlmKGlzTmFOKHNbZV0pfHxudWxsPT09c1tlXSlvLnB1c2goYCR7bnVtYmVyVG9TdHJpbmcoc1tlKzRdKX0gJHtudW1iZXJUb1N0cmluZyhzW2UrNV0pfSBsYCk7ZWxzZXtjb25zdCB0PXMuc2xpY2UoZSxlKzYpLm1hcChudW1iZXJUb1N0cmluZykuam9pbigiICIpO28ucHVzaChgJHt0fSBjYCl9by5wdXNoKCJoIGYiKTtjb25zdCBnPW8uam9pbigiXG4iKSxjPW5ldyBEaWN0KHQpO2Muc2V0KCJGb3JtVHlwZSIsMSk7Yy5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJGb3JtIikpO2Muc2V0KCJUeXBlIixOYW1lLmdldCgiWE9iamVjdCIpKTtjLnNldCgiQkJveCIscik7Yy5zZXQoIkxlbmd0aCIsZy5sZW5ndGgpO2NvbnN0IEM9bmV3IERpY3QodCksaD1uZXcgRGljdCh0KTtDLnNldCgiRXh0R1N0YXRlIixoKTtjLnNldCgiUmVzb3VyY2VzIixDKTtjb25zdCBsPW5ldyBEaWN0KHQpO2guc2V0KCJSMCIsbCk7bC5zZXQoIkJNIixOYW1lLmdldCgiTXVsdGlwbHkiKSk7aWYoMSE9PW4pe2wuc2V0KCJjYSIsbik7bC5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJFeHRHU3RhdGUiKSl9Y29uc3QgUT1uZXcgU3RyaW5nU3RyZWFtKGcpO1EuZGljdD1jO3JldHVybiBRfX1jbGFzcyBIaWdobGlnaHRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjppfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT12O3RoaXMuZGF0YS5pc0VkaXRhYmxlPSF0aGlzLmRhdGEubm9IVE1MO3RoaXMuZGF0YS5ub0hUTUw9ITE7dGhpcy5kYXRhLm9wYWNpdHk9dC5nZXQoIkNBIil8fDE7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyh0LG51bGwpKXtjb25zdCBlPXRoaXMuYXBwZWFyYW5jZT8uZGljdC5nZXQoIlJlc291cmNlcyIpO2lmKCF0aGlzLmFwcGVhcmFuY2V8fCFlPy5oYXMoIkV4dEdTdGF0ZSIpKXt0aGlzLmFwcGVhcmFuY2UmJndhcm4oIkhpZ2hsaWdodEFubm90YXRpb24gLSBpZ25vcmluZyBidWlsdC1pbiBhcHBlYXJhbmNlIHN0cmVhbS4iKTtjb25zdCBlPXRoaXMuY29sb3I/Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKTpbMSwxLDBdLGE9dC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6aSxmaWxsQ29sb3I6ZSxibGVuZE1vZGU6Ik11bHRpcGx5IixmaWxsQWxwaGE6YSxwb2ludHNDYWxsYmFjazooZSx0KT0+e2UucHVzaChgJHt0WzBdfSAke3RbMV19IG1gLGAke3RbMl19ICR7dFszXX0gbGAsYCR7dFs2XX0gJHt0WzddfSBsYCxgJHt0WzRdfSAke3RbNV19IGxgLCJmIik7cmV0dXJuW3RbMF0sdFsyXSx0WzddLHRbM11dfX0pfX1lbHNlIHRoaXMuZGF0YS5wb3B1cFJlZj1udWxsfXN0YXRpYyBjcmVhdGVOZXdEaWN0KGUsdCx7YXBSZWY6aSxhcDphfSl7Y29uc3R7Y29sb3I6cixvbGRBbm5vdGF0aW9uOnMsb3BhY2l0eTpuLHJlY3Q6byxyb3RhdGlvbjpnLHVzZXI6YyxxdWFkUG9pbnRzOkN9PWUsaD1zfHxuZXcgRGljdCh0KTtoLnNldCgiVHlwZSIsTmFtZS5nZXQoIkFubm90IikpO2guc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiSGlnaGxpZ2h0IikpO2guc2V0KHM/Ik0iOiJDcmVhdGlvbkRhdGUiLGBEOiR7Z2V0TW9kaWZpY2F0aW9uRGF0ZSgpfWApO2guc2V0KCJDcmVhdGlvbkRhdGUiLGBEOiR7Z2V0TW9kaWZpY2F0aW9uRGF0ZSgpfWApO2guc2V0KCJSZWN0IixvKTtoLnNldCgiRiIsNCk7aC5zZXQoIkJvcmRlciIsWzAsMCwwXSk7aC5zZXQoIlJvdGF0ZSIsZyk7aC5zZXQoIlF1YWRQb2ludHMiLEMpO2guc2V0KCJDIixBcnJheS5mcm9tKHIsKGU9PmUvMjU1KSkpO2guc2V0KCJDQSIsbik7YyYmaC5zZXQoIlQiLHN0cmluZ1RvQXNjaWlPclVURjE2QkUoYykpO2lmKGl8fGEpe2NvbnN0IGU9bmV3IERpY3QodCk7aC5zZXQoIkFQIixlKTtlLnNldCgiTiIsaXx8YSl9cmV0dXJuIGh9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0oZSx0LGkpe2NvbnN0e2NvbG9yOmEscmVjdDpyLG91dGxpbmVzOnMsb3BhY2l0eTpufT1lLG89W2Ake2dldFBkZkNvbG9yKGEsITApfWAsIi9SMCBncyJdLGc9W107Zm9yKGNvbnN0IGUgb2Ygcyl7Zy5sZW5ndGg9MDtnLnB1c2goYCR7bnVtYmVyVG9TdHJpbmcoZVswXSl9ICR7bnVtYmVyVG9TdHJpbmcoZVsxXSl9IG1gKTtmb3IobGV0IHQ9MixpPWUubGVuZ3RoO3Q8aTt0Kz0yKWcucHVzaChgJHtudW1iZXJUb1N0cmluZyhlW3RdKX0gJHtudW1iZXJUb1N0cmluZyhlW3QrMV0pfSBsYCk7Zy5wdXNoKCJoIik7by5wdXNoKGcuam9pbigiXG4iKSl9by5wdXNoKCJmKiIpO2NvbnN0IGM9by5qb2luKCJcbiIpLEM9bmV3IERpY3QodCk7Qy5zZXQoIkZvcm1UeXBlIiwxKTtDLnNldCgiU3VidHlwZSIsTmFtZS5nZXQoIkZvcm0iKSk7Qy5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJYT2JqZWN0IikpO0Muc2V0KCJCQm94IixyKTtDLnNldCgiTGVuZ3RoIixjLmxlbmd0aCk7Y29uc3QgaD1uZXcgRGljdCh0KSxsPW5ldyBEaWN0KHQpO2guc2V0KCJFeHRHU3RhdGUiLGwpO0Muc2V0KCJSZXNvdXJjZXMiLGgpO2NvbnN0IFE9bmV3IERpY3QodCk7bC5zZXQoIlIwIixRKTtRLnNldCgiQk0iLE5hbWUuZ2V0KCJNdWx0aXBseSIpKTtpZigxIT09bil7US5zZXQoImNhIixuKTtRLnNldCgiVHlwZSIsTmFtZS5nZXQoIkV4dEdTdGF0ZSIpKX1jb25zdCBFPW5ldyBTdHJpbmdTdHJlYW0oYyk7RS5kaWN0PUM7cmV0dXJuIEV9fWNsYXNzIFVuZGVybGluZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOml9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPVk7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyh0LG51bGwpKXtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKTpbMCwwLDBdLGE9dC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6aSxleHRyYToiW10gMCBkIDAuNTcxIHciLHN0cm9rZUNvbG9yOmUsc3Ryb2tlQWxwaGE6YSxwb2ludHNDYWxsYmFjazooZSx0KT0+e2UucHVzaChgJHt0WzRdfSAke3RbNV0rMS4zfSBtYCxgJHt0WzZdfSAke3RbN10rMS4zfSBsYCwiUyIpO3JldHVyblt0WzBdLHRbMl0sdFs3XSx0WzNdXX19KX19ZWxzZSB0aGlzLmRhdGEucG9wdXBSZWY9bnVsbH19Y2xhc3MgU3F1aWdnbHlBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjppfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1UO2lmKHRoaXMuZGF0YS5xdWFkUG9pbnRzPWdldFF1YWRQb2ludHModCxudWxsKSl7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxhPXQuZ2V0KCJDQSIpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmksZXh0cmE6IltdIDAgZCAxIHciLHN0cm9rZUNvbG9yOmUsc3Ryb2tlQWxwaGE6YSxwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IGk9KHRbMV0tdFs1XSkvNjtsZXQgYT1pLHI9dFs0XTtjb25zdCBzPXRbNV0sbj10WzZdO2UucHVzaChgJHtyfSAke3MrYX0gbWApO2Rve3IrPTI7YT0wPT09YT9pOjA7ZS5wdXNoKGAke3J9ICR7cythfSBsYCl9d2hpbGUocjxuKTtlLnB1c2goIlMiKTtyZXR1cm5bdFs0XSxuLHMtMippLHMrMippXX19KX19ZWxzZSB0aGlzLmRhdGEucG9wdXBSZWY9bnVsbH19Y2xhc3MgU3RyaWtlT3V0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6aX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9SztpZih0aGlzLmRhdGEucXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzKHQsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0sYT10LmdldCgiQ0EiKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjppLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOmEscG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goKHRbMF0rdFs0XSkvMisiICIrKHRbMV0rdFs1XSkvMisiIG0iLCh0WzJdK3RbNl0pLzIrIiAiKyh0WzNdK3RbN10pLzIrIiBsIiwiUyIpO3JldHVyblt0WzBdLHRbMl0sdFs3XSx0WzNdXX19KX19ZWxzZSB0aGlzLmRhdGEucG9wdXBSZWY9bnVsbH19Y2xhc3MgU3RhbXBBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbnsjSztjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9cTt0aGlzLiNLPXRoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO3RoaXMuZGF0YS5pc0VkaXRhYmxlPSF0aGlzLmRhdGEubm9IVE1MO3RoaXMuZGF0YS5ub0hUTUw9ITF9bXVzdEJlVmlld2VkV2hlbkVkaXRpbmcoZSx0PW51bGwpe2lmKGUpe2lmKCF0aGlzLmRhdGEuaXNFZGl0YWJsZSlyZXR1cm4hMTt0aGlzLiNLPXRoaXMuZGF0YS5oYXNPd25DYW52YXM7dGhpcy5kYXRhLmhhc093bkNhbnZhcz0hMDtyZXR1cm4hMH10aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuI0s7cmV0dXJuIXQ/Lmhhcyh0aGlzLmRhdGEuaWQpfXN0YXRpYyBhc3luYyBjcmVhdGVJbWFnZShlLHQpe2NvbnN0e3dpZHRoOmksaGVpZ2h0OmF9PWUscj1uZXcgT2Zmc2NyZWVuQ2FudmFzKGksYSkscz1yLmdldENvbnRleHQoIjJkIix7YWxwaGE6ITB9KTtzLmRyYXdJbWFnZShlLDAsMCk7Y29uc3Qgbj1zLmdldEltYWdlRGF0YSgwLDAsaSxhKS5kYXRhLG89bmV3IFVpbnQzMkFycmF5KG4uYnVmZmVyKSxnPW8uc29tZShGZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj9lPT5lPj4+MjQhPTI1NTplPT4yNTUhPSgyNTUmZSkpO2lmKGcpe3MuZmlsbFN0eWxlPSJ3aGl0ZSI7cy5maWxsUmVjdCgwLDAsaSxhKTtzLmRyYXdJbWFnZShlLDAsMCl9Y29uc3QgYz1yLmNvbnZlcnRUb0Jsb2Ioe3R5cGU6ImltYWdlL2pwZWciLHF1YWxpdHk6MX0pLnRoZW4oKGU9PmUuYXJyYXlCdWZmZXIoKSkpLEM9TmFtZS5nZXQoIlhPYmplY3QiKSxoPU5hbWUuZ2V0KCJJbWFnZSIpLGw9bmV3IERpY3QodCk7bC5zZXQoIlR5cGUiLEMpO2wuc2V0KCJTdWJ0eXBlIixoKTtsLnNldCgiQml0c1BlckNvbXBvbmVudCIsOCk7bC5zZXQoIkNvbG9yU3BhY2UiLE5hbWUuZ2V0KCJEZXZpY2VSR0IiKSk7bC5zZXQoIkZpbHRlciIsTmFtZS5nZXQoIkRDVERlY29kZSIpKTtsLnNldCgiQkJveCIsWzAsMCxpLGFdKTtsLnNldCgiV2lkdGgiLGkpO2wuc2V0KCJIZWlnaHQiLGEpO2xldCBRPW51bGw7aWYoZyl7Y29uc3QgZT1uZXcgVWludDhBcnJheShvLmxlbmd0aCk7aWYoRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4pZm9yKGxldCB0PTAsaT1vLmxlbmd0aDt0PGk7dCsrKWVbdF09b1t0XT4+PjI0O2Vsc2UgZm9yKGxldCB0PTAsaT1vLmxlbmd0aDt0PGk7dCsrKWVbdF09MjU1Jm9bdF07Y29uc3Qgcj1uZXcgRGljdCh0KTtyLnNldCgiVHlwZSIsQyk7ci5zZXQoIlN1YnR5cGUiLGgpO3Iuc2V0KCJCaXRzUGVyQ29tcG9uZW50Iiw4KTtyLnNldCgiQ29sb3JTcGFjZSIsTmFtZS5nZXQoIkRldmljZUdyYXkiKSk7ci5zZXQoIldpZHRoIixpKTtyLnNldCgiSGVpZ2h0IixhKTtRPW5ldyBTdHJlYW0oZSwwLDAscil9cmV0dXJue2ltYWdlU3RyZWFtOm5ldyBTdHJlYW0oYXdhaXQgYywwLDAsbCksc21hc2tTdHJlYW06USx3aWR0aDppLGhlaWdodDphfX1zdGF0aWMgY3JlYXRlTmV3RGljdChlLHQse2FwUmVmOmksYXA6YX0pe2NvbnN0e29sZEFubm90YXRpb246cixyZWN0OnMscm90YXRpb246bix1c2VyOm99PWUsZz1yfHxuZXcgRGljdCh0KTtnLnNldCgiVHlwZSIsTmFtZS5nZXQoIkFubm90IikpO2cuc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiU3RhbXAiKSk7Zy5zZXQocj8iTSI6IkNyZWF0aW9uRGF0ZSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7Zy5zZXQoIkNyZWF0aW9uRGF0ZSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7Zy5zZXQoIlJlY3QiLHMpO2cuc2V0KCJGIiw0KTtnLnNldCgiQm9yZGVyIixbMCwwLDBdKTtnLnNldCgiUm90YXRlIixuKTtvJiZnLnNldCgiVCIsc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRShvKSk7aWYoaXx8YSl7Y29uc3QgZT1uZXcgRGljdCh0KTtnLnNldCgiQVAiLGUpO2k/ZS5zZXQoIk4iLGkpOmUuc2V0KCJOIixhKX1yZXR1cm4gZ31zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQsaSl7aWYoZS5vbGRBbm5vdGF0aW9uKXJldHVybiBudWxsO2NvbnN0e3JvdGF0aW9uOmF9PWUse2ltYWdlUmVmOnIsd2lkdGg6cyxoZWlnaHQ6bn09aS5pbWFnZSxvPW5ldyBEaWN0KHQpLGc9bmV3IERpY3QodCk7by5zZXQoIlhPYmplY3QiLGcpO2cuc2V0KCJJbTAiLHIpO2NvbnN0IGM9YHEgJHtzfSAwIDAgJHtufSAwIDAgY20gL0ltMCBEbyBRYCxDPW5ldyBEaWN0KHQpO0Muc2V0KCJGb3JtVHlwZSIsMSk7Qy5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJGb3JtIikpO0Muc2V0KCJUeXBlIixOYW1lLmdldCgiWE9iamVjdCIpKTtDLnNldCgiQkJveCIsWzAsMCxzLG5dKTtDLnNldCgiUmVzb3VyY2VzIixvKTtpZihhKXtjb25zdCBlPWdldFJvdGF0aW9uTWF0cml4KGEscyxuKTtDLnNldCgiTWF0cml4IixlKX1jb25zdCBoPW5ldyBTdHJpbmdTdHJlYW0oYyk7aC5kaWN0PUM7cmV0dXJuIGh9fWNsYXNzIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6aX09ZSxhPW5ldyBGaWxlU3BlYyh0LmdldCgiRlMiKSxpKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9WDt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTt0aGlzLmRhdGEubm9IVE1MPSExO3RoaXMuZGF0YS5maWxlPWEuc2VyaWFsaXphYmxlO2NvbnN0IHI9dC5nZXQoIk5hbWUiKTt0aGlzLmRhdGEubmFtZT1yIGluc3RhbmNlb2YgTmFtZT9zdHJpbmdUb1BERlN0cmluZyhyLm5hbWUpOiJQdXNoUGluIjtjb25zdCBzPXQuZ2V0KCJjYSIpO3RoaXMuZGF0YS5maWxsQWxwaGE9Im51bWJlciI9PXR5cGVvZiBzJiZzPj0wJiZzPD0xP3M6bnVsbH19ZnVuY3Rpb24gZGVjb2RlU3RyaW5nKGUpe3RyeXtyZXR1cm4gc3RyaW5nVG9VVEY4U3RyaW5nKGUpfWNhdGNoKHQpe3dhcm4oYFVURi04IGRlY29kaW5nIGZhaWxlZDogIiR7dH0iLmApO3JldHVybiBlfX1jbGFzcyBEYXRhc2V0WE1MUGFyc2VyIGV4dGVuZHMgU2ltcGxlWE1MUGFyc2Vye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMubm9kZT1udWxsfW9uRW5kRWxlbWVudChlKXtjb25zdCB0PXN1cGVyLm9uRW5kRWxlbWVudChlKTtpZih0JiYieGZhOmRhdGFzZXRzIj09PWUpe3RoaXMubm9kZT10O3Rocm93IG5ldyBFcnJvcigiQWJvcnRpbmcgRGF0YXNldFhNTFBhcnNlci4iKX19fWNsYXNzIERhdGFzZXRSZWFkZXJ7Y29uc3RydWN0b3IoZSl7aWYoZS5kYXRhc2V0cyl0aGlzLm5vZGU9bmV3IFNpbXBsZVhNTFBhcnNlcih7aGFzQXR0cmlidXRlczohMH0pLnBhcnNlRnJvbVN0cmluZyhlLmRhdGFzZXRzKS5kb2N1bWVudEVsZW1lbnQ7ZWxzZXtjb25zdCB0PW5ldyBEYXRhc2V0WE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSk7dHJ5e3QucGFyc2VGcm9tU3RyaW5nKGVbInhkcDp4ZHAiXSl9Y2F0Y2h7fXRoaXMubm9kZT10Lm5vZGV9fWdldFZhbHVlKGUpe2lmKCF0aGlzLm5vZGV8fCFlKXJldHVybiIiO2NvbnN0IHQ9dGhpcy5ub2RlLnNlYXJjaE5vZGUocGFyc2VYRkFQYXRoKGUpLDApO2lmKCF0KXJldHVybiIiO2NvbnN0IGk9dC5maXJzdENoaWxkO3JldHVybiJ2YWx1ZSI9PT1pPy5ub2RlTmFtZT90LmNoaWxkcmVuLm1hcCgoZT0+ZGVjb2RlU3RyaW5nKGUudGV4dENvbnRlbnQpKSk6ZGVjb2RlU3RyaW5nKHQudGV4dENvbnRlbnQpfX1jbGFzcyBYUmVmeyNxPW51bGw7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnN0cmVhbT1lO3RoaXMucGRmTWFuYWdlcj10O3RoaXMuZW50cmllcz1bXTt0aGlzLl94cmVmU3Rtcz1uZXcgU2V0O3RoaXMuX2NhY2hlTWFwPW5ldyBNYXA7dGhpcy5fcGVuZGluZ1JlZnM9bmV3IFJlZlNldDt0aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtPW51bGw7dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtPW51bGw7dGhpcy5fcGVyc2lzdGVudFJlZnNDYWNoZT1udWxsfWdldE5ld1BlcnNpc3RlbnRSZWYoZSl7bnVsbD09PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0mJih0aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtPXRoaXMuZW50cmllcy5sZW5ndGh8fDEpO2NvbnN0IHQ9dGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bSsrO3RoaXMuX2NhY2hlTWFwLnNldCh0LGUpO3JldHVybiBSZWYuZ2V0KHQsMCl9Z2V0TmV3VGVtcG9yYXJ5UmVmKCl7aWYobnVsbD09PXRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSl7dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtPXRoaXMuZW50cmllcy5sZW5ndGh8fDE7aWYodGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bSl7dGhpcy5fcGVyc2lzdGVudFJlZnNDYWNoZT1uZXcgTWFwO2ZvcihsZXQgZT10aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW07ZTx0aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtO2UrKyl7dGhpcy5fcGVyc2lzdGVudFJlZnNDYWNoZS5zZXQoZSx0aGlzLl9jYWNoZU1hcC5nZXQoZSkpO3RoaXMuX2NhY2hlTWFwLmRlbGV0ZShlKX19fXJldHVybiBSZWYuZ2V0KHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSsrLDApfXJlc2V0TmV3VGVtcG9yYXJ5UmVmKCl7dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtPW51bGw7aWYodGhpcy5fcGVyc2lzdGVudFJlZnNDYWNoZSlmb3IoY29uc3RbZSx0XW9mIHRoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGUpdGhpcy5fY2FjaGVNYXAuc2V0KGUsdCk7dGhpcy5fcGVyc2lzdGVudFJlZnNDYWNoZT1udWxsfXNldFN0YXJ0WFJlZihlKXt0aGlzLnN0YXJ0WFJlZlF1ZXVlPVtlXX1wYXJzZShlPSExKXtsZXQgdCxpLGE7aWYoZSl7d2FybigiSW5kZXhpbmcgYWxsIFBERiBvYmplY3RzIik7dD10aGlzLmluZGV4T2JqZWN0cygpfWVsc2UgdD10aGlzLnJlYWRYUmVmKCk7dC5hc3NpZ25YcmVmKHRoaXMpO3RoaXMudHJhaWxlcj10O3RyeXtpPXQuZ2V0KCJFbmNyeXB0Iil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybihgWFJlZi5wYXJzZSAtIEludmFsaWQgIkVuY3J5cHQiIHJlZmVyZW5jZTogIiR7ZX0iLmApfWlmKGkgaW5zdGFuY2VvZiBEaWN0KXtjb25zdCBlPXQuZ2V0KCJJRCIpLGE9ZT8ubGVuZ3RoP2VbMF06IiI7aS5zdXBwcmVzc0VuY3J5cHRpb249ITA7dGhpcy5lbmNyeXB0PW5ldyBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5KGksYSx0aGlzLnBkZk1hbmFnZXIucGFzc3dvcmQpfXRyeXthPXQuZ2V0KCJSb290Iil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybihgWFJlZi5wYXJzZSAtIEludmFsaWQgIlJvb3QiIHJlZmVyZW5jZTogIiR7ZX0iLmApfWlmKGEgaW5zdGFuY2VvZiBEaWN0KXRyeXtpZihhLmdldCgiUGFnZXMiKWluc3RhbmNlb2YgRGljdCl7dGhpcy5yb290PWE7cmV0dXJufX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKGBYUmVmLnBhcnNlIC0gSW52YWxpZCAiUGFnZXMiIHJlZmVyZW5jZTogIiR7ZX0iLmApfWlmKCFlKXRocm93IG5ldyBYUmVmUGFyc2VFeGNlcHRpb247dGhyb3cgbmV3IEludmFsaWRQREZFeGNlcHRpb24oIkludmFsaWQgUm9vdCByZWZlcmVuY2UuIil9cHJvY2Vzc1hSZWZUYWJsZShlKXsidGFibGVTdGF0ZSJpbiB0aGlzfHwodGhpcy50YWJsZVN0YXRlPXtlbnRyeU51bTowLHN0cmVhbVBvczplLmxleGVyLnN0cmVhbS5wb3MscGFyc2VyQnVmMTplLmJ1ZjEscGFyc2VyQnVmMjplLmJ1ZjJ9KTtpZighaXNDbWQodGhpcy5yZWFkWFJlZlRhYmxlKGUpLCJ0cmFpbGVyIikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBmaW5kIHRyYWlsZXIgZGljdGlvbmFyeSIpO2xldCB0PWUuZ2V0T2JqKCk7dCBpbnN0YW5jZW9mIERpY3R8fCF0LmRpY3R8fCh0PXQuZGljdCk7aWYoISh0IGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBwYXJzZSB0cmFpbGVyIGRpY3Rpb25hcnkiKTtkZWxldGUgdGhpcy50YWJsZVN0YXRlO3JldHVybiB0fXJlYWRYUmVmVGFibGUoZSl7Y29uc3QgdD1lLmxleGVyLnN0cmVhbSxpPXRoaXMudGFibGVTdGF0ZTt0LnBvcz1pLnN0cmVhbVBvcztlLmJ1ZjE9aS5wYXJzZXJCdWYxO2UuYnVmMj1pLnBhcnNlckJ1ZjI7bGV0IGE7Zm9yKDs7KXtpZighKCJmaXJzdEVudHJ5TnVtImluIGkpfHwhKCJlbnRyeUNvdW50ImluIGkpKXtpZihpc0NtZChhPWUuZ2V0T2JqKCksInRyYWlsZXIiKSlicmVhaztpLmZpcnN0RW50cnlOdW09YTtpLmVudHJ5Q291bnQ9ZS5nZXRPYmooKX1sZXQgcj1pLmZpcnN0RW50cnlOdW07Y29uc3Qgcz1pLmVudHJ5Q291bnQ7aWYoIU51bWJlci5pc0ludGVnZXIocil8fCFOdW1iZXIuaXNJbnRlZ2VyKHMpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiB3cm9uZyB0eXBlcyBpbiBzdWJzZWN0aW9uIGhlYWRlciIpO2ZvcihsZXQgYT1pLmVudHJ5TnVtO2E8czthKyspe2kuc3RyZWFtUG9zPXQucG9zO2kuZW50cnlOdW09YTtpLnBhcnNlckJ1ZjE9ZS5idWYxO2kucGFyc2VyQnVmMj1lLmJ1ZjI7Y29uc3Qgbj17fTtuLm9mZnNldD1lLmdldE9iaigpO24uZ2VuPWUuZ2V0T2JqKCk7Y29uc3Qgbz1lLmdldE9iaigpO2lmKG8gaW5zdGFuY2VvZiBDbWQpc3dpdGNoKG8uY21kKXtjYXNlImYiOm4uZnJlZT0hMDticmVhaztjYXNlIm4iOm4udW5jb21wcmVzc2VkPSEwfWlmKCFOdW1iZXIuaXNJbnRlZ2VyKG4ub2Zmc2V0KXx8IU51bWJlci5pc0ludGVnZXIobi5nZW4pfHwhbi5mcmVlJiYhbi51bmNvbXByZXNzZWQpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIGVudHJ5IGluIFhSZWYgc3Vic2VjdGlvbjogJHtyfSwgJHtzfWApOzA9PT1hJiZuLmZyZWUmJjE9PT1yJiYocj0wKTt0aGlzLmVudHJpZXNbYStyXXx8KHRoaXMuZW50cmllc1thK3JdPW4pfWkuZW50cnlOdW09MDtpLnN0cmVhbVBvcz10LnBvcztpLnBhcnNlckJ1ZjE9ZS5idWYxO2kucGFyc2VyQnVmMj1lLmJ1ZjI7ZGVsZXRlIGkuZmlyc3RFbnRyeU51bTtkZWxldGUgaS5lbnRyeUNvdW50fWlmKHRoaXMuZW50cmllc1swXSYmIXRoaXMuZW50cmllc1swXS5mcmVlKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiB1bmV4cGVjdGVkIGZpcnN0IG9iamVjdCIpO3JldHVybiBhfXByb2Nlc3NYUmVmU3RyZWFtKGUpe2lmKCEoInN0cmVhbVN0YXRlImluIHRoaXMpKXtjb25zdCB0PWUuZGljdCxpPXQuZ2V0KCJXIik7bGV0IGE9dC5nZXQoIkluZGV4Iik7YXx8KGE9WzAsdC5nZXQoIlNpemUiKV0pO3RoaXMuc3RyZWFtU3RhdGU9e2VudHJ5UmFuZ2VzOmEsYnl0ZVdpZHRoczppLGVudHJ5TnVtOjAsc3RyZWFtUG9zOmUucG9zfX10aGlzLnJlYWRYUmVmU3RyZWFtKGUpO2RlbGV0ZSB0aGlzLnN0cmVhbVN0YXRlO3JldHVybiBlLmRpY3R9cmVhZFhSZWZTdHJlYW0oZSl7Y29uc3QgdD10aGlzLnN0cmVhbVN0YXRlO2UucG9zPXQuc3RyZWFtUG9zO2NvbnN0W2ksYSxyXT10LmJ5dGVXaWR0aHMscz10LmVudHJ5UmFuZ2VzO2Zvcig7cy5sZW5ndGg+MDspe2NvbnN0W24sb109cztpZighTnVtYmVyLmlzSW50ZWdlcihuKXx8IU51bWJlci5pc0ludGVnZXIobykpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgcmFuZ2UgZmllbGRzOiAke259LCAke299YCk7aWYoIU51bWJlci5pc0ludGVnZXIoaSl8fCFOdW1iZXIuaXNJbnRlZ2VyKGEpfHwhTnVtYmVyLmlzSW50ZWdlcihyKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgWFJlZiBlbnRyeSBmaWVsZHMgbGVuZ3RoOiAke259LCAke299YCk7Zm9yKGxldCBzPXQuZW50cnlOdW07czxvOysrcyl7dC5lbnRyeU51bT1zO3Quc3RyZWFtUG9zPWUucG9zO2xldCBvPTAsZz0wLGM9MDtmb3IobGV0IHQ9MDt0PGk7Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICd0eXBlJy4iKTtvPW88PDh8dH0wPT09aSYmKG89MSk7Zm9yKGxldCB0PTA7dDxhOysrdCl7Y29uc3QgdD1lLmdldEJ5dGUoKTtpZigtMT09PXQpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnb2Zmc2V0Jy4iKTtnPWc8PDh8dH1mb3IobGV0IHQ9MDt0PHI7Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdnZW5lcmF0aW9uJy4iKTtjPWM8PDh8dH1jb25zdCBDPXt9O0Mub2Zmc2V0PWc7Qy5nZW49Yztzd2l0Y2gobyl7Y2FzZSAwOkMuZnJlZT0hMDticmVhaztjYXNlIDE6Qy51bmNvbXByZXNzZWQ9ITA7YnJlYWs7Y2FzZSAyOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogJHtvfWApfXRoaXMuZW50cmllc1tuK3NdfHwodGhpcy5lbnRyaWVzW24rc109Qyl9dC5lbnRyeU51bT0wO3Quc3RyZWFtUG9zPWUucG9zO3Muc3BsaWNlKDAsMil9fWluZGV4T2JqZWN0cygpe2Z1bmN0aW9uIHJlYWRUb2tlbihlLHQpe2xldCBpPSIiLGE9ZVt0XTtmb3IoOzEwIT09YSYmMTMhPT1hJiY2MCE9PWEmJiEoKyt0Pj1lLmxlbmd0aCk7KXtpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2E9ZVt0XX1yZXR1cm4gaX1mdW5jdGlvbiBza2lwVW50aWwoZSx0LGkpe2NvbnN0IGE9aS5sZW5ndGgscj1lLmxlbmd0aDtsZXQgcz0wO2Zvcig7dDxyOyl7bGV0IHI9MDtmb3IoO3I8YSYmZVt0K3JdPT09aVtyXTspKytyO2lmKHI+PWEpYnJlYWs7dCsrO3MrK31yZXR1cm4gc31jb25zdCBlPS9cYihlbmRvYmp8XGQrXHMrXGQrXHMrb2JqfHhyZWZ8dHJhaWxlclxzKjw8KVxiL2csdD0vXGIoc3RhcnR4cmVmfFxkK1xzK1xkK1xzK29iailcYi9nLGk9L14oXGQrKVxzKyhcZCspXHMrb2JqXGIvLGE9bmV3IFVpbnQ4QXJyYXkoWzExNiwxMTQsOTcsMTA1LDEwOCwxMDEsMTE0XSkscj1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLHM9bmV3IFVpbnQ4QXJyYXkoWzQ3LDg4LDgyLDEwMSwxMDJdKTt0aGlzLmVudHJpZXMubGVuZ3RoPTA7dGhpcy5fY2FjaGVNYXAuY2xlYXIoKTtjb25zdCBuPXRoaXMuc3RyZWFtO24ucG9zPTA7Y29uc3Qgbz1uLmdldEJ5dGVzKCksZz1ieXRlc1RvU3RyaW5nKG8pLGM9by5sZW5ndGg7bGV0IEM9bi5zdGFydDtjb25zdCBoPVtdLGw9W107Zm9yKDtDPGM7KXtsZXQgUT1vW0NdO2lmKDk9PT1RfHwxMD09PVF8fDEzPT09UXx8MzI9PT1RKXsrK0M7Y29udGludWV9aWYoMzc9PT1RKXtkb3srK0M7aWYoQz49YylicmVhaztRPW9bQ119d2hpbGUoMTAhPT1RJiYxMyE9PVEpO2NvbnRpbnVlfWNvbnN0IEU9cmVhZFRva2VuKG8sQyk7bGV0IHU7aWYoRS5zdGFydHNXaXRoKCJ4cmVmIikmJig0PT09RS5sZW5ndGh8fC9ccy8udGVzdChFWzRdKSkpe0MrPXNraXBVbnRpbChvLEMsYSk7aC5wdXNoKEMpO0MrPXNraXBVbnRpbChvLEMscil9ZWxzZSBpZih1PWkuZXhlYyhFKSl7Y29uc3QgdD0wfHVbMV0saT0wfHVbMl0sYT1DK0UubGVuZ3RoO2xldCByLGg9ITE7aWYodGhpcy5lbnRyaWVzW3RdKXtpZih0aGlzLmVudHJpZXNbdF0uZ2VuPT09aSl0cnl7bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKG4ubWFrZVN1YlN0cmVhbShhKSl9KS5nZXRPYmooKTtoPSEwfWNhdGNoKGUpe2UgaW5zdGFuY2VvZiBQYXJzZXJFT0ZFeGNlcHRpb24/d2FybihgaW5kZXhPYmplY3RzIC0tIGNoZWNraW5nIG9iamVjdCAoJHtFfSk6ICIke2V9Ii5gKTpoPSEwfX1lbHNlIGg9ITA7aCYmKHRoaXMuZW50cmllc1t0XT17b2Zmc2V0OkMtbi5zdGFydCxnZW46aSx1bmNvbXByZXNzZWQ6ITB9KTtlLmxhc3RJbmRleD1hO2NvbnN0IFE9ZS5leGVjKGcpO2lmKFEpe3I9ZS5sYXN0SW5kZXgrMS1DO2lmKCJlbmRvYmoiIT09UVsxXSl7d2FybihgaW5kZXhPYmplY3RzOiBGb3VuZCAiJHtRWzFdfSIgaW5zaWRlIG9mIGFub3RoZXIgIm9iaiIsIGNhdXNlZCBieSBtaXNzaW5nICJlbmRvYmoiIC0tIHRyeWluZyB0byByZWNvdmVyLmApO3ItPVFbMV0ubGVuZ3RoKzF9fWVsc2Ugcj1jLUM7Y29uc3QgZD1vLnN1YmFycmF5KEMsQytyKSxmPXNraXBVbnRpbChkLDAscyk7aWYoZjxyJiZkW2YrNV08NjQpe2wucHVzaChDLW4uc3RhcnQpO3RoaXMuX3hyZWZTdG1zLmFkZChDLW4uc3RhcnQpfUMrPXJ9ZWxzZSBpZihFLnN0YXJ0c1dpdGgoInRyYWlsZXIiKSYmKDc9PT1FLmxlbmd0aHx8L1xzLy50ZXN0KEVbN10pKSl7aC5wdXNoKEMpO2NvbnN0IGU9QytFLmxlbmd0aDtsZXQgaTt0Lmxhc3RJbmRleD1lO2NvbnN0IGE9dC5leGVjKGcpO2lmKGEpe2k9dC5sYXN0SW5kZXgrMS1DO2lmKCJzdGFydHhyZWYiIT09YVsxXSl7d2FybihgaW5kZXhPYmplY3RzOiBGb3VuZCAiJHthWzFdfSIgYWZ0ZXIgInRyYWlsZXIiLCBjYXVzZWQgYnkgbWlzc2luZyAic3RhcnR4cmVmIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci5gKTtpLT1hWzFdLmxlbmd0aCsxfX1lbHNlIGk9Yy1DO0MrPWl9ZWxzZSBDKz1FLmxlbmd0aCsxfWZvcihjb25zdCBlIG9mIGwpe3RoaXMuc3RhcnRYUmVmUXVldWUucHVzaChlKTt0aGlzLnJlYWRYUmVmKCEwKX1jb25zdCBRPVtdO2xldCBFLHUsZD0hMTtmb3IoY29uc3QgZSBvZiBoKXtuLnBvcz1lO2NvbnN0IHQ9bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKG4pLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITAscmVjb3ZlcnlNb2RlOiEwfSk7aWYoIWlzQ21kKHQuZ2V0T2JqKCksInRyYWlsZXIiKSljb250aW51ZTtjb25zdCBpPXQuZ2V0T2JqKCk7aWYoaSBpbnN0YW5jZW9mIERpY3Qpe1EucHVzaChpKTtpLmhhcygiRW5jcnlwdCIpJiYoZD0hMCl9fWZvcihjb25zdCBlIG9mWy4uLlEsImdlbkZhbGxiYWNrIiwuLi5RXSl7aWYoImdlbkZhbGxiYWNrIj09PWUpe2lmKCF1KWJyZWFrO3RoaXMuX2dlbmVyYXRpb25GYWxsYmFjaz0hMDtjb250aW51ZX1sZXQgdD0hMTt0cnl7Y29uc3QgaT1lLmdldCgiUm9vdCIpO2lmKCEoaSBpbnN0YW5jZW9mIERpY3QpKWNvbnRpbnVlO2NvbnN0IGE9aS5nZXQoIlBhZ2VzIik7aWYoIShhIGluc3RhbmNlb2YgRGljdCkpY29udGludWU7Y29uc3Qgcj1hLmdldCgiQ291bnQiKTtOdW1iZXIuaXNJbnRlZ2VyKHIpJiYodD0hMCl9Y2F0Y2goZSl7dT1lO2NvbnRpbnVlfWlmKHQmJighZHx8ZS5oYXMoIkVuY3J5cHQiKSkmJmUuaGFzKCJJRCIpKXJldHVybiBlO0U9ZX1pZihFKXJldHVybiBFO2lmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O3Rocm93IG5ldyBJbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFBERiBzdHJ1Y3R1cmUuIil9cmVhZFhSZWYoZT0hMSl7Y29uc3QgdD10aGlzLnN0cmVhbSxpPW5ldyBTZXQ7Zm9yKDt0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aDspe3RyeXtjb25zdCBlPXRoaXMuc3RhcnRYUmVmUXVldWVbMF07aWYoaS5oYXMoZSkpe3dhcm4oInJlYWRYUmVmIC0gc2tpcHBpbmcgWFJlZiB0YWJsZSBzaW5jZSBpdCB3YXMgYWxyZWFkeSBwYXJzZWQuIik7dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpO2NvbnRpbnVlfWkuYWRkKGUpO3QucG9zPWUrdC5zdGFydDtjb25zdCBhPW5ldyBQYXJzZXIoe2xleGVyOm5ldyBMZXhlcih0KSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSk7bGV0IHIscz1hLmdldE9iaigpO2lmKGlzQ21kKHMsInhyZWYiKSl7cj10aGlzLnByb2Nlc3NYUmVmVGFibGUoYSk7dGhpcy50b3BEaWN0fHwodGhpcy50b3BEaWN0PXIpO3M9ci5nZXQoIlhSZWZTdG0iKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHMpJiYhdGhpcy5feHJlZlN0bXMuaGFzKHMpKXt0aGlzLl94cmVmU3Rtcy5hZGQocyk7dGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKHMpO3RoaXMuI3E/Pz1zfX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHMpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHN0cmVhbSBoZWFkZXIiKTtpZighKE51bWJlci5pc0ludGVnZXIoYS5nZXRPYmooKSkmJmlzQ21kKGEuZ2V0T2JqKCksIm9iaiIpJiYocz1hLmdldE9iaigpKWluc3RhbmNlb2YgQmFzZVN0cmVhbSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7cj10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKHMpO3RoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1yKTtpZighcil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkZhaWxlZCB0byByZWFkIFhSZWYgc3RyZWFtIil9cz1yLmdldCgiUHJldiIpO051bWJlci5pc0ludGVnZXIocyk/dGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKHMpOnMgaW5zdGFuY2VvZiBSZWYmJnRoaXMuc3RhcnRYUmVmUXVldWUucHVzaChzLm51bSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7aW5mbygiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSl9dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfWlmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O2lmKCFlKXRocm93IG5ldyBYUmVmUGFyc2VFeGNlcHRpb259Z2V0IGxhc3RYUmVmU3RyZWFtUG9zKCl7cmV0dXJuIHRoaXMuI3E/Pyh0aGlzLl94cmVmU3Rtcy5zaXplPjA/TWF0aC5tYXgoLi4udGhpcy5feHJlZlN0bXMpOm51bGwpfWdldEVudHJ5KGUpe2NvbnN0IHQ9dGhpcy5lbnRyaWVzW2VdO3JldHVybiB0JiYhdC5mcmVlJiZ0Lm9mZnNldD90Om51bGx9ZmV0Y2hJZlJlZihlLHQ9ITEpe3JldHVybiBlIGluc3RhbmNlb2YgUmVmP3RoaXMuZmV0Y2goZSx0KTplfWZldGNoKGUsdD0hMSl7aWYoIShlIGluc3RhbmNlb2YgUmVmKSl0aHJvdyBuZXcgRXJyb3IoInJlZiBvYmplY3QgaXMgbm90IGEgcmVmZXJlbmNlIik7Y29uc3QgaT1lLm51bSxhPXRoaXMuX2NhY2hlTWFwLmdldChpKTtpZih2b2lkIDAhPT1hKXthIGluc3RhbmNlb2YgRGljdCYmIWEub2JqSWQmJihhLm9iaklkPWUudG9TdHJpbmcoKSk7cmV0dXJuIGF9bGV0IHI9dGhpcy5nZXRFbnRyeShpKTtpZihudWxsPT09cil7dGhpcy5fY2FjaGVNYXAuc2V0KGkscik7cmV0dXJuIHJ9aWYodGhpcy5fcGVuZGluZ1JlZnMuaGFzKGUpKXt0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSk7d2FybihgSWdub3JpbmcgY2lyY3VsYXIgcmVmZXJlbmNlOiAke2V9LmApO3JldHVybiBidH10aGlzLl9wZW5kaW5nUmVmcy5wdXQoZSk7dHJ5e3I9ci51bmNvbXByZXNzZWQ/dGhpcy5mZXRjaFVuY29tcHJlc3NlZChlLHIsdCk6dGhpcy5mZXRjaENvbXByZXNzZWQoZSxyLHQpO3RoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKX1jYXRjaCh0KXt0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSk7dGhyb3cgdH1yIGluc3RhbmNlb2YgRGljdD9yLm9iaklkPWUudG9TdHJpbmcoKTpyIGluc3RhbmNlb2YgQmFzZVN0cmVhbSYmKHIuZGljdC5vYmpJZD1lLnRvU3RyaW5nKCkpO3JldHVybiByfWZldGNoVW5jb21wcmVzc2VkKGUsdCxpPSExKXtjb25zdCBhPWUuZ2VuO2xldCByPWUubnVtO2lmKHQuZ2VuIT09YSl7Y29uc3Qgcz1gSW5jb25zaXN0ZW50IGdlbmVyYXRpb24gaW4gWFJlZjogJHtlfWA7aWYodGhpcy5fZ2VuZXJhdGlvbkZhbGxiYWNrJiZ0LmdlbjxhKXt3YXJuKHMpO3JldHVybiB0aGlzLmZldGNoVW5jb21wcmVzc2VkKFJlZi5nZXQocix0LmdlbiksdCxpKX10aHJvdyBuZXcgWFJlZkVudHJ5RXhjZXB0aW9uKHMpfWNvbnN0IHM9dGhpcy5zdHJlYW0ubWFrZVN1YlN0cmVhbSh0Lm9mZnNldCt0aGlzLnN0cmVhbS5zdGFydCksbj1uZXcgUGFyc2VyKHtsZXhlcjpuZXcgTGV4ZXIocykseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMH0pLG89bi5nZXRPYmooKSxnPW4uZ2V0T2JqKCksYz1uLmdldE9iaigpO2lmKG8hPT1yfHxnIT09YXx8IShjIGluc3RhbmNlb2YgQ21kKSl0aHJvdyBuZXcgWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtlfWApO2lmKCJvYmoiIT09Yy5jbWQpe2lmKGMuY21kLnN0YXJ0c1dpdGgoIm9iaiIpKXtyPXBhcnNlSW50KGMuY21kLnN1YnN0cmluZygzKSwxMCk7aWYoIU51bWJlci5pc05hTihyKSlyZXR1cm4gcn10aHJvdyBuZXcgWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtlfWApfSh0PXRoaXMuZW5jcnlwdCYmIWk/bi5nZXRPYmoodGhpcy5lbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShyLGEpKTpuLmdldE9iaigpKWluc3RhbmNlb2YgQmFzZVN0cmVhbXx8dGhpcy5fY2FjaGVNYXAuc2V0KHIsdCk7cmV0dXJuIHR9ZmV0Y2hDb21wcmVzc2VkKGUsdCxpPSExKXtjb25zdCBhPXQub2Zmc2V0LHI9dGhpcy5mZXRjaChSZWYuZ2V0KGEsMCkpO2lmKCEociBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKXRocm93IG5ldyBGb3JtYXRFcnJvcigiYmFkIE9ialN0bSBzdHJlYW0iKTtjb25zdCBzPXIuZGljdC5nZXQoIkZpcnN0Iiksbj1yLmRpY3QuZ2V0KCJOIik7aWYoIU51bWJlci5pc0ludGVnZXIocyl8fCFOdW1iZXIuaXNJbnRlZ2VyKG4pKXRocm93IG5ldyBGb3JtYXRFcnJvcigiaW52YWxpZCBmaXJzdCBhbmQgbiBwYXJhbWV0ZXJzIGZvciBPYmpTdG0gc3RyZWFtIik7bGV0IG89bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKHIpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtjb25zdCBnPW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKTtmb3IobGV0IGU9MDtlPG47KytlKXtjb25zdCB0PW8uZ2V0T2JqKCk7aWYoIU51bWJlci5pc0ludGVnZXIodCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBpbnZhbGlkIG9iamVjdCBudW1iZXIgaW4gdGhlIE9ialN0bSBzdHJlYW06ICR7dH1gKTtjb25zdCBpPW8uZ2V0T2JqKCk7aWYoIU51bWJlci5pc0ludGVnZXIoaSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBpbnZhbGlkIG9iamVjdCBvZmZzZXQgaW4gdGhlIE9ialN0bSBzdHJlYW06ICR7aX1gKTtnW2VdPXQ7Y1tlXT1pfWNvbnN0IEM9KHIuc3RhcnR8fDApK3MsaD1uZXcgQXJyYXkobik7Zm9yKGxldCBlPTA7ZTxuOysrZSl7Y29uc3QgdD1lPG4tMT9jW2UrMV0tY1tlXTp2b2lkIDA7aWYodDwwKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBvZmZzZXQgaW4gdGhlIE9ialN0bSBzdHJlYW0uIik7bz1uZXcgUGFyc2VyKHtsZXhlcjpuZXcgTGV4ZXIoci5tYWtlU3ViU3RyZWFtKEMrY1tlXSx0LHIuZGljdCkpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtjb25zdCBpPW8uZ2V0T2JqKCk7aFtlXT1pO2lmKGkgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKWNvbnRpbnVlO2NvbnN0IHM9Z1tlXSxsPXRoaXMuZW50cmllc1tzXTtsJiZsLm9mZnNldD09PWEmJmwuZ2VuPT09ZSYmdGhpcy5fY2FjaGVNYXAuc2V0KHMsaSl9aWYodm9pZCAwPT09KHQ9aFt0Lmdlbl0pKXRocm93IG5ldyBYUmVmRW50cnlFeGNlcHRpb24oYEJhZCAoY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtlfWApO3JldHVybiB0fWFzeW5jIGZldGNoSWZSZWZBc3luYyhlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgUmVmP3RoaXMuZmV0Y2hBc3luYyhlLHQpOmV9YXN5bmMgZmV0Y2hBc3luYyhlLHQpe3RyeXtyZXR1cm4gdGhpcy5mZXRjaChlLHQpfWNhdGNoKGkpe2lmKCEoaSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSl0aHJvdyBpO2F3YWl0IHRoaXMucGRmTWFuYWdlci5yZXF1ZXN0UmFuZ2UoaS5iZWdpbixpLmVuZCk7cmV0dXJuIHRoaXMuZmV0Y2hBc3luYyhlLHQpfX1nZXRDYXRhbG9nT2JqKCl7cmV0dXJuIHRoaXMucm9vdH19Y29uc3QgY289WzAsMCw2MTIsNzkyXTtjbGFzcyBQYWdle2NvbnN0cnVjdG9yKHtwZGZNYW5hZ2VyOmUseHJlZjp0LHBhZ2VJbmRleDppLHBhZ2VEaWN0OmEscmVmOnIsZ2xvYmFsSWRGYWN0b3J5OnMsZm9udENhY2hlOm4sYnVpbHRJbkNNYXBDYWNoZTpvLHN0YW5kYXJkRm9udERhdGFDYWNoZTpnLGdsb2JhbEltYWdlQ2FjaGU6YyxzeXN0ZW1Gb250Q2FjaGU6Qyxub25CbGVuZE1vZGVzU2V0OmgseGZhRmFjdG9yeTpsfSl7dGhpcy5wZGZNYW5hZ2VyPWU7dGhpcy5wYWdlSW5kZXg9aTt0aGlzLnBhZ2VEaWN0PWE7dGhpcy54cmVmPXQ7dGhpcy5yZWY9cjt0aGlzLmZvbnRDYWNoZT1uO3RoaXMuYnVpbHRJbkNNYXBDYWNoZT1vO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPWc7dGhpcy5nbG9iYWxJbWFnZUNhY2hlPWM7dGhpcy5zeXN0ZW1Gb250Q2FjaGU9Qzt0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9aDt0aGlzLmV2YWx1YXRvck9wdGlvbnM9ZS5ldmFsdWF0b3JPcHRpb25zO3RoaXMucmVzb3VyY2VzUHJvbWlzZT1udWxsO3RoaXMueGZhRmFjdG9yeT1sO2NvbnN0IFE9e29iajowfTt0aGlzLl9sb2NhbElkRmFjdG9yeT1jbGFzcyBleHRlbmRzIHN7c3RhdGljIGNyZWF0ZU9iaklkKCl7cmV0dXJuYHAke2l9XyR7KytRLm9ian1gfXN0YXRpYyBnZXRQYWdlT2JqSWQoKXtyZXR1cm5gcCR7ci50b1N0cmluZygpfWB9fX1fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eShlLHQ9ITEpe2NvbnN0IGk9Z2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7ZGljdDp0aGlzLnBhZ2VEaWN0LGtleTplLGdldEFycmF5OnQsc3RvcFdoZW5Gb3VuZDohMX0pO3JldHVybiBBcnJheS5pc0FycmF5KGkpPzEhPT1pLmxlbmd0aCYmaVswXWluc3RhbmNlb2YgRGljdD9EaWN0Lm1lcmdlKHt4cmVmOnRoaXMueHJlZixkaWN0QXJyYXk6aX0pOmlbMF06aX1nZXQgY29udGVudCgpe3JldHVybiB0aGlzLnBhZ2VEaWN0LmdldEFycmF5KCJDb250ZW50cyIpfWdldCByZXNvdXJjZXMoKXtjb25zdCBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJlc291cmNlcyIpO3JldHVybiBzaGFkb3codGhpcywicmVzb3VyY2VzIixlIGluc3RhbmNlb2YgRGljdD9lOkRpY3QuZW1wdHkpfV9nZXRCb3VuZGluZ0JveChlKXtpZih0aGlzLnhmYURhdGEpcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O2NvbnN0IHQ9bG9va3VwTm9ybWFsUmVjdCh0aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KGUsITApLG51bGwpO2lmKHQpe2lmKHRbMl0tdFswXT4wJiZ0WzNdLXRbMV0+MClyZXR1cm4gdDt3YXJuKGBFbXB0eSwgb3IgaW52YWxpZCwgLyR7ZX0gZW50cnkuYCl9cmV0dXJuIG51bGx9Z2V0IG1lZGlhQm94KCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJtZWRpYUJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIk1lZGlhQm94Iil8fGNvKX1nZXQgY3JvcEJveCgpe3JldHVybiBzaGFkb3codGhpcywiY3JvcEJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIkNyb3BCb3giKXx8dGhpcy5tZWRpYUJveCl9Z2V0IHVzZXJVbml0KCl7bGV0IGU9dGhpcy5wYWdlRGljdC5nZXQoIlVzZXJVbml0Iik7KCJudW1iZXIiIT10eXBlb2YgZXx8ZTw9MCkmJihlPTEpO3JldHVybiBzaGFkb3codGhpcywidXNlclVuaXQiLGUpfWdldCB2aWV3KCl7Y29uc3R7Y3JvcEJveDplLG1lZGlhQm94OnR9PXRoaXM7aWYoZSE9PXQmJiFpc0FycmF5RXF1YWwoZSx0KSl7Y29uc3QgaT1VdGlsLmludGVyc2VjdChlLHQpO2lmKGkmJmlbMl0taVswXT4wJiZpWzNdLWlbMV0+MClyZXR1cm4gc2hhZG93KHRoaXMsInZpZXciLGkpO3dhcm4oIkVtcHR5IC9Dcm9wQm94IGFuZCAvTWVkaWFCb3ggaW50ZXJzZWN0aW9uLiIpfXJldHVybiBzaGFkb3codGhpcywidmlldyIsdCl9Z2V0IHJvdGF0ZSgpe2xldCBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJvdGF0ZSIpfHwwO2UlOTAhPTA/ZT0wOmU+PTM2MD9lJT0zNjA6ZTwwJiYoZT0oZSUzNjArMzYwKSUzNjApO3JldHVybiBzaGFkb3codGhpcywicm90YXRlIixlKX1fb25TdWJTdHJlYW1FcnJvcihlLHQpe2lmKCF0aGlzLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7d2FybihgZ2V0Q29udGVudFN0cmVhbSAtIGlnbm9yaW5nIHN1Yi1zdHJlYW0gKCR7dH0pOiAiJHtlfSIuYCl9Z2V0Q29udGVudFN0cmVhbSgpe3JldHVybiB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsImNvbnRlbnQiKS50aGVuKChlPT5lIGluc3RhbmNlb2YgQmFzZVN0cmVhbT9lOkFycmF5LmlzQXJyYXkoZSk/bmV3IFN0cmVhbXNTZXF1ZW5jZVN0cmVhbShlLHRoaXMuX29uU3ViU3RyZWFtRXJyb3IuYmluZCh0aGlzKSk6bmV3IE51bGxTdHJlYW0pKX1nZXQgeGZhRGF0YSgpe3JldHVybiBzaGFkb3codGhpcywieGZhRGF0YSIsdGhpcy54ZmFGYWN0b3J5P3tiYm94OnRoaXMueGZhRmFjdG9yeS5nZXRCb3VuZGluZ0JveCh0aGlzLnBhZ2VJbmRleCl9Om51bGwpfWFzeW5jI08oZSx0LGkpe2NvbnN0IGE9W107Zm9yKGNvbnN0IHIgb2YgZSlpZihyLmlkKXtjb25zdCBlPVJlZi5mcm9tU3RyaW5nKHIuaWQpO2lmKCFlKXt3YXJuKGBBIG5vbi1saW5rZWQgYW5ub3RhdGlvbiBjYW5ub3QgYmUgbW9kaWZpZWQ6ICR7ci5pZH1gKTtjb250aW51ZX1pZihyLmRlbGV0ZWQpe3QucHV0KGUsZSk7aWYoci5wb3B1cFJlZil7Y29uc3QgZT1SZWYuZnJvbVN0cmluZyhyLnBvcHVwUmVmKTtlJiZ0LnB1dChlLGUpfWNvbnRpbnVlfWk/LnB1dChlKTtyLnJlZj1lO2EucHVzaCh0aGlzLnhyZWYuZmV0Y2hBc3luYyhlKS50aGVuKChlPT57ZSBpbnN0YW5jZW9mIERpY3QmJihyLm9sZEFubm90YXRpb249ZS5jbG9uZSgpKX0pLCgoKT0+e3dhcm4oYENhbm5vdCBmZXRjaCBcYG9sZEFubm90YXRpb25cYCBmb3I6ICR7ZX0uYCl9KSkpO2RlbGV0ZSByLmlkfWF3YWl0IFByb21pc2UuYWxsKGEpfWFzeW5jIHNhdmVOZXdBbm5vdGF0aW9ucyhlLHQsaSxhKXtpZih0aGlzLnhmYUZhY3RvcnkpdGhyb3cgbmV3IEVycm9yKCJYRkE6IENhbm5vdCBzYXZlIG5ldyBhbm5vdGF0aW9ucy4iKTtjb25zdCByPW5ldyBQYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pLHM9bmV3IFJlZlNldENhY2hlLG49bmV3IFJlZlNldDthd2FpdCB0aGlzLiNPKGkscyxuKTtjb25zdCBvPXRoaXMucGFnZURpY3QsZz10aGlzLmFubm90YXRpb25zLmZpbHRlcigoZT0+IShlIGluc3RhbmNlb2YgUmVmJiZzLmhhcyhlKSkpKSxjPWF3YWl0IEFubm90YXRpb25GYWN0b3J5LnNhdmVOZXdBbm5vdGF0aW9ucyhyLHQsaSxhKTtmb3IoY29uc3R7cmVmOmV9b2YgYy5hbm5vdGF0aW9ucyllIGluc3RhbmNlb2YgUmVmJiYhbi5oYXMoZSkmJmcucHVzaChlKTtjb25zdCBDPW8uZ2V0KCJBbm5vdHMiKTtvLnNldCgiQW5ub3RzIixnKTtjb25zdCBoPVtdO2F3YWl0IHdyaXRlT2JqZWN0KHRoaXMucmVmLG8saCx0aGlzLnhyZWYpO0MmJm8uc2V0KCJBbm5vdHMiLEMpO2NvbnN0IGw9Yy5kZXBlbmRlbmNpZXM7bC5wdXNoKHtyZWY6dGhpcy5yZWYsZGF0YTpoLmpvaW4oIiIpfSwuLi5jLmFubm90YXRpb25zKTtmb3IoY29uc3QgZSBvZiBzKWwucHVzaCh7cmVmOmUsZGF0YTpudWxsfSk7cmV0dXJuIGx9c2F2ZShlLHQsaSl7Y29uc3QgYT1uZXcgUGFydGlhbEV2YWx1YXRvcih7eHJlZjp0aGlzLnhyZWYsaGFuZGxlcjplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxpZEZhY3Rvcnk6dGhpcy5fbG9jYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dGhpcy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dGhpcy5zeXN0ZW1Gb250Q2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KTtyZXR1cm4gdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMudGhlbigoZnVuY3Rpb24oZSl7Y29uc3Qgcj1bXTtmb3IoY29uc3QgcyBvZiBlKXIucHVzaChzLnNhdmUoYSx0LGkpLmNhdGNoKChmdW5jdGlvbihlKXt3YXJuKGBzYXZlIC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyAiJHt0Lm5hbWV9IiB0YXNrOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpO3JldHVybiBQcm9taXNlLmFsbChyKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoKGU9PiEhZSkpfSkpfSkpfWxvYWRSZXNvdXJjZXMoZSl7dGhpcy5yZXNvdXJjZXNQcm9taXNlfHw9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJyZXNvdXJjZXMiKTtyZXR1cm4gdGhpcy5yZXNvdXJjZXNQcm9taXNlLnRoZW4oKCgpPT5uZXcgT2JqZWN0TG9hZGVyKHRoaXMucmVzb3VyY2VzLGUsdGhpcy54cmVmKS5sb2FkKCkpKX1nZXRPcGVyYXRvckxpc3Qoe2hhbmRsZXI6ZSxzaW5rOnQsdGFzazppLGludGVudDphLGNhY2hlS2V5OnIsYW5ub3RhdGlvblN0b3JhZ2U6cz1udWxsLG1vZGlmaWVkSWRzOm49bnVsbH0pe2NvbnN0IG89dGhpcy5nZXRDb250ZW50U3RyZWFtKCksaD10aGlzLmxvYWRSZXNvdXJjZXMoWyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSksdT1uZXcgUGFydGlhbEV2YWx1YXRvcih7eHJlZjp0aGlzLnhyZWYsaGFuZGxlcjplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxpZEZhY3Rvcnk6dGhpcy5fbG9jYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dGhpcy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dGhpcy5zeXN0ZW1Gb250Q2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KSxmPXRoaXMueGZhRmFjdG9yeT9udWxsOmdldE5ld0Fubm90YXRpb25zTWFwKHMpLHA9Zj8uZ2V0KHRoaXMucGFnZUluZGV4KTtsZXQgbT1Qcm9taXNlLnJlc29sdmUobnVsbCkseT1udWxsO2lmKHApe2NvbnN0IGU9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiYW5ub3RhdGlvbkdsb2JhbHMiKTtsZXQgdDtjb25zdCBhPW5ldyBTZXQ7Zm9yKGNvbnN0e2JpdG1hcElkOmUsYml0bWFwOnR9b2YgcCkhZXx8dHx8YS5oYXMoZSl8fGEuYWRkKGUpO2NvbnN0e2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOnJ9PXRoaXMuZXZhbHVhdG9yT3B0aW9ucztpZihhLnNpemU+MCl7Y29uc3QgZT1wLnNsaWNlKCk7Zm9yKGNvbnN0W3QsaV1vZiBzKXQuc3RhcnRzV2l0aChkKSYmaS5iaXRtYXAmJmEuaGFzKGkuYml0bWFwSWQpJiZlLnB1c2goaSk7dD1Bbm5vdGF0aW9uRmFjdG9yeS5nZW5lcmF0ZUltYWdlcyhlLHRoaXMueHJlZixyKX1lbHNlIHQ9QW5ub3RhdGlvbkZhY3RvcnkuZ2VuZXJhdGVJbWFnZXMocCx0aGlzLnhyZWYscik7eT1uZXcgUmVmU2V0O209UHJvbWlzZS5hbGwoW2UsdGhpcy4jTyhwLHksbnVsbCldKS50aGVuKCgoW2VdKT0+ZT9Bbm5vdGF0aW9uRmFjdG9yeS5wcmludE5ld0Fubm90YXRpb25zKGUsdSxpLHAsdCk6bnVsbCkpfWNvbnN0IHc9UHJvbWlzZS5hbGwoW28saF0pLnRoZW4oKChbc10pPT57Y29uc3Qgbj1uZXcgT3BlcmF0b3JMaXN0KGEsdCk7ZS5zZW5kKCJTdGFydFJlbmRlclBhZ2UiLHt0cmFuc3BhcmVuY3k6dS5oYXNCbGVuZE1vZGVzKHRoaXMucmVzb3VyY2VzLHRoaXMubm9uQmxlbmRNb2Rlc1NldCkscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGNhY2hlS2V5OnJ9KTtyZXR1cm4gdS5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTpzLHRhc2s6aSxyZXNvdXJjZXM6dGhpcy5yZXNvdXJjZXMsb3BlcmF0b3JMaXN0Om59KS50aGVuKChmdW5jdGlvbigpe3JldHVybiBufSkpfSkpO3JldHVybiBQcm9taXNlLmFsbChbdyx0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucyxtXSkudGhlbigoZnVuY3Rpb24oW2UsdCxyXSl7aWYocil7dD10LmZpbHRlcigoZT0+IShlLnJlZiYmeS5oYXMoZS5yZWYpKSkpO2ZvcihsZXQgZT0wLGk9ci5sZW5ndGg7ZTxpO2UrKyl7Y29uc3QgYT1yW2VdO2lmKGEucmVmVG9SZXBsYWNlKXtjb25zdCBzPXQuZmluZEluZGV4KChlPT5lLnJlZiYmaXNSZWZzRXF1YWwoZS5yZWYsYS5yZWZUb1JlcGxhY2UpKSk7aWYocz49MCl7dC5zcGxpY2UocywxLGEpO3Iuc3BsaWNlKGUtLSwxKTtpLS19fX10PXQuY29uY2F0KHIpfWlmKDA9PT10Lmxlbmd0aHx8YSZRKXtlLmZsdXNoKCEwKTtyZXR1cm57bGVuZ3RoOmUudG90YWxMZW5ndGh9fWNvbnN0IG89ISEoYSZsKSxoPSEhKGEmRSksZD0hIShhJmcpLGY9ISEoYSZjKSxwPSEhKGEmQyksbT1bXTtmb3IoY29uc3QgZSBvZiB0KShkfHxmJiZlLm11c3RCZVZpZXdlZChzLG8pJiZlLm11c3RCZVZpZXdlZFdoZW5FZGl0aW5nKGgsbil8fHAmJmUubXVzdEJlUHJpbnRlZChzKSkmJm0ucHVzaChlLmdldE9wZXJhdG9yTGlzdCh1LGksYSxzKS5jYXRjaCgoZnVuY3Rpb24oZSl7d2FybihgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyAiJHtpLm5hbWV9IiB0YXNrOiAiJHtlfSIuYCk7cmV0dXJue29wTGlzdDpudWxsLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX19KSkpO3JldHVybiBQcm9taXNlLmFsbChtKS50aGVuKChmdW5jdGlvbih0KXtsZXQgaT0hMSxhPSExO2Zvcihjb25zdHtvcExpc3Q6cixzZXBhcmF0ZUZvcm06cyxzZXBhcmF0ZUNhbnZhczpufW9mIHQpe2UuYWRkT3BMaXN0KHIpO2l8fD1zO2F8fD1ufWUuZmx1c2goITAse2Zvcm06aSxjYW52YXM6YX0pO3JldHVybntsZW5ndGg6ZS50b3RhbExlbmd0aH19KSl9KSl9YXN5bmMgZXh0cmFjdFRleHRDb250ZW50KHtoYW5kbGVyOmUsdGFzazp0LGluY2x1ZGVNYXJrZWRDb250ZW50OmksZGlzYWJsZU5vcm1hbGl6YXRpb246YSxzaW5rOnJ9KXtjb25zdCBzPXRoaXMuZ2V0Q29udGVudFN0cmVhbSgpLG49dGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiRm9udCIsIlByb3BlcnRpZXMiLCJYT2JqZWN0Il0pLG89dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImxhbmciKSxbZywsY109YXdhaXQgUHJvbWlzZS5hbGwoW3MsbixvXSk7cmV0dXJuIG5ldyBQYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pLmdldFRleHRDb250ZW50KHtzdHJlYW06Zyx0YXNrOnQscmVzb3VyY2VzOnRoaXMucmVzb3VyY2VzLGluY2x1ZGVNYXJrZWRDb250ZW50OmksZGlzYWJsZU5vcm1hbGl6YXRpb246YSxzaW5rOnIsdmlld0JveDp0aGlzLnZpZXcsbGFuZzpjfSl9YXN5bmMgZ2V0U3RydWN0VHJlZSgpe2NvbnN0IGU9YXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInN0cnVjdFRyZWVSb290Iik7aWYoIWUpcmV0dXJuIG51bGw7YXdhaXQgdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnM7cmV0dXJuKGF3YWl0IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiX3BhcnNlU3RydWN0VHJlZSIsW2VdKSkuc2VyaWFsaXphYmxlfV9wYXJzZVN0cnVjdFRyZWUoZSl7Y29uc3QgdD1uZXcgU3RydWN0VHJlZVBhZ2UoZSx0aGlzLnBhZ2VEaWN0KTt0LnBhcnNlKHRoaXMucmVmKTtyZXR1cm4gdH1hc3luYyBnZXRBbm5vdGF0aW9uc0RhdGEoZSx0LGkpe2NvbnN0IGE9YXdhaXQgdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnM7aWYoMD09PWEubGVuZ3RoKXJldHVybiBhO2NvbnN0IHI9W10scz1bXTtsZXQgbjtjb25zdCBvPSEhKGkmZyksaD0hIShpJmMpLGw9ISEoaSZDKTtmb3IoY29uc3QgaSBvZiBhKXtjb25zdCBhPW98fGgmJmkudmlld2FibGU7KGF8fGwmJmkucHJpbnRhYmxlKSYmci5wdXNoKGkuZGF0YSk7aWYoaS5oYXNUZXh0Q29udGVudCYmYSl7bnx8PW5ldyBQYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pO3MucHVzaChpLmV4dHJhY3RUZXh0Q29udGVudChuLHQsWy0xLzAsLTEvMCwxLzAsMS8wXSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3dhcm4oYGdldEFubm90YXRpb25zRGF0YSAtIGlnbm9yaW5nIHRleHRDb250ZW50IGR1cmluZyAiJHt0Lm5hbWV9IiB0YXNrOiAiJHtlfSIuYCl9KSkpfX1hd2FpdCBQcm9taXNlLmFsbChzKTtyZXR1cm4gcn1nZXQgYW5ub3RhdGlvbnMoKXtjb25zdCBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIkFubm90cyIpO3JldHVybiBzaGFkb3codGhpcywiYW5ub3RhdGlvbnMiLEFycmF5LmlzQXJyYXkoZSk/ZTpbXSl9Z2V0IF9wYXJzZWRBbm5vdGF0aW9ucygpe3JldHVybiBzaGFkb3codGhpcywiX3BhcnNlZEFubm90YXRpb25zIix0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsImFubm90YXRpb25zIikudGhlbigoYXN5bmMgZT0+e2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZTtjb25zdFt0LGldPWF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJhbm5vdGF0aW9uR2xvYmFscyIpLHRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImZpZWxkT2JqZWN0cyIpXSk7aWYoIXQpcmV0dXJuW107Y29uc3QgYT1pPy5vcnBoYW5GaWVsZHMscj1bXTtmb3IoY29uc3QgaSBvZiBlKXIucHVzaChBbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUodGhpcy54cmVmLGksdCx0aGlzLl9sb2NhbElkRmFjdG9yeSwhMSxhLHRoaXMucmVmKS5jYXRjaCgoZnVuY3Rpb24oZSl7d2FybihgX3BhcnNlZEFubm90YXRpb25zOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpO2NvbnN0IHM9W107bGV0IG4sbztmb3IoY29uc3QgZSBvZiBhd2FpdCBQcm9taXNlLmFsbChyKSllJiYoZSBpbnN0YW5jZW9mIFdpZGdldEFubm90YXRpb24/KG98fD1bXSkucHVzaChlKTplIGluc3RhbmNlb2YgUG9wdXBBbm5vdGF0aW9uPyhufHw9W10pLnB1c2goZSk6cy5wdXNoKGUpKTtvJiZzLnB1c2goLi4ubyk7biYmcy5wdXNoKC4uLm4pO3JldHVybiBzfSkpKX1nZXQganNBY3Rpb25zKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJqc0FjdGlvbnMiLGNvbGxlY3RBY3Rpb25zKHRoaXMueHJlZix0aGlzLnBhZ2VEaWN0LHlBKSl9fWNvbnN0IENvPW5ldyBVaW50OEFycmF5KFszNyw4MCw2OCw3MCw0NV0pLGhvPW5ldyBVaW50OEFycmF5KFsxMTUsMTE2LDk3LDExNCwxMTYsMTIwLDExNCwxMDEsMTAyXSksbG89bmV3IFVpbnQ4QXJyYXkoWzEwMSwxMTAsMTAwLDExMSw5OCwxMDZdKTtmdW5jdGlvbiBmaW5kKGUsdCxpPTEwMjQsYT0hMSl7Y29uc3Qgcj10Lmxlbmd0aCxzPWUucGVla0J5dGVzKGkpLG49cy5sZW5ndGgtcjtpZihuPD0wKXJldHVybiExO2lmKGEpe2NvbnN0IGk9ci0xO2xldCBhPXMubGVuZ3RoLTE7Zm9yKDthPj1pOyl7bGV0IG49MDtmb3IoO248ciYmc1thLW5dPT09dFtpLW5dOyluKys7aWYobj49cil7ZS5wb3MrPWEtaTtyZXR1cm4hMH1hLS19fWVsc2V7bGV0IGk9MDtmb3IoO2k8PW47KXtsZXQgYT0wO2Zvcig7YTxyJiZzW2krYV09PT10W2FdOylhKys7aWYoYT49cil7ZS5wb3MrPWk7cmV0dXJuITB9aSsrfX1yZXR1cm4hMX1jbGFzcyBQREZEb2N1bWVudHtjb25zdHJ1Y3RvcihlLHQpe2lmKHQubGVuZ3RoPD0wKXRocm93IG5ldyBJbnZhbGlkUERGRXhjZXB0aW9uKCJUaGUgUERGIGZpbGUgaXMgZW1wdHksIGkuZS4gaXRzIHNpemUgaXMgemVybyBieXRlcy4iKTt0aGlzLnBkZk1hbmFnZXI9ZTt0aGlzLnN0cmVhbT10O3RoaXMueHJlZj1uZXcgWFJlZih0LGUpO3RoaXMuX3BhZ2VQcm9taXNlcz1uZXcgTWFwO3RoaXMuX3ZlcnNpb249bnVsbDtjb25zdCBpPXtmb250OjB9O3RoaXMuX2dsb2JhbElkRmFjdG9yeT1jbGFzc3tzdGF0aWMgZ2V0RG9jSWQoKXtyZXR1cm5gZ18ke2UuZG9jSWR9YH1zdGF0aWMgY3JlYXRlRm9udElkKCl7cmV0dXJuImYiKyArK2kuZm9udH1zdGF0aWMgY3JlYXRlT2JqSWQoKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBjcmVhdGVPYmpJZGAgY2FsbGVkLiIpfXN0YXRpYyBnZXRQYWdlT2JqSWQoKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRQYWdlT2JqSWRgIGNhbGxlZC4iKX19fXBhcnNlKGUpe3RoaXMueHJlZi5wYXJzZShlKTt0aGlzLmNhdGFsb2c9bmV3IENhdGFsb2codGhpcy5wZGZNYW5hZ2VyLHRoaXMueHJlZil9Z2V0IGxpbmVhcml6YXRpb24oKXtsZXQgZT1udWxsO3RyeXtlPUxpbmVhcml6YXRpb24uY3JlYXRlKHRoaXMuc3RyZWFtKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTtpbmZvKGUpfXJldHVybiBzaGFkb3codGhpcywibGluZWFyaXphdGlvbiIsZSl9Z2V0IHN0YXJ0WFJlZigpe2NvbnN0IGU9dGhpcy5zdHJlYW07bGV0IHQ9MDtpZih0aGlzLmxpbmVhcml6YXRpb24pe2UucmVzZXQoKTtpZihmaW5kKGUsbG8pKXtlLnNraXAoNik7bGV0IGk9ZS5wZWVrQnl0ZSgpO2Zvcig7aXNXaGl0ZVNwYWNlKGkpOyl7ZS5wb3MrKztpPWUucGVla0J5dGUoKX10PWUucG9zLWUuc3RhcnR9fWVsc2V7Y29uc3QgaT0xMDI0LGE9aG8ubGVuZ3RoO2xldCByPSExLHM9ZS5lbmQ7Zm9yKDshciYmcz4wOyl7cy09aS1hO3M8MCYmKHM9MCk7ZS5wb3M9cztyPWZpbmQoZSxobyxpLCEwKX1pZihyKXtlLnNraXAoOSk7bGV0IGk7ZG97aT1lLmdldEJ5dGUoKX13aGlsZShpc1doaXRlU3BhY2UoaSkpO2xldCBhPSIiO2Zvcig7aT49MzImJmk8PTU3Oyl7YSs9U3RyaW5nLmZyb21DaGFyQ29kZShpKTtpPWUuZ2V0Qnl0ZSgpfXQ9cGFyc2VJbnQoYSwxMCk7aXNOYU4odCkmJih0PTApfX1yZXR1cm4gc2hhZG93KHRoaXMsInN0YXJ0WFJlZiIsdCl9Y2hlY2tIZWFkZXIoKXtjb25zdCBlPXRoaXMuc3RyZWFtO2UucmVzZXQoKTtpZighZmluZChlLENvKSlyZXR1cm47ZS5tb3ZlU3RhcnQoKTtlLnNraXAoQ28ubGVuZ3RoKTtsZXQgdCxpPSIiO2Zvcig7KHQ9ZS5nZXRCeXRlKCkpPjMyJiZpLmxlbmd0aDw3OylpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO050LnRlc3QoaSk/dGhpcy5fdmVyc2lvbj1pOndhcm4oYEludmFsaWQgUERGIGhlYWRlciB2ZXJzaW9uOiAke2l9YCl9cGFyc2VTdGFydFhSZWYoKXt0aGlzLnhyZWYuc2V0U3RhcnRYUmVmKHRoaXMuc3RhcnRYUmVmKX1nZXQgbnVtUGFnZXMoKXtsZXQgZT0wO2U9dGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuY2F0YWxvZy5udW1QYWdlczp0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldE51bVBhZ2VzKCk6dGhpcy5saW5lYXJpemF0aW9uP3RoaXMubGluZWFyaXphdGlvbi5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXM7cmV0dXJuIHNoYWRvdyh0aGlzLCJudW1QYWdlcyIsZSl9X2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoZSx0PTApe3JldHVybiEhQXJyYXkuaXNBcnJheShlKSYmZS5ldmVyeSgoZT0+e2lmKCEoKGU9dGhpcy54cmVmLmZldGNoSWZSZWYoZSkpaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm4hMTtpZihlLmhhcygiS2lkcyIpKXtpZigrK3Q+MTApe3dhcm4oIl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzOiBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCByZWFjaGVkIik7cmV0dXJuITF9cmV0dXJuIHRoaXMuX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoZS5nZXQoIktpZHMiKSx0KX1jb25zdCBpPWlzTmFtZShlLmdldCgiRlQiKSwiU2lnIiksYT1lLmdldCgiUmVjdCIpLHI9QXJyYXkuaXNBcnJheShhKSYmYS5ldmVyeSgoZT0+MD09PWUpKTtyZXR1cm4gaSYmcn0pKX1nZXQgX3hmYVN0cmVhbXMoKXtjb25zdCBlPXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PWUuZ2V0KCJYRkEiKSxpPXsieGRwOnhkcCI6IiIsdGVtcGxhdGU6IiIsZGF0YXNldHM6IiIsY29uZmlnOiIiLGNvbm5lY3Rpb25TZXQ6IiIsbG9jYWxlU2V0OiIiLHN0eWxlc2hlZXQ6IiIsIi94ZHA6eGRwIjoiIn07aWYodCBpbnN0YW5jZW9mIEJhc2VTdHJlYW0mJiF0LmlzRW1wdHkpe2lbInhkcDp4ZHAiXT10O3JldHVybiBpfWlmKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKGxldCBlPTAsYT10Lmxlbmd0aDtlPGE7ZSs9Mil7bGV0IHI7cj0wPT09ZT8ieGRwOnhkcCI6ZT09PWEtMj8iL3hkcDp4ZHAiOnRbZV07aWYoIWkuaGFzT3duUHJvcGVydHkocikpY29udGludWU7Y29uc3Qgcz10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W2UrMV0pO3MgaW5zdGFuY2VvZiBCYXNlU3RyZWFtJiYhcy5pc0VtcHR5JiYoaVtyXT1zKX1yZXR1cm4gaX1nZXQgeGZhRGF0YXNldHMoKXtjb25zdCBlPXRoaXMuX3hmYVN0cmVhbXM7aWYoIWUpcmV0dXJuIHNoYWRvdyh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCk7Zm9yKGNvbnN0IHQgb2ZbImRhdGFzZXRzIiwieGRwOnhkcCJdKXtjb25zdCBpPWVbdF07aWYoaSl0cnl7Y29uc3QgZT1zdHJpbmdUb1VURjhTdHJpbmcoaS5nZXRTdHJpbmcoKSk7cmV0dXJuIHNoYWRvdyh0aGlzLCJ4ZmFEYXRhc2V0cyIsbmV3IERhdGFzZXRSZWFkZXIoe1t0XTplfSkpfWNhdGNoe3dhcm4oIlhGQSAtIEludmFsaWQgdXRmLTggc3RyaW5nLiIpO2JyZWFrfX1yZXR1cm4gc2hhZG93KHRoaXMsInhmYURhdGFzZXRzIixudWxsKX1nZXQgeGZhRGF0YSgpe2NvbnN0IGU9dGhpcy5feGZhU3RyZWFtcztpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0W2ksYV1vZiBPYmplY3QuZW50cmllcyhlKSlpZihhKXRyeXt0W2ldPXN0cmluZ1RvVVRGOFN0cmluZyhhLmdldFN0cmluZygpKX1jYXRjaHt3YXJuKCJYRkEgLSBJbnZhbGlkIHV0Zi04IHN0cmluZy4iKTtyZXR1cm4gbnVsbH1yZXR1cm4gdH1nZXQgeGZhRmFjdG9yeSgpe2xldCBlO3RoaXMucGRmTWFuYWdlci5lbmFibGVYZmEmJnRoaXMuY2F0YWxvZy5uZWVkc1JlbmRlcmluZyYmdGhpcy5mb3JtSW5mby5oYXNYZmEmJiF0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtJiYoZT10aGlzLnhmYURhdGEpO3JldHVybiBzaGFkb3codGhpcywieGZhRmFjdG9yeSIsZT9uZXcgWEZBRmFjdG9yeShlKTpudWxsKX1nZXQgaXNQdXJlWGZhKCl7cmV0dXJuISF0aGlzLnhmYUZhY3RvcnkmJnRoaXMueGZhRmFjdG9yeS5pc1ZhbGlkKCl9Z2V0IGh0bWxGb3JYZmEoKXtyZXR1cm4gdGhpcy54ZmFGYWN0b3J5P3RoaXMueGZhRmFjdG9yeS5nZXRQYWdlcygpOm51bGx9YXN5bmMgbG9hZFhmYUltYWdlcygpe2NvbnN0IGU9YXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInhmYUltYWdlcyIpO2lmKCFlKXJldHVybjtjb25zdCB0PWUuZ2V0S2V5cygpLGk9bmV3IE9iamVjdExvYWRlcihlLHQsdGhpcy54cmVmKTthd2FpdCBpLmxvYWQoKTtjb25zdCBhPW5ldyBNYXA7Zm9yKGNvbnN0IGkgb2YgdCl7Y29uc3QgdD1lLmdldChpKTt0IGluc3RhbmNlb2YgQmFzZVN0cmVhbSYmYS5zZXQoaSx0LmdldEJ5dGVzKCkpfXRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMoYSl9YXN5bmMgbG9hZFhmYUZvbnRzKGUsdCl7Y29uc3QgaT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKTtpZighaSlyZXR1cm47Y29uc3QgYT1hd2FpdCBpLmdldEFzeW5jKCJEUiIpO2lmKCEoYSBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtjb25zdCByPW5ldyBPYmplY3RMb2FkZXIoYSxbIkZvbnQiXSx0aGlzLnhyZWYpO2F3YWl0IHIubG9hZCgpO2NvbnN0IHM9YS5nZXQoIkZvbnQiKTtpZighKHMgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm47Y29uc3Qgbj1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMpO24udXNlU3lzdGVtRm9udHM9ITE7Y29uc3Qgbz1uZXcgUGFydGlhbEV2YWx1YXRvcih7eHJlZjp0aGlzLnhyZWYsaGFuZGxlcjplLHBhZ2VJbmRleDotMSxpZEZhY3Rvcnk6dGhpcy5fZ2xvYmFsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmNhdGFsb2cuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dGhpcy5jYXRhbG9nLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuY2F0YWxvZy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsb3B0aW9uczpufSksZz1uZXcgT3BlcmF0b3JMaXN0LGM9W10sQz17Z2V0IGZvbnQoKXtyZXR1cm4gYy5hdCgtMSl9LHNldCBmb250KGUpe2MucHVzaChlKX0sY2xvbmUoKXtyZXR1cm4gdGhpc319LGg9bmV3IE1hcDtzLmZvckVhY2goKChlLHQpPT57aC5zZXQoZSx0KX0pKTtjb25zdCBsPVtdO2Zvcihjb25zdFtlLGldb2YgaCl7Y29uc3Qgcj1pLmdldCgiRm9udERlc2NyaXB0b3IiKTtpZighKHIgaW5zdGFuY2VvZiBEaWN0KSljb250aW51ZTtsZXQgcz1yLmdldCgiRm9udEZhbWlseSIpO3M9cy5yZXBsYWNlQWxsKC9bIF0rKFxkKS9nLCIkMSIpO2NvbnN0IG49e2ZvbnRGYW1pbHk6cyxmb250V2VpZ2h0OnIuZ2V0KCJGb250V2VpZ2h0IiksaXRhbGljQW5nbGU6LXIuZ2V0KCJJdGFsaWNBbmdsZSIpfTt2YWxpZGF0ZUNTU0ZvbnQobikmJmwucHVzaChvLmhhbmRsZVNldEZvbnQoYSxbTmFtZS5nZXQoZSksMV0sbnVsbCxnLHQsQyxudWxsLG4pLmNhdGNoKChmdW5jdGlvbihlKXt3YXJuKGBsb2FkWGZhRm9udHM6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH0pKSl9YXdhaXQgUHJvbWlzZS5hbGwobCk7Y29uc3QgUT10aGlzLnhmYUZhY3Rvcnkuc2V0Rm9udHMoYyk7aWYoIVEpcmV0dXJuO24uaWdub3JlRXJyb3JzPSEwO2wubGVuZ3RoPTA7Yy5sZW5ndGg9MDtjb25zdCBFPW5ldyBTZXQ7Zm9yKGNvbnN0IGUgb2YgUSlnZXRYZmFGb250TmFtZShgJHtlfS1SZWd1bGFyYCl8fEUuYWRkKGUpO0Uuc2l6ZSYmUS5wdXNoKCJQZGZKUy1GYWxsYmFjayIpO2Zvcihjb25zdCBlIG9mIFEpaWYoIUUuaGFzKGUpKWZvcihjb25zdCBpIG9mW3tuYW1lOiJSZWd1bGFyIixmb250V2VpZ2h0OjQwMCxpdGFsaWNBbmdsZTowfSx7bmFtZToiQm9sZCIsZm9udFdlaWdodDo3MDAsaXRhbGljQW5nbGU6MH0se25hbWU6Ikl0YWxpYyIsZm9udFdlaWdodDo0MDAsaXRhbGljQW5nbGU6MTJ9LHtuYW1lOiJCb2xkSXRhbGljIixmb250V2VpZ2h0OjcwMCxpdGFsaWNBbmdsZToxMn1dKXtjb25zdCByPWAke2V9LSR7aS5uYW1lfWAscz1nZXRYZmFGb250RGljdChyKTtsLnB1c2goby5oYW5kbGVTZXRGb250KGEsW05hbWUuZ2V0KHIpLDFdLG51bGwsZyx0LEMscyx7Zm9udEZhbWlseTplLGZvbnRXZWlnaHQ6aS5mb250V2VpZ2h0LGl0YWxpY0FuZ2xlOmkuaXRhbGljQW5nbGV9KS5jYXRjaCgoZnVuY3Rpb24oZSl7d2FybihgbG9hZFhmYUZvbnRzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpfWF3YWl0IFByb21pc2UuYWxsKGwpO3RoaXMueGZhRmFjdG9yeS5hcHBlbmRGb250cyhjLEUpfWFzeW5jIHNlcmlhbGl6ZVhmYURhdGEoZSl7cmV0dXJuIHRoaXMueGZhRmFjdG9yeT90aGlzLnhmYUZhY3Rvcnkuc2VyaWFsaXplRGF0YShlKTpudWxsfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuY2F0YWxvZy52ZXJzaW9ufHx0aGlzLl92ZXJzaW9ufWdldCBmb3JtSW5mbygpe2NvbnN0IGU9e2hhc0ZpZWxkczohMSxoYXNBY3JvRm9ybTohMSxoYXNYZmE6ITEsaGFzU2lnbmF0dXJlczohMX0sdD10aGlzLmNhdGFsb2cuYWNyb0Zvcm07aWYoIXQpcmV0dXJuIHNoYWRvdyh0aGlzLCJmb3JtSW5mbyIsZSk7dHJ5e2NvbnN0IGk9dC5nZXQoIkZpZWxkcyIpLGE9QXJyYXkuaXNBcnJheShpKSYmaS5sZW5ndGg+MDtlLmhhc0ZpZWxkcz1hO2NvbnN0IHI9dC5nZXQoIlhGQSIpO2UuaGFzWGZhPUFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoPjB8fHIgaW5zdGFuY2VvZiBCYXNlU3RyZWFtJiYhci5pc0VtcHR5O2NvbnN0IHM9ISEoMSZ0LmdldCgiU2lnRmxhZ3MiKSksbj1zJiZ0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGkpO2UuaGFzQWNyb0Zvcm09YSYmIW47ZS5oYXNTaWduYXR1cmVzPXN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybihgQ2Fubm90IGZldGNoIGZvcm0gaW5mb3JtYXRpb246ICIke2V9Ii5gKX1yZXR1cm4gc2hhZG93KHRoaXMsImZvcm1JbmZvIixlKX1nZXQgZG9jdW1lbnRJbmZvKCl7Y29uc3QgZT17UERGRm9ybWF0VmVyc2lvbjp0aGlzLnZlcnNpb24sTGFuZ3VhZ2U6dGhpcy5jYXRhbG9nLmxhbmcsRW5jcnlwdEZpbHRlck5hbWU6dGhpcy54cmVmLmVuY3J5cHQ/dGhpcy54cmVmLmVuY3J5cHQuZmlsdGVyTmFtZTpudWxsLElzTGluZWFyaXplZDohIXRoaXMubGluZWFyaXphdGlvbixJc0Fjcm9Gb3JtUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtLElzWEZBUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc1hmYSxJc0NvbGxlY3Rpb25QcmVzZW50OiEhdGhpcy5jYXRhbG9nLmNvbGxlY3Rpb24sSXNTaWduYXR1cmVzUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc1NpZ25hdHVyZXN9O2xldCB0O3RyeXt0PXRoaXMueHJlZi50cmFpbGVyLmdldCgiSW5mbyIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO2luZm8oIlRoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIil9aWYoISh0IGluc3RhbmNlb2YgRGljdCkpcmV0dXJuIHNoYWRvdyh0aGlzLCJkb2N1bWVudEluZm8iLGUpO2Zvcihjb25zdCBpIG9mIHQuZ2V0S2V5cygpKXtjb25zdCBhPXQuZ2V0KGkpO3N3aXRjaChpKXtjYXNlIlRpdGxlIjpjYXNlIkF1dGhvciI6Y2FzZSJTdWJqZWN0IjpjYXNlIktleXdvcmRzIjpjYXNlIkNyZWF0b3IiOmNhc2UiUHJvZHVjZXIiOmNhc2UiQ3JlYXRpb25EYXRlIjpjYXNlIk1vZERhdGUiOmlmKCJzdHJpbmciPT10eXBlb2YgYSl7ZVtpXT1zdHJpbmdUb1BERlN0cmluZyhhKTtjb250aW51ZX1icmVhaztjYXNlIlRyYXBwZWQiOmlmKGEgaW5zdGFuY2VvZiBOYW1lKXtlW2ldPWE7Y29udGludWV9YnJlYWs7ZGVmYXVsdDpsZXQgdDtzd2l0Y2godHlwZW9mIGEpe2Nhc2Uic3RyaW5nIjp0PXN0cmluZ1RvUERGU3RyaW5nKGEpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnQ9YTticmVhaztkZWZhdWx0OmEgaW5zdGFuY2VvZiBOYW1lJiYodD1hKX1pZih2b2lkIDA9PT10KXt3YXJuKGBCYWQgdmFsdWUsIGZvciBjdXN0b20ga2V5ICIke2l9IiwgaW4gSW5mbzogJHthfS5gKTtjb250aW51ZX1lLkN1c3RvbXx8KGUuQ3VzdG9tPU9iamVjdC5jcmVhdGUobnVsbCkpO2UuQ3VzdG9tW2ldPXQ7Y29udGludWV9d2FybihgQmFkIHZhbHVlLCBmb3Iga2V5ICIke2l9IiwgaW4gSW5mbzogJHthfS5gKX1yZXR1cm4gc2hhZG93KHRoaXMsImRvY3VtZW50SW5mbyIsZSl9Z2V0IGZpbmdlcnByaW50cygpe2Z1bmN0aW9uIHZhbGlkYXRlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCYmIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIiE9PWV9ZnVuY3Rpb24gaGV4U3RyaW5nKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IGkgb2YgZSl7Y29uc3QgZT1pLnRvU3RyaW5nKDE2KTt0LnB1c2goZS5wYWRTdGFydCgyLCIwIikpfXJldHVybiB0LmpvaW4oIiIpfWNvbnN0IGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJJRCIpO2xldCB0LGk7aWYoQXJyYXkuaXNBcnJheShlKSYmdmFsaWRhdGUoZVswXSkpe3Q9c3RyaW5nVG9CeXRlcyhlWzBdKTtlWzFdIT09ZVswXSYmdmFsaWRhdGUoZVsxXSkmJihpPXN0cmluZ1RvQnl0ZXMoZVsxXSkpfWVsc2UgdD1Pcih0aGlzLnN0cmVhbS5nZXRCeXRlUmFuZ2UoMCwxMDI0KSwwLDEwMjQpO3JldHVybiBzaGFkb3codGhpcywiZmluZ2VycHJpbnRzIixbaGV4U3RyaW5nKHQpLGk/aGV4U3RyaW5nKGkpOm51bGxdKX1hc3luYyBfZ2V0TGluZWFyaXphdGlvblBhZ2UoZSl7Y29uc3R7Y2F0YWxvZzp0LGxpbmVhcml6YXRpb246aSx4cmVmOmF9PXRoaXMscj1SZWYuZ2V0KGkub2JqZWN0TnVtYmVyRmlyc3QsMCk7dHJ5e2NvbnN0IGU9YXdhaXQgYS5mZXRjaEFzeW5jKHIpO2lmKGUgaW5zdGFuY2VvZiBEaWN0KXtsZXQgaT1lLmdldFJhdygiVHlwZSIpO2kgaW5zdGFuY2VvZiBSZWYmJihpPWF3YWl0IGEuZmV0Y2hBc3luYyhpKSk7aWYoaXNOYW1lKGksIlBhZ2UiKXx8IWUuaGFzKCJUeXBlIikmJiFlLmhhcygiS2lkcyIpJiZlLmhhcygiQ29udGVudHMiKSl7dC5wYWdlS2lkc0NvdW50Q2FjaGUuaGFzKHIpfHx0LnBhZ2VLaWRzQ291bnRDYWNoZS5wdXQociwxKTt0LnBhZ2VJbmRleENhY2hlLmhhcyhyKXx8dC5wYWdlSW5kZXhDYWNoZS5wdXQociwwKTtyZXR1cm5bZSxyXX19dGhyb3cgbmV3IEZvcm1hdEVycm9yKCJUaGUgTGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXNuJ3QgcG9pbnQgdG8gYSB2YWxpZCBQYWdlIGRpY3Rpb25hcnkuIil9Y2F0Y2goaSl7d2FybihgX2dldExpbmVhcml6YXRpb25QYWdlOiAiJHtpLm1lc3NhZ2V9Ii5gKTtyZXR1cm4gdC5nZXRQYWdlRGljdChlKX19Z2V0UGFnZShlKXtjb25zdCB0PXRoaXMuX3BhZ2VQcm9taXNlcy5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdHtjYXRhbG9nOmksbGluZWFyaXphdGlvbjphLHhmYUZhY3Rvcnk6cn09dGhpcztsZXQgcztzPXI/UHJvbWlzZS5yZXNvbHZlKFtEaWN0LmVtcHR5LG51bGxdKTphPy5wYWdlRmlyc3Q9PT1lP3RoaXMuX2dldExpbmVhcml6YXRpb25QYWdlKGUpOmkuZ2V0UGFnZURpY3QoZSk7cz1zLnRoZW4oKChbdCxhXSk9Pm5ldyBQYWdlKHtwZGZNYW5hZ2VyOnRoaXMucGRmTWFuYWdlcix4cmVmOnRoaXMueHJlZixwYWdlSW5kZXg6ZSxwYWdlRGljdDp0LHJlZjphLGdsb2JhbElkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOmkuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6aS5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTppLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOmkuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6aS5zeXN0ZW1Gb250Q2FjaGUsbm9uQmxlbmRNb2Rlc1NldDppLm5vbkJsZW5kTW9kZXNTZXQseGZhRmFjdG9yeTpyfSkpKTt0aGlzLl9wYWdlUHJvbWlzZXMuc2V0KGUscyk7cmV0dXJuIHN9YXN5bmMgY2hlY2tGaXJzdFBhZ2UoZT0hMSl7aWYoIWUpdHJ5e2F3YWl0IHRoaXMuZ2V0UGFnZSgwKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgWFJlZkVudHJ5RXhjZXB0aW9uKXt0aGlzLl9wYWdlUHJvbWlzZXMuZGVsZXRlKDApO2F3YWl0IHRoaXMuY2xlYW51cCgpO3Rocm93IG5ldyBYUmVmUGFyc2VFeGNlcHRpb259fX1hc3luYyBjaGVja0xhc3RQYWdlKGU9ITEpe2NvbnN0e2NhdGFsb2c6dCxwZGZNYW5hZ2VyOml9PXRoaXM7dC5zZXRBY3R1YWxOdW1QYWdlcygpO2xldCBhO3RyeXthd2FpdCBQcm9taXNlLmFsbChbaS5lbnN1cmVEb2MoInhmYUZhY3RvcnkiKSxpLmVuc3VyZURvYygibGluZWFyaXphdGlvbiIpLGkuZW5zdXJlQ2F0YWxvZygibnVtUGFnZXMiKV0pO2lmKHRoaXMueGZhRmFjdG9yeSlyZXR1cm47YT10aGlzLmxpbmVhcml6YXRpb24/dGhpcy5saW5lYXJpemF0aW9uLm51bVBhZ2VzOnQubnVtUGFnZXM7aWYoIU51bWJlci5pc0ludGVnZXIoYSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJQYWdlIGNvdW50IGlzIG5vdCBhbiBpbnRlZ2VyLiIpO2lmKGE8PTEpcmV0dXJuO2F3YWl0IHRoaXMuZ2V0UGFnZShhLTEpfWNhdGNoKHIpe3RoaXMuX3BhZ2VQcm9taXNlcy5kZWxldGUoYS0xKTthd2FpdCB0aGlzLmNsZWFudXAoKTtpZihyIGluc3RhbmNlb2YgWFJlZkVudHJ5RXhjZXB0aW9uJiYhZSl0aHJvdyBuZXcgWFJlZlBhcnNlRXhjZXB0aW9uO3dhcm4oYGNoZWNrTGFzdFBhZ2UgLSBpbnZhbGlkIC9QYWdlcyB0cmVlIC9Db3VudDogJHthfS5gKTtsZXQgczt0cnl7cz1hd2FpdCB0LmdldEFsbFBhZ2VEaWN0cyhlKX1jYXRjaChpKXtpZihpIGluc3RhbmNlb2YgWFJlZkVudHJ5RXhjZXB0aW9uJiYhZSl0aHJvdyBuZXcgWFJlZlBhcnNlRXhjZXB0aW9uO3Quc2V0QWN0dWFsTnVtUGFnZXMoMSk7cmV0dXJufWZvcihjb25zdFtlLFthLHJdXW9mIHMpe2xldCBzO2lmKGEgaW5zdGFuY2VvZiBFcnJvcil7cz1Qcm9taXNlLnJlamVjdChhKTtzLmNhdGNoKCgoKT0+e30pKX1lbHNlIHM9UHJvbWlzZS5yZXNvbHZlKG5ldyBQYWdlKHtwZGZNYW5hZ2VyOmkseHJlZjp0aGlzLnhyZWYscGFnZUluZGV4OmUscGFnZURpY3Q6YSxyZWY6cixnbG9iYWxJZEZhY3Rvcnk6dGhpcy5fZ2xvYmFsSWRGYWN0b3J5LGZvbnRDYWNoZTp0LmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnQuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0Lmdsb2JhbEltYWdlQ2FjaGUsc3lzdGVtRm9udENhY2hlOnQuc3lzdGVtRm9udENhY2hlLG5vbkJsZW5kTW9kZXNTZXQ6dC5ub25CbGVuZE1vZGVzU2V0LHhmYUZhY3Rvcnk6bnVsbH0pKTt0aGlzLl9wYWdlUHJvbWlzZXMuc2V0KGUscyl9dC5zZXRBY3R1YWxOdW1QYWdlcyhzLnNpemUpfX1mb250RmFsbGJhY2soZSx0KXtyZXR1cm4gdGhpcy5jYXRhbG9nLmZvbnRGYWxsYmFjayhlLHQpfWFzeW5jIGNsZWFudXAoZT0hMSl7cmV0dXJuIHRoaXMuY2F0YWxvZz90aGlzLmNhdGFsb2cuY2xlYW51cChlKTpjbGVhckdsb2JhbENhY2hlcygpfWFzeW5jI1AoZSx0LGksYSxyLHMsbil7Y29uc3R7eHJlZjpvfT10aGlzO2lmKCEoaSBpbnN0YW5jZW9mIFJlZil8fHMuaGFzKGkpKXJldHVybjtzLnB1dChpKTtjb25zdCBnPWF3YWl0IG8uZmV0Y2hBc3luYyhpKTtpZighKGcgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm47aWYoZy5oYXMoIlQiKSl7Y29uc3QgdD1zdHJpbmdUb1BERlN0cmluZyhhd2FpdCBnLmdldEFzeW5jKCJUIikpO2U9IiI9PT1lP3Q6YCR7ZX0uJHt0fWB9ZWxzZXtsZXQgaT1nO2Zvcig7Oyl7aT1pLmdldFJhdygiUGFyZW50Iil8fHQ7aWYoaSBpbnN0YW5jZW9mIFJlZil7aWYocy5oYXMoaSkpYnJlYWs7aT1hd2FpdCBvLmZldGNoQXN5bmMoaSl9aWYoIShpIGluc3RhbmNlb2YgRGljdCkpYnJlYWs7aWYoaS5oYXMoIlQiKSl7Y29uc3QgdD1zdHJpbmdUb1BERlN0cmluZyhhd2FpdCBpLmdldEFzeW5jKCJUIikpO2U9IiI9PT1lP3Q6YCR7ZX0uJHt0fWA7YnJlYWt9fX10JiYhZy5oYXMoIlBhcmVudCIpJiZpc05hbWUoZy5nZXQoIlN1YnR5cGUiKSwiV2lkZ2V0IikmJm4ucHV0KGksdCk7YS5oYXMoZSl8fGEuc2V0KGUsW10pO2EuZ2V0KGUpLnB1c2goQW5ub3RhdGlvbkZhY3RvcnkuY3JlYXRlKG8saSxyLG51bGwsITAsbixudWxsKS50aGVuKChlPT5lPy5nZXRGaWVsZE9iamVjdCgpKSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3dhcm4oYCNjb2xsZWN0RmllbGRPYmplY3RzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpO2lmKCFnLmhhcygiS2lkcyIpKXJldHVybjtjb25zdCBjPWF3YWl0IGcuZ2V0QXN5bmMoIktpZHMiKTtpZihBcnJheS5pc0FycmF5KGMpKWZvcihjb25zdCB0IG9mIGMpYXdhaXQgdGhpcy4jUChlLGksdCxhLHIscyxuKX1nZXQgZmllbGRPYmplY3RzKCl7aWYoIXRoaXMuZm9ybUluZm8uaGFzRmllbGRzKXJldHVybiBzaGFkb3codGhpcywiZmllbGRPYmplY3RzIixQcm9taXNlLnJlc29sdmUobnVsbCkpO3JldHVybiBzaGFkb3codGhpcywiZmllbGRPYmplY3RzIixQcm9taXNlLmFsbChbdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiYW5ub3RhdGlvbkdsb2JhbHMiKSx0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKV0pLnRoZW4oKGFzeW5jKFtlLHRdKT0+e2lmKCFlKXJldHVybiBudWxsO2NvbnN0IGk9bmV3IFJlZlNldCxhPU9iamVjdC5jcmVhdGUobnVsbCkscj1uZXcgTWFwLHM9bmV3IFJlZlNldENhY2hlO2Zvcihjb25zdCBhIG9mIGF3YWl0IHQuZ2V0QXN5bmMoIkZpZWxkcyIpKWF3YWl0IHRoaXMuI1AoIiIsbnVsbCxhLHIsZSxpLHMpO2NvbnN0IG49W107Zm9yKGNvbnN0W2UsdF1vZiByKW4ucHVzaChQcm9taXNlLmFsbCh0KS50aGVuKCh0PT57KHQ9dC5maWx0ZXIoKGU9PiEhZSkpKS5sZW5ndGg+MCYmKGFbZV09dCl9KSkpO2F3YWl0IFByb21pc2UuYWxsKG4pO3JldHVybnthbGxGaWVsZHM6YSxvcnBoYW5GaWVsZHM6c319KSkpfWdldCBoYXNKU0FjdGlvbnMoKXtyZXR1cm4gc2hhZG93KHRoaXMsImhhc0pTQWN0aW9ucyIsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiX3BhcnNlSGFzSlNBY3Rpb25zIikpfWFzeW5jIF9wYXJzZUhhc0pTQWN0aW9ucygpe2NvbnN0W2UsdF09YXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJqc0FjdGlvbnMiKSx0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKV0pO3JldHVybiEhZXx8ISF0JiZPYmplY3QudmFsdWVzKHQuYWxsRmllbGRzKS5zb21lKChlPT5lLnNvbWUoKGU9Pm51bGwhPT1lLmFjdGlvbnMpKSkpfWdldCBjYWxjdWxhdGlvbk9yZGVySWRzKCl7Y29uc3QgZT10aGlzLmNhdGFsb2cuYWNyb0Zvcm07aWYoIWU/LmhhcygiQ08iKSlyZXR1cm4gc2hhZG93KHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG51bGwpO2NvbnN0IHQ9ZS5nZXQoIkNPIik7aWYoIUFycmF5LmlzQXJyYXkodCl8fDA9PT10Lmxlbmd0aClyZXR1cm4gc2hhZG93KHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG51bGwpO2NvbnN0IGk9W107Zm9yKGNvbnN0IGUgb2YgdCllIGluc3RhbmNlb2YgUmVmJiZpLnB1c2goZS50b1N0cmluZygpKTtyZXR1cm4gMD09PWkubGVuZ3RoP3NoYWRvdyh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTpzaGFkb3codGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsaSl9Z2V0IGFubm90YXRpb25HbG9iYWxzKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJhbm5vdGF0aW9uR2xvYmFscyIsQW5ub3RhdGlvbkZhY3RvcnkuY3JlYXRlR2xvYmFscyh0aGlzLnBkZk1hbmFnZXIpKX19Y2xhc3MgQmFzZVBkZk1hbmFnZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fZG9jQmFzZVVybD1mdW5jdGlvbiBwYXJzZURvY0Jhc2VVcmwoZSl7aWYoZSl7Y29uc3QgdD1jcmVhdGVWYWxpZEFic29sdXRlVXJsKGUpO2lmKHQpcmV0dXJuIHQuaHJlZjt3YXJuKGBJbnZhbGlkIGFic29sdXRlIGRvY0Jhc2VVcmw6ICIke2V9Ii5gKX1yZXR1cm4gbnVsbH0oZS5kb2NCYXNlVXJsKTt0aGlzLl9kb2NJZD1lLmRvY0lkO3RoaXMuX3Bhc3N3b3JkPWUucGFzc3dvcmQ7dGhpcy5lbmFibGVYZmE9ZS5lbmFibGVYZmE7ZS5ldmFsdWF0b3JPcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkJiY9RmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ7dGhpcy5ldmFsdWF0b3JPcHRpb25zPU9iamVjdC5mcmVlemUoZS5ldmFsdWF0b3JPcHRpb25zKX1nZXQgZG9jSWQoKXtyZXR1cm4gdGhpcy5fZG9jSWR9Z2V0IHBhc3N3b3JkKCl7cmV0dXJuIHRoaXMuX3Bhc3N3b3JkfWdldCBkb2NCYXNlVXJsKCl7cmV0dXJuIHRoaXMuX2RvY0Jhc2VVcmx9Z2V0IGNhdGFsb2coKXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5jYXRhbG9nfWVuc3VyZURvYyhlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LGUsdCl9ZW5zdXJlWFJlZihlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LnhyZWYsZSx0KX1lbnN1cmVDYXRhbG9nKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZyxlLHQpfWdldFBhZ2UoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShlKX1mb250RmFsbGJhY2soZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5mb250RmFsbGJhY2soZSx0KX1sb2FkWGZhRm9udHMoZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5sb2FkWGZhRm9udHMoZSx0KX1sb2FkWGZhSW1hZ2VzKCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUltYWdlcygpfXNlcmlhbGl6ZVhmYURhdGEoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuc2VyaWFsaXplWGZhRGF0YShlKX1jbGVhbnVwKGU9ITEpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmNsZWFudXAoZSl9YXN5bmMgZW5zdXJlKGUsdCxpKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZCIpfXJlcXVlc3RSYW5nZShlLHQpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RSYW5nZWAgY2FsbGVkIil9cmVxdWVzdExvYWRlZFN0cmVhbShlPSExKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX1zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfXVwZGF0ZVBhc3N3b3JkKGUpe3RoaXMuX3Bhc3N3b3JkPWV9dGVybWluYXRlKGUpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkIil9fWNsYXNzIExvY2FsUGRmTWFuYWdlciBleHRlbmRzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0IHQ9bmV3IFN0cmVhbShlLnNvdXJjZSk7dGhpcy5wZGZEb2N1bWVudD1uZXcgUERGRG9jdW1lbnQodGhpcyx0KTt0aGlzLl9sb2FkZWRTdHJlYW1Qcm9taXNlPVByb21pc2UucmVzb2x2ZSh0KX1hc3luYyBlbnN1cmUoZSx0LGkpe2NvbnN0IGE9ZVt0XTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYT9hLmFwcGx5KGUsaSk6YX1yZXF1ZXN0UmFuZ2UoZSx0KXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9cmVxdWVzdExvYWRlZFN0cmVhbShlPSExKXtyZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZX10ZXJtaW5hdGUoZSl7fX1jbGFzcyBOZXR3b3JrUGRmTWFuYWdlciBleHRlbmRzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuc3RyZWFtTWFuYWdlcj1uZXcgQ2h1bmtlZFN0cmVhbU1hbmFnZXIoZS5zb3VyY2Use21zZ0hhbmRsZXI6ZS5oYW5kbGVyLGxlbmd0aDplLmxlbmd0aCxkaXNhYmxlQXV0b0ZldGNoOmUuZGlzYWJsZUF1dG9GZXRjaCxyYW5nZUNodW5rU2l6ZTplLnJhbmdlQ2h1bmtTaXplfSk7dGhpcy5wZGZEb2N1bWVudD1uZXcgUERGRG9jdW1lbnQodGhpcyx0aGlzLnN0cmVhbU1hbmFnZXIuZ2V0U3RyZWFtKCkpfWFzeW5jIGVuc3VyZShlLHQsaSl7dHJ5e2NvbnN0IGE9ZVt0XTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYT9hLmFwcGx5KGUsaSk6YX1jYXRjaChhKXtpZighKGEgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbikpdGhyb3cgYTthd2FpdCB0aGlzLnJlcXVlc3RSYW5nZShhLmJlZ2luLGEuZW5kKTtyZXR1cm4gdGhpcy5lbnN1cmUoZSx0LGkpfX1yZXF1ZXN0UmFuZ2UoZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfXJlcXVlc3RMb2FkZWRTdHJlYW0oZT0hMSl7cmV0dXJuIHRoaXMuc3RyZWFtTWFuYWdlci5yZXF1ZXN0QWxsQ2h1bmtzKGUpfXNlbmRQcm9ncmVzc2l2ZURhdGEoZSl7dGhpcy5zdHJlYW1NYW5hZ2VyLm9uUmVjZWl2ZURhdGEoe2NodW5rOmV9KX10ZXJtaW5hdGUoZSl7dGhpcy5zdHJlYW1NYW5hZ2VyLmFib3J0KGUpfX1jb25zdCBCbz0xLFFvPTIsRW89MSx1bz0yLGZvPTMscG89NCxtbz01LHlvPTYsd289Nyxibz04O2Z1bmN0aW9uIHdyYXBSZWFzb24oZSl7ZSBpbnN0YW5jZW9mIEVycm9yfHwib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfHx1bnJlYWNoYWJsZSgnd3JhcFJlYXNvbjogRXhwZWN0ZWQgInJlYXNvbiIgdG8gYmUgYSAocG9zc2libHkgY2xvbmVkKSBFcnJvci4nKTtzd2l0Y2goZS5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IEFib3J0RXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJNaXNzaW5nUERGRXhjZXB0aW9uIjpyZXR1cm4gbmV3IE1pc3NpbmdQREZFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIlBhc3N3b3JkRXhjZXB0aW9uIjpyZXR1cm4gbmV3IFBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpyZXR1cm4gbmV3IFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5zdGF0dXMpO2Nhc2UiVW5rbm93bkVycm9yRXhjZXB0aW9uIjpyZXR1cm4gbmV3IFVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5kZXRhaWxzKTtkZWZhdWx0OnJldHVybiBuZXcgVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLnRvU3RyaW5nKCkpfX1jbGFzcyBNZXNzYWdlSGFuZGxlcntjb25zdHJ1Y3RvcihlLHQsaSl7dGhpcy5zb3VyY2VOYW1lPWU7dGhpcy50YXJnZXROYW1lPXQ7dGhpcy5jb21PYmo9aTt0aGlzLmNhbGxiYWNrSWQ9MTt0aGlzLnN0cmVhbUlkPTE7dGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZT0+e2NvbnN0IHQ9ZS5kYXRhO2lmKHQudGFyZ2V0TmFtZSE9PXRoaXMuc291cmNlTmFtZSlyZXR1cm47aWYodC5zdHJlYW0pe3RoaXMuI1codCk7cmV0dXJufWlmKHQuY2FsbGJhY2spe2NvbnN0IGU9dC5jYWxsYmFja0lkLGk9dGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tlXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGNhbGxiYWNrICR7ZX1gKTtkZWxldGUgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tlXTtpZih0LmNhbGxiYWNrPT09Qm8paS5yZXNvbHZlKHQuZGF0YSk7ZWxzZXtpZih0LmNhbGxiYWNrIT09UW8pdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNhbGxiYWNrIGNhc2UiKTtpLnJlamVjdCh3cmFwUmVhc29uKHQucmVhc29uKSl9cmV0dXJufWNvbnN0IGE9dGhpcy5hY3Rpb25IYW5kbGVyW3QuYWN0aW9uXTtpZighYSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWN0aW9uIGZyb20gd29ya2VyOiAke3QuYWN0aW9ufWApO2lmKHQuY2FsbGJhY2tJZCl7Y29uc3QgZT10aGlzLnNvdXJjZU5hbWUscj10LnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2UoYSh0LmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbihhKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmUsdGFyZ2V0TmFtZTpyLGNhbGxiYWNrOkJvLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLGRhdGE6YX0pfSksKGZ1bmN0aW9uKGEpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6ZSx0YXJnZXROYW1lOnIsY2FsbGJhY2s6UW8sY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQscmVhc29uOndyYXBSZWFzb24oYSl9KX0pKX1lbHNlIHQuc3RyZWFtSWQ/dGhpcy4jaih0KTphKHQuZGF0YSl9O2kuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UpfW9uKGUsdCl7Y29uc3QgaT10aGlzLmFjdGlvbkhhbmRsZXI7aWYoaVtlXSl0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIiR7ZX0iYCk7aVtlXT10fXNlbmQoZSx0LGkpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246ZSxkYXRhOnR9LGkpfXNlbmRXaXRoUHJvbWlzZShlLHQsaSl7Y29uc3QgYT10aGlzLmNhbGxiYWNrSWQrKyxyPVByb21pc2Uud2l0aFJlc29sdmVycygpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbYV09cjt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGNhbGxiYWNrSWQ6YSxkYXRhOnR9LGkpfWNhdGNoKGUpe3IucmVqZWN0KGUpfXJldHVybiByLnByb21pc2V9c2VuZFdpdGhTdHJlYW0oZSx0LGksYSl7Y29uc3Qgcj10aGlzLnN0cmVhbUlkKysscz10aGlzLnNvdXJjZU5hbWUsbj10aGlzLnRhcmdldE5hbWUsbz10aGlzLmNvbU9iajtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydDppPT57Y29uc3QgZz1Qcm9taXNlLndpdGhSZXNvbHZlcnMoKTt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdPXtjb250cm9sbGVyOmksc3RhcnRDYWxsOmcscHVsbENhbGw6bnVsbCxjYW5jZWxDYWxsOm51bGwsaXNDbG9zZWQ6ITF9O28ucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOm4sYWN0aW9uOmUsc3RyZWFtSWQ6cixkYXRhOnQsZGVzaXJlZFNpemU6aS5kZXNpcmVkU2l6ZX0sYSk7cmV0dXJuIGcucHJvbWlzZX0scHVsbDplPT57Y29uc3QgdD1Qcm9taXNlLndpdGhSZXNvbHZlcnMoKTt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdLnB1bGxDYWxsPXQ7by5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6bixzdHJlYW06eW8sc3RyZWFtSWQ6cixkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplfSk7cmV0dXJuIHQucHJvbWlzZX0sY2FuY2VsOmU9Pnthc3NlcnQoZSBpbnN0YW5jZW9mIEVycm9yLCJjYW5jZWwgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uIik7Y29uc3QgdD1Qcm9taXNlLndpdGhSZXNvbHZlcnMoKTt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdLmNhbmNlbENhbGw9dDt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3JdLmlzQ2xvc2VkPSEwO28ucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOm4sc3RyZWFtOkVvLHN0cmVhbUlkOnIscmVhc29uOndyYXBSZWFzb24oZSl9KTtyZXR1cm4gdC5wcm9taXNlfX0saSl9I2ooZSl7Y29uc3QgdD1lLnN0cmVhbUlkLGk9dGhpcy5zb3VyY2VOYW1lLGE9ZS5zb3VyY2VOYW1lLHI9dGhpcy5jb21PYmoscz10aGlzLG49dGhpcy5hY3Rpb25IYW5kbGVyW2UuYWN0aW9uXSxvPXtlbnF1ZXVlKGUscz0xLG4pe2lmKHRoaXMuaXNDYW5jZWxsZWQpcmV0dXJuO2NvbnN0IG89dGhpcy5kZXNpcmVkU2l6ZTt0aGlzLmRlc2lyZWRTaXplLT1zO2lmKG8+MCYmdGhpcy5kZXNpcmVkU2l6ZTw9MCl7dGhpcy5zaW5rQ2FwYWJpbGl0eT1Qcm9taXNlLndpdGhSZXNvbHZlcnMoKTt0aGlzLnJlYWR5PXRoaXMuc2lua0NhcGFiaWxpdHkucHJvbWlzZX1yLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmksdGFyZ2V0TmFtZTphLHN0cmVhbTpwbyxzdHJlYW1JZDp0LGNodW5rOmV9LG4pfSxjbG9zZSgpe2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt0aGlzLmlzQ2FuY2VsbGVkPSEwO3IucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6aSx0YXJnZXROYW1lOmEsc3RyZWFtOmZvLHN0cmVhbUlkOnR9KTtkZWxldGUgcy5zdHJlYW1TaW5rc1t0XX19LGVycm9yKGUpe2Fzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsImVycm9yIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt0aGlzLmlzQ2FuY2VsbGVkPSEwO3IucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6aSx0YXJnZXROYW1lOmEsc3RyZWFtOm1vLHN0cmVhbUlkOnQscmVhc29uOndyYXBSZWFzb24oZSl9KX19LHNpbmtDYXBhYmlsaXR5OlByb21pc2Uud2l0aFJlc29sdmVycygpLG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTtvLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtvLnJlYWR5PW8uc2lua0NhcGFiaWxpdHkucHJvbWlzZTt0aGlzLnN0cmVhbVNpbmtzW3RdPW87bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QobihlLmRhdGEsbykpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTppLHRhcmdldE5hbWU6YSxzdHJlYW06Ym8sc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTppLHRhcmdldE5hbWU6YSxzdHJlYW06Ym8sc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSkpfSNXKGUpe2NvbnN0IHQ9ZS5zdHJlYW1JZCxpPXRoaXMuc291cmNlTmFtZSxhPWUuc291cmNlTmFtZSxyPXRoaXMuY29tT2JqLHM9dGhpcy5zdHJlYW1Db250cm9sbGVyc1t0XSxuPXRoaXMuc3RyZWFtU2lua3NbdF07c3dpdGNoKGUuc3RyZWFtKXtjYXNlIGJvOmUuc3VjY2Vzcz9zLnN0YXJ0Q2FsbC5yZXNvbHZlKCk6cy5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTticmVhaztjYXNlIHdvOmUuc3VjY2Vzcz9zLnB1bGxDYWxsLnJlc29sdmUoKTpzLnB1bGxDYWxsLnJlamVjdCh3cmFwUmVhc29uKGUucmVhc29uKSk7YnJlYWs7Y2FzZSB5bzppZighbil7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTppLHRhcmdldE5hbWU6YSxzdHJlYW06d28sc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSk7YnJlYWt9bi5kZXNpcmVkU2l6ZTw9MCYmZS5kZXNpcmVkU2l6ZT4wJiZuLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtuLmRlc2lyZWRTaXplPWUuZGVzaXJlZFNpemU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2Uobi5vblB1bGw/LigpKX0pKS50aGVuKChmdW5jdGlvbigpe3IucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6aSx0YXJnZXROYW1lOmEsc3RyZWFtOndvLHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe3IucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6aSx0YXJnZXROYW1lOmEsc3RyZWFtOndvLHN0cmVhbUlkOnQscmVhc29uOndyYXBSZWFzb24oZSl9KX0pKTticmVhaztjYXNlIHBvOmFzc2VydChzLCJlbnF1ZXVlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyIik7aWYocy5pc0Nsb3NlZClicmVhaztzLmNvbnRyb2xsZXIuZW5xdWV1ZShlLmNodW5rKTticmVhaztjYXNlIGZvOmFzc2VydChzLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpO2lmKHMuaXNDbG9zZWQpYnJlYWs7cy5pc0Nsb3NlZD0hMDtzLmNvbnRyb2xsZXIuY2xvc2UoKTt0aGlzLiNYKHMsdCk7YnJlYWs7Y2FzZSBtbzphc3NlcnQocywiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtzLmNvbnRyb2xsZXIuZXJyb3Iod3JhcFJlYXNvbihlLnJlYXNvbikpO3RoaXMuI1gocyx0KTticmVhaztjYXNlIHVvOmUuc3VjY2Vzcz9zLmNhbmNlbENhbGwucmVzb2x2ZSgpOnMuY2FuY2VsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihlLnJlYXNvbikpO3RoaXMuI1gocyx0KTticmVhaztjYXNlIEVvOmlmKCFuKWJyZWFrO25ldyBQcm9taXNlKChmdW5jdGlvbih0KXt0KG4ub25DYW5jZWw/Lih3cmFwUmVhc29uKGUucmVhc29uKSkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTppLHRhcmdldE5hbWU6YSxzdHJlYW06dW8sc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTppLHRhcmdldE5hbWU6YSxzdHJlYW06dW8sc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSkpO24uc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTtuLmlzQ2FuY2VsbGVkPSEwO2RlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW3RdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlIil9fWFzeW5jI1goZSx0KXthd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW2Uuc3RhcnRDYWxsPy5wcm9taXNlLGUucHVsbENhbGw/LnByb21pc2UsZS5jYW5jZWxDYWxsPy5wcm9taXNlXSk7ZGVsZXRlIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbdF19ZGVzdHJveSgpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19Y2xhc3MgUERGV29ya2VyU3RyZWFte2NvbnN0cnVjdG9yKGUpe3RoaXMuX21zZ0hhbmRsZXI9ZTt0aGlzLl9jb250ZW50TGVuZ3RoPW51bGw7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbDt0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzPVtdfWdldEZ1bGxSZWFkZXIoKXthc3NlcnQoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZXb3JrZXJTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4iKTt0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1uZXcgUERGV29ya2VyU3RyZWFtUmVhZGVyKHRoaXMuX21zZ0hhbmRsZXIpO3JldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn1nZXRSYW5nZVJlYWRlcihlLHQpe2NvbnN0IGk9bmV3IFBERldvcmtlclN0cmVhbVJhbmdlUmVhZGVyKGUsdCx0aGlzLl9tc2dIYW5kbGVyKTt0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2goaSk7cmV0dXJuIGl9Y2FuY2VsQWxsUmVxdWVzdHMoZSl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/LmNhbmNlbChlKTtmb3IoY29uc3QgdCBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKXQuY2FuY2VsKGUpfX1jbGFzcyBQREZXb3JrZXJTdHJlYW1SZWFkZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fbXNnSGFuZGxlcj1lO3RoaXMub25Qcm9ncmVzcz1udWxsO3RoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbDt0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExO3RoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSExO2NvbnN0IHQ9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgiR2V0UmVhZGVyIik7dGhpcy5fcmVhZGVyPXQuZ2V0UmVhZGVyKCk7dGhpcy5faGVhZGVyc1JlYWR5PXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJSZWFkZXJIZWFkZXJzUmVhZHkiKS50aGVuKChlPT57dGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9ZS5pc1N0cmVhbWluZ1N1cHBvcnRlZDt0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPWUuaXNSYW5nZVN1cHBvcnRlZDt0aGlzLl9jb250ZW50TGVuZ3RoPWUuY29udGVudExlbmd0aH0pKX1nZXQgaGVhZGVyc1JlYWR5KCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWFkeX1nZXQgY29udGVudExlbmd0aCgpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofWdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH1nZXQgaXNSYW5nZVN1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkfWFzeW5jIHJlYWQoKXtjb25zdHt2YWx1ZTplLGRvbmU6dH09YXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTtyZXR1cm4gdD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Ont2YWx1ZTplLmJ1ZmZlcixkb25lOiExfX1jYW5jZWwoZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19Y2xhc3MgUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXJ7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXMuX21zZ0hhbmRsZXI9aTt0aGlzLm9uUHJvZ3Jlc3M9bnVsbDtjb25zdCBhPXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFJhbmdlUmVhZGVyIix7YmVnaW46ZSxlbmQ6dH0pO3RoaXMuX3JlYWRlcj1hLmdldFJlYWRlcigpfWdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpe3JldHVybiExfWFzeW5jIHJlYWQoKXtjb25zdHt2YWx1ZTplLGRvbmU6dH09YXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTtyZXR1cm4gdD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Ont2YWx1ZTplLmJ1ZmZlcixkb25lOiExfX1jYW5jZWwoZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19Y2xhc3MgV29ya2VyVGFza3tjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9ZTt0aGlzLnRlcm1pbmF0ZWQ9ITE7dGhpcy5fY2FwYWJpbGl0eT1Qcm9taXNlLndpdGhSZXNvbHZlcnMoKX1nZXQgZmluaXNoZWQoKXtyZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlfWZpbmlzaCgpe3RoaXMuX2NhcGFiaWxpdHkucmVzb2x2ZSgpfXRlcm1pbmF0ZSgpe3RoaXMudGVybWluYXRlZD0hMH1lbnN1cmVOb3RUZXJtaW5hdGVkKCl7aWYodGhpcy50ZXJtaW5hdGVkKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHRhc2sgd2FzIHRlcm1pbmF0ZWQiKX19Y2xhc3MgV29ya2VyTWVzc2FnZUhhbmRsZXJ7c3RhdGljIHNldHVwKGUsdCl7bGV0IGk9ITE7ZS5vbigidGVzdCIsKGZ1bmN0aW9uKHQpe2lmKCFpKXtpPSEwO2Uuc2VuZCgidGVzdCIsdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpfX0pKTtlLm9uKCJjb25maWd1cmUiLChmdW5jdGlvbihlKXshZnVuY3Rpb24gc2V0VmVyYm9zaXR5TGV2ZWwoZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKEl0PWUpfShlLnZlcmJvc2l0eSl9KSk7ZS5vbigiR2V0RG9jUmVxdWVzdCIsKGZ1bmN0aW9uKGUpe3JldHVybiBXb3JrZXJNZXNzYWdlSGFuZGxlci5jcmVhdGVEb2N1bWVudEhhbmRsZXIoZSx0KX0pKX1zdGF0aWMgY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGUsdCl7bGV0IGksYT0hMSxyPW51bGw7Y29uc3Qgcz1uZXcgU2V0LG49Z2V0VmVyYm9zaXR5TGV2ZWwoKSx7ZG9jSWQ6byxhcGlWZXJzaW9uOmd9PWUsYz0iNC43Ljc2IjtpZihnIT09Yyl0aHJvdyBuZXcgRXJyb3IoYFRoZSBBUEkgdmVyc2lvbiAiJHtnfSIgZG9lcyBub3QgbWF0Y2ggdGhlIFdvcmtlciB2ZXJzaW9uICIke2N9Ii5gKTtjb25zdCBDPVtdO2Zvcihjb25zdCBlIGluW10pQy5wdXNoKGUpO2lmKEMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIGBBcnJheS5wcm90b3R5cGVgIGNvbnRhaW5zIHVuZXhwZWN0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzOiAiK0Muam9pbigiLCAiKSsiOyB0aHVzIGJyZWFraW5nIGUuZy4gYGZvci4uLmluYCBpdGVyYXRpb24gb2YgYEFycmF5YHMuIik7Y29uc3QgaD1vKyJfd29ya2VyIjtsZXQgbD1uZXcgTWVzc2FnZUhhbmRsZXIoaCxvLHQpO2Z1bmN0aW9uIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKXtpZihhKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkIil9ZnVuY3Rpb24gc3RhcnRXb3JrZXJUYXNrKGUpe3MuYWRkKGUpfWZ1bmN0aW9uIGZpbmlzaFdvcmtlclRhc2soZSl7ZS5maW5pc2goKTtzLmRlbGV0ZShlKX1hc3luYyBmdW5jdGlvbiBsb2FkRG9jdW1lbnQoZSl7YXdhaXQgaS5lbnN1cmVEb2MoImNoZWNrSGVhZGVyIik7YXdhaXQgaS5lbnN1cmVEb2MoInBhcnNlU3RhcnRYUmVmIik7YXdhaXQgaS5lbnN1cmVEb2MoInBhcnNlIixbZV0pO2F3YWl0IGkuZW5zdXJlRG9jKCJjaGVja0ZpcnN0UGFnZSIsW2VdKTthd2FpdCBpLmVuc3VyZURvYygiY2hlY2tMYXN0UGFnZSIsW2VdKTtjb25zdCB0PWF3YWl0IGkuZW5zdXJlRG9jKCJpc1B1cmVYZmEiKTtpZih0KXtjb25zdCBlPW5ldyBXb3JrZXJUYXNrKCJsb2FkWGZhRm9udHMiKTtzdGFydFdvcmtlclRhc2soZSk7YXdhaXQgUHJvbWlzZS5hbGwoW2kubG9hZFhmYUZvbnRzKGwsZSkuY2F0Y2goKGU9Pnt9KSkudGhlbigoKCk9PmZpbmlzaFdvcmtlclRhc2soZSkpKSxpLmxvYWRYZmFJbWFnZXMoKV0pfWNvbnN0W2Escl09YXdhaXQgUHJvbWlzZS5hbGwoW2kuZW5zdXJlRG9jKCJudW1QYWdlcyIpLGkuZW5zdXJlRG9jKCJmaW5nZXJwcmludHMiKV0pO3JldHVybntudW1QYWdlczphLGZpbmdlcnByaW50czpyLGh0bWxGb3JYZmE6dD9hd2FpdCBpLmVuc3VyZURvYygiaHRtbEZvclhmYSIpOm51bGx9fWZ1bmN0aW9uIGdldFBkZk1hbmFnZXIoe2RhdGE6ZSxwYXNzd29yZDp0LGRpc2FibGVBdXRvRmV0Y2g6aSxyYW5nZUNodW5rU2l6ZTphLGxlbmd0aDpzLGRvY0Jhc2VVcmw6bixlbmFibGVYZmE6ZyxldmFsdWF0b3JPcHRpb25zOmN9KXtjb25zdCBDPXtzb3VyY2U6bnVsbCxkaXNhYmxlQXV0b0ZldGNoOmksZG9jQmFzZVVybDpuLGRvY0lkOm8sZW5hYmxlWGZhOmcsZXZhbHVhdG9yT3B0aW9uczpjLGhhbmRsZXI6bCxsZW5ndGg6cyxwYXNzd29yZDp0LHJhbmdlQ2h1bmtTaXplOmF9LGg9UHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7bGV0IFE7aWYoZSl7dHJ5e0Muc291cmNlPWU7UT1uZXcgTG9jYWxQZGZNYW5hZ2VyKEMpO2gucmVzb2x2ZShRKX1jYXRjaChlKXtoLnJlamVjdChlKX1yZXR1cm4gaC5wcm9taXNlfWxldCBFLHU9W107dHJ5e0U9bmV3IFBERldvcmtlclN0cmVhbShsKX1jYXRjaChlKXtoLnJlamVjdChlKTtyZXR1cm4gaC5wcm9taXNlfWNvbnN0IGQ9RS5nZXRGdWxsUmVhZGVyKCk7ZC5oZWFkZXJzUmVhZHkudGhlbigoZnVuY3Rpb24oKXtpZihkLmlzUmFuZ2VTdXBwb3J0ZWQpe0Muc291cmNlPUU7Qy5sZW5ndGg9ZC5jb250ZW50TGVuZ3RoO0MuZGlzYWJsZUF1dG9GZXRjaHx8PWQuaXNTdHJlYW1pbmdTdXBwb3J0ZWQ7UT1uZXcgTmV0d29ya1BkZk1hbmFnZXIoQyk7Zm9yKGNvbnN0IGUgb2YgdSlRLnNlbmRQcm9ncmVzc2l2ZURhdGEoZSk7dT1bXTtoLnJlc29sdmUoUSk7cj1udWxsfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aC5yZWplY3QoZSk7cj1udWxsfSkpO2xldCBmPTA7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7Y29uc3QgcmVhZENodW5rPWZ1bmN0aW9uKHt2YWx1ZTplLGRvbmU6aX0pe3RyeXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7aWYoaSl7UXx8ZnVuY3Rpb24oKXtjb25zdCBlPWFycmF5QnVmZmVyc1RvQnl0ZXModSk7cyYmZS5sZW5ndGghPT1zJiZ3YXJuKCJyZXBvcnRlZCBIVFRQIGxlbmd0aCBpcyBkaWZmZXJlbnQgZnJvbSBhY3R1YWwiKTt0cnl7Qy5zb3VyY2U9ZTtRPW5ldyBMb2NhbFBkZk1hbmFnZXIoQyk7aC5yZXNvbHZlKFEpfWNhdGNoKGUpe2gucmVqZWN0KGUpfXU9W119KCk7cj1udWxsO3JldHVybn1mKz1lLmJ5dGVMZW5ndGg7ZC5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8bC5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDpmLHRvdGFsOk1hdGgubWF4KGYsZC5jb250ZW50TGVuZ3RofHwwKX0pO1E/US5zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpOnUucHVzaChlKTtkLnJlYWQoKS50aGVuKHJlYWRDaHVuayx0KX1jYXRjaChlKXt0KGUpfX07ZC5yZWFkKCkudGhlbihyZWFkQ2h1bmssdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2gucmVqZWN0KGUpO3I9bnVsbH0pKTtyPWZ1bmN0aW9uKGUpe0UuY2FuY2VsQWxsUmVxdWVzdHMoZSl9O3JldHVybiBoLnByb21pc2V9bC5vbigiR2V0UGFnZSIsKGZ1bmN0aW9uKGUpe3JldHVybiBpLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbaS5lbnN1cmUoZSwicm90YXRlIiksaS5lbnN1cmUoZSwicmVmIiksaS5lbnN1cmUoZSwidXNlclVuaXQiKSxpLmVuc3VyZShlLCJ2aWV3IildKS50aGVuKChmdW5jdGlvbihbZSx0LGksYV0pe3JldHVybntyb3RhdGU6ZSxyZWY6dCxyZWZTdHI6dD8udG9TdHJpbmcoKT8/bnVsbCx1c2VyVW5pdDppLHZpZXc6YX19KSl9KSl9KSk7bC5vbigiR2V0UGFnZUluZGV4IiwoZnVuY3Rpb24oZSl7Y29uc3QgdD1SZWYuZ2V0KGUubnVtLGUuZ2VuKTtyZXR1cm4gaS5lbnN1cmVDYXRhbG9nKCJnZXRQYWdlSW5kZXgiLFt0XSl9KSk7bC5vbigiR2V0RGVzdGluYXRpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygiZGVzdGluYXRpb25zIil9KSk7bC5vbigiR2V0RGVzdGluYXRpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmVDYXRhbG9nKCJnZXREZXN0aW5hdGlvbiIsW2UuaWRdKX0pKTtsLm9uKCJHZXRQYWdlTGFiZWxzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygicGFnZUxhYmVscyIpfSkpO2wub24oIkdldFBhZ2VMYXlvdXQiLChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmVDYXRhbG9nKCJwYWdlTGF5b3V0Iil9KSk7bC5vbigiR2V0UGFnZU1vZGUiLChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmVDYXRhbG9nKCJwYWdlTW9kZSIpfSkpO2wub24oIkdldFZpZXdlclByZWZlcmVuY2VzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygidmlld2VyUHJlZmVyZW5jZXMiKX0pKTtsLm9uKCJHZXRPcGVuQWN0aW9uIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygib3BlbkFjdGlvbiIpfSkpO2wub24oIkdldEF0dGFjaG1lbnRzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygiYXR0YWNobWVudHMiKX0pKTtsLm9uKCJHZXREb2NKU0FjdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmVDYXRhbG9nKCJqc0FjdGlvbnMiKX0pKTtsLm9uKCJHZXRQYWdlSlNBY3Rpb25zIiwoZnVuY3Rpb24oe3BhZ2VJbmRleDplfSl7cmV0dXJuIGkuZ2V0UGFnZShlKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmUoZSwianNBY3Rpb25zIil9KSl9KSk7bC5vbigiR2V0T3V0bGluZSIsKGZ1bmN0aW9uKGUpe3JldHVybiBpLmVuc3VyZUNhdGFsb2coImRvY3VtZW50T3V0bGluZSIpfSkpO2wub24oIkdldE9wdGlvbmFsQ29udGVudENvbmZpZyIsKGZ1bmN0aW9uKGUpe3JldHVybiBpLmVuc3VyZUNhdGFsb2coIm9wdGlvbmFsQ29udGVudENvbmZpZyIpfSkpO2wub24oIkdldFBlcm1pc3Npb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygicGVybWlzc2lvbnMiKX0pKTtsLm9uKCJHZXRNZXRhZGF0YSIsKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbaS5lbnN1cmVEb2MoImRvY3VtZW50SW5mbyIpLGkuZW5zdXJlQ2F0YWxvZygibWV0YWRhdGEiKV0pfSkpO2wub24oIkdldE1hcmtJbmZvIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygibWFya0luZm8iKX0pKTtsLm9uKCJHZXREYXRhIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkucmVxdWVzdExvYWRlZFN0cmVhbSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJ5dGVzfSkpfSkpO2wub24oIkdldEFubm90YXRpb25zIiwoZnVuY3Rpb24oe3BhZ2VJbmRleDplLGludGVudDp0fSl7cmV0dXJuIGkuZ2V0UGFnZShlKS50aGVuKChmdW5jdGlvbihpKXtjb25zdCBhPW5ldyBXb3JrZXJUYXNrKGBHZXRBbm5vdGF0aW9uczogcGFnZSAke2V9YCk7c3RhcnRXb3JrZXJUYXNrKGEpO3JldHVybiBpLmdldEFubm90YXRpb25zRGF0YShsLGEsdCkudGhlbigoZT0+e2ZpbmlzaFdvcmtlclRhc2soYSk7cmV0dXJuIGV9KSwoZT0+e2ZpbmlzaFdvcmtlclRhc2soYSk7dGhyb3cgZX0pKX0pKX0pKTtsLm9uKCJHZXRGaWVsZE9iamVjdHMiLChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmVEb2MoImZpZWxkT2JqZWN0cyIpLnRoZW4oKGU9PmU/LmFsbEZpZWxkc3x8bnVsbCkpfSkpO2wub24oIkhhc0pTQWN0aW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiBpLmVuc3VyZURvYygiaGFzSlNBY3Rpb25zIil9KSk7bC5vbigiR2V0Q2FsY3VsYXRpb25PcmRlcklkcyIsKGZ1bmN0aW9uKGUpe3JldHVybiBpLmVuc3VyZURvYygiY2FsY3VsYXRpb25PcmRlcklkcyIpfSkpO2wub24oIlNhdmVEb2N1bWVudCIsKGFzeW5jIGZ1bmN0aW9uKHtpc1B1cmVYZmE6ZSxudW1QYWdlczp0LGFubm90YXRpb25TdG9yYWdlOmEsZmlsZW5hbWU6cn0pe2NvbnN0IHM9W2kucmVxdWVzdExvYWRlZFN0cmVhbSgpLGkuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxpLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtUmVmIiksaS5lbnN1cmVEb2MoInN0YXJ0WFJlZiIpLGkuZW5zdXJlRG9jKCJ4cmVmIiksaS5lbnN1cmVEb2MoImxpbmVhcml6YXRpb24iKSxpLmVuc3VyZUNhdGFsb2coInN0cnVjdFRyZWVSb290IildLG49W10sbz1lP251bGw6Z2V0TmV3QW5ub3RhdGlvbnNNYXAoYSksW2csYyxDLGgsUSxFLHVdPWF3YWl0IFByb21pc2UuYWxsKHMpLGQ9US50cmFpbGVyLmdldFJhdygiUm9vdCIpfHxudWxsO2xldCBmO2lmKG8pe3U/YXdhaXQgdS5jYW5VcGRhdGVTdHJ1Y3RUcmVlKHtwZGZNYW5hZ2VyOmkseHJlZjpRLG5ld0Fubm90YXRpb25zQnlQYWdlOm99KSYmKGY9dSk6YXdhaXQgU3RydWN0VHJlZVJvb3QuY2FuQ3JlYXRlU3RydWN0dXJlVHJlZSh7Y2F0YWxvZ1JlZjpkLHBkZk1hbmFnZXI6aSxuZXdBbm5vdGF0aW9uc0J5UGFnZTpvfSkmJihmPW51bGwpO2NvbnN0IGU9QW5ub3RhdGlvbkZhY3RvcnkuZ2VuZXJhdGVJbWFnZXMoYS52YWx1ZXMoKSxRLGkuZXZhbHVhdG9yT3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCksdD12b2lkIDA9PT1mP246W107Zm9yKGNvbnN0W2Escl1vZiBvKXQucHVzaChpLmdldFBhZ2UoYSkudGhlbigodD0+e2NvbnN0IGk9bmV3IFdvcmtlclRhc2soYFNhdmUgKGVkaXRvcik6IHBhZ2UgJHthfWApO3JldHVybiB0LnNhdmVOZXdBbm5vdGF0aW9ucyhsLGkscixlKS5maW5hbGx5KChmdW5jdGlvbigpe2ZpbmlzaFdvcmtlclRhc2soaSl9KSl9KSkpO251bGw9PT1mP24ucHVzaChQcm9taXNlLmFsbCh0KS50aGVuKChhc3luYyBlPT57YXdhaXQgU3RydWN0VHJlZVJvb3QuY3JlYXRlU3RydWN0dXJlVHJlZSh7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6byx4cmVmOlEsY2F0YWxvZ1JlZjpkLHBkZk1hbmFnZXI6aSxuZXdSZWZzOmV9KTtyZXR1cm4gZX0pKSk6ZiYmbi5wdXNoKFByb21pc2UuYWxsKHQpLnRoZW4oKGFzeW5jIGU9Pnthd2FpdCBmLnVwZGF0ZVN0cnVjdHVyZVRyZWUoe25ld0Fubm90YXRpb25zQnlQYWdlOm8scGRmTWFuYWdlcjppLG5ld1JlZnM6ZX0pO3JldHVybiBlfSkpKX1pZihlKW4ucHVzaChpLnNlcmlhbGl6ZVhmYURhdGEoYSkpO2Vsc2UgZm9yKGxldCBlPTA7ZTx0O2UrKyluLnB1c2goaS5nZXRQYWdlKGUpLnRoZW4oKGZ1bmN0aW9uKHQpe2NvbnN0IGk9bmV3IFdvcmtlclRhc2soYFNhdmU6IHBhZ2UgJHtlfWApO3JldHVybiB0LnNhdmUobCxpLGEpLmZpbmFsbHkoKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayhpKX0pKX0pKSk7Y29uc3QgcD1hd2FpdCBQcm9taXNlLmFsbChuKTtsZXQgbT1bXSx5PW51bGw7aWYoZSl7eT1wWzBdO2lmKCF5KXJldHVybiBnLmJ5dGVzfWVsc2V7bT1wLmZsYXQoMik7aWYoMD09PW0ubGVuZ3RoKXJldHVybiBnLmJ5dGVzfWNvbnN0IHc9QyYmYyBpbnN0YW5jZW9mIERpY3QmJm0uc29tZSgoZT0+ZS5uZWVkQXBwZWFyYW5jZXMpKSxiPWMgaW5zdGFuY2VvZiBEaWN0JiZjLmdldCgiWEZBIil8fG51bGw7bGV0IEQ9bnVsbCxTPSExO2lmKEFycmF5LmlzQXJyYXkoYikpe2ZvcihsZXQgZT0wLHQ9Yi5sZW5ndGg7ZTx0O2UrPTIpaWYoImRhdGFzZXRzIj09PWJbZV0pe0Q9YltlKzFdO1M9ITB9bnVsbD09PUQmJihEPVEuZ2V0TmV3VGVtcG9yYXJ5UmVmKCkpfWVsc2UgYiYmd2FybigiVW5zdXBwb3J0ZWQgWEZBIHR5cGUuIik7bGV0IGs9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihRLnRyYWlsZXIpe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PVEudHJhaWxlci5nZXQoIkluZm8iKXx8bnVsbDt0IGluc3RhbmNlb2YgRGljdCYmdC5mb3JFYWNoKCgodCxpKT0+eyJzdHJpbmciPT10eXBlb2YgaSYmKGVbdF09c3RyaW5nVG9QREZTdHJpbmcoaSkpfSkpO2s9e3Jvb3RSZWY6ZCxlbmNyeXB0UmVmOlEudHJhaWxlci5nZXRSYXcoIkVuY3J5cHQiKXx8bnVsbCxuZXdSZWY6US5nZXROZXdUZW1wb3JhcnlSZWYoKSxpbmZvUmVmOlEudHJhaWxlci5nZXRSYXcoIkluZm8iKXx8bnVsbCxpbmZvOmUsZmlsZUlkczpRLnRyYWlsZXIuZ2V0KCJJRCIpfHxudWxsLHN0YXJ0WFJlZjpFP2g6US5sYXN0WFJlZlN0cmVhbVBvcz8/aCxmaWxlbmFtZTpyfX1yZXR1cm4gaW5jcmVtZW50YWxVcGRhdGUoe29yaWdpbmFsRGF0YTpnLmJ5dGVzLHhyZWZJbmZvOmssbmV3UmVmczptLHhyZWY6USxoYXNYZmE6ISFiLHhmYURhdGFzZXRzUmVmOkQsaGFzWGZhRGF0YXNldHNFbnRyeTpTLG5lZWRBcHBlYXJhbmNlczp3LGFjcm9Gb3JtUmVmOkMsYWNyb0Zvcm06Yyx4ZmFEYXRhOnksdXNlWHJlZlN0cmVhbTppc0RpY3QoUS50b3BEaWN0LCJYUmVmIil9KS5maW5hbGx5KCgoKT0+e1EucmVzZXROZXdUZW1wb3JhcnlSZWYoKX0pKX0pKTtsLm9uKCJHZXRPcGVyYXRvckxpc3QiLChmdW5jdGlvbihlLHQpe2NvbnN0IGE9ZS5wYWdlSW5kZXg7aS5nZXRQYWdlKGEpLnRoZW4oKGZ1bmN0aW9uKGkpe2NvbnN0IHI9bmV3IFdvcmtlclRhc2soYEdldE9wZXJhdG9yTGlzdDogcGFnZSAke2F9YCk7c3RhcnRXb3JrZXJUYXNrKHIpO2NvbnN0IHM9bj49d0EuSU5GT1M/RGF0ZS5ub3coKTowO2kuZ2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOmwsc2luazp0LHRhc2s6cixpbnRlbnQ6ZS5pbnRlbnQsY2FjaGVLZXk6ZS5jYWNoZUtleSxhbm5vdGF0aW9uU3RvcmFnZTplLmFubm90YXRpb25TdG9yYWdlLG1vZGlmaWVkSWRzOmUubW9kaWZpZWRJZHN9KS50aGVuKChmdW5jdGlvbihlKXtmaW5pc2hXb3JrZXJUYXNrKHIpO3MmJmluZm8oYHBhZ2U9JHthKzF9IC0gZ2V0T3BlcmF0b3JMaXN0OiB0aW1lPSR7RGF0ZS5ub3coKS1zfW1zLCBsZW49JHtlLmxlbmd0aH1gKTt0LmNsb3NlKCl9KSwoZnVuY3Rpb24oZSl7ZmluaXNoV29ya2VyVGFzayhyKTtyLnRlcm1pbmF0ZWR8fHQuZXJyb3IoZSl9KSl9KSl9KSk7bC5vbigiR2V0VGV4dENvbnRlbnQiLChmdW5jdGlvbihlLHQpe2NvbnN0e3BhZ2VJbmRleDphLGluY2x1ZGVNYXJrZWRDb250ZW50OnIsZGlzYWJsZU5vcm1hbGl6YXRpb246c309ZTtpLmdldFBhZ2UoYSkudGhlbigoZnVuY3Rpb24oZSl7Y29uc3QgaT1uZXcgV29ya2VyVGFzaygiR2V0VGV4dENvbnRlbnQ6IHBhZ2UgIithKTtzdGFydFdvcmtlclRhc2soaSk7Y29uc3Qgbz1uPj13QS5JTkZPUz9EYXRlLm5vdygpOjA7ZS5leHRyYWN0VGV4dENvbnRlbnQoe2hhbmRsZXI6bCx0YXNrOmksc2luazp0LGluY2x1ZGVNYXJrZWRDb250ZW50OnIsZGlzYWJsZU5vcm1hbGl6YXRpb246c30pLnRoZW4oKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayhpKTtvJiZpbmZvKGBwYWdlPSR7YSsxfSAtIGdldFRleHRDb250ZW50OiB0aW1lPWArKERhdGUubm93KCktbykrIm1zIik7dC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe2ZpbmlzaFdvcmtlclRhc2soaSk7aS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpO2wub24oIkdldFN0cnVjdFRyZWUiLChmdW5jdGlvbihlKXtyZXR1cm4gaS5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmUoZSwiZ2V0U3RydWN0VHJlZSIpfSkpfSkpO2wub24oIkZvbnRGYWxsYmFjayIsKGZ1bmN0aW9uKGUpe3JldHVybiBpLmZvbnRGYWxsYmFjayhlLmlkLGwpfSkpO2wub24oIkNsZWFudXAiLChmdW5jdGlvbihlKXtyZXR1cm4gaS5jbGVhbnVwKCEwKX0pKTtsLm9uKCJUZXJtaW5hdGUiLChmdW5jdGlvbihlKXthPSEwO2NvbnN0IHQ9W107aWYoaSl7aS50ZXJtaW5hdGUobmV3IEFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpO2NvbnN0IGU9aS5jbGVhbnVwKCk7dC5wdXNoKGUpO2k9bnVsbH1lbHNlIGNsZWFyR2xvYmFsQ2FjaGVzKCk7ciYmcihuZXcgQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7Zm9yKGNvbnN0IGUgb2Ygcyl7dC5wdXNoKGUuZmluaXNoZWQpO2UudGVybWluYXRlKCl9cmV0dXJuIFByb21pc2UuYWxsKHQpLnRoZW4oKGZ1bmN0aW9uKCl7bC5kZXN0cm95KCk7bD1udWxsfSkpfSkpO2wub24oIlJlYWR5IiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHNldHVwRG9jKGUpe2Z1bmN0aW9uIG9uU3VjY2VzcyhlKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7bC5zZW5kKCJHZXREb2MiLHtwZGZJbmZvOmV9KX1mdW5jdGlvbiBvbkZhaWx1cmUoZSl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2lmKGUgaW5zdGFuY2VvZiBQYXNzd29yZEV4Y2VwdGlvbil7Y29uc3QgdD1uZXcgV29ya2VyVGFzayhgUGFzc3dvcmRFeGNlcHRpb246IHJlc3BvbnNlICR7ZS5jb2RlfWApO3N0YXJ0V29ya2VyVGFzayh0KTtsLnNlbmRXaXRoUHJvbWlzZSgiUGFzc3dvcmRSZXF1ZXN0IixlKS50aGVuKChmdW5jdGlvbih7cGFzc3dvcmQ6ZX0pe2ZpbmlzaFdvcmtlclRhc2sodCk7aS51cGRhdGVQYXNzd29yZChlKTtwZGZNYW5hZ2VyUmVhZHkoKX0pKS5jYXRjaCgoZnVuY3Rpb24oKXtmaW5pc2hXb3JrZXJUYXNrKHQpO2wuc2VuZCgiRG9jRXhjZXB0aW9uIixlKX0pKX1lbHNlIGUgaW5zdGFuY2VvZiBJbnZhbGlkUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2YgTWlzc2luZ1BERkV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIFVua25vd25FcnJvckV4Y2VwdGlvbj9sLnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSk6bC5zZW5kKCJEb2NFeGNlcHRpb24iLG5ldyBVbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUudG9TdHJpbmcoKSkpfWZ1bmN0aW9uIHBkZk1hbmFnZXJSZWFkeSgpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtsb2FkRG9jdW1lbnQoITEpLnRoZW4ob25TdWNjZXNzLChmdW5jdGlvbihlKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7ZSBpbnN0YW5jZW9mIFhSZWZQYXJzZUV4Y2VwdGlvbj9pLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbigpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtsb2FkRG9jdW1lbnQoITApLnRoZW4ob25TdWNjZXNzLG9uRmFpbHVyZSl9KSk6b25GYWlsdXJlKGUpfSkpfWVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtnZXRQZGZNYW5hZ2VyKGUpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGEpe2UudGVybWluYXRlKG5ldyBBYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTt0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgdGVybWluYXRlZCIpfWk9ZTtpLnJlcXVlc3RMb2FkZWRTdHJlYW0oITApLnRoZW4oKGU9PntsLnNlbmQoIkRhdGFMb2FkZWQiLHtsZW5ndGg6ZS5ieXRlcy5ieXRlTGVuZ3RofSl9KSl9KSkudGhlbihwZGZNYW5hZ2VyUmVhZHksb25GYWlsdXJlKX0oZSk7ZT1udWxsfSkpO3JldHVybiBofXN0YXRpYyBpbml0aWFsaXplRnJvbVBvcnQoZSl7Y29uc3QgdD1uZXcgTWVzc2FnZUhhbmRsZXIoIndvcmtlciIsIm1haW4iLGUpO1dvcmtlck1lc3NhZ2VIYW5kbGVyLnNldHVwKHQsZSk7dC5zZW5kKCJyZWFkeSIsbnVsbCl9fSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93JiYhaSYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZmdW5jdGlvbiBpc01lc3NhZ2VQb3J0KGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnBvc3RNZXNzYWdlJiYib25tZXNzYWdlImluIGV9KHNlbGYpJiZXb3JrZXJNZXNzYWdlSGFuZGxlci5pbml0aWFsaXplRnJvbVBvcnQoc2VsZik7dmFyIERvPV9fd2VicGFja19leHBvcnRzX18uV29ya2VyTWVzc2FnZUhhbmRsZXI7ZXhwb3J0e0RvIGFzIFdvcmtlck1lc3NhZ2VIYW5kbGVyfTs=\";\nfunction T2(s, U, l) {\n const d = s.contentWindow.document.createElement(\"style\");\n d.textContent = `\n @page {\n margin: 3mm;\n size: ${U}pt ${l}pt;\n }\n body {\n margin: 0;\n }\n canvas {\n width: 100%;\n page-break-after: always;\n page-break-before: avoid;\n page-break-inside: avoid;\n }\n `, s.contentWindow.document.head.appendChild(d), s.contentWindow.document.body.style.width = \"100%\";\n}\nfunction S2(s) {\n return new Promise((U) => {\n const l = document.createElement(\"iframe\");\n l.width = \"0\", l.height = \"0\", l.style.position = \"absolute\", l.style.top = \"0\", l.style.left = \"0\", l.style.border = \"none\", l.style.overflow = \"hidden\", l.onload = () => U(l), s.appendChild(l);\n });\n}\nfunction X2(s, U) {\n const l = URL.createObjectURL(\n new Blob([s], {\n type: \"application/pdf\"\n })\n ), d = document.createElement(\"a\");\n d.href = l, d.download = U, d.style.display = \"none\", document.body.append(d), d.click(), setTimeout(() => {\n URL.revokeObjectURL(l), document.body.removeChild(d);\n }, 1e3);\n}\nfunction uR(s) {\n for (; s != null && s.firstChild; )\n s.removeChild(s.firstChild);\n}\nfunction pV(s) {\n s == null || s.querySelectorAll(\"canvas\").forEach((U) => {\n var l;\n U.width = 1, U.height = 1, (l = U.getContext(\"2d\")) == null || l.clearRect(0, 0, 1, 1);\n });\n}\nfunction YR(s) {\n return Object.prototype.hasOwnProperty.call(s, \"_pdfInfo\");\n}\nfunction We({\n onError: s,\n onPasswordRequest: U,\n onProgress: l,\n source: d\n}) {\n const t = Ea(null), Z = Ea(null);\n return Qb(async () => {\n const F = dR(d);\n if (F) {\n if (YR(F)) {\n t.value = F;\n return;\n }\n try {\n Z.value = J2(\n F\n ), U && (Z.value.onPassword = (c, Q) => {\n U({\n callback: c,\n isWrongPassword: Q === m2.INCORRECT_PASSWORD\n });\n }), l && (Z.value.onProgress = l), t.value = await Z.value.promise;\n } catch (c) {\n if (t.value = null, s)\n s(c);\n else\n throw c;\n }\n }\n }), CV(t, (F, c) => {\n c == null || c.destroy();\n }), VN(() => {\n var F, c, Q, a;\n (F = Z.value) != null && F.onPassword && (Z.value.onPassword = null), (c = Z.value) != null && c.onProgress && (Z.value.onProgress = null), (Q = Z.value) == null || Q.destroy(), YR(dR(d)) || (a = t.value) == null || a.destroy();\n }), {\n doc: t\n };\n}\nvar Bn = {};\nBn.d = (s, U) => {\n for (var l in U)\n Bn.o(U, l) && !Bn.o(s, l) && Object.defineProperty(s, l, { enumerable: !0, get: U[l] });\n};\nBn.o = (s, U) => Object.prototype.hasOwnProperty.call(s, U);\nvar Bl = globalThis.pdfjsViewer = {};\nBn.d(Bl, {\n AnnotationLayerBuilder: () => (\n /* reexport */\n Se\n ),\n DownloadManager: () => (\n /* reexport */\n MM\n ),\n EventBus: () => (\n /* reexport */\n Xe\n ),\n FindState: () => (\n /* reexport */\n Pt\n ),\n GenericL10n: () => (\n /* reexport */\n Ac\n ),\n LinkTarget: () => (\n /* reexport */\n PZ\n ),\n PDFFindController: () => (\n /* reexport */\n cM\n ),\n PDFHistory: () => (\n /* reexport */\n eJ\n ),\n PDFLinkService: () => (\n /* reexport */\n xa\n ),\n PDFPageView: () => (\n /* reexport */\n Ke\n ),\n PDFScriptingManager: () => (\n /* reexport */\n pJ\n ),\n PDFSinglePageViewer: () => (\n /* reexport */\n zJ\n ),\n PDFViewer: () => (\n /* reexport */\n Ae\n ),\n ProgressBar: () => (\n /* reexport */\n E2\n ),\n RenderingStates: () => (\n /* reexport */\n kl\n ),\n ScrollMode: () => (\n /* reexport */\n al\n ),\n SimpleLinkService: () => (\n /* reexport */\n Ai\n ),\n SpreadMode: () => (\n /* reexport */\n bU\n ),\n StructTreeLayerBuilder: () => (\n /* reexport */\n Ce\n ),\n TextLayerBuilder: () => (\n /* reexport */\n ga\n ),\n XfaLayerBuilder: () => (\n /* reexport */\n ge\n ),\n parseQueryString: () => (\n /* reexport */\n mV\n )\n});\nconst u2 = \"auto\", ie = 1, oR = 1.1, Y2 = 0.1, o2 = 10, BV = 0, p2 = 1.25, pR = 40, BR = 5, kl = {\n INITIAL: 0,\n RUNNING: 1,\n PAUSED: 2,\n FINISHED: 3\n}, L0 = {\n UNKNOWN: 0,\n NORMAL: 1,\n CHANGING: 2,\n FULLSCREEN: 3\n}, Ad = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_PERMISSIONS: 2\n}, al = {\n UNKNOWN: -1,\n VERTICAL: 0,\n HORIZONTAL: 1,\n WRAPPED: 2,\n PAGE: 3\n}, bU = {\n UNKNOWN: -1,\n NONE: 0,\n ODD: 1,\n EVEN: 2\n};\nfunction Re(s, U, l = !1) {\n let d = s.offsetParent;\n if (!d) {\n console.error(\"offsetParent is not set -- cannot scroll\");\n return;\n }\n let t = s.offsetTop + s.clientTop, Z = s.offsetLeft + s.clientLeft;\n for (; d.clientHeight === d.scrollHeight && d.clientWidth === d.scrollWidth || l && (d.classList.contains(\"markedContent\") || getComputedStyle(d).overflow === \"hidden\"); )\n if (t += d.offsetTop, Z += d.offsetLeft, d = d.offsetParent, !d)\n return;\n U && (U.top !== void 0 && (t += U.top), U.left !== void 0 && (Z += U.left, d.scrollLeft = Z)), d.scrollTop = t;\n}\nfunction B2(s, U, l = void 0) {\n const d = function(F) {\n Z || (Z = window.requestAnimationFrame(function() {\n Z = null;\n const Q = s.scrollLeft, a = t.lastX;\n Q !== a && (t.right = Q > a), t.lastX = Q;\n const V = s.scrollTop, W = t.lastY;\n V !== W && (t.down = V > W), t.lastY = V, U(t);\n }));\n }, t = {\n right: !0,\n down: !0,\n lastX: s.scrollLeft,\n lastY: s.scrollTop,\n _eventHandler: d\n };\n let Z = null;\n return s.addEventListener(\"scroll\", d, {\n useCapture: !0,\n signal: l\n }), l == null || l.addEventListener(\"abort\", () => window.cancelAnimationFrame(Z), {\n once: !0\n }), t;\n}\nfunction mV(s) {\n const U = /* @__PURE__ */ new Map();\n for (const [l, d] of new URLSearchParams(s))\n U.set(l.toLowerCase(), d);\n return U;\n}\nconst yR = /[\\x00-\\x1F]/g;\nfunction yn(s, U = !1) {\n return yR.test(s) ? U ? s.replaceAll(yR, (l) => l === \"\\0\" ? \"\" : \" \") : s.replaceAll(\"\\0\", \"\") : s;\n}\nfunction rn(s, U, l = 0) {\n let d = l, t = s.length - 1;\n if (t < 0 || !U(s[t]))\n return s.length;\n if (U(s[d]))\n return d;\n for (; d < t; ) {\n const Z = d + t >> 1, F = s[Z];\n U(F) ? t = Z : d = Z + 1;\n }\n return d;\n}\nfunction LR(s) {\n if (Math.floor(s) === s)\n return [s, 1];\n const U = 1 / s, l = 8;\n if (U > l)\n return [1, l];\n if (Math.floor(U) === U)\n return [1, U];\n const d = s > 1 ? U : s;\n let t = 0, Z = 1, F = 1, c = 1;\n for (; ; ) {\n const a = t + F, V = Z + c;\n if (V > l)\n break;\n d <= a / V ? (F = a, c = V) : (t = a, Z = V);\n }\n let Q;\n return d - t / Z < F / c - d ? Q = d === s ? [t, Z] : [Z, t] : Q = d === s ? [F, c] : [c, F], Q;\n}\nfunction xQ(s, U) {\n return s - s % U;\n}\nfunction y2(s, U, l) {\n if (s < 2)\n return s;\n let d = U[s].div, t = d.offsetTop + d.clientTop;\n t >= l && (d = U[s - 1].div, t = d.offsetTop + d.clientTop);\n for (let Z = s - 2; Z >= 0 && (d = U[Z].div, !(d.offsetTop + d.clientTop + d.clientHeight <= t)); --Z)\n s = Z;\n return s;\n}\nfunction L2({\n scrollEl: s,\n views: U,\n sortByVisibility: l = !1,\n horizontal: d = !1,\n rtl: t = !1\n}) {\n const Z = s.scrollTop, F = Z + s.clientHeight, c = s.scrollLeft, Q = c + s.clientWidth;\n function a(G) {\n const T = G.div;\n return T.offsetTop + T.clientTop + T.clientHeight > Z;\n }\n function V(G) {\n const T = G.div, u = T.offsetLeft + T.clientLeft, X = u + T.clientWidth;\n return t ? u < Q : X > c;\n }\n const W = [], i = /* @__PURE__ */ new Set(), R = U.length;\n let N = rn(U, d ? V : a);\n N > 0 && N < R && !d && (N = y2(N, U, Z));\n let b = d ? Q : -1;\n for (let G = N; G < R; G++) {\n const T = U[G], u = T.div, X = u.offsetLeft + u.clientLeft, Y = u.offsetTop + u.clientTop, o = u.clientWidth, y = u.clientHeight, S = X + o, p = Y + y;\n if (b === -1)\n p >= F && (b = p);\n else if ((d ? X : Y) > b)\n break;\n if (p <= Z || Y >= F || S <= c || X >= Q)\n continue;\n const L = Math.max(0, Z - Y) + Math.max(0, p - F), I = Math.max(0, c - X) + Math.max(0, S - Q), D = (y - L) / y, r = (o - I) / o, w = D * r * 100 | 0;\n W.push({\n id: T.id,\n x: X,\n y: Y,\n view: T,\n percent: w,\n widthPercent: r * 100 | 0\n }), i.add(T.id);\n }\n const J = W[0], M = W.at(-1);\n return l && W.sort(function(G, T) {\n const u = G.percent - T.percent;\n return Math.abs(u) > 1e-3 ? -u : G.id - T.id;\n }), {\n first: J,\n last: M,\n views: W,\n ids: i\n };\n}\nfunction Ne(s) {\n return Number.isInteger(s) && s % 90 === 0;\n}\nfunction z2(s) {\n return Number.isInteger(s) && Object.values(al).includes(s) && s !== al.UNKNOWN;\n}\nfunction k2(s) {\n return Number.isInteger(s) && Object.values(bU).includes(s) && s !== bU.UNKNOWN;\n}\nfunction zR(s) {\n return s.width <= s.height;\n}\nnew Promise(function(s) {\n window.requestAnimationFrame(s);\n});\nconst I2 = document.documentElement.style;\nfunction D2(s, U, l) {\n return Math.min(Math.max(s, U), l);\n}\nvar SZ, AF, XZ, Bc, _F;\nclass E2 {\n constructor(U) {\n m(this, SZ, null);\n m(this, AF, null);\n m(this, XZ, 0);\n m(this, Bc, null);\n m(this, _F, !0);\n e(this, SZ, U.classList), e(this, Bc, U.style);\n }\n get percent() {\n return n(this, XZ);\n }\n set percent(U) {\n if (e(this, XZ, D2(U, 0, 100)), isNaN(U)) {\n n(this, SZ).add(\"indeterminate\");\n return;\n }\n n(this, SZ).remove(\"indeterminate\"), n(this, Bc).setProperty(\"--progressBar-percent\", `${n(this, XZ)}%`);\n }\n setWidth(U) {\n if (!U)\n return;\n const d = U.parentNode.offsetWidth - U.offsetWidth;\n d > 0 && n(this, Bc).setProperty(\"--progressBar-end-offset\", `${d}px`);\n }\n setDisableAutoFetch(U = 5e3) {\n n(this, XZ) === 100 || isNaN(n(this, XZ)) || (n(this, AF) && clearTimeout(n(this, AF)), this.show(), e(this, AF, setTimeout(() => {\n e(this, AF, null), this.hide();\n }, U)));\n }\n hide() {\n n(this, _F) && (e(this, _F, !1), n(this, SZ).add(\"hidden\"));\n }\n show() {\n n(this, _F) || (e(this, _F, !0), n(this, SZ).remove(\"hidden\"));\n }\n}\nSZ = new WeakMap(), AF = new WeakMap(), XZ = new WeakMap(), Bc = new WeakMap(), _F = new WeakMap();\nfunction r2(s) {\n let U = al.VERTICAL, l = bU.NONE;\n switch (s) {\n case \"SinglePage\":\n U = al.PAGE;\n break;\n case \"OneColumn\":\n break;\n case \"TwoPageLeft\":\n U = al.PAGE;\n case \"TwoColumnLeft\":\n l = bU.ODD;\n break;\n case \"TwoPageRight\":\n U = al.PAGE;\n case \"TwoColumnRight\":\n l = bU.EVEN;\n break;\n }\n return {\n scrollMode: U,\n spreadMode: l\n };\n}\nconst jQ = function() {\n const s = document.createElement(\"div\");\n return s.style.width = \"round(down, calc(1.6666666666666665 * 792px), 1px)\", s.style.width === \"calc(1320px)\" ? Math.fround : (U) => U;\n}(), sd = {\n SPACE: 0,\n ALPHA_LETTER: 1,\n PUNCT: 2,\n HAN_LETTER: 3,\n KATAKANA_LETTER: 4,\n HIRAGANA_LETTER: 5,\n HALFWIDTH_KATAKANA_LETTER: 6,\n THAI_LETTER: 7\n};\nfunction C2(s) {\n return s < 11904;\n}\nfunction w2(s) {\n return (s & 65408) === 0;\n}\nfunction x2(s) {\n return s >= 97 && s <= 122 || s >= 65 && s <= 90;\n}\nfunction j2(s) {\n return s >= 48 && s <= 57;\n}\nfunction O2(s) {\n return s === 32 || s === 9 || s === 13 || s === 10;\n}\nfunction g2(s) {\n return s >= 13312 && s <= 40959 || s >= 63744 && s <= 64255;\n}\nfunction K2(s) {\n return s >= 12448 && s <= 12543;\n}\nfunction v2(s) {\n return s >= 12352 && s <= 12447;\n}\nfunction H2(s) {\n return s >= 65376 && s <= 65439;\n}\nfunction P2(s) {\n return (s & 65408) === 3584;\n}\nfunction OQ(s) {\n return C2(s) ? w2(s) ? O2(s) ? sd.SPACE : x2(s) || j2(s) || s === 95 ? sd.ALPHA_LETTER : sd.PUNCT : P2(s) ? sd.THAI_LETTER : s === 160 ? sd.SPACE : sd.ALPHA_LETTER : g2(s) ? sd.HAN_LETTER : K2(s) ? sd.KATAKANA_LETTER : v2(s) ? sd.HIRAGANA_LETTER : H2(s) ? sd.HALFWIDTH_KATAKANA_LETTER : sd.ALPHA_LETTER;\n}\nlet kR;\nfunction f2() {\n return kR || (kR = \" ¨ª¯²-µ¸-º¼-¾IJ-ijĿ-ŀʼnſDŽ-njDZ-dzʰ-ʸ˘-˝ˠ-ˤʹͺ;΄-΅·ϐ-ϖϰ-ϲϴ-ϵϹևٵ-ٸक़-य़ড়-ঢ়য়ਲ਼ਸ਼ਖ਼-ਜ਼ਫ਼ଡ଼-ଢ଼ำຳໜ-ໝ༌གྷཌྷདྷབྷཛྷཀྵჼᴬ-ᴮᴰ-ᴺᴼ-ᵍᵏ-ᵪᵸᶛ-ᶿẚ-ẛάέήίόύώΆ᾽-῁ΈΉ῍-῏ΐΊ῝-῟ΰΎ῭-`ΌΏ´-῾ - ‑‗․-… ″-‴‶-‷‼‾⁇-⁉⁗ ⁰-ⁱ⁴-₎ₐ-ₜ₨℀-℃℅-ℇ℉-ℓℕ-№ℙ-ℝ℠-™ℤΩℨK-ℭℯ-ℱℳ-ℹ℻-⅀ⅅ-ⅉ⅐-ⅿ↉∬-∭∯-∰〈-〉①-⓪⨌⩴-⩶⫝̸ⱼ-ⱽⵯ⺟⻳⼀-⿕ 〶〸-〺゛-゜ゟヿㄱ-ㆎ㆒-㆟㈀-㈞㈠-㉇㉐-㉾㊀-㏿ꚜ-ꚝꝰꟲ-ꟴꟸ-ꟹꭜ-ꭟꭩ豈-嗀塚晴凞-羽蘒諸逸-都飯-舘並-龎ff-stﬓ-ﬗיִײַ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-﷼︐-︙︰-﹄﹇-﹒﹔-﹦﹨-﹫ﹰ-ﹲﹴﹶ-ﻼ!-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ¢-₩\"), kR;\n}\nconst Pt = {\n FOUND: 0,\n NOT_FOUND: 1,\n WRAPPED: 2,\n PENDING: 3\n}, A2 = 250, _2 = -50, q2 = -400, IR = {\n \"‐\": \"-\",\n \"‘\": \"'\",\n \"’\": \"'\",\n \"‚\": \"'\",\n \"‛\": \"'\",\n \"“\": '\"',\n \"”\": '\"',\n \"„\": '\"',\n \"‟\": '\"',\n \"¼\": \"1/4\",\n \"½\": \"1/2\",\n \"¾\": \"3/4\"\n}, DR = /* @__PURE__ */ new Set([12441, 12442, 2381, 2509, 2637, 2765, 2893, 3021, 3149, 3277, 3387, 3388, 3405, 3530, 3642, 3770, 3972, 4153, 4154, 5908, 5940, 6098, 6752, 6980, 7082, 7083, 7154, 7155, 11647, 43014, 43052, 43204, 43347, 43456, 43766, 44013, 3158, 3953, 3954, 3962, 3963, 3964, 3965, 3968, 3956]);\nlet ER;\nconst $2 = new RegExp(\"\\\\p{M}+\", \"gu\"), lM = new RegExp(\"([.*+?^${}()|[\\\\]\\\\\\\\])|(\\\\p{P})|(\\\\s+)|(\\\\p{M})|(\\\\p{L})\", \"gu\"), UM = new RegExp(\"([^\\\\p{M}])\\\\p{M}*$\", \"u\"), dM = new RegExp(\"^\\\\p{M}*([^\\\\p{M}])\", \"u\"), tM = /[\\uAC00-\\uD7AF\\uFA6C\\uFACF-\\uFAD1\\uFAD5-\\uFAD7]+/g, rR = /* @__PURE__ */ new Map(), ZM = \"[\\\\u1100-\\\\u1112\\\\ud7a4-\\\\ud7af\\\\ud84a\\\\ud84c\\\\ud850\\\\ud854\\\\ud857\\\\ud85f]\", CR = /* @__PURE__ */ new Map();\nlet yV = null, LV = null;\nfunction zV(s) {\n const U = [];\n let l;\n for (; (l = tM.exec(s)) !== null; ) {\n let {\n index: R\n } = l;\n for (const N of l[0]) {\n let b = rR.get(N);\n b || (b = N.normalize(\"NFD\").length, rR.set(N, b)), U.push([b, R++]);\n }\n }\n let d;\n if (U.length === 0 && yV)\n d = yV;\n else if (U.length > 0 && LV)\n d = LV;\n else {\n const R = Object.keys(IR).join(\"\"), N = f2(), G = `([${R}])|([${N}])|((?:゙|゚)\\\\n)|(\\\\p{M}+(?:-\\\\n)?)|(\\\\p{Ll}-\\\\n\\\\p{Lu})|(\\\\S-\\\\n)|((?:\\\\p{Ideographic}|[぀-ヿ])\\\\n)|(\\\\n)`;\n U.length === 0 ? d = yV = new RegExp(G + \"|(\\\\u0000)\", \"gum\") : d = LV = new RegExp(G + `|(${ZM})`, \"gum\");\n }\n const t = [];\n for (; (l = $2.exec(s)) !== null; )\n t.push([l[0].length, l.index]);\n let Z = s.normalize(\"NFD\");\n const F = [[0, 0]];\n let c = 0, Q = 0, a = 0, V = 0, W = 0, i = !1;\n return Z = Z.replace(d, (R, N, b, J, M, G, T, u, X, Y, o) => {\n var y, S, p;\n if (o -= V, N) {\n const L = IR[N], I = L.length;\n for (let D = 1; D < I; D++)\n F.push([o - a + D, a - D]);\n return a -= I - 1, L;\n }\n if (b) {\n let L = CR.get(b);\n L || (L = b.normalize(\"NFKC\"), CR.set(b, L));\n const I = L.length;\n for (let D = 1; D < I; D++)\n F.push([o - a + D, a - D]);\n return a -= I - 1, L;\n }\n if (J)\n return i = !0, o + W === ((y = t[c]) == null ? void 0 : y[1]) ? ++c : (F.push([o - 1 - a + 1, a - 1]), a -= 1, V += 1), F.push([o - a + 1, a]), V += 1, W += 1, J.charAt(0);\n if (M) {\n const L = M.endsWith(`\n`), I = L ? M.length - 2 : M.length;\n i = !0;\n let D = I;\n o + W === ((S = t[c]) == null ? void 0 : S[1]) && (D -= t[c][0], ++c);\n for (let r = 1; r <= D; r++)\n F.push([o - 1 - a + r, a - r]);\n return a -= D, V += D, L ? (o += I - 1, F.push([o - a + 1, 1 + a]), a += 1, V += 1, W += 1, M.slice(0, I)) : M;\n }\n if (G)\n return F.push([o - a + 3, 1 + a]), a += 1, V += 1, W += 1, G.replace(`\n`, \"\");\n if (T) {\n const L = T.length - 2;\n return F.push([o - a + L, 1 + a]), a += 1, V += 1, W += 1, T.slice(0, -2);\n }\n if (u) {\n const L = u.length - 1;\n return F.push([o - a + L, a]), V += 1, W += 1, u.slice(0, -1);\n }\n if (X)\n return F.push([o - a + 1, a - 1]), a -= 1, V += 1, W += 1, \" \";\n if (o + W === ((p = U[Q]) == null ? void 0 : p[1])) {\n const L = U[Q][0] - 1;\n ++Q;\n for (let I = 1; I <= L; I++)\n F.push([o - (a - I), a - I]);\n a -= L, V += L;\n }\n return Y;\n }), F.push([Z.length, a]), [Z, F, i];\n}\nfunction FM(s, U, l) {\n if (!s)\n return [U, l];\n const d = U, t = U + l - 1;\n let Z = rn(s, (V) => V[0] >= d);\n s[Z][0] > d && --Z;\n let F = rn(s, (V) => V[0] >= t, Z);\n s[F][0] > t && --F;\n const c = d + s[Z][1], a = t + s[F][1] + 1 - c;\n return [c, a];\n}\nvar ZU, yc, qF, v, he, ti, Zi, ee, be, Fi, me, Me, ua, Gn, o0, Je, ci, ni, Ya, Ge, si, Qi, Tn;\nclass cM {\n constructor({\n linkService: U,\n eventBus: l,\n updateMatchesCountOnProgress: d = !0\n }) {\n m(this, v);\n m(this, ZU, null);\n m(this, yc, !0);\n m(this, qF, 0);\n this._linkService = U, this._eventBus = l, e(this, yc, d), this.onIsPageVisible = null, h(this, v, ti).call(this), l._on(\"find\", h(this, v, he).bind(this)), l._on(\"findbarclose\", h(this, v, Ge).bind(this));\n }\n get highlightMatches() {\n return this._highlightMatches;\n }\n get pageMatches() {\n return this._pageMatches;\n }\n get pageMatchesLength() {\n return this._pageMatchesLength;\n }\n get selected() {\n return this._selected;\n }\n get state() {\n return n(this, ZU);\n }\n setDocument(U) {\n this._pdfDocument && h(this, v, ti).call(this), U && (this._pdfDocument = U, this._firstPageCapability.resolve());\n }\n scrollMatchIntoView({\n element: U = null,\n selectedLeft: l = 0,\n pageIndex: d = -1,\n matchIndex: t = -1\n }) {\n if (!this._scrollMatches || !U)\n return;\n if (t === -1 || t !== this._selected.matchIdx)\n return;\n if (d === -1 || d !== this._selected.pageIdx)\n return;\n this._scrollMatches = !1;\n const Z = {\n top: _2,\n left: l + q2\n };\n Re(U, Z, !0);\n }\n match(U, l, d) {\n const t = this._hasDiacritics[d];\n let Z = !1;\n if (typeof U == \"string\" ? [Z, U] = h(this, v, Fi).call(this, U, t) : U = U.sort().reverse().map((W) => {\n const [i, R] = h(this, v, Fi).call(this, W, t);\n return Z || (Z = i), `(${R})`;\n }).join(\"|\"), !U)\n return;\n const {\n caseSensitive: F,\n entireWord: c\n } = n(this, ZU), Q = `g${Z ? \"u\" : \"\"}${F ? \"\" : \"i\"}`;\n U = new RegExp(U, Q);\n const a = [];\n let V;\n for (; (V = U.exec(l)) !== null; )\n c && !h(this, v, be).call(this, l, V.index, V[0].length) || a.push({\n index: V.index,\n length: V[0].length\n });\n return a;\n }\n}\nZU = new WeakMap(), yc = new WeakMap(), qF = new WeakMap(), v = new WeakSet(), he = function(U) {\n if (!U)\n return;\n const l = this._pdfDocument, {\n type: d\n } = U;\n (n(this, ZU) === null || h(this, v, ee).call(this, U)) && (this._dirtyMatch = !0), e(this, ZU, U), d !== \"highlightallchange\" && h(this, v, Tn).call(this, Pt.PENDING), this._firstPageCapability.promise.then(() => {\n if (!this._pdfDocument || l && this._pdfDocument !== l)\n return;\n h(this, v, Me).call(this);\n const t = !this._highlightMatches, Z = !!this._findTimeout;\n this._findTimeout && (clearTimeout(this._findTimeout), this._findTimeout = null), d ? this._dirtyMatch ? h(this, v, o0).call(this) : d === \"again\" ? (h(this, v, o0).call(this), t && n(this, ZU).highlightAll && h(this, v, Gn).call(this)) : d === \"highlightallchange\" ? (Z ? h(this, v, o0).call(this) : this._highlightMatches = !0, h(this, v, Gn).call(this)) : h(this, v, o0).call(this) : this._findTimeout = setTimeout(() => {\n h(this, v, o0).call(this), this._findTimeout = null;\n }, A2);\n });\n}, ti = function() {\n this._highlightMatches = !1, this._scrollMatches = !1, this._pdfDocument = null, this._pageMatches = [], this._pageMatchesLength = [], e(this, qF, 0), e(this, ZU, null), this._selected = {\n pageIdx: -1,\n matchIdx: -1\n }, this._offset = {\n pageIdx: null,\n matchIdx: null,\n wrapped: !1\n }, this._extractTextPromises = [], this._pageContents = [], this._pageDiffs = [], this._hasDiacritics = [], this._matchesCountTotal = 0, this._pagesToSearch = null, this._pendingFindMatches = /* @__PURE__ */ new Set(), this._resumePageIdx = null, this._dirtyMatch = !1, clearTimeout(this._findTimeout), this._findTimeout = null, this._firstPageCapability = Promise.withResolvers();\n}, Zi = function() {\n const {\n query: U\n } = n(this, ZU);\n return typeof U == \"string\" ? (U !== this._rawQuery && (this._rawQuery = U, [this._normalizedQuery] = zV(U)), this._normalizedQuery) : (U || []).filter((l) => !!l).map((l) => zV(l)[0]);\n}, ee = function(U) {\n var F;\n const l = U.query, d = n(this, ZU).query, t = typeof l;\n if (t !== typeof d)\n return !0;\n if (t === \"string\") {\n if (l !== d)\n return !0;\n } else if (JSON.stringify(l) !== JSON.stringify(d))\n return !0;\n switch (U.type) {\n case \"again\":\n const c = this._selected.pageIdx + 1, Q = this._linkService;\n return c >= 1 && c <= Q.pagesCount && c !== Q.page && !(((F = this.onIsPageVisible) == null ? void 0 : F.call(this, c)) ?? !0);\n case \"highlightallchange\":\n return !1;\n }\n return !0;\n}, be = function(U, l, d) {\n let t = U.slice(0, l).match(UM);\n if (t) {\n const Z = U.charCodeAt(l), F = t[1].charCodeAt(0);\n if (OQ(Z) === OQ(F))\n return !1;\n }\n if (t = U.slice(l + d).match(dM), t) {\n const Z = U.charCodeAt(l + d - 1), F = t[1].charCodeAt(0);\n if (OQ(Z) === OQ(F))\n return !1;\n }\n return !0;\n}, Fi = function(U, l) {\n const {\n matchDiacritics: d\n } = n(this, ZU);\n let t = !1;\n U = U.replaceAll(lM, (F, c, Q, a, V, W) => c ? `[ ]*\\\\${c}[ ]*` : Q ? `[ ]*${Q}[ ]*` : a ? \"[ ]+\" : d ? V || W : V ? DR.has(V.charCodeAt(0)) ? V : \"\" : l ? (t = !0, `${W}\\\\p{M}*`) : W);\n const Z = \"[ ]*\";\n return U.endsWith(Z) && (U = U.slice(0, U.length - Z.length)), d && l && (ER || (ER = String.fromCharCode(...DR)), t = !0, U = `${U}(?=[${ER}]|[^\\\\p{M}]|$)`), [t, U];\n}, me = function(U) {\n const l = n(this, v, Zi);\n if (l.length === 0)\n return;\n const d = this._pageContents[U], t = this.match(l, d, U), Z = this._pageMatches[U] = [], F = this._pageMatchesLength[U] = [], c = this._pageDiffs[U];\n t == null || t.forEach(({\n index: a,\n length: V\n }) => {\n const [W, i] = FM(c, a, V);\n i && (Z.push(W), F.push(i));\n }), n(this, ZU).highlightAll && h(this, v, ua).call(this, U), this._resumePageIdx === U && (this._resumePageIdx = null, h(this, v, ci).call(this));\n const Q = Z.length;\n this._matchesCountTotal += Q, n(this, yc) ? Q > 0 && h(this, v, Qi).call(this) : ++VU(this, qF)._ === this._linkService.pagesCount && h(this, v, Qi).call(this);\n}, Me = function() {\n if (this._extractTextPromises.length > 0)\n return;\n let U = Promise.resolve();\n const l = {\n disableNormalization: !0\n };\n for (let d = 0, t = this._linkService.pagesCount; d < t; d++) {\n const {\n promise: Z,\n resolve: F\n } = Promise.withResolvers();\n this._extractTextPromises[d] = Z, U = U.then(() => this._pdfDocument.getPage(d + 1).then((c) => c.getTextContent(l)).then((c) => {\n const Q = [];\n for (const a of c.items)\n Q.push(a.str), a.hasEOL && Q.push(`\n`);\n [this._pageContents[d], this._pageDiffs[d], this._hasDiacritics[d]] = zV(Q.join(\"\")), F();\n }, (c) => {\n console.error(`Unable to get text content for page ${d + 1}`, c), this._pageContents[d] = \"\", this._pageDiffs[d] = null, this._hasDiacritics[d] = !1, F();\n }));\n }\n}, ua = function(U) {\n this._scrollMatches && this._selected.pageIdx === U && (this._linkService.page = U + 1), this._eventBus.dispatch(\"updatetextlayermatches\", {\n source: this,\n pageIndex: U\n });\n}, Gn = function() {\n this._eventBus.dispatch(\"updatetextlayermatches\", {\n source: this,\n pageIndex: -1\n });\n}, o0 = function() {\n const U = n(this, ZU).findPrevious, l = this._linkService.page - 1, d = this._linkService.pagesCount;\n if (this._highlightMatches = !0, this._dirtyMatch) {\n this._dirtyMatch = !1, this._selected.pageIdx = this._selected.matchIdx = -1, this._offset.pageIdx = l, this._offset.matchIdx = null, this._offset.wrapped = !1, this._resumePageIdx = null, this._pageMatches.length = 0, this._pageMatchesLength.length = 0, e(this, qF, 0), this._matchesCountTotal = 0, h(this, v, Gn).call(this);\n for (let F = 0; F < d; F++)\n this._pendingFindMatches.has(F) || (this._pendingFindMatches.add(F), this._extractTextPromises[F].then(() => {\n this._pendingFindMatches.delete(F), h(this, v, me).call(this, F);\n }));\n }\n if (n(this, v, Zi).length === 0) {\n h(this, v, Tn).call(this, Pt.FOUND);\n return;\n }\n if (this._resumePageIdx)\n return;\n const Z = this._offset;\n if (this._pagesToSearch = d, Z.matchIdx !== null) {\n const F = this._pageMatches[Z.pageIdx].length;\n if (!U && Z.matchIdx + 1 < F || U && Z.matchIdx > 0) {\n Z.matchIdx = U ? Z.matchIdx - 1 : Z.matchIdx + 1, h(this, v, Ya).call(this, !0);\n return;\n }\n h(this, v, ni).call(this, U);\n }\n h(this, v, ci).call(this);\n}, Je = function(U) {\n const l = this._offset, d = U.length, t = n(this, ZU).findPrevious;\n return d ? (l.matchIdx = t ? d - 1 : 0, h(this, v, Ya).call(this, !0), !0) : (h(this, v, ni).call(this, t), l.wrapped && (l.matchIdx = null, this._pagesToSearch < 0) ? (h(this, v, Ya).call(this, !1), !0) : !1);\n}, ci = function() {\n this._resumePageIdx !== null && console.error(\"There can only be one pending page.\");\n let U = null;\n do {\n const l = this._offset.pageIdx;\n if (U = this._pageMatches[l], !U) {\n this._resumePageIdx = l;\n break;\n }\n } while (!h(this, v, Je).call(this, U));\n}, ni = function(U) {\n const l = this._offset, d = this._linkService.pagesCount;\n l.pageIdx = U ? l.pageIdx - 1 : l.pageIdx + 1, l.matchIdx = null, this._pagesToSearch--, (l.pageIdx >= d || l.pageIdx < 0) && (l.pageIdx = U ? d - 1 : 0, l.wrapped = !0);\n}, Ya = function(U = !1) {\n let l = Pt.NOT_FOUND;\n const d = this._offset.wrapped;\n if (this._offset.wrapped = !1, U) {\n const t = this._selected.pageIdx;\n this._selected.pageIdx = this._offset.pageIdx, this._selected.matchIdx = this._offset.matchIdx, l = d ? Pt.WRAPPED : Pt.FOUND, t !== -1 && t !== this._selected.pageIdx && h(this, v, ua).call(this, t);\n }\n h(this, v, Tn).call(this, l, n(this, ZU).findPrevious), this._selected.pageIdx !== -1 && (this._scrollMatches = !0, h(this, v, ua).call(this, this._selected.pageIdx));\n}, Ge = function(U) {\n const l = this._pdfDocument;\n this._firstPageCapability.promise.then(() => {\n !this._pdfDocument || l && this._pdfDocument !== l || (this._findTimeout && (clearTimeout(this._findTimeout), this._findTimeout = null), this._resumePageIdx && (this._resumePageIdx = null, this._dirtyMatch = !0), h(this, v, Tn).call(this, Pt.FOUND), this._highlightMatches = !1, h(this, v, Gn).call(this));\n });\n}, si = function() {\n var Z;\n const {\n pageIdx: U,\n matchIdx: l\n } = this._selected;\n let d = 0, t = this._matchesCountTotal;\n if (l !== -1) {\n for (let F = 0; F < U; F++)\n d += ((Z = this._pageMatches[F]) == null ? void 0 : Z.length) || 0;\n d += l + 1;\n }\n return (d < 1 || d > t) && (d = t = 0), {\n current: d,\n total: t\n };\n}, Qi = function() {\n this._eventBus.dispatch(\"updatefindmatchescount\", {\n source: this,\n matchesCount: h(this, v, si).call(this)\n });\n}, Tn = function(U, l = !1) {\n var d, t;\n !n(this, yc) && (n(this, qF) !== this._linkService.pagesCount || U === Pt.PENDING) || this._eventBus.dispatch(\"updatefindcontrolstate\", {\n source: this,\n state: U,\n previous: l,\n entireWord: ((d = n(this, ZU)) == null ? void 0 : d.entireWord) ?? null,\n matchesCount: h(this, v, si).call(this),\n rawQuery: ((t = n(this, ZU)) == null ? void 0 : t.query) ?? null\n });\n};\nconst nM = \"noopener noreferrer nofollow\", PZ = {\n NONE: 0,\n SELF: 1,\n BLANK: 2,\n PARENT: 3,\n TOP: 4\n};\nvar sV, Te;\nconst QV = class QV {\n constructor({\n eventBus: U,\n externalLinkTarget: l = null,\n externalLinkRel: d = null,\n ignoreDestinationZoom: t = !1\n } = {}) {\n _(this, \"externalLinkEnabled\", !0);\n this.eventBus = U, this.externalLinkTarget = l, this.externalLinkRel = d, this._ignoreDestinationZoom = t, this.baseUrl = null, this.pdfDocument = null, this.pdfViewer = null, this.pdfHistory = null;\n }\n setDocument(U, l = null) {\n this.baseUrl = l, this.pdfDocument = U;\n }\n setViewer(U) {\n this.pdfViewer = U;\n }\n setHistory(U) {\n this.pdfHistory = U;\n }\n get pagesCount() {\n return this.pdfDocument ? this.pdfDocument.numPages : 0;\n }\n get page() {\n return this.pdfDocument ? this.pdfViewer.currentPageNumber : 1;\n }\n set page(U) {\n this.pdfDocument && (this.pdfViewer.currentPageNumber = U);\n }\n get rotation() {\n return this.pdfDocument ? this.pdfViewer.pagesRotation : 0;\n }\n set rotation(U) {\n this.pdfDocument && (this.pdfViewer.pagesRotation = U);\n }\n get isInPresentationMode() {\n return this.pdfDocument ? this.pdfViewer.isInPresentationMode : !1;\n }\n async goToDestination(U) {\n if (!this.pdfDocument)\n return;\n let l, d, t;\n if (typeof U == \"string\" ? (l = U, d = await this.pdfDocument.getDestination(U)) : (l = null, d = await U), !Array.isArray(d)) {\n console.error(`goToDestination: \"${d}\" is not a valid destination array, for dest=\"${U}\".`);\n return;\n }\n const [Z] = d;\n if (Z && typeof Z == \"object\") {\n if (t = this.pdfDocument.cachedPageNumber(Z), !t)\n try {\n t = await this.pdfDocument.getPageIndex(Z) + 1;\n } catch {\n console.error(`goToDestination: \"${Z}\" is not a valid page reference, for dest=\"${U}\".`);\n return;\n }\n } else Number.isInteger(Z) && (t = Z + 1);\n if (!t || t < 1 || t > this.pagesCount) {\n console.error(`goToDestination: \"${t}\" is not a valid page number, for dest=\"${U}\".`);\n return;\n }\n this.pdfHistory && (this.pdfHistory.pushCurrentPosition(), this.pdfHistory.push({\n namedDest: l,\n explicitDest: d,\n pageNumber: t\n })), this.pdfViewer.scrollPageIntoView({\n pageNumber: t,\n destArray: d,\n ignoreDestinationZoom: this._ignoreDestinationZoom\n });\n }\n goToPage(U) {\n if (!this.pdfDocument)\n return;\n const l = typeof U == \"string\" && this.pdfViewer.pageLabelToPageNumber(U) || U | 0;\n if (!(Number.isInteger(l) && l > 0 && l <= this.pagesCount)) {\n console.error(`PDFLinkService.goToPage: \"${U}\" is not a valid page.`);\n return;\n }\n this.pdfHistory && (this.pdfHistory.pushCurrentPosition(), this.pdfHistory.pushPage(l)), this.pdfViewer.scrollPageIntoView({\n pageNumber: l\n });\n }\n addLinkAttributes(U, l, d = !1) {\n if (!l || typeof l != \"string\")\n throw new Error('A valid \"url\" parameter must provided.');\n const t = d ? PZ.BLANK : this.externalLinkTarget, Z = this.externalLinkRel;\n this.externalLinkEnabled ? U.href = U.title = l : (U.href = \"\", U.title = `Disabled: ${l}`, U.onclick = () => !1);\n let F = \"\";\n switch (t) {\n case PZ.NONE:\n break;\n case PZ.SELF:\n F = \"_self\";\n break;\n case PZ.BLANK:\n F = \"_blank\";\n break;\n case PZ.PARENT:\n F = \"_parent\";\n break;\n case PZ.TOP:\n F = \"_top\";\n break;\n }\n U.target = F, U.rel = typeof Z == \"string\" ? Z : nM;\n }\n getDestinationHash(U) {\n if (typeof U == \"string\") {\n if (U.length > 0)\n return this.getAnchorUrl(\"#\" + escape(U));\n } else if (Array.isArray(U)) {\n const l = JSON.stringify(U);\n if (l.length > 0)\n return this.getAnchorUrl(\"#\" + escape(l));\n }\n return this.getAnchorUrl(\"\");\n }\n getAnchorUrl(U) {\n return this.baseUrl ? this.baseUrl + U : U;\n }\n setHash(U) {\n var t;\n if (!this.pdfDocument)\n return;\n let l, d;\n if (U.includes(\"=\")) {\n const Z = mV(U);\n if (Z.has(\"search\")) {\n const F = Z.get(\"search\").replaceAll('\"', \"\"), c = Z.get(\"phrase\") === \"true\";\n this.eventBus.dispatch(\"findfromurlhash\", {\n source: this,\n query: c ? F : F.match(/\\S+/g)\n });\n }\n if (Z.has(\"page\") && (l = Z.get(\"page\") | 0 || 1), Z.has(\"zoom\")) {\n const F = Z.get(\"zoom\").split(\",\"), c = F[0], Q = parseFloat(c);\n c.includes(\"Fit\") ? c === \"Fit\" || c === \"FitB\" ? d = [null, {\n name: c\n }] : c === \"FitH\" || c === \"FitBH\" || c === \"FitV\" || c === \"FitBV\" ? d = [null, {\n name: c\n }, F.length > 1 ? F[1] | 0 : null] : c === \"FitR\" ? F.length !== 5 ? console.error('PDFLinkService.setHash: Not enough parameters for \"FitR\".') : d = [null, {\n name: c\n }, F[1] | 0, F[2] | 0, F[3] | 0, F[4] | 0] : console.error(`PDFLinkService.setHash: \"${c}\" is not a valid zoom value.`) : d = [null, {\n name: \"XYZ\"\n }, F.length > 1 ? F[1] | 0 : null, F.length > 2 ? F[2] | 0 : null, Q ? Q / 100 : c];\n }\n d ? this.pdfViewer.scrollPageIntoView({\n pageNumber: l || this.page,\n destArray: d,\n allowNegativeOffset: !0\n }) : l && (this.page = l), Z.has(\"pagemode\") && this.eventBus.dispatch(\"pagemode\", {\n source: this,\n mode: Z.get(\"pagemode\")\n }), Z.has(\"nameddest\") && this.goToDestination(Z.get(\"nameddest\"));\n return;\n }\n d = unescape(U);\n try {\n d = JSON.parse(d), Array.isArray(d) || (d = d.toString());\n } catch {\n }\n if (typeof d == \"string\" || h(t = QV, sV, Te).call(t, d)) {\n this.goToDestination(d);\n return;\n }\n console.error(`PDFLinkService.setHash: \"${unescape(U)}\" is not a valid destination.`);\n }\n executeNamedAction(U) {\n var l, d;\n if (this.pdfDocument) {\n switch (U) {\n case \"GoBack\":\n (l = this.pdfHistory) == null || l.back();\n break;\n case \"GoForward\":\n (d = this.pdfHistory) == null || d.forward();\n break;\n case \"NextPage\":\n this.pdfViewer.nextPage();\n break;\n case \"PrevPage\":\n this.pdfViewer.previousPage();\n break;\n case \"LastPage\":\n this.page = this.pagesCount;\n break;\n case \"FirstPage\":\n this.page = 1;\n break;\n }\n this.eventBus.dispatch(\"namedaction\", {\n source: this,\n action: U\n });\n }\n }\n async executeSetOCGState(U) {\n if (!this.pdfDocument)\n return;\n const l = this.pdfDocument, d = await this.pdfViewer.optionalContentConfigPromise;\n l === this.pdfDocument && (d.setOCGState(U), this.pdfViewer.optionalContentConfigPromise = Promise.resolve(d));\n }\n};\nsV = new WeakSet(), Te = function(U) {\n if (!Array.isArray(U) || U.length < 2)\n return !1;\n const [l, d, ...t] = U;\n if (!(typeof l == \"object\" && Number.isInteger(l == null ? void 0 : l.num) && Number.isInteger(l == null ? void 0 : l.gen)) && !Number.isInteger(l) || !(typeof d == \"object\" && typeof (d == null ? void 0 : d.name) == \"string\"))\n return !1;\n const Z = t.length;\n let F = !0;\n switch (d.name) {\n case \"XYZ\":\n if (Z < 2 || Z > 3)\n return !1;\n break;\n case \"Fit\":\n case \"FitB\":\n return Z === 0;\n case \"FitH\":\n case \"FitBH\":\n case \"FitV\":\n case \"FitBV\":\n if (Z > 1)\n return !1;\n break;\n case \"FitR\":\n if (Z !== 4)\n return !1;\n F = !1;\n break;\n default:\n return !1;\n }\n for (const c of t)\n if (!(typeof c == \"number\" || F && c === null))\n return !1;\n return !0;\n}, m(QV, sV);\nlet xa = QV;\nclass Ai extends xa {\n setDocument(U, l = null) {\n }\n}\nconst {\n AbortException: sM,\n AnnotationEditorLayer: QM,\n AnnotationEditorParamsType: VG,\n AnnotationEditorType: rU,\n AnnotationEditorUIManager: aM,\n AnnotationLayer: VM,\n AnnotationMode: Et,\n build: WG,\n CMapCompressionType: iG,\n ColorPicker: RG,\n createValidAbsoluteUrl: WM,\n DOMSVGFactory: NG,\n DrawLayer: iM,\n FeatureTest: hG,\n fetchData: wR,\n getDocument: eG,\n getFilenameFromUrl: bG,\n getPdfFilenameFromUrl: RM,\n getXfaPageViewport: mG,\n GlobalWorkerOptions: MG,\n ImageKind: JG,\n InvalidPDFException: GG,\n isDataScheme: TG,\n isPdfFile: NM,\n MissingPDFException: SG,\n noContextMenu: XG,\n normalizeUnicode: hM,\n OPS: uG,\n OutputScale: eM,\n PasswordResponses: YG,\n PDFDataRangeTransport: oG,\n PDFDateString: pG,\n PDFWorker: BG,\n PermissionFlag: gQ,\n PixelsPerInch: st,\n RenderingCancelledException: ai,\n setLayerDimensions: bM,\n shadow: ja,\n TextLayer: mM,\n UnexpectedResponseException: yG,\n Util: LG,\n VerbosityLevel: zG,\n version: xR,\n XfaLayer: kV\n} = globalThis.pdfjsLib;\nvar tQ, uZ, ZQ, Vi;\nclass Se {\n constructor({\n pdfPage: U,\n linkService: l,\n downloadManager: d,\n annotationStorage: t = null,\n imageResourcesPath: Z = \"\",\n renderForms: F = !0,\n enableScripting: c = !1,\n hasJSActionsPromise: Q = null,\n fieldObjectsPromise: a = null,\n annotationCanvasMap: V = null,\n accessibilityManager: W = null,\n annotationEditorUIManager: i = null,\n onAppend: R = null\n }) {\n m(this, ZQ);\n m(this, tQ, null);\n m(this, uZ, null);\n this.pdfPage = U, this.linkService = l, this.downloadManager = d, this.imageResourcesPath = Z, this.renderForms = F, this.annotationStorage = t, this.enableScripting = c, this._hasJSActionsPromise = Q || Promise.resolve(!1), this._fieldObjectsPromise = a || Promise.resolve(null), this._annotationCanvasMap = V, this._accessibilityManager = W, this._annotationEditorUIManager = i, e(this, tQ, R), this.annotationLayer = null, this.div = null, this._cancelled = !1, this._eventBus = l.eventBus;\n }\n async render(U, l, d = \"display\") {\n var Q, a;\n if (this.div) {\n if (this._cancelled || !this.annotationLayer)\n return;\n this.annotationLayer.update({\n viewport: U.clone({\n dontFlip: !0\n })\n });\n return;\n }\n const [t, Z, F] = await Promise.all([this.pdfPage.getAnnotations({\n intent: d\n }), this._hasJSActionsPromise, this._fieldObjectsPromise]);\n if (this._cancelled)\n return;\n const c = this.div = document.createElement(\"div\");\n if (c.className = \"annotationLayer\", (Q = n(this, tQ)) == null || Q.call(this, c), t.length === 0) {\n this.hide();\n return;\n }\n this.annotationLayer = new VM({\n div: c,\n accessibilityManager: this._accessibilityManager,\n annotationCanvasMap: this._annotationCanvasMap,\n annotationEditorUIManager: this._annotationEditorUIManager,\n page: this.pdfPage,\n viewport: U.clone({\n dontFlip: !0\n }),\n structTreeLayer: (l == null ? void 0 : l.structTreeLayer) || null\n }), await this.annotationLayer.render({\n annotations: t,\n imageResourcesPath: this.imageResourcesPath,\n renderForms: this.renderForms,\n linkService: this.linkService,\n downloadManager: this.downloadManager,\n annotationStorage: this.annotationStorage,\n enableScripting: this.enableScripting,\n hasJSActions: Z,\n fieldObjects: F\n }), this.linkService.isInPresentationMode && h(this, ZQ, Vi).call(this, L0.FULLSCREEN), n(this, uZ) || (e(this, uZ, new AbortController()), (a = this._eventBus) == null || a._on(\"presentationmodechanged\", (V) => {\n h(this, ZQ, Vi).call(this, V.state);\n }, {\n signal: n(this, uZ).signal\n }));\n }\n cancel() {\n var U;\n this._cancelled = !0, (U = n(this, uZ)) == null || U.abort(), e(this, uZ, null);\n }\n hide() {\n this.div && (this.div.hidden = !0);\n }\n hasEditableAnnotations() {\n var U;\n return !!((U = this.annotationLayer) != null && U.hasEditableAnnotations());\n }\n}\ntQ = new WeakMap(), uZ = new WeakMap(), ZQ = new WeakSet(), Vi = function(U) {\n if (!this.div)\n return;\n let l = !1;\n switch (U) {\n case L0.FULLSCREEN:\n l = !0;\n break;\n case L0.NORMAL:\n break;\n default:\n return;\n }\n for (const d of this.div.childNodes)\n d.hasAttribute(\"data-internal-link\") || (d.inert = l);\n};\nfunction jR(s, U) {\n const l = document.createElement(\"a\");\n if (!l.click)\n throw new Error('DownloadManager: \"a.click()\" is not supported.');\n l.href = s, l.target = \"_parent\", \"download\" in l && (l.download = U), (document.body || document.documentElement).append(l), l.click(), l.remove();\n}\nvar Ei;\nclass MM {\n constructor() {\n m(this, Ei, /* @__PURE__ */ new WeakMap());\n }\n downloadData(U, l, d) {\n const t = URL.createObjectURL(new Blob([U], {\n type: d\n }));\n jR(t, l);\n }\n openOrDownloadData(U, l, d = null) {\n const Z = NM(l) ? \"application/pdf\" : \"\";\n return this.downloadData(U, l, Z), !1;\n }\n download(U, l, d) {\n let t;\n if (U)\n t = URL.createObjectURL(new Blob([U], {\n type: \"application/pdf\"\n }));\n else {\n if (!WM(l, \"http://example.com\")) {\n console.error(`download - not a valid URL: ${l}`);\n return;\n }\n t = l + \"#pdfjs.action=download\";\n }\n jR(t, d);\n }\n}\nEi = new WeakMap();\nconst OR = {\n EVENT: \"event\",\n TIMEOUT: \"timeout\"\n};\nasync function JM({\n target: s,\n name: U,\n delay: l = 0\n}) {\n if (typeof s != \"object\" || !(U && typeof U == \"string\") || !(Number.isInteger(l) && l >= 0))\n throw new Error(\"waitOnEventOrTimeout - invalid parameters.\");\n const {\n promise: d,\n resolve: t\n } = Promise.withResolvers(), Z = new AbortController();\n function F(a) {\n Z.abort(), clearTimeout(Q), t(a);\n }\n const c = s instanceof Xe ? \"_on\" : \"addEventListener\";\n s[c](U, F.bind(null, OR.EVENT), {\n signal: Z.signal\n });\n const Q = setTimeout(F.bind(null, OR.TIMEOUT), l);\n return d;\n}\nvar Lc;\nclass Xe {\n constructor() {\n m(this, Lc, /* @__PURE__ */ Object.create(null));\n }\n on(U, l, d = null) {\n this._on(U, l, {\n external: !0,\n once: d == null ? void 0 : d.once,\n signal: d == null ? void 0 : d.signal\n });\n }\n off(U, l, d = null) {\n this._off(U, l);\n }\n dispatch(U, l) {\n const d = n(this, Lc)[U];\n if (!d || d.length === 0)\n return;\n let t;\n for (const {\n listener: Z,\n external: F,\n once: c\n } of d.slice(0)) {\n if (c && this._off(U, Z), F) {\n (t || (t = [])).push(Z);\n continue;\n }\n Z(l);\n }\n if (t) {\n for (const Z of t)\n Z(l);\n t = null;\n }\n }\n _on(U, l, d = null) {\n var F;\n let t = null;\n if ((d == null ? void 0 : d.signal) instanceof AbortSignal) {\n const {\n signal: c\n } = d;\n if (c.aborted) {\n console.error(\"Cannot use an `aborted` signal.\");\n return;\n }\n const Q = () => this._off(U, l);\n t = () => c.removeEventListener(\"abort\", Q), c.addEventListener(\"abort\", Q);\n }\n ((F = n(this, Lc))[U] || (F[U] = [])).push({\n listener: l,\n external: (d == null ? void 0 : d.external) === !0,\n once: (d == null ? void 0 : d.once) === !0,\n rmAbort: t\n });\n }\n _off(U, l, d = null) {\n var Z;\n const t = n(this, Lc)[U];\n if (t)\n for (let F = 0, c = t.length; F < c; F++) {\n const Q = t[F];\n if (Q.listener === l) {\n (Z = Q.rmAbort) == null || Z.call(Q), t.splice(F, 1);\n return;\n }\n }\n }\n}\nLc = new WeakMap();\nclass MV {\n constructor(U) {\n this.value = U;\n }\n valueOf() {\n return this.value;\n }\n}\nclass xl extends MV {\n constructor(U = \"???\") {\n super(U);\n }\n toString(U) {\n return `{${this.value}}`;\n }\n}\nclass wt extends MV {\n constructor(U, l = {}) {\n super(U), this.opts = l;\n }\n toString(U) {\n try {\n return U.memoizeIntlObject(Intl.NumberFormat, this.opts).format(this.value);\n } catch (l) {\n return U.reportError(l), this.value.toString(10);\n }\n }\n}\nclass Ln extends MV {\n constructor(U, l = {}) {\n super(U), this.opts = l;\n }\n toString(U) {\n try {\n return U.memoizeIntlObject(Intl.DateTimeFormat, this.opts).format(this.value);\n } catch (l) {\n return U.reportError(l), new Date(this.value).toISOString();\n }\n }\n}\nconst gR = 100, GM = \"⁨\", TM = \"⁩\";\nfunction SM(s, U, l) {\n if (l === U || l instanceof wt && U instanceof wt && l.value === U.value)\n return !0;\n if (U instanceof wt && typeof l == \"string\") {\n let d = s.memoizeIntlObject(Intl.PluralRules, U.opts).select(U.value);\n if (l === d)\n return !0;\n }\n return !1;\n}\nfunction KR(s, U, l) {\n return U[l] ? fc(s, U[l].value) : (s.reportError(new RangeError(\"No default\")), new xl());\n}\nfunction Wi(s, U) {\n const l = [], d = /* @__PURE__ */ Object.create(null);\n for (const t of U)\n t.type === \"narg\" ? d[t.name] = Cn(s, t.value) : l.push(Cn(s, t));\n return {\n positional: l,\n named: d\n };\n}\nfunction Cn(s, U) {\n switch (U.type) {\n case \"str\":\n return U.value;\n case \"num\":\n return new wt(U.value, {\n minimumFractionDigits: U.precision\n });\n case \"var\":\n return XM(s, U);\n case \"mesg\":\n return uM(s, U);\n case \"term\":\n return YM(s, U);\n case \"func\":\n return oM(s, U);\n case \"select\":\n return pM(s, U);\n default:\n return new xl();\n }\n}\nfunction XM(s, {\n name: U\n}) {\n let l;\n if (s.params)\n if (Object.prototype.hasOwnProperty.call(s.params, U))\n l = s.params[U];\n else\n return new xl(`$${U}`);\n else if (s.args && Object.prototype.hasOwnProperty.call(s.args, U))\n l = s.args[U];\n else\n return s.reportError(new ReferenceError(`Unknown variable: $${U}`)), new xl(`$${U}`);\n if (l instanceof MV)\n return l;\n switch (typeof l) {\n case \"string\":\n return l;\n case \"number\":\n return new wt(l);\n case \"object\":\n if (l instanceof Date)\n return new Ln(l.getTime());\n default:\n return s.reportError(new TypeError(`Variable type not supported: $${U}, ${typeof l}`)), new xl(`$${U}`);\n }\n}\nfunction uM(s, {\n name: U,\n attr: l\n}) {\n const d = s.bundle._messages.get(U);\n if (!d)\n return s.reportError(new ReferenceError(`Unknown message: ${U}`)), new xl(U);\n if (l) {\n const t = d.attributes[l];\n return t ? fc(s, t) : (s.reportError(new ReferenceError(`Unknown attribute: ${l}`)), new xl(`${U}.${l}`));\n }\n return d.value ? fc(s, d.value) : (s.reportError(new ReferenceError(`No value: ${U}`)), new xl(U));\n}\nfunction YM(s, {\n name: U,\n attr: l,\n args: d\n}) {\n const t = `-${U}`, Z = s.bundle._terms.get(t);\n if (!Z)\n return s.reportError(new ReferenceError(`Unknown term: ${t}`)), new xl(t);\n if (l) {\n const c = Z.attributes[l];\n if (c) {\n s.params = Wi(s, d).named;\n const Q = fc(s, c);\n return s.params = null, Q;\n }\n return s.reportError(new ReferenceError(`Unknown attribute: ${l}`)), new xl(`${t}.${l}`);\n }\n s.params = Wi(s, d).named;\n const F = fc(s, Z.value);\n return s.params = null, F;\n}\nfunction oM(s, {\n name: U,\n args: l\n}) {\n let d = s.bundle._functions[U];\n if (!d)\n return s.reportError(new ReferenceError(`Unknown function: ${U}()`)), new xl(`${U}()`);\n if (typeof d != \"function\")\n return s.reportError(new TypeError(`Function ${U}() is not callable`)), new xl(`${U}()`);\n try {\n let t = Wi(s, l);\n return d(t.positional, t.named);\n } catch (t) {\n return s.reportError(t), new xl(`${U}()`);\n }\n}\nfunction pM(s, {\n selector: U,\n variants: l,\n star: d\n}) {\n let t = Cn(s, U);\n if (t instanceof xl)\n return KR(s, l, d);\n for (const Z of l) {\n const F = Cn(s, Z.key);\n if (SM(s, t, F))\n return fc(s, Z.value);\n }\n return KR(s, l, d);\n}\nfunction ue(s, U) {\n if (s.dirty.has(U))\n return s.reportError(new RangeError(\"Cyclic reference\")), new xl();\n s.dirty.add(U);\n const l = [], d = s.bundle._useIsolating && U.length > 1;\n for (const t of U) {\n if (typeof t == \"string\") {\n l.push(s.bundle._transform(t));\n continue;\n }\n if (s.placeables++, s.placeables > gR)\n throw s.dirty.delete(U), new RangeError(`Too many placeables expanded: ${s.placeables}, max allowed is ${gR}`);\n d && l.push(GM), l.push(Cn(s, t).toString(s)), d && l.push(TM);\n }\n return s.dirty.delete(U), l.join(\"\");\n}\nfunction fc(s, U) {\n return typeof U == \"string\" ? s.bundle._transform(U) : ue(s, U);\n}\nclass BM {\n constructor(U, l, d) {\n this.dirty = /* @__PURE__ */ new WeakSet(), this.params = null, this.placeables = 0, this.bundle = U, this.errors = l, this.args = d;\n }\n reportError(U) {\n if (!this.errors || !(U instanceof Error))\n throw U;\n this.errors.push(U);\n }\n memoizeIntlObject(U, l) {\n let d = this.bundle._intls.get(U);\n d || (d = {}, this.bundle._intls.set(U, d));\n let t = JSON.stringify(l);\n return d[t] || (d[t] = new U(this.bundle.locales, l)), d[t];\n }\n}\nfunction Oa(s, U) {\n const l = /* @__PURE__ */ Object.create(null);\n for (const [d, t] of Object.entries(s))\n U.includes(d) && (l[d] = t.valueOf());\n return l;\n}\nconst vR = [\"unitDisplay\", \"currencyDisplay\", \"useGrouping\", \"minimumIntegerDigits\", \"minimumFractionDigits\", \"maximumFractionDigits\", \"minimumSignificantDigits\", \"maximumSignificantDigits\"];\nfunction yM(s, U) {\n let l = s[0];\n if (l instanceof xl)\n return new xl(`NUMBER(${l.valueOf()})`);\n if (l instanceof wt)\n return new wt(l.valueOf(), {\n ...l.opts,\n ...Oa(U, vR)\n });\n if (l instanceof Ln)\n return new wt(l.valueOf(), {\n ...Oa(U, vR)\n });\n throw new TypeError(\"Invalid argument to NUMBER\");\n}\nconst HR = [\"dateStyle\", \"timeStyle\", \"fractionalSecondDigits\", \"dayPeriod\", \"hour12\", \"weekday\", \"era\", \"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"timeZoneName\"];\nfunction LM(s, U) {\n let l = s[0];\n if (l instanceof xl)\n return new xl(`DATETIME(${l.valueOf()})`);\n if (l instanceof Ln)\n return new Ln(l.valueOf(), {\n ...l.opts,\n ...Oa(U, HR)\n });\n if (l instanceof wt)\n return new Ln(l.valueOf(), {\n ...Oa(U, HR)\n });\n throw new TypeError(\"Invalid argument to DATETIME\");\n}\nconst PR = /* @__PURE__ */ new Map();\nfunction zM(s) {\n const U = Array.isArray(s) ? s.join(\" \") : s;\n let l = PR.get(U);\n return l === void 0 && (l = /* @__PURE__ */ new Map(), PR.set(U, l)), l;\n}\nclass kM {\n constructor(U, {\n functions: l,\n useIsolating: d = !0,\n transform: t = (Z) => Z\n } = {}) {\n this._terms = /* @__PURE__ */ new Map(), this._messages = /* @__PURE__ */ new Map(), this.locales = Array.isArray(U) ? U : [U], this._functions = {\n NUMBER: yM,\n DATETIME: LM,\n ...l\n }, this._useIsolating = d, this._transform = t, this._intls = zM(U);\n }\n hasMessage(U) {\n return this._messages.has(U);\n }\n getMessage(U) {\n return this._messages.get(U);\n }\n addResource(U, {\n allowOverrides: l = !1\n } = {}) {\n const d = [];\n for (let t = 0; t < U.body.length; t++) {\n let Z = U.body[t];\n if (Z.id.startsWith(\"-\")) {\n if (l === !1 && this._terms.has(Z.id)) {\n d.push(new Error(`Attempt to override an existing term: \"${Z.id}\"`));\n continue;\n }\n this._terms.set(Z.id, Z);\n } else {\n if (l === !1 && this._messages.has(Z.id)) {\n d.push(new Error(`Attempt to override an existing message: \"${Z.id}\"`));\n continue;\n }\n this._messages.set(Z.id, Z);\n }\n }\n return d;\n }\n formatPattern(U, l = null, d = null) {\n if (typeof U == \"string\")\n return this._transform(U);\n let t = new BM(this, d, l);\n try {\n return ue(t, U).toString(t);\n } catch (Z) {\n if (t.errors && Z instanceof Error)\n return t.errors.push(Z), new xl().toString(t);\n throw Z;\n }\n }\n}\nconst IV = /^(-?[a-zA-Z][\\w-]*) *= */gm, fR = /\\.([a-zA-Z][\\w-]*) *= */y, IM = /\\*?\\[/y, DV = /(-?[0-9]+(?:\\.([0-9]+))?)/y, DM = /([a-zA-Z][\\w-]*)/y, AR = /([$-])?([a-zA-Z][\\w-]*)(?:\\.([a-zA-Z][\\w-]*))?/y, EM = /^[A-Z][A-Z0-9_-]*$/, KQ = /([^{}\\n\\r]+)/y, rM = /([^\\\\\"\\n\\r]*)/y, _R = /\\\\([\\\\\"])/y, qR = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{6})/y, CM = /^\\n+/, $R = / +$/, wM = / *\\r?\\n/g, xM = /( *)$/, jM = /{\\s*/y, lN = /\\s*}/y, OM = /\\[\\s*/y, gM = /\\s*] */y, KM = /\\s*\\(\\s*/y, vM = /\\s*->\\s*/y, HM = /\\s*:\\s*/y, PM = /\\s*,?\\s*/y, fM = /\\s+/y;\nclass AM {\n constructor(U) {\n this.body = [], IV.lastIndex = 0;\n let l = 0;\n for (; ; ) {\n let S = IV.exec(U);\n if (S === null)\n break;\n l = IV.lastIndex;\n try {\n this.body.push(Q(S[1]));\n } catch (p) {\n if (p instanceof SyntaxError)\n continue;\n throw p;\n }\n }\n function d(S) {\n return S.lastIndex = l, S.test(U);\n }\n function t(S, p) {\n if (U[l] === S)\n return l++, !0;\n if (p)\n throw new p(`Expected ${S}`);\n return !1;\n }\n function Z(S, p) {\n if (d(S))\n return l = S.lastIndex, !0;\n if (p)\n throw new p(`Expected ${S.toString()}`);\n return !1;\n }\n function F(S) {\n S.lastIndex = l;\n let p = S.exec(U);\n if (p === null)\n throw new SyntaxError(`Expected ${S.toString()}`);\n return l = S.lastIndex, p;\n }\n function c(S) {\n return F(S)[1];\n }\n function Q(S) {\n let p = V(), L = a();\n if (p === null && Object.keys(L).length === 0)\n throw new SyntaxError(\"Expected message value or attributes\");\n return {\n id: S,\n value: p,\n attributes: L\n };\n }\n function a() {\n let S = /* @__PURE__ */ Object.create(null);\n for (; d(fR); ) {\n let p = c(fR), L = V();\n if (L === null)\n throw new SyntaxError(\"Expected attribute value\");\n S[p] = L;\n }\n return S;\n }\n function V() {\n let S;\n if (d(KQ) && (S = c(KQ)), U[l] === \"{\" || U[l] === \"}\")\n return W(S ? [S] : [], 1 / 0);\n let p = Y();\n return p ? S ? W([S, p], p.length) : (p.value = o(p.value, CM), W([p], p.length)) : S ? o(S, $R) : null;\n }\n function W(S = [], p) {\n for (; ; ) {\n if (d(KQ)) {\n S.push(c(KQ));\n continue;\n }\n if (U[l] === \"{\") {\n S.push(i());\n continue;\n }\n if (U[l] === \"}\")\n throw new SyntaxError(\"Unbalanced closing brace\");\n let r = Y();\n if (r) {\n S.push(r), p = Math.min(p, r.length);\n continue;\n }\n break;\n }\n let L = S.length - 1, I = S[L];\n typeof I == \"string\" && (S[L] = o(I, $R));\n let D = [];\n for (let r of S)\n r instanceof UN && (r = r.value.slice(0, r.value.length - p)), r && D.push(r);\n return D;\n }\n function i() {\n Z(jM, SyntaxError);\n let S = R();\n if (Z(lN))\n return S;\n if (Z(vM)) {\n let p = J();\n return Z(lN, SyntaxError), {\n type: \"select\",\n selector: S,\n ...p\n };\n }\n throw new SyntaxError(\"Unclosed placeable\");\n }\n function R() {\n if (U[l] === \"{\")\n return i();\n if (d(AR)) {\n let [, S, p, L = null] = F(AR);\n if (S === \"$\")\n return {\n type: \"var\",\n name: p\n };\n if (Z(KM)) {\n let I = N();\n if (S === \"-\")\n return {\n type: \"term\",\n name: p,\n attr: L,\n args: I\n };\n if (EM.test(p))\n return {\n type: \"func\",\n name: p,\n args: I\n };\n throw new SyntaxError(\"Function names must be all upper-case\");\n }\n return S === \"-\" ? {\n type: \"term\",\n name: p,\n attr: L,\n args: []\n } : {\n type: \"mesg\",\n name: p,\n attr: L\n };\n }\n return G();\n }\n function N() {\n let S = [];\n for (; ; ) {\n switch (U[l]) {\n case \")\":\n return l++, S;\n case void 0:\n throw new SyntaxError(\"Unclosed argument list\");\n }\n S.push(b()), Z(PM);\n }\n }\n function b() {\n let S = R();\n return S.type !== \"mesg\" ? S : Z(HM) ? {\n type: \"narg\",\n name: S.name,\n value: G()\n } : S;\n }\n function J() {\n let S = [], p = 0, L;\n for (; d(IM); ) {\n t(\"*\") && (L = p);\n let I = M(), D = V();\n if (D === null)\n throw new SyntaxError(\"Expected variant value\");\n S[p++] = {\n key: I,\n value: D\n };\n }\n if (p === 0)\n return null;\n if (L === void 0)\n throw new SyntaxError(\"Expected default variant\");\n return {\n variants: S,\n star: L\n };\n }\n function M() {\n Z(OM, SyntaxError);\n let S;\n return d(DV) ? S = T() : S = {\n type: \"str\",\n value: c(DM)\n }, Z(gM, SyntaxError), S;\n }\n function G() {\n if (d(DV))\n return T();\n if (U[l] === '\"')\n return u();\n throw new SyntaxError(\"Invalid expression\");\n }\n function T() {\n let [, S, p = \"\"] = F(DV), L = p.length;\n return {\n type: \"num\",\n value: parseFloat(S),\n precision: L\n };\n }\n function u() {\n t('\"', SyntaxError);\n let S = \"\";\n for (; ; ) {\n if (S += c(rM), U[l] === \"\\\\\") {\n S += X();\n continue;\n }\n if (t('\"'))\n return {\n type: \"str\",\n value: S\n };\n throw new SyntaxError(\"Unclosed string literal\");\n }\n }\n function X() {\n if (d(_R))\n return c(_R);\n if (d(qR)) {\n let [, S, p] = F(qR), L = parseInt(S || p, 16);\n return L <= 55295 || 57344 <= L ? String.fromCodePoint(L) : \"�\";\n }\n throw new SyntaxError(\"Unknown escape sequence\");\n }\n function Y() {\n let S = l;\n switch (Z(fM), U[l]) {\n case \".\":\n case \"[\":\n case \"*\":\n case \"}\":\n case void 0:\n return !1;\n case \"{\":\n return y(U.slice(S, l));\n }\n return U[l - 1] === \" \" ? y(U.slice(S, l)) : !1;\n }\n function o(S, p) {\n return S.replace(p, \"\");\n }\n function y(S) {\n let p = S.replace(wM, `\n`), L = xM.exec(S)[1].length;\n return new UN(p, L);\n }\n }\n}\nclass UN {\n constructor(U, l) {\n this.value = U, this.length = l;\n }\n}\nconst _M = /<|&#?\\w+;/, qM = {\n \"http://www.w3.org/1999/xhtml\": [\"em\", \"strong\", \"small\", \"s\", \"cite\", \"q\", \"dfn\", \"abbr\", \"data\", \"time\", \"code\", \"var\", \"samp\", \"kbd\", \"sub\", \"sup\", \"i\", \"b\", \"u\", \"mark\", \"bdi\", \"bdo\", \"span\", \"br\", \"wbr\"]\n}, $M = {\n \"http://www.w3.org/1999/xhtml\": {\n global: [\"title\", \"aria-label\", \"aria-valuetext\"],\n a: [\"download\"],\n area: [\"download\", \"alt\"],\n input: [\"alt\", \"placeholder\"],\n menuitem: [\"label\"],\n menu: [\"label\"],\n optgroup: [\"label\"],\n option: [\"label\"],\n track: [\"label\"],\n img: [\"alt\"],\n textarea: [\"placeholder\"],\n th: [\"abbr\"]\n },\n \"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\": {\n global: [\"accesskey\", \"aria-label\", \"aria-valuetext\", \"label\", \"title\", \"tooltiptext\"],\n description: [\"value\"],\n key: [\"key\", \"keycode\"],\n label: [\"value\"],\n textbox: [\"placeholder\", \"value\"]\n }\n};\nfunction lJ(s, U) {\n const {\n value: l\n } = U;\n if (typeof l == \"string\")\n if (s.localName === \"title\" && s.namespaceURI === \"http://www.w3.org/1999/xhtml\")\n s.textContent = l;\n else if (!_M.test(l))\n s.textContent = l;\n else {\n const d = s.ownerDocument.createElementNS(\"http://www.w3.org/1999/xhtml\", \"template\");\n d.innerHTML = l, UJ(d.content, s);\n }\n Ye(U, s);\n}\nfunction UJ(s, U) {\n for (const l of s.childNodes)\n if (l.nodeType !== l.TEXT_NODE) {\n if (l.hasAttribute(\"data-l10n-name\")) {\n const d = tJ(U, l);\n s.replaceChild(d, l);\n continue;\n }\n if (FJ(l)) {\n const d = ZJ(l);\n s.replaceChild(d, l);\n continue;\n }\n console.warn(`An element of forbidden type \"${l.localName}\" was found in the translation. Only safe text-level elements and elements with data-l10n-name are allowed.`), s.replaceChild(ii(l), l);\n }\n U.textContent = \"\", U.appendChild(s);\n}\nfunction dJ(s, U) {\n if (!s)\n return !1;\n for (let l of s)\n if (l.name === U)\n return !0;\n return !1;\n}\nfunction Ye(s, U) {\n const l = U.hasAttribute(\"data-l10n-attrs\") ? U.getAttribute(\"data-l10n-attrs\").split(\",\").map((d) => d.trim()) : null;\n for (const d of Array.from(U.attributes))\n dN(d.name, U, l) && !dJ(s.attributes, d.name) && U.removeAttribute(d.name);\n if (s.attributes)\n for (const d of Array.from(s.attributes))\n dN(d.name, U, l) && U.getAttribute(d.name) !== d.value && U.setAttribute(d.name, d.value);\n}\nfunction tJ(s, U) {\n const l = U.getAttribute(\"data-l10n-name\"), d = s.querySelector(`[data-l10n-name=\"${l}\"]`);\n if (!d)\n return console.warn(`An element named \"${l}\" wasn't found in the source.`), ii(U);\n if (d.localName !== U.localName)\n return console.warn(`An element named \"${l}\" was found in the translation but its type ${U.localName} didn't match the element found in the source (${d.localName}).`), ii(U);\n s.removeChild(d);\n const t = d.cloneNode(!1);\n return oe(U, t);\n}\nfunction ZJ(s) {\n const U = s.ownerDocument.createElement(s.localName);\n return oe(s, U);\n}\nfunction ii(s) {\n return s.ownerDocument.createTextNode(s.textContent);\n}\nfunction FJ(s) {\n const U = qM[s.namespaceURI];\n return U && U.includes(s.localName);\n}\nfunction dN(s, U, l = null) {\n if (l && l.includes(s))\n return !0;\n const d = $M[U.namespaceURI];\n if (!d)\n return !1;\n const t = s.toLowerCase(), Z = U.localName;\n if (d.global.includes(t))\n return !0;\n if (!d[Z])\n return !1;\n if (d[Z].includes(t))\n return !0;\n if (U.namespaceURI === \"http://www.w3.org/1999/xhtml\" && Z === \"input\" && t === \"value\") {\n const F = U.type.toLowerCase();\n if (F === \"submit\" || F === \"button\" || F === \"reset\")\n return !0;\n }\n return !1;\n}\nfunction oe(s, U) {\n return U.textContent = s.textContent, Ye(s, U), U;\n}\nclass cJ extends Array {\n static from(U) {\n return U instanceof this ? U : new this(U);\n }\n}\nclass nJ extends cJ {\n constructor(U) {\n if (super(), Symbol.asyncIterator in Object(U))\n this.iterator = U[Symbol.asyncIterator]();\n else if (Symbol.iterator in Object(U))\n this.iterator = U[Symbol.iterator]();\n else\n throw new TypeError(\"Argument must implement the iteration protocol.\");\n }\n [Symbol.asyncIterator]() {\n const U = this;\n let l = 0;\n return {\n async next() {\n return U.length <= l && U.push(U.iterator.next()), U[l++];\n }\n };\n }\n async touchNext(U = 1) {\n let l = 0;\n for (; l++ < U; ) {\n const d = this[this.length - 1];\n if (d && (await d).done)\n break;\n this.push(this.iterator.next());\n }\n return this[this.length - 1];\n }\n}\nclass sJ {\n constructor(U = [], l) {\n this.resourceIds = U, this.generateBundles = l, this.onChange(!0);\n }\n addResourceIds(U, l = !1) {\n return this.resourceIds.push(...U), this.onChange(l), this.resourceIds.length;\n }\n removeResourceIds(U) {\n return this.resourceIds = this.resourceIds.filter((l) => !U.includes(l)), this.onChange(), this.resourceIds.length;\n }\n async formatWithFallback(U, l) {\n const d = [];\n let t = !1;\n for await (const Z of this.bundles) {\n t = !0;\n const F = VJ(l, Z, U, d);\n if (F.size === 0)\n break;\n if (typeof console < \"u\") {\n const c = Z.locales[0], Q = Array.from(F).join(\", \");\n console.warn(`[fluent] Missing translations in ${c}: ${Q}`);\n }\n }\n return !t && typeof console < \"u\" && console.warn(`[fluent] Request for keys failed because no resource bundles got generated.\n keys: ${JSON.stringify(U)}.\n resourceIds: ${JSON.stringify(this.resourceIds)}.`), d;\n }\n formatMessages(U) {\n return this.formatWithFallback(U, aJ);\n }\n formatValues(U) {\n return this.formatWithFallback(U, QJ);\n }\n async formatValue(U, l) {\n const [d] = await this.formatValues([{\n id: U,\n args: l\n }]);\n return d;\n }\n handleEvent() {\n this.onChange();\n }\n onChange(U = !1) {\n this.bundles = nJ.from(this.generateBundles(this.resourceIds)), U && this.bundles.touchNext(2);\n }\n}\nfunction QJ(s, U, l, d) {\n return l.value ? s.formatPattern(l.value, d, U) : null;\n}\nfunction aJ(s, U, l, d) {\n const t = {\n value: null,\n attributes: null\n };\n l.value && (t.value = s.formatPattern(l.value, d, U));\n let Z = Object.keys(l.attributes);\n if (Z.length > 0) {\n t.attributes = new Array(Z.length);\n for (let [F, c] of Z.entries()) {\n let Q = s.formatPattern(l.attributes[c], d, U);\n t.attributes[F] = {\n name: c,\n value: Q\n };\n }\n }\n return t;\n}\nfunction VJ(s, U, l, d) {\n const t = [], Z = /* @__PURE__ */ new Set();\n return l.forEach(({\n id: F,\n args: c\n }, Q) => {\n if (d[Q] !== void 0)\n return;\n let a = U.getMessage(F);\n if (a) {\n if (t.length = 0, d[Q] = s(U, t, a, c), t.length > 0 && typeof console < \"u\") {\n const V = U.locales[0], W = t.join(\", \");\n console.warn(`[fluent][resolver] errors in ${V}/${F}: ${W}.`);\n }\n } else\n Z.add(F);\n }), Z;\n}\nconst fZ = \"data-l10n-id\", Zn = \"data-l10n-args\", WJ = `[${fZ}]`;\nclass iJ extends sJ {\n constructor(U, l) {\n super(U, l), this.roots = /* @__PURE__ */ new Set(), this.pendingrAF = null, this.pendingElements = /* @__PURE__ */ new Set(), this.windowElement = null, this.mutationObserver = null, this.observerConfig = {\n attributes: !0,\n characterData: !1,\n childList: !0,\n subtree: !0,\n attributeFilter: [fZ, Zn]\n };\n }\n onChange(U = !1) {\n super.onChange(U), this.roots && this.translateRoots();\n }\n setAttributes(U, l, d) {\n return U.setAttribute(fZ, l), d ? U.setAttribute(Zn, JSON.stringify(d)) : U.removeAttribute(Zn), U;\n }\n getAttributes(U) {\n return {\n id: U.getAttribute(fZ),\n args: JSON.parse(U.getAttribute(Zn) || null)\n };\n }\n connectRoot(U) {\n for (const l of this.roots)\n if (l === U || l.contains(U) || U.contains(l))\n throw new Error(\"Cannot add a root that overlaps with existing root.\");\n if (this.windowElement) {\n if (this.windowElement !== U.ownerDocument.defaultView)\n throw new Error(`Cannot connect a root:\n DOMLocalization already has a root from a different window.`);\n } else\n this.windowElement = U.ownerDocument.defaultView, this.mutationObserver = new this.windowElement.MutationObserver((l) => this.translateMutations(l));\n this.roots.add(U), this.mutationObserver.observe(U, this.observerConfig);\n }\n disconnectRoot(U) {\n return this.roots.delete(U), this.pauseObserving(), this.roots.size === 0 ? (this.mutationObserver = null, this.windowElement && this.pendingrAF && this.windowElement.cancelAnimationFrame(this.pendingrAF), this.windowElement = null, this.pendingrAF = null, this.pendingElements.clear(), !0) : (this.resumeObserving(), !1);\n }\n translateRoots() {\n const U = Array.from(this.roots);\n return Promise.all(U.map((l) => this.translateFragment(l)));\n }\n pauseObserving() {\n this.mutationObserver && (this.translateMutations(this.mutationObserver.takeRecords()), this.mutationObserver.disconnect());\n }\n resumeObserving() {\n if (this.mutationObserver)\n for (const U of this.roots)\n this.mutationObserver.observe(U, this.observerConfig);\n }\n translateMutations(U) {\n for (const l of U)\n switch (l.type) {\n case \"attributes\":\n l.target.hasAttribute(\"data-l10n-id\") && this.pendingElements.add(l.target);\n break;\n case \"childList\":\n for (const d of l.addedNodes)\n if (d.nodeType === d.ELEMENT_NODE)\n if (d.childElementCount)\n for (const t of this.getTranslatables(d))\n this.pendingElements.add(t);\n else d.hasAttribute(fZ) && this.pendingElements.add(d);\n break;\n }\n this.pendingElements.size > 0 && this.pendingrAF === null && (this.pendingrAF = this.windowElement.requestAnimationFrame(() => {\n this.translateElements(Array.from(this.pendingElements)), this.pendingElements.clear(), this.pendingrAF = null;\n }));\n }\n translateFragment(U) {\n return this.translateElements(this.getTranslatables(U));\n }\n async translateElements(U) {\n if (!U.length)\n return;\n const l = U.map(this.getKeysForElement), d = await this.formatMessages(l);\n return this.applyTranslations(U, d);\n }\n applyTranslations(U, l) {\n this.pauseObserving();\n for (let d = 0; d < U.length; d++)\n l[d] !== void 0 && lJ(U[d], l[d]);\n this.resumeObserving();\n }\n getTranslatables(U) {\n const l = Array.from(U.querySelectorAll(WJ));\n return typeof U.hasAttribute == \"function\" && U.hasAttribute(fZ) && l.push(U), l;\n }\n getKeysForElement(U) {\n return {\n id: U.getAttribute(fZ),\n args: JSON.parse(U.getAttribute(Zn) || null)\n };\n }\n}\nvar FQ, zc, kc, yU, _c, pe, Be;\nconst kn = class kn {\n constructor({\n lang: U,\n isRTL: l\n }, d = null) {\n m(this, FQ);\n m(this, zc, /* @__PURE__ */ new Set());\n m(this, kc);\n m(this, yU);\n var t, Z;\n e(this, kc, h(t = kn, _c, pe).call(t, U)), e(this, yU, d), e(this, FQ, l ?? h(Z = kn, _c, Be).call(Z, n(this, kc)) ? \"rtl\" : \"ltr\");\n }\n _setL10n(U) {\n e(this, yU, U);\n }\n getLanguage() {\n return n(this, kc);\n }\n getDirection() {\n return n(this, FQ);\n }\n async get(U, l = null, d) {\n var Z;\n return Array.isArray(U) ? (U = U.map((c) => ({\n id: c\n })), (await n(this, yU).formatMessages(U)).map((c) => c.value)) : ((Z = (await n(this, yU).formatMessages([{\n id: U,\n args: l\n }]))[0]) == null ? void 0 : Z.value) || d;\n }\n async translate(U) {\n n(this, zc).add(U);\n try {\n n(this, yU).connectRoot(U), await n(this, yU).translateRoots();\n } catch {\n }\n }\n async translateOnce(U) {\n try {\n await n(this, yU).translateElements([U]);\n } catch (l) {\n console.error(`translateOnce: \"${l}\".`);\n }\n }\n async destroy() {\n for (const U of n(this, zc))\n n(this, yU).disconnectRoot(U);\n n(this, zc).clear(), n(this, yU).pauseObserving();\n }\n pause() {\n n(this, yU).pauseObserving();\n }\n resume() {\n n(this, yU).resumeObserving();\n }\n};\nFQ = new WeakMap(), zc = new WeakMap(), kc = new WeakMap(), yU = new WeakMap(), _c = new WeakSet(), pe = function(U) {\n return U = (U == null ? void 0 : U.toLowerCase()) || \"en-us\", {\n en: \"en-us\",\n es: \"es-es\",\n fy: \"fy-nl\",\n ga: \"ga-ie\",\n gu: \"gu-in\",\n hi: \"hi-in\",\n hy: \"hy-am\",\n nb: \"nb-no\",\n ne: \"ne-np\",\n nn: \"nn-no\",\n pa: \"pa-in\",\n pt: \"pt-pt\",\n sv: \"sv-se\",\n zh: \"zh-cn\"\n }[U] || U;\n}, Be = function(U) {\n const l = U.split(\"-\", 1)[0];\n return [\"ar\", \"he\", \"fa\", \"ps\", \"ur\"].includes(l);\n}, m(kn, _c);\nlet Ri = kn;\nfunction tN(s, U) {\n const l = new AM(U), d = new kM(s), t = d.addResource(l);\n return t.length && console.error(\"L10n errors\", t), d;\n}\nvar AU, ye, Le, ze, ke, Ni;\nconst qZ = class qZ extends Ri {\n constructor(U) {\n super({\n lang: U\n });\n const l = U ? h(qZ, AU, ye).bind(qZ, \"en-us\", this.getLanguage()) : h(qZ, AU, ke).bind(qZ, this.getLanguage());\n this._setL10n(new iJ([], l));\n }\n};\nAU = new WeakSet(), ye = async function* (U, l) {\n const {\n baseURL: d,\n paths: t\n } = await h(this, AU, ze).call(this), Z = [l];\n if (U !== l) {\n const F = l.split(\"-\", 1)[0];\n F !== l && Z.push(F), Z.push(U);\n }\n for (const F of Z) {\n const c = await h(this, AU, Le).call(this, F, d, t);\n c ? yield c : F === \"en-us\" && (yield h(this, AU, Ni).call(this, F));\n }\n}, Le = async function(U, l, d) {\n const t = d[U];\n if (!t)\n return null;\n const Z = new URL(t, l), F = await wR(Z, \"text\");\n return tN(U, F);\n}, ze = async function() {\n try {\n const {\n href: U\n } = document.querySelector('link[type=\"application/l10n\"]'), l = await wR(U, \"json\");\n return {\n baseURL: U.replace(/[^/]*$/, \"\") || \"./\",\n paths: l\n };\n } catch {\n }\n return {\n baseURL: \"./\",\n paths: /* @__PURE__ */ Object.create(null)\n };\n}, ke = async function* (U) {\n yield h(this, AU, Ni).call(this, U);\n}, Ni = async function(U) {\n return tN(U, `pdfjs-previous-button =\n .title = Previous Page\npdfjs-previous-button-label = Previous\npdfjs-next-button =\n .title = Next Page\npdfjs-next-button-label = Next\npdfjs-page-input =\n .title = Page\npdfjs-of-pages = of { $pagesCount }\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n .title = Zoom Out\npdfjs-zoom-out-button-label = Zoom Out\npdfjs-zoom-in-button =\n .title = Zoom In\npdfjs-zoom-in-button-label = Zoom In\npdfjs-zoom-select =\n .title = Zoom\npdfjs-presentation-mode-button =\n .title = Switch to Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n .title = Open File\npdfjs-open-file-button-label = Open\npdfjs-print-button =\n .title = Print\npdfjs-print-button-label = Print\npdfjs-save-button =\n .title = Save\npdfjs-save-button-label = Save\npdfjs-download-button =\n .title = Download\npdfjs-download-button-label = Download\npdfjs-bookmark-button =\n .title = Current Page (View URL from Current Page)\npdfjs-bookmark-button-label = Current Page\npdfjs-tools-button =\n .title = Tools\npdfjs-tools-button-label = Tools\npdfjs-first-page-button =\n .title = Go to First Page\npdfjs-first-page-button-label = Go to First Page\npdfjs-last-page-button =\n .title = Go to Last Page\npdfjs-last-page-button-label = Go to Last Page\npdfjs-page-rotate-cw-button =\n .title = Rotate Clockwise\npdfjs-page-rotate-cw-button-label = Rotate Clockwise\npdfjs-page-rotate-ccw-button =\n .title = Rotate Counterclockwise\npdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise\npdfjs-cursor-text-select-tool-button =\n .title = Enable Text Selection Tool\npdfjs-cursor-text-select-tool-button-label = Text Selection Tool\npdfjs-cursor-hand-tool-button =\n .title = Enable Hand Tool\npdfjs-cursor-hand-tool-button-label = Hand Tool\npdfjs-scroll-page-button =\n .title = Use Page Scrolling\npdfjs-scroll-page-button-label = Page Scrolling\npdfjs-scroll-vertical-button =\n .title = Use Vertical Scrolling\npdfjs-scroll-vertical-button-label = Vertical Scrolling\npdfjs-scroll-horizontal-button =\n .title = Use Horizontal Scrolling\npdfjs-scroll-horizontal-button-label = Horizontal Scrolling\npdfjs-scroll-wrapped-button =\n .title = Use Wrapped Scrolling\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\npdfjs-spread-none-button =\n .title = Do not join page spreads\npdfjs-spread-none-button-label = No Spreads\npdfjs-spread-odd-button =\n .title = Join page spreads starting with odd-numbered pages\npdfjs-spread-odd-button-label = Odd Spreads\npdfjs-spread-even-button =\n .title = Join page spreads starting with even-numbered pages\npdfjs-spread-even-button-label = Even Spreads\npdfjs-document-properties-button =\n .title = Document Properties…\npdfjs-document-properties-button-label = Document Properties…\npdfjs-document-properties-file-name = File name:\npdfjs-document-properties-file-size = File size:\npdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bytes)\npdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bytes)\npdfjs-document-properties-title = Title:\npdfjs-document-properties-author = Author:\npdfjs-document-properties-subject = Subject:\npdfjs-document-properties-keywords = Keywords:\npdfjs-document-properties-creation-date = Creation Date:\npdfjs-document-properties-modification-date = Modification Date:\npdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: \"short\", timeStyle: \"medium\") }\npdfjs-document-properties-creator = Creator:\npdfjs-document-properties-producer = PDF Producer:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Page Count:\npdfjs-document-properties-page-size = Page Size:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portrait\npdfjs-document-properties-page-size-orientation-landscape = landscape\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\npdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Yes\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Close\npdfjs-print-progress-message = Preparing document for printing…\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancel\npdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser.\npdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing.\npdfjs-toggle-sidebar-button =\n .title = Toggle Sidebar\npdfjs-toggle-sidebar-notification-button =\n .title = Toggle Sidebar (document contains outline/attachments/layers)\npdfjs-toggle-sidebar-button-label = Toggle Sidebar\npdfjs-document-outline-button =\n .title = Show Document Outline (double-click to expand/collapse all items)\npdfjs-document-outline-button-label = Document Outline\npdfjs-attachments-button =\n .title = Show Attachments\npdfjs-attachments-button-label = Attachments\npdfjs-layers-button =\n .title = Show Layers (double-click to reset all layers to the default state)\npdfjs-layers-button-label = Layers\npdfjs-thumbs-button =\n .title = Show Thumbnails\npdfjs-thumbs-button-label = Thumbnails\npdfjs-current-outline-item-button =\n .title = Find Current Outline Item\npdfjs-current-outline-item-button-label = Current Outline Item\npdfjs-findbar-button =\n .title = Find in Document\npdfjs-findbar-button-label = Find\npdfjs-additional-layers = Additional Layers\npdfjs-thumb-page-title =\n .title = Page { $page }\npdfjs-thumb-page-canvas =\n .aria-label = Thumbnail of Page { $page }\npdfjs-find-input =\n .title = Find\n .placeholder = Find in document…\npdfjs-find-previous-button =\n .title = Find the previous occurrence of the phrase\npdfjs-find-previous-button-label = Previous\npdfjs-find-next-button =\n .title = Find the next occurrence of the phrase\npdfjs-find-next-button-label = Next\npdfjs-find-highlight-checkbox = Highlight All\npdfjs-find-match-case-checkbox-label = Match Case\npdfjs-find-match-diacritics-checkbox-label = Match Diacritics\npdfjs-find-entire-word-checkbox-label = Whole Words\npdfjs-find-reached-top = Reached top of document, continued from bottom\npdfjs-find-reached-bottom = Reached end of document, continued from top\npdfjs-find-match-count =\n { $total ->\n [one] { $current } of { $total } match\n *[other] { $current } of { $total } matches\n }\npdfjs-find-match-count-limit =\n { $limit ->\n [one] More than { $limit } match\n *[other] More than { $limit } matches\n }\npdfjs-find-not-found = Phrase not found\npdfjs-page-scale-width = Page Width\npdfjs-page-scale-fit = Page Fit\npdfjs-page-scale-auto = Automatic Zoom\npdfjs-page-scale-actual = Actual Size\npdfjs-page-scale-percent = { $scale }%\npdfjs-page-landmark =\n .aria-label = Page { $page }\npdfjs-loading-error = An error occurred while loading the PDF.\npdfjs-invalid-file-error = Invalid or corrupted PDF file.\npdfjs-missing-file-error = Missing PDF file.\npdfjs-unexpected-response-error = Unexpected server response.\npdfjs-rendering-error = An error occurred while rendering the page.\npdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: \"short\", timeStyle: \"medium\") }\npdfjs-text-annotation-type =\n .alt = [{ $type } Annotation]\npdfjs-password-label = Enter the password to open this PDF file.\npdfjs-password-invalid = Invalid password. Please try again.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancel\npdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.\npdfjs-editor-free-text-button =\n .title = Text\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n .title = Draw\npdfjs-editor-ink-button-label = Draw\npdfjs-editor-stamp-button =\n .title = Add or edit images\npdfjs-editor-stamp-button-label = Add or edit images\npdfjs-editor-highlight-button =\n .title = Highlight\npdfjs-editor-highlight-button-label = Highlight\npdfjs-highlight-floating-button1 =\n .title = Highlight\n .aria-label = Highlight\npdfjs-highlight-floating-button-label = Highlight\npdfjs-editor-remove-ink-button =\n .title = Remove drawing\npdfjs-editor-remove-freetext-button =\n .title = Remove text\npdfjs-editor-remove-stamp-button =\n .title = Remove image\npdfjs-editor-remove-highlight-button =\n .title = Remove highlight\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Size\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Thickness\npdfjs-editor-ink-opacity-input = Opacity\npdfjs-editor-stamp-add-image-button =\n .title = Add image\npdfjs-editor-stamp-add-image-button-label = Add image\npdfjs-editor-free-highlight-thickness-input = Thickness\npdfjs-editor-free-highlight-thickness-title =\n .title = Change thickness when highlighting items other than text\npdfjs-free-text =\n .aria-label = Text Editor\npdfjs-free-text-default-content = Start typing…\npdfjs-ink =\n .aria-label = Draw Editor\npdfjs-ink-canvas =\n .aria-label = User-created image\npdfjs-editor-alt-text-button-label = Alt text\npdfjs-editor-alt-text-edit-button-label = Edit alt text\npdfjs-editor-alt-text-dialog-label = Choose an option\npdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can’t see the image or when it doesn’t load.\npdfjs-editor-alt-text-add-description-label = Add a description\npdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions.\npdfjs-editor-alt-text-mark-decorative-label = Mark as decorative\npdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks.\npdfjs-editor-alt-text-cancel-button = Cancel\npdfjs-editor-alt-text-save-button = Save\npdfjs-editor-alt-text-decorative-tooltip = Marked as decorative\npdfjs-editor-alt-text-textarea =\n .placeholder = For example, “A young man sits down at a table to eat a meal”\npdfjs-editor-resizer-top-left =\n .aria-label = Top left corner — resize\npdfjs-editor-resizer-top-middle =\n .aria-label = Top middle — resize\npdfjs-editor-resizer-top-right =\n .aria-label = Top right corner — resize\npdfjs-editor-resizer-middle-right =\n .aria-label = Middle right — resize\npdfjs-editor-resizer-bottom-right =\n .aria-label = Bottom right corner — resize\npdfjs-editor-resizer-bottom-middle =\n .aria-label = Bottom middle — resize\npdfjs-editor-resizer-bottom-left =\n .aria-label = Bottom left corner — resize\npdfjs-editor-resizer-middle-left =\n .aria-label = Middle left — resize\npdfjs-editor-highlight-colorpicker-label = Highlight color\npdfjs-editor-colorpicker-button =\n .title = Change color\npdfjs-editor-colorpicker-dropdown =\n .aria-label = Color choices\npdfjs-editor-colorpicker-yellow =\n .title = Yellow\npdfjs-editor-colorpicker-green =\n .title = Green\npdfjs-editor-colorpicker-blue =\n .title = Blue\npdfjs-editor-colorpicker-pink =\n .title = Pink\npdfjs-editor-colorpicker-red =\n .title = Red\npdfjs-editor-highlight-show-all-button-label = Show all\npdfjs-editor-highlight-show-all-button =\n .title = Show all\npdfjs-editor-new-alt-text-dialog-edit-label = Edit alt text (image description)\npdfjs-editor-new-alt-text-dialog-add-label = Add alt text (image description)\npdfjs-editor-new-alt-text-textarea =\n .placeholder = Write your description here…\npdfjs-editor-new-alt-text-description = Short description for people who can’t see the image or when the image doesn’t load.\npdfjs-editor-new-alt-text-disclaimer1 = This alt text was created automatically and may be inaccurate.\npdfjs-editor-new-alt-text-disclaimer-learn-more-url = Learn more\npdfjs-editor-new-alt-text-create-automatically-button-label = Create alt text automatically\npdfjs-editor-new-alt-text-not-now-button = Not now\npdfjs-editor-new-alt-text-error-title = Couldn’t create alt text automatically\npdfjs-editor-new-alt-text-error-description = Please write your own alt text or try again later.\npdfjs-editor-new-alt-text-error-close-button = Close\npdfjs-editor-new-alt-text-ai-model-downloading-progress = Downloading alt text AI model ({ $downloadedSize } of { $totalSize } MB)\n .aria-valuetext = Downloading alt text AI model ({ $downloadedSize } of { $totalSize } MB)\npdfjs-editor-new-alt-text-added-button-label = Alt text added\npdfjs-editor-new-alt-text-missing-button-label = Missing alt text\npdfjs-editor-new-alt-text-to-review-button-label = Review alt text\npdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Created automatically: { $generatedAltText }\npdfjs-image-alt-text-settings-button =\n .title = Image alt text settings\npdfjs-image-alt-text-settings-button-label = Image alt text settings\npdfjs-editor-alt-text-settings-dialog-label = Image alt text settings\npdfjs-editor-alt-text-settings-automatic-title = Automatic alt text\npdfjs-editor-alt-text-settings-create-model-button-label = Create alt text automatically\npdfjs-editor-alt-text-settings-create-model-description = Suggests descriptions to help people who can’t see the image or when the image doesn’t load.\npdfjs-editor-alt-text-settings-download-model-label = Alt text AI model ({ $totalSize } MB)\npdfjs-editor-alt-text-settings-ai-model-description = Runs locally on your device so your data stays private. Required for automatic alt text.\npdfjs-editor-alt-text-settings-delete-model-button = Delete\npdfjs-editor-alt-text-settings-download-model-button = Download\npdfjs-editor-alt-text-settings-downloading-model-button = Downloading…\npdfjs-editor-alt-text-settings-editor-title = Alt text editor\npdfjs-editor-alt-text-settings-show-dialog-button-label = Show alt text editor right away when adding an image\npdfjs-editor-alt-text-settings-show-dialog-description = Helps you make sure all your images have alt text.\npdfjs-editor-alt-text-settings-close-button = Close`);\n}, m(qZ, AU);\nlet Ac = qZ;\nconst RJ = 1e3, NJ = 50, hJ = 1e3;\nfunction EV() {\n return document.location.hash;\n}\nvar YZ, ll, Ft, oa, pa, Sn, Ba, hi, Ie, De, ei, Ee, re;\nclass eJ {\n constructor({\n linkService: U,\n eventBus: l\n }) {\n m(this, ll);\n m(this, YZ, null);\n this.linkService = U, this.eventBus = l, this._initialized = !1, this._fingerprint = \"\", this.reset(), this.eventBus._on(\"pagesinit\", () => {\n this._isPagesLoaded = !1, this.eventBus._on(\"pagesloaded\", (d) => {\n this._isPagesLoaded = !!d.pagesCount;\n }, {\n once: !0\n });\n });\n }\n initialize({\n fingerprint: U,\n resetHistory: l = !1,\n updateUrl: d = !1\n }) {\n if (!U || typeof U != \"string\") {\n console.error('PDFHistory.initialize: The \"fingerprint\" must be a non-empty string.');\n return;\n }\n this._initialized && this.reset();\n const t = this._fingerprint !== \"\" && this._fingerprint !== U;\n this._fingerprint = U, this._updateUrl = d === !0, this._initialized = !0, h(this, ll, Ee).call(this);\n const Z = window.history.state;\n if (this._popStateInProgress = !1, this._blockHashChange = 0, this._currentHash = EV(), this._numPositionUpdates = 0, this._uid = this._maxUid = 0, this._destination = null, this._position = null, !h(this, ll, Sn).call(this, Z, !0) || l) {\n const {\n hash: c,\n page: Q,\n rotation: a\n } = h(this, ll, hi).call(this, !0);\n if (!c || t || l) {\n h(this, ll, Ft).call(this, null, !0);\n return;\n }\n h(this, ll, Ft).call(this, {\n hash: c,\n page: Q,\n rotation: a\n }, !0);\n return;\n }\n const F = Z.destination;\n h(this, ll, Ba).call(this, F, Z.uid, !0), F.rotation !== void 0 && (this._initialRotation = F.rotation), F.dest ? (this._initialBookmark = JSON.stringify(F.dest), this._destination.page = null) : F.hash ? this._initialBookmark = F.hash : F.page && (this._initialBookmark = `page=${F.page}`);\n }\n reset() {\n this._initialized && (h(this, ll, ei).call(this), this._initialized = !1, h(this, ll, re).call(this)), this._updateViewareaTimeout && (clearTimeout(this._updateViewareaTimeout), this._updateViewareaTimeout = null), this._initialBookmark = null, this._initialRotation = null;\n }\n push({\n namedDest: U = null,\n explicitDest: l,\n pageNumber: d\n }) {\n if (!this._initialized)\n return;\n if (U && typeof U != \"string\") {\n console.error(`PDFHistory.push: \"${U}\" is not a valid namedDest parameter.`);\n return;\n } else if (Array.isArray(l)) {\n if (!h(this, ll, pa).call(this, d) && (d !== null || this._destination)) {\n console.error(`PDFHistory.push: \"${d}\" is not a valid pageNumber parameter.`);\n return;\n }\n } else {\n console.error(`PDFHistory.push: \"${l}\" is not a valid explicitDest parameter.`);\n return;\n }\n const t = U || JSON.stringify(l);\n if (!t)\n return;\n let Z = !1;\n if (this._destination && (bJ(this._destination.hash, t) || mJ(this._destination.dest, l))) {\n if (this._destination.page)\n return;\n Z = !0;\n }\n this._popStateInProgress && !Z || (h(this, ll, Ft).call(this, {\n dest: l,\n hash: t,\n page: d,\n rotation: this.linkService.rotation\n }, Z), this._popStateInProgress || (this._popStateInProgress = !0, Promise.resolve().then(() => {\n this._popStateInProgress = !1;\n })));\n }\n pushPage(U) {\n var l;\n if (this._initialized) {\n if (!h(this, ll, pa).call(this, U)) {\n console.error(`PDFHistory.pushPage: \"${U}\" is not a valid page number.`);\n return;\n }\n ((l = this._destination) == null ? void 0 : l.page) !== U && (this._popStateInProgress || (h(this, ll, Ft).call(this, {\n dest: null,\n hash: `page=${U}`,\n page: U,\n rotation: this.linkService.rotation\n }), this._popStateInProgress || (this._popStateInProgress = !0, Promise.resolve().then(() => {\n this._popStateInProgress = !1;\n }))));\n }\n }\n pushCurrentPosition() {\n !this._initialized || this._popStateInProgress || h(this, ll, oa).call(this);\n }\n back() {\n if (!this._initialized || this._popStateInProgress)\n return;\n const U = window.history.state;\n h(this, ll, Sn).call(this, U) && U.uid > 0 && window.history.back();\n }\n forward() {\n if (!this._initialized || this._popStateInProgress)\n return;\n const U = window.history.state;\n h(this, ll, Sn).call(this, U) && U.uid < this._maxUid && window.history.forward();\n }\n get popStateInProgress() {\n return this._initialized && (this._popStateInProgress || this._blockHashChange > 0);\n }\n get initialBookmark() {\n return this._initialized ? this._initialBookmark : null;\n }\n get initialRotation() {\n return this._initialized ? this._initialRotation : null;\n }\n}\nYZ = new WeakMap(), ll = new WeakSet(), Ft = function(U, l = !1) {\n const d = l || !this._destination, t = {\n fingerprint: this._fingerprint,\n uid: d ? this._uid : this._uid + 1,\n destination: U\n };\n h(this, ll, Ba).call(this, U, t.uid);\n let Z;\n if (this._updateUrl && (U != null && U.hash)) {\n const F = document.location.href.split(\"#\", 1)[0];\n F.startsWith(\"file://\") || (Z = `${F}#${U.hash}`);\n }\n d ? window.history.replaceState(t, \"\", Z) : window.history.pushState(t, \"\", Z);\n}, oa = function(U = !1) {\n if (!this._position)\n return;\n let l = this._position;\n if (U && (l = Object.assign(/* @__PURE__ */ Object.create(null), this._position), l.temporary = !0), !this._destination) {\n h(this, ll, Ft).call(this, l);\n return;\n }\n if (this._destination.temporary) {\n h(this, ll, Ft).call(this, l, !0);\n return;\n }\n if (this._destination.hash === l.hash || !this._destination.page && this._numPositionUpdates <= NJ)\n return;\n let d = !1;\n if (this._destination.page >= l.first && this._destination.page <= l.page) {\n if (this._destination.dest !== void 0 || !this._destination.first)\n return;\n d = !0;\n }\n h(this, ll, Ft).call(this, l, d);\n}, pa = function(U) {\n return Number.isInteger(U) && U > 0 && U <= this.linkService.pagesCount;\n}, Sn = function(U, l = !1) {\n if (!U)\n return !1;\n if (U.fingerprint !== this._fingerprint)\n if (l) {\n if (typeof U.fingerprint != \"string\" || U.fingerprint.length !== this._fingerprint.length)\n return !1;\n const [d] = performance.getEntriesByType(\"navigation\");\n if ((d == null ? void 0 : d.type) !== \"reload\")\n return !1;\n } else\n return !1;\n return !(!Number.isInteger(U.uid) || U.uid < 0 || U.destination === null || typeof U.destination != \"object\");\n}, Ba = function(U, l, d = !1) {\n this._updateViewareaTimeout && (clearTimeout(this._updateViewareaTimeout), this._updateViewareaTimeout = null), d && (U != null && U.temporary) && delete U.temporary, this._destination = U, this._uid = l, this._maxUid = Math.max(this._maxUid, l), this._numPositionUpdates = 0;\n}, hi = function(U = !1) {\n const l = unescape(EV()).substring(1), d = mV(l), t = d.get(\"nameddest\") || \"\";\n let Z = d.get(\"page\") | 0;\n return (!h(this, ll, pa).call(this, Z) || U && t.length > 0) && (Z = null), {\n hash: l,\n page: Z,\n rotation: this.linkService.rotation\n };\n}, Ie = function({\n location: U\n}) {\n this._updateViewareaTimeout && (clearTimeout(this._updateViewareaTimeout), this._updateViewareaTimeout = null), this._position = {\n hash: U.pdfOpenParams.substring(1),\n page: this.linkService.page,\n first: U.pageNumber,\n rotation: U.rotation\n }, !this._popStateInProgress && (this._isPagesLoaded && this._destination && !this._destination.page && this._numPositionUpdates++, this._updateViewareaTimeout = setTimeout(() => {\n this._popStateInProgress || h(this, ll, oa).call(this, !0), this._updateViewareaTimeout = null;\n }, hJ));\n}, De = function({\n state: U\n}) {\n const l = EV(), d = this._currentHash !== l;\n if (this._currentHash = l, !U) {\n this._uid++;\n const {\n hash: Z,\n page: F,\n rotation: c\n } = h(this, ll, hi).call(this);\n h(this, ll, Ft).call(this, {\n hash: Z,\n page: F,\n rotation: c\n }, !0);\n return;\n }\n if (!h(this, ll, Sn).call(this, U))\n return;\n this._popStateInProgress = !0, d && (this._blockHashChange++, JM({\n target: window,\n name: \"hashchange\",\n delay: RJ\n }).then(() => {\n this._blockHashChange--;\n }));\n const t = U.destination;\n h(this, ll, Ba).call(this, t, U.uid, !0), Ne(t.rotation) && (this.linkService.rotation = t.rotation), t.dest ? this.linkService.goToDestination(t.dest) : t.hash ? this.linkService.setHash(t.hash) : t.page && (this.linkService.page = t.page), Promise.resolve().then(() => {\n this._popStateInProgress = !1;\n });\n}, ei = function() {\n (!this._destination || this._destination.temporary) && h(this, ll, oa).call(this);\n}, Ee = function() {\n if (n(this, YZ))\n return;\n e(this, YZ, new AbortController());\n const {\n signal: U\n } = n(this, YZ);\n this.eventBus._on(\"updateviewarea\", h(this, ll, Ie).bind(this), {\n signal: U\n }), window.addEventListener(\"popstate\", h(this, ll, De).bind(this), {\n signal: U\n }), window.addEventListener(\"pagehide\", h(this, ll, ei).bind(this), {\n signal: U\n });\n}, re = function() {\n var U;\n (U = n(this, YZ)) == null || U.abort(), e(this, YZ, null);\n};\nfunction bJ(s, U) {\n return typeof s != \"string\" || typeof U != \"string\" ? !1 : s === U || mV(s).get(\"nameddest\") === U;\n}\nfunction mJ(s, U) {\n function l(d, t) {\n if (typeof d != typeof t || Array.isArray(d) || Array.isArray(t))\n return !1;\n if (d !== null && typeof d == \"object\" && t !== null) {\n if (Object.keys(d).length !== Object.keys(t).length)\n return !1;\n for (const Z in d)\n if (!l(d[Z], t[Z]))\n return !1;\n return !0;\n }\n return d === t || Number.isNaN(d) && Number.isNaN(t);\n }\n if (!(Array.isArray(s) && Array.isArray(U)) || s.length !== U.length)\n return !1;\n for (let d = 0, t = s.length; d < t; d++)\n if (!l(s[d], U[d]))\n return !1;\n return !0;\n}\nvar cQ, nQ, sQ, QQ, aQ, Ic;\nclass MJ {\n constructor(U) {\n m(this, cQ, null);\n m(this, nQ, null);\n m(this, sQ, null);\n m(this, QQ, null);\n m(this, aQ, null);\n m(this, Ic);\n this.pdfPage = U.pdfPage, this.accessibilityManager = U.accessibilityManager, this.l10n = U.l10n, this.l10n || (this.l10n = new Ac()), this.annotationEditorLayer = null, this.div = null, this._cancelled = !1, e(this, Ic, U.uiManager), e(this, cQ, U.annotationLayer || null), e(this, aQ, U.textLayer || null), e(this, nQ, U.drawLayer || null), e(this, sQ, U.onAppend || null), e(this, QQ, U.structTreeLayer || null);\n }\n async render(U, l = \"display\") {\n var F;\n if (l !== \"display\" || this._cancelled)\n return;\n const d = U.clone({\n dontFlip: !0\n });\n if (this.div) {\n this.annotationEditorLayer.update({\n viewport: d\n }), this.show();\n return;\n }\n const t = this.div = document.createElement(\"div\");\n t.className = \"annotationEditorLayer\", t.hidden = !0, t.dir = n(this, Ic).direction, (F = n(this, sQ)) == null || F.call(this, t), this.annotationEditorLayer = new QM({\n uiManager: n(this, Ic),\n div: t,\n structTreeLayer: n(this, QQ),\n accessibilityManager: this.accessibilityManager,\n pageIndex: this.pdfPage.pageNumber - 1,\n l10n: this.l10n,\n viewport: d,\n annotationLayer: n(this, cQ),\n textLayer: n(this, aQ),\n drawLayer: n(this, nQ)\n });\n const Z = {\n viewport: d,\n div: t,\n annotations: null,\n intent: l\n };\n this.annotationEditorLayer.render(Z), this.show();\n }\n cancel() {\n this._cancelled = !0, this.div && this.annotationEditorLayer.destroy();\n }\n hide() {\n this.div && (this.div.hidden = !0);\n }\n show() {\n !this.div || this.annotationEditorLayer.isInvisible || (this.div.hidden = !1);\n }\n}\ncQ = new WeakMap(), nQ = new WeakMap(), sQ = new WeakMap(), QQ = new WeakMap(), aQ = new WeakMap(), Ic = new WeakMap();\n{\n var bi = /* @__PURE__ */ new Map();\n const s = navigator.userAgent || \"\", U = navigator.platform || \"\", l = navigator.maxTouchPoints || 1, d = /Android/.test(s), t = /\\b(iPad|iPhone|iPod)(?=;)/.test(s) || U === \"MacIntel\" && l > 1;\n (function() {\n (t || d) && bi.set(\"maxCanvasPixels\", 5242880);\n })(), function() {\n d && bi.set(\"useSystemFonts\", !1);\n }();\n}\nconst z = {\n BROWSER: 1,\n VIEWER: 2,\n API: 4,\n WORKER: 8,\n EVENT_DISPATCH: 16,\n PREFERENCE: 128\n}, mi = {\n BOOLEAN: 1,\n NUMBER: 2,\n OBJECT: 4,\n STRING: 8,\n UNDEFINED: 16\n}, qd = {\n allowedGlobalEvents: {\n value: null,\n kind: z.BROWSER\n },\n canvasMaxAreaInBytes: {\n value: -1,\n kind: z.BROWSER + z.API\n },\n isInAutomation: {\n value: !1,\n kind: z.BROWSER\n },\n localeProperties: {\n value: {\n lang: navigator.language || \"en-US\"\n },\n kind: z.BROWSER\n },\n nimbusDataStr: {\n value: \"\",\n kind: z.BROWSER\n },\n supportsCaretBrowsingMode: {\n value: !1,\n kind: z.BROWSER\n },\n supportsDocumentFonts: {\n value: !0,\n kind: z.BROWSER\n },\n supportsIntegratedFind: {\n value: !1,\n kind: z.BROWSER\n },\n supportsMouseWheelZoomCtrlKey: {\n value: !0,\n kind: z.BROWSER\n },\n supportsMouseWheelZoomMetaKey: {\n value: !0,\n kind: z.BROWSER\n },\n supportsPinchToZoom: {\n value: !0,\n kind: z.BROWSER\n },\n toolbarDensity: {\n value: 0,\n kind: z.BROWSER + z.EVENT_DISPATCH\n },\n altTextLearnMoreUrl: {\n value: \"\",\n kind: z.VIEWER + z.PREFERENCE\n },\n annotationEditorMode: {\n value: 0,\n kind: z.VIEWER + z.PREFERENCE\n },\n annotationMode: {\n value: 2,\n kind: z.VIEWER + z.PREFERENCE\n },\n cursorToolOnLoad: {\n value: 0,\n kind: z.VIEWER + z.PREFERENCE\n },\n debuggerSrc: {\n value: \"./debugger.mjs\",\n kind: z.VIEWER\n },\n defaultZoomDelay: {\n value: 400,\n kind: z.VIEWER + z.PREFERENCE\n },\n defaultZoomValue: {\n value: \"\",\n kind: z.VIEWER + z.PREFERENCE\n },\n disableHistory: {\n value: !1,\n kind: z.VIEWER\n },\n disablePageLabels: {\n value: !1,\n kind: z.VIEWER + z.PREFERENCE\n },\n enableAltText: {\n value: !1,\n kind: z.VIEWER + z.PREFERENCE\n },\n enableAltTextModelDownload: {\n value: !0,\n kind: z.VIEWER + z.PREFERENCE + z.EVENT_DISPATCH\n },\n enableGuessAltText: {\n value: !0,\n kind: z.VIEWER + z.PREFERENCE + z.EVENT_DISPATCH\n },\n enableHighlightFloatingButton: {\n value: !1,\n kind: z.VIEWER + z.PREFERENCE\n },\n enableNewAltTextWhenAddingImage: {\n value: !0,\n kind: z.VIEWER + z.PREFERENCE\n },\n enablePermissions: {\n value: !1,\n kind: z.VIEWER + z.PREFERENCE\n },\n enablePrintAutoRotate: {\n value: !0,\n kind: z.VIEWER + z.PREFERENCE\n },\n enableScripting: {\n value: !0,\n kind: z.VIEWER + z.PREFERENCE\n },\n enableUpdatedAddImage: {\n value: !1,\n kind: z.VIEWER + z.PREFERENCE\n },\n externalLinkRel: {\n value: \"noopener noreferrer nofollow\",\n kind: z.VIEWER\n },\n externalLinkTarget: {\n value: 0,\n kind: z.VIEWER + z.PREFERENCE\n },\n highlightEditorColors: {\n value: \"yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F\",\n kind: z.VIEWER + z.PREFERENCE\n },\n historyUpdateUrl: {\n value: !1,\n kind: z.VIEWER + z.PREFERENCE\n },\n ignoreDestinationZoom: {\n value: !1,\n kind: z.VIEWER + z.PREFERENCE\n },\n imageResourcesPath: {\n value: \"./images/\",\n kind: z.VIEWER\n },\n maxCanvasPixels: {\n value: 2 ** 25,\n kind: z.VIEWER\n },\n forcePageColors: {\n value: !1,\n kind: z.VIEWER + z.PREFERENCE\n },\n pageColorsBackground: {\n value: \"Canvas\",\n kind: z.VIEWER + z.PREFERENCE\n },\n pageColorsForeground: {\n value: \"CanvasText\",\n kind: z.VIEWER + z.PREFERENCE\n },\n pdfBugEnabled: {\n value: !1,\n kind: z.VIEWER + z.PREFERENCE\n },\n printResolution: {\n value: 150,\n kind: z.VIEWER\n },\n sidebarViewOnLoad: {\n value: -1,\n kind: z.VIEWER + z.PREFERENCE\n },\n scrollModeOnLoad: {\n value: -1,\n kind: z.VIEWER + z.PREFERENCE\n },\n spreadModeOnLoad: {\n value: -1,\n kind: z.VIEWER + z.PREFERENCE\n },\n textLayerMode: {\n value: 1,\n kind: z.VIEWER + z.PREFERENCE\n },\n viewOnLoad: {\n value: 0,\n kind: z.VIEWER + z.PREFERENCE\n },\n cMapPacked: {\n value: !0,\n kind: z.API\n },\n cMapUrl: {\n value: \"../web/cmaps/\",\n kind: z.API\n },\n disableAutoFetch: {\n value: !1,\n kind: z.API + z.PREFERENCE\n },\n disableFontFace: {\n value: !1,\n kind: z.API + z.PREFERENCE\n },\n disableRange: {\n value: !1,\n kind: z.API + z.PREFERENCE\n },\n disableStream: {\n value: !1,\n kind: z.API + z.PREFERENCE\n },\n docBaseUrl: {\n value: \"\",\n kind: z.API\n },\n enableHWA: {\n value: !0,\n kind: z.API + z.VIEWER + z.PREFERENCE\n },\n enableXfa: {\n value: !0,\n kind: z.API + z.PREFERENCE\n },\n fontExtraProperties: {\n value: !1,\n kind: z.API\n },\n isEvalSupported: {\n value: !0,\n kind: z.API\n },\n isOffscreenCanvasSupported: {\n value: !0,\n kind: z.API\n },\n maxImageSize: {\n value: -1,\n kind: z.API\n },\n pdfBug: {\n value: !1,\n kind: z.API\n },\n standardFontDataUrl: {\n value: \"../web/standard_fonts/\",\n kind: z.API\n },\n useSystemFonts: {\n value: void 0,\n kind: z.API,\n type: mi.BOOLEAN + mi.UNDEFINED\n },\n verbosity: {\n value: 1,\n kind: z.API\n },\n workerPort: {\n value: null,\n kind: z.WORKER\n },\n workerSrc: {\n value: \"../build/pdf.worker.mjs\",\n kind: z.WORKER\n }\n};\nqd.defaultUrl = {\n value: \"compressed.tracemonkey-pldi-09.pdf\",\n kind: z.VIEWER\n}, qd.sandboxBundleSrc = {\n value: \"../build/pdf.sandbox.mjs\",\n kind: z.VIEWER\n}, qd.viewerCssTheme = {\n value: 0,\n kind: z.VIEWER + z.PREFERENCE\n}, qd.enableFakeMLManager = {\n value: !0,\n kind: z.VIEWER\n};\nqd.disablePreferences = {\n value: !1,\n kind: z.VIEWER\n};\nvar oZ;\nconst ud = class ud {\n static get(U) {\n return n(this, oZ).get(U);\n }\n static getAll(U = null, l = !1) {\n const d = /* @__PURE__ */ Object.create(null);\n for (const t in qd) {\n const Z = qd[t];\n U && !(U & Z.kind) || (d[t] = l ? Z.value : n(this, oZ).get(t));\n }\n return d;\n }\n static set(U, l) {\n this.setAll({\n [U]: l\n });\n }\n static setAll(U, l = !1) {\n this._hasInvokedSet || (this._hasInvokedSet = !0);\n let d;\n for (const t in U) {\n const Z = qd[t], F = U[t];\n if (!Z || !(typeof F == typeof Z.value || mi[(typeof F).toUpperCase()] & Z.type))\n continue;\n const {\n kind: c\n } = Z;\n l && !(c & z.BROWSER || c & z.PREFERENCE) || (this.eventBus && c & z.EVENT_DISPATCH && (d || (d = /* @__PURE__ */ new Map())).set(t, F), n(this, oZ).set(t, F));\n }\n if (d)\n for (const [t, Z] of d)\n this.eventBus.dispatch(t.toLowerCase(), {\n source: this,\n value: Z\n });\n }\n};\noZ = new WeakMap(), _(ud, \"eventBus\"), m(ud, oZ, /* @__PURE__ */ new Map()), (() => {\n for (const U in qd)\n n(ud, oZ).set(U, qd[U].value);\n for (const [U, l] of bi)\n n(ud, oZ).set(U, l);\n ud._hasInvokedSet = !1, ud._checkDisablePreferences = () => ud.get(\"disablePreferences\") ? !0 : (ud._hasInvokedSet && console.warn('The Preferences may override manually set AppOptions; please use the \"disablePreferences\"-option to prevent that.'), !1);\n})();\nlet Mi = ud;\nvar vd;\nclass JJ {\n constructor(U) {\n m(this, vd, null);\n this.pageIndex = U.pageIndex;\n }\n async render(U = \"display\") {\n U !== \"display\" || n(this, vd) || this._cancelled || e(this, vd, new iM({\n pageIndex: this.pageIndex\n }));\n }\n cancel() {\n this._cancelled = !0, n(this, vd) && (n(this, vd).destroy(), e(this, vd, null));\n }\n setParent(U) {\n var l;\n (l = n(this, vd)) == null || l.setParent(U);\n }\n getDrawLayer() {\n return n(this, vd);\n }\n}\nvd = new WeakMap();\nconst ZN = {\n Document: null,\n DocumentFragment: null,\n Part: \"group\",\n Sect: \"group\",\n Div: \"group\",\n Aside: \"note\",\n NonStruct: \"none\",\n P: null,\n H: \"heading\",\n Title: null,\n FENote: \"note\",\n Sub: \"group\",\n Lbl: null,\n Span: null,\n Em: null,\n Strong: null,\n Link: \"link\",\n Annot: \"note\",\n Form: \"form\",\n Ruby: null,\n RB: null,\n RT: null,\n RP: null,\n Warichu: null,\n WT: null,\n WP: null,\n L: \"list\",\n LI: \"listitem\",\n LBody: null,\n Table: \"table\",\n TR: \"row\",\n TH: \"columnheader\",\n TD: \"cell\",\n THead: \"columnheader\",\n TBody: null,\n TFoot: null,\n Caption: null,\n Figure: \"figure\",\n Formula: null,\n Artifact: null\n}, GJ = /^H(\\d+)$/;\nvar Dc, Gd, Ec, rc, Cc, pZ, Ut, Ji, we, Gi;\nclass Ce {\n constructor(U, l) {\n m(this, Ut);\n m(this, Dc);\n m(this, Gd, null);\n m(this, Ec);\n m(this, rc, /* @__PURE__ */ new Map());\n m(this, Cc);\n m(this, pZ, null);\n e(this, Dc, U.getStructTree()), e(this, Cc, l);\n }\n async render() {\n var t;\n if (n(this, Ec))\n return n(this, Ec);\n const {\n promise: U,\n resolve: l,\n reject: d\n } = Promise.withResolvers();\n e(this, Ec, U);\n try {\n e(this, Gd, h(this, Ut, Gi).call(this, await n(this, Dc)));\n } catch (Z) {\n d(Z);\n }\n return e(this, Dc, null), (t = n(this, Gd)) == null || t.classList.add(\"structTree\"), l(n(this, Gd)), U;\n }\n async getAriaAttributes(U) {\n return await this.render(), n(this, rc).get(U);\n }\n hide() {\n n(this, Gd) && !n(this, Gd).hidden && (n(this, Gd).hidden = !0);\n }\n show() {\n var U;\n (U = n(this, Gd)) != null && U.hidden && (n(this, Gd).hidden = !1);\n }\n addElementsToTextLayer() {\n var U;\n if (n(this, pZ)) {\n for (const [l, d] of n(this, pZ))\n (U = document.getElementById(l)) == null || U.append(d);\n n(this, pZ).clear(), e(this, pZ, null);\n }\n }\n}\nDc = new WeakMap(), Gd = new WeakMap(), Ec = new WeakMap(), rc = new WeakMap(), Cc = new WeakMap(), pZ = new WeakMap(), Ut = new WeakSet(), Ji = function(U, l) {\n const {\n alt: d,\n id: t,\n lang: Z\n } = U;\n if (d !== void 0) {\n let F = !1;\n const c = yn(d);\n for (const Q of U.children)\n if (Q.type === \"annotation\") {\n let a = n(this, rc).get(Q.id);\n a || (a = /* @__PURE__ */ new Map(), n(this, rc).set(Q.id, a)), a.set(\"aria-label\", c), F = !0;\n }\n F || l.setAttribute(\"aria-label\", c);\n }\n t !== void 0 && l.setAttribute(\"aria-owns\", t), Z !== void 0 && l.setAttribute(\"lang\", yn(Z, !0));\n}, we = function(U, l) {\n const {\n alt: d,\n bbox: t,\n children: Z\n } = U, F = Z == null ? void 0 : Z[0];\n if (!n(this, Cc) || !d || !t || (F == null ? void 0 : F.type) !== \"content\")\n return !1;\n const {\n id: c\n } = F;\n if (!c)\n return !1;\n l.setAttribute(\"aria-owns\", c);\n const Q = document.createElement(\"span\");\n (n(this, pZ) || e(this, pZ, /* @__PURE__ */ new Map())).set(c, Q), Q.setAttribute(\"role\", \"img\"), Q.setAttribute(\"aria-label\", yn(d));\n const {\n pageHeight: a,\n pageX: V,\n pageY: W\n } = n(this, Cc), i = \"calc(var(--scale-factor)*\", {\n style: R\n } = Q;\n return R.width = `${i}${t[2] - t[0]}px)`, R.height = `${i}${t[3] - t[1]}px)`, R.left = `${i}${t[0] - V}px)`, R.top = `${i}${a - t[3] + W}px)`, !0;\n}, Gi = function(U) {\n if (!U)\n return null;\n const l = document.createElement(\"span\");\n if (\"role\" in U) {\n const {\n role: d\n } = U, t = d.match(GJ);\n if (t ? (l.setAttribute(\"role\", \"heading\"), l.setAttribute(\"aria-level\", t[1])) : ZN[d] && l.setAttribute(\"role\", ZN[d]), d === \"Figure\" && h(this, Ut, we).call(this, U, l))\n return l;\n }\n if (h(this, Ut, Ji).call(this, U, l), U.children)\n if (U.children.length === 1 && \"id\" in U.children[0])\n h(this, Ut, Ji).call(this, U.children[0], l);\n else\n for (const d of U.children)\n l.append(h(this, Ut, Gi).call(this, d));\n return l;\n};\nvar Lt, td, zt, BZ, wc, ya, VQ, Si;\nconst B0 = class B0 {\n constructor() {\n m(this, VQ);\n m(this, Lt, !1);\n m(this, td, null);\n m(this, zt, /* @__PURE__ */ new Map());\n m(this, BZ, /* @__PURE__ */ new Map());\n }\n setTextMapping(U) {\n e(this, td, U);\n }\n enable() {\n if (n(this, Lt))\n throw new Error(\"TextAccessibilityManager is already enabled.\");\n if (!n(this, td))\n throw new Error(\"Text divs and strings have not been set.\");\n if (e(this, Lt, !0), e(this, td, n(this, td).slice()), n(this, td).sort(h(B0, wc, ya)), n(this, zt).size > 0) {\n const U = n(this, td);\n for (const [l, d] of n(this, zt)) {\n if (!document.getElementById(l)) {\n n(this, zt).delete(l);\n continue;\n }\n h(this, VQ, Si).call(this, l, U[d]);\n }\n }\n for (const [U, l] of n(this, BZ))\n this.addPointerInTextLayer(U, l);\n n(this, BZ).clear();\n }\n disable() {\n n(this, Lt) && (n(this, BZ).clear(), e(this, td, null), e(this, Lt, !1));\n }\n removePointerInTextLayer(U) {\n if (!n(this, Lt)) {\n n(this, BZ).delete(U);\n return;\n }\n const l = n(this, td);\n if (!l || l.length === 0)\n return;\n const {\n id: d\n } = U, t = n(this, zt).get(d);\n if (t === void 0)\n return;\n const Z = l[t];\n n(this, zt).delete(d);\n let F = Z.getAttribute(\"aria-owns\");\n F != null && F.includes(d) && (F = F.split(\" \").filter((c) => c !== d).join(\" \"), F ? Z.setAttribute(\"aria-owns\", F) : (Z.removeAttribute(\"aria-owns\"), Z.setAttribute(\"role\", \"presentation\")));\n }\n addPointerInTextLayer(U, l) {\n const {\n id: d\n } = U;\n if (!d)\n return null;\n if (!n(this, Lt))\n return n(this, BZ).set(U, l), null;\n l && this.removePointerInTextLayer(U);\n const t = n(this, td);\n if (!t || t.length === 0)\n return null;\n const Z = rn(t, (a) => {\n var V;\n return h(V = B0, wc, ya).call(V, U, a) < 0;\n }), F = Math.max(0, Z - 1), c = t[F];\n h(this, VQ, Si).call(this, d, c), n(this, zt).set(d, F);\n const Q = c.parentNode;\n return Q != null && Q.classList.contains(\"markedContent\") ? Q.id : null;\n }\n moveElementInDOM(U, l, d, t) {\n const Z = this.addPointerInTextLayer(d, t);\n if (!U.hasChildNodes())\n return U.append(l), Z;\n const F = Array.from(U.childNodes).filter((a) => a !== l);\n if (F.length === 0)\n return Z;\n const c = d || l, Q = rn(F, (a) => {\n var V;\n return h(V = B0, wc, ya).call(V, c, a) < 0;\n });\n return Q === 0 ? F[0].before(l) : F[Q - 1].after(l), Z;\n }\n};\nLt = new WeakMap(), td = new WeakMap(), zt = new WeakMap(), BZ = new WeakMap(), wc = new WeakSet(), ya = function(U, l) {\n const d = U.getBoundingClientRect(), t = l.getBoundingClientRect();\n if (d.width === 0 && d.height === 0)\n return 1;\n if (t.width === 0 && t.height === 0)\n return -1;\n const Z = d.y, F = d.y + d.height, c = d.y + d.height / 2, Q = t.y, a = t.y + t.height, V = t.y + t.height / 2;\n if (c <= Q && V >= F)\n return -1;\n if (V <= Z && c >= a)\n return 1;\n const W = d.x + d.width / 2, i = t.x + t.width / 2;\n return W - i;\n}, VQ = new WeakSet(), Si = function(U, l) {\n const d = l.getAttribute(\"aria-owns\");\n d != null && d.includes(U) || l.setAttribute(\"aria-owns\", d ? `${d} ${U}` : U), l.removeAttribute(\"role\");\n}, m(B0, wc);\nlet Ti = B0;\nvar yZ;\nclass TJ {\n constructor({\n findController: U,\n eventBus: l,\n pageIndex: d\n }) {\n m(this, yZ, null);\n this.findController = U, this.matches = [], this.eventBus = l, this.pageIdx = d, this.textDivs = null, this.textContentItemsStr = null, this.enabled = !1;\n }\n setTextMapping(U, l) {\n this.textDivs = U, this.textContentItemsStr = l;\n }\n enable() {\n if (!this.textDivs || !this.textContentItemsStr)\n throw new Error(\"Text divs and strings have not been set.\");\n if (this.enabled)\n throw new Error(\"TextHighlighter is already enabled.\");\n this.enabled = !0, n(this, yZ) || (e(this, yZ, new AbortController()), this.eventBus._on(\"updatetextlayermatches\", (U) => {\n (U.pageIndex === this.pageIdx || U.pageIndex === -1) && this._updateMatches();\n }, {\n signal: n(this, yZ).signal\n })), this._updateMatches();\n }\n disable() {\n var U;\n this.enabled && (this.enabled = !1, (U = n(this, yZ)) == null || U.abort(), e(this, yZ, null), this._updateMatches(!0));\n }\n _convertMatches(U, l) {\n if (!U)\n return [];\n const {\n textContentItemsStr: d\n } = this;\n let t = 0, Z = 0;\n const F = d.length - 1, c = [];\n for (let Q = 0, a = U.length; Q < a; Q++) {\n let V = U[Q];\n for (; t !== F && V >= Z + d[t].length; )\n Z += d[t].length, t++;\n t === d.length && console.error(\"Could not find a matching mapping\");\n const W = {\n begin: {\n divIdx: t,\n offset: V - Z\n }\n };\n for (V += l[Q]; t !== F && V > Z + d[t].length; )\n Z += d[t].length, t++;\n W.end = {\n divIdx: t,\n offset: V - Z\n }, c.push(W);\n }\n return c;\n }\n _renderMatches(U) {\n if (U.length === 0)\n return;\n const {\n findController: l,\n pageIdx: d\n } = this, {\n textContentItemsStr: t,\n textDivs: Z\n } = this, F = d === l.selected.pageIdx, c = l.selected.matchIdx, Q = l.state.highlightAll;\n let a = null;\n const V = {\n divIdx: -1,\n offset: void 0\n };\n function W(M, G) {\n const T = M.divIdx;\n return Z[T].textContent = \"\", i(T, 0, M.offset, G);\n }\n function i(M, G, T, u) {\n let X = Z[M];\n if (X.nodeType === Node.TEXT_NODE) {\n const y = document.createElement(\"span\");\n X.before(y), y.append(X), Z[M] = y, X = y;\n }\n const Y = t[M].substring(G, T), o = document.createTextNode(Y);\n if (u) {\n const y = document.createElement(\"span\");\n return y.className = `${u} appended`, y.append(o), X.append(y), u.includes(\"selected\") ? y.offsetLeft : 0;\n }\n return X.append(o), 0;\n }\n let R = c, N = R + 1;\n if (Q)\n R = 0, N = U.length;\n else if (!F)\n return;\n let b = -1, J = -1;\n for (let M = R; M < N; M++) {\n const G = U[M], T = G.begin;\n if (T.divIdx === b && T.offset === J)\n continue;\n b = T.divIdx, J = T.offset;\n const u = G.end, X = F && M === c, Y = X ? \" selected\" : \"\";\n let o = 0;\n if (!a || T.divIdx !== a.divIdx ? (a !== null && i(a.divIdx, a.offset, V.offset), W(T)) : i(a.divIdx, a.offset, T.offset), T.divIdx === u.divIdx)\n o = i(T.divIdx, T.offset, u.offset, \"highlight\" + Y);\n else {\n o = i(T.divIdx, T.offset, V.offset, \"highlight begin\" + Y);\n for (let y = T.divIdx + 1, S = u.divIdx; y < S; y++)\n Z[y].className = \"highlight middle\" + Y;\n W(u, \"highlight end\" + Y);\n }\n a = u, X && l.scrollMatchIntoView({\n element: Z[T.divIdx],\n selectedLeft: o,\n pageIndex: d,\n matchIndex: c\n });\n }\n a && i(a.divIdx, a.offset, V.offset);\n }\n _updateMatches(U = !1) {\n if (!this.enabled && !U)\n return;\n const {\n findController: l,\n matches: d,\n pageIdx: t\n } = this, {\n textContentItemsStr: Z,\n textDivs: F\n } = this;\n let c = -1;\n for (const V of d) {\n const W = Math.max(c, V.begin.divIdx);\n for (let i = W, R = V.end.divIdx; i <= R; i++) {\n const N = F[i];\n N.textContent = Z[i], N.className = \"\";\n }\n c = V.end.divIdx + 1;\n }\n if (!(l != null && l.highlightMatches) || U)\n return;\n const Q = l.pageMatches[t] || null, a = l.pageMatchesLength[t] || null;\n this.matches = this._convertMatches(Q, a), this._renderMatches(this.matches);\n }\n}\nyZ = new WeakMap();\nvar WQ, iQ, $F, Hd, LU, LZ, aV, xe, qc, je, Oe;\nconst At = class At {\n constructor({\n pdfPage: U,\n highlighter: l = null,\n accessibilityManager: d = null,\n enablePermissions: t = !1,\n onAppend: Z = null\n }) {\n m(this, aV);\n m(this, WQ, !1);\n m(this, iQ, null);\n m(this, $F, !1);\n m(this, Hd, null);\n this.pdfPage = U, this.highlighter = l, this.accessibilityManager = d, e(this, WQ, t === !0), e(this, iQ, Z), this.div = document.createElement(\"div\"), this.div.tabIndex = 0, this.div.className = \"textLayer\";\n }\n async render(U, l = null) {\n var F, c, Q, a, V;\n if (n(this, $F) && n(this, Hd)) {\n n(this, Hd).update({\n viewport: U,\n onBefore: this.hide.bind(this)\n }), this.show();\n return;\n }\n this.cancel(), e(this, Hd, new mM({\n textContentSource: this.pdfPage.streamTextContent(l || {\n includeMarkedContent: !0,\n disableNormalization: !0\n }),\n container: this.div,\n viewport: U\n }));\n const {\n textDivs: d,\n textContentItemsStr: t\n } = n(this, Hd);\n (F = this.highlighter) == null || F.setTextMapping(d, t), (c = this.accessibilityManager) == null || c.setTextMapping(d), await n(this, Hd).render(), e(this, $F, !0);\n const Z = document.createElement(\"div\");\n Z.className = \"endOfContent\", this.div.append(Z), h(this, aV, xe).call(this, Z), (Q = n(this, iQ)) == null || Q.call(this, this.div), (a = this.highlighter) == null || a.enable(), (V = this.accessibilityManager) == null || V.enable();\n }\n hide() {\n var U;\n !this.div.hidden && n(this, $F) && ((U = this.highlighter) == null || U.disable(), this.div.hidden = !0);\n }\n show() {\n var U;\n this.div.hidden && n(this, $F) && (this.div.hidden = !1, (U = this.highlighter) == null || U.enable());\n }\n cancel() {\n var U, l, d, t;\n (U = n(this, Hd)) == null || U.cancel(), e(this, Hd, null), (l = this.highlighter) == null || l.disable(), (d = this.accessibilityManager) == null || d.disable(), h(t = At, qc, je).call(t, this.div);\n }\n};\nWQ = new WeakMap(), iQ = new WeakMap(), $F = new WeakMap(), Hd = new WeakMap(), LU = new WeakMap(), LZ = new WeakMap(), aV = new WeakSet(), xe = function(U) {\n var d;\n const {\n div: l\n } = this;\n l.addEventListener(\"mousedown\", () => {\n l.classList.add(\"selecting\");\n }), l.addEventListener(\"copy\", (t) => {\n if (!n(this, WQ)) {\n const Z = document.getSelection();\n t.clipboardData.setData(\"text/plain\", yn(hM(Z.toString())));\n }\n t.preventDefault(), t.stopPropagation();\n }), n(At, LU).set(l, U), h(d = At, qc, Oe).call(d);\n}, qc = new WeakSet(), je = function(U) {\n var l;\n n(this, LU).delete(U), n(this, LU).size === 0 && ((l = n(this, LZ)) == null || l.abort(), e(this, LZ, null));\n}, Oe = function() {\n if (n(this, LZ))\n return;\n e(this, LZ, new AbortController());\n const {\n signal: U\n } = n(this, LZ), l = (F, c) => {\n c.append(F), F.style.width = \"\", F.style.height = \"\", c.classList.remove(\"selecting\");\n };\n let d = !1;\n document.addEventListener(\"pointerdown\", () => {\n d = !0;\n }, {\n signal: U\n }), document.addEventListener(\"pointerup\", () => {\n d = !1, n(this, LU).forEach(l);\n }, {\n signal: U\n }), window.addEventListener(\"blur\", () => {\n d = !1, n(this, LU).forEach(l);\n }, {\n signal: U\n }), document.addEventListener(\"keyup\", () => {\n d || n(this, LU).forEach(l);\n }, {\n signal: U\n });\n var t, Z;\n document.addEventListener(\"selectionchange\", () => {\n const F = document.getSelection();\n if (F.rangeCount === 0) {\n n(this, LU).forEach(l);\n return;\n }\n const c = /* @__PURE__ */ new Set();\n for (let R = 0; R < F.rangeCount; R++) {\n const N = F.getRangeAt(R);\n for (const b of n(this, LU).keys())\n !c.has(b) && N.intersectsNode(b) && c.add(b);\n }\n for (const [R, N] of n(this, LU))\n c.has(R) ? R.classList.add(\"selecting\") : l(N, R);\n if (t ?? (t = getComputedStyle(n(this, LU).values().next().value).getPropertyValue(\"-moz-user-select\") === \"none\"), t)\n return;\n const Q = F.getRangeAt(0), a = Z && (Q.compareBoundaryPoints(Range.END_TO_END, Z) === 0 || Q.compareBoundaryPoints(Range.START_TO_END, Z) === 0);\n let V = a ? Q.startContainer : Q.endContainer;\n V.nodeType === Node.TEXT_NODE && (V = V.parentNode);\n const W = V.parentElement.closest(\".textLayer\"), i = n(this, LU).get(W);\n i && (i.style.width = W.style.width, i.style.height = W.style.height, V.parentElement.insertBefore(i, a ? V : V.nextSibling)), Z = Q.cloneRange();\n }, {\n signal: U\n });\n}, m(At, qc), m(At, LU, /* @__PURE__ */ new Map()), m(At, LZ, null);\nlet ga = At;\nclass ge {\n constructor({\n pdfPage: U,\n annotationStorage: l = null,\n linkService: d,\n xfaHtml: t = null\n }) {\n this.pdfPage = U, this.annotationStorage = l, this.linkService = d, this.xfaHtml = t, this.div = null, this._cancelled = !1;\n }\n async render(U, l = \"display\") {\n if (l === \"print\") {\n const Z = {\n viewport: U.clone({\n dontFlip: !0\n }),\n div: this.div,\n xfaHtml: this.xfaHtml,\n annotationStorage: this.annotationStorage,\n linkService: this.linkService,\n intent: l\n };\n return this.div = document.createElement(\"div\"), Z.div = this.div, kV.render(Z);\n }\n const d = await this.pdfPage.getXfa();\n if (this._cancelled || !d)\n return {\n textDivs: []\n };\n const t = {\n viewport: U.clone({\n dontFlip: !0\n }),\n div: this.div,\n xfaHtml: d,\n annotationStorage: this.annotationStorage,\n linkService: this.linkService,\n intent: l\n };\n return this.div ? kV.update(t) : (this.div = document.createElement(\"div\"), t.div = this.div, kV.render(t));\n }\n cancel() {\n this._cancelled = !0;\n }\n hide() {\n this.div && (this.div.hidden = !0);\n }\n}\nconst SJ = {\n annotationEditorUIManager: null,\n annotationStorage: null,\n downloadManager: null,\n enableScripting: !1,\n fieldObjectsPromise: null,\n findController: null,\n hasJSActionsPromise: null,\n get linkService() {\n return new Ai();\n }\n}, XJ = /* @__PURE__ */ new Map([[\"canvasWrapper\", 0], [\"textLayer\", 1], [\"annotationLayer\", 2], [\"annotationEditorLayer\", 3], [\"xfaLayer\", 3]]);\nvar l0, RQ, U0, NQ, zZ, kZ, hQ, eQ, bQ, d0, xc, jc, kt, t0, IZ, cl, p0, La, Xn, Xi, ui, Yi, oi, pi, ve, He, Bi;\nclass Ke {\n constructor(U) {\n m(this, cl);\n m(this, l0, Et.ENABLE_FORMS);\n m(this, RQ, !1);\n m(this, U0, !1);\n m(this, NQ, !1);\n m(this, zZ, null);\n m(this, kZ, null);\n m(this, hQ, null);\n m(this, eQ, 1);\n m(this, bQ, 1);\n m(this, d0, null);\n m(this, xc, kl.INITIAL);\n m(this, jc, Ad.ENABLE);\n m(this, kt, {\n directDrawing: !0,\n initialOptionalContent: !0,\n regularAnnotations: !0\n });\n m(this, t0, /* @__PURE__ */ new WeakMap());\n m(this, IZ, [null, null, null, null]);\n var Z, F;\n const l = U.container, d = U.defaultViewport;\n this.id = U.id, this.renderingId = \"page\" + this.id, e(this, zZ, U.layerProperties || SJ), this.pdfPage = null, this.pageLabel = null, this.rotation = 0, this.scale = U.scale || ie, this.viewport = d, this.pdfPageRotate = d.rotation, this._optionalContentConfigPromise = U.optionalContentConfigPromise || null, e(this, jc, U.textLayerMode ?? Ad.ENABLE), e(this, l0, U.annotationMode ?? Et.ENABLE_FORMS), this.imageResourcesPath = U.imageResourcesPath || \"\", this.maxCanvasPixels = U.maxCanvasPixels ?? Mi.get(\"maxCanvasPixels\"), this.pageColors = U.pageColors || null, e(this, RQ, U.enableHWA || !1), this.eventBus = U.eventBus, this.renderingQueue = U.renderingQueue, this.l10n = U.l10n, this.l10n || (this.l10n = new Ac()), this.renderTask = null, this.resume = null, this._isStandalone = !((Z = this.renderingQueue) != null && Z.hasViewer()), this._container = l, this._annotationCanvasMap = null, this.annotationLayer = null, this.annotationEditorLayer = null, this.textLayer = null, this.zoomLayer = null, this.xfaLayer = null, this.structTreeLayer = null, this.drawLayer = null;\n const t = document.createElement(\"div\");\n if (t.className = \"page\", t.setAttribute(\"data-page-number\", this.id), t.setAttribute(\"role\", \"region\"), t.setAttribute(\"data-l10n-id\", \"pdfjs-page-landmark\"), t.setAttribute(\"data-l10n-args\", JSON.stringify({\n page: this.id\n })), this.div = t, h(this, cl, La).call(this), l == null || l.append(t), this._isStandalone) {\n l == null || l.style.setProperty(\"--scale-factor\", this.scale * st.PDF_TO_CSS_UNITS), (F = this.pageColors) != null && F.background && (l == null || l.style.setProperty(\"--page-bg-color\", this.pageColors.background));\n const {\n optionalContentConfigPromise: c\n } = U;\n c && c.then((Q) => {\n c === this._optionalContentConfigPromise && (n(this, kt).initialOptionalContent = Q.hasInitialVisibility);\n }), U.l10n || this.l10n.translate(this.div);\n }\n }\n get renderingState() {\n return n(this, xc);\n }\n set renderingState(U) {\n if (U !== n(this, xc))\n switch (e(this, xc, U), n(this, kZ) && (clearTimeout(n(this, kZ)), e(this, kZ, null)), U) {\n case kl.PAUSED:\n this.div.classList.remove(\"loading\");\n break;\n case kl.RUNNING:\n this.div.classList.add(\"loadingIcon\"), e(this, kZ, setTimeout(() => {\n this.div.classList.add(\"loading\"), e(this, kZ, null);\n }, 0));\n break;\n case kl.INITIAL:\n case kl.FINISHED:\n this.div.classList.remove(\"loadingIcon\", \"loading\");\n break;\n }\n }\n setPdfPage(U) {\n var d, t, Z, F;\n this._isStandalone && (((d = this.pageColors) == null ? void 0 : d.foreground) === \"CanvasText\" || ((t = this.pageColors) == null ? void 0 : t.background) === \"Canvas\") && ((Z = this._container) == null || Z.style.setProperty(\"--hcm-highlight-filter\", U.filterFactory.addHighlightHCMFilter(\"highlight\", \"CanvasText\", \"Canvas\", \"HighlightText\", \"Highlight\")), (F = this._container) == null || F.style.setProperty(\"--hcm-highlight-selected-filter\", U.filterFactory.addHighlightHCMFilter(\"highlight_selected\", \"CanvasText\", \"Canvas\", \"HighlightText\", \"Highlight\"))), this.pdfPage = U, this.pdfPageRotate = U.rotate;\n const l = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = U.getViewport({\n scale: this.scale * st.PDF_TO_CSS_UNITS,\n rotation: l\n }), h(this, cl, La).call(this), this.reset();\n }\n destroy() {\n var U;\n this.reset(), (U = this.pdfPage) == null || U.cleanup();\n }\n hasEditableAnnotations() {\n var U;\n return !!((U = this.annotationLayer) != null && U.hasEditableAnnotations());\n }\n get _textHighlighter() {\n return ja(this, \"_textHighlighter\", new TJ({\n pageIndex: this.id - 1,\n eventBus: this.eventBus,\n findController: n(this, zZ).findController\n }));\n }\n _resetZoomLayer(U = !1) {\n if (!this.zoomLayer)\n return;\n const l = this.zoomLayer.firstChild;\n n(this, t0).delete(l), l.width = 0, l.height = 0, U && this.zoomLayer.remove(), this.zoomLayer = null;\n }\n reset({\n keepZoomLayer: U = !1,\n keepAnnotationLayer: l = !1,\n keepAnnotationEditorLayer: d = !1,\n keepXfaLayer: t = !1,\n keepTextLayer: Z = !1\n } = {}) {\n var R, N, b, J, M;\n this.cancelRendering({\n keepAnnotationLayer: l,\n keepAnnotationEditorLayer: d,\n keepXfaLayer: t,\n keepTextLayer: Z\n }), this.renderingState = kl.INITIAL;\n const F = this.div, c = F.childNodes, Q = U && this.zoomLayer || null, a = l && ((R = this.annotationLayer) == null ? void 0 : R.div) || null, V = d && ((N = this.annotationEditorLayer) == null ? void 0 : N.div) || null, W = t && ((b = this.xfaLayer) == null ? void 0 : b.div) || null, i = Z && ((J = this.textLayer) == null ? void 0 : J.div) || null;\n for (let G = c.length - 1; G >= 0; G--) {\n const T = c[G];\n switch (T) {\n case Q:\n case a:\n case V:\n case W:\n case i:\n continue;\n }\n T.remove();\n const u = n(this, IZ).indexOf(T);\n u >= 0 && (n(this, IZ)[u] = null);\n }\n F.removeAttribute(\"data-loaded\"), a && this.annotationLayer.hide(), V && this.annotationEditorLayer.hide(), W && this.xfaLayer.hide(), i && this.textLayer.hide(), (M = this.structTreeLayer) == null || M.hide(), Q || (this.canvas && (n(this, t0).delete(this.canvas), this.canvas.width = 0, this.canvas.height = 0, delete this.canvas), this._resetZoomLayer());\n }\n toggleEditingMode(U) {\n this.hasEditableAnnotations() && (e(this, NQ, U), this.reset({\n keepZoomLayer: !0,\n keepAnnotationLayer: !0,\n keepAnnotationEditorLayer: !0,\n keepXfaLayer: !0,\n keepTextLayer: !0\n }));\n }\n update({\n scale: U = 0,\n rotation: l = null,\n optionalContentConfigPromise: d = null,\n drawingDelay: t = -1\n }) {\n var F;\n this.scale = U || this.scale, typeof l == \"number\" && (this.rotation = l), d instanceof Promise && (this._optionalContentConfigPromise = d, d.then((c) => {\n d === this._optionalContentConfigPromise && (n(this, kt).initialOptionalContent = c.hasInitialVisibility);\n })), n(this, kt).directDrawing = !0;\n const Z = (this.rotation + this.pdfPageRotate) % 360;\n if (this.viewport = this.viewport.clone({\n scale: this.scale * st.PDF_TO_CSS_UNITS,\n rotation: Z\n }), h(this, cl, La).call(this), this._isStandalone && ((F = this._container) == null || F.style.setProperty(\"--scale-factor\", this.viewport.scale)), this.canvas) {\n let c = !1;\n if (n(this, U0)) {\n if (this.maxCanvasPixels === 0)\n c = !0;\n else if (this.maxCanvasPixels > 0) {\n const {\n width: a,\n height: V\n } = this.viewport, {\n sx: W,\n sy: i\n } = this.outputScale;\n c = (Math.floor(a) * W | 0) * (Math.floor(V) * i | 0) > this.maxCanvasPixels;\n }\n }\n const Q = t >= 0 && t < 1e3;\n if (Q || c) {\n if (Q && !c && this.renderingState !== kl.FINISHED && (this.cancelRendering({\n keepZoomLayer: !0,\n keepAnnotationLayer: !0,\n keepAnnotationEditorLayer: !0,\n keepXfaLayer: !0,\n keepTextLayer: !0,\n cancelExtraDelay: t\n }), this.renderingState = kl.FINISHED, n(this, kt).directDrawing = !1), this.cssTransform({\n target: this.canvas,\n redrawAnnotationLayer: !0,\n redrawAnnotationEditorLayer: !0,\n redrawXfaLayer: !0,\n redrawTextLayer: !Q,\n hideTextLayer: Q\n }), Q)\n return;\n this.eventBus.dispatch(\"pagerendered\", {\n source: this,\n pageNumber: this.id,\n cssTransform: !0,\n timestamp: performance.now(),\n error: n(this, d0)\n });\n return;\n }\n !this.zoomLayer && !this.canvas.hidden && (this.zoomLayer = this.canvas.parentNode, this.zoomLayer.style.position = \"absolute\");\n }\n this.zoomLayer && this.cssTransform({\n target: this.zoomLayer.firstChild\n }), this.reset({\n keepZoomLayer: !0,\n keepAnnotationLayer: !0,\n keepAnnotationEditorLayer: !0,\n keepXfaLayer: !0,\n keepTextLayer: !0\n });\n }\n cancelRendering({\n keepAnnotationLayer: U = !1,\n keepAnnotationEditorLayer: l = !1,\n keepXfaLayer: d = !1,\n keepTextLayer: t = !1,\n cancelExtraDelay: Z = 0\n } = {}) {\n var F;\n this.renderTask && (this.renderTask.cancel(Z), this.renderTask = null), this.resume = null, this.textLayer && (!t || !this.textLayer.div) && (this.textLayer.cancel(), this.textLayer = null), this.annotationLayer && (!U || !this.annotationLayer.div) && (this.annotationLayer.cancel(), this.annotationLayer = null, this._annotationCanvasMap = null), this.structTreeLayer && !this.textLayer && (this.structTreeLayer = null), this.annotationEditorLayer && (!l || !this.annotationEditorLayer.div) && (this.drawLayer && (this.drawLayer.cancel(), this.drawLayer = null), this.annotationEditorLayer.cancel(), this.annotationEditorLayer = null), this.xfaLayer && (!d || !this.xfaLayer.div) && (this.xfaLayer.cancel(), this.xfaLayer = null, (F = this._textHighlighter) == null || F.disable());\n }\n cssTransform({\n target: U,\n redrawAnnotationLayer: l = !1,\n redrawAnnotationEditorLayer: d = !1,\n redrawXfaLayer: t = !1,\n redrawTextLayer: Z = !1,\n hideTextLayer: F = !1\n }) {\n var Q;\n if (!U.hasAttribute(\"zooming\")) {\n U.setAttribute(\"zooming\", !0);\n const {\n style: a\n } = U;\n a.width = a.height = \"\";\n }\n const c = n(this, t0).get(U);\n if (this.viewport !== c) {\n const a = this.viewport.rotation - c.rotation, V = Math.abs(a);\n let W = 1, i = 1;\n if (V === 90 || V === 270) {\n const {\n width: R,\n height: N\n } = this.viewport;\n W = N / R, i = R / N;\n }\n U.style.transform = `rotate(${a}deg) scale(${W}, ${i})`;\n }\n l && this.annotationLayer && h(this, cl, Xi).call(this), d && this.annotationEditorLayer && (this.drawLayer && h(this, cl, Yi).call(this), h(this, cl, ui).call(this)), t && this.xfaLayer && h(this, cl, oi).call(this), this.textLayer && (F ? (this.textLayer.hide(), (Q = this.structTreeLayer) == null || Q.hide()) : Z && h(this, cl, pi).call(this));\n }\n get width() {\n return this.viewport.width;\n }\n get height() {\n return this.viewport.height;\n }\n getPagePoint(U, l) {\n return this.viewport.convertToPdfPoint(U, l);\n }\n async draw() {\n this.renderingState !== kl.INITIAL && (console.error(\"Must be in new state before drawing\"), this.reset());\n const {\n div: U,\n l10n: l,\n pageColors: d,\n pdfPage: t,\n viewport: Z\n } = this;\n if (!t)\n throw this.renderingState = kl.FINISHED, new Error(\"pdfPage is not loaded\");\n this.renderingState = kl.RUNNING;\n const F = document.createElement(\"div\");\n if (F.classList.add(\"canvasWrapper\"), h(this, cl, p0).call(this, F, \"canvasWrapper\"), !this.textLayer && n(this, jc) !== Ad.DISABLE && !t.isPureXfa && (this._accessibilityManager || (this._accessibilityManager = new Ti()), this.textLayer = new ga({\n pdfPage: t,\n highlighter: this._textHighlighter,\n accessibilityManager: this._accessibilityManager,\n enablePermissions: n(this, jc) === Ad.ENABLE_PERMISSIONS,\n onAppend: (S) => {\n this.l10n.pause(), h(this, cl, p0).call(this, S, \"textLayer\"), this.l10n.resume();\n }\n })), !this.annotationLayer && n(this, l0) !== Et.DISABLE) {\n const {\n annotationStorage: S,\n annotationEditorUIManager: p,\n downloadManager: L,\n enableScripting: I,\n fieldObjectsPromise: D,\n hasJSActionsPromise: r,\n linkService: w\n } = n(this, zZ);\n this._annotationCanvasMap || (this._annotationCanvasMap = /* @__PURE__ */ new Map()), this.annotationLayer = new Se({\n pdfPage: t,\n annotationStorage: S,\n imageResourcesPath: this.imageResourcesPath,\n renderForms: n(this, l0) === Et.ENABLE_FORMS,\n linkService: w,\n downloadManager: L,\n enableScripting: I,\n hasJSActionsPromise: r,\n fieldObjectsPromise: D,\n annotationCanvasMap: this._annotationCanvasMap,\n accessibilityManager: this._accessibilityManager,\n annotationEditorUIManager: p,\n onAppend: (B) => {\n h(this, cl, p0).call(this, B, \"annotationLayer\");\n }\n });\n }\n const c = (S) => {\n if (i == null || i(!1), this.renderingQueue && !this.renderingQueue.isHighestPriority(this)) {\n this.renderingState = kl.PAUSED, this.resume = () => {\n this.renderingState = kl.RUNNING, S();\n };\n return;\n }\n S();\n }, {\n width: Q,\n height: a\n } = Z, V = document.createElement(\"canvas\");\n V.setAttribute(\"role\", \"presentation\"), V.hidden = !0;\n const W = !!(d != null && d.background && (d != null && d.foreground));\n let i = (S) => {\n (!W || S) && (V.hidden = !1, i = null);\n };\n F.append(V), this.canvas = V;\n const R = V.getContext(\"2d\", {\n alpha: !1,\n willReadFrequently: !n(this, RQ)\n }), N = this.outputScale = new eM();\n if (this.maxCanvasPixels === 0) {\n const S = 1 / this.scale;\n N.sx *= S, N.sy *= S, e(this, U0, !0);\n } else if (this.maxCanvasPixels > 0) {\n const S = Q * a, p = Math.sqrt(this.maxCanvasPixels / S);\n N.sx > p || N.sy > p ? (N.sx = p, N.sy = p, e(this, U0, !0)) : e(this, U0, !1);\n }\n const b = LR(N.sx), J = LR(N.sy), M = V.width = xQ(jQ(Q * N.sx), b[0]), G = V.height = xQ(jQ(a * N.sy), J[0]), T = xQ(jQ(Q), b[1]), u = xQ(jQ(a), J[1]);\n N.sx = M / T, N.sy = G / u, n(this, eQ) !== b[1] && (U.style.setProperty(\"--scale-round-x\", `${b[1]}px`), e(this, eQ, b[1])), n(this, bQ) !== J[1] && (U.style.setProperty(\"--scale-round-y\", `${J[1]}px`), e(this, bQ, J[1])), n(this, t0).set(V, Z);\n const X = N.scaled ? [N.sx, 0, 0, N.sy, 0, 0] : null, Y = {\n canvasContext: R,\n transform: X,\n viewport: Z,\n annotationMode: n(this, l0),\n optionalContentConfigPromise: this._optionalContentConfigPromise,\n annotationCanvasMap: this._annotationCanvasMap,\n pageColors: d,\n isEditing: n(this, NQ)\n }, o = this.renderTask = t.render(Y);\n o.onContinue = c;\n const y = o.promise.then(async () => {\n var p;\n i == null || i(!0), await h(this, cl, Bi).call(this, o), this.structTreeLayer || (this.structTreeLayer = new Ce(t, Z.rawDims)), h(this, cl, pi).call(this), this.annotationLayer && await h(this, cl, Xi).call(this);\n const {\n annotationEditorUIManager: S\n } = n(this, zZ);\n S && (this.drawLayer || (this.drawLayer = new JJ({\n pageIndex: this.id\n })), await h(this, cl, Yi).call(this), this.drawLayer.setParent(F), this.annotationEditorLayer || (this.annotationEditorLayer = new MJ({\n uiManager: S,\n pdfPage: t,\n l10n: l,\n structTreeLayer: this.structTreeLayer,\n accessibilityManager: this._accessibilityManager,\n annotationLayer: (p = this.annotationLayer) == null ? void 0 : p.annotationLayer,\n textLayer: this.textLayer,\n drawLayer: this.drawLayer.getDrawLayer(),\n onAppend: (L) => {\n h(this, cl, p0).call(this, L, \"annotationEditorLayer\");\n }\n })), h(this, cl, ui).call(this));\n }, (S) => (S instanceof ai || i == null || i(!0), h(this, cl, Bi).call(this, o, S)));\n if (t.isPureXfa) {\n if (!this.xfaLayer) {\n const {\n annotationStorage: S,\n linkService: p\n } = n(this, zZ);\n this.xfaLayer = new ge({\n pdfPage: t,\n annotationStorage: S,\n linkService: p\n });\n }\n h(this, cl, oi).call(this);\n }\n return U.setAttribute(\"data-loaded\", !0), this.eventBus.dispatch(\"pagerender\", {\n source: this,\n pageNumber: this.id\n }), y;\n }\n setPageLabel(U) {\n this.pageLabel = typeof U == \"string\" ? U : null, this.div.setAttribute(\"data-l10n-args\", JSON.stringify({\n page: this.pageLabel ?? this.id\n })), this.pageLabel !== null ? this.div.setAttribute(\"data-page-label\", this.pageLabel) : this.div.removeAttribute(\"data-page-label\");\n }\n get thumbnailCanvas() {\n const {\n directDrawing: U,\n initialOptionalContent: l,\n regularAnnotations: d\n } = n(this, kt);\n return U && l && d ? this.canvas : null;\n }\n}\nl0 = new WeakMap(), RQ = new WeakMap(), U0 = new WeakMap(), NQ = new WeakMap(), zZ = new WeakMap(), kZ = new WeakMap(), hQ = new WeakMap(), eQ = new WeakMap(), bQ = new WeakMap(), d0 = new WeakMap(), xc = new WeakMap(), jc = new WeakMap(), kt = new WeakMap(), t0 = new WeakMap(), IZ = new WeakMap(), cl = new WeakSet(), p0 = function(U, l) {\n const d = XJ.get(l), t = n(this, IZ)[d];\n if (n(this, IZ)[d] = U, t) {\n t.replaceWith(U);\n return;\n }\n for (let Z = d - 1; Z >= 0; Z--) {\n const F = n(this, IZ)[Z];\n if (F) {\n F.after(U);\n return;\n }\n }\n this.div.prepend(U);\n}, La = function() {\n const {\n viewport: U\n } = this;\n if (this.pdfPage) {\n if (n(this, hQ) === U.rotation)\n return;\n e(this, hQ, U.rotation);\n }\n bM(this.div, U, !0, !1);\n}, Xn = function(U, l) {\n this.eventBus.dispatch(U, {\n source: this,\n pageNumber: this.id,\n error: l\n });\n}, Xi = async function() {\n let U = null;\n try {\n await this.annotationLayer.render(this.viewport, {\n structTreeLayer: this.structTreeLayer\n }, \"display\");\n } catch (l) {\n console.error(`#renderAnnotationLayer: \"${l}\".`), U = l;\n } finally {\n h(this, cl, Xn).call(this, \"annotationlayerrendered\", U);\n }\n}, ui = async function() {\n let U = null;\n try {\n await this.annotationEditorLayer.render(this.viewport, \"display\");\n } catch (l) {\n console.error(`#renderAnnotationEditorLayer: \"${l}\".`), U = l;\n } finally {\n h(this, cl, Xn).call(this, \"annotationeditorlayerrendered\", U);\n }\n}, Yi = async function() {\n try {\n await this.drawLayer.render(\"display\");\n } catch (U) {\n console.error(`#renderDrawLayer: \"${U}\".`);\n }\n}, oi = async function() {\n var l;\n let U = null;\n try {\n const d = await this.xfaLayer.render(this.viewport, \"display\");\n d != null && d.textDivs && this._textHighlighter && h(this, cl, He).call(this, d.textDivs);\n } catch (d) {\n console.error(`#renderXfaLayer: \"${d}\".`), U = d;\n } finally {\n (l = this.xfaLayer) != null && l.div && (this.l10n.pause(), h(this, cl, p0).call(this, this.xfaLayer.div, \"xfaLayer\"), this.l10n.resume()), h(this, cl, Xn).call(this, \"xfalayerrendered\", U);\n }\n}, pi = async function() {\n if (!this.textLayer)\n return;\n let U = null;\n try {\n await this.textLayer.render(this.viewport);\n } catch (l) {\n if (l instanceof sM)\n return;\n console.error(`#renderTextLayer: \"${l}\".`), U = l;\n }\n h(this, cl, Xn).call(this, \"textlayerrendered\", U), h(this, cl, ve).call(this);\n}, ve = async function() {\n var l, d, t;\n if (!this.textLayer)\n return;\n const U = await ((l = this.structTreeLayer) == null ? void 0 : l.render());\n U && (this.l10n.pause(), (d = this.structTreeLayer) == null || d.addElementsToTextLayer(), this.canvas && U.parentNode !== this.canvas && this.canvas.append(U), this.l10n.resume()), (t = this.structTreeLayer) == null || t.show();\n}, He = async function(U) {\n const l = await this.pdfPage.getTextContent(), d = [];\n for (const t of l.items)\n d.push(t.str);\n this._textHighlighter.setTextMapping(U, d), this._textHighlighter.enable();\n}, Bi = async function(U, l = null) {\n if (U === this.renderTask && (this.renderTask = null), l instanceof ai) {\n e(this, d0, null);\n return;\n }\n if (e(this, d0, l), this.renderingState = kl.FINISHED, this._resetZoomLayer(!0), n(this, kt).regularAnnotations = !U.separateAnnots, this.eventBus.dispatch(\"pagerendered\", {\n source: this,\n pageNumber: this.id,\n cssTransform: !1,\n timestamp: performance.now(),\n error: n(this, d0)\n }), l)\n throw l;\n};\nasync function uJ(s) {\n const U = \"\", l = U.split(\"#\", 1)[0];\n let {\n info: d,\n metadata: t,\n contentDispositionFilename: Z,\n contentLength: F\n } = await s.getMetadata();\n if (!F) {\n const {\n length: c\n } = await s.getDownloadInfo();\n F = c;\n }\n return {\n ...d,\n baseURL: l,\n filesize: F,\n filename: Z || RM(U),\n metadata: t == null ? void 0 : t.getRaw(),\n authors: t == null ? void 0 : t.get(\"dc:creator\"),\n numPages: s.numPages,\n URL: U\n };\n}\nclass YJ {\n constructor(U) {\n this._ready = new Promise((l, d) => {\n import(\n /*webpackIgnore: true*/\n U\n ).then((Z) => {\n l(Z.QuickJSSandbox());\n }).catch(d);\n });\n }\n async createSandbox(U) {\n (await this._ready).create(U);\n }\n async dispatchEventInSandbox(U) {\n const l = await this._ready;\n setTimeout(() => l.dispatchEvent(U), 0);\n }\n async destroySandbox() {\n (await this._ready).nukeSandbox();\n }\n}\nvar Pd, Z0, mQ, F0, c0, MQ, GU, It, Oc, fl, Zd, FU, Pe, za, yi, fe, un;\nclass oJ {\n constructor({\n eventBus: U,\n externalServices: l = null,\n docProperties: d = null\n }) {\n m(this, FU);\n m(this, Pd, null);\n m(this, Z0, null);\n m(this, mQ, null);\n m(this, F0, null);\n m(this, c0, null);\n m(this, MQ, null);\n m(this, GU, null);\n m(this, It, null);\n m(this, Oc, !1);\n m(this, fl, null);\n m(this, Zd, null);\n e(this, c0, U), e(this, MQ, l), e(this, mQ, d);\n }\n setViewer(U) {\n e(this, It, U);\n }\n async setDocument(U) {\n var c;\n if (n(this, GU) && await h(this, FU, un).call(this), e(this, GU, U), !U)\n return;\n const [l, d, t] = await Promise.all([U.getFieldObjects(), U.getCalculationOrderIds(), U.getJSActions()]);\n if (!l && !t) {\n await h(this, FU, un).call(this);\n return;\n }\n if (U !== n(this, GU))\n return;\n try {\n e(this, fl, h(this, FU, fe).call(this));\n } catch (Q) {\n console.error(`setDocument: \"${Q.message}\".`), await h(this, FU, un).call(this);\n return;\n }\n const Z = n(this, c0);\n e(this, F0, new AbortController());\n const {\n signal: F\n } = n(this, F0);\n Z._on(\"updatefromsandbox\", (Q) => {\n (Q == null ? void 0 : Q.source) === window && h(this, FU, Pe).call(this, Q.detail);\n }, {\n signal: F\n }), Z._on(\"dispatcheventinsandbox\", (Q) => {\n var a;\n (a = n(this, fl)) == null || a.dispatchEventInSandbox(Q.detail);\n }, {\n signal: F\n }), Z._on(\"pagechanging\", ({\n pageNumber: Q,\n previous: a\n }) => {\n Q !== a && (h(this, FU, yi).call(this, a), h(this, FU, za).call(this, Q));\n }, {\n signal: F\n }), Z._on(\"pagerendered\", ({\n pageNumber: Q\n }) => {\n this._pageOpenPending.has(Q) && Q === n(this, It).currentPageNumber && h(this, FU, za).call(this, Q);\n }, {\n signal: F\n }), Z._on(\"pagesdestroy\", async () => {\n var Q, a;\n await h(this, FU, yi).call(this, n(this, It).currentPageNumber), await ((Q = n(this, fl)) == null ? void 0 : Q.dispatchEventInSandbox({\n id: \"doc\",\n name: \"WillClose\"\n })), (a = n(this, Pd)) == null || a.resolve();\n }, {\n signal: F\n });\n try {\n const Q = await n(this, mQ).call(this, U);\n if (U !== n(this, GU))\n return;\n await n(this, fl).createSandbox({\n objects: l,\n calculationOrder: d,\n appInfo: {\n platform: navigator.platform,\n language: navigator.language\n },\n docInfo: {\n ...Q,\n actions: t\n }\n }), Z.dispatch(\"sandboxcreated\", {\n source: this\n });\n } catch (Q) {\n console.error(`setDocument: \"${Q.message}\".`), await h(this, FU, un).call(this);\n return;\n }\n await ((c = n(this, fl)) == null ? void 0 : c.dispatchEventInSandbox({\n id: \"doc\",\n name: \"Open\"\n })), await h(this, FU, za).call(this, n(this, It).currentPageNumber, !0), Promise.resolve().then(() => {\n U === n(this, GU) && e(this, Oc, !0);\n });\n }\n async dispatchWillSave() {\n var U;\n return (U = n(this, fl)) == null ? void 0 : U.dispatchEventInSandbox({\n id: \"doc\",\n name: \"WillSave\"\n });\n }\n async dispatchDidSave() {\n var U;\n return (U = n(this, fl)) == null ? void 0 : U.dispatchEventInSandbox({\n id: \"doc\",\n name: \"DidSave\"\n });\n }\n async dispatchWillPrint() {\n var U;\n if (n(this, fl)) {\n await ((U = n(this, Zd)) == null ? void 0 : U.promise), e(this, Zd, Promise.withResolvers());\n try {\n await n(this, fl).dispatchEventInSandbox({\n id: \"doc\",\n name: \"WillPrint\"\n });\n } catch (l) {\n throw n(this, Zd).resolve(), e(this, Zd, null), l;\n }\n await n(this, Zd).promise;\n }\n }\n async dispatchDidPrint() {\n var U;\n return (U = n(this, fl)) == null ? void 0 : U.dispatchEventInSandbox({\n id: \"doc\",\n name: \"DidPrint\"\n });\n }\n get destroyPromise() {\n var U;\n return ((U = n(this, Z0)) == null ? void 0 : U.promise) || null;\n }\n get ready() {\n return n(this, Oc);\n }\n get _pageOpenPending() {\n return ja(this, \"_pageOpenPending\", /* @__PURE__ */ new Set());\n }\n get _visitedPages() {\n return ja(this, \"_visitedPages\", /* @__PURE__ */ new Map());\n }\n}\nPd = new WeakMap(), Z0 = new WeakMap(), mQ = new WeakMap(), F0 = new WeakMap(), c0 = new WeakMap(), MQ = new WeakMap(), GU = new WeakMap(), It = new WeakMap(), Oc = new WeakMap(), fl = new WeakMap(), Zd = new WeakMap(), FU = new WeakSet(), Pe = async function(U) {\n var a, V;\n const l = n(this, It), d = l.isInPresentationMode || l.isChangingPresentationMode, {\n id: t,\n siblings: Z,\n command: F,\n value: c\n } = U;\n if (!t) {\n switch (F) {\n case \"clear\":\n console.clear();\n break;\n case \"error\":\n console.error(c);\n break;\n case \"layout\":\n if (!d) {\n const W = r2(c);\n l.spreadMode = W.spreadMode;\n }\n break;\n case \"page-num\":\n l.currentPageNumber = c + 1;\n break;\n case \"print\":\n await l.pagesPromise, n(this, c0).dispatch(\"print\", {\n source: this\n });\n break;\n case \"println\":\n console.log(c);\n break;\n case \"zoom\":\n d || (l.currentScaleValue = c);\n break;\n case \"SaveAs\":\n n(this, c0).dispatch(\"download\", {\n source: this\n });\n break;\n case \"FirstPage\":\n l.currentPageNumber = 1;\n break;\n case \"LastPage\":\n l.currentPageNumber = l.pagesCount;\n break;\n case \"NextPage\":\n l.nextPage();\n break;\n case \"PrevPage\":\n l.previousPage();\n break;\n case \"ZoomViewIn\":\n d || l.increaseScale();\n break;\n case \"ZoomViewOut\":\n d || l.decreaseScale();\n break;\n case \"WillPrintFinished\":\n (a = n(this, Zd)) == null || a.resolve(), e(this, Zd, null);\n break;\n }\n return;\n }\n if (d && U.focus)\n return;\n delete U.id, delete U.siblings;\n const Q = Z ? [t, ...Z] : [t];\n for (const W of Q) {\n const i = document.querySelector(`[data-element-id=\"${W}\"]`);\n i ? i.dispatchEvent(new CustomEvent(\"updatefromsandbox\", {\n detail: U\n })) : (V = n(this, GU)) == null || V.annotationStorage.setValue(W, U);\n }\n}, za = async function(U, l = !1) {\n const d = n(this, GU), t = this._visitedPages;\n if (l && e(this, Pd, Promise.withResolvers()), !n(this, Pd))\n return;\n const Z = n(this, It).getPageView(U - 1);\n if ((Z == null ? void 0 : Z.renderingState) !== kl.FINISHED) {\n this._pageOpenPending.add(U);\n return;\n }\n this._pageOpenPending.delete(U);\n const F = (async () => {\n var Q, a;\n const c = await (t.has(U) ? null : (Q = Z.pdfPage) == null ? void 0 : Q.getJSActions());\n d === n(this, GU) && await ((a = n(this, fl)) == null ? void 0 : a.dispatchEventInSandbox({\n id: \"page\",\n name: \"PageOpen\",\n pageNumber: U,\n actions: c\n }));\n })();\n t.set(U, F);\n}, yi = async function(U) {\n var Z;\n const l = n(this, GU), d = this._visitedPages;\n if (!n(this, Pd) || this._pageOpenPending.has(U))\n return;\n const t = d.get(U);\n t && (d.set(U, null), await t, l === n(this, GU) && await ((Z = n(this, fl)) == null ? void 0 : Z.dispatchEventInSandbox({\n id: \"page\",\n name: \"PageClose\",\n pageNumber: U\n })));\n}, fe = function() {\n if (e(this, Z0, Promise.withResolvers()), n(this, fl))\n throw new Error(\"#initScripting: Scripting already exists.\");\n return n(this, MQ).createScripting();\n}, un = async function() {\n var U, l, d, t;\n if (!n(this, fl)) {\n e(this, GU, null), (U = n(this, Z0)) == null || U.resolve();\n return;\n }\n n(this, Pd) && (await Promise.race([n(this, Pd).promise, new Promise((Z) => {\n setTimeout(Z, 1e3);\n })]).catch(() => {\n }), e(this, Pd, null)), e(this, GU, null);\n try {\n await n(this, fl).destroySandbox();\n } catch {\n }\n (l = n(this, Zd)) == null || l.reject(new Error(\"Scripting destroyed.\")), e(this, Zd, null), (d = n(this, F0)) == null || d.abort(), e(this, F0, null), this._pageOpenPending.clear(), this._visitedPages.clear(), e(this, fl, null), e(this, Oc, !1), (t = n(this, Z0)) == null || t.resolve();\n};\nclass pJ extends oJ {\n constructor(U) {\n U.externalServices || window.addEventListener(\"updatefromsandbox\", (l) => {\n U.eventBus.dispatch(\"updatefromsandbox\", {\n source: window,\n detail: l.detail\n });\n }), U.externalServices || (U.externalServices = {\n createScripting: () => new YJ(U.sandboxBundleSrc)\n }), U.docProperties || (U.docProperties = (l) => uJ(l)), super(U);\n }\n}\nconst BJ = 3e4;\nclass yJ {\n constructor() {\n this.pdfViewer = null, this.pdfThumbnailViewer = null, this.onIdle = null, this.highestPriorityPage = null, this.idleTimeout = null, this.printing = !1, this.isThumbnailViewEnabled = !1, Object.defineProperty(this, \"hasViewer\", {\n value: () => !!this.pdfViewer\n });\n }\n setViewer(U) {\n this.pdfViewer = U;\n }\n setThumbnailViewer(U) {\n this.pdfThumbnailViewer = U;\n }\n isHighestPriority(U) {\n return this.highestPriorityPage === U.renderingId;\n }\n renderHighestPriority(U) {\n var l;\n this.idleTimeout && (clearTimeout(this.idleTimeout), this.idleTimeout = null), !this.pdfViewer.forceRendering(U) && (this.isThumbnailViewEnabled && ((l = this.pdfThumbnailViewer) != null && l.forceRendering()) || this.printing || this.onIdle && (this.idleTimeout = setTimeout(this.onIdle.bind(this), BJ)));\n }\n getHighestPriority(U, l, d, t = !1) {\n const Z = U.views, F = Z.length;\n if (F === 0)\n return null;\n for (let W = 0; W < F; W++) {\n const i = Z[W].view;\n if (!this.isViewFinished(i))\n return i;\n }\n const c = U.first.id, Q = U.last.id;\n if (Q - c + 1 > F) {\n const W = U.ids;\n for (let i = 1, R = Q - c; i < R; i++) {\n const N = d ? c + i : Q - i;\n if (W.has(N))\n continue;\n const b = l[N - 1];\n if (!this.isViewFinished(b))\n return b;\n }\n }\n let a = d ? Q : c - 2, V = l[a];\n return V && !this.isViewFinished(V) || t && (a += d ? 1 : -1, V = l[a], V && !this.isViewFinished(V)) ? V : null;\n }\n isViewFinished(U) {\n return U.renderingState === kl.FINISHED;\n }\n renderView(U) {\n switch (U.renderingState) {\n case kl.FINISHED:\n return !1;\n case kl.PAUSED:\n this.highestPriorityPage = U.renderingId, U.resume();\n break;\n case kl.RUNNING:\n this.highestPriorityPage = U.renderingId;\n break;\n case kl.INITIAL:\n this.highestPriorityPage = U.renderingId, U.draw().finally(() => {\n this.renderHighestPriority();\n }).catch((l) => {\n l instanceof ai || console.error(`renderView: \"${l}\"`);\n });\n break;\n }\n return !0;\n }\n}\nconst FN = 10, vQ = {\n FORCE_SCROLL_MODE_PAGE: 1e4,\n FORCE_LAZY_PAGE_INIT: 5e3,\n PAUSE_EAGER_PAGE_INIT: 250\n};\nfunction cN(s) {\n return Object.values(rU).includes(s) && s !== rU.DISABLE;\n}\nvar Dt, n0, JQ, Li;\nclass LJ {\n constructor(U) {\n m(this, JQ);\n m(this, Dt, /* @__PURE__ */ new Set());\n m(this, n0, 0);\n e(this, n0, U);\n }\n push(U) {\n const l = n(this, Dt);\n l.has(U) && l.delete(U), l.add(U), l.size > n(this, n0) && h(this, JQ, Li).call(this);\n }\n resize(U, l = null) {\n e(this, n0, U);\n const d = n(this, Dt);\n if (l) {\n const t = d.size;\n let Z = 1;\n for (const F of d)\n if (l.has(F.id) && (d.delete(F), d.add(F)), ++Z > t)\n break;\n }\n for (; d.size > n(this, n0); )\n h(this, JQ, Li).call(this);\n }\n has(U) {\n return n(this, Dt).has(U);\n }\n [Symbol.iterator]() {\n return n(this, Dt).keys();\n }\n}\nDt = new WeakMap(), n0 = new WeakMap(), JQ = new WeakSet(), Li = function() {\n const U = n(this, Dt).keys().next().value;\n U == null || U.destroy(), n(this, Dt).delete(U);\n};\nvar DZ, GQ, TQ, fd, vU, s0, SQ, XQ, uQ, YQ, oQ, pQ, EZ, Q0, a0, V0, gc, rZ, Kc, BQ, vc, W0, CZ, Hc, f, _e, qe, $e, Yn, ka, lb, zi, Ub, ft, ki, db, tb, Zb, Ii, Fb, Ia;\nclass Ae {\n constructor(U) {\n m(this, f);\n m(this, DZ, null);\n m(this, GQ, null);\n m(this, TQ, null);\n m(this, fd, rU.NONE);\n m(this, vU, null);\n m(this, s0, Et.ENABLE_FORMS);\n m(this, SQ, null);\n m(this, XQ, !1);\n m(this, uQ, !1);\n m(this, YQ, !1);\n m(this, oQ, !1);\n m(this, pQ, !1);\n m(this, EZ, null);\n m(this, Q0, null);\n m(this, a0, null);\n m(this, V0, null);\n m(this, gc, !1);\n m(this, rZ, null);\n m(this, Kc, !1);\n m(this, BQ, 0);\n m(this, vc, new ResizeObserver(h(this, f, Fb).bind(this)));\n m(this, W0, null);\n m(this, CZ, null);\n m(this, Hc, Ad.ENABLE);\n var t, Z;\n const l = \"4.7.76\";\n if (xR !== l)\n throw new Error(`The API version \"${xR}\" does not match the Viewer version \"${l}\".`);\n if (this.container = U.container, this.viewer = U.viewer || U.container.firstElementChild, ((t = this.container) == null ? void 0 : t.tagName) !== \"DIV\" || ((Z = this.viewer) == null ? void 0 : Z.tagName) !== \"DIV\")\n throw new Error(\"Invalid `container` and/or `viewer` option.\");\n if (this.container.offsetParent && getComputedStyle(this.container).position !== \"absolute\")\n throw new Error(\"The `container` must be absolutely positioned.\");\n n(this, vc).observe(this.container), this.eventBus = U.eventBus, this.linkService = U.linkService || new Ai(), this.downloadManager = U.downloadManager || null, this.findController = U.findController || null, e(this, GQ, U.altTextManager || null), this.findController && (this.findController.onIsPageVisible = (F) => this._getVisiblePages().ids.has(F)), this._scriptingManager = U.scriptingManager || null, e(this, Hc, U.textLayerMode ?? Ad.ENABLE), e(this, s0, U.annotationMode ?? Et.ENABLE_FORMS), e(this, fd, U.annotationEditorMode ?? rU.NONE), e(this, TQ, U.annotationEditorHighlightColors || null), e(this, uQ, U.enableHighlightFloatingButton === !0), e(this, oQ, U.enableUpdatedAddImage === !0), e(this, pQ, U.enableNewAltTextWhenAddingImage === !0), this.imageResourcesPath = U.imageResourcesPath || \"\", this.enablePrintAutoRotate = U.enablePrintAutoRotate || !1, this.removePageBorders = U.removePageBorders || !1, this.maxCanvasPixels = U.maxCanvasPixels, this.l10n = U.l10n, this.l10n || (this.l10n = new Ac()), e(this, YQ, U.enablePermissions || !1), this.pageColors = U.pageColors || null, e(this, Q0, U.mlManager || null), e(this, XQ, U.enableHWA || !1), this.defaultRenderingQueue = !U.renderingQueue, this.defaultRenderingQueue ? (this.renderingQueue = new yJ(), this.renderingQueue.setViewer(this)) : this.renderingQueue = U.renderingQueue;\n const {\n abortSignal: d\n } = U;\n d == null || d.addEventListener(\"abort\", () => {\n n(this, vc).disconnect(), e(this, vc, null);\n }, {\n once: !0\n }), this.scroll = B2(this.container, this._scrollUpdate.bind(this), d), this.presentationModeState = L0.UNKNOWN, this._resetView(), this.removePageBorders && this.viewer.classList.add(\"removePageBorders\"), h(this, f, Ii).call(this), this.eventBus._on(\"thumbnailrendered\", ({\n pageNumber: F,\n pdfPage: c\n }) => {\n const Q = this._pages[F - 1];\n n(this, DZ).has(Q) || c == null || c.cleanup();\n }), U.l10n || this.l10n.translate(this.container);\n }\n get pagesCount() {\n return this._pages.length;\n }\n getPageView(U) {\n return this._pages[U];\n }\n getCachedPageViews() {\n return new Set(n(this, DZ));\n }\n get pageViewsReady() {\n return this._pages.every((U) => U == null ? void 0 : U.pdfPage);\n }\n get renderForms() {\n return n(this, s0) === Et.ENABLE_FORMS;\n }\n get enableScripting() {\n return !!this._scriptingManager;\n }\n get currentPageNumber() {\n return this._currentPageNumber;\n }\n set currentPageNumber(U) {\n if (!Number.isInteger(U))\n throw new Error(\"Invalid page number.\");\n this.pdfDocument && (this._setCurrentPageNumber(U, !0) || console.error(`currentPageNumber: \"${U}\" is not a valid page.`));\n }\n _setCurrentPageNumber(U, l = !1) {\n var t;\n if (this._currentPageNumber === U)\n return l && h(this, f, ki).call(this), !0;\n if (!(0 < U && U <= this.pagesCount))\n return !1;\n const d = this._currentPageNumber;\n return this._currentPageNumber = U, this.eventBus.dispatch(\"pagechanging\", {\n source: this,\n pageNumber: U,\n pageLabel: ((t = this._pageLabels) == null ? void 0 : t[U - 1]) ?? null,\n previous: d\n }), l && h(this, f, ki).call(this), !0;\n }\n get currentPageLabel() {\n var U;\n return ((U = this._pageLabels) == null ? void 0 : U[this._currentPageNumber - 1]) ?? null;\n }\n set currentPageLabel(U) {\n if (!this.pdfDocument)\n return;\n let l = U | 0;\n if (this._pageLabels) {\n const d = this._pageLabels.indexOf(U);\n d >= 0 && (l = d + 1);\n }\n this._setCurrentPageNumber(l, !0) || console.error(`currentPageLabel: \"${U}\" is not a valid page.`);\n }\n get currentScale() {\n return this._currentScale !== BV ? this._currentScale : ie;\n }\n set currentScale(U) {\n if (isNaN(U))\n throw new Error(\"Invalid numeric scale.\");\n this.pdfDocument && h(this, f, ft).call(this, U, {\n noScroll: !1\n });\n }\n get currentScaleValue() {\n return this._currentScaleValue;\n }\n set currentScaleValue(U) {\n this.pdfDocument && h(this, f, ft).call(this, U, {\n noScroll: !1\n });\n }\n get pagesRotation() {\n return this._pagesRotation;\n }\n set pagesRotation(U) {\n if (!Ne(U))\n throw new Error(\"Invalid pages rotation angle.\");\n if (!this.pdfDocument || (U %= 360, U < 0 && (U += 360), this._pagesRotation === U))\n return;\n this._pagesRotation = U;\n const l = this._currentPageNumber;\n this.refresh(!0, {\n rotation: U\n }), this._currentScaleValue && h(this, f, ft).call(this, this._currentScaleValue, {\n noScroll: !0\n }), this.eventBus.dispatch(\"rotationchanging\", {\n source: this,\n pagesRotation: U,\n pageNumber: l\n }), this.defaultRenderingQueue && this.update();\n }\n get firstPagePromise() {\n return this.pdfDocument ? this._firstPageCapability.promise : null;\n }\n get onePageRendered() {\n return this.pdfDocument ? this._onePageRenderedCapability.promise : null;\n }\n get pagesPromise() {\n return this.pdfDocument ? this._pagesCapability.promise : null;\n }\n get _layerProperties() {\n const U = this;\n return ja(this, \"_layerProperties\", {\n get annotationEditorUIManager() {\n return n(U, vU);\n },\n get annotationStorage() {\n var l;\n return (l = U.pdfDocument) == null ? void 0 : l.annotationStorage;\n },\n get downloadManager() {\n return U.downloadManager;\n },\n get enableScripting() {\n return !!U._scriptingManager;\n },\n get fieldObjectsPromise() {\n var l;\n return (l = U.pdfDocument) == null ? void 0 : l.getFieldObjects();\n },\n get findController() {\n return U.findController;\n },\n get hasJSActionsPromise() {\n var l;\n return (l = U.pdfDocument) == null ? void 0 : l.hasJSActions();\n },\n get linkService() {\n return U.linkService;\n }\n });\n }\n async getAllText() {\n const U = [], l = [];\n for (let d = 1, t = this.pdfDocument.numPages; d <= t; ++d) {\n if (n(this, Kc))\n return null;\n l.length = 0;\n const Z = await this.pdfDocument.getPage(d), {\n items: F\n } = await Z.getTextContent();\n for (const c of F)\n c.str && l.push(c.str), c.hasEOL && l.push(`\n`);\n U.push(yn(l.join(\"\")));\n }\n return U.join(`\n`);\n }\n setDocument(U) {\n var i, R, N;\n if (this.pdfDocument && (this.eventBus.dispatch(\"pagesdestroy\", {\n source: this\n }), this._cancelRendering(), this._resetView(), (i = this.findController) == null || i.setDocument(null), (R = this._scriptingManager) == null || R.setDocument(null), (N = n(this, vU)) == null || N.destroy(), e(this, vU, null)), this.pdfDocument = U, !U)\n return;\n const l = U.numPages, d = U.getPage(1), t = U.getOptionalContentConfig({\n intent: \"display\"\n }), Z = n(this, YQ) ? U.getPermissions() : Promise.resolve(), {\n eventBus: F,\n pageColors: c,\n viewer: Q\n } = this;\n e(this, EZ, new AbortController());\n const {\n signal: a\n } = n(this, EZ);\n if (l > vQ.FORCE_SCROLL_MODE_PAGE) {\n console.warn(\"Forcing PAGE-scrolling for performance reasons, given the length of the document.\");\n const b = this._scrollMode = al.PAGE;\n F.dispatch(\"scrollmodechanged\", {\n source: this,\n mode: b\n });\n }\n this._pagesCapability.promise.then(() => {\n F.dispatch(\"pagesloaded\", {\n source: this,\n pagesCount: l\n });\n }, () => {\n });\n const V = (b) => {\n const J = this._pages[b.pageNumber - 1];\n J && n(this, DZ).push(J);\n };\n F._on(\"pagerender\", V, {\n signal: a\n });\n const W = (b) => {\n b.cssTransform || (this._onePageRenderedCapability.resolve({\n timestamp: b.timestamp\n }), F._off(\"pagerendered\", W));\n };\n F._on(\"pagerendered\", W, {\n signal: a\n }), Promise.all([d, Z]).then(([b, J]) => {\n var o, y;\n if (U !== this.pdfDocument)\n return;\n this._firstPageCapability.resolve(b), this._optionalContentConfigPromise = t;\n const {\n annotationEditorMode: M,\n annotationMode: G,\n textLayerMode: T\n } = h(this, f, _e).call(this, J);\n if (T !== Ad.DISABLE) {\n const S = e(this, rZ, document.createElement(\"div\"));\n S.id = \"hiddenCopyElement\", Q.before(S);\n }\n if (typeof AbortSignal.any == \"function\" && M !== rU.DISABLE) {\n const S = M;\n U.isPureXfa ? console.warn(\"Warning: XFA-editing is not implemented.\") : cN(S) ? (e(this, vU, new aM(this.container, Q, n(this, GQ), F, U, c, n(this, TQ), n(this, uQ), n(this, oQ), n(this, pQ), n(this, Q0))), F.dispatch(\"annotationeditoruimanager\", {\n source: this,\n uiManager: n(this, vU)\n }), S !== rU.NONE && (S === rU.STAMP && ((o = n(this, Q0)) == null || o.loadModel(\"altText\")), n(this, vU).updateMode(S))) : console.error(`Invalid AnnotationEditor mode: ${S}`);\n }\n const u = this._scrollMode === al.PAGE ? null : Q, X = this.currentScale, Y = b.getViewport({\n scale: X * st.PDF_TO_CSS_UNITS\n });\n Q.style.setProperty(\"--scale-factor\", Y.scale), c != null && c.background && Q.style.setProperty(\"--page-bg-color\", c.background), ((c == null ? void 0 : c.foreground) === \"CanvasText\" || (c == null ? void 0 : c.background) === \"Canvas\") && (Q.style.setProperty(\"--hcm-highlight-filter\", U.filterFactory.addHighlightHCMFilter(\"highlight\", \"CanvasText\", \"Canvas\", \"HighlightText\", \"Highlight\")), Q.style.setProperty(\"--hcm-highlight-selected-filter\", U.filterFactory.addHighlightHCMFilter(\"highlight_selected\", \"CanvasText\", \"Canvas\", \"HighlightText\", \"ButtonText\")));\n for (let S = 1; S <= l; ++S) {\n const p = new Ke({\n container: u,\n eventBus: F,\n id: S,\n scale: X,\n defaultViewport: Y.clone(),\n optionalContentConfigPromise: t,\n renderingQueue: this.renderingQueue,\n textLayerMode: T,\n annotationMode: G,\n imageResourcesPath: this.imageResourcesPath,\n maxCanvasPixels: this.maxCanvasPixels,\n pageColors: c,\n l10n: this.l10n,\n layerProperties: this._layerProperties,\n enableHWA: n(this, XQ)\n });\n this._pages.push(p);\n }\n (y = this._pages[0]) == null || y.setPdfPage(b), this._scrollMode === al.PAGE ? h(this, f, Yn).call(this) : this._spreadMode !== bU.NONE && this._updateSpreadMode(), h(this, f, qe).call(this, a).then(async () => {\n var p, L;\n if (U !== this.pdfDocument)\n return;\n if ((p = this.findController) == null || p.setDocument(U), (L = this._scriptingManager) == null || L.setDocument(U), n(this, rZ) && document.addEventListener(\"copy\", h(this, f, $e).bind(this, T), {\n signal: a\n }), n(this, vU) && F.dispatch(\"annotationeditormodechanged\", {\n source: this,\n mode: n(this, fd)\n }), U.loadingParams.disableAutoFetch || l > vQ.FORCE_LAZY_PAGE_INIT) {\n this._pagesCapability.resolve();\n return;\n }\n let S = l - 1;\n if (S <= 0) {\n this._pagesCapability.resolve();\n return;\n }\n for (let I = 2; I <= l; ++I) {\n const D = U.getPage(I).then((r) => {\n const w = this._pages[I - 1];\n w.pdfPage || w.setPdfPage(r), --S === 0 && this._pagesCapability.resolve();\n }, (r) => {\n console.error(`Unable to get page ${I} to initialize viewer`, r), --S === 0 && this._pagesCapability.resolve();\n });\n I % vQ.PAUSE_EAGER_PAGE_INIT === 0 && await D;\n }\n }), F.dispatch(\"pagesinit\", {\n source: this\n }), U.getMetadata().then(({\n info: S\n }) => {\n U === this.pdfDocument && S.Language && (Q.lang = S.Language);\n }), this.defaultRenderingQueue && this.update();\n }).catch((b) => {\n console.error(\"Unable to initialize viewer\", b), this._pagesCapability.reject(b);\n });\n }\n setPageLabels(U) {\n var l;\n if (this.pdfDocument) {\n U ? Array.isArray(U) && this.pdfDocument.numPages === U.length ? this._pageLabels = U : (this._pageLabels = null, console.error(\"setPageLabels: Invalid page labels.\")) : this._pageLabels = null;\n for (let d = 0, t = this._pages.length; d < t; d++)\n this._pages[d].setPageLabel(((l = this._pageLabels) == null ? void 0 : l[d]) ?? null);\n }\n }\n _resetView() {\n var U, l;\n this._pages = [], this._currentPageNumber = 1, this._currentScale = BV, this._currentScaleValue = null, this._pageLabels = null, e(this, DZ, new LJ(FN)), this._location = null, this._pagesRotation = 0, this._optionalContentConfigPromise = null, this._firstPageCapability = Promise.withResolvers(), this._onePageRenderedCapability = Promise.withResolvers(), this._pagesCapability = Promise.withResolvers(), this._scrollMode = al.VERTICAL, this._previousScrollMode = al.UNKNOWN, this._spreadMode = bU.NONE, e(this, W0, {\n previousPageNumber: 1,\n scrollDown: !0,\n pages: []\n }), (U = n(this, EZ)) == null || U.abort(), e(this, EZ, null), this.viewer.textContent = \"\", this._updateScrollMode(), this.viewer.removeAttribute(\"lang\"), (l = n(this, rZ)) == null || l.remove(), e(this, rZ, null), h(this, f, Ia).call(this);\n }\n _scrollUpdate() {\n this.pagesCount !== 0 && this.update();\n }\n pageLabelToPageNumber(U) {\n if (!this._pageLabels)\n return null;\n const l = this._pageLabels.indexOf(U);\n return l < 0 ? null : l + 1;\n }\n scrollPageIntoView({\n pageNumber: U,\n destArray: l = null,\n allowNegativeOffset: d = !1,\n ignoreDestinationZoom: t = !1\n }) {\n if (!this.pdfDocument)\n return;\n const Z = Number.isInteger(U) && this._pages[U - 1];\n if (!Z) {\n console.error(`scrollPageIntoView: \"${U}\" is not a valid pageNumber parameter.`);\n return;\n }\n if (this.isInPresentationMode || !l) {\n this._setCurrentPageNumber(U, !0);\n return;\n }\n let F = 0, c = 0, Q = 0, a = 0, V, W;\n const i = Z.rotation % 180 !== 0, R = (i ? Z.height : Z.width) / Z.scale / st.PDF_TO_CSS_UNITS, N = (i ? Z.width : Z.height) / Z.scale / st.PDF_TO_CSS_UNITS;\n let b = 0;\n switch (l[1].name) {\n case \"XYZ\":\n F = l[2], c = l[3], b = l[4], F = F !== null ? F : 0, c = c !== null ? c : N;\n break;\n case \"Fit\":\n case \"FitB\":\n b = \"page-fit\";\n break;\n case \"FitH\":\n case \"FitBH\":\n c = l[2], b = \"page-width\", c === null && this._location ? (F = this._location.left, c = this._location.top) : (typeof c != \"number\" || c < 0) && (c = N);\n break;\n case \"FitV\":\n case \"FitBV\":\n F = l[2], Q = R, a = N, b = \"page-height\";\n break;\n case \"FitR\":\n F = l[2], c = l[3], Q = l[4] - F, a = l[5] - c;\n let T = pR, u = BR;\n this.removePageBorders && (T = u = 0), V = (this.container.clientWidth - T) / Q / st.PDF_TO_CSS_UNITS, W = (this.container.clientHeight - u) / a / st.PDF_TO_CSS_UNITS, b = Math.min(Math.abs(V), Math.abs(W));\n break;\n default:\n console.error(`scrollPageIntoView: \"${l[1].name}\" is not a valid destination type.`);\n return;\n }\n if (t || (b && b !== this._currentScale ? this.currentScaleValue = b : this._currentScale === BV && (this.currentScaleValue = u2)), b === \"page-fit\" && !l[4]) {\n h(this, f, ka).call(this, Z);\n return;\n }\n const J = [Z.viewport.convertToViewportPoint(F, c), Z.viewport.convertToViewportPoint(F + Q, c + a)];\n let M = Math.min(J[0][0], J[1][0]), G = Math.min(J[0][1], J[1][1]);\n d || (M = Math.max(M, 0), G = Math.max(G, 0)), h(this, f, ka).call(this, Z, {\n left: M,\n top: G\n });\n }\n _updateLocation(U) {\n const l = this._currentScale, d = this._currentScaleValue, t = parseFloat(d) === l ? Math.round(l * 1e4) / 100 : d, Z = U.id, F = this._pages[Z - 1], c = this.container, Q = F.getPagePoint(c.scrollLeft - U.x, c.scrollTop - U.y), a = Math.round(Q[0]), V = Math.round(Q[1]);\n let W = `#page=${Z}`;\n this.isInPresentationMode || (W += `&zoom=${t},${a},${V}`), this._location = {\n pageNumber: Z,\n scale: t,\n top: V,\n left: a,\n rotation: this._pagesRotation,\n pdfOpenParams: W\n };\n }\n update() {\n const U = this._getVisiblePages(), l = U.views, d = l.length;\n if (d === 0)\n return;\n const t = Math.max(FN, 2 * d + 1);\n n(this, DZ).resize(t, U.ids), this.renderingQueue.renderHighestPriority(U);\n const Z = this._spreadMode === bU.NONE && (this._scrollMode === al.PAGE || this._scrollMode === al.VERTICAL), F = this._currentPageNumber;\n let c = !1;\n for (const Q of l) {\n if (Q.percent < 100)\n break;\n if (Q.id === F && Z) {\n c = !0;\n break;\n }\n }\n this._setCurrentPageNumber(c ? F : l[0].id), this._updateLocation(U.first), this.eventBus.dispatch(\"updateviewarea\", {\n source: this,\n location: this._location\n });\n }\n containsElement(U) {\n return this.container.contains(U);\n }\n focus() {\n this.container.focus();\n }\n get _isContainerRtl() {\n return getComputedStyle(this.container).direction === \"rtl\";\n }\n get isInPresentationMode() {\n return this.presentationModeState === L0.FULLSCREEN;\n }\n get isChangingPresentationMode() {\n return this.presentationModeState === L0.CHANGING;\n }\n get isHorizontalScrollbarEnabled() {\n return this.isInPresentationMode ? !1 : this.container.scrollWidth > this.container.clientWidth;\n }\n get isVerticalScrollbarEnabled() {\n return this.isInPresentationMode ? !1 : this.container.scrollHeight > this.container.clientHeight;\n }\n _getVisiblePages() {\n const U = this._scrollMode === al.PAGE ? n(this, W0).pages : this._pages, l = this._scrollMode === al.HORIZONTAL, d = l && this._isContainerRtl;\n return L2({\n scrollEl: this.container,\n views: U,\n sortByVisibility: !0,\n horizontal: l,\n rtl: d\n });\n }\n cleanup() {\n for (const U of this._pages)\n U.renderingState !== kl.FINISHED && U.reset();\n }\n _cancelRendering() {\n for (const U of this._pages)\n U.cancelRendering();\n }\n forceRendering(U) {\n const l = U || this._getVisiblePages(), d = h(this, f, Zb).call(this, l), t = this._spreadMode !== bU.NONE && this._scrollMode !== al.HORIZONTAL, Z = this.renderingQueue.getHighestPriority(l, this._pages, d, t);\n return Z ? (h(this, f, tb).call(this, Z).then(() => {\n this.renderingQueue.renderView(Z);\n }), !0) : !1;\n }\n get hasEqualPageSizes() {\n const U = this._pages[0];\n for (let l = 1, d = this._pages.length; l < d; ++l) {\n const t = this._pages[l];\n if (t.width !== U.width || t.height !== U.height)\n return !1;\n }\n return !0;\n }\n getPagesOverview() {\n let U;\n return this._pages.map((l) => {\n const d = l.pdfPage.getViewport({\n scale: 1\n }), t = zR(d);\n if (U === void 0)\n U = t;\n else if (this.enablePrintAutoRotate && t !== U)\n return {\n width: d.height,\n height: d.width,\n rotation: (d.rotation - 90) % 360\n };\n return {\n width: d.width,\n height: d.height,\n rotation: d.rotation\n };\n });\n }\n get optionalContentConfigPromise() {\n return this.pdfDocument ? this._optionalContentConfigPromise ? this._optionalContentConfigPromise : (console.error(\"optionalContentConfigPromise: Not initialized yet.\"), this.pdfDocument.getOptionalContentConfig({\n intent: \"display\"\n })) : Promise.resolve(null);\n }\n set optionalContentConfigPromise(U) {\n if (!(U instanceof Promise))\n throw new Error(`Invalid optionalContentConfigPromise: ${U}`);\n this.pdfDocument && this._optionalContentConfigPromise && (this._optionalContentConfigPromise = U, this.refresh(!1, {\n optionalContentConfigPromise: U\n }), this.eventBus.dispatch(\"optionalcontentconfigchanged\", {\n source: this,\n promise: U\n }));\n }\n get scrollMode() {\n return this._scrollMode;\n }\n set scrollMode(U) {\n if (this._scrollMode !== U) {\n if (!z2(U))\n throw new Error(`Invalid scroll mode: ${U}`);\n this.pagesCount > vQ.FORCE_SCROLL_MODE_PAGE || (this._previousScrollMode = this._scrollMode, this._scrollMode = U, this.eventBus.dispatch(\"scrollmodechanged\", {\n source: this,\n mode: U\n }), this._updateScrollMode(this._currentPageNumber));\n }\n }\n _updateScrollMode(U = null) {\n const l = this._scrollMode, d = this.viewer;\n d.classList.toggle(\"scrollHorizontal\", l === al.HORIZONTAL), d.classList.toggle(\"scrollWrapped\", l === al.WRAPPED), !(!this.pdfDocument || !U) && (l === al.PAGE ? h(this, f, Yn).call(this) : this._previousScrollMode === al.PAGE && this._updateSpreadMode(), this._currentScaleValue && isNaN(this._currentScaleValue) && h(this, f, ft).call(this, this._currentScaleValue, {\n noScroll: !0\n }), this._setCurrentPageNumber(U, !0), this.update());\n }\n get spreadMode() {\n return this._spreadMode;\n }\n set spreadMode(U) {\n if (this._spreadMode !== U) {\n if (!k2(U))\n throw new Error(`Invalid spread mode: ${U}`);\n this._spreadMode = U, this.eventBus.dispatch(\"spreadmodechanged\", {\n source: this,\n mode: U\n }), this._updateSpreadMode(this._currentPageNumber);\n }\n }\n _updateSpreadMode(U = null) {\n if (!this.pdfDocument)\n return;\n const l = this.viewer, d = this._pages;\n if (this._scrollMode === al.PAGE)\n h(this, f, Yn).call(this);\n else if (l.textContent = \"\", this._spreadMode === bU.NONE)\n for (const t of this._pages)\n l.append(t.div);\n else {\n const t = this._spreadMode - 1;\n let Z = null;\n for (let F = 0, c = d.length; F < c; ++F)\n Z === null ? (Z = document.createElement(\"div\"), Z.className = \"spread\", l.append(Z)) : F % 2 === t && (Z = Z.cloneNode(!1), l.append(Z)), Z.append(d[F].div);\n }\n U && (this._currentScaleValue && isNaN(this._currentScaleValue) && h(this, f, ft).call(this, this._currentScaleValue, {\n noScroll: !0\n }), this._setCurrentPageNumber(U, !0), this.update());\n }\n _getPageAdvance(U, l = !1) {\n switch (this._scrollMode) {\n case al.WRAPPED: {\n const {\n views: d\n } = this._getVisiblePages(), t = /* @__PURE__ */ new Map();\n for (const {\n id: Z,\n y: F,\n percent: c,\n widthPercent: Q\n } of d) {\n if (c === 0 || Q < 100)\n continue;\n let a = t.get(F);\n a || t.set(F, a || (a = [])), a.push(Z);\n }\n for (const Z of t.values()) {\n const F = Z.indexOf(U);\n if (F === -1)\n continue;\n const c = Z.length;\n if (c === 1)\n break;\n if (l)\n for (let Q = F - 1, a = 0; Q >= a; Q--) {\n const V = Z[Q], W = Z[Q + 1] - 1;\n if (V < W)\n return U - W;\n }\n else\n for (let Q = F + 1, a = c; Q < a; Q++) {\n const V = Z[Q], W = Z[Q - 1] + 1;\n if (V > W)\n return W - U;\n }\n if (l) {\n const Q = Z[0];\n if (Q < U)\n return U - Q + 1;\n } else {\n const Q = Z[c - 1];\n if (Q > U)\n return Q - U + 1;\n }\n break;\n }\n break;\n }\n case al.HORIZONTAL:\n break;\n case al.PAGE:\n case al.VERTICAL: {\n if (this._spreadMode === bU.NONE)\n break;\n const d = this._spreadMode - 1;\n if (l && U % 2 !== d)\n break;\n if (!l && U % 2 === d)\n break;\n const {\n views: t\n } = this._getVisiblePages(), Z = l ? U - 1 : U + 1;\n for (const {\n id: F,\n percent: c,\n widthPercent: Q\n } of t)\n if (F === Z) {\n if (c > 0 && Q === 100)\n return 2;\n break;\n }\n break;\n }\n }\n return 1;\n }\n nextPage() {\n const U = this._currentPageNumber, l = this.pagesCount;\n if (U >= l)\n return !1;\n const d = this._getPageAdvance(U, !1) || 1;\n return this.currentPageNumber = Math.min(U + d, l), !0;\n }\n previousPage() {\n const U = this._currentPageNumber;\n if (U <= 1)\n return !1;\n const l = this._getPageAdvance(U, !0) || 1;\n return this.currentPageNumber = Math.max(U - l, 1), !0;\n }\n updateScale({\n drawingDelay: U,\n scaleFactor: l = null,\n steps: d = null,\n origin: t\n }) {\n if (d === null && l === null)\n throw new Error(\"Invalid updateScale options: either `steps` or `scaleFactor` must be provided.\");\n if (!this.pdfDocument)\n return;\n let Z = this._currentScale;\n if (l > 0 && l !== 1)\n Z = Math.round(Z * l * 100) / 100;\n else if (d) {\n const F = d > 0 ? oR : 1 / oR, c = d > 0 ? Math.ceil : Math.floor;\n d = Math.abs(d);\n do\n Z = c((Z * F).toFixed(2) * 10) / 10;\n while (--d > 0);\n }\n Z = Math.max(Y2, Math.min(o2, Z)), h(this, f, ft).call(this, Z, {\n noScroll: !1,\n drawingDelay: U,\n origin: t\n });\n }\n increaseScale(U = {}) {\n this.updateScale({\n ...U,\n steps: U.steps ?? 1\n });\n }\n decreaseScale(U = {}) {\n this.updateScale({\n ...U,\n steps: -(U.steps ?? 1)\n });\n }\n get containerTopLeft() {\n return n(this, SQ) || e(this, SQ, [this.container.offsetTop, this.container.offsetLeft]);\n }\n get annotationEditorMode() {\n return n(this, vU) ? n(this, fd) : rU.DISABLE;\n }\n set annotationEditorMode({\n mode: U,\n editId: l = null,\n isFromKeyboard: d = !1\n }) {\n var F;\n if (!n(this, vU))\n throw new Error(\"The AnnotationEditor is not enabled.\");\n if (n(this, fd) === U)\n return;\n if (!cN(U))\n throw new Error(`Invalid AnnotationEditor mode: ${U}`);\n if (!this.pdfDocument)\n return;\n U === rU.STAMP && ((F = n(this, Q0)) == null || F.loadModel(\"altText\"));\n const {\n eventBus: t\n } = this, Z = () => {\n h(this, f, Ia).call(this), e(this, fd, U), n(this, vU).updateMode(U, l, d), t.dispatch(\"annotationeditormodechanged\", {\n source: this,\n mode: U\n });\n };\n if (U === rU.NONE || n(this, fd) === rU.NONE) {\n const c = U !== rU.NONE;\n c || this.pdfDocument.annotationStorage.resetModifiedIds();\n for (const a of this._pages)\n a.toggleEditingMode(c);\n const Q = h(this, f, db).call(this);\n if (c && Q) {\n h(this, f, Ia).call(this), e(this, a0, new AbortController());\n const a = AbortSignal.any([n(this, EZ).signal, n(this, a0).signal]);\n t._on(\"pagerendered\", ({\n pageNumber: V\n }) => {\n Q.delete(V), Q.size === 0 && e(this, V0, setTimeout(Z, 0));\n }, {\n signal: a\n });\n return;\n }\n }\n Z();\n }\n refresh(U = !1, l = /* @__PURE__ */ Object.create(null)) {\n if (this.pdfDocument) {\n for (const d of this._pages)\n d.update(l);\n n(this, CZ) !== null && (clearTimeout(n(this, CZ)), e(this, CZ, null)), U || this.update();\n }\n }\n}\nDZ = new WeakMap(), GQ = new WeakMap(), TQ = new WeakMap(), fd = new WeakMap(), vU = new WeakMap(), s0 = new WeakMap(), SQ = new WeakMap(), XQ = new WeakMap(), uQ = new WeakMap(), YQ = new WeakMap(), oQ = new WeakMap(), pQ = new WeakMap(), EZ = new WeakMap(), Q0 = new WeakMap(), a0 = new WeakMap(), V0 = new WeakMap(), gc = new WeakMap(), rZ = new WeakMap(), Kc = new WeakMap(), BQ = new WeakMap(), vc = new WeakMap(), W0 = new WeakMap(), CZ = new WeakMap(), Hc = new WeakMap(), f = new WeakSet(), _e = function(U) {\n const l = {\n annotationEditorMode: n(this, fd),\n annotationMode: n(this, s0),\n textLayerMode: n(this, Hc)\n };\n return U && (!U.includes(gQ.COPY) && n(this, Hc) === Ad.ENABLE && (l.textLayerMode = Ad.ENABLE_PERMISSIONS), U.includes(gQ.MODIFY_CONTENTS) || (l.annotationEditorMode = rU.DISABLE), !U.includes(gQ.MODIFY_ANNOTATIONS) && !U.includes(gQ.FILL_INTERACTIVE_FORMS) && n(this, s0) === Et.ENABLE_FORMS && (l.annotationMode = Et.ENABLE)), l;\n}, qe = async function(U) {\n if (document.visibilityState === \"hidden\" || !this.container.offsetParent || this._getVisiblePages().views.length === 0)\n return;\n const l = Promise.withResolvers();\n function d() {\n document.visibilityState === \"hidden\" && l.resolve();\n }\n document.addEventListener(\"visibilitychange\", d, {\n signal: U\n }), await Promise.race([this._onePageRenderedCapability.promise, l.promise]), document.removeEventListener(\"visibilitychange\", d);\n}, $e = function(U, l) {\n const d = document.getSelection(), {\n focusNode: t,\n anchorNode: Z\n } = d;\n if (Z && t && d.containsNode(n(this, rZ))) {\n if (n(this, gc) || U === Ad.ENABLE_PERMISSIONS) {\n l.preventDefault(), l.stopPropagation();\n return;\n }\n e(this, gc, !0);\n const {\n classList: F\n } = this.viewer;\n F.add(\"copyAll\");\n const c = new AbortController();\n window.addEventListener(\"keydown\", (Q) => e(this, Kc, Q.key === \"Escape\"), {\n signal: c.signal\n }), this.getAllText().then(async (Q) => {\n Q !== null && await navigator.clipboard.writeText(Q);\n }).catch((Q) => {\n console.warn(`Something goes wrong when extracting the text: ${Q.message}`);\n }).finally(() => {\n e(this, gc, !1), e(this, Kc, !1), c.abort(), F.remove(\"copyAll\");\n }), l.preventDefault(), l.stopPropagation();\n }\n}, Yn = function() {\n if (this._scrollMode !== al.PAGE)\n throw new Error(\"#ensurePageViewVisible: Invalid scrollMode value.\");\n const U = this._currentPageNumber, l = n(this, W0), d = this.viewer;\n if (d.textContent = \"\", l.pages.length = 0, this._spreadMode === bU.NONE && !this.isInPresentationMode) {\n const t = this._pages[U - 1];\n d.append(t.div), l.pages.push(t);\n } else {\n const t = /* @__PURE__ */ new Set(), Z = this._spreadMode - 1;\n Z === -1 ? t.add(U - 1) : U % 2 !== Z ? (t.add(U - 1), t.add(U)) : (t.add(U - 2), t.add(U - 1));\n const F = document.createElement(\"div\");\n if (F.className = \"spread\", this.isInPresentationMode) {\n const c = document.createElement(\"div\");\n c.className = \"dummyPage\", F.append(c);\n }\n for (const c of t) {\n const Q = this._pages[c];\n Q && (F.append(Q.div), l.pages.push(Q));\n }\n d.append(F);\n }\n l.scrollDown = U >= l.previousPageNumber, l.previousPageNumber = U;\n}, ka = function(U, l = null) {\n const {\n div: d,\n id: t\n } = U;\n if (this._currentPageNumber !== t && this._setCurrentPageNumber(t), this._scrollMode === al.PAGE && (h(this, f, Yn).call(this), this.update()), !l && !this.isInPresentationMode) {\n const Z = d.offsetLeft + d.clientLeft, F = Z + d.clientWidth, {\n scrollLeft: c,\n clientWidth: Q\n } = this.container;\n (this._scrollMode === al.HORIZONTAL || Z < c || F > c + Q) && (l = {\n left: 0,\n top: 0\n });\n }\n Re(d, l), !this._currentScaleValue && this._location && (this._location = null);\n}, lb = function(U) {\n return U === this._currentScale || Math.abs(U - this._currentScale) < 1e-15;\n}, zi = function(U, l, {\n noScroll: d = !1,\n preset: t = !1,\n drawingDelay: Z = -1,\n origin: F = null\n}) {\n if (this._currentScaleValue = l.toString(), h(this, f, lb).call(this, U)) {\n t && this.eventBus.dispatch(\"scalechanging\", {\n source: this,\n scale: U,\n presetValue: l\n });\n return;\n }\n this.viewer.style.setProperty(\"--scale-factor\", U * st.PDF_TO_CSS_UNITS);\n const c = Z >= 0 && Z < 1e3;\n this.refresh(!0, {\n scale: U,\n drawingDelay: c ? Z : -1\n }), c && e(this, CZ, setTimeout(() => {\n e(this, CZ, null), this.refresh();\n }, Z));\n const Q = this._currentScale;\n if (this._currentScale = U, !d) {\n let a = this._currentPageNumber, V;\n if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode) && (a = this._location.pageNumber, V = [null, {\n name: \"XYZ\"\n }, this._location.left, this._location.top, null]), this.scrollPageIntoView({\n pageNumber: a,\n destArray: V,\n allowNegativeOffset: !0\n }), Array.isArray(F)) {\n const W = U / Q - 1, [i, R] = this.containerTopLeft;\n this.container.scrollLeft += (F[0] - R) * W, this.container.scrollTop += (F[1] - i) * W;\n }\n }\n this.eventBus.dispatch(\"scalechanging\", {\n source: this,\n scale: U,\n presetValue: t ? l : void 0\n }), this.defaultRenderingQueue && this.update();\n}, Ub = function() {\n return this._spreadMode !== bU.NONE && this._scrollMode !== al.HORIZONTAL ? 2 : 1;\n}, ft = function(U, l) {\n let d = parseFloat(U);\n if (d > 0)\n l.preset = !1, h(this, f, zi).call(this, d, U, l);\n else {\n const t = this._pages[this._currentPageNumber - 1];\n if (!t)\n return;\n let Z = pR, F = BR;\n this.isInPresentationMode ? (Z = F = 4, this._spreadMode !== bU.NONE && (Z *= 2)) : this.removePageBorders ? Z = F = 0 : this._scrollMode === al.HORIZONTAL && ([Z, F] = [F, Z]);\n const c = (this.container.clientWidth - Z) / t.width * t.scale / n(this, f, Ub), Q = (this.container.clientHeight - F) / t.height * t.scale;\n switch (U) {\n case \"page-actual\":\n d = 1;\n break;\n case \"page-width\":\n d = c;\n break;\n case \"page-height\":\n d = Q;\n break;\n case \"page-fit\":\n d = Math.min(c, Q);\n break;\n case \"auto\":\n const a = zR(t) ? c : Math.min(Q, c);\n d = Math.min(p2, a);\n break;\n default:\n console.error(`#setScale: \"${U}\" is an unknown zoom value.`);\n return;\n }\n l.preset = !0, h(this, f, zi).call(this, d, U, l);\n }\n}, ki = function() {\n const U = this._pages[this._currentPageNumber - 1];\n this.isInPresentationMode && h(this, f, ft).call(this, this._currentScaleValue, {\n noScroll: !0\n }), h(this, f, ka).call(this, U);\n}, db = function() {\n const U = this._getVisiblePages(), l = [], {\n ids: d,\n views: t\n } = U;\n for (const Z of t) {\n const {\n view: F\n } = Z;\n if (!F.hasEditableAnnotations()) {\n d.delete(F.id);\n continue;\n }\n l.push(Z);\n }\n return l.length === 0 ? null : (this.renderingQueue.renderHighestPriority({\n first: l[0],\n last: l.at(-1),\n views: l,\n ids: d\n }), d);\n}, tb = async function(U) {\n if (U.pdfPage)\n return U.pdfPage;\n try {\n const l = await this.pdfDocument.getPage(U.id);\n return U.pdfPage || U.setPdfPage(l), l;\n } catch (l) {\n return console.error(\"Unable to get page for page view\", l), null;\n }\n}, Zb = function(U) {\n var l, d;\n if (((l = U.first) == null ? void 0 : l.id) === 1)\n return !0;\n if (((d = U.last) == null ? void 0 : d.id) === this.pagesCount)\n return !1;\n switch (this._scrollMode) {\n case al.PAGE:\n return n(this, W0).scrollDown;\n case al.HORIZONTAL:\n return this.scroll.right;\n }\n return this.scroll.down;\n}, Ii = function(U = this.container.clientHeight) {\n U !== n(this, BQ) && (e(this, BQ, U), I2.setProperty(\"--viewer-container-height\", `${U}px`));\n}, Fb = function(U) {\n for (const l of U)\n if (l.target === this.container) {\n h(this, f, Ii).call(this, Math.floor(l.borderBoxSize[0].blockSize)), e(this, SQ, null);\n break;\n }\n}, Ia = function() {\n var U;\n (U = n(this, a0)) == null || U.abort(), e(this, a0, null), n(this, V0) !== null && (clearTimeout(n(this, V0)), e(this, V0, null));\n};\nclass zJ extends Ae {\n _resetView() {\n super._resetView(), this._scrollMode = al.PAGE, this._spreadMode = bU.NONE;\n }\n set scrollMode(U) {\n }\n _updateScrollMode() {\n }\n set spreadMode(U) {\n }\n _updateSpreadMode() {\n }\n}\nBl.AnnotationLayerBuilder;\nBl.DownloadManager;\nBl.EventBus;\nBl.FindState;\nBl.GenericL10n;\nBl.LinkTarget;\nBl.PDFFindController;\nBl.PDFHistory;\nvar kJ = Bl.PDFLinkService;\nBl.PDFPageView;\nBl.PDFScriptingManager;\nBl.PDFSinglePageViewer;\nBl.PDFViewer;\nBl.ProgressBar;\nBl.RenderingStates;\nBl.ScrollMode;\nBl.SimpleLinkService;\nBl.SpreadMode;\nBl.StructTreeLayerBuilder;\nBl.TextLayerBuilder;\nBl.XfaLayerBuilder;\nBl.parseQueryString;\nconst IJ = [\"id\"], DJ = [\"id\"], EJ = /* @__PURE__ */ WN(\"canvas\", null, null, -1), rJ = {\n key: 0,\n class: \"textLayer\"\n}, CJ = {\n key: 1,\n class: \"annotationLayer\"\n}, wJ = /* @__PURE__ */ ab({\n __name: \"VuePdfEmbed\",\n props: {\n annotationLayer: { type: Boolean },\n height: {},\n id: {},\n imageResourcesPath: {},\n page: {},\n rotation: { default: 0 },\n scale: { default: 1 },\n source: {},\n textLayer: { type: Boolean },\n width: {}\n },\n emits: [\"internal-link-clicked\", \"loaded\", \"loading-failed\", \"password-requested\", \"progress\", \"rendered\", \"rendering-failed\"],\n setup(s, { expose: U, emit: l }) {\n const d = s, t = Ea([]), Z = Vb([]), F = Ea(null);\n let c = null;\n const { doc: Q } = We({\n onError: (M) => {\n t.value = [], l(\"loading-failed\", M);\n },\n onPasswordRequest({ callback: M, isWrongPassword: G }) {\n l(\"password-requested\", { callback: M, isWrongPassword: G });\n },\n onProgress: (M) => {\n l(\"progress\", M);\n },\n source: Wb(d, \"source\")\n }), a = ib(() => {\n if (!Q.value || !d.annotationLayer)\n return null;\n const M = new kJ();\n return M.setDocument(Q.value), M.setViewer({\n scrollPageIntoView: ({ pageNumber: G }) => {\n l(\"internal-link-clicked\", G);\n }\n }), M;\n }), V = async (M) => {\n if (!Q.value)\n return;\n const G = await Q.value.getData(), T = await Q.value.getMetadata(), u = (\n // @ts-expect-error: contentDispositionFilename is not typed\n M ?? T.contentDispositionFilename ?? \"\"\n );\n X2(G, u);\n }, W = (M) => {\n let G, T;\n return d.height && !d.width ? (T = d.height, G = T / M) : (G = d.width ?? F.value.clientWidth, T = G * M), [G, T];\n }, i = async (M = 300, G = \"\", T = !1) => {\n var S, p, L;\n if (!Q.value)\n return;\n const u = M / 72, X = 96 / 72;\n let Y, o, y;\n try {\n Y = window.document.createElement(\"div\"), Y.style.display = \"none\", window.document.body.appendChild(Y), o = await S2(Y);\n const I = d.page && !T ? [d.page] : [...Array(Q.value.numPages + 1).keys()].slice(1);\n await Promise.all(\n I.map(async (D, r) => {\n const w = await Q.value.getPage(D), B = w.getViewport({\n scale: 1,\n rotation: 0\n });\n if (r === 0) {\n const Rl = B.width * u / X, Nl = B.height * u / X;\n T2(o, Rl, Nl);\n }\n const E = window.document.createElement(\"canvas\");\n E.width = B.width * u, E.height = B.height * u, Y.appendChild(E);\n const g = E.cloneNode();\n o.contentWindow.document.body.appendChild(g), await w.render({\n canvasContext: E.getContext(\"2d\"),\n intent: \"print\",\n transform: [u, 0, 0, u, 0, 0],\n viewport: B\n }).promise, g.getContext(\"2d\").drawImage(E, 0, 0);\n })\n ), G && (y = window.document.title, window.document.title = G), (S = o.contentWindow) == null || S.focus(), (p = o.contentWindow) == null || p.print();\n } finally {\n y && (window.document.title = y), pV(Y), (L = Y.parentNode) == null || L.removeChild(Y);\n }\n }, R = async () => {\n if (!(!Q.value || c != null && c.isAborted))\n try {\n t.value = d.page ? [d.page] : [...Array(Q.value.numPages + 1).keys()].slice(1), Z.value = Array(t.value.length).fill(1), await Promise.all(\n t.value.map(async (M, G) => {\n const T = await Q.value.getPage(M);\n if (c != null && c.isAborted)\n return;\n const u = ((d.rotation % 90 === 0 ? d.rotation : 0) + T.rotate) % 360, [X, Y, o] = Array.from(\n F.value.getElementsByClassName(\"vue-pdf-embed__page\")[G].children\n ), y = !!(u / 90 % 2), S = T.view[2] - T.view[0], p = T.view[3] - T.view[1], [L, I] = W(\n y ? S / p : p / S\n ), D = `${Math.floor(L)}px`, r = `${Math.floor(I)}px`, B = L / (y ? p : S), E = T.getViewport({\n scale: B,\n rotation: u\n });\n Z.value[G] = B, X.style.display = \"block\", X.style.width = D, X.style.height = r;\n const g = [\n N(\n T,\n E.clone({\n scale: E.scale * window.devicePixelRatio * d.scale\n }),\n X\n )\n ];\n return d.textLayer && g.push(\n J(\n T,\n E.clone({\n dontFlip: !0\n }),\n Y\n )\n ), d.annotationLayer && g.push(\n b(\n T,\n E.clone({\n dontFlip: !0\n }),\n o || Y\n )\n ), Promise.all(g);\n })\n ), c != null && c.isAborted || l(\"rendered\");\n } catch (M) {\n t.value = [], Z.value = [], c != null && c.isAborted || l(\"rendering-failed\", M);\n }\n }, N = async (M, G, T) => {\n T.width = G.width, T.height = G.height, await M.render({\n canvasContext: T.getContext(\"2d\"),\n viewport: G\n }).promise;\n }, b = async (M, G, T) => {\n uR(T), new b2({\n accessibilityManager: null,\n annotationCanvasMap: null,\n annotationEditorUIManager: null,\n div: T,\n page: M,\n structTreeLayer: null,\n viewport: G\n }).render({\n annotations: await M.getAnnotations(),\n div: T,\n imageResourcesPath: d.imageResourcesPath,\n linkService: a.value,\n page: M,\n renderForms: !1,\n viewport: G\n });\n }, J = async (M, G, T) => {\n uR(T), new M2({\n container: T,\n textContentSource: await M.getTextContent(),\n viewport: G\n }).render();\n };\n return CV(\n Q,\n (M) => {\n M && l(\"loaded\", M);\n },\n { immediate: !0 }\n ), CV(\n () => [\n Q.value,\n d.annotationLayer,\n d.height,\n d.imageResourcesPath,\n d.page,\n d.rotation,\n d.scale,\n d.textLayer,\n d.width\n ],\n async ([M]) => {\n M && (c && (c.isAborted = !0, await c.promise), pV(F.value), c = {\n isAborted: !1,\n promise: R()\n }, await c.promise, c = null);\n },\n { immediate: !0 }\n ), VN(() => {\n pV(F.value);\n }), U({\n doc: Q,\n download: V,\n print: i\n }), (M, G) => ($c(), ln(\"div\", {\n id: M.id,\n ref_key: \"root\",\n ref: F,\n class: \"vue-pdf-embed\"\n }, [\n ($c(!0), ln(Rb, null, Nb(t.value, (T, u) => ($c(), ln(\"div\", { key: T }, [\n tR(M.$slots, \"before-page\", { page: T }),\n WN(\"div\", {\n id: M.id && `${M.id}-${T}`,\n class: \"vue-pdf-embed__page\",\n style: hb({\n \"--scale-factor\": Z.value[u],\n position: \"relative\"\n })\n }, [\n EJ,\n M.textLayer ? ($c(), ln(\"div\", rJ)) : ZR(\"\", !0),\n M.annotationLayer ? ($c(), ln(\"div\", CJ)) : ZR(\"\", !0)\n ], 12, DJ),\n tR(M.$slots, \"after-page\", { page: T })\n ]))), 128))\n ], 8, IJ));\n }\n});\nwindow != null && window.Vue && (window.VuePdfEmbed = wJ, window.useVuePdfEmbed = We);\nwQ != null && wQ.workerSrc || (wQ.workerSrc = G2);\nconst xJ = {}, Fn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: xJ }, Symbol.toStringTag, { value: \"Module\" }));\nvar cn = {\n a: 7,\n c: 6,\n h: 1,\n l: 2,\n m: 2,\n q: 4,\n s: 4,\n t: 2,\n v: 1,\n z: 0\n}, jJ = /([astvzqmhlc])([^astvzqmhlc]*)/gi, OJ = /-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/gi;\nfunction gJ(s) {\n const U = s.match(OJ);\n return U ? U.map(Number) : [];\n}\nfunction cb(s) {\n const U = [], l = String(s).trim();\n return l[0] !== \"M\" && l[0] !== \"m\" || l.replace(jJ, (d, t, Z) => {\n const F = gJ(Z);\n let c = t.toLowerCase(), Q = t;\n if (c === \"m\" && F.length > 2 && (U.push([Q, ...F.splice(0, 2)]), c = \"l\", Q = Q === \"m\" ? \"l\" : \"L\"), F.length < cn[c])\n return \"\";\n for (U.push([Q, ...F.splice(0, cn[c])]); F.length >= cn[c] && F.length && cn[c]; )\n U.push([Q, ...F.splice(0, cn[c])]);\n return \"\";\n }), U;\n}\nfunction nN(s, U) {\n const l = s.x * Math.cos(U) - s.y * Math.sin(U), d = s.y * Math.cos(U) + s.x * Math.sin(U);\n s.x = l, s.y = d;\n}\nfunction KJ(s, U, l) {\n s.x += U, s.y += l;\n}\nfunction sN(s, U) {\n s.x *= U, s.y *= U;\n}\nvar Da = class Di {\n constructor(U) {\n this.commands = [], U && U instanceof Di ? this.commands.push(...U.commands) : U && (this.commands = cb(U));\n }\n addPath(U) {\n U && U instanceof Di && this.commands.push(...U.commands);\n }\n moveTo(U, l) {\n this.commands.push([\"M\", U, l]);\n }\n lineTo(U, l) {\n this.commands.push([\"L\", U, l]);\n }\n arc(U, l, d, t, Z, F) {\n this.commands.push([\"AC\", U, l, d, t, Z, !!F]);\n }\n arcTo(U, l, d, t, Z) {\n this.commands.push([\"AT\", U, l, d, t, Z]);\n }\n ellipse(U, l, d, t, Z, F, c, Q) {\n this.commands.push([\"E\", U, l, d, t, Z, F, c, !!Q]);\n }\n closePath() {\n this.commands.push([\"Z\"]);\n }\n bezierCurveTo(U, l, d, t, Z, F) {\n this.commands.push([\"C\", U, l, d, t, Z, F]);\n }\n quadraticCurveTo(U, l, d, t) {\n this.commands.push([\"Q\", U, l, d, t]);\n }\n rect(U, l, d, t) {\n this.commands.push([\"R\", U, l, d, t]);\n }\n roundRect(U, l, d, t, Z) {\n typeof Z > \"u\" ? this.commands.push([\"RR\", U, l, d, t, 0]) : this.commands.push([\"RR\", U, l, d, t, Z]);\n }\n};\nfunction on(s, U) {\n let l = 0, d = 0, t, Z, F, c, Q, a, V, W, i, R, N, b, J, M, G, T, u, X, Y, o, y, S = null, p = null, L = null, I = null, D = null, r = null;\n s.beginPath();\n for (let w = 0; w < U.length; ++w) {\n X = U[w][0], X !== \"S\" && X !== \"s\" && X !== \"C\" && X !== \"c\" && (S = null, p = null), X !== \"T\" && X !== \"t\" && X !== \"Q\" && X !== \"q\" && (L = null, I = null);\n let B;\n switch (X) {\n case \"m\":\n case \"M\":\n B = U[w], X === \"m\" ? (l += B[1], d += B[2]) : (l = B[1], d = B[2]), (X === \"M\" || !D) && (D = { x: l, y: d }), s.moveTo(l, d);\n break;\n case \"l\":\n B = U[w], l += B[1], d += B[2], s.lineTo(l, d);\n break;\n case \"L\":\n B = U[w], l = B[1], d = B[2], s.lineTo(l, d);\n break;\n case \"H\":\n B = U[w], l = B[1], s.lineTo(l, d);\n break;\n case \"h\":\n B = U[w], l += B[1], s.lineTo(l, d);\n break;\n case \"V\":\n B = U[w], d = B[1], s.lineTo(l, d);\n break;\n case \"v\":\n B = U[w], d += B[1], s.lineTo(l, d);\n break;\n case \"a\":\n case \"A\":\n if (B = U[w], r === null)\n throw new Error(\"This should never happen\");\n X === \"a\" ? (l += B[6], d += B[7]) : (l = B[6], d = B[7]), M = B[1], G = B[2], V = B[3] * Math.PI / 180, F = !!B[4], c = !!B[5], Q = { x: l, y: d }, a = {\n x: (r.x - Q.x) / 2,\n y: (r.y - Q.y) / 2\n }, nN(a, -V), W = a.x * a.x / (M * M) + a.y * a.y / (G * G), W > 1 && (W = Math.sqrt(W), M *= W, G *= W), Y = {\n x: M * a.y / G,\n y: -(G * a.x) / M\n }, i = M * M * G * G, R = M * M * a.y * a.y + G * G * a.x * a.x, c !== F ? sN(Y, Math.sqrt((i - R) / R) || 0) : sN(Y, -Math.sqrt((i - R) / R) || 0), Z = Math.atan2((a.y - Y.y) / G, (a.x - Y.x) / M), t = Math.atan2(-(a.y + Y.y) / G, -(a.x + Y.x) / M), nN(Y, V), KJ(Y, (Q.x + r.x) / 2, (Q.y + r.y) / 2), s.save(), s.translate(Y.x, Y.y), s.rotate(V), s.scale(M, G), s.arc(0, 0, 1, Z, t, !c), s.restore();\n break;\n case \"C\":\n B = U[w], S = B[3], p = B[4], l = B[5], d = B[6], s.bezierCurveTo(B[1], B[2], S, p, l, d);\n break;\n case \"c\":\n B = U[w], s.bezierCurveTo(B[1] + l, B[2] + d, B[3] + l, B[4] + d, B[5] + l, B[6] + d), S = B[3] + l, p = B[4] + d, l += B[5], d += B[6];\n break;\n case \"S\":\n B = U[w], (S === null || p === null) && (S = l, p = d), s.bezierCurveTo(2 * l - S, 2 * d - p, B[1], B[2], B[3], B[4]), S = B[1], p = B[2], l = B[3], d = B[4];\n break;\n case \"s\":\n B = U[w], (S === null || p === null) && (S = l, p = d), s.bezierCurveTo(2 * l - S, 2 * d - p, B[1] + l, B[2] + d, B[3] + l, B[4] + d), S = B[1] + l, p = B[2] + d, l += B[3], d += B[4];\n break;\n case \"Q\":\n B = U[w], L = B[1], I = B[2], l = B[3], d = B[4], s.quadraticCurveTo(L, I, l, d);\n break;\n case \"q\":\n B = U[w], L = B[1] + l, I = B[2] + d, l += B[3], d += B[4], s.quadraticCurveTo(L, I, l, d);\n break;\n case \"T\":\n B = U[w], (L === null || I === null) && (L = l, I = d), L = 2 * l - L, I = 2 * d - I, l = B[1], d = B[2], s.quadraticCurveTo(L, I, l, d);\n break;\n case \"t\":\n B = U[w], (L === null || I === null) && (L = l, I = d), L = 2 * l - L, I = 2 * d - I, l += B[1], d += B[2], s.quadraticCurveTo(L, I, l, d);\n break;\n case \"z\":\n case \"Z\":\n D && (l = D.x, d = D.y), D = null, s.closePath();\n break;\n case \"AC\":\n B = U[w], l = B[1], d = B[2], J = B[3], Z = B[4], t = B[5], o = B[6], s.arc(l, d, J, Z, t, o);\n break;\n case \"AT\":\n B = U[w], N = B[1], b = B[2], l = B[3], d = B[4], J = B[5], s.arcTo(N, b, l, d, J);\n break;\n case \"E\":\n B = U[w], l = B[1], d = B[2], M = B[3], G = B[4], V = B[5], Z = B[6], t = B[7], o = B[8], s.save(), s.translate(l, d), s.rotate(V), s.scale(M, G), s.arc(0, 0, 1, Z, t, o), s.restore();\n break;\n case \"R\":\n B = U[w], l = B[1], d = B[2], T = B[3], u = B[4], D = { x: l, y: d }, s.rect(l, d, T, u);\n break;\n case \"RR\":\n B = U[w], l = B[1], d = B[2], T = B[3], u = B[4], y = B[5], D = { x: l, y: d }, s.roundRect(l, d, T, u, y);\n break;\n default:\n throw new Error(`Invalid path command: ${X}`);\n }\n r ? (r.x = l, r.y = d) : r = { x: l, y: d };\n }\n}\nfunction _i(s, U, l, d, t = 0) {\n if (typeof t == \"number\" && (t = [t]), Array.isArray(t)) {\n if (t.length === 0 || t.length > 4)\n throw new RangeError(\n `Failed to execute 'roundRect' on '${this.constructor.name}': ${t.length} radii provided. Between one and four radii are necessary.`\n );\n t.forEach((V) => {\n if (V < 0)\n throw new RangeError(\n `Failed to execute 'roundRect' on '${this.constructor.name}': Radius value ${V} is negative.`\n );\n });\n } else\n return;\n if (t.length === 1 && t[0] === 0) {\n this.rect(s, U, l, d);\n return;\n }\n const Z = Math.min(l, d) / 2, F = Math.min(Z, t[0]);\n let c = F, Q = F, a = F;\n t.length === 2 && (c = Math.min(Z, t[1]), a = c), t.length === 3 && (c = Math.min(Z, t[1]), a = c, Q = Math.min(Z, t[2])), t.length === 4 && (c = Math.min(Z, t[1]), Q = Math.min(Z, t[2]), a = Math.min(Z, t[3])), this.moveTo(s, U + d - a), this.arcTo(s, U, s + F, U, F), this.arcTo(s + l, U, s + l, U + c, c), this.arcTo(s + l, U + d, s + l - Q, U + d, Q), this.arcTo(s, U + d, s, U + d - a, a), this.moveTo(s, U);\n}\nfunction vJ(s) {\n if (!s) return;\n const U = s.prototype.clip, l = s.prototype.fill, d = s.prototype.stroke, t = s.prototype.isPointInPath;\n s.prototype.clip = function(...F) {\n if (F[0] instanceof Da) {\n const Q = F[0], a = F[1] || \"nonzero\";\n return on(this, Q.commands), U.apply(this, [a]);\n }\n const c = F[0] || \"nonzero\";\n return U.apply(this, [c]);\n }, s.prototype.fill = function(...F) {\n if (F[0] instanceof Da) {\n const Q = F[0], a = F[1] || \"nonzero\";\n return on(this, Q.commands), l.apply(this, [a]);\n }\n const c = F[0] || \"nonzero\";\n return l.apply(this, [c]);\n }, s.prototype.stroke = function(F) {\n F && on(this, F.commands), d.apply(this);\n }, s.prototype.isPointInPath = function(...F) {\n if (F[0] instanceof Da) {\n const c = F[0], Q = F[1], a = F[2], V = F[3] || \"nonzero\";\n return on(this, c.commands), t.apply(this, [Q, a, V]);\n }\n return t.apply(this, F);\n };\n}\nfunction HJ(s) {\n s && !s.prototype.roundRect && (s.prototype.roundRect = _i);\n}\nfunction PJ(s) {\n s && !s.prototype.roundRect && (s.prototype.roundRect = _i);\n}\nconst fJ = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, Path2D: Da, applyPath2DToCanvasRenderingContext: vJ, applyRoundRectToCanvasRenderingContext2D: HJ, applyRoundRectToPath2D: PJ, buildPath: on, parsePath: cb, roundRect: _i }, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n wJ as default,\n We as useVuePdfEmbed\n};\n","\n","\n\n\n","\n\n"],"names":["auth_store","token","store","axios","api","response","error","reactive","ThemeChanger","color","body","errorMessage","ref","props","__props","router","useRouter","submit","FormData","form$","data","apiUrl","message","isForgetPassword","formSubmit","authorizationHeader","emit","__emit","onMounted","viewId","route","useRoute","FOCUSABLE_ELEMENT_SELECTORS","isVisible","element","obtainAllFocusableElements","item","isFocusable","triggerEvent","elm","name","opts","eventName","evt","isLeaf","el","getSibling","distance","elClass","parentNode","siblings","index","focusNode","composeEventHandlers","theirsHandler","oursHandler","checkForDefaultPrevented","event","shouldPrevent","whenMouse","handler","e","__defProp$9","__defProps$6","__getOwnPropDescs$6","__getOwnPropSymbols$b","__hasOwnProp$b","__propIsEnum$b","__defNormalProp$9","obj","key","value","__spreadValues$9","a","b","prop","__spreadProps$6","computedEager","fn","options","_a","result","shallowRef","watchEffect","readonly","isClient","isDef","val","isFunction","isString","noop","isIOS","resolveUnref","r","unref","createFilterWrapper","filter","wrapper","args","resolve","reject","debounceFilter","ms","timer","maxTimer","lastRejector","_clearTimeout","timer2","invoke","duration","maxDuration","throttleFilter","trailing","leading","rejectOnCancel","lastExec","isLeading","lastValue","clear","_invoke","elapsed","identity","arg","computedWithControl","source","v","track","trigger","dirty","update","watch","get","set","customRef","_track","_trigger","v2","tryOnScopeDispose","getCurrentScope","onScopeDispose","useDebounceFn","refDebounced","debounced","updater","useThrottleFn","tryOnMounted","sync","getCurrentInstance","nextTick","useTimeoutFn","cb","interval","immediate","isPending","stop","start","unrefElement","elRef","plain","defaultWindow","defaultDocument","useEventListener","target","events","listeners","cleanups","cleanup","register","listener","options2","stopWatch","_iOSWorkaround","onClickOutside","window","ignore","capture","detectIframe","shouldListen","shouldIgnore","target2","useActiveElement","document","activeElement","useSupported","callback","isSupported","cloneFnJSON","_global","globalKey","useCssVar","initialValue","variable","computed","prop2","useDocumentVisibility","visibility","__getOwnPropSymbols$g","__hasOwnProp$g","__propIsEnum$g","__objRest$2","exclude","useResizeObserver","observerOptions","observer","useElementBounding","reset","windowResize","windowScroll","height","bottom","left","right","top","width","x","y","rect","ele","__getOwnPropSymbols$8","__hasOwnProp$8","__propIsEnum$8","__objRest$1","useMutationObserver","mutationOptions","SwipeDirection","SwipeDirection2","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","_TransitionPresets","useVModel","_b","_c","clone","passive","deep","defaultValue","vm","_emit","cloneFn","getValue","proxy","useWindowFocus","focused","useWindowSize","initialWidth","initialHeight","listenOrientation","includeScrollbar","isFirefox","easeInOutCubic","c","d","cc","freeGlobal","freeSelf","root","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","arrayMap","array","iteratee","length","isArray","INFINITY","symbolProto","symbolToString","baseToString","reWhitespace","trimmedEndIndex","string","reTrimStart","baseTrim","isObject","type","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","asyncTag","funcTag","genTag","proxyTag","coreJsData","maskSrcKey","uid","isMasked","func","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","pattern","object","getNative","WeakMap","objectCreate","baseCreate","proto","apply","thisArg","copyArray","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","count","lastCalled","stamp","remaining","constant","defineProperty","baseSetToString","setToString","arrayEach","MAX_SAFE_INTEGER","reIsUint","isIndex","baseAssignValue","eq","assignValue","objValue","copyObject","customizer","isNew","newValue","nativeMax","overRest","transform","otherArgs","baseRest","isLength","isArrayLike","isIterateeCall","createAssigner","assigner","sources","guard","isPrototype","Ctor","baseTimes","n","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","nodeUtil","types","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","overArg","nativeKeys","baseKeys","keys","nativeKeysIn","baseKeysIn","isProto","keysIn","reIsDeepProp","reIsPlainProp","isKey","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","hashHas","hashSet","Hash","entries","entry","listCacheClear","assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","mapCacheClear","isKeyable","getMapData","map","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","size","MapCache","FUNC_ERROR_TEXT","memoize","resolver","memoized","cache","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","match","number","quote","subString","toString","castPath","toKey","baseGet","path","arrayPush","values","offset","spreadableSymbol","isFlattenable","baseFlatten","depth","predicate","isStrict","flatten","flatRest","getPrototype","objectCtorString","isPlainObject","stackClear","stackDelete","stackGet","stackHas","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","baseAssign","baseAssignIn","allocUnsafe","cloneBuffer","buffer","isDeep","arrayFilter","resIndex","stubArray","nativeGetSymbols","getSymbols","symbol","copySymbols","getSymbolsIn","copySymbolsIn","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","getAllKeysIn","DataView","Promise","Set","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","initCloneArray","Uint8Array","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","reFlags","cloneRegExp","regexp","symbolValueOf","cloneSymbol","cloneTypedArray","typedArray","initCloneByTag","initCloneObject","baseIsMap","nodeIsMap","isMap","baseIsSet","nodeIsSet","isSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","bitmask","stack","isFlat","isFull","isFunc","stacked","subValue","cloneDeep","setCacheAdd","setCacheHas","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","equalByTag","convert","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","baseIsMatch","matchData","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","baseHasIn","hasPath","hasFunc","hasIn","baseMatchesProperty","baseProperty","basePropertyDeep","property","baseIteratee","createBaseFor","fromRight","iterable","baseFor","baseForOwn","createBaseEach","eachFunc","collection","baseEach","now","nativeMin","debounce","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","time","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","isInvoking","assignMergeValue","isArrayLikeObject","safeGet","toPlainObject","baseMergeDeep","srcIndex","mergeFunc","isCommon","isTyped","baseMerge","baseMap","flatMap","fromPairs","pair","isEqual","isNil","isUndefined","merge","baseSet","nested","basePickBy","paths","basePick","pick","isBoolean","isNumber","isEmpty","isElement","isPropAbsent","isStringNumber","isWindow","rAF","cAF","handle","escapeStringRegexp","capitalize","str","capitalize$1","keysOf","arr","entriesOf","getProp","ElementPlusError","m","throwError","scope","debugWarn","classNameToArray","cls","hasClass","addClass","removeClass","getStyle","styleName","camelize","style","addUnit","defaultUnit","isScroll","isVertical","overflow","s","getScrollContainer","parent","scrollBarWidth","getScrollBarWidth","namespace","outer","widthNoScroll","inner","widthWithScroll","scrollIntoView","container","selected","offsetParents","pointer","prev","curr","viewRectTop","viewRectBottom","animateScrollTo","from","to","startTime","scroll","nextScrollTop","getScrollElement","getScrollTop","epPropKey","definePropType","isEpProp","buildProp","required","validator","epProp","valid","allowedValues","hasOwn","allowValuesText","warn","buildProps","option","iconPropType","CloseComponents","Close","TypeComponents","SuccessFilled","InfoFilled","WarningFilled","CircleCloseFilled","TypeComponentsMap","ValidateComponentsMap","Loading","CircleCheck","CircleClose","withInstall","main","extra","app","comp","withInstallFunction","withInstallDirective","directive","withNoopInstall","component","NOOP","composeRefs","refs","EVENT_CODE","UPDATE_MODEL_EVENT","CHANGE_EVENT","INPUT_EVENT","componentSizes","isValidComponentSize","PatchFlags","PatchFlags2","isFragment","node","isVNode","Fragment","isComment","Comment","isValidElementNode","getNormalizedProps","raw","ensureOnlyChild","children","flattedChildren","vNodes","child","isKorean","text","mutable","DEFAULT_EXCLUDE_KEYS","LISTENER_PREFIX","useAttrs","params","excludeListeners","excludeKeys","allExcludeKeys","instance","useDeprecated","replacement","version","condition","useDraggable","targetRef","dragRef","draggable","onMousedown","downX","downY","offsetX","offsetY","targetRect","targetLeft","targetTop","targetWidth","targetHeight","clientWidth","clientHeight","minLeft","minTop","maxLeft","maxTop","onMousemove","e2","moveX","moveY","onMouseup","onDraggable","offDraggable","resetPosition","onBeforeUnmount","English","buildTranslator","locale","translate","_","buildLocaleContext","lang","localeRef","isRef","localeContextKey","useLocale","localeOverrides","inject","defaultNamespace","statePrefix","_bem","block","blockSuffix","modifier","namespaceContextKey","useGetDerivedNamespace","namespaceOverrides","derivedNamespace","useNamespace","state","styles","useLockscreen","ns","hiddenCls","withoutHiddenClass","bodyWidth","bodyHasOverflow","bodyOverflowY","_prop","_event","createModelToggleComposable","updateEventKey","updateEventKeyRaw","useModelToggleEmits2","useModelToggleProps2","indicator","toggleReason","shouldHideWhenRouteChanges","shouldProceed","onShow","onHide","hasUpdateHandler","isModelBindingAbsent","doShow","doHide","show","shouldEmit","hide","onChange","toggle","useProp","E","R","W","P","me","G","U","J","Xe","je","K","Ye","De","Ee","Ge","Je","Ke","Qe","Ze","et","tt","nt","rt","ot","C","H","Q","B","Pe","Mt","o","i","Rt","f","Ae","q","X","ve","Z","ee","ke","it","N","Wt","I","ge","at","Bt","se","Le","fe","St","st","ft","ct","Tt","Ht","u","l","p","g","$","w","O","j","Ct","pt","te","qt","Vt","ut","A","k","D","S","L","Nt","Me","ye","It","Re","_t","be","zt","lt","We","Be","Ft","Ut","Se","dt","ce","Te","Xt","ht","Yt","Gt","mt","ne","Jt","Kt","Qt","z","V","re","oe","M","T","pe","ue","xe","de","ae","Y","ie","le","vt","gt","yt","Zt","bt","en","tn","wt","nn","He","rn","on","jt","Dt","Oe","Et","Ce","Pt","At","qe","Ve","kt","Lt","F","he","Ne","Ie","$e","_e","ze","Fe","Ue","xt","an","sn","cn","pn","un","ln","dn","Ot","$t","we","mn","gn","yn","usePopper","referenceElementRef","popperElementRef","stateUpdater","derivedState","deriveState","states","onFirstUpdate","placement","strategy","modifiers","instanceRef","destroy","newOptions","referenceElement","popperElement","createPopper","elements","attributes","useSameTarget","handleClick","mousedownTarget","mouseupTarget","useTimeout","timeoutHandle","registerTimeout","delay","cancelTimeout","defaultIdInjection","ID_INJECTION_KEY","useIdInjection","useId","deterministicId","idInjection","registeredEscapeHandlers","cachedHandler","registeredHandler","useEscapeKeydown","cachedContainer","usePopperContainerId","id","selector","createContainer","usePopperContainer","onBeforeMount","useDelayedToggleProps","useDelayedToggle","showAfter","hideAfter","autoClose","open","close","registerTimeoutForAutoClose","cancelTimeoutForAutoClose","_autoClose","FORWARD_REF_INJECTION_KEY","useForwardRef","forwardRef","provide","useForwardRefDirective","setForwardRef","initial","zIndex","defaultInitialZIndex","ZINDEX_INJECTION_KEY","zIndexContextKey","useZIndex","zIndexOverrides","increasingInjection","zIndexInjection","initialZIndex","zIndexFromInjection","currentZIndex","nextZIndex","useCursor","input","selectionInfo","recordCursor","selectionStart","selectionEnd","beforeTxt","afterTxt","setCursor","startPos","beforeLastChar","newIndex","getOrderedChildren","childComponentName","useOrderedChildren","orderedChildren","children2","useSizeProp","SIZE_INJECTION_KEY","useGlobalSize","injectedSize","useFocusController","beforeFocus","afterFocus","beforeBlur","afterBlur","wrapperRef","isFocused","handleFocus","handleBlur","useComposition","afterComposition","isComposing","handleCompositionStart","handleCompositionUpdate","lastCharacter","handleCompositionEnd","emptyValuesContextKey","DEFAULT_EMPTY_VALUES","DEFAULT_VALUE_ON_CLEAR","useEmptyValuesProps","useEmptyValues","config","emptyValues","valueOnClear","isEmptyValue","ariaProps","useAriaProps","arias","configProviderContextKey","globalConfig","useGlobalConfig","useGlobalComponentSettings","sizeFallback","provideGlobalConfig","global","inSetup","oldConfig","provideFn","context","cfg","mergeConfig","configProviderProps","messageConfig","ConfigProvider","defineComponent","slots","renderSlot","_export_sfc","sfc","iconProps","__default__","_sfc_main","_ctx","_cache","openBlock","createElementBlock","mergeProps","Icon","ElIcon","formContextKey","formItemContextKey","useFormSize","fallback","emptyRef","form","formItem","useFormDisabled","disabled","useFormItem","useFormItemInputId","formItemContext","disableIdGeneration","disableIdManagement","inputId","idUnwatch","isLabeledByFormItem","toRef","disableIdGeneration2","newId","onUnmounted","hiddenTextarea","HIDDEN_STYLE","CONTEXT_STYLE","calculateNodeStyling","targetElement","boxSizing","paddingSize","borderSize","calcTextareaHeight","minRows","maxRows","contextStyle","singleRowHeight","minHeight","maxHeight","inputProps","inputEmits","expose","rawAttrs","useSlots","containerAttrs","comboBoxAttrs","containerKls","nsTextarea","nsInput","inputSize","inputDisabled","inputExceed","showClear","showPwdVisible","wrapperKls","attrs","useAttrs$1","elForm","elFormItem","textarea","hovering","passwordVisible","countStyle","textareaCalcStyle","_ref","err","needStatusIcon","validateState","validateIcon","passwordIcon","View","Hide","containerStyle","textareaStyle","nativeInputValue","isWordLimitVisible","textLength","suffixVisible","onceInitSizeTextarea","resizeTextarea","autosize","textareaStyle2","resizeTextarea2","isInit","setNativeInputValue","input2","formatterValue","handleInput","handleChange","handlePasswordVisible","focus","blur","handleMouseLeave","handleMouseEnter","handleKeydown","select","createCommentVNode","normalizeClass","createElementVNode","createBlock","withCtx","resolveDynamicComponent","withModifiers","createVNode","toDisplayString","normalizeStyle","Input","ElInput","GAP","BAR_MAP","renderThumbStyle","move","bar","scrollbarContextKey","thumbProps","COMPONENT_NAME","scrollbar","thumb","thumbState","visible","cursorDown","cursorLeave","originalOnSelectStart","thumbStyle","offsetRatio","clickThumbHandler","startDrag","clickTrackHandler","thumbHalf","thumbPositionPercentage","mouseMoveDocumentHandler","mouseUpDocumentHandler","prevPage","thumbClickPosition","restoreOnselectstart","mouseMoveScrollbarHandler","mouseLeaveScrollbarHandler","Transition","withDirectives","vShow","Thumb","barProps","sizeWidth","sizeHeight","ratioY","ratioX","wrap","offsetHeight","offsetWidth","originalHeight","originalWidth","Bar","scrollbarProps","scrollbarEmits","scrollTop","scrollLeft","stopResizeObserver","stopResizeListener","wrapScrollTop","wrapScrollLeft","scrollbarRef","wrapRef","resizeRef","barRef","wrapStyle","wrapKls","resizeKls","handleScroll","scrollTo","arg1","arg2","setScrollTop","setScrollLeft","noresize","onActivated","onUpdated","Scrollbar","ElScrollbar","POPPER_INJECTION_KEY","POPPER_CONTENT_INJECTION_KEY","roleTypes","popperProps","triggerRef","popperInstanceRef","contentRef","referenceRef","role","popperProvides","Popper","popperArrowProps","arrowOffset","arrowRef","arrowStyle","ElPopperArrow","NAME","OnlyChild","forwardRefInjection","forwardRefDirective","_a2","defaultSlot","firstLegitNode","findFirstLegitChild","cloneVNode","Text","wrapTextContent","popperTriggerProps","ariaControls","ariaHaspopup","ariaDescribedby","ariaExpanded","virtualTriggerAriaStopWatch","TRIGGER_ELE_EVENTS","virtualEl","prevEl","watches","idx","ElPopperTrigger","FOCUS_AFTER_TRAPPED","FOCUS_AFTER_RELEASED","FOCUSOUT_PREVENTED","FOCUS_AFTER_TRAPPED_OPTS","FOCUSOUT_PREVENTED_OPTS","ON_TRAP_FOCUS_EVT","ON_RELEASE_FOCUS_EVT","FOCUS_TRAP_INJECTION_KEY","focusReason","lastUserFocusTimestamp","lastAutomatedFocusTimestamp","focusReasonUserCount","nodes","walker","isHiddenInput","getVisibleElement","isHidden","getEdges","focusable","first","last","isSelectable","tryFocus","shouldSelect","prevFocusedElement","removeFromStack","list","copy","createFocusableStack","layer","currentLayer","focusFirstDescendant","focusableStack","isFocusCausedByUserEvent","notifyFocusReasonPointer","notifyFocusReasonKeydown","useFocusReason","createFocusOutPreventedEvent","detail","lastFocusBeforeTrapped","lastFocusAfterTrapped","focusLayer","onKeydown","altKey","ctrlKey","metaKey","currentTarget","shiftKey","loop","isTabbing","currentFocusingEl","focusoutPreventedEvent","focusTrapEl","forwardRef2","oldForwardRef","onFocusIn","onFocusOut","trapOnFocus","releaseOnFocus","trapContainer","relatedTarget","isFocusedInTrap","startTrap","focusEvent","focusStartEl","stopTrap","releasedEvent","trapped","_sfc_render","$props","$setup","$data","$options","ElFocusTrap","POSITIONING_STRATEGIES","popperCoreConfigProps","placements","popperContentProps","popperContentEmits","buildPopperOptions","popperOptions","genModifiers","deriveExtraModifiers","unwrapMeasurableEl","$el","gpuAcceleration","fallbackPlacements","DEFAULT_ARROW_OFFSET","usePopperContent","eventListenerModifier","arrowModifier","arrowEl","computedReference","forceUpdate","usePopperContentDOM","contentAttrs","contentZIndex","contentClass","contentStyle","ariaModal","usePopperContentFocusTrap","focusStartRef","onFocusAfterReleased","onFocusAfterTrapped","onFocusInTrap","onFocusoutPrevented","onReleaseRequested","updateZIndex","triggerTargetAriaStopWatch","updatePopper","shouldUpdateZIndex","togglePopperAlive","triggerTargetEl","prevTriggerTargetEl","ElPopperContent","ElPopper","TOOLTIP_INJECTION_KEY","useTooltipContentProps","useTooltipTriggerProps","useTooltipModelToggleProps","useTooltipModelToggleEmits","useTooltipModelToggle","useTooltipProps","tooltipEmits","isTriggerType","whenTrigger","controlled","onOpen","onClose","onToggle","stopWhenControlledOrDisabled","onMouseenter","onMouseleave","onClick","onFocus","onBlur","onContextMenu","code","ElTooltipTrigger","teleportProps","Teleport$1","Teleport","ElTeleport","stopHandle","onBeforeShow","onBeforeHide","transitionClass","persistentRef","shouldRender","shouldShow","appendTo","ariaHidden","onTransitionLeave","stopWhenControlled","onContentEnter","onContentLeave","onBeforeEnter","onBeforeLeave","onAfterShow","ElTooltipContent","popperRef","popperComponent","isFocusInsideContent","popperContent","onDeactivated","Tooltip","ElTooltip","badgeProps","content","_d","Badge","ElBadge","buttonGroupContextKey","useButton","buttonGroupContext","_size","_disabled","_type","autoInsertSpace","_props","shouldAddSpace","slot","buttonTypes","buttonNativeTypes","buttonProps","buttonEmits","bound01","max","isOnePointZero","isPercent","isPercentage","clamp01","boundAlpha","convertToPercentage","pad2","rgbToRgb","rgbToHsl","min","h","hue2rgb","t","hslToRgb","rgbToHsv","hsvToRgb","mod","rgbToHex","allow3Char","hex","rgbaToHex","allow4Char","convertDecimalToHex","convertHexToDecimal","parseIntFromHex","numberInputToObject","names","inputToRGB","rgb","ok","format","stringInputToObject","isValidCSSUnit","CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","matchers","named","TinyColor","RsRGB","GsRGB","BsRGB","alpha","hsv","hsl","allowShortChar","fmt","rnd","_i","formatSet","formattedString","hasAlpha","needsAlphaFormat","amount","hue","rgb1","rgb2","rgba","results","slices","part","ret","res","modification","background","fg","bg","increment","darken","useButtonCustomStyle","buttonColor","activeBgColor","hoverBgColor","textColor","disabledButtonColor","buttonStyle","buttonKls","Button","buttonGroupProps","ButtonGroup","ElButton","ElButtonGroup","nodeList","startClick","handlers","documentHandler","createDocumentHandler","binding","excludes","mouseup","mousedown","mouseUpTarget","mouseDownTarget","isBound","isTargetExists","isContainedByEl","isSelf","isTargetExcluded","isContainedByPopper","ClickOutside","oldHandlerIndex","newHandler","FOCUSABLE_CHILDREN","FOCUS_STACK","FOCUS_HANDLER","focusableElement","goingBackward","isFirst","isLast","TrapFocus","mousewheel","normalized","normalizeWheel","Mousewheel","checkboxProps","checkboxEmits","checkboxGroupContextKey","useCheckboxDisabled","model","isChecked","checkboxGroup","isLimitDisabled","useCheckboxEvent","isLimitExceeded","hasOwnLabel","isDisabled","getLabeledValue","emitChangeEvent","checked","onClickRoot","validateEvent","useCheckboxModel","selfModel","isGroup","useCheckboxStatus","actualValue","toRaw","checkboxButtonSize","checkboxSize","useCheckbox","addToStore","compKls","spanKls","$event","vModelCheckbox","createTextVNode","Checkbox","activeStyle","fillValue","labelKls","CheckboxButton","checkboxGroupProps","checkboxGroupEmits","groupId","changeEvent","modelValue","toRefs","CheckboxGroup","ElCheckbox","ElCheckboxButton","ElCheckboxGroup","overlayProps","overlayEmits","BLOCK","Overlay","onMaskClick","ElOverlay","dialogInjectionKey","dialogContentProps","dialogContentEmits","dialogRef","headerRef","bodyId","focusTrapRef","dialogKls","composedDialogRef","ElDialogContent","dialogProps","dialogEmits","useDialog","lastPosition","titleId","closed","rendered","openTimer","closeTimer","style2","varPrefix","overlayDialogStyle","afterEnter","afterLeave","beforeLeave","doOpen","doClose","handleClose","shouldCancel","onModalClick","onOpenAutoFocus","onCloseAutoFocus","onCloseRequested","dialogContentRef","overlayEvent","createSlots","Dialog","ElDialog","Collection","CollectionItem","COLLECTION_ITEM_SIGN","createCollectionWithScope","COLLECTION_NAME","COLLECTION_ITEM_NAME","COLLECTION_INJECTION_KEY","COLLECTION_ITEM_INJECTION_KEY","ElCollection","collectionRef","itemMap","collectionEl","orderedNodes","ElCollectionItem","collectionItemRef","collectionInjection","collectionItemEl","dropdownProps","dropdownItemProps","dropdownMenuProps","FIRST_KEYS","LAST_KEYS","FIRST_LAST_KEYS","ImgEmpty","emptyProps","emptyDescription","imageStyle","Empty","ElEmpty","popoverProps","popoverEmits","onUpdateVisible","tooltipRef","kls","beforeEnter","Popover","attachEvents","popover","PopoverDirective","VPopover","ElPopoverDirective","ElPopover","progressProps","percentage","STATUS_COLOR_MAP","barStyle","barStyle2","getCurrentColor","relativeStrokeWidth","radius","trackPath","isDashboard","perimeter","rate","strokeDashoffset","trailPathStyle","circlePathStyle","stroke","statusIcon","Check","progressTextSize","getColors","span","seriesColor","colors","color2","Progress","ElProgress","getCell","orderBy","sortKey","reverse","sortMethod","sortBy","getKey","by","compare","len","order","getColumnById","table","columnId","column","getColumnByKey","columnKey","getColumnByCell","cell","matches","getRowIdentity","row","rowKey","current","getKeysMap","mergeOptions","defaults","parseWidth","parseMinWidth","minWidth","parseHeight","compose","funcs","toggleRowStatus","statusArr","newVal","tableTreeProps","selectable","rowIndex","_rowIndex","changed","included","isRowSelectable","toggleStatus","getChildrenCount","row2","walkTreeNode","childrenKey","lazyKey","_walker","level","removePopper","createTablePopper","render","scrollContainer","getCurrentColumns","getColSpan","colSpan","isFixedColumn","fixed","realColumns","after","columns","curColumns","fixedLayout","getFixedColumnsClass","classes","direction","isLeft","getOffset","getFixedColumnOffset","ensurePosition","useExpand","watcherData","defaultExpandAll","expandRows","expandRowsMap","rowId","expanded","rowKeys","keysMap","cur","info","useCurrent","_currentRowKey","currentRow","setCurrentRowKey","setCurrentRowByKey","restoreCurrentRowKey","_currentRow","oldCurrentRow","currentRowKey","useTree","expandRowKeys","treeData","indent","lazy","lazyTreeNodeMap","lazyColumnIdentifier","childrenColumnName","checkStrictly","normalizedData","normalize","normalizedLazyNode","parentId","updateTreeData","ifChangeExpandRowKeys","ifExpandAll","normalizedLazyNode_","newTreeData","oldTreeData","rootLazyRowKeys","getExpanded","oldValue","loaded","loading","lazyKeys","lazyNodeChildren","updateTreeExpandKeys","toggleTreeExpansion","oldExpanded","loadOrToggle","loadData","treeNode","load","sortData","sortingColumn","doFlattenColumns","useWatcher","tableSize","_data","isComplex","_columns","originColumns","fixedColumns","rightFixedColumns","leafColumns","fixedLeafColumns","rightFixedLeafColumns","updateOrderFns","leafColumnsLength","fixedLeafColumnsLength","rightFixedLeafColumnsLength","isAllSelected","selection","reserveSelection","selectOnIndeterminate","filters","filteredData","sortProp","sortOrder","hoverRow","scheduleLayout","assertRowKey","updateChildFixed","childColumn","selectionInitialFixed","updateColumns","notFixedColumns","leafColumns2","fixedLeafColumns2","rightFixedLeafColumns2","needUpdateColumns","isSelected","clearSelection","oldSelection","cleanSelection","deleted","selectedMap","dataMap","newSelection","getSelectionRows","toggleRowSelection","emitChange","ignoreSelectable","treeProps","_toggleAllSelection","selectionChanged","childrenCount","rowKey2","updateSelectionByRowKey","rowInfo","updateAllSelected","selectedCount","isSelected2","checkSelectedStatus","data2","_a3","isAllSelected_","childKey","updateFilters","columns2","filters_","col","updateSort","execFilter","sourceData","execSort","execQuery","clearFilter","columnKeys","tableHeaderRef","panels","columns_","clearSort","setExpandRowKeys","toggleRowExpansion","updateExpandRows","expandStates","isRowExpanded","treeStates","updateCurrentRowData","updateCurrentRow","currentData","replaceColumn","sortColumn","pre","useStore","watcher","dataInstanceChanged","updateColumnOrder","newColumns","updateFnIndex","init","column2","columnValue","propValue","orderValue","_states","silent","newFilters","mutations2","InitialStateMap","createStore","handleValue","getArrKeysValue","proxyTableProps","propsKey","storeKey","keyList","TableLayout","scrollBarRef","scrollY","prevScrollY","flattenColumns","headerChild","fit","bodyMinWidth","flexColumns","totalFlexWidth","allColumnsWidth","flexWidthPerPixel","noneFirstWidth","flexWidth","fixedWidth","rightFixedWidth","ArrowDown","ArrowUp","tooltipVisible","tooltip","filterClassName","filterValue","filteredValue","multiple","isActive","hidden","showFilterPanel","hideFilterPanel","handleConfirm","confirmFilter","handleReset","handleSelect","_filterValue","filteredValue2","popperPaneRef","_component_el_checkbox","resolveComponent","_component_el_checkbox_group","_component_el_scrollbar","_component_arrow_up","_component_arrow_down","_component_el_icon","_component_el_tooltip","_directive_click_outside","resolveDirective","renderList","FilterPanel","useLayoutObserver","tableLayout","onColumnsChange","onScrollableChange","layout","cols","columnsMap","ths","th","TABLE_INJECTION_KEY","useEvent","handleFilterClick","handleHeaderClick","handleSortClick","handleHeaderContextMenu","draggingColumn","dragging","dragState","handleMouseDown","tableLeft","columnEl","columnRect","resizeProxy","handleMouseMove2","event2","deltaLeft","proxyLeft","handleMouseUp","startColumnLeft","startLeft","columnWidth","handleMouseMove","bodyStyle","handleMouseOut","toggleOrder","sortOrders","givenOrder","clickTarget","useStyle","headerRowStyle","headerRowClassName","columnIndex","headerCellStyles","fixedStyle","fixedClasses","headerCellClassName","className","getAllColumns","convertToRows","maxLevel","traverse","subColumn","rows","useUtils","columnRows","TableHeader","filterPanels","getHeaderRowStyle","getHeaderRowClass","getHeaderCellStyle","getHeaderCellClass","toggleAllSelection","$parent","rowSpan","subColumns","cellIndex","isGreaterThan","epsilon","useEvents","tooltipContent","tooltipTrigger","handleEvent","handleDoubleClick","handleContextMenu","getPadding","paddingLeft","paddingRight","paddingTop","paddingBottom","toggleRowClassByCell","tooltipOptions","hoverState","cellChild","range","rangeWidth","rangeHeight","cellChildWidth","cellChildHeight","horizontalPadding","verticalPadding","oldHoverState","useStyles","rowStyle","rowClassName","cellStyle","cellStyles","cellClassName","rowspan","colspan","widthArr","realWidth","acc","useRender","handleCellMouseEnter","handleCellMouseLeave","getRowStyle","getRowClass","getCellStyle","getCellClass","getSpan","getColspanRealWidth","firstDefaultColumnIndex","getKeyOfRow","rowRender","$index","treeRowData","tooltipEffect","rowClasses","display","columnData","baseKey","patchKey","tdChildren","cellChildren","mergedTooltipOptions","tr","renderExpanded","tmp","parent2","innerTreeRowData","nodes2","defaultProps","TableBody","wrappedRowRender","hoveredCellList","oldVal","rowNum","childNodes","control","preChildNodes","oldRow","newRow","useMapState","leftFixedLeafCount","rightFixedLeafCount","columnsCount","leftFixedCount","rightFixedCount","TableFooter","getCellClasses","getCellStyles","summaryMethod","sumText","sums","precisions","notNumber","decimal","precision","resizeProxyVisible","setDragVisible","resizeState","scrollbarViewStyle","tableWidth","tableScrollHeight","bodyScrollHeight","headerScrollHeight","footerScrollHeight","appendScrollHeight","handleHeaderFooterMousewheel","pixelX","pixelY","shouldUpdateHeight","tableBodyStyles","doLayout","syncPosition","bindEvents","tableHeader","setScrollClassByEl","classList","setScrollClass","tableWrapper","hasScrollClass","scrollingNoneClass","scrollWidth","headerWrapper","footerWrapper","maxScrollLeftPosition","resizeListener","shouldUpdateLayout","oldWidth","oldHeight","oldHeaderHeight","bodyWidth_","gutterWidth","emptyBlockStyle","tableInnerStyle","scrollbarStyle","bodyWrapper","currentScrollTop","useKeyRender","initWatchDom","columnsWrapper","hColgroup","isAuto","getPropsData","propsData","useScrollbar","yCoord","setScrollPosition","position","tableIdSeed","setCurrentRow","sort","handleFixedMousewheel","debouncedUpdateLayout","tableId","computedSumText","computedEmptyText","_component_hColgroup","_component_table_header","_component_table_body","_component_table_footer","_directive_mousewheel","Table","defaultClassNames","cellStarts","getDefaultClassName","cellForced","ArrowRight","defaultRenderCell","treeCellPrefix","createPlaceholder","expandClasses","icon","getAllAliases","aliases","owner","props_","allAliases","isSubColumn","realAlign","realHeaderAlign","columnOrTableParent","hasTreeColumn","treeDataValue","realMinWidth","setColumnWidth","setColumnForcedProps","forceClass","checkSubColumn","check","originRenderCell","vnodes","firstUserColumnIndex","shouldCreatePlaceholder","prefix","props2","columnIdSeed","ElTableColumn","columnConfig","registerNormalWatchers","registerComplexWatchers","setColumnRenders","getColumnElIndex","sortable","showOverflowTooltip","getColumnIndex","renderDefault","childNode","vnode2","ElTable","ElTableColumn$1","tabsRootContextKey","tabBarProps","rootTabs","getBarStyle","tabSize","sizeName","sizeDir","tab","tabStyles","saveObserver","observerTabs","_el","barObserever","TabBar","tabNavProps","tabNavEmits","tabName","ev","TabNav","navScroll$","nav$","el$","tabBarRef","scrollable","navOffset","isFocus","navStyle","scrollPrev","containerSize","currentOffset","newOffset","scrollNext","navSize","scrollToActiveTab","nav","activeTab","navScroll","isHorizontal","activeTabBounding","navScrollBounding","maxOffset","changeTab","up","down","tabList","currentIndex","nextIndex","setFocus","removeFocus","visibility2","focused2","scrollBtn","ArrowLeft","tabs","pane","closable","btnClose","tabLabelContent","tabindex","tabsProps","isPaneName","tabsEmits","paneName","action","Tabs","panes","sortPane","unregisterPane","currentName","setCurrentName","handleTabClick","handleTabRemove","handleTabAdd","TabNavRenderer","addSlot","newButton","Plus","header","hasLabelSlot","tabPaneProps","tabsRoot","isClosable","active","eagerComputed","shouldBeRender","TabPane","ElTabs","ElTabPane","uploadContextKey","SCOPE","UploadAjaxError","status","method","url","getError","xhr","msg","getBody","ajaxUpload","progressEvt","formData","headers","uploadListTypes","fileId","genFileId","uploadBaseProps","uploadProps","uploadListProps","uploadListEmits","file","nsUpload","nsIcon","nsList","focusing","handleRemove","TransitionGroup","withKeys","Document","ZoomIn","Delete","UploadList","uploadDraggerProps","uploadDraggerEmits","dragover","onDrop","files","onDragover","UploadDragger","uploadContentProps","requests","inputRef","uploadFiles","autoUpload","limit","fileList","onStart","onExceed","rawFile","upload","doUpload","hookResult","beforeData","originData","beforeUploadPromise","resolveData","withCredentials","filename","onProgress","onSuccess","onError","httpRequest","request","req","UploadContent","revokeFileObjectURL","useHandlers","uploadRef","getFile","abort","clearFiles","removeFile","uploadFile","handleError","handleProgress","handleSuccess","handleStart","doRemove","file2","isPictureCard","Upload","ElUpload","createLoadingComponent","afterLeaveTimer","afterLeaveFlag","setText","destroySelf","loadingNumber","removeElLoadingChild","loadingInstance","handleAfterLeave","elLoadingComponent","svg","spinner","spinnerText","createApp","fullscreenInstance","resolved","resolveOptions","addStyle","addClassList","maskStyle","INSTANCE_KEY","createInstance","getBindingProp","resolveExpression","hyphenate","fullscreen","updateOptions","originalOptions","vLoading","ElLoading","messageTypes","messageDefaults","messageProps","messageEmits","instances","shallowReactive","getInstance","getLastOffset","getOffsetOrSpace","messageRef","stopTimer","badgeType","typeClass","iconComponent","lastOffset","customStyle","startTimer","clearTimer","keydown","MessageConstructor","seed","normalizeOptions","closeMessage","createMessage","userOnClose","vnode","instance2","appContext","closeAll","ElMessage","btnSize","markRaw","contentId","hasMessage","rootRef","confirmRef","confirmButtonClasses","validate","getInputElement","handleWrapperClick","handleAction","handleInputEnter","inputPattern","inputValidator","validateResult","inputRefs","_component_close","_component_el_input","_component_el_button","_component_el_focus_trap","_component_el_overlay","MessageBoxConstructor","messageInstance","getAppendToElement","initInstance","genContainer","showMessage","currentMsg","MessageBox","MESSAGE_BOX_VARIANTS","MESSAGE_BOX_DEFAULT_OPTS","boxType","messageBoxFactory","title","titleOrOpts","_MessageBox","ElMessageBox","factory","module","this","hookCallback","hooks","setHookCallback","hasOwnProp","isObjectEmpty","isDate","arrLen","extend","createUTC","strict","createLocalOrUTC","defaultParsingFlags","getParsingFlags","some","fun","isValid","flags","parsedParts","isNowValid","createInvalid","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","Moment","isMoment","deprecate","firstTime","argLen","deprecations","deprecateSimple","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","calendar","mom","output","zeroFill","targetLength","forceSign","absNumber","zerosToFill","sign","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","replaceLongDateFormatTokens","defaultLongDateFormat","longDateFormat","formatUpper","tok","defaultInvalidDate","invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","defaultRelativeTime","relativeTime","withoutSuffix","isFuture","pastFuture","diff","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedInput","normalizedProp","priorities","getPrioritizedUnits","unitsObj","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","regexes","addRegexToken","regex","strictRegex","localeData","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","absFloor","toInt","argumentForCoercion","coercedNumber","tokens","addParseToken","tokenLen","addWeekParseToken","addTimeToArrayFromToken","isLeapYear","year","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","getSetYear","makeGetSet","getIsLeapYear","unit","keepTime","set$1","isUTC","month","date","stringGet","stringSet","prioritized","prioritizedLen","indexOf","daysInMonth","modMonth","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","localeMonthsShort","handleStrictParse","monthName","ii","llc","localeMonthsParse","setMonth","getSetMonth","getDaysInMonth","monthsShortRegex","computeMonthsParse","monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","shortP","longP","createDate","createUTCDate","firstWeekOffset","dow","doy","fwd","fwdlw","dayOfYearFromWeeks","week","weekday","localWeekday","weekOffset","dayOfYear","resYear","resDayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","parseIsoWeekday","shiftWeekdays","ws","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","weekdays","localeWeekdaysShort","localeWeekdaysMin","handleStrictParse$1","weekdayName","localeWeekdaysParse","getSetDayOfWeek","day","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","weekdaysShortRegex","weekdaysMinRegex","minPieces","minp","shortp","longp","hFormat","kFormat","meridiem","lowercase","matchMeridiem","kInput","pos","pos1","pos2","localeIsPM","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","hours","minutes","isLower","baseConfig","locales","localeFamilies","globalLocale","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","next","split","loadLocale","isLocaleNameSane","oldLocale","aliasedRequire","require","getSetGlobalLocale","getLocale","defineLocale","updateLocale","tmpLocale","listLocales","checkOverflow","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","rfc2822","obsOffsets","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","weekdayProvided","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","currentDateArray","nowValue","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","weekYear","temp","weekdayOverflow","curWeek","createLocal","skipped","stringLength","totalParsedInputLength","era","meridiemFixWrap","hour","isPm","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","configFromObject","dayOrDate","createFromConfig","prepareConfig","configFromInput","prototypeMin","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","years","quarters","months","weeks","days","seconds","milliseconds","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","separator","offsetFromString","chunkOffset","matcher","chunk","parts","cloneWithOffset","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","createAdder","period","dur","isAdding","updateOffset","add","subtract","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","properties","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","formats","sod","isAfter","localInput","isBefore","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","anchor2","adjust","toISOString","keepOffset","utc","inspect","zone","datetime","suffix","inputString","fromNow","toNow","newLocaleData","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOf","startOfDate","endOf","valueOf","unix","toDate","toArray","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","localeEras","eras","localeErasParse","eraName","abbr","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","erasAbbrRegex","erasNarrowRegex","abbrPieces","namePieces","narrowPieces","erasName","erasAbbr","erasNarrow","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetSecond","getSetMillisecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","preParsePostFormat","proto$1","get$1","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","abs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","clone$1","get$2","makeGetter","round","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","humanize","argWithSuffix","argThresholds","withSuffix","abs$1","toISOString$1","total","totalSign","ymSign","daysSign","hmsSign","proto$2","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","shared_plugins","moment","Vueform","vueformConfig","Item","ItemGroup","BackButton","Card","constants_plugin","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_8","_toDisplayString","_createVNode","_component_ArrowRight","_component_Item","_withCtx","_createTextVNode","_component_ItemGroup","_hoisted_6","_hoisted_7","_createBlock","_createCommentVNode","_this","_hoisted_9","_hoisted_10","_hoisted_11","_component_el_tag","_withDirectives","_Fragment","_renderList","discipline","subDiscipline","_component_BackButton","_component_Vueform","_component_TextElement","_component_ToggleElement","_component_GroupElement","_component_StaticElement","_component_ButtonElement","nb","UR","sb","GV","VU","eb","Rl","Nl","gl","bl","Jl","Td","yl","Ll","uU","dl","Sd","MU","_l","Xl","M0","JV","kQ","FR","Vl","b0","h2","tl","In","R2","xV","Dh","wi","DU","AZ","PQ","RN","e0","Qd","HV","ah","TN","ca","Jb","Mb","Pc","xi","mW","RV","VV","Wh","fm","Xb","hV","wm","Db","Eb","rb","eV","ji","nd","yb","i0","Ql","Pm","mU","iN","wV","bb","TV","HU","mb","WU","Kl","Un","WV","Gb","Tb","iV","Zl","Ol","Al","Sb","Bb","OZ","jV","OV","ub","NN","NV","Yb","ri","ob","pb","SV","rV","fQ","gV","XV","cR","Lb","Ci","hN","wn","eN","bN","mN","zb","$Z","lF","Yd","RU","Ka","UF","iU","J0","G0","AQ","T0","MN","KV","S0","vV","Qn","kb","Oi","Ib","JN","GN","yQ","nR","sR","QR","Cb","pl","dF","ad","tF","xn","jn","va","SN","SU","XN","uN","_Q","YN","fV","PV","On","ZF","FF","xZ","oN","pN","BN","wb","ra","xb","Ha","jb","z0","NU","k0","qQ","qi","AV","$l","Kn","lU","Ob","Pa","yN","LQ","fa","_V","I0","CU","vl","cU","D0","E0","Vd","lZ","r0","cF","od","Wd","nF","vn","Hn","C0","Pn","pd","UZ","w0","dZ","Bd","Aa","tZ","ZZ","sF","An","_n","UU","QF","qn","$n","FZ","yd","ls","qU","$Q","qV","LN","zN","la","kN","IN","DN","$V","EN","lW","UW","rN","JU","CN","wN","dW","xN","Vn","tW","dU","Ld","zd","wU","x0","kd","oU","aF","Id","j0","$d","Ua","da","ql","Ca","VF","Rd","Yl","O0","WF","nU","iF","cZ","Us","RF","nZ","ds","NF","Dd","g0","K0","$U","ts","Fl","ZW","Zs","FW","cW","jN","ON","nW","sW","QW","gN","aW","KN","vN","HN","VW","Wn","Wl","gb","hl","aR","_U","Xd","PN","WW","hF","eF","tU","qa","fN","gi","AN","Fs","v0","Kb","vb","iW","Fn","fJ","wZ","_N","Hb","Pb","fb","Ab","TU","RW","Ki","uV","qb","$b","lm","Um","VR","$a","NW","dm","WR","iR","tm","RR","NR","zU","Zm","Fm","IQ","cm","hR","eR","bR","DQ","mR","nm","sm","Qm","MR","jZ","hW","eW","$i","y0","HQ","cs","EQ","rl","EU","qN","$N","ta","Rn","bF","ss","am","Qs","Vs","H0","Vm","sZ","ml","P0","f0","Ws","bW","Wm","im","Rm","Nm","vi","Hi","Pi","bV","lh","Uh","dh","JR","em","bm","YV","oV","mm","Mm","Jm","Gm","Tm","Sm","Xm","um","pm","Ym","Bm","om","Zh","Fh","ym","YU","Lm","QN","QZ","pU","is","Rs","mF","Ns","hs","MF","A0","_0","aZ","q0","es","$0","JF","bs","Il","GF","TF","Ms","VZ","lc","ch","nh","MW","fU","Za","JW","sh","Qh","Dn","zm","km","Im","Dm","Em","rm","Cm","GW","xm","jm","GR","lV","UV","Om","WZ","Fd","X0","Fa","gm","Vh","SW","SF","dV","Km","Gl","tV","XF","uF","Uc","na","dc","sa","Ed","tc","Zc","rd","YF","Nn","rQ","Nd","Js","TW","iZ","Hm","RZ","oF","_Z","TR","SR","zQ","Am","R0","_m","ih","qm","$m","hh","U2","d2","t2","l2","m0","uW","Jh","F2","c2","n2","Gh","Q2","fi","s2","Th","a2","V2","W2","Sh","i2","El","pF","Fc","Gs","XW","lR","PU","gZ","Rh","Nh","Z2","nc","ZV","FV","sc","BF","zl","Qc","Ts","Ss","ac","hd","Xs","us","yF","LF","Ml","Qa","YW","eh","bh","mh","Mh","aa","Va","oW","Ys","os","ps","Bs","ys","Ls","zs","pW","ks","zF","kF","Is","N0","Xh","BW","aN","CQ","ed","xU","Ds","IF","jU","jl","uh","Yh","oh","Wa","ia","Ra","ph","LW","Bh","Sl","yW","Es","NZ","bd","XU","yh","Na","Lh","zh","zW","XR","N2","kh","IW","rs","Vc","Cd","Wc","ic","wd","sl","DF","EF","Cs","Rc","Nc","hZ","xs","cV","nV","js","kW","En","hc","rF","Os","OU","gs","Dl","IU","hn","Ih","Ks","vs","md","CF","ec","Hl","Hs","bc","Ps","fs","Md","mc","QU","As","Tl","DW","EW","Eh","KZ","rh","Mc","_s","wF","Jc","ld","qs","$s","xF","Jd","hU","BU","Gc","Pl","Tc","Ud","lQ","Ul","rW","ha","Ch","wh","xh","CW","vZ","cd","u0","jh","ea","bn","Oh","gh","Kh","vh","Hh","il","wa","jF","OF","xd","dd","gF","KF","vF","Sc","HF","PF","eZ","Ph","fh","Ah","_h","xW","qh","jW","$h","HZ","OW","gW","KW","ba","ma","Y0","vW","Ma","HW","PW","Ja","ul","wW","ol","sU","bZ","mZ","Xc","jd","Od","gU","uc","nl","Mn","Jn","Ga","AW","Ta","_W","Sa","zn","fW","fF","Yc","gd","MZ","KU","JZ","oc","pc","eU","kU","GZ","aU","qW","$W","li","Xa","Kd","UQ","Cl","TZ","dQ","wl","Ui","h0","di","b2","wQ","m2","M2","J2","G2","T2","S2","X2","uR","pV","YR","Ea","Qb","dR","CV","VN","Bn","Bl","MM","Ac","PZ","cM","eJ","xa","pJ","zJ","E2","kl","al","Ai","bU","ga","mV","u2","oR","Y2","o2","BV","pR","BR","L0","Ad","B2","yR","LR","xQ","y2","L2","z2","k2","zR","I2","D2","SZ","AF","XZ","Bc","_F","r2","jQ","sd","C2","w2","x2","j2","O2","g2","K2","H2","P2","OQ","kR","f2","A2","_2","q2","IR","DR","ER","$2","lM","UM","dM","tM","rR","ZM","CR","yV","LV","zV","FM","ZU","yc","qF","ti","Zi","Fi","ua","Gn","o0","ci","ni","Ya","si","Qi","Tn","nM","sV","QV","sM","QM","VG","rU","aM","VM","WG","iG","RG","WM","NG","iM","hG","wR","eG","bG","RM","mG","MG","JG","GG","TG","NM","SG","XG","hM","uG","eM","YG","oG","pG","BG","gQ","ai","bM","ja","mM","yG","LG","zG","xR","kV","tQ","uZ","ZQ","Vi","jR","Ei","OR","JM","Lc","MV","xl","Ln","gR","GM","TM","SM","KR","fc","Wi","Cn","XM","uM","YM","oM","pM","BM","Oa","vR","yM","HR","LM","PR","zM","kM","IV","fR","IM","DV","DM","AR","EM","KQ","rM","_R","qR","CM","$R","wM","xM","jM","lN","OM","gM","KM","vM","HM","PM","fM","AM","UN","_M","qM","$M","lJ","UJ","tJ","FJ","ZJ","dJ","dN","cJ","nJ","sJ","VJ","aJ","QJ","fZ","Zn","WJ","iJ","FQ","zc","kc","yU","kn","Ri","tN","AU","Ni","qZ","RJ","NJ","hJ","EV","YZ","ll","oa","pa","Sn","Ba","hi","ei","bJ","mJ","cQ","nQ","sQ","QQ","aQ","Ic","MJ","bi","mi","qd","oZ","ud","Mi","vd","JJ","ZN","GJ","Dc","Gd","Ec","rc","Cc","pZ","Ji","Gi","td","BZ","wc","ya","VQ","Si","B0","Ti","yZ","TJ","WQ","iQ","$F","Hd","LU","LZ","aV","qc","SJ","XJ","l0","RQ","U0","NQ","zZ","kZ","hQ","eQ","bQ","d0","xc","jc","t0","IZ","cl","p0","La","Xn","Xi","ui","Yi","oi","pi","Bi","uJ","YJ","Pd","Z0","mQ","F0","c0","MQ","GU","Oc","fl","Zd","FU","za","yi","oJ","BJ","yJ","FN","vQ","cN","n0","JQ","Li","LJ","DZ","GQ","TQ","fd","vU","s0","SQ","XQ","uQ","YQ","oQ","pQ","EZ","Q0","a0","V0","gc","rZ","Kc","BQ","vc","W0","CZ","Hc","Yn","ka","lb","zi","Ub","ki","db","tb","Zb","Ii","Fb","Ia","kJ","IJ","DJ","EJ","WN","rJ","CJ","wJ","ab","Vb","Wb","ib","$c","Rb","Nb","tR","hb","ZR","xJ","jJ","OJ","gJ","nN","KJ","sN","Da","Di","vJ","HJ","PJ","ApplicantProfile","_component_ApplicantProfile","AlarmClock","User","comment","_component_User","_component_AlarmClock"],"mappings":"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","x_google_ignoreList":[9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,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,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,433]}