@sapui5/sap.fe.core 1.141.2 → 1.142.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +4 -1
  3. package/src/sap/fe/core/ActionRuntime.js +48 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +61 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +94 -8
  7. package/src/sap/fe/core/AppStateHandler.js +9 -8
  8. package/src/sap/fe/core/AppStateHandler.ts +13 -9
  9. package/src/sap/fe/core/BaseController.js +8 -5
  10. package/src/sap/fe/core/BaseController.ts +6 -1
  11. package/src/sap/fe/core/CommonUtils.js +4 -123
  12. package/src/sap/fe/core/CommonUtils.ts +3 -172
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +2 -14
  15. package/src/sap/fe/core/PageController.js +64 -43
  16. package/src/sap/fe/core/PageController.ts +62 -47
  17. package/src/sap/fe/core/TemplateComponent.js +20 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +24 -2
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
  21. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
  23. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
  24. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
  25. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
  27. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
  28. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
  29. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
  33. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
  34. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
  41. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
  45. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
  49. package/src/sap/fe/core/controllerextensions/Share.js +5 -5
  50. package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
  53. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
  54. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
  65. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
  70. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
  71. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
  72. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
  73. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  74. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
  77. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  78. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  79. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  80. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  81. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  82. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  83. package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
  84. package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
  85. package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
  86. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  87. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  88. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  89. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  90. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
  91. package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
  92. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  93. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  94. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  95. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
  96. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
  98. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  100. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  101. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  102. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  103. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  104. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  105. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  106. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  107. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  108. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  109. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  110. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  111. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  112. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  113. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  114. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  115. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  116. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  117. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  118. package/src/sap/fe/core/fpm/Component.js +8 -1
  119. package/src/sap/fe/core/fpm/Component.ts +8 -0
  120. package/src/sap/fe/core/fpm/manifest.json +1 -1
  121. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  122. package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
  123. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  124. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  125. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  126. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  127. package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
  128. package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
  129. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  130. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  131. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  132. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  133. package/src/sap/fe/core/library.js +30 -3
  134. package/src/sap/fe/core/library.ts +28 -1
  135. package/src/sap/fe/core/messagebundle.properties +8 -1
  136. package/src/sap/fe/core/messagebundle_ar.properties +7 -0
  137. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  138. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  139. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  140. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  141. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  143. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  144. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  146. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
  148. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  149. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  152. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  153. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  154. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  159. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  167. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_no.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  175. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  184. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  185. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  186. package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
  187. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  188. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  189. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  190. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  191. package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
  192. package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
  193. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  194. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  195. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
  196. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
  197. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  198. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  200. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  201. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  202. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  203. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  204. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  205. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  206. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  207. package/ui5.yaml +2 -0
@@ -1,6 +1,4 @@
1
1
  import type { ActionParameter as EdmActionParameter } from "@sap-ux/vocabularies-types";
2
- import type * as Edm from "@sap-ux/vocabularies-types/Edm";
3
- import type { FilterRestrictionsType } from "@sap-ux/vocabularies-types/vocabularies/Capabilities";
4
2
  import type {
5
3
  SemanticObjectMappingAbstractTypes,
6
4
  SemanticObjectMappingTypeTypes,
@@ -10,7 +8,6 @@ import { CommonAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/C
10
8
  import type { SelectionPresentationVariant, SelectionVariantType, TextArrangement } from "@sap-ux/vocabularies-types/vocabularies/UI";
11
9
  import { UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
12
10
  import Log from "sap/base/Log";
13
- import uniqueSort from "sap/base/util/array/uniqueSort";
14
11
  import mergeObjects from "sap/base/util/merge";
15
12
  import type AppComponent from "sap/fe/core/AppComponent";
16
13
  import type { ComponentData } from "sap/fe/core/AppComponent";
@@ -58,18 +55,10 @@ import type { Link } from "sap/ushell/services/Navigation";
58
55
  import type ObjectPageDynamicHeaderTitle from "sap/uxap/ObjectPageDynamicHeaderTitle";
59
56
  import type ObjectPageLayout from "sap/uxap/ObjectPageLayout";
60
57
  import type ObjectPageSubSection from "sap/uxap/ObjectPageSubSection";
61
- import type {
62
- ExpandPathType,
63
- MetaModelEntityType,
64
- MetaModelEnum,
65
- MetaModelNavProperty,
66
- MetaModelProperty,
67
- MetaModelType
68
- } from "types/metamodel_types";
58
+ import type { MetaModelEntityType, MetaModelEnum, MetaModelNavProperty, MetaModelProperty, MetaModelType } from "types/metamodel_types";
69
59
  import type { BindContextParameters } from "./controllerextensions/editFlow/draft";
70
60
  import AnyElement from "./controls/AnyElement";
71
61
  import { getRangeDefinition } from "./converters/helpers/SelectionVariantHelper";
72
- import * as MetaModelFunction from "./helpers/MetaModelFunction";
73
62
 
74
63
  type MyInboxIntent = {
75
64
  semanticObject: string;
@@ -90,7 +79,7 @@ function normalizeSearchTerm(sSearchTerm: string | undefined): string | undefine
90
79
  if (convertedSearchTerm === "" || convertedSearchTerm === " ") {
91
80
  return undefined;
92
81
  }
93
- return convertedSearchTerm;
82
+ return convertedSearchTerm.trim();
94
83
  }
95
84
 
96
85
  async function waitForContextRequested(bindingContext: ODataV4Context): Promise<void> {
@@ -483,7 +472,7 @@ function getCurrentPageView(oAppComponent: AppComponent): FEView {
483
472
  const rootViewController = oAppComponent.getRootViewController();
484
473
  return rootViewController.isFclEnabled()
485
474
  ? rootViewController.getRightmostView()
486
- : CommonUtils.getTargetView((oAppComponent.getRootContainer() as NavContainer).getCurrentPage());
475
+ : CommonUtils.getTargetView((oAppComponent.getRootContainer() as NavContainer).getCurrentPage?.());
487
476
  }
488
477
 
489
478
  function getTargetView(oControl: ManagedObject | null): FEView {
@@ -1122,163 +1111,6 @@ async function fnGetSemanticObjectPromise(oMetaModel: ODataMetaModel, sPath: str
1122
1111
  return CommonUtils.getSemanticObjectsFromPath(oMetaModel, sPath, sQualifier);
1123
1112
  }
1124
1113
 
1125
- function getFilterAllowedExpression(oFilterRestrictionsAnnotation?: MetaModelType<FilterRestrictionsType>): _FilterAllowedExpressions {
1126
- const mAllowedExpressions: _FilterAllowedExpressions = {};
1127
- if (oFilterRestrictionsAnnotation && oFilterRestrictionsAnnotation.FilterExpressionRestrictions !== undefined) {
1128
- oFilterRestrictionsAnnotation.FilterExpressionRestrictions.forEach(function (oProperty) {
1129
- if (oProperty.Property && oProperty.AllowedExpressions !== undefined) {
1130
- //SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
1131
- if (mAllowedExpressions[oProperty.Property.$PropertyPath] !== undefined) {
1132
- mAllowedExpressions[oProperty.Property.$PropertyPath].push(oProperty.AllowedExpressions);
1133
- } else {
1134
- mAllowedExpressions[oProperty.Property.$PropertyPath] = [oProperty.AllowedExpressions];
1135
- }
1136
- }
1137
- });
1138
- }
1139
- return mAllowedExpressions;
1140
- }
1141
- function getFilterRestrictions(
1142
- oFilterRestrictionsAnnotation?: MetaModelType<FilterRestrictionsType>,
1143
- sRestriction?: "RequiredProperties" | "NonFilterableProperties"
1144
- ): string[] {
1145
- let aProps: string[] = [];
1146
- if (oFilterRestrictionsAnnotation && oFilterRestrictionsAnnotation[sRestriction as keyof MetaModelType<FilterRestrictionsType>]) {
1147
- aProps = (
1148
- oFilterRestrictionsAnnotation[sRestriction as keyof MetaModelType<FilterRestrictionsType>] as ExpandPathType<Edm.PropertyPath>[]
1149
- ).map(function (oProperty: ExpandPathType<Edm.PropertyPath>) {
1150
- return oProperty.$PropertyPath;
1151
- });
1152
- }
1153
- return aProps;
1154
- }
1155
-
1156
- function _fetchPropertiesForNavPath(paths: string[], navPath: string, props: string[]): string[] {
1157
- const navPathPrefix = navPath + "/";
1158
- return paths.reduce((outPaths: string[], pathToCheck: string) => {
1159
- if (pathToCheck.startsWith(navPathPrefix)) {
1160
- const outPath = pathToCheck.replace(navPathPrefix, "");
1161
- if (!outPaths.includes(outPath)) {
1162
- outPaths.push(outPath);
1163
- }
1164
- }
1165
- return outPaths;
1166
- }, props);
1167
- }
1168
- type _FilterAllowedExpressions = Record<string, string[]>;
1169
- export type _FilterRestrictions = {
1170
- RequiredProperties: string[];
1171
- NonFilterableProperties: string[];
1172
- FilterAllowedExpressions: _FilterAllowedExpressions;
1173
- };
1174
- function getFilterRestrictionsByPath(entityPath: string, oContext: ODataMetaModel): _FilterRestrictions {
1175
- // NOTE: For getting FilterAllowedExpressions please use 'getAllowedFilterExpressionForProperty' from 'sap/fe/core/converters/controls/ListReport/FilterField.ts'.
1176
- const oRet: _FilterRestrictions = {
1177
- RequiredProperties: [],
1178
- NonFilterableProperties: [],
1179
- FilterAllowedExpressions: {}
1180
- };
1181
- let oFilterRestrictions;
1182
- const navigationText = "$NavigationPropertyBinding";
1183
- const frTerm = "@Org.OData.Capabilities.V1.FilterRestrictions";
1184
- const entityTypePathParts = entityPath.replaceAll("%2F", "/").split("/").filter(ModelHelper.filterOutNavPropBinding);
1185
- const entityTypePath = `/${entityTypePathParts.join("/")}/`;
1186
- const entitySetPath = ModelHelper.getEntitySetPath(entityPath, oContext);
1187
- const entitySetPathParts = entitySetPath.split("/").filter(ModelHelper.filterOutNavPropBinding);
1188
- const isContainment = oContext.getObject(`${entityTypePath}$ContainsTarget`);
1189
- const containmentNavPath = !!isContainment && entityTypePathParts[entityTypePathParts.length - 1];
1190
-
1191
- //LEAST PRIORITY - Filter restrictions directly at Entity Set
1192
- //e.g. FR in "NS.EntityContainer/SalesOrderManage" ContextPath: /SalesOrderManage
1193
- if (!isContainment) {
1194
- oFilterRestrictions = oContext.getObject(`${entitySetPath}${frTerm}`) as MetaModelType<FilterRestrictionsType> | undefined;
1195
- oRet.RequiredProperties = getFilterRestrictions(oFilterRestrictions, "RequiredProperties") || [];
1196
- const resultContextCheck = oContext.getObject(`${entityTypePath}@com.sap.vocabularies.Common.v1.ResultContext`);
1197
- if (!resultContextCheck) {
1198
- oRet.NonFilterableProperties = getFilterRestrictions(oFilterRestrictions, "NonFilterableProperties") || [];
1199
- }
1200
- //SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
1201
- oRet.FilterAllowedExpressions = getFilterAllowedExpression(oFilterRestrictions) || {};
1202
- }
1203
-
1204
- if (entityTypePathParts.length > 1) {
1205
- const navPath = isContainment ? (containmentNavPath as string) : entitySetPathParts[entitySetPathParts.length - 1];
1206
- // In case of containment we take entitySet provided as parent. And in case of normal we would remove the last navigation from entitySetPath.
1207
- const parentEntitySetPath = isContainment ? entitySetPath : `/${entitySetPathParts.slice(0, -1).join(`/${navigationText}/`)}`;
1208
- //THIRD HIGHEST PRIORITY - Reading property path restrictions - Annotation at main entity but directly on navigation property path
1209
- //e.g. Parent Customer with PropertyPath="Set/CityName" ContextPath: Customer/Set
1210
- const oParentRet: _FilterRestrictions = {
1211
- RequiredProperties: [],
1212
- NonFilterableProperties: [],
1213
- FilterAllowedExpressions: {}
1214
- };
1215
- if (!navPath.includes("%2F")) {
1216
- const oParentFR = oContext.getObject(`${parentEntitySetPath}${frTerm}`) as MetaModelType<FilterRestrictionsType> | undefined;
1217
- oRet.RequiredProperties = _fetchPropertiesForNavPath(
1218
- getFilterRestrictions(oParentFR, "RequiredProperties") || [],
1219
- navPath,
1220
- oRet.RequiredProperties || []
1221
- );
1222
- oRet.NonFilterableProperties = _fetchPropertiesForNavPath(
1223
- getFilterRestrictions(oParentFR, "NonFilterableProperties") || [],
1224
- navPath,
1225
- oRet.NonFilterableProperties || []
1226
- );
1227
- //SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
1228
- const completeAllowedExps = getFilterAllowedExpression(oParentFR) || {};
1229
- oParentRet.FilterAllowedExpressions = Object.keys(completeAllowedExps).reduce(
1230
- (outProp: Record<string, string[]>, propPath: string) => {
1231
- if (propPath.startsWith(navPath + "/")) {
1232
- const outPropPath = propPath.replace(navPath + "/", "");
1233
- outProp[outPropPath] = completeAllowedExps[propPath];
1234
- }
1235
- return outProp;
1236
- },
1237
- {} as Record<string, string[]>
1238
- );
1239
- }
1240
-
1241
- //SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
1242
- oRet.FilterAllowedExpressions = mergeObjects(
1243
- {},
1244
- oRet.FilterAllowedExpressions || {},
1245
- oParentRet.FilterAllowedExpressions || {}
1246
- ) as Record<string, string[]>;
1247
-
1248
- //SECOND HIGHEST priority - Navigation restrictions
1249
- //e.g. Parent "/Customer" with NavigationPropertyPath="Set" ContextPath: Customer/Set
1250
- const oNavRestrictions = MetaModelFunction.getNavigationRestrictions(oContext, parentEntitySetPath, navPath.replaceAll("%2F", "/"));
1251
- const oNavFilterRest = oNavRestrictions && (oNavRestrictions["FilterRestrictions"] as MetaModelType<FilterRestrictionsType>);
1252
- const navResReqProps = getFilterRestrictions(oNavFilterRest, "RequiredProperties") || [];
1253
- oRet.RequiredProperties = uniqueSort(oRet.RequiredProperties.concat(navResReqProps));
1254
- const navNonFilterProps = getFilterRestrictions(oNavFilterRest, "NonFilterableProperties") || [];
1255
- oRet.NonFilterableProperties = uniqueSort(oRet.NonFilterableProperties.concat(navNonFilterProps));
1256
- //SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
1257
- oRet.FilterAllowedExpressions = mergeObjects(
1258
- {},
1259
- oRet.FilterAllowedExpressions || {},
1260
- getFilterAllowedExpression(oNavFilterRest) || {}
1261
- ) as Record<string, string[]>;
1262
-
1263
- //HIGHEST priority - Restrictions having target with navigation association entity
1264
- // e.g. FR in "CustomerParameters/Set" ContextPath: "Customer/Set"
1265
- const navAssociationEntityRest = oContext.getObject(
1266
- `/${entityTypePathParts.join("/")}${frTerm}`
1267
- ) as MetaModelType<FilterRestrictionsType>;
1268
- const navAssocReqProps = getFilterRestrictions(navAssociationEntityRest, "RequiredProperties") || [];
1269
- oRet.RequiredProperties = uniqueSort(oRet.RequiredProperties.concat(navAssocReqProps));
1270
- const navAssocNonFilterProps = getFilterRestrictions(navAssociationEntityRest, "NonFilterableProperties") || [];
1271
- oRet.NonFilterableProperties = uniqueSort(oRet.NonFilterableProperties.concat(navAssocNonFilterProps));
1272
- //SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
1273
- oRet.FilterAllowedExpressions = mergeObjects(
1274
- {},
1275
- oRet.FilterAllowedExpressions,
1276
- getFilterAllowedExpression(navAssociationEntityRest) || {}
1277
- ) as _FilterAllowedExpressions;
1278
- }
1279
- return oRet;
1280
- }
1281
-
1282
1114
  export type PreprocessorSettings = {
1283
1115
  appComponent?: AppComponent;
1284
1116
  bindingContexts: object;
@@ -1627,7 +1459,6 @@ const CommonUtils = {
1627
1459
  getSemanticObjectPromise: fnGetSemanticObjectPromise,
1628
1460
  getSemanticObjectsFromPath: fnGetSemanticObjectsFromPath,
1629
1461
  waitForContextRequested: waitForContextRequested,
1630
- getFilterRestrictionsByPath: getFilterRestrictionsByPath,
1631
1462
  getSpecificAllowedExpression: getSpecificAllowedExpression,
1632
1463
  getAdditionalParamsForCreate: getAdditionalParamsForCreate,
1633
1464
  requestSingletonProperty: requestSingletonProperty,
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controls/DataWatcher", "sap/fe/core/formatters/CollaborationFormatter", "sap/fe/core/formatters/CriticalityFormatter", "sap/fe/core/formatters/FPMFormatter", "sap/fe/core/formatters/KPIFormatter", "sap/fe/core/formatters/StandardFormatter", "sap/fe/core/formatters/ValueFormatter", "sap/ui/base/Object", "sap/ui/core/Component", "sap/ui/model/json/JSONModel"], function (Log, BindingToolkit, ClassSupport, CommonUtils, DataWatcher, CollaborationFormatter, CriticalityFormatter, FPMFormatter, KPIFormatter, StandardFormatter, ValueFormatter, BaseObject, Component, JSONModel) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controls/DataWatcher", "sap/fe/core/formatters/Scope", "sap/ui/base/Object", "sap/ui/core/Component", "sap/ui/model/json/JSONModel"], function (Log, BindingToolkit, ClassSupport, CommonUtils, DataWatcher, Scope, BaseObject, Component, JSONModel) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4;
@@ -60,14 +60,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
60
60
  * @since 1.141.0
61
61
  */
62
62
  _initializerDefineProperty(_this, "collaborativeDraft", _descriptor4, _this);
63
- _this._formatters = {
64
- ValueFormatter: ValueFormatter,
65
- StandardFormatter: StandardFormatter,
66
- CriticalityFormatter: CriticalityFormatter,
67
- FPMFormatter: FPMFormatter,
68
- KPIFormatter: KPIFormatter,
69
- CollaborationFormatter: CollaborationFormatter
70
- };
63
+ _this._formatters = Scope._formatters;
71
64
  _this._controller = oController;
72
65
  _this._view = oController.getView();
73
66
  _this.extension = _this._controller.extension;
@@ -368,4 +361,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
368
361
  }), _class2)) || _class);
369
362
  return ExtensionAPI;
370
363
  }, false);
371
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHRlbnNpb25BUEkiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsIl9kZWMzIiwiX2RlYzQiLCJfZGVjNSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQmFzZU9iamVjdCIsIm9Db250cm9sbGVyIiwic0lkIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9mb3JtYXR0ZXJzIiwiVmFsdWVGb3JtYXR0ZXIiLCJTdGFuZGFyZEZvcm1hdHRlciIsIkNyaXRpY2FsaXR5Rm9ybWF0dGVyIiwiRlBNRm9ybWF0dGVyIiwiS1BJRm9ybWF0dGVyIiwiQ29sbGFib3JhdGlvbkZvcm1hdHRlciIsIl9jb250cm9sbGVyIiwiX3ZpZXciLCJnZXRWaWV3IiwiZXh0ZW5zaW9uIiwiZWRpdEZsb3ciLCJyb3V0aW5nIiwiaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiX3JvdXRpbmciLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiX3ByZWZpeCIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0RWRpdEZsb3ciLCJnZXRSb3V0aW5nIiwiZ2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiYnlJZCIsImlkIiwiY29udHJvbCIsInVuZGVmaW5lZCIsImlzQSIsInBhcmVudCIsImdldFBhcmVudCIsIkVycm9yIiwiZ2V0SWQiLCJnZXRNb2RlbCIsInNNb2RlbE5hbWUiLCJvQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRNYW5pZmVzdEVudHJ5IiwibW9kZWxzIiwiYWRkRGVwZW5kZW50Iiwib0NvbnRyb2wiLCJyZW1vdmVEZXBlbmRlbnQiLCJuYXZpZ2F0ZVRvVGFyZ2V0Iiwic1RhcmdldCIsIm9Db250ZXh0IiwibG9hZEZyYWdtZW50IiwibVNldHRpbmdzIiwiX3RoaXMyIiwib1RlbXBsYXRlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJnZXRTZXJ2aWNlIiwib1BhZ2VNb2RlbCIsImkxOG5Nb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJtVmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsInRhcmdldENvbnRleHRQYXRoIiwiZ2V0RW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJvVmlld0RhdGFNb2RlbCIsIkpTT05Nb2RlbCIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsImJpbmRpbmdDb250ZXh0cyIsImNvbnRleHRQYXRoIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJjb252ZXJ0ZXJDb250ZXh0Iiwibm9SZXNvbHZlIiwidmlld0RhdGEiLCJtZXRhTW9kZWwiLCJhcHBDb21wb25lbnQiLCJjb250cm9sbGVySW5zdGFuY2UiLCJjb250cm9sbGVyIiwic3ViQ2xhc3MiLCJnZXRNZXRhZGF0YSIsImdldENsYXNzIiwiZXh0ZW5kIiwiY29udHJvbGxlckVsZW1lbnRLZXkiLCJjb250cm9sbGVyRWxlbWVudCIsImJpbmQiLCJib3VuZEZ1bmN0aW9uIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJydW5Bc093bmVyIiwiYXBwbHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInNldCIsInYiLCJuZXdJc0EiLCJjbGFzc05hbWUiLCJvVGVtcGxhdGVQcm9taXNlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJuYW1lIiwiaXNYTUwiLCJjb250YWluaW5nVmlldyIsIm9GcmFnbWVudCIsImluaXRpYWxCaW5kaW5nQ29udGV4dCIsInNldEJpbmRpbmdDb250ZXh0Iiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJ1cGRhdGVBcHBTdGF0ZSIsInZpZXciLCJhcHBTdGF0ZUluZm8iLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJjcmVhdGVBcHBTdGF0ZSIsInZpZXdJZCIsImFwcFN0YXRlRGF0YSIsInJ1bldpdGhGUE1Db250ZXh0IiwiZm4iLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIndhdGNoUHJvcGVydHkiLCJwcm9wZXJ0eU5hbWUiLCJjYWxsYmFjayIsIkRhdGFXYXRjaGVyIiwicHJvcGVydHlCaW5kaW5nIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsInZhbHVlQ2hhbmdlZCIsImUiLCJnZXRQYXJhbWV0ZXIiLCJCYXNlT2JqZWN0IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFeHRlbnNpb25BUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IHR5cGUgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgdHlwZSBSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Sb3V0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IFdhdGNoZXJDYWxsYmFjayB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9EYXRhV2F0Y2hlclwiO1xuaW1wb3J0IERhdGFXYXRjaGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9EYXRhV2F0Y2hlclwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25Gb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvQ29sbGFib3JhdGlvbkZvcm1hdHRlclwiO1xuaW1wb3J0IENyaXRpY2FsaXR5Rm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0NyaXRpY2FsaXR5Rm9ybWF0dGVyXCI7XG5pbXBvcnQgRlBNRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0ZQTUZvcm1hdHRlclwiO1xuaW1wb3J0IEtQSUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9LUElGb3JtYXR0ZXJcIjtcbmltcG9ydCBTdGFuZGFyZEZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9TdGFuZGFyZEZvcm1hdHRlclwiO1xuaW1wb3J0IFZhbHVlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSBNYWNyb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgRm9ybUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1BUElcIjtcbmltcG9ydCBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFRTRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBDb2xsYWJvcmF0aXZlRHJhZnQgZnJvbSBcIi4vY29udHJvbGxlcmV4dGVuc2lvbnMvQ29sbGFib3JhdGl2ZURyYWZ0XCI7XG5pbXBvcnQgdHlwZSBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuXG4vKipcbiAqIENvbW1vbiBFeHRlbnNpb24gQVBJIGZvciBhbGwgcGFnZXMgb2YgU0FQIEZpb3JpIGVsZW1lbnRzIGZvciBPRGF0YSBWNC5cbiAqXG4gKiBUbyBjb3JyZWN0bHkgaW50ZWdyYXRlIHlvdXIgYXBwIGV4dGVuc2lvbiBjb2Rpbmcgd2l0aCBTQVAgRmlvcmkgZWxlbWVudHMsIHVzZSBvbmx5IHRoZSBleHRlbnNpb25BUEkgb2YgU0FQIEZpb3JpIGVsZW1lbnRzLiBEb24ndCBhY2Nlc3Mgb3IgbWFuaXB1bGF0ZSBjb250cm9scywgcHJvcGVydGllcywgbW9kZWxzLCBvciBvdGhlciBpbnRlcm5hbCBvYmplY3RzIGNyZWF0ZWQgYnkgdGhlIFNBUCBGaW9yaSBlbGVtZW50cyBmcmFtZXdvcmsuXG4gKiB7QGxpbmsgZGVtbzpzYXAvZmUvY29yZS9mcG1FeHBsb3Jlci9pbmRleC5odG1sIy9jb250cm9sbGVyRXh0ZW5zaW9ucy9jb250cm9sbGVyRXh0ZW5zaW9uc092ZXJ2aWV3IE92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2NrfVxuICogQHB1YmxpY1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHNpbmNlIDEuNzkuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5FeHRlbnNpb25BUElcIilcbmNsYXNzIEV4dGVuc2lvbkFQSSBleHRlbmRzIEJhc2VPYmplY3Qge1xuXHQvKipcblx0ICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBpbnRvIHRoZSBlZGl0IGZsb3cgb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKiB7QGxpbmsgZGVtbzpzYXAvZmUvY29yZS9mcG1FeHBsb3Jlci9pbmRleC5odG1sIy9jb250cm9sbGVyRXh0ZW5zaW9ucy9iYXNpY0V4dGVuc2liaWxpdHkgT3ZlcnZpZXcgb2YgQnVpbGRpbmcgQmxvY2t9XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcIiB9KVxuXHRlZGl0RmxvdzogRWRpdEZsb3c7XG5cblx0LyoqXG5cdCAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgaG9va3MgaW50byB0aGUgcm91dGluZyBmbG93IG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICoge0BsaW5rIGRlbW86c2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvY29udHJvbGxlckV4dGVuc2lvbnMvcm91dGluZ0V4dGVuc2liaWxpdHkgT3ZlcnZpZXcgb2YgQnVpbGRpbmcgQmxvY2t9XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuUm91dGluZ1wiIH0pXG5cdHJvdXRpbmc6IFJvdXRpbmc7XG5cblx0LyoqXG5cdCAqIEV4dGVuc2lvbkFQSSBmb3IgaW50ZW50LWJhc2VkIG5hdmlnYXRpb25cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5JbnRlbnRCYXNlZE5hdmlnYXRpb25cIiB9KVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb246IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHQvKipcblx0ICogRXh0ZW5zaW9uQVBJIGZvciBjb2xsYWJvcmF0aXZlIGRyYWZ0IGhhbmRsaW5nXG5cdCAqIEBwdWJsaWNcblx0ICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDEuMFxuXHQgKiBAc2luY2UgMS4xNDEuMFxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5Db2xsYWJvcmF0aXZlRHJhZnRcIiB9KVxuXHRjb2xsYWJvcmF0aXZlRHJhZnQ6IENvbGxhYm9yYXRpdmVEcmFmdDtcblxuXHRwdWJsaWMgX2NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByb3RlY3RlZCBfdmlldzogRkVWaWV3O1xuXG5cdHByaXZhdGUgX3JvdXRpbmc6IEludGVybmFsUm91dGluZztcblxuXHRwcml2YXRlIF9pbnRlbnRCYXNlZE5hdmlnYXRpb246IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdHByaXZhdGUgX3ByZWZpeD86IHN0cmluZztcblxuXHRwcml2YXRlIGV4dGVuc2lvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cblx0cHJvdGVjdGVkIF9mb3JtYXR0ZXJzID0ge1xuXHRcdFZhbHVlRm9ybWF0dGVyOiBWYWx1ZUZvcm1hdHRlcixcblx0XHRTdGFuZGFyZEZvcm1hdHRlcjogU3RhbmRhcmRGb3JtYXR0ZXIsXG5cdFx0Q3JpdGljYWxpdHlGb3JtYXR0ZXI6IENyaXRpY2FsaXR5Rm9ybWF0dGVyLFxuXHRcdEZQTUZvcm1hdHRlcjogRlBNRm9ybWF0dGVyLFxuXHRcdEtQSUZvcm1hdHRlcjogS1BJRm9ybWF0dGVyLFxuXHRcdENvbGxhYm9yYXRpb25Gb3JtYXR0ZXI6IENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJcblx0fTtcblxuXHRjb25zdHJ1Y3RvcihvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIHNJZD86IHN0cmluZykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fY29udHJvbGxlciA9IG9Db250cm9sbGVyO1xuXHRcdHRoaXMuX3ZpZXcgPSBvQ29udHJvbGxlci5nZXRWaWV3KCk7XG5cdFx0dGhpcy5leHRlbnNpb24gPSB0aGlzLl9jb250cm9sbGVyLmV4dGVuc2lvbjtcblx0XHR0aGlzLmVkaXRGbG93ID0gdGhpcy5fY29udHJvbGxlci5lZGl0Rmxvdztcblx0XHR0aGlzLnJvdXRpbmcgPSB0aGlzLl9jb250cm9sbGVyLnJvdXRpbmc7XG5cdFx0dGhpcy5pbnRlbnRCYXNlZE5hdmlnYXRpb24gPSB0aGlzLl9jb250cm9sbGVyLmludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0XHR0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdCA9IHRoaXMuX2NvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0O1xuXG5cdFx0Ly8gU2V0dGluZyBpbnRlcm5hbCBjb250cm9sbGVyIGV4dGVuc2lvbnMgZm9yIGRlZmF1bHQgYnVpbGRpbmcgYmxvY2sgaGFuZGxlciB0byB3b3JrIHdoZW4gdXNpbmcgRXh0ZW5zaW9uQVBJIGFzIGNvbnRyb2xsZXIgaW4gY3VzdG9tIGZyYWdtZW50IHNjbmVhcmlvcy5cblx0XHR0aGlzLl9yb3V0aW5nID0gdGhpcy5fY29udHJvbGxlci5fcm91dGluZztcblx0XHR0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24gPSB0aGlzLl9jb250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdFx0dGhpcy5fcHJlZml4ID0gc0lkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZWRpdEZsb3cgY29udHJvbGxlciBleHRlbnNpb24gZm9yIHRoaXMgcGFnZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgZWRpdEZsb3cgY29udHJvbGxlciBleHRlbnNpb25cblx0ICovXG5cdGdldEVkaXRGbG93KCk6IEVkaXRGbG93IHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHJvdXRpbmcgY29udHJvbGxlciBleHRlbnNpb24gZm9yIHRoaXMgcGFnZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgcm91dGluZyBjb250cm9sbGVyIGV4dGVuc2lvblxuXHQgKi9cblx0Z2V0Um91dGluZygpOiBSb3V0aW5nIHtcblx0XHRyZXR1cm4gdGhpcy5yb3V0aW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaW50ZW50QmFzZWROYXZpZ2F0aW9uIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvciB0aGlzIHBhZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGludGVudEJhc2VkTmF2aWdhdGlvbiBjb250cm9sbGVyIGV4dGVuc2lvblxuXHQgKi9cblx0Z2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uKCk6IEludGVudEJhc2VkTmF2aWdhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMuaW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFjY2VzcyBhIGNvbnRyb2wgYnkgaXRzIElELiBJZiB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgYW4gaW50ZXJuYWwgY29udHJvbCBpbnN0ZWFkIG9mIHRoZSBzdGFibGUgQVBJLCB0aGUgbWV0aG9kIHdpbGwgcmFpc2UgYW4gZXJyb3IuXG5cdCAqIEBwYXJhbSBpZCBJRCBvZiB0aGUgY29udHJvbCB3aXRob3V0IHZpZXcgYW5kIHNlY3Rpb24gcHJlZml4LlxuXHQgKiBAcmV0dXJucyBUaGUgcmVxdWVzdGVkIGNvbnRyb2wsIGlmIGZvdW5kIGluIHRoZSB2aWV3IC8gc2VjdGlvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YnlJZChpZDogc3RyaW5nKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGNvbnRyb2wgPSB0aGlzLl92aWV3LmJ5SWQoaWQpO1xuXG5cdFx0aWYgKCFjb250cm9sICYmIHRoaXMuX3ByZWZpeCkge1xuXHRcdFx0Ly8gZ2l2ZSBpdCBhIHRyeSB3aXRoIHRoZSBwcmVmaXhcblx0XHRcdGNvbnRyb2wgPSB0aGlzLl92aWV3LmJ5SWQoYCR7dGhpcy5fcHJlZml4fS0tJHtpZH1gKTtcblx0XHR9XG5cblx0XHRpZiAoIWNvbnRyb2wpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKCFjb250cm9sLmlzQTxNYWNyb0FQST4oXCJzYXAuZmUubWFjcm9zLk1hY3JvQVBJXCIpKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBhcHAgdHJpZWQgdG8gYWNjZXNzIGFuIGludGVybmFsIGNvbnRyb2wgd3JhcHBlZCBieSBhIG1hY3JvIEFQSVxuXHRcdFx0bGV0IHBhcmVudCA9IGNvbnRyb2wuZ2V0UGFyZW50KCk7XG5cblx0XHRcdHdoaWxlIChwYXJlbnQpIHtcblx0XHRcdFx0aWYgKHBhcmVudC5pc0E8Rm9ybUFQST4oXCJzYXAuZmUubWFjcm9zLmZvcm0uRm9ybUFQSVwiKSkge1xuXHRcdFx0XHRcdC8vIHdlIHJlYWNoZWQgdGhlIGZvcm1BUEkgYnV0IG5vIGZpZWxkIC0gdGhlIGFwcCB0cmllcyB0byBhY2Nlc3MgYW55IGN1c3RvbSBjb250cm9sIHdoaWNoIGlzIGZpbmVcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwYXJlbnQuaXNBPE1hY3JvQVBJPihcInNhcC5mZS5tYWNyb3MuTWFjcm9BUElcIikpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRgWW91IGF0dGVtcHRlZCB0byBhY2Nlc3MgYW4gaW50ZXJuYWwgY29udHJvbC4gVGhpcyBpcyByaXNreSBhbmQgbWlnaHQgY2hhbmdlIGxhdGVyLiBJbnN0ZWFkIGFjY2VzcyBpdHMgc3RhYmxlIEFQSSBieSB1c2luZyBJRCAke3BhcmVudC5nZXRJZCgpfWBcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb250cm9sO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhY2Nlc3MgdG8gbW9kZWxzIG1hbmFnZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzLjxicj5cblx0ICogVGhlIGZvbGxvd2luZyBtb2RlbHMgY2FuIGJlIGFjY2Vzc2VkOlxuXHQgKiA8dWw+XG5cdCAqIDxsaT51bmRlZmluZWQ6IHRoZSB1bmRlZmluZWQgbW9kZWwgcmV0dXJucyB0aGUgU0FQVUk1IE9EYXRhIFY0IG1vZGVsIGJvdW5kIHRvIHRoaXMgcGFnZTwvbGk+XG5cdCAqIDxsaT5pMThuIC8gZnVydGhlciBkYXRhIG1vZGVscyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdDwvbGk+XG5cdCAqIDxsaT51aTogcmV0dXJucyBhIFNBUFVJNSBKU09OIG1vZGVsIGNvbnRhaW5pbmcgVUkgaW5mb3JtYXRpb24uXG5cdCAqIE9ubHkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSBwdWJsaWMgYW5kIHN1cHBvcnRlZDpcblx0ICogPHVsPlxuXHQgKiA8bGk+aXNFZGl0YWJsZTogc2V0IHRvIHRydWUgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGluIGVkaXQgbW9kZTwvbGk+XG5cdCAqIDwvdWw+XG5cdCAqIDwvbGk+XG5cdCAqIDwvdWw+LlxuXHQgKiBlZGl0TW9kZSBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS4gVXNlIGlzRWRpdGFibGUgaW5zdGVhZC5cblx0ICogQHBhcmFtIHNNb2RlbE5hbWUgTmFtZSBvZiB0aGUgbW9kZWxcblx0ICogQHJldHVybnMgVGhlIHJlcXVpcmVkIG1vZGVsXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldE1vZGVsKHNNb2RlbE5hbWU/OiBzdHJpbmcpOiBNb2RlbCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9BcHBDb21wb25lbnQ7XG5cblx0XHRpZiAoc01vZGVsTmFtZSAmJiBzTW9kZWxOYW1lICE9PSBcInVpXCIpIHtcblx0XHRcdG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fdmlldyk7XG5cdFx0XHRpZiAoIW9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIikubW9kZWxzW3NNb2RlbE5hbWVdKSB7XG5cdFx0XHRcdC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBvdXIgaW50ZXJuYWwgbW9kZWxzXG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXcuZ2V0TW9kZWwoc01vZGVsTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGFueSBjb250cm9sIGFzIGEgZGVwZW5kZW50IGNvbnRyb2wgdG8gdGhpcyBTQVAgRmlvcmkgZWxlbWVudHMgcGFnZS5cblx0ICogQHBhcmFtIG9Db250cm9sIENvbnRyb2wgdG8gYmUgYWRkZWQgYXMgYSBkZXBlbmRlbnQgY29udHJvbFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhZGREZXBlbmRlbnQob0NvbnRyb2w6IENvbnRyb2wpOiB2b2lkIHtcblx0XHR0aGlzLl92aWV3LmFkZERlcGVuZGVudChvQ29udHJvbCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIGEgZGVwZW5kZW50IGNvbnRyb2wgZnJvbSB0aGlzIFNBUCBGaW9yaSBlbGVtZW50cyBwYWdlLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgQ29udHJvbCB0byBiZSBhZGRlZCBhcyBhIGRlcGVuZGVudCBjb250cm9sXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlbW92ZURlcGVuZGVudChvQ29udHJvbDogQ29udHJvbCk6IHZvaWQge1xuXHRcdHRoaXMuX3ZpZXcucmVtb3ZlRGVwZW5kZW50KG9Db250cm9sKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZSB0byBhbm90aGVyIHRhcmdldC5cblx0ICogQHBhcmFtIHNUYXJnZXQgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBbb0NvbnRleHRdIE9EYXRhIHY0IGNvbnRleHQgaW5zdGFuY2Vcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0bmF2aWdhdGVUb1RhcmdldChzVGFyZ2V0OiBzdHJpbmcsIG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQge1xuXHRcdHRoaXMuX2NvbnRyb2xsZXIuX3JvdXRpbmcubmF2aWdhdGVUb1RhcmdldChvQ29udGV4dCwgc1RhcmdldCk7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZCBhIGZyYWdtZW50IGFuZCBnbyB0aHJvdWdoIHRoZSB0ZW1wbGF0ZSBwcmVwcm9jZXNzb3Igd2l0aCB0aGUgY3VycmVudCBwYWdlIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBtU2V0dGluZ3MgVGhlIHNldHRpbmdzIG9iamVjdFxuXHQgKiBAcGFyYW0gbVNldHRpbmdzLmlkIFRoZSBJRCBvZiB0aGUgZnJhZ21lbnQgaXRzZWxmXG5cdCAqIEBwYXJhbSBtU2V0dGluZ3MubmFtZSBUaGUgbmFtZSBvZiB0aGUgZnJhZ21lbnQgdG8gYmUgbG9hZGVkXG5cdCAqIEBwYXJhbSBtU2V0dGluZ3MuY29udHJvbGxlciBUaGUgY29udHJvbGxlciB0byBiZSBhdHRhY2hlZCB0byB0aGUgZnJhZ21lbnRcblx0ICogQHBhcmFtIG1TZXR0aW5ncy5jb250ZXh0UGF0aCBUaGUgY29udGV4dFBhdGggdG8gYmUgdXNlZCBmb3IgdGhlIHRlbXBsYXRpbmcgcHJvY2Vzc1xuXHQgKiBAcGFyYW0gbVNldHRpbmdzLmluaXRpYWxCaW5kaW5nQ29udGV4dCBUaGUgaW5pdGlhbCBiaW5kaW5nIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGZyYWdtZW50IGRlZmluaXRpb25cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgbG9hZEZyYWdtZW50KG1TZXR0aW5nczoge1xuXHRcdGlkOiBzdHJpbmc7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGNvbnRyb2xsZXI/OiBvYmplY3Q7XG5cdFx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdFx0aW5pdGlhbEJpbmRpbmdDb250ZXh0PzogQ29udGV4dDtcblx0fSk6IFByb21pc2U8VUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXT4ge1xuXHRcdGNvbnN0IG9UZW1wbGF0ZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzLl92aWV3KSBhcyBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD47XG5cdFx0YXdhaXQgb1RlbXBsYXRlQ29tcG9uZW50LmdldFNlcnZpY2UoXCJ0ZW1wbGF0ZWRWaWV3U2VydmljZVwiKTtcblx0XHRjb25zdCBvUGFnZU1vZGVsID0gdGhpcy5fdmlldy5nZXRNb2RlbChcIl9wYWdlTW9kZWxcIik7XG5cdFx0Y29uc3QgaTE4bk1vZGVsID0gdGhpcy5fdmlldy5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVGVtcGxhdGVDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbVZpZXdEYXRhID0gb1RlbXBsYXRlQ29tcG9uZW50LmdldFZpZXdEYXRhKCk7XG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dFBhdGggPSBvVGVtcGxhdGVDb21wb25lbnQuZ2V0RW50aXR5U2V0KClcblx0XHRcdD8gYC8ke29UZW1wbGF0ZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQoKSF9YFxuXHRcdFx0OiBvVGVtcGxhdGVDb21wb25lbnQuZ2V0Q29udGV4dFBhdGgoKSE7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1WaWV3RGF0YSksXG5cdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChtU2V0dGluZ3MuY29udGV4dFBhdGggfHwgdGFyZ2V0Q29udGV4dFBhdGgpLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG9QYWdlTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIsIHVuZGVmaW5lZCwgeyBub1Jlc29sdmU6IHRydWUgfSksXG5cdFx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSA/IG9WaWV3RGF0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSA6IG51bGxcblx0XHRcdFx0fSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbCxcblx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0dmlld0RhdGE6IG9WaWV3RGF0YU1vZGVsLFxuXHRcdFx0XHRcdFwic2FwLmZlLmkxOG5cIjogaTE4bk1vZGVsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFwcENvbXBvbmVudDogQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX3ZpZXcpXG5cdFx0XHR9O1xuXG5cdFx0Ly8gV2Ugc2NvcGUgdGhlIGZyYWdtZW50IHdpdGggb3VyIEV4dGVuc2lvbkFQSS4gSWYgYSBjb250cm9sbGVyIG9iamVjdCBpcyBwYXNzZWQgd2UgbWVyZ2UgaXQgd2l0aCB0aGUgZXh0ZW5zaW9uQVBJXG5cdFx0bGV0IGNvbnRyb2xsZXJJbnN0YW5jZTogRXh0ZW5zaW9uQVBJO1xuXHRcdGlmIChtU2V0dGluZ3MuY29udHJvbGxlciAmJiAhKG1TZXR0aW5ncy5jb250cm9sbGVyIGFzIEV4dGVuc2lvbkFQSSk/LmlzQT8uKFwic2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJXCIpKSB7XG5cdFx0XHRjb25zdCBzdWJDbGFzcyA9IChcblx0XHRcdFx0dGhpcy5nZXRNZXRhZGF0YSgpLmdldENsYXNzKCkgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRcdFx0ZXh0ZW5kOiAoaWQ6IHN0cmluZywgY29udGVudDogb2JqZWN0KSA9PiB7IG5ldyAocGFnZUNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKTogRXh0ZW5zaW9uQVBJIH07XG5cdFx0XHRcdH1cblx0XHRcdCkuZXh0ZW5kKG1TZXR0aW5ncy5pZCArIFwiLWNvbnRyb2xsZXJcIiwge30pO1xuXHRcdFx0Zm9yIChjb25zdCBjb250cm9sbGVyRWxlbWVudEtleSBpbiBtU2V0dGluZ3MuY29udHJvbGxlcikge1xuXHRcdFx0XHRjb25zdCBjb250cm9sbGVyRWxlbWVudCA9IG1TZXR0aW5ncy5jb250cm9sbGVyW2NvbnRyb2xsZXJFbGVtZW50S2V5IGFzIGtleW9mIHR5cGVvZiBtU2V0dGluZ3MuY29udHJvbGxlcl07XG5cdFx0XHRcdGlmICgoY29udHJvbGxlckVsZW1lbnQgYXMgRnVuY3Rpb24pPy5iaW5kKSB7XG5cdFx0XHRcdFx0Y29uc3QgYm91bmRGdW5jdGlvbiA9IChjb250cm9sbGVyRWxlbWVudCBhcyBGdW5jdGlvbikuYmluZChtU2V0dGluZ3MuY29udHJvbGxlcik7XG5cdFx0XHRcdFx0aWYgKG9UZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0XHRcdFx0c3ViQ2xhc3MucHJvdG90eXBlW2NvbnRyb2xsZXJFbGVtZW50S2V5XSA9ICguLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9UZW1wbGF0ZUNvbXBvbmVudC5ydW5Bc093bmVyKCgpID0+IGJvdW5kRnVuY3Rpb24uYXBwbHkodGhpcywgYXJncykpO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3ViQ2xhc3MucHJvdG90eXBlW2NvbnRyb2xsZXJFbGVtZW50S2V5XSA9IGJvdW5kRnVuY3Rpb247XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcy5wcm90b3R5cGUsIGNvbnRyb2xsZXJFbGVtZW50S2V5LCB7XG5cdFx0XHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBtU2V0dGluZ3MuY29udHJvbGxlcj8uW2NvbnRyb2xsZXJFbGVtZW50S2V5IGFzIGtleW9mIHR5cGVvZiBtU2V0dGluZ3MuY29udHJvbGxlcl07XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0c2V0KHY6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdFx0aWYgKG1TZXR0aW5ncy5jb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0KG1TZXR0aW5ncy5jb250cm9sbGVyW2NvbnRyb2xsZXJFbGVtZW50S2V5IGFzIGtleW9mIHR5cGVvZiBtU2V0dGluZ3MuY29udHJvbGxlcl0gYXMgdW5rbm93bikgPSB2O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnRyb2xsZXJJbnN0YW5jZSA9IG5ldyBzdWJDbGFzcyh0aGlzLl9jb250cm9sbGVyKTtcblx0XHRcdGNvbnN0IG5ld0lzQSA9IGNvbnRyb2xsZXJJbnN0YW5jZS5pc0E7XG5cdFx0XHRjb250cm9sbGVySW5zdGFuY2UuaXNBID0gKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG5cdFx0XHRcdC8vIFdlIGtlZXAgdGhlIFx0c2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJIGFzIGEgdmFsaWQgdHlwZSBmb3IgdGhpcyBuZXcgY2xhc3Ncblx0XHRcdFx0Ly8gdGhpcyB0eXBlIGlzIGxvc3QgYXMgc29vbiBhcyB0aGUgbWVyZ2VkIGNvbnRyb2xsZXIgb2JqZWN0IGdldHMgYSBtZXRob2QgaXNBXG5cdFx0XHRcdHJldHVybiBuZXdJc0EuYmluZChjb250cm9sbGVySW5zdGFuY2UpKGNsYXNzTmFtZSkgfHwgdGhpcy5pc0EoY2xhc3NOYW1lKTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRyb2xsZXJJbnN0YW5jZSA9IChtU2V0dGluZ3MuY29udHJvbGxlciBhcyBFeHRlbnNpb25BUEkpID8/IHRoaXM7XG5cdFx0fVxuXHRcdHJldHVybiBvVGVtcGxhdGVDb21wb25lbnQucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRjb25zdCBvVGVtcGxhdGVQcm9taXNlID0gQ29tbW9uVXRpbHMudGVtcGxhdGVDb250cm9sRnJhZ21lbnQobVNldHRpbmdzLm5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywge1xuXHRcdFx0XHRjb250cm9sbGVyOiBjb250cm9sbGVySW5zdGFuY2UsXG5cdFx0XHRcdGlzWE1MOiBmYWxzZSxcblx0XHRcdFx0aWQ6IG1TZXR0aW5ncy5pZCxcblx0XHRcdFx0Y29udGFpbmluZ1ZpZXc6IHRoaXMuX3ZpZXcsXG5cdFx0XHRcdGNvbnRleHRQYXRoOiBtU2V0dGluZ3MuY29udGV4dFBhdGggPz8gdGFyZ2V0Q29udGV4dFBhdGhcblx0XHRcdH0pIGFzIFByb21pc2U8Q29udHJvbD47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBvRnJhZ21lbnQ6IENvbnRyb2wgPSBhd2FpdCBvVGVtcGxhdGVQcm9taXNlO1xuXHRcdFx0XHRpZiAobVNldHRpbmdzLmluaXRpYWxCaW5kaW5nQ29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0b0ZyYWdtZW50LnNldEJpbmRpbmdDb250ZXh0KG1TZXR0aW5ncy5pbml0aWFsQmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuYWRkRGVwZW5kZW50KG9GcmFnbWVudCk7XG5cdFx0XHRcdHJldHVybiBvRnJhZ21lbnQ7XG5cdFx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH0pIGFzIFByb21pc2U8VUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXT47XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgYW4gdXBkYXRlIG9mIHRoZSBhcHAgc3RhdGUuXG5cdCAqIFNob3VsZCBiZSBjYWxsZWQgaWYgdGhlIHN0YXRlIG9mIGEgY29udHJvbCwgb3IgYW55IG90aGVyIHN0YXRlLXJlbGV2YW50IGluZm9ybWF0aW9uLCB3YXMgY2hhbmdlZC5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgbmV3IGFwcCBzdGF0ZSBvYmplY3QuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHVwZGF0ZUFwcFN0YXRlKCk6IFByb21pc2U8dm9pZCB8IHsgYXBwU3RhdGU6IG9iamVjdCB8IHVuZGVmaW5lZCB9PiB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuX2NvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuX2NvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgYXBwU3RhdGVJbmZvID0gYXdhaXQgYXBwQ29tcG9uZW50LmdldEFwcFN0YXRlSGFuZGxlcigpLmNyZWF0ZUFwcFN0YXRlKHtcblx0XHRcdHZpZXdJZDogdmlldy5nZXRJZCgpXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFwcFN0YXRlSW5mbz8uYXBwU3RhdGVEYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1biB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCB0aGUgRlBNIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cblx0ICogVGhpcyBhbGxvd3MgdG8gaW5pdGlhbGl6ZSBhbGwgdGhlIGVsZW1lbnRzIHJlcXVpcmVkIGJ5IGJ1aWxkaW5nIGJsb2NrcyB0byByZW5kZXIgY29ycmVjdGx5LlxuXHQgKiBAcGFyYW0gZm4gVGhlIEZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJ1bldpdGhGUE1Db250ZXh0KGZuOiBGdW5jdGlvbik6IHVua25vd24ge1xuXHRcdGNvbnN0IHRlbXBsYXRlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMuX3ZpZXcpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50Pjtcblx0XHRyZXR1cm4gdGVtcGxhdGVDb21wb25lbnQucnVuQXNPd25lcihmbiBhcyBUU0Z1bmN0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXYXRjaCBhIHByb3BlcnR5IGZyb20gdGhlIG1haW4gcGFnZSBjb250ZXh0IGFuZCB0cmlnZ2VyIGEgY2FsbGJhY2sgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy5cblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gd2F0Y2hcblx0ICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byB0cmlnZ2VyIHdoZW4gdGhlIHZhbHVlIGNoYW5nZXNcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0d2F0Y2hQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZywgY2FsbGJhY2s6IFdhdGNoZXJDYWxsYmFjayk6IHZvaWQge1xuXHRcdHRoaXMuX3ZpZXcuYWRkRGVwZW5kZW50KFxuXHRcdFx0bmV3IERhdGFXYXRjaGVyKHtcblx0XHRcdFx0cHJvcGVydHlCaW5kaW5nOiBjb21waWxlRXhwcmVzc2lvbihwYXRoSW5Nb2RlbChwcm9wZXJ0eU5hbWUpKSxcblx0XHRcdFx0dmFsdWVDaGFuZ2VkOiAoZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNhbGxiYWNrKGUuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIiksIGUuZ2V0UGFyYW1ldGVyKFwib2xkVmFsdWVcIiksIGUuZ2V0UGFyYW1ldGVyKFwiaXNJbml0aWFsXCIpLCBlLmdldFBhcmFtZXRlcihcImNvbnRleHRcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXh0ZW5zaW9uQVBJO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQWtDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFSQSxJQVVNQSxZQUFZLElBQUFDLElBQUEsR0FEakJDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFBQyxLQUFBLEdBT3pDQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQTRDLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBUS9ERixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQTJDLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBTzlESCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQXlELENBQUMsQ0FBQyxFQUFBRyxLQUFBLEdBUzVFSixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQXNELENBQUMsQ0FBQyxFQUFBSixJQUFBLENBQUFRLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsV0FBQTtJQXdCMUUsU0FBQVgsYUFBWVksV0FBMkIsRUFBRUMsR0FBWSxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUN0REEsS0FBQSxHQUFBSCxXQUFBLENBQUFJLElB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
364
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHRlbnNpb25BUEkiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsIl9kZWMzIiwiX2RlYzQiLCJfZGVjNSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQmFzZU9iamVjdCIsIm9Db250cm9sbGVyIiwic0lkIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9mb3JtYXR0ZXJzIiwiU2NvcGUiLCJfY29udHJvbGxlciIsIl92aWV3IiwiZ2V0VmlldyIsImV4dGVuc2lvbiIsImVkaXRGbG93Iiwicm91dGluZyIsImludGVudEJhc2VkTmF2aWdhdGlvbiIsImNvbGxhYm9yYXRpdmVEcmFmdCIsIl9yb3V0aW5nIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIl9wcmVmaXgiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldEVkaXRGbG93IiwiZ2V0Um91dGluZyIsImdldEludGVudEJhc2VkTmF2aWdhdGlvbiIsImJ5SWQiLCJpZCIsImNvbnRyb2wiLCJ1bmRlZmluZWQiLCJpc0EiLCJwYXJlbnQiLCJnZXRQYXJlbnQiLCJFcnJvciIsImdldElkIiwiZ2V0TW9kZWwiLCJzTW9kZWxOYW1lIiwib0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm1vZGVscyIsImFkZERlcGVuZGVudCIsIm9Db250cm9sIiwicmVtb3ZlRGVwZW5kZW50IiwibmF2aWdhdGVUb1RhcmdldCIsInNUYXJnZXQiLCJvQ29udGV4dCIsImxvYWRGcmFnbWVudCIsIm1TZXR0aW5ncyIsIl90aGlzMiIsIm9UZW1wbGF0ZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiZ2V0U2VydmljZSIsIm9QYWdlTW9kZWwiLCJpMThuTW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibVZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ0YXJnZXRDb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsImdldENvbnRleHRQYXRoIiwib1ZpZXdEYXRhTW9kZWwiLCJKU09OTW9kZWwiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJjb250ZXh0UGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiY29udmVydGVyQ29udGV4dCIsIm5vUmVzb2x2ZSIsInZpZXdEYXRhIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiY29udHJvbGxlckluc3RhbmNlIiwiY29udHJvbGxlciIsInN1YkNsYXNzIiwiZ2V0TWV0YWRhdGEiLCJnZXRDbGFzcyIsImV4dGVuZCIsImNvbnRyb2xsZXJFbGVtZW50S2V5IiwiY29udHJvbGxlckVsZW1lbnQiLCJiaW5kIiwiYm91bmRGdW5jdGlvbiIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwicnVuQXNPd25lciIsImFwcGx5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJzZXQiLCJ2IiwibmV3SXNBIiwiY2xhc3NOYW1lIiwib1RlbXBsYXRlUHJvbWlzZSIsInRlbXBsYXRlQ29udHJvbEZyYWdtZW50IiwibmFtZSIsImlzWE1MIiwiY29udGFpbmluZ1ZpZXciLCJvRnJhZ21lbnQiLCJpbml0aWFsQmluZGluZ0NvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwidXBkYXRlQXBwU3RhdGUiLCJ2aWV3IiwiYXBwU3RhdGVJbmZvIiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiY3JlYXRlQXBwU3RhdGUiLCJ2aWV3SWQiLCJhcHBTdGF0ZURhdGEiLCJydW5XaXRoRlBNQ29udGV4dCIsImZuIiwidGVtcGxhdGVDb21wb25lbnQiLCJ3YXRjaFByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiY2FsbGJhY2siLCJEYXRhV2F0Y2hlciIsInByb3BlcnR5QmluZGluZyIsImNvbXBpbGVFeHByZXNzaW9uIiwicGF0aEluTW9kZWwiLCJ2YWx1ZUNoYW5nZWQiLCJlIiwiZ2V0UGFyYW1ldGVyIiwiQmFzZU9iamVjdCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRXh0ZW5zaW9uQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvRWRpdEZsb3dcIjtcbmltcG9ydCB0eXBlIEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IHR5cGUgUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUm91dGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBXYXRjaGVyQ2FsbGJhY2sgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRGF0YVdhdGNoZXJcIjtcbmltcG9ydCBEYXRhV2F0Y2hlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRGF0YVdhdGNoZXJcIjtcbmltcG9ydCBTY29wZSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9TY29wZVwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEZvcm1BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtQVBJXCI7XG5pbXBvcnQgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBUU0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ29sbGFib3JhdGl2ZURyYWZ0IGZyb20gXCIuL2NvbnRyb2xsZXJleHRlbnNpb25zL0NvbGxhYm9yYXRpdmVEcmFmdFwiO1xuaW1wb3J0IHR5cGUgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcIi4vY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcblxuLyoqXG4gKiBDb21tb24gRXh0ZW5zaW9uIEFQSSBmb3IgYWxsIHBhZ2VzIG9mIFNBUCBGaW9yaSBlbGVtZW50cyBmb3IgT0RhdGEgVjQuXG4gKlxuICogVG8gY29ycmVjdGx5IGludGVncmF0ZSB5b3VyIGFwcCBleHRlbnNpb24gY29kaW5nIHdpdGggU0FQIEZpb3JpIGVsZW1lbnRzLCB1c2Ugb25seSB0aGUgZXh0ZW5zaW9uQVBJIG9mIFNBUCBGaW9yaSBlbGVtZW50cy4gRG9uJ3QgYWNjZXNzIG9yIG1hbmlwdWxhdGUgY29udHJvbHMsIHByb3BlcnRpZXMsIG1vZGVscywgb3Igb3RoZXIgaW50ZXJuYWwgb2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSBTQVAgRmlvcmkgZWxlbWVudHMgZnJhbWV3b3JrLlxuICoge0BsaW5rIGRlbW86c2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvY29udHJvbGxlckV4dGVuc2lvbnMvY29udHJvbGxlckV4dGVuc2lvbnNPdmVydmlldyBPdmVydmlldyBvZiBCdWlsZGluZyBCbG9ja31cbiAqIEBwdWJsaWNcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBzaW5jZSAxLjc5LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJXCIpXG5jbGFzcyBFeHRlbnNpb25BUEkgZXh0ZW5kcyBCYXNlT2JqZWN0IHtcblx0LyoqXG5cdCAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgaG9va3MgaW50byB0aGUgZWRpdCBmbG93IG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICoge0BsaW5rIGRlbW86c2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvY29udHJvbGxlckV4dGVuc2lvbnMvYmFzaWNFeHRlbnNpYmlsaXR5IE92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2NrfVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XCIgfSlcblx0ZWRpdEZsb3c6IEVkaXRGbG93O1xuXG5cdC8qKlxuXHQgKiBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9mZmVyaW5nIGhvb2tzIGludG8gdGhlIHJvdXRpbmcgZmxvdyBvZiB0aGUgYXBwbGljYXRpb24uXG5cdCAqIHtAbGluayBkZW1vOnNhcC9mZS9jb3JlL2ZwbUV4cGxvcmVyL2luZGV4Lmh0bWwjL2NvbnRyb2xsZXJFeHRlbnNpb25zL3JvdXRpbmdFeHRlbnNpYmlsaXR5IE92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2NrfVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlJvdXRpbmdcIiB9KVxuXHRyb3V0aW5nOiBSb3V0aW5nO1xuXG5cdC8qKlxuXHQgKiBFeHRlbnNpb25BUEkgZm9yIGludGVudC1iYXNlZCBuYXZpZ2F0aW9uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZW50QmFzZWROYXZpZ2F0aW9uXCIgfSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0LyoqXG5cdCAqIEV4dGVuc2lvbkFQSSBmb3IgY29sbGFib3JhdGl2ZSBkcmFmdCBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQxLjBcblx0ICogQHNpbmNlIDEuMTQxLjBcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuQ29sbGFib3JhdGl2ZURyYWZ0XCIgfSlcblx0Y29sbGFib3JhdGl2ZURyYWZ0OiBDb2xsYWJvcmF0aXZlRHJhZnQ7XG5cblx0cHVibGljIF9jb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcm90ZWN0ZWQgX3ZpZXc6IEZFVmlldztcblxuXHRwcml2YXRlIF9yb3V0aW5nOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0cHJpdmF0ZSBfaW50ZW50QmFzZWROYXZpZ2F0aW9uOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRwcml2YXRlIF9wcmVmaXg/OiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBleHRlbnNpb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5cdHByb3RlY3RlZCBfZm9ybWF0dGVycyA9IFNjb3BlLl9mb3JtYXR0ZXJzO1xuXG5cdGNvbnN0cnVjdG9yKG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgc0lkPzogc3RyaW5nKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9jb250cm9sbGVyID0gb0NvbnRyb2xsZXI7XG5cdFx0dGhpcy5fdmlldyA9IG9Db250cm9sbGVyLmdldFZpZXcoKTtcblx0XHR0aGlzLmV4dGVuc2lvbiA9IHRoaXMuX2NvbnRyb2xsZXIuZXh0ZW5zaW9uO1xuXHRcdHRoaXMuZWRpdEZsb3cgPSB0aGlzLl9jb250cm9sbGVyLmVkaXRGbG93O1xuXHRcdHRoaXMucm91dGluZyA9IHRoaXMuX2NvbnRyb2xsZXIucm91dGluZztcblx0XHR0aGlzLmludGVudEJhc2VkTmF2aWdhdGlvbiA9IHRoaXMuX2NvbnRyb2xsZXIuaW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0ID0gdGhpcy5fY29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQ7XG5cblx0XHQvLyBTZXR0aW5nIGludGVybmFsIGNvbnRyb2xsZXIgZXh0ZW5zaW9ucyBmb3IgZGVmYXVsdCBidWlsZGluZyBibG9jayBoYW5kbGVyIHRvIHdvcmsgd2hlbiB1c2luZyBFeHRlbnNpb25BUEkgYXMgY29udHJvbGxlciBpbiBjdXN0b20gZnJhZ21lbnQgc2NuZWFyaW9zLlxuXHRcdHRoaXMuX3JvdXRpbmcgPSB0aGlzLl9jb250cm9sbGVyLl9yb3V0aW5nO1xuXHRcdHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbiA9IHRoaXMuX2NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0XHR0aGlzLl9wcmVmaXggPSBzSWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBlZGl0RmxvdyBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3IgdGhpcyBwYWdlLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIFRoZSBlZGl0RmxvdyBjb250cm9sbGVyIGV4dGVuc2lvblxuXHQgKi9cblx0Z2V0RWRpdEZsb3coKTogRWRpdEZsb3cge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgcm91dGluZyBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3IgdGhpcyBwYWdlLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIFRoZSByb3V0aW5nIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5cdCAqL1xuXHRnZXRSb3V0aW5nKCk6IFJvdXRpbmcge1xuXHRcdHJldHVybiB0aGlzLnJvdXRpbmc7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBpbnRlbnRCYXNlZE5hdmlnYXRpb24gY29udHJvbGxlciBleHRlbnNpb24gZm9yIHRoaXMgcGFnZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgaW50ZW50QmFzZWROYXZpZ2F0aW9uIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5cdCAqL1xuXHRnZXRJbnRlbnRCYXNlZE5hdmlnYXRpb24oKTogSW50ZW50QmFzZWROYXZpZ2F0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdH1cblxuXHQvKipcblx0ICogQWNjZXNzIGEgY29udHJvbCBieSBpdHMgSUQuIElmIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBhbiBpbnRlcm5hbCBjb250cm9sIGluc3RlYWQgb2YgdGhlIHN0YWJsZSBBUEksIHRoZSBtZXRob2Qgd2lsbCByYWlzZSBhbiBlcnJvci5cblx0ICogQHBhcmFtIGlkIElEIG9mIHRoZSBjb250cm9sIHdpdGhvdXQgdmlldyBhbmQgc2VjdGlvbiBwcmVmaXguXG5cdCAqIEByZXR1cm5zIFRoZSByZXF1ZXN0ZWQgY29udHJvbCwgaWYgZm91bmQgaW4gdGhlIHZpZXcgLyBzZWN0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRieUlkKGlkOiBzdHJpbmcpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgY29udHJvbCA9IHRoaXMuX3ZpZXcuYnlJZChpZCk7XG5cblx0XHRpZiAoIWNvbnRyb2wgJiYgdGhpcy5fcHJlZml4KSB7XG5cdFx0XHQvLyBnaXZlIGl0IGEgdHJ5IHdpdGggdGhlIHByZWZpeFxuXHRcdFx0Y29udHJvbCA9IHRoaXMuX3ZpZXcuYnlJZChgJHt0aGlzLl9wcmVmaXh9LS0ke2lkfWApO1xuXHRcdH1cblxuXHRcdGlmICghY29udHJvbCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoIWNvbnRyb2wuaXNBPE1hY3JvQVBJPihcInNhcC5mZS5tYWNyb3MuTWFjcm9BUElcIikpIHtcblx0XHRcdC8vIGNoZWNrIGlmIGFwcCB0cmllZCB0byBhY2Nlc3MgYW4gaW50ZXJuYWwgY29udHJvbCB3cmFwcGVkIGJ5IGEgbWFjcm8gQVBJXG5cdFx0XHRsZXQgcGFyZW50ID0gY29udHJvbC5nZXRQYXJlbnQoKTtcblxuXHRcdFx0d2hpbGUgKHBhcmVudCkge1xuXHRcdFx0XHRpZiAocGFyZW50LmlzQTxGb3JtQVBJPihcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQVBJXCIpKSB7XG5cdFx0XHRcdFx0Ly8gd2UgcmVhY2hlZCB0aGUgZm9ybUFQSSBidXQgbm8gZmllbGQgLSB0aGUgYXBwIHRyaWVzIHRvIGFjY2VzcyBhbnkgY3VzdG9tIGNvbnRyb2wgd2hpY2ggaXMgZmluZVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHBhcmVudC5pc0E8TWFjcm9BUEk+KFwic2FwLmZlLm1hY3Jvcy5NYWNyb0FQSVwiKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdGBZb3UgYXR0ZW1wdGVkIHRvIGFjY2VzcyBhbiBpbnRlcm5hbCBjb250cm9sLiBUaGlzIGlzIHJpc2t5IGFuZCBtaWdodCBjaGFuZ2UgbGF0ZXIuIEluc3RlYWQgYWNjZXNzIGl0cyBzdGFibGUgQVBJIGJ5IHVzaW5nIElEICR7cGFyZW50LmdldElkKCl9YFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRyb2w7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGFjY2VzcyB0byBtb2RlbHMgbWFuYWdlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMuPGJyPlxuXHQgKiBUaGUgZm9sbG93aW5nIG1vZGVscyBjYW4gYmUgYWNjZXNzZWQ6XG5cdCAqIDx1bD5cblx0ICogPGxpPnVuZGVmaW5lZDogdGhlIHVuZGVmaW5lZCBtb2RlbCByZXR1cm5zIHRoZSBTQVBVSTUgT0RhdGEgVjQgbW9kZWwgYm91bmQgdG8gdGhpcyBwYWdlPC9saT5cblx0ICogPGxpPmkxOG4gLyBmdXJ0aGVyIGRhdGEgbW9kZWxzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0PC9saT5cblx0ICogPGxpPnVpOiByZXR1cm5zIGEgU0FQVUk1IEpTT04gbW9kZWwgY29udGFpbmluZyBVSSBpbmZvcm1hdGlvbi5cblx0ICogT25seSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIHB1YmxpYyBhbmQgc3VwcG9ydGVkOlxuXHQgKiA8dWw+XG5cdCAqIDxsaT5pc0VkaXRhYmxlOiBzZXQgdG8gdHJ1ZSBpZiB0aGUgYXBwbGljYXRpb24gaXMgaW4gZWRpdCBtb2RlPC9saT5cblx0ICogPC91bD5cblx0ICogPC9saT5cblx0ICogPC91bD4uXG5cdCAqIGVkaXRNb2RlIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgaXNFZGl0YWJsZSBpbnN0ZWFkLlxuXHQgKiBAcGFyYW0gc01vZGVsTmFtZSBOYW1lIG9mIHRoZSBtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgcmVxdWlyZWQgbW9kZWxcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0TW9kZWwoc01vZGVsTmFtZT86IHN0cmluZyk6IE1vZGVsIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgb0FwcENvbXBvbmVudDtcblxuXHRcdGlmIChzTW9kZWxOYW1lICYmIHNNb2RlbE5hbWUgIT09IFwidWlcIikge1xuXHRcdFx0b0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLl92aWV3KTtcblx0XHRcdGlmICghb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5tb2RlbHNbc01vZGVsTmFtZV0pIHtcblx0XHRcdFx0Ly8gZG9uJ3QgYWxsb3cgYWNjZXNzIHRvIG91ciBpbnRlcm5hbCBtb2RlbHNcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fdmlldy5nZXRNb2RlbChzTW9kZWxOYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYW55IGNvbnRyb2wgYXMgYSBkZXBlbmRlbnQgY29udHJvbCB0byB0aGlzIFNBUCBGaW9yaSBlbGVtZW50cyBwYWdlLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgQ29udHJvbCB0byBiZSBhZGRlZCBhcyBhIGRlcGVuZGVudCBjb250cm9sXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZERlcGVuZGVudChvQ29udHJvbDogQ29udHJvbCk6IHZvaWQge1xuXHRcdHRoaXMuX3ZpZXcuYWRkRGVwZW5kZW50KG9Db250cm9sKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYSBkZXBlbmRlbnQgY29udHJvbCBmcm9tIHRoaXMgU0FQIEZpb3JpIGVsZW1lbnRzIHBhZ2UuXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBDb250cm9sIHRvIGJlIGFkZGVkIGFzIGEgZGVwZW5kZW50IGNvbnRyb2xcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cmVtb3ZlRGVwZW5kZW50KG9Db250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0dGhpcy5fdmlldy5yZW1vdmVEZXBlbmRlbnQob0NvbnRyb2wpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlIHRvIGFub3RoZXIgdGFyZ2V0LlxuXHQgKiBAcGFyYW0gc1RhcmdldCBOYW1lIG9mIHRoZSB0YXJnZXQgcm91dGVcblx0ICogQHBhcmFtIFtvQ29udGV4dF0gT0RhdGEgdjQgY29udGV4dCBpbnN0YW5jZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0KHNUYXJnZXQ6IHN0cmluZywgb0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogdm9pZCB7XG5cdFx0dGhpcy5fY29udHJvbGxlci5fcm91dGluZy5uYXZpZ2F0ZVRvVGFyZ2V0KG9Db250ZXh0LCBzVGFyZ2V0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkIGEgZnJhZ21lbnQgYW5kIGdvIHRocm91Z2ggdGhlIHRlbXBsYXRlIHByZXByb2Nlc3NvciB3aXRoIHRoZSBjdXJyZW50IHBhZ2UgY29udGV4dC5cblx0ICogQHBhcmFtIG1TZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2JqZWN0XG5cdCAqIEBwYXJhbSBtU2V0dGluZ3MuaWQgVGhlIElEIG9mIHRoZSBmcmFnbWVudCBpdHNlbGZcblx0ICogQHBhcmFtIG1TZXR0aW5ncy5uYW1lIFRoZSBuYW1lIG9mIHRoZSBmcmFnbWVudCB0byBiZSBsb2FkZWRcblx0ICogQHBhcmFtIG1TZXR0aW5ncy5jb250cm9sbGVyIFRoZSBjb250cm9sbGVyIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBmcmFnbWVudFxuXHQgKiBAcGFyYW0gbVNldHRpbmdzLmNvbnRleHRQYXRoIFRoZSBjb250ZXh0UGF0aCB0byBiZSB1c2VkIGZvciB0aGUgdGVtcGxhdGluZyBwcm9jZXNzXG5cdCAqIEBwYXJhbSBtU2V0dGluZ3MuaW5pdGlhbEJpbmRpbmdDb250ZXh0IFRoZSBpbml0aWFsIGJpbmRpbmcgY29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgZnJhZ21lbnQgZGVmaW5pdGlvblxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBsb2FkRnJhZ21lbnQobVNldHRpbmdzOiB7XG5cdFx0aWQ6IHN0cmluZztcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0Y29udHJvbGxlcj86IG9iamVjdDtcblx0XHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0XHRpbml0aWFsQmluZGluZ0NvbnRleHQ/OiBDb250ZXh0O1xuXHR9KTogUHJvbWlzZTxVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdPiB7XG5cdFx0Y29uc3Qgb1RlbXBsYXRlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMuX3ZpZXcpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50Pjtcblx0XHRhd2FpdCBvVGVtcGxhdGVDb21wb25lbnQuZ2V0U2VydmljZShcInRlbXBsYXRlZFZpZXdTZXJ2aWNlXCIpO1xuXHRcdGNvbnN0IG9QYWdlTW9kZWwgPSB0aGlzLl92aWV3LmdldE1vZGVsKFwiX3BhZ2VNb2RlbFwiKTtcblx0XHRjb25zdCBpMThuTW9kZWwgPSB0aGlzLl92aWV3LmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIik7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9UZW1wbGF0ZUNvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBtVmlld0RhdGEgPSBvVGVtcGxhdGVDb21wb25lbnQuZ2V0Vmlld0RhdGEoKTtcblx0XHRjb25zdCB0YXJnZXRDb250ZXh0UGF0aCA9IG9UZW1wbGF0ZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQoKVxuXHRcdFx0PyBgLyR7b1RlbXBsYXRlQ29tcG9uZW50LmdldEVudGl0eVNldCgpIX1gXG5cdFx0XHQ6IG9UZW1wbGF0ZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCgpITtcblx0XHRjb25zdCBvVmlld0RhdGFNb2RlbCA9IG5ldyBKU09OTW9kZWwobVZpZXdEYXRhKSxcblx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9NZXRhTW9kZWw/LmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1TZXR0aW5ncy5jb250ZXh0UGF0aCB8fCB0YXJnZXRDb250ZXh0UGF0aCksXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiwgdW5kZWZpbmVkLCB7IG5vUmVzb2x2ZTogdHJ1ZSB9KSxcblx0XHRcdFx0XHR2aWV3RGF0YTogbVZpZXdEYXRhID8gb1ZpZXdEYXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIDogbnVsbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBvUGFnZU1vZGVsLFxuXHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHR2aWV3RGF0YTogb1ZpZXdEYXRhTW9kZWwsXG5cdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBpMThuTW9kZWxcblx0XHRcdFx0fSxcblx0XHRcdFx0YXBwQ29tcG9uZW50OiBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fdmlldylcblx0XHRcdH07XG5cblx0XHQvLyBXZSBzY29wZSB0aGUgZnJhZ21lbnQgd2l0aCBvdXIgRXh0ZW5zaW9uQVBJLiBJZiBhIGNvbnRyb2xsZXIgb2JqZWN0IGlzIHBhc3NlZCB3ZSBtZXJnZSBpdCB3aXRoIHRoZSBleHRlbnNpb25BUElcblx0XHRsZXQgY29udHJvbGxlckluc3RhbmNlOiBFeHRlbnNpb25BUEk7XG5cdFx0aWYgKG1TZXR0aW5ncy5jb250cm9sbGVyICYmICEobVNldHRpbmdzLmNvbnRyb2xsZXIgYXMgRXh0ZW5zaW9uQVBJKT8uaXNBPy4oXCJzYXAuZmUuY29yZS5FeHRlbnNpb25BUElcIikpIHtcblx0XHRcdGNvbnN0IHN1YkNsYXNzID0gKFxuXHRcdFx0XHR0aGlzLmdldE1ldGFkYXRhKCkuZ2V0Q2xhc3MoKSBhcyB1bmtub3duIGFzIHtcblx0XHRcdFx0XHRleHRlbmQ6IChpZDogc3RyaW5nLCBjb250ZW50OiBvYmplY3QpID0+IHsgbmV3IChwYWdlQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBFeHRlbnNpb25BUEkgfTtcblx0XHRcdFx0fVxuXHRcdFx0KS5leHRlbmQobVNldHRpbmdzLmlkICsgXCItY29udHJvbGxlclwiLCB7fSk7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbnRyb2xsZXJFbGVtZW50S2V5IGluIG1TZXR0aW5ncy5jb250cm9sbGVyKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXJFbGVtZW50ID0gbVNldHRpbmdzLmNvbnRyb2xsZXJbY29udHJvbGxlckVsZW1lbnRLZXkgYXMga2V5b2YgdHlwZW9mIG1TZXR0aW5ncy5jb250cm9sbGVyXTtcblx0XHRcdFx0aWYgKChjb250cm9sbGVyRWxlbWVudCBhcyBGdW5jdGlvbik/LmJpbmQpIHtcblx0XHRcdFx0XHRjb25zdCBib3VuZEZ1bmN0aW9uID0gKGNvbnRyb2xsZXJFbGVtZW50IGFzIEZ1bmN0aW9uKS5iaW5kKG1TZXR0aW5ncy5jb250cm9sbGVyKTtcblx0XHRcdFx0XHRpZiAob1RlbXBsYXRlQ29tcG9uZW50KSB7XG5cdFx0XHRcdFx0XHRzdWJDbGFzcy5wcm90b3R5cGVbY29udHJvbGxlckVsZW1lbnRLZXldID0gKC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd24gPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1RlbXBsYXRlQ29tcG9uZW50LnJ1bkFzT3duZXIoKCkgPT4gYm91bmRGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmdzKSk7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdWJDbGFzcy5wcm90b3R5cGVbY29udHJvbGxlckVsZW1lbnRLZXldID0gYm91bmRGdW5jdGlvbjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLnByb3RvdHlwZSwgY29udHJvbGxlckVsZW1lbnRLZXksIHtcblx0XHRcdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG1TZXR0aW5ncy5jb250cm9sbGVyPy5bY29udHJvbGxlckVsZW1lbnRLZXkgYXMga2V5b2YgdHlwZW9mIG1TZXR0aW5ncy5jb250cm9sbGVyXTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRzZXQodjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0XHRpZiAobVNldHRpbmdzLmNvbnRyb2xsZXIpIHtcblx0XHRcdFx0XHRcdFx0XHQobVNldHRpbmdzLmNvbnRyb2xsZXJbY29udHJvbGxlckVsZW1lbnRLZXkgYXMga2V5b2YgdHlwZW9mIG1TZXR0aW5ncy5jb250cm9sbGVyXSBhcyB1bmtub3duKSA9IHY7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29udHJvbGxlckluc3RhbmNlID0gbmV3IHN1YkNsYXNzKHRoaXMuX2NvbnRyb2xsZXIpO1xuXHRcdFx0Y29uc3QgbmV3SXNBID0gY29udHJvbGxlckluc3RhbmNlLmlzQTtcblx0XHRcdGNvbnRyb2xsZXJJbnN0YW5jZS5pc0EgPSAoY2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblx0XHRcdFx0Ly8gV2Uga2VlcCB0aGUgXHRzYXAuZmUuY29yZS5FeHRlbnNpb25BUEkgYXMgYSB2YWxpZCB0eXBlIGZvciB0aGlzIG5ldyBjbGFzc1xuXHRcdFx0XHQvLyB0aGlzIHR5cGUgaXMgbG9zdCBhcyBzb29uIGFzIHRoZSBtZXJnZWQgY29udHJvbGxlciBvYmplY3QgZ2V0cyBhIG1ldGhvZCBpc0Fcblx0XHRcdFx0cmV0dXJuIG5ld0lzQS5iaW5kKGNvbnRyb2xsZXJJbnN0YW5jZSkoY2xhc3NOYW1lKSB8fCB0aGlzLmlzQShjbGFzc05hbWUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udHJvbGxlckluc3RhbmNlID0gKG1TZXR0aW5ncy5jb250cm9sbGVyIGFzIEV4dGVuc2lvbkFQSSkgPz8gdGhpcztcblx0XHR9XG5cdFx0cmV0dXJuIG9UZW1wbGF0ZUNvbXBvbmVudC5ydW5Bc093bmVyKGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IG9UZW1wbGF0ZVByb21pc2UgPSBDb21tb25VdGlscy50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChtU2V0dGluZ3MubmFtZSwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCB7XG5cdFx0XHRcdGNvbnRyb2xsZXI6IGNvbnRyb2xsZXJJbnN0YW5jZSxcblx0XHRcdFx0aXNYTUw6IGZhbHNlLFxuXHRcdFx0XHRpZDogbVNldHRpbmdzLmlkLFxuXHRcdFx0XHRjb250YWluaW5nVmlldzogdGhpcy5fdmlldyxcblx0XHRcdFx0Y29udGV4dFBhdGg6IG1TZXR0aW5ncy5jb250ZXh0UGF0aCA/PyB0YXJnZXRDb250ZXh0UGF0aFxuXHRcdFx0fSkgYXMgUHJvbWlzZTxDb250cm9sPjtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG9GcmFnbWVudDogQ29udHJvbCA9IGF3YWl0IG9UZW1wbGF0ZVByb21pc2U7XG5cdFx0XHRcdGlmIChtU2V0dGluZ3MuaW5pdGlhbEJpbmRpbmdDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvRnJhZ21lbnQuc2V0QmluZGluZ0NvbnRleHQobVNldHRpbmdzLmluaXRpYWxCaW5kaW5nQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5hZGREZXBlbmRlbnQob0ZyYWdtZW50KTtcblx0XHRcdFx0cmV0dXJuIG9GcmFnbWVudDtcblx0XHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSkgYXMgUHJvbWlzZTxVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyBhbiB1cGRhdGUgb2YgdGhlIGFwcCBzdGF0ZS5cblx0ICogU2hvdWxkIGJlIGNhbGxlZCBpZiB0aGUgc3RhdGUgb2YgYSBjb250cm9sLCBvciBhbnkgb3RoZXIgc3RhdGUtcmVsZXZhbnQgaW5mb3JtYXRpb24sIHdhcyBjaGFuZ2VkLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBuZXcgYXBwIHN0YXRlIG9iamVjdC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgdXBkYXRlQXBwU3RhdGUoKTogUHJvbWlzZTx2b2lkIHwgeyBhcHBTdGF0ZTogb2JqZWN0IHwgdW5kZWZpbmVkIH0+IHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5fY29udHJvbGxlci5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5fY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRjb25zdCBhcHBTdGF0ZUluZm8gPSBhd2FpdCBhcHBDb21wb25lbnQuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuY3JlYXRlQXBwU3RhdGUoe1xuXHRcdFx0dmlld0lkOiB2aWV3LmdldElkKClcblx0XHR9KTtcblx0XHRyZXR1cm4gYXBwU3RhdGVJbmZvPy5hcHBTdGF0ZURhdGE7XG5cdH1cblxuXHQvKipcblx0ICogUnVuIHRoZSBnaXZlbiBmdW5jdGlvbiB3aXRoIHRoZSBGUE0gY29udGV4dCBvZiB0aGUgY3VycmVudCBwYWdlLlxuXHQgKiBUaGlzIGFsbG93cyB0byBpbml0aWFsaXplIGFsbCB0aGUgZWxlbWVudHMgcmVxdWlyZWQgYnkgYnVpbGRpbmcgYmxvY2tzIHRvIHJlbmRlciBjb3JyZWN0bHkuXG5cdCAqIEBwYXJhbSBmbiBUaGUgRnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWRcblx0ICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb25cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cnVuV2l0aEZQTUNvbnRleHQoZm46IEZ1bmN0aW9uKTogdW5rbm93biB7XG5cdFx0Y29uc3QgdGVtcGxhdGVDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IodGhpcy5fdmlldykgYXMgRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+O1xuXHRcdHJldHVybiB0ZW1wbGF0ZUNvbXBvbmVudC5ydW5Bc093bmVyKGZuIGFzIFRTRnVuY3Rpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdhdGNoIGEgcHJvcGVydHkgZnJvbSB0aGUgbWFpbiBwYWdlIGNvbnRleHQgYW5kIHRyaWdnZXIgYSBjYWxsYmFjayB3aGVuIHRoZSB2YWx1ZSBjaGFuZ2VzLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byB3YXRjaFxuXHQgKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHRyaWdnZXIgd2hlbiB0aGUgdmFsdWUgY2hhbmdlc1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHR3YXRjaFByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nLCBjYWxsYmFjazogV2F0Y2hlckNhbGxiYWNrKTogdm9pZCB7XG5cdFx0dGhpcy5fdmlldy5hZGREZXBlbmRlbnQoXG5cdFx0XHRuZXcgRGF0YVdhdGNoZXIoe1xuXHRcdFx0XHRwcm9wZXJ0eUJpbmRpbmc6IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKHByb3BlcnR5TmFtZSkpLFxuXHRcdFx0XHR2YWx1ZUNoYW5nZWQ6IChlKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soZS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSwgZS5nZXRQYXJhbWV0ZXIoXCJvbGRWYWx1ZVwiKSwgZS5nZXRQYXJhbWV0ZXIoXCJpc0luaXRpYWxcIiksIGUuZ2V0UGFyYW1ldGVyKFwiY29udGV4dFwiKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBFeHRlbnNpb25BUEk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVJBLElBVU1BLFlBQVksSUFBQUMsSUFBQSxHQURqQkMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLEVBQUFDLEtBQUEsR0FPekNDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBNEMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FRL0RGLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBMkMsQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FPOURILFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBeUQsQ0FBQyxDQUFDLEVBQUFHLEtBQUEsR0FTNUVKLFFBQVEsQ0FBQztJQUFFQyxJ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
@@ -12,12 +12,7 @@ import type InternalRouting from "sap/fe/core/controllerextensions/InternalRouti
12
12
  import type Routing from "sap/fe/core/controllerextensions/Routing";
13
13
  import type { WatcherCallback } from "sap/fe/core/controls/DataWatcher";
14
14
  import DataWatcher from "sap/fe/core/controls/DataWatcher";
15
- import CollaborationFormatter from "sap/fe/core/formatters/CollaborationFormatter";
16
- import CriticalityFormatter from "sap/fe/core/formatters/CriticalityFormatter";
17
- import FPMFormatter from "sap/fe/core/formatters/FPMFormatter";
18
- import KPIFormatter from "sap/fe/core/formatters/KPIFormatter";
19
- import StandardFormatter from "sap/fe/core/formatters/StandardFormatter";
20
- import ValueFormatter from "sap/fe/core/formatters/ValueFormatter";
15
+ import Scope from "sap/fe/core/formatters/Scope";
21
16
  import type MacroAPI from "sap/fe/macros/MacroAPI";
22
17
  import type FormAPI from "sap/fe/macros/form/FormAPI";
23
18
  import BaseObject from "sap/ui/base/Object";
@@ -87,14 +82,7 @@ class ExtensionAPI extends BaseObject {
87
82
 
88
83
  private extension: Record<string, unknown>;
89
84
 
90
- protected _formatters = {
91
- ValueFormatter: ValueFormatter,
92
- StandardFormatter: StandardFormatter,
93
- CriticalityFormatter: CriticalityFormatter,
94
- FPMFormatter: FPMFormatter,
95
- KPIFormatter: KPIFormatter,
96
- CollaborationFormatter: CollaborationFormatter
97
- };
85
+ protected _formatters = Scope._formatters;
98
86
 
99
87
  constructor(oController: PageController, sId?: string) {
100
88
  super();