@sapui5/sap.fe.core 1.135.0 → 1.136.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +3 -2
- package/src/sap/fe/core/ActionRuntime.ts +3 -1
- package/src/sap/fe/core/AppComponent.js +6 -4
- package/src/sap/fe/core/AppComponent.ts +3 -1
- package/src/sap/fe/core/AppStateHandler.js +8 -6
- package/src/sap/fe/core/AppStateHandler.ts +7 -5
- package/src/sap/fe/core/CommonUtils.js +4 -1
- package/src/sap/fe/core/CommonUtils.ts +12 -2
- package/src/sap/fe/core/ExtensionAPI.js +5 -3
- package/src/sap/fe/core/ExtensionAPI.ts +4 -2
- package/src/sap/fe/core/PageController.js +13 -1
- package/src/sap/fe/core/PageController.ts +13 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +13 -5
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +19 -6
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +4 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +58 -14
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +71 -11
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +184 -17
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +204 -12
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +12 -3
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +11 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +35 -5
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +6 -6
- package/src/sap/fe/core/controllerextensions/Routing.ts +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -11
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +11 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +21 -6
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +19 -5
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +17 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +19 -17
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +10 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +8 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +33 -31
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +2 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +4 -3
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +7 -2
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +18 -8
- package/src/sap/fe/core/converters/controls/Common/Action.js +54 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -4
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +13 -4
- package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -3
- package/src/sap/fe/core/converters/controls/Common/Table.js +29 -9
- package/src/sap/fe/core/converters/controls/Common/Table.ts +38 -8
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +14 -16
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +61 -96
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +62 -13
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +75 -13
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +4 -33
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +4 -44
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +9 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +7 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +5 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +29 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +34 -16
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +35 -16
- package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +24 -3
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
- package/src/sap/fe/core/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +4 -9
- package/src/sap/fe/core/helpers/DeleteHelper.ts +3 -8
- package/src/sap/fe/core/helpers/ModelHelper.js +14 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +38 -39
- package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
- package/src/sap/fe/core/helpers/WebSocket.js +10 -1
- package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +41 -2
- package/src/sap/fe/core/messagebundle_ar.properties +23 -2
- package/src/sap/fe/core/messagebundle_bg.properties +23 -2
- package/src/sap/fe/core/messagebundle_ca.properties +21 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +23 -2
- package/src/sap/fe/core/messagebundle_cs.properties +21 -0
- package/src/sap/fe/core/messagebundle_cy.properties +21 -0
- package/src/sap/fe/core/messagebundle_da.properties +23 -2
- package/src/sap/fe/core/messagebundle_de.properties +23 -2
- package/src/sap/fe/core/messagebundle_el.properties +21 -0
- package/src/sap/fe/core/messagebundle_en.properties +23 -2
- package/src/sap/fe/core/messagebundle_en_GB.properties +23 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +23 -2
- package/src/sap/fe/core/messagebundle_es.properties +21 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +21 -0
- package/src/sap/fe/core/messagebundle_et.properties +21 -0
- package/src/sap/fe/core/messagebundle_fi.properties +21 -0
- package/src/sap/fe/core/messagebundle_fr.properties +22 -1
- package/src/sap/fe/core/messagebundle_fr_CA.properties +21 -0
- package/src/sap/fe/core/messagebundle_hi.properties +22 -1
- package/src/sap/fe/core/messagebundle_hr.properties +24 -3
- package/src/sap/fe/core/messagebundle_hu.properties +21 -0
- package/src/sap/fe/core/messagebundle_id.properties +21 -0
- package/src/sap/fe/core/messagebundle_it.properties +23 -2
- package/src/sap/fe/core/messagebundle_iw.properties +21 -0
- package/src/sap/fe/core/messagebundle_ja.properties +21 -0
- package/src/sap/fe/core/messagebundle_kk.properties +21 -0
- package/src/sap/fe/core/messagebundle_ko.properties +21 -0
- package/src/sap/fe/core/messagebundle_lt.properties +21 -0
- package/src/sap/fe/core/messagebundle_lv.properties +23 -2
- package/src/sap/fe/core/messagebundle_mk.properties +21 -0
- package/src/sap/fe/core/messagebundle_ms.properties +22 -1
- package/src/sap/fe/core/messagebundle_nl.properties +21 -0
- package/src/sap/fe/core/messagebundle_no.properties +21 -0
- package/src/sap/fe/core/messagebundle_pl.properties +23 -2
- package/src/sap/fe/core/messagebundle_pt.properties +23 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +21 -0
- package/src/sap/fe/core/messagebundle_ro.properties +23 -2
- package/src/sap/fe/core/messagebundle_ru.properties +22 -1
- package/src/sap/fe/core/messagebundle_sh.properties +23 -2
- package/src/sap/fe/core/messagebundle_sk.properties +21 -0
- package/src/sap/fe/core/messagebundle_sl.properties +23 -2
- package/src/sap/fe/core/messagebundle_sr.properties +23 -2
- package/src/sap/fe/core/messagebundle_sv.properties +21 -0
- package/src/sap/fe/core/messagebundle_th.properties +21 -0
- package/src/sap/fe/core/messagebundle_tr.properties +21 -0
- package/src/sap/fe/core/messagebundle_uk.properties +23 -2
- package/src/sap/fe/core/messagebundle_vi.properties +23 -2
- package/src/sap/fe/core/messagebundle_zh_CN.properties +23 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +21 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +5 -5
- package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -4
- package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +61 -9
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +70 -7
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +28 -12
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +7 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +4 -3
- package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +27 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +198 -58
- package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +6 -7
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +9 -7
|
@@ -297,11 +297,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/UIProvide
|
|
|
297
297
|
};
|
|
298
298
|
}, {});
|
|
299
299
|
}
|
|
300
|
-
|
|
300
|
+
const createPromise = this.createContext(mainListBinding, parameters.data, {
|
|
301
301
|
createAtEnd: !!parameters.createAtEnd,
|
|
302
302
|
createInactive: !!parameters.inactive,
|
|
303
303
|
parentContext: parameters.parentContext
|
|
304
304
|
});
|
|
305
|
+
if (mainListBinding.getUpdateGroupId() === CommonUtils.INLINEEDIT_UPDATEGROUPID) {
|
|
306
|
+
mainListBinding.getModel().submitBatch(CommonUtils.INLINEEDIT_UPDATEGROUPID);
|
|
307
|
+
}
|
|
308
|
+
return createPromise;
|
|
305
309
|
}
|
|
306
310
|
|
|
307
311
|
/**
|
|
@@ -359,10 +363,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/UIProvide
|
|
|
359
363
|
const metaPath = metaModel.getMetaPath(headerContextPath);
|
|
360
364
|
const messagesPath = ModelHelper.getMessagesPath(metaModel, metaPath);
|
|
361
365
|
const bindingParameters = {
|
|
362
|
-
$$patchWithoutSideEffects: true
|
|
366
|
+
$$patchWithoutSideEffects: true,
|
|
367
|
+
$$updateGroupId: "$auto"
|
|
363
368
|
};
|
|
369
|
+
const selectedProperties = [];
|
|
364
370
|
if (messagesPath) {
|
|
365
|
-
|
|
371
|
+
selectedProperties.push(messagesPath);
|
|
372
|
+
}
|
|
373
|
+
if (this.getProgrammingModel(mainListBinding) === ProgrammingModel.Draft) {
|
|
374
|
+
selectedProperties.push("IsActiveEntity", "HasDraftEntity", "HasActiveEntity"); // Needed for our internal logic (e.g. navigation)
|
|
375
|
+
}
|
|
376
|
+
if (selectedProperties.length > 0) {
|
|
377
|
+
bindingParameters["$select"] = selectedProperties.join(",");
|
|
366
378
|
}
|
|
367
379
|
const result = await this.callAction(actionName, {
|
|
368
380
|
contexts: mainListBinding.getHeaderContext(),
|
|
@@ -813,7 +825,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/UIProvide
|
|
|
813
825
|
* @param mParameters.internalModelContext
|
|
814
826
|
* @param mParameters.groupId
|
|
815
827
|
* @param mParameters.defaultValuesExtensionFunction
|
|
816
|
-
* @param
|
|
828
|
+
* @param mParameters.ignoreETag If specified, the action is called without ETag handling
|
|
829
|
+
* @param mParameters.feFrameworkCall
|
|
817
830
|
* @param appComponent The appComponent
|
|
818
831
|
* @param messageHandler The message handler extension
|
|
819
832
|
* @returns Promise resolves with an array of response objects (TODO: to be changed)
|
|
@@ -908,8 +921,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/UIProvide
|
|
|
908
921
|
this.busyUnlock(appComponent);
|
|
909
922
|
}
|
|
910
923
|
},
|
|
924
|
+
oDataProperties: {
|
|
925
|
+
ignoreETag: mParameters.ignoreETag
|
|
926
|
+
},
|
|
911
927
|
messageHandler: messageHandler,
|
|
912
|
-
ignoreETag: mParameters.ignoreETag,
|
|
913
928
|
view: mParameters.view
|
|
914
929
|
});
|
|
915
930
|
}
|
|
@@ -1260,4 +1275,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/UIProvide
|
|
|
1260
1275
|
const singleton = new TransactionHelper();
|
|
1261
1276
|
return singleton;
|
|
1262
1277
|
}, false);
|
|
1263
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcmVhdGlvbk1vZGUiLCJGRUxpYnJhcnkiLCJQcm9ncmFtbWluZ01vZGVsIiwiRGVsZXRlT3B0aW9uVHlwZXMiLCJkZWxldGVIZWxwZXIiLCJEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbCIsImdldFBhcmFtZXRlcnMiLCJtUGFyYW1ldGVycyIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIlRyYW5zYWN0aW9uSGVscGVyIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiYnVzeUxvY2siLCJhcHBDb21wb25lbnQiLCJidXN5UGF0aCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZ2V0TW9kZWwiLCJidXN5VW5sb2NrIiwidW5sb2NrIiwiZ2V0UHJvZ3JhbW1pbmdNb2RlbCIsInNvdXJjZSIsInBhdGgiLCJpc0EiLCJnZXRQYXRoIiwiaXNSZWxhdGl2ZSIsImdldFJlc29sdmVkUGF0aCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsIkRyYWZ0IiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiU3RpY2t5IiwiTm9uRHJhZnQiLCJ2YWxpZGF0ZURvY3VtZW50Iiwib0NvbnRleHQiLCJvVmlldyIsInNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJzTW9kdWxlIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJyZXBsYWNlIiwic0Z1bmN0aW9uTmFtZSIsImxlbmd0aCIsIm1EYXRhIiwiZGF0YSIsIkZQTUhlbHBlciIsInZhbGlkYXRpb25XcmFwcGVyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uIiwibGlzdEJpbmRpbmciLCJtb2RlbCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJsaXN0QmluZGluZ09iamVjdFBhdGgiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0IiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJkZWZhdWx0RnVuY09uVGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5U2V0IiwiZGVmYXVsdEZ1bmN0aW9uTmFtZSIsInVuZGVmaW5lZCIsImZ1bmN0aW9uT25OYXZQcm9wIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJkZWZhdWx0RnVuY3Rpb25Db250ZXh0IiwiZ2V0Q29udGV4dCIsImdldEhlYWRlckNvbnRleHQiLCJkZWZhdWx0RnVuY3Rpb25QYXRoIiwiZ2V0TWV0YVBhdGgiLCJkZWZhdWx0RnVuY3Rpb25PYmplY3RQYXRoIiwiZGVmYXVsdEZ1bmN0aW9uUmVzdWx0IiwiaXNCb3VuZCIsIm9wZXJhdGlvbnMiLCJjYWxsQm91bmRGdW5jdGlvbiIsInRvU3RyaW5nIiwiY2FsbEZ1bmN0aW9uSW1wb3J0IiwiZ2V0T2JqZWN0IiwiaXNMaXN0QmluZGluZ0hpZXJhcmNoaWNhbCIsImdldEFnZ3JlZ2F0aW9uIiwiaGllcmFyY2h5UXVhbGlmaWVyIiwiaXNMaXN0QmluZGluZ0FuYWx5dGljYWwiLCJhZ2dyZWdhdGlvbiIsImNyZWF0ZUNvbnRleHQiLCJpbml0aWFsRGF0YSIsIm9wdGlvbnMiLCJkYXRhRm9yQ3JlYXRpb24iLCJsaXN0QmluZGluZ0ZvckNyZWF0aW9uIiwicGFyZW50Q29udGV4dCIsImlzRXhwYW5kZWQiLCJleHBhbmQiLCJPYmplY3QiLCJhc3NpZ24iLCJiaW5kTGlzdCIsIiQkZ3JvdXBJZCIsImdldEdyb3VwSWQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJnZXRVcGRhdGVHcm91cElkIiwib2JqZWN0UGF0aCIsInBhcmVudE5hdmlnYXRpb24iLCJ0YXJnZXRFbnRpdHlUeXBlIiwiQWdncmVnYXRpb24iLCJQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHkiLCJ2YWx1ZSIsIkVycm9yIiwicGFyZW50QmluZGluZ0RhdGEiLCJjcmVhdGUiLCJjcmVhdGVBdEVuZCIsImNyZWF0ZUluYWN0aXZlIiwiZ2V0Q3JlYXRpb25QYXJhbWV0ZXJzIiwiY3JlYXRlRGF0YSIsIm1ldGFQYXRoIiwibm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzIiwiZ2V0Q3JlYXRlUG9wdXBGaWVsZHMiLCJmaWx0ZXIiLCJmaWVsZE5hbWUiLCJjcmVhdGVEb2N1bWVudCIsIm1haW5MaXN0QmluZGluZyIsImluUGFyYW1ldGVycyIsInJlc291cmNlTW9kZWwiLCJtZXNzYWdlSGFuZGxlciIsImZyb21Db3B5UGFzdGUiLCJuZXdEb2N1bWVudENvbnRleHQiLCJwYXJhbWV0ZXJzIiwicHJvZ3JhbW1pbmdNb2RlbCIsImdldEJ1c3lQYXRoIiwiYmVmb3JlQ3JlYXRlQ2FsbEJhY2siLCJpbmFjdGl2ZSIsIm1lc3NhZ2VIYW5kbGluZ0tleSIsInJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMiLCJwZXJmb3JtQ3JlYXRpb24iLCJzaG93TWVzc2FnZURpYWxvZyIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwidW5Ib2xkS2V5IiwiZXJyb3IiLCJDb25zdGFudHMiLCJBY3Rpb25FeGVjdXRpb25GYWlsZWQiLCJDYW5jZWxBY3Rpb25EaWFsb2ciLCJpc1RyYW5zaWVudCIsImRlbGV0ZSIsImJ1c3lNb2RlIiwiYnVzeUlkIiwiY3JlYXRlRG9jdW1lbnRDb250ZXh0IiwiY3JlYXRlUGFyYW1ldGVycyIsImVudHJpZXMiLCJtYXAiLCJfcmVmIiwia2V5IiwidG9FUzZQcm9taXNlIiwiY29udGV4dFBhdGgiLCJMb2ciLCJPbkJlZm9yZUNyZWF0ZUZhaWxlZCIsInJlZHVjZSIsInJlc3VsdCIsImN1cnJlbnRPYmplY3QiLCJjcmVhdGVIYXNoIiwiZ2V0Um91dGVyUHJveHkiLCJnZXRIYXNoIiwiY29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJzdGFydHVwUGFyYW1ldGVycyIsIm5ld0FjdGlvbiIsIl9nZXROZXdBY3Rpb24iLCJwZXJmb3JtQ3JlYXRpb25XaXRoQWN0aW9uIiwic3RhdHVzIiwicmVhc29uIiwicmV0dXJuZWRDb250ZXh0IiwicGVyZm9ybUNyZWF0aW9uV2l0aFBPU1QiLCJhY3Rpb25OYW1lIiwiaGVhZGVyQ29udGV4dFBhdGgiLCJtZXNzYWdlc1BhdGgiLCJnZXRNZXNzYWdlc1BhdGgiLCJiaW5kaW5nUGFyYW1ldGVycyIsIiQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHMiLCJjYWxsQWN0aW9uIiwiY29udGV4dHMiLCJzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nIiwibGFiZWwiLCJfZ2V0U3BlY2lmaWNDcmVhdGVBY3Rpb25EaWFsb2dMYWJlbCIsInZpZXciLCJpc0NyZWF0ZUFjdGlvbiIsInNraXBQYXJhbWV0ZXJEaWFsb2ciLCJkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGEiLCJjYW5IYXZlRGlhbG9nIiwiY3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJJbmxpbmUiLCJjcmVhdGlvbkRpYWxvZ0ZpZWxkcyIsIkNyZWF0aW9uRGlhbG9nIiwiZm9yRWFjaCIsImluY2x1ZGVzIiwicHVzaCIsImNyZWF0ZVdpdGhEaWFsb2ciLCJ3YWl0Rm9yQ3JlYXRlQ29tcGxldGlvbiIsImtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQiLCJtc2ciLCJtZXNzYWdlIiwiX2lzRHJhZnRFbmFibGVkIiwidkNvbnRleHRzIiwiY29udGV4dEZvckRyYWZ0TW9kZWwiLCJzUHJvZ3JhbW1pbmdNb2RlbCIsImRlbGV0ZURvY3VtZW50IiwiY29udGV4dHNUb0RlbGV0ZSIsIkFycmF5IiwiaXNBcnJheSIsImZpcnN0Q29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJyZWplY3QiLCJkcmFmdEVuYWJsZWQiLCJpdGVtcyIsInVuU2F2ZWRDb250ZXh0IiwiZW50aXR5U2V0TmFtZSIsImdldENvbGxlY3Rpb25OYW1lRnJvbUNvbnRleHQiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0IiwiZmluZCIsImNvbnRleHQiLCJjb250ZXh0RGF0YSIsIklzQWN0aXZlRW50aXR5IiwiSGFzRHJhZnRFbnRpdHkiLCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSIsIkluUHJvY2Vzc0J5VXNlciIsIkRyYWZ0SXNDcmVhdGVkQnlNZSIsImxvY2tpbmdVc2VyTmFtZSIsIk1lc3NhZ2VCb3giLCJzaG93IiwiZ2V0VGV4dCIsInRpdGxlIiwib25DbG9zZSIsIm5vblRhYmxlVHh0IiwidW5TYXZlZENvbnRleHRVc2VyIiwiZGVzY3JpcHRpb24iLCJ0eXBlIiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ0ZXh0Iiwic2VsZWN0ZWQiLCJURVhUIiwidG90YWxEZWxldGFibGUiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIiwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSIsInVuU2F2ZWRDb250ZXh0cyIsInVwZGF0ZURyYWZ0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzIiwibm9uRGVsZXRhYmxlVGV4dCIsImdldE5vbkRlbGV0YWJsZVRleHQiLCJvcHRpb25zRGVsZXRhYmxlVGV4dHMiLCJnZXRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMiLCJjb21tb25CaW5kaW5nIiwiZ2V0QmluZGluZyIsImJpbmRpbmdUeXBlIiwidXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyIsImZuQ29uZmlybSIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZGVsZXRlQ29uZmlybUhhbmRsZXIiLCJvRXJyb3IiLCJkaWFsb2ciLCJjcmVhdGVEZWxldGVEaWFsb2ciLCJub0RpYWxvZyIsInNpbGVudE1vZGUiLCJhZGRTdHlsZUNsYXNzIiwib3BlbiIsImZuUmVqZWN0IiwiZGlhbG9nQ29uZmlybWVkIiwidkJveCIsIlZCb3giLCJyZXNvdXJjZUJ1bmRsZUNvcmUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJEaWFsb2ciLCJzdGF0ZSIsImNvbnRlbnQiLCJhcmlhTGFiZWxsZWRCeSIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiZWRpdERvY3VtZW50IiwiZ3JvdXBJZCIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm9OZXdDb250ZXh0IiwiZHJhZnQiLCJjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudCIsImJQcmVzZXJ2ZUNoYW5nZXMiLCJzdGlja3kiLCJlZGl0RG9jdW1lbnRJblN0aWNreVNlc3Npb24iLCJlcnIiLCJzaG93TWVzc2FnZXMiLCJjb25jdXJyZW50RWRpdEZsYWciLCJjYW5jZWxEb2N1bWVudCIsIm1JblBhcmFtZXRlcnMiLCJpc05ld09iamVjdCIsImlzT2JqZWN0TW9kaWZpZWQiLCJvTW9kZWwiLCJyZXR1cm5lZFZhbHVlIiwiZHJhZnREYXRhQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0IiwiZHJhZnRBZG1pbkRhdGEiLCJyZXF1ZXN0T2JqZWN0IiwiQ3JlYXRpb25EYXRlVGltZSIsIkxhc3RDaGFuZ2VEYXRlVGltZSIsInNraXBEaXNjYXJkUG9wb3ZlciIsIl9jb25maXJtRGlzY2FyZCIsImNhbmNlbEJ1dHRvbiIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwiYmVmb3JlQ2FuY2VsQ2FsbEJhY2siLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInJlc2V0Q2hhbmdlcyIsImRlbGV0ZURyYWZ0Iiwib1NpYmxpbmdDb250ZXh0Iiwic0Nhbm9uaWNhbFBhdGgiLCJyZXF1ZXN0Q2Fub25pY2FsUGF0aCIsImRpc2NhcmRlZENvbnRleHQiLCJkaXNjYXJkRG9jdW1lbnQiLCJyZWZyZXNoIiwic2F2ZURvY3VtZW50IiwiZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsImJpbmRpbmdzRm9yU2lkZUVmZmVjdHMiLCJza2lwQ29uZmlybWF0aW9uTXNnIiwiYXJndW1lbnRzIiwib0FjdGl2ZURvY3VtZW50IiwiYWN0aXZhdGVEb2N1bWVudCIsIm1lc3NhZ2VzUmVjZWl2ZWQiLCJnZXRNZXNzYWdlcyIsImNvbmNhdCIsImdldFR5cGUiLCJNZXNzYWdlVHlwZSIsIlN1Y2Nlc3MiLCJNZXNzYWdlVG9hc3QiLCJDb21tb25VdGlscyIsImhhc1RyYW5zaWVudENvbnRleHQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJzQWN0aW9uTmFtZSIsImNvbnRleHRUb1Byb2Nlc3MiLCJzTmFtZSIsInNwbGl0IiwiY29udHJvbElkIiwiYnlJZCIsIm9SZXN1bHQiLCJhY3Rpb25QYXRoIiwiYm91bmRBY3Rpb24iLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImNvbnZlcnRlZFR5cGVzIiwiY29udmVydFR5cGVzIiwiY29udmVydGVkQWN0aW9uIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJPcGVyYXRpb24iLCJwYXJhbWV0ZXJWYWx1ZXMiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJvRGF0YVByb3BlcnRpZXMiLCJnaG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbiIsImVuaGFuY2Ukc2VsZWN0IiwiZmVGcmFtZXdvcmtDYWxsIiwiaWdub3JlRVRhZyIsIm9EYXRhRXZlbnRzIiwib25PRGF0YVN1Ym1pdCIsIm9uT0RhdGFSZXNwb25zZSIsIm9uUmVxdWVzdFNpZGVFZmZlY3RzIiwiaGFuZGxlQWN0aW9uRW5hYmxlbWVudE9uT3BlcmF0aW9uIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJleGVjdXRlIiwiY2FsbEFjdGlvbkltcG9ydCIsIl9oYW5kbGVBY3Rpb25SZXNwb25zZSIsIm5hbWUiLCJhY3Rpb25IZWxwZXIiLCJpc1N0YXRpY0FjdGlvbiIsImdldFByb3BlcnR5IiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwidXBkYXRlRGVsZXRlSW5mb0ZvclNlbGVjdGVkQ29udGV4dHMiLCJhVHJhbnNpZW50TWVzc2FnZXMiLCJzZXRQcm9wZXJ0eSIsImhhbmRsZVZhbGlkYXRpb25FcnJvciIsImVycm9yVG9SZW1vdmUiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwidmFsaWRhdGlvbiIsInJlbW92ZU1lc3NhZ2VzIiwiX2NyZWF0ZVBvcG92ZXIiLCJzZXR0aW5ncyIsIlBvcG92ZXIiLCJpc01vZGlmaWVkIiwic2V0RW5hYmxlZCIsImNvbmZpcm1hdGlvblBvcG92ZXIiLCJzaG93SGVhZGVyIiwicGxhY2VtZW50IiwiVGV4dCIsImNvbmZpcm1CdXR0b24iLCJ3aWR0aCIsImFkZENvbnRlbnQiLCJhdHRhY2hCZWZvcmVPcGVuIiwic2V0SW5pdGlhbEZvY3VzIiwiYXR0YWNoQWZ0ZXJDbG9zZSIsIm9wZW5CeSIsInJlZnJlc2hMaXN0QmluZGluZyIsImlzUm9vdCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwicmVxdWVzdFJlZnJlc2giLCJmaWVsZE5hbWVzIiwibGlzdE1ldGFQYXRoIiwidHJhbnNpZW50TGlzdEJpbmRpbmciLCJyZWZyZXNoSW50ZXJuYWwiLCJ0cmFuc2llbnRDb250ZXh0IiwiZmllbGRNZXRhQ29udGV4dHMiLCJjcmVhdGVEaWFsb2ciLCJnZXRDb3JlVUlGYWN0b3J5IiwibmV3Q3JlYXRlRGlhbG9nIiwic2V0VXNlckRlZmF1bHRzIiwiY3JlYXRlQWN0aW9uIiwib3BlbkRpYWxvZyIsImUiLCJyZXN1bHRQcm9taXNlS2VlcGVyIiwiUHJvbWlzZUtlZXBlciIsIm9uRXhpdERpYWxvZyIsImV2ZW50IiwiZ2V0UGFyYW1ldGVyIiwiY2xvc2VEaWFsb2ciLCJzZXRCdXN5IiwiYklzQ3JlYXRlRGlhbG9nIiwidHJhbnNpZW50RGF0YSIsImtleXMiLCJwcm9wZXJ0eVBhdGgiLCJvUHJvcGVydHkiLCIka2luZCIsInN0YXJ0c1dpdGgiLCJjcmVhdGVEYXRhQXNBcnJheSIsIl9yZWYyIiwiVWlNb2RlbENvbnN0YW50cyIsIkRvY3VtZW50TW9kaWZpZWQiLCJuZXdDb250ZXh0IiwiY3JlYXRpb25TdWNjZXNzIiwiYWZ0ZXJDcmVhdGVDYWxsQmFjayIsImRpc3BsYXlFcnJvck1lc3NhZ2VzIiwic2hvd0JvdW5kU3RhdGVNZXNzYWdlcyIsIkNyZWF0aW9uRmFpbGVkIiwiaXNPcGVyYXRpb25EaWFsb2dPcGVuIiwiaXNPcGVuIiwiYXR0YWNoRXhpdERpYWxvZyIsInByb21pc2UiLCJwcm9taXNlS2VlcGVyIiwicGFyZW50TGlzdEJpbmRpbmciLCJvbkNyZWF0ZUNvbXBsZXRlZCIsImNyZWF0ZWRDb250ZXh0Iiwic3VjY2VzcyIsImRldGFjaENyZWF0ZUNvbXBsZXRlZCIsImF0dGFjaENyZWF0ZUNvbXBsZXRlZCIsImNyZWF0aW9uU3VjY2Vzc2Z1bCIsImNyZWF0ZWQiLCJjYXRjaCIsImNvbnRleHRFcnJvciIsInRyYWNlIiwib1N0YXJ0dXBQYXJhbWV0ZXJzIiwic0NyZWF0ZUhhc2giLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoIiwic05ld0FjdGlvbiIsInByZWZlcnJlZE1vZGUiLCJ0b1VwcGVyQ2FzZSIsInNQcmVmZXJyZWRNb2RlIiwibGluZUl0ZW1zIiwibGluZUl0ZW0iLCJpc0RhdGFGaWVsZEZvckFjdGlvbiIsIkFjdGlvbiIsIkxhYmVsIiwic2luZ2xldG9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUcmFuc2FjdGlvbkhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQWN0aW9uIGFzIEVkbUFjdGlvbiwgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTGluZUl0ZW0gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFeGl0RGlhbG9nRXZlbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvVUlQcm92aWRlclwiO1xuaW1wb3J0IHsgZ2V0Q29yZVVJRmFjdG9yeSB9IGZyb20gXCJzYXAvZmUvY29yZS9VSVByb3ZpZGVyXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRDb250ZXh0UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IFVpTW9kZWxDb25zdGFudHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2VkaXRGbG93Q29uc3RhbnRzXCI7XG5pbXBvcnQgb3BlcmF0aW9ucyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9uc1wiO1xuaW1wb3J0IHN0aWNreSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvc3RpY2t5XCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNEYXRhRmllbGRGb3JBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgRGVsZXRlT3B0aW9uLCBEZWxldGVQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRGVsZXRlSGVscGVyXCI7XG5pbXBvcnQgZGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IGdldENyZWF0ZVBvcHVwRmllbGRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUHJvbWlzZUtlZXBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Qcm9taXNlS2VlcGVyXCI7XG5pbXBvcnQgdG9FUzZQcm9taXNlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1RvRVM2UHJvbWlzZVwiO1xuaW1wb3J0IHsgaXNOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgeyAkUG9wb3ZlclNldHRpbmdzIH0gZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL011bHRpVmFsdWVGaWVsZEl0ZW1cIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YUxpc3RCaW5kaW5nJENyZWF0ZUNvbXBsZXRlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcIi4uLy4uL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIHsgT3BlcmF0aW9uUmVzdWx0IH0gZnJvbSBcIi4vb3BlcmF0aW9ucy9PRGF0YU9wZXJhdGlvblwiO1xuaW1wb3J0IE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb25zL09wZXJhdGlvblwiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwiLi9vcGVyYXRpb25zL2FjdGlvbkhlbHBlclwiO1xuXG5jb25zdCBDcmVhdGlvbk1vZGUgPSBGRUxpYnJhcnkuQ3JlYXRpb25Nb2RlO1xuY29uc3QgUHJvZ3JhbW1pbmdNb2RlbCA9IEZFTGlicmFyeS5Qcm9ncmFtbWluZ01vZGVsO1xuXG4vL0VudW1zIGZvciBkZWxldGUgdGV4dCBjYWxjdWxhdGlvbnMgZm9yIGRlbGV0ZSBjb25maXJtIGRpYWxvZy5cbmNvbnN0IERlbGV0ZU9wdGlvblR5cGVzID0gZGVsZXRlSGVscGVyLkRlbGV0ZU9wdGlvblR5cGVzO1xuY29uc3QgRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wgPSBkZWxldGVIZWxwZXIuRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2w7XG5cbi8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBtUGFyYW1ldGVycyBpcyBub3QgdGhlIG9FdmVudCAqL1xuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyczxUPihtUGFyYW1ldGVycz86IEV2ZW50IHwgVCk6IFQge1xuXHRpZiAobVBhcmFtZXRlcnMgJiYgKG1QYXJhbWV0ZXJzIGFzIEV2ZW50KS5nZXRNZXRhZGF0YSAmJiAobVBhcmFtZXRlcnMgYXMgRXZlbnQpLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC51aS5iYXNlLkV2ZW50XCIpIHtcblx0XHRtUGFyYW1ldGVycyA9IHt9IGFzIFQ7XG5cdH1cblx0cmV0dXJuIChtUGFyYW1ldGVycyBhcyBUKSB8fCAoe30gYXMgVCk7XG59XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVBhcmFtZXRlcnMgPSB7XG5cdGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0YnVzeU1vZGU/OiBzdHJpbmc7XG5cdGJ1c3lJZD86IHN0cmluZztcblx0a2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZD86IGJvb2xlYW47XG5cdHBhcmVudENvbnRyb2w6IFZpZXc7XG5cdGluYWN0aXZlPzogYm9vbGVhbjtcblx0YmVmb3JlQ3JlYXRlQ2FsbEJhY2s/OiBGdW5jdGlvbjtcblx0YWZ0ZXJDcmVhdGVDYWxsQmFjaz86IChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4gUHJvbWlzZTx2b2lkPjtcblx0c2tpcFBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdGNyZWF0aW9uTW9kZT86IHN0cmluZztcblx0Y3JlYXRlQXRFbmQ/OiBib29sZWFuO1xuXHRwYXJlbnRDb250ZXh0PzogT0RhdGFWNENvbnRleHQ7XG5cdGNyZWF0aW9uRGlhbG9nRmllbGRzPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBDYW5jZWxQYXJhbWV0ZXJzID0geyBjYW5jZWxCdXR0b246IEJ1dHRvbjsgc2tpcERpc2NhcmRQb3BvdmVyOiBib29sZWFuOyBiZWZvcmVDYW5jZWxDYWxsQmFjaz86IEZ1bmN0aW9uIH07XG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvbkRlbGV0ZVBhcmFtZXRlcnMgPSBEZWxldGVQYXJhbWV0ZXJzICYge1xuXHRzZWxlY3RlZENvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0dGl0bGU/OiBzdHJpbmc7XG5cdG5vRGlhbG9nPzogYm9vbGVhbjtcbn07XG5cbmNsYXNzIFRyYW5zYWN0aW9uSGVscGVyIHtcblx0YnVzeUxvY2soYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIGJ1c3lQYXRoPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKGFwcENvbXBvbmVudC5nZXRNb2RlbChcInVpXCIpLCBidXN5UGF0aCk7XG5cdH1cblxuXHRidXN5VW5sb2NrKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBidXN5UGF0aD86IHN0cmluZyk6IHZvaWQge1xuXHRcdEJ1c3lMb2NrZXIudW5sb2NrKGFwcENvbXBvbmVudC5nZXRNb2RlbChcInVpXCIpLCBidXN5UGF0aCk7XG5cdH1cblxuXHRnZXRQcm9ncmFtbWluZ01vZGVsKHNvdXJjZTogT0RhdGFWNENvbnRleHQgfCBCaW5kaW5nKTogdHlwZW9mIFByb2dyYW1taW5nTW9kZWwge1xuXHRcdGxldCBwYXRoOiBzdHJpbmc7XG5cdFx0aWYgKHNvdXJjZS5pc0E8T0RhdGFWNENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdHBhdGggPSBzb3VyY2UuZ2V0UGF0aCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXRoID0gKHNvdXJjZS5pc1JlbGF0aXZlKCkgPyBzb3VyY2UuZ2V0UmVzb2x2ZWRQYXRoKCkgOiBzb3VyY2UuZ2V0UGF0aCgpKSA/PyBcIlwiO1xuXHRcdH1cblxuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHNvdXJjZS5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAobWV0YU1vZGVsICYmIE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsLCBwYXRoKSkge1xuXHRcdFx0cmV0dXJuIFByb2dyYW1taW5nTW9kZWwuRHJhZnQ7XG5cdFx0fSBlbHNlIGlmIChtZXRhTW9kZWwgJiYgTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG1ldGFNb2RlbCkpIHtcblx0XHRcdHJldHVybiBQcm9ncmFtbWluZ01vZGVsLlN0aWNreTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb2dyYW1taW5nTW9kZWwuTm9uRHJhZnQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFZhbGlkYXRlcyBhIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgdmFsaWRhdGVkXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5kYXRhXSBBIG1hcCBvZiBkYXRhIHRoYXQgc2hvdWxkIGJlIHZhbGlkYXRlZFxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbl0gQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwYXRoIHRvIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBvVmlldyBDb250YWlucyB0aGUgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHZpZXdcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIHJlc3VsdCBvZiB0aGUgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25cblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyB2YWxpZGF0ZURvY3VtZW50KFxuXHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRtUGFyYW1ldGVyczogeyBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24/OiBzdHJpbmc7IGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0sXG5cdFx0b1ZpZXc6IFZpZXdcblx0KTogUHJvbWlzZTx7IG1lc3NhZ2VUYXJnZXQ/OiBzdHJpbmc7IG1lc3NhZ2VUZXh0OiBzdHJpbmcgfVtdPiB7XG5cdFx0Y29uc3Qgc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjtcblx0XHRpZiAoc0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbikge1xuXHRcdFx0Y29uc3Qgc01vZHVsZSA9IHNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24uc3Vic3RyaW5nKDAsIHNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xKS5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdFx0c0Z1bmN0aW9uTmFtZSA9IHNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24uc3Vic3RyaW5nKFxuXHRcdFx0XHRcdHNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpICsgMSxcblx0XHRcdFx0XHRzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLmxlbmd0aFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRtRGF0YSA9IG1QYXJhbWV0ZXJzLmRhdGE7XG5cdFx0XHRkZWxldGUgbURhdGFbXCJAJHVpNS5jb250ZXh0LmlzVHJhbnNpZW50XCJdO1xuXHRcdFx0cmV0dXJuIEZQTUhlbHBlci52YWxpZGF0aW9uV3JhcHBlcihzTW9kdWxlLCBzRnVuY3Rpb25OYW1lLCBtRGF0YSwgb1ZpZXcsIG9Db250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGRlZmF0dWwgdmFsdWVzIGZyb20gdGhlIERlZmF1bHRWYWx1ZSBmdW5jdGlvbi5cblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIFRoZSBsaXN0IGJpbmRpbmcgdG8gYmUgdXNlZCBmb3IgY3JlYXRpb25cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgdmFsdWVzIChvciB1bmRlZmluZWQgaWYgdGhlcmUncyBubyBkZWZhdWx0IHZhbHVlIGZ1bmN0aW9uKVxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogUHJvbWlzZTxvYmplY3QgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobGlzdEJpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHRjb25zdCBsaXN0QmluZGluZ09iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblxuXHRcdGNvbnN0IGRlZmF1bHRGdW5jT25UYXJnZXRPYmplY3QgPSAobGlzdEJpbmRpbmdPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBOYXZpZ2F0aW9uUHJvcGVydHkgfCBFbnRpdHlTZXQpLmFubm90YXRpb25zLkNvbW1vblxuXHRcdFx0Py5EZWZhdWx0VmFsdWVzRnVuY3Rpb247XG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmNPblRhcmdldEVudGl0eVNldCA9IChsaXN0QmluZGluZ09iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCB8IHVuZGVmaW5lZCk/LmFubm90YXRpb25zLkNvbW1vblxuXHRcdFx0Py5EZWZhdWx0VmFsdWVzRnVuY3Rpb247XG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9IGRlZmF1bHRGdW5jT25UYXJnZXRPYmplY3QgPz8gZGVmYXVsdEZ1bmNPblRhcmdldEVudGl0eVNldDtcblxuXHRcdGlmICghZGVmYXVsdEZ1bmN0aW9uTmFtZSkge1xuXHRcdFx0Ly8gTm8gZGVmYXVsdCB2YWx1ZSBmdW5jdGlvblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRjb25zdCBmdW5jdGlvbk9uTmF2UHJvcCA9IGlzTmF2aWdhdGlvblByb3BlcnR5KGxpc3RCaW5kaW5nT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpICYmIGRlZmF1bHRGdW5jT25UYXJnZXRPYmplY3QgIT09IHVuZGVmaW5lZDtcblx0XHRjb25zdCBkZWZhdWx0RnVuY3Rpb25Db250ZXh0ID0gZnVuY3Rpb25Pbk5hdlByb3AgPyBsaXN0QmluZGluZy5nZXRDb250ZXh0KCkgOiBsaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdFx0aWYgKCFkZWZhdWx0RnVuY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBkZWZhdWx0RnVuY3Rpb25QYXRoID0gYCR7bWV0YU1vZGVsLmdldE1ldGFQYXRoKGRlZmF1bHRGdW5jdGlvbkNvbnRleHQuZ2V0UGF0aCgpKX0vJHtkZWZhdWx0RnVuY3Rpb25OYW1lfWA7XG5cblx0XHRjb25zdCBkZWZhdWx0RnVuY3Rpb25PYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoZGVmYXVsdEZ1bmN0aW9uUGF0aCkpO1xuXHRcdGNvbnN0IGRlZmF1bHRGdW5jdGlvblJlc3VsdCA9IChkZWZhdWx0RnVuY3Rpb25PYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBBY3Rpb24pPy5pc0JvdW5kXG5cdFx0XHQ/IGF3YWl0IG9wZXJhdGlvbnMuY2FsbEJvdW5kRnVuY3Rpb24oZGVmYXVsdEZ1bmN0aW9uTmFtZS50b1N0cmluZygpLCBkZWZhdWx0RnVuY3Rpb25Db250ZXh0LCBtb2RlbClcblx0XHRcdDogKChhd2FpdCBvcGVyYXRpb25zLmNhbGxGdW5jdGlvbkltcG9ydChkZWZhdWx0RnVuY3Rpb25OYW1lLnRvU3RyaW5nKCksIG1vZGVsKSkgYXMgT0RhdGFWNENvbnRleHQpO1xuXG5cdFx0cmV0dXJuIGRlZmF1bHRGdW5jdGlvblJlc3VsdC5nZXRPYmplY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBsaXN0IGJpbmRpbmcgY29ycmVzcG9uZHMgdG8gYSBoaWVyYXJjaHkuXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZ1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBsaXN0IGJpbmRpbmcgaXMgaGllcmFyY2hpY2FsLlxuXHQgKi9cblx0aXNMaXN0QmluZGluZ0hpZXJhcmNoaWNhbChsaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAobGlzdEJpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSBhcyB7IGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZyB9IHwgdW5kZWZpbmVkKT8uaGllcmFyY2h5UXVhbGlmaWVyID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gbGlzdCBiaW5kaW5nIGlzIGFuYWx5dGljYWwuXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBUaGUgbGlzdCBiaW5kaW5nIHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIFRSVUUgaWYgdGhlIGxpc3QgYmluZGluZyBpcyBhbmFseXRpY2FsLCBgZmFsc2VgIG90aGVyd2lzZS5cblx0ICovXG5cdGlzTGlzdEJpbmRpbmdBbmFseXRpY2FsKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSBsaXN0QmluZGluZy5nZXRBZ2dyZWdhdGlvbigpIGFzIHsgaGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uICE9PSB1bmRlZmluZWQgJiYgIWFnZ3JlZ2F0aW9uLmhpZXJhcmNoeVF1YWxpZmllcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGNvbnRleHQgaW4gYSBsaXN0IGJpbmRpbmcuIEhhbmRsZXMgYm90aCBmbGF0IGFuZCBoaWVyYXJjaGljYWwgY2FzZXMuXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZ1xuXHQgKiBAcGFyYW0gaW5pdGlhbERhdGEgSW5pdGlhbCBkYXRhIHRvIGNyZWF0ZSB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIG9wdGlvbnMgQ3JlYXRpb24gb3B0aW9ucy5cblx0ICogQHBhcmFtIG9wdGlvbnMuY3JlYXRlQXRFbmQgQ3JlYXRlIHRoZSBjb250ZXh0IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKGlnbm9yZWQgaW4gY2FzZSBvZiBhIGhpZXJhcmNoeSkuXG5cdCAqIEBwYXJhbSBvcHRpb25zLmNyZWF0ZUluYWN0aXZlIENyZWF0ZSB0aGUgY29udGV4dCBhcyBpbmFjdGl2ZSAoaWdub3JlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHBhcmFtIG9wdGlvbnMucGFyZW50Q29udGV4dCBDcmVhdGUgdGhlIGNvbnRleHQgYXMgYVx0IGNoaWxkIG9mIHRoaXMgY29udGV4dCAob255IHVzZWQgaW4gY2FzZSBvZiBhIGhpZXJhcmNoeSkuXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGNvbnRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUNvbnRleHQoXG5cdFx0bGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0aW5pdGlhbERhdGE6IG9iamVjdCB8IHVuZGVmaW5lZCxcblx0XHRvcHRpb25zOiB7IGNyZWF0ZUF0RW5kPzogYm9vbGVhbjsgY3JlYXRlSW5hY3RpdmU/OiBib29sZWFuOyBwYXJlbnRDb250ZXh0PzogT0RhdGFWNENvbnRleHQgfVxuXHQpOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0PiB7XG5cdFx0Y29uc3QgZGF0YUZvckNyZWF0aW9uID0gaW5pdGlhbERhdGEgPz8ge307XG5cblx0XHRpZiAodGhpcy5pc0xpc3RCaW5kaW5nSGllcmFyY2hpY2FsKGxpc3RCaW5kaW5nKSkge1xuXHRcdFx0bGV0IGxpc3RCaW5kaW5nRm9yQ3JlYXRpb246IE9EYXRhTGlzdEJpbmRpbmc7XG5cdFx0XHRpZiAob3B0aW9ucy5wYXJlbnRDb250ZXh0Py5pc0V4cGFuZGVkKCkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdC8vIElmIHRoZSBwYXJlbnQgY29udGV4dCBhbHJlYWR5IGhhcyBjaGlsZHJlbiBhbmQgaXMgY29sbGFwc2VkLCB3ZSBleHBhbmQgaXQgZmlyc3Rcblx0XHRcdFx0YXdhaXQgbGlzdEJpbmRpbmcuZXhwYW5kKG9wdGlvbnMucGFyZW50Q29udGV4dCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsaXN0QmluZGluZy5pc1JlbGF0aXZlKCkpIHtcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihkYXRhRm9yQ3JlYXRpb24sIHsgXCJAJHVpNS5ub2RlLnBhcmVudFwiOiBvcHRpb25zLnBhcmVudENvbnRleHQgfSk7XG5cdFx0XHRcdGxpc3RCaW5kaW5nRm9yQ3JlYXRpb24gPSBsaXN0QmluZGluZztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEFic29sdXRlIGJpbmRpbmc6IGNyZWF0aW9uIGZyb20gdGhlIExpc3RSZXBvcnRcblx0XHRcdFx0Ly8gV2UgdXNlIGEgdGVtcG9yYXJ5IGZsYXQgbGlzdEJpbmRpbmcgZm9yIHRoZSBjcmVhdGlvbiwgdG8gYXZvaWQgYWRkaW5nIHRoZSBuZXcgY29udGV4dCBpbiB0aGUgdGFibGUgKHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSBpdCB1bnRpbCBpdCdzIHNhdmVkKVxuXHRcdFx0XHRjb25zdCBtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRsaXN0QmluZGluZ0ZvckNyZWF0aW9uID0gbW9kZWwuYmluZExpc3QobGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG5cdFx0XHRcdFx0JCRncm91cElkOiBsaXN0QmluZGluZy5nZXRHcm91cElkKCksXG5cdFx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBsaXN0QmluZGluZy5nZXRVcGRhdGVHcm91cElkKClcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gQWRkIHRoZSBwYXJlbnQgcGF0aCBpbiB0aGUgaW5pdGlhbCBkYXRhIGlmIGEgcGFyZW50IGlzIHByb3ZpZGVkXG5cdFx0XHRcdGlmIChvcHRpb25zLnBhcmVudENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobGlzdEJpbmRpbmcuZ2V0UGF0aCgpKSk7XG5cdFx0XHRcdFx0Y29uc3QgaGllcmFyY2h5UXVhbGlmaWVyID0gKGxpc3RCaW5kaW5nLmdldEFnZ3JlZ2F0aW9uKCkgYXMgeyBoaWVyYXJjaHlRdWFsaWZpZXI6IHN0cmluZyB9KS5oaWVyYXJjaHlRdWFsaWZpZXI7XG5cdFx0XHRcdFx0Y29uc3QgcGFyZW50TmF2aWdhdGlvbiA9XG5cdFx0XHRcdFx0XHRvYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQWdncmVnYXRpb24/LltgUmVjdXJzaXZlSGllcmFyY2h5IyR7aGllcmFyY2h5UXVhbGlmaWVyfWBdXG5cdFx0XHRcdFx0XHRcdD8uUGFyZW50TmF2aWdhdGlvblByb3BlcnR5LnZhbHVlO1xuXHRcdFx0XHRcdGlmICghcGFyZW50TmF2aWdhdGlvbikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBwYXJlbnQgbmF2aWdhdGlvbiBwcm9wZXJ0eSBmb3IgJHtsaXN0QmluZGluZy5nZXRQYXRoKCl9YCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHBhcmVudEJpbmRpbmdEYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0XHRcdFx0cGFyZW50QmluZGluZ0RhdGFbYCR7cGFyZW50TmF2aWdhdGlvbn1Ab2RhdGEuYmluZGBdID0gb3B0aW9ucy5wYXJlbnRDb250ZXh0LmdldFBhdGgoKS5yZXBsYWNlKC9eXFwvLywgXCJcIik7IC8vIFJlbW92ZSBsZWFkaW5nIFwiL1wiIGZyb20gdGhlIHBhdGhcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGRhdGFGb3JDcmVhdGlvbiwgcGFyZW50QmluZGluZ0RhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBsaXN0QmluZGluZ0ZvckNyZWF0aW9uLmNyZWF0ZShkYXRhRm9yQ3JlYXRpb24sIHRydWUpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5pc0xpc3RCaW5kaW5nQW5hbHl0aWNhbChsaXN0QmluZGluZykpIHtcblx0XHRcdGlmIChsaXN0QmluZGluZy5pc1JlbGF0aXZlKCkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ3JlYXRpbmcgYSBuZXcgZG9jdW1lbnQgaW4gYSBhbmFseXRpY2FsIHRhYmxlIGlzIHN1cHBvcnRlZCBvbmx5IGluIGEgTGlzdFJlcG9ydFwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlIHVzZSBhIHRlbXBvcmFyeSBmbGF0IGxpc3RCaW5kaW5nIGZvciB0aGUgY3JlYXRpb24sIHRvIGF2b2lkIGFkZGluZyB0aGUgbmV3IGNvbnRleHQgaW4gdGhlIHRhYmxlICh3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgaXQgdW50aWwgaXQncyBzYXZlZClcblx0XHRcdFx0Y29uc3QgbW9kZWwgPSBsaXN0QmluZGluZy5nZXRNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBsaXN0QmluZGluZ0ZvckNyZWF0aW9uID0gbW9kZWwuYmluZExpc3QobGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG5cdFx0XHRcdFx0JCRncm91cElkOiBsaXN0QmluZGluZy5nZXRHcm91cElkKCksXG5cdFx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBsaXN0QmluZGluZy5nZXRVcGRhdGVHcm91cElkKClcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBsaXN0QmluZGluZ0ZvckNyZWF0aW9uLmNyZWF0ZShkYXRhRm9yQ3JlYXRpb24sIHRydWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbGlzdEJpbmRpbmcuY3JlYXRlKGRhdGFGb3JDcmVhdGlvbiwgdHJ1ZSwgb3B0aW9ucy5jcmVhdGVBdEVuZCwgb3B0aW9ucy5jcmVhdGVJbmFjdGl2ZSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q3JlYXRpb25QYXJhbWV0ZXJzKGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLCBjcmVhdGVEYXRhOiBvYmplY3QgfCB1bmRlZmluZWQsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgobGlzdEJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpIS5nZXRQYXRoKCkpO1xuXG5cdFx0Y29uc3Qgbm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzID0gZ2V0Q3JlYXRlUG9wdXBGaWVsZHMobWV0YU1vZGVsLCBtZXRhUGF0aCwgYXBwQ29tcG9uZW50KTtcblx0XHQvLyBEbyBub3QgY29uc2lkZXIgZmllbGRzIGZvciB3aGljaCB3ZSBwcm92aWRlIHNvbWUgaW5pdGlhbCBkYXRhXG5cdFx0cmV0dXJuIG5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcy5maWx0ZXIoKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRyZXR1cm4gIShmaWVsZE5hbWUgaW4gKGNyZWF0ZURhdGEgPz8ge30pKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gbWFpbkxpc3RCaW5kaW5nIE9EYXRhIFY0IExpc3RCaW5kaW5nIG9iamVjdFxuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIFtpblBhcmFtZXRlcnMuZGF0YV0gQSBtYXAgb2YgZGF0YSB0aGF0IHNob3VsZCBiZSBzZW50IHdpdGhpbiB0aGUgUE9TVFxuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVycy5idXN5TW9kZV0gR2xvYmFsIChkZWZhdWx0KSwgTG9jYWwsIE5vbmUgVE9ETzogdG8gYmUgcmVmYWN0b3JlZFxuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVycy5idXN5SWRdIElEIG9mIHRoZSBsb2NhbCBidXN5IGluZGljYXRvclxuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkXSBJZiBzZXQsIHRoZSBjb250ZXh0IHN0YXlzIGluIHRoZSBsaXN0IGlmIHRoZSBQT1NUIGZhaWxlZCBhbmQgUE9TVCB3aWxsIGJlIHJlcGVhdGVkIHdpdGggdGhlIG5leHQgY2hhbmdlXG5cdCAqIEBwYXJhbSBbaW5QYXJhbWV0ZXJzLmluYWN0aXZlXSBJZiBzZXQsIHRoZSBjb250ZXh0IGlzIHNldCBhcyBpbmFjdGl2ZSBmb3IgZW1wdHkgcm93c1xuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nXSBTa2lwcyB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2dcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwIGNvbXBvbmVudFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBUaGUgcmVzb3VyY2UgbW9kZWxcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXIgZXh0ZW5zaW9uXG5cdCAqIEBwYXJhbSBmcm9tQ29weVBhc3RlIFRydWUgaWYgdGhlIGNyZWF0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCBieSBhIHBhc3RlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggbmV3IGJpbmRpbmcgY29udGV4dFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIGNyZWF0ZURvY3VtZW50KFxuXHRcdG1haW5MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRpblBhcmFtZXRlcnM6IENyZWF0ZVBhcmFtZXRlcnMgfCB1bmRlZmluZWQsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdFx0ZnJvbUNvcHlQYXN0ZTogYm9vbGVhblxuXHQpOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0PiB7XG5cdFx0bGV0IG5ld0RvY3VtZW50Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVycyA9IGdldFBhcmFtZXRlcnMoaW5QYXJhbWV0ZXJzKTtcblx0XHRpZiAoIW1haW5MaXN0QmluZGluZykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQmluZGluZyByZXF1aXJlZCBmb3IgbmV3IGRvY3VtZW50IGNyZWF0aW9uXCIpO1xuXHRcdH1cblx0XHRjb25zdCBwcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG1haW5MaXN0QmluZGluZyk7XG5cdFx0aWYgKHByb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQgJiYgcHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNyZWF0ZSBkb2N1bWVudCBvbmx5IGFsbG93ZWQgZm9yIGRyYWZ0IG9yIHN0aWNreSBzZXNzaW9uIHN1cHBvcnRlZCBzZXJ2aWNlc1wiKTtcblx0XHR9XG5cdFx0Y29uc3QgYnVzeVBhdGggPSB0aGlzLmdldEJ1c3lQYXRoKHBhcmFtZXRlcnMpO1xuXHRcdHBhcmFtZXRlcnMuYmVmb3JlQ3JlYXRlQ2FsbEJhY2sgPSBmcm9tQ29weVBhc3RlID8gdW5kZWZpbmVkIDogcGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjaztcblx0XHRpZiAoIWluUGFyYW1ldGVycz8uaW5hY3RpdmUpIHtcblx0XHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50LCBidXN5UGF0aCk7XG5cdFx0fVxuXHRcdGNvbnN0IG1lc3NhZ2VIYW5kbGluZ0tleSA9IG1lc3NhZ2VIYW5kbGVyLnJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMoKTtcblx0XHR0cnkge1xuXHRcdFx0bmV3RG9jdW1lbnRDb250ZXh0ID0gYXdhaXQgdGhpcy5wZXJmb3JtQ3JlYXRpb24oXG5cdFx0XHRcdG1haW5MaXN0QmluZGluZyxcblx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0XHRtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0ZnJvbUNvcHlQYXN0ZVxuXHRcdFx0KTtcblx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHsgY29udHJvbDogcGFyYW1ldGVycy5wYXJlbnRDb250cm9sLCB1bkhvbGRLZXk6IG1lc3NhZ2VIYW5kbGluZ0tleSB9KTtcblx0XHRcdHJldHVybiBuZXdEb2N1bWVudENvbnRleHQhO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHQvLyBUT0RPOiBjdXJyZW50bHksIHRoZSBvbmx5IGVycm9ycyBoYW5kbGVkIGhlcmUgYXJlIHJhaXNlZCBhcyBzdHJpbmcgLSBzaG91bGQgYmUgY2hhbmdlZCB0byBFcnJvciBvYmplY3RzXG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7IGNvbnRyb2w6IHBhcmFtZXRlcnMucGFyZW50Q29udHJvbCwgdW5Ib2xkS2V5OiBtZXNzYWdlSGFuZGxpbmdLZXkgfSk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChlcnJvciA9PT0gRkVMaWJyYXJ5LkNvbnN0YW50cy5BY3Rpb25FeGVjdXRpb25GYWlsZWQgfHwgZXJyb3IgPT09IEZFTGlicmFyeS5Db25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKSAmJlxuXHRcdFx0XHRuZXdEb2N1bWVudENvbnRleHQ/LmlzVHJhbnNpZW50KClcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBzdWdnZXN0ZWQgYnkgbW9kZWwgYXMgQ29udGV4dC5kZWxldGUgcmVzdWx0cyBpbiBhbiBlcnJvclxuXHRcdFx0XHQvLyBUT0RPOiByZW1vdmUgdGhlICRkaXJlY3Qgb25jZSBtb2RlbCByZXNvbHZlcyB0aGlzIGlzc3VlXG5cdFx0XHRcdC8vIHRoaXMgbGluZSBzaG93cyB0aGUgZXhwZWN0ZWQgY29uc29sZSBlcnJvciBVbmNhdWdodCAoaW4gcHJvbWlzZSkgRXJyb3I6IFJlcXVlc3QgY2FuY2VsZWQ6IFBPU1QgVHJhdmVsOyBncm91cDogc3VibWl0TGF0ZXJcblx0XHRcdFx0bmV3RG9jdW1lbnRDb250ZXh0LmRlbGV0ZShcIiRkaXJlY3RcIik7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKCFpblBhcmFtZXRlcnM/LmluYWN0aXZlKSB7XG5cdFx0XHRcdHRoaXMuYnVzeVVubG9jayhhcHBDb21wb25lbnQsIGJ1c3lQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEJ1c3lQYXRoKG1QYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gbVBhcmFtZXRlcnMuYnVzeU1vZGUgPT09IFwiTG9jYWxcIiA/IGAvYnVzeUxvY2FsLyR7bVBhcmFtZXRlcnMuYnVzeUlkfWAgOiBcIi9idXN5XCI7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBkb2N1bWVudC5cblx0ICogQHBhcmFtIG1haW5MaXN0QmluZGluZyBPRGF0YSBWNCBMaXN0QmluZGluZyBvYmplY3QuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlc1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5kYXRhIEEgbWFwIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgc2VudCB3aXRoaW4gdGhlIFBPU1Rcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYnVzeU1vZGUgR2xvYmFsIChkZWZhdWx0KSwgTG9jYWwsIE5vbmVcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYnVzeUlkIElEIG9mIHRoZSBsb2NhbCBidXN5IGluZGljYXRvclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkIElmIHNldCwgdGhlIGNvbnRleHQgc3RheXMgaW4gdGhlIGxpc3QgaWYgdGhlIFBPU1QgZmFpbGVkIGFuZCBQT1NUIHdpbGwgYmUgcmVwZWF0ZWQgd2l0aCB0aGUgbmV4dCBjaGFuZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGFyZW50Q29udHJvbFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5pbmFjdGl2ZSBJZiBzZXQsIHRoZSBjb250ZXh0IGlzIHNldCBhcyBpbmFjdGl2ZSBmb3IgZW1wdHkgcm93c1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjayBDYWxsYmFjayB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjcmVhdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nIFNraXBzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZ1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5jcmVhdGVBdEVuZCBDcmVhdGUgdGhlIGNvbnRleHQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCAoaWdub3JlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuY3JlYXRlSW5hY3RpdmUgQ3JlYXRlIHRoZSBjb250ZXh0IGFzIGluYWN0aXZlIChpZ25vcmVkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wYXJlbnRDb250ZXh0IENyZWF0ZSB0aGUgY29udGV4dCBhcyBhIGNoaWxkIG9mIHRoaXMgY29udGV4dCAob25seSB1c2VkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggbmV3IGJpbmRpbmcgY29udGV4dFxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVEb2N1bWVudENvbnRleHQobWFpbkxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzKTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD4ge1xuXHRcdGlmIChwYXJhbWV0ZXJzLmJlZm9yZUNyZWF0ZUNhbGxCYWNrKSB7XG5cdFx0XHQvL2JlZm9yZUNyZWF0ZUNhbGxCYWNrIGV4cGVjdHMgY3JlYXRlUGFyYW1ldGVycyBvZiB0eXBlIGFueVtdXG5cdFx0XHRjb25zdCBjcmVhdGVQYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5kYXRhID8gT2JqZWN0LmVudHJpZXMocGFyYW1ldGVycy5kYXRhKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHsgW2tleV06IHZhbHVlIH0pKSA6IFtdO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdG9FUzZQcm9taXNlKFxuXHRcdFx0XHRcdHBhcmFtZXRlcnMuYmVmb3JlQ3JlYXRlQ2FsbEJhY2soe1xuXHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IG1haW5MaXN0QmluZGluZyAmJiBtYWluTGlzdEJpbmRpbmcuZ2V0UGF0aCgpLFxuXHRcdFx0XHRcdFx0Y3JlYXRlUGFyYW1ldGVyczogY3JlYXRlUGFyYW1ldGVyc1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0dGhyb3cgRkVMaWJyYXJ5LkNvbnN0YW50cy5PbkJlZm9yZUNyZWF0ZUZhaWxlZDtcblx0XHRcdH1cblx0XHRcdHBhcmFtZXRlcnMuZGF0YSA9IGNyZWF0ZVBhcmFtZXRlcnMucmVkdWNlKChyZXN1bHQsIGN1cnJlbnRPYmplY3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIHsgLi4ucmVzdWx0LCAuLi5jdXJyZW50T2JqZWN0IH07XG5cdFx0XHR9LCB7fSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNyZWF0ZUNvbnRleHQobWFpbkxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzLmRhdGEsIHtcblx0XHRcdGNyZWF0ZUF0RW5kOiAhIXBhcmFtZXRlcnMuY3JlYXRlQXRFbmQsXG5cdFx0XHRjcmVhdGVJbmFjdGl2ZTogISFwYXJhbWV0ZXJzLmluYWN0aXZlLFxuXHRcdFx0cGFyZW50Q29udGV4dDogcGFyYW1ldGVycy5wYXJlbnRDb250ZXh0XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBkb2N1bWVudCBlaXRoZXIgdmlhIG5ldyBBY3Rpb24gb3Igc3RhbmRhcmQgUE9TVCBjcmVhdGUuXG5cdCAqIEBwYXJhbSBtYWluTGlzdEJpbmRpbmcgT0RhdGEgVjQgTGlzdEJpbmRpbmcgb2JqZWN0XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlc1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5kYXRhIEEgbWFwIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgc2VudCB3aXRoaW4gdGhlIFBPU1Rcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYnVzeU1vZGUgR2xvYmFsIChkZWZhdWx0KSwgTG9jYWwsIE5vbmVcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYnVzeUlkIElEIG9mIHRoZSBsb2NhbCBidXN5IGluZGljYXRvclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5rZWVwVHJhbnNpZW50Q29udGV4dE9uRmFpbGVkIElmIHNldCwgdGhlIGNvbnRleHQgc3RheXMgaW4gdGhlIGxpc3QgaWYgdGhlIFBPU1QgZmFpbGVkIGFuZCBQT1NUIHdpbGwgYmUgcmVwZWF0ZWQgd2l0aCB0aGUgbmV4dCBjaGFuZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGFyZW50Q29udHJvbFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5pbmFjdGl2ZSBJZiBzZXQsIHRoZSBjb250ZXh0IGlzIHNldCBhcyBpbmFjdGl2ZSBmb3IgZW1wdHkgcm93c1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjayBDYWxsYmFjayB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjcmVhdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nIFNraXBzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZ1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5jcmVhdGVBdEVuZCBDcmVhdGUgdGhlIGNvbnRleHQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCAoaWdub3JlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuY3JlYXRlSW5hY3RpdmUgQ3JlYXRlIHRoZSBjb250ZXh0IGFzIGluYWN0aXZlIChpZ25vcmVkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wYXJlbnRDb250ZXh0IENyZWF0ZSB0aGUgY29udGV4dCBhcyBhIGNoaWxkIG9mIHRoaXMgY29udGV4dCAob25seSB1c2VkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGV4dGVuc2lvblxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuXHQgKiBAcGFyYW0gZnJvbUNvcHlQYXN0ZSBUcnVlIGlmIHRoZSBjcmVhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgYSBwYXN0ZSBhY3Rpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIG5ldyBiaW5kaW5nIGNvbnRleHRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcGVyZm9ybUNyZWF0aW9uKFxuXHRcdG1haW5MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdGZyb21Db3B5UGFzdGU6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1haW5MaXN0QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKG1haW5MaXN0QmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCkhLmdldFBhdGgoKSk7XG5cdFx0Y29uc3QgY3JlYXRlSGFzaCA9IGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmdldEhhc2goKTtcblx0XHRjb25zdCBjb21wb25lbnREYXRhID0gYXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKTtcblx0XHRjb25zdCBzdGFydHVwUGFyYW1ldGVycyA9IGNvbXBvbmVudERhdGE/LnN0YXJ0dXBQYXJhbWV0ZXJzID8/IHt9O1xuXHRcdGNvbnN0IG5ld0FjdGlvbiA9ICFtYWluTGlzdEJpbmRpbmcuaXNSZWxhdGl2ZSgpXG5cdFx0XHQ/IHRoaXMuX2dldE5ld0FjdGlvbihzdGFydHVwUGFyYW1ldGVycywgY3JlYXRlSGFzaCwgbWV0YU1vZGVsLCBtZXRhUGF0aClcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKG5ld0FjdGlvbikge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJmb3JtQ3JlYXRpb25XaXRoQWN0aW9uKFxuXHRcdFx0XHRuZXdBY3Rpb24sXG5cdFx0XHRcdG1haW5MaXN0QmluZGluZyxcblx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdGlmIChyZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpIHtcblx0XHRcdFx0dGhyb3cgcmVzdWx0LnJlYXNvbjtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQudmFsdWUucmV0dXJuZWRDb250ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wZXJmb3JtQ3JlYXRpb25XaXRoUE9TVChtYWluTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnMsIGFwcENvbXBvbmVudCwgcmVzb3VyY2VNb2RlbCwgbWVzc2FnZUhhbmRsZXIsIGZyb21Db3B5UGFzdGUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgZG9jdW1lbnQgd2l0aCBhbiBhY3Rpb24uXG5cdCAqIEBwYXJhbSBhY3Rpb25OYW1lXG5cdCAqIEBwYXJhbSBtYWluTGlzdEJpbmRpbmdcblx0ICogQHBhcmFtIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXJcblx0ICogQHJldHVybnMgVGhlIGNyZWF0ZWQgY29udGV4dC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcGVyZm9ybUNyZWF0aW9uV2l0aEFjdGlvbihcblx0XHRhY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0bWFpbkxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLFxuXHRcdHBhcmFtZXRlcnM6IENyZWF0ZVBhcmFtZXRlcnMsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcblx0KTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+PiB7XG5cdFx0Y29uc3QgaGVhZGVyQ29udGV4dFBhdGggPSBtYWluTGlzdEJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpIS5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbWFpbkxpc3RCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoaGVhZGVyQ29udGV4dFBhdGgpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzUGF0aCA9IE1vZGVsSGVscGVyLmdldE1lc3NhZ2VzUGF0aChtZXRhTW9kZWwsIG1ldGFQYXRoKTtcblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyczogQmluZENvbnRleHRQYXJhbWV0ZXJzID0geyAkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzOiB0cnVlIH07XG5cblx0XHRpZiAobWVzc2FnZXNQYXRoKSB7XG5cdFx0XHRiaW5kaW5nUGFyYW1ldGVyc1tcIiRzZWxlY3RcIl0gPSBtZXNzYWdlc1BhdGg7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2FsbEFjdGlvbihcblx0XHRcdGFjdGlvbk5hbWUsXG5cdFx0XHR7XG5cdFx0XHRcdGNvbnRleHRzOiBtYWluTGlzdEJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpLFxuXHRcdFx0XHRzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nOiB0cnVlLFxuXHRcdFx0XHRsYWJlbDogdGhpcy5fZ2V0U3BlY2lmaWNDcmVhdGVBY3Rpb25EaWFsb2dMYWJlbChtZXRhTW9kZWwsIG1ldGFQYXRoLCBhY3Rpb25OYW1lLCByZXNvdXJjZU1vZGVsKSxcblx0XHRcdFx0YmluZGluZ1BhcmFtZXRlcnM6IGJpbmRpbmdQYXJhbWV0ZXJzLFxuXHRcdFx0XHR2aWV3OiBwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdGlzQ3JlYXRlQWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nOiBwYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2dcblx0XHRcdH0sXG5cdFx0XHRhcHBDb21wb25lbnQsXG5cdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdCk7XG5cdFx0cmV0dXJuIHJlc3VsdFswXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgZG9jdWVtbnQgd2l0aCBhIHN0YW5kYXJkIFBPU1QgcmVxdWVzdC5cblx0ICogQHBhcmFtIG1haW5MaXN0QmluZGluZ1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50XG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0gZnJvbUNvcHlQYXN0ZVxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb250ZXh0LlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBwZXJmb3JtQ3JlYXRpb25XaXRoUE9TVChcblx0XHRtYWluTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUGFyYW1ldGVycyxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRmcm9tQ29weVBhc3RlOiBib29sZWFuXG5cdCk6IFByb21pc2U8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0bGV0IG5ld0RvY3VtZW50Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBpbml0aWFsRGF0YSA9IHBhcmFtZXRlcnMuZGF0YTtcblx0XHRcdGlmICghZnJvbUNvcHlQYXN0ZSkge1xuXHRcdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGEgPSBhd2FpdCB0aGlzLmdldERhdGFGcm9tRGVmYXVsdFZhbHVlRnVuY3Rpb24obWFpbkxpc3RCaW5kaW5nKTtcblx0XHRcdFx0cGFyYW1ldGVycy5kYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhLCBwYXJhbWV0ZXJzLmRhdGEpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtZXRlcnMuZGF0YSkge1xuXHRcdFx0XHRkZWxldGUgcGFyYW1ldGVycy5kYXRhW1wiQG9kYXRhLmNvbnRleHRcIl07XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNhbkhhdmVEaWFsb2cgPSBwYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93ICYmIHBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRcdFx0Y29uc3QgY3JlYXRpb25EaWFsb2dGaWVsZHMgPSBjYW5IYXZlRGlhbG9nID8gdGhpcy5nZXRDcmVhdGlvblBhcmFtZXRlcnMobWFpbkxpc3RCaW5kaW5nLCBpbml0aWFsRGF0YSwgYXBwQ29tcG9uZW50KSA6IFtdO1xuXHRcdFx0aWYgKHBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2cpIHtcblx0XHRcdFx0cGFyYW1ldGVycy5jcmVhdGlvbkRpYWxvZ0ZpZWxkcz8uZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCFjcmVhdGlvbkRpYWxvZ0ZpZWxkcy5pbmNsdWRlcyhmaWVsZE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGlvbkRpYWxvZ0ZpZWxkcy5wdXNoKGZpZWxkTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoY3JlYXRpb25EaWFsb2dGaWVsZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0Ly8gSW4gQ3JlYXRpb25EaWFsb2cgbW9kZSwgdGhlIGRpYWxvZyBpcyBtYW5kYXRvcnlcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJObyBmaWVsZHMgYXZhaWxhYmxlIGZvciB0aGUgY3JlYXRpb24gZGlhbG9nXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjcmVhdGlvbkRpYWxvZ0ZpZWxkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG5ld0RvY3VtZW50Q29udGV4dCA9IGF3YWl0IHRoaXMuY3JlYXRlV2l0aERpYWxvZyhcblx0XHRcdFx0XHRtYWluTGlzdEJpbmRpbmcsXG5cdFx0XHRcdFx0Y3JlYXRpb25EaWFsb2dGaWVsZHMsXG5cdFx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0XHRhcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3RG9jdW1lbnRDb250ZXh0ID0gYXdhaXQgdGhpcy5jcmVhdGVEb2N1bWVudENvbnRleHQobWFpbkxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKCFwYXJhbWV0ZXJzLmluYWN0aXZlKSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy53YWl0Rm9yQ3JlYXRlQ29tcGxldGlvbihuZXdEb2N1bWVudENvbnRleHQsIHBhcmFtZXRlcnMua2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZCA9PT0gdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBuZXdEb2N1bWVudENvbnRleHQ7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1zZyA9IChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBlcnJvcjtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSBuZXcgZG9jdW1lbnRcIiwgbXNnKTtcblx0XHRcdHRocm93IG1zZztcblx0XHR9XG5cdH1cblxuXHRfaXNEcmFmdEVuYWJsZWQodkNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY29udGV4dEZvckRyYWZ0TW9kZWwgPSB2Q29udGV4dHNbMF07XG5cdFx0Y29uc3Qgc1Byb2dyYW1taW5nTW9kZWwgPSB0aGlzLmdldFByb2dyYW1taW5nTW9kZWwoY29udGV4dEZvckRyYWZ0TW9kZWwpO1xuXHRcdHJldHVybiBzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGUgb25lIG9yIG11bHRpcGxlIGRvY3VtZW50KHMpLlxuXHQgKiBAcGFyYW0gY29udGV4dHMgQ29udGV4dHMgRWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgdG8gYmUgZGVsZXRlZFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLnRpdGxlIFRpdGxlIG9mIHRoZSBvYmplY3QgdG8gYmUgZGVsZXRlZFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gb2YgdGhlIG9iamVjdCB0byBiZSBkZWxldGVkXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgTnVtYmVyIG9mIG9iamVjdHMgc2VsZWN0ZWRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLm5vRGlhbG9nIFRvIGRpc2FibGUgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2dcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwQ29tcG9uZW50XG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFRoZSByZXNvdXJjZSBtb2RlbCB0byBsb2FkIHRleHQgcmVzb3VyY2VzXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGV4dGVuc2lvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2ZWQgb25jZSB0aGUgZG9jdW1lbnRzIGFyZSBkZWxldGVkXG5cdCAqL1xuXHRhc3luYyBkZWxldGVEb2N1bWVudChcblx0XHRjb250ZXh0czogT0RhdGFWNENvbnRleHQgfCBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdG1QYXJhbWV0ZXJzOiBUcmFuc2FjdGlvbkRlbGV0ZVBhcmFtZXRlcnMsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gZGVsZXRlIGRvY3VtZW50IGxvY2tcblx0XHR0aGlzLmJ1c3lMb2NrKGFwcENvbXBvbmVudCk7XG5cblx0XHRjb25zdCBjb250ZXh0c1RvRGVsZXRlID0gQXJyYXkuaXNBcnJheShjb250ZXh0cykgPyBbLi4uY29udGV4dHNdIDogW2NvbnRleHRzXTtcblx0XHRjb25zdCBmaXJzdENvbnRleHQgPSAobVBhcmFtZXRlcnMuc2VsZWN0ZWRDb250ZXh0cyA/PyBjb250ZXh0c1RvRGVsZXRlKVswXTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBkcmFmdEVuYWJsZWQgPSB0aGlzLl9pc0RyYWZ0RW5hYmxlZChtUGFyYW1ldGVycy5zZWxlY3RlZENvbnRleHRzIHx8IGNvbnRleHRzVG9EZWxldGUpO1xuXHRcdFx0XHRjb25zdCBpdGVtczogQ29udHJvbFtdID0gW107XG5cdFx0XHRcdGxldCBvcHRpb25zOiBEZWxldGVPcHRpb25bXSA9IFtdO1xuXHRcdFx0XHRsZXQgdW5TYXZlZENvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIGl0ZW1zKHRleHRzKSBhbmQgb3B0aW9ucyhjaGVja0JveGVzIGFuZCBzaW5nbGUgZGVmYXVsdCBvcHRpb24pIGZvciBjb25maXJtIGRpYWxvZy5cblx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lID0gdGhpcy5nZXRDb2xsZWN0aW9uTmFtZUZyb21Db250ZXh0KGZpcnN0Q29udGV4dCk7XG5cdFx0XHRcdFx0aWYgKCFtUGFyYW1ldGVycy5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdFx0XHRcdC8vIG5vbi1UYWJsZVxuXHRcdFx0XHRcdFx0aWYgKGRyYWZ0RW5hYmxlZCkge1xuXHRcdFx0XHRcdFx0XHQvLyBDaGVjayBpZiAxIG9mIHRoZSBkcmFmdHMgaXMgbG9ja2VkIGJ5IGFub3RoZXIgdXNlclxuXHRcdFx0XHRcdFx0XHRjb25zdCBsb2NrZWRDb250ZXh0ID0gY29udGV4dHNUb0RlbGV0ZS5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgY29udGV4dERhdGEgPSBjb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YS5Jc0FjdGl2ZUVudGl0eSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGEuSGFzRHJhZnRFbnRpdHkgPT09IHRydWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YS5EcmFmdEFkbWluaXN0cmF0aXZlRGF0YS5JblByb2Nlc3NCeVVzZXIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdCFjb250ZXh0RGF0YS5EcmFmdEFkbWluaXN0cmF0aXZlRGF0YS5EcmFmdElzQ3JlYXRlZEJ5TWVcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0aWYgKGxvY2tlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBTaG93IG1lc3NhZ2UgYm94IHdpdGggdGhlIG5hbWUgb2YgdGhlIGxvY2tpbmcgdXNlciBhbmQgcmV0dXJuXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbG9ja2luZ1VzZXJOYW1lID0gbG9ja2VkQ29udGV4dC5nZXRPYmplY3QoKS5EcmFmdEFkbWluaXN0cmF0aXZlRGF0YS5JblByb2Nlc3NCeVVzZXI7XG5cdFx0XHRcdFx0XHRcdFx0TWVzc2FnZUJveC5zaG93KFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9TSU5HTEVfT0JKRUNUX0xPQ0tFRFwiLCBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxvY2tpbmdVc2VyTmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0XSksXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ERUxFVEVcIiksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xvc2U6IHJlamVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHVuU2F2ZWRDb250ZXh0ID0gY29udGV4dHNUb0RlbGV0ZS5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB7IElzQWN0aXZlRW50aXR5LCBIYXNEcmFmdEVudGl0eSwgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgfSA9IGNvbnRleHQuZ2V0T2JqZWN0KCkgfHwge307XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gSXNBY3RpdmVFbnRpdHkgPT09IHRydWUgJiYgSGFzRHJhZnRFbnRpdHkgPT09IHRydWUgJiYgISFEcmFmdEFkbWluaXN0cmF0aXZlRGF0YT8uSW5Qcm9jZXNzQnlVc2VyO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRsZXQgbm9uVGFibGVUeHQgPSBcIlwiO1xuXHRcdFx0XHRcdFx0aWYgKHVuU2F2ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHVuU2F2ZWRDb250ZXh0VXNlciA9IHVuU2F2ZWRDb250ZXh0LmdldE9iamVjdCgpLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLkluUHJvY2Vzc0J5VXNlcjtcblx0XHRcdFx0XHRcdFx0bm9uVGFibGVUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU1wiLFxuXHRcdFx0XHRcdFx0XHRcdFt1blNhdmVkQ29udGV4dFVzZXJdLFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAobVBhcmFtZXRlcnMudGl0bGUpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9uVGFibGVUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0W21QYXJhbWV0ZXJzLnRpdGxlLCBtUGFyYW1ldGVycy5kZXNjcmlwdGlvbl0sXG5cdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRub25UYWJsZVR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9PTkxZXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRbbVBhcmFtZXRlcnMudGl0bGVdLFxuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG5vblRhYmxlVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUlwiLFxuXHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IGNvbnRleHRzVG9EZWxldGUsXG5cdFx0XHRcdFx0XHRcdHRleHQ6IG5vblRhYmxlVHh0LFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFRhYmxlXG5cdFx0XHRcdFx0XHRsZXQgdG90YWxEZWxldGFibGUgPSBjb250ZXh0c1RvRGVsZXRlLmxlbmd0aDtcblxuXHRcdFx0XHRcdFx0aWYgKGRyYWZ0RW5hYmxlZCkge1xuXHRcdFx0XHRcdFx0XHR0b3RhbERlbGV0YWJsZSArPVxuXHRcdFx0XHRcdFx0XHRcdChtUGFyYW1ldGVycy5kcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlPy5sZW5ndGggPz8gMCkgK1xuXHRcdFx0XHRcdFx0XHRcdChtUGFyYW1ldGVycy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlPy5sZW5ndGggPz8gMCkgK1xuXHRcdFx0XHRcdFx0XHRcdChtUGFyYW1ldGVycy51blNhdmVkQ29udGV4dHM/Lmxlbmd0aCA/PyAwKTtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlSGVscGVyLnVwZGF0ZURyYWZ0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzKFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHRzVG9EZWxldGUsXG5cdFx0XHRcdFx0XHRcdFx0dG90YWxEZWxldGFibGUsXG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRpdGVtcyxcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBub25EZWxldGFibGVUZXh0ID0gZGVsZXRlSGVscGVyLmdldE5vbkRlbGV0YWJsZVRleHQobVBhcmFtZXRlcnMsIHRvdGFsRGVsZXRhYmxlLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdFx0XHRcdFx0aWYgKG5vbkRlbGV0YWJsZVRleHQpIHtcblx0XHRcdFx0XHRcdFx0XHRpdGVtcy5wdXNoKG5vbkRlbGV0YWJsZVRleHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbnNEZWxldGFibGVUZXh0cyA9IGRlbGV0ZUhlbHBlci5nZXRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMoXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0c1RvRGVsZXRlLFxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0b3B0aW9ucyA9IFsuLi5vcHRpb25zLCAuLi5vcHRpb25zRGVsZXRhYmxlVGV4dHNdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGNvbW1vbkJpbmRpbmcgPSBmaXJzdENvbnRleHQuZ2V0QmluZGluZygpIGFzIEJpbmRpbmc7XG5cdFx0XHRcdGxldCBiaW5kaW5nVHlwZTogXCJUcmVlXCIgfCBcIkFuYWx5dGljYWxcIiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGNvbW1vbkJpbmRpbmcuaXNBPE9EYXRhTGlzdEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5pc0xpc3RCaW5kaW5nSGllcmFyY2hpY2FsKGNvbW1vbkJpbmRpbmcpKSB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nVHlwZSA9IFwiVHJlZVwiO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5pc0xpc3RCaW5kaW5nQW5hbHl0aWNhbChjb21tb25CaW5kaW5nKSkge1xuXHRcdFx0XHRcdFx0YmluZGluZ1R5cGUgPSBcIkFuYWx5dGljYWxcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb250ZW50IG9mIERlbGV0ZSBEaWFsb2dcblx0XHRcdFx0ZGVsZXRlSGVscGVyLnVwZGF0ZUNvbnRlbnRGb3JEZWxldGVEaWFsb2cob3B0aW9ucywgaXRlbXMpO1xuXHRcdFx0XHRjb25zdCBmbkNvbmZpcm0gPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0dGhpcy5idXN5TG9jayhhcHBDb21wb25lbnQpO1xuXG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IGRlbGV0ZUhlbHBlci5kZWxldGVDb25maXJtSGFuZGxlcihcblx0XHRcdFx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRhcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdGRyYWZ0RW5hYmxlZCxcblx0XHRcdFx0XHRcdFx0YmluZGluZ1R5cGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0IGRpYWxvZyA9IHRoaXMuY3JlYXRlRGVsZXRlRGlhbG9nKGl0ZW1zLCBtUGFyYW1ldGVycywgcmVzb3VyY2VNb2RlbCwgZm5Db25maXJtLCByZWplY3QpO1xuXG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5ub0RpYWxvZyA9PT0gdHJ1ZSB8fCBtUGFyYW1ldGVycy5zaWxlbnRNb2RlID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Zm5Db25maXJtKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGlhbG9nLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUNvbnRlbnRQYWRkaW5nXCIpO1xuXHRcdFx0XHRcdGRpYWxvZy5vcGVuKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdC8vIGRlbGV0ZSBkb2N1bWVudCB1bmxvY2tcblx0XHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBjb25maXJtYXRpb24gZGlhbG9nIGZvIHRoZSBkZWxldGlvbi5cblx0ICogQHBhcmFtIGl0ZW1zIEFuIGFycmF5IG9mIGNvbnRyb2xzIHVzZWQgZm9yIHRoZSBkaWFsb2cgY29udGVudFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wgUGFyZW50IGNvbnRyb2wgb2YgdGhlIGRlbGV0ZSBidXR0b24gaWYgYW55XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmVudGl0eVNldE5hbWUgTmFtZSBvZiB0aGUgY3VycmVudCBlbnRpdHlTZXRcblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWwgVGhlIHJlc291cmNlIG1vZGVsIHRvIGxvYWQgdGV4dCByZXNvdXJjZXNcblx0ICogQHBhcmFtIGZuQ29uZmlybSBGdW5jdGlvbiBleGVjdXRlZCB1cG9uIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBkZWxldGlvblxuXHQgKiBAcGFyYW0gZm5SZWplY3QgRnVuY3Rpb24gZXhlY3V0ZWQgaWYgdGhlIGRpYWxvZyBpcyBjbG9zZWQgdmlhIENhbmNlbCBvciBFc2NhcGUgYnV0dG9uXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGRlbGV0ZSBjb25maXJtYXRpb24gZGlhbG9nXG5cdCAqL1xuXHRjcmVhdGVEZWxldGVEaWFsb2coXG5cdFx0aXRlbXM6IENvbnRyb2xbXSxcblx0XHRwYXJhbWV0ZXJzOiBQYXJ0aWFsPHsgcGFyZW50Q29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZDsgZW50aXR5U2V0TmFtZTogc3RyaW5nIH0+LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0Zm5Db25maXJtOiBGdW5jdGlvbixcblx0XHRmblJlamVjdDogRnVuY3Rpb25cblx0KTogRGlhbG9nIHtcblx0XHRsZXQgZGlhbG9nQ29uZmlybWVkID0gZmFsc2U7XG5cdFx0Y29uc3QgdkJveCA9IG5ldyBWQm94KHsgaXRlbXM6IGl0ZW1zIH0pO1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlQ29yZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdFx0bGV0IHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHBhcmFtZXRlcnMucGFyZW50Q29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0dGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX0NPTU1PTl9UQUJMRV9ERUxFVEVcIiwgdW5kZWZpbmVkLCBwYXJhbWV0ZXJzLmVudGl0eVNldE5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aXRsZSA9IHJlc291cmNlQnVuZGxlQ29yZS5nZXRUZXh0KFwiQ19DT01NT05fREVMRVRFXCIpO1xuXHRcdH1cblx0XHRjb25zdCBkaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHRpdGxlOiB0aXRsZSxcblx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdGNvbnRlbnQ6IFt2Qm94XSxcblx0XHRcdGFyaWFMYWJlbGxlZEJ5OiBpdGVtcyxcblx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogdGl0bGUsXG5cdFx0XHRcdHR5cGU6IFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdGRpYWxvZ0NvbmZpcm1lZCA9IHRydWU7XG5cdFx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0Zm5Db25maXJtKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTFwiKSxcblx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRkaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdGRpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHRcdC8vIGlmIGRpYWxvZyBpcyBjbG9zZWQgdW5jb25maXJtZWQgKGUuZy4gdmlhIFwiQ2FuY2VsXCIgb3IgRXNjYXBlIGJ1dHRvbiksIGVuc3VyZSB0byByZWplY3QgcHJvbWlzZVxuXHRcdFx0XHRpZiAoIWRpYWxvZ0NvbmZpcm1lZCkge1xuXHRcdFx0XHRcdGZuUmVqZWN0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gZGlhbG9nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVkaXRzIGEgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnRcblx0ICogQHBhcmFtIG9WaWV3IEN1cnJlbnQgdmlld1xuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXIgZXh0ZW5zaW9uXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBiYXRjaCBncm91cElkIGZvciBwb3N0IGNhbGwgb2YgZWRpdCBhY3Rpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIHRoZSBuZXcgZHJhZnQgY29udGV4dCBpbiBjYXNlIG9mIGRyYWZ0IHByb2dyYW1taW5nIG1vZGVsXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgZWRpdERvY3VtZW50KFxuXHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRvVmlldzogRkVWaWV3LFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRncm91cElkOiBzdHJpbmdcblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0KTtcblx0XHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJCaW5kaW5nIGNvbnRleHQgdG8gYWN0aXZlIGRvY3VtZW50IGlzIHJlcXVpcmVkXCIpO1xuXHRcdH1cblx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQgJiYgc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFZGl0IGlzIG9ubHkgYWxsb3dlZCBmb3IgZHJhZnQgb3Igc3RpY2t5IHNlc3Npb24gc3VwcG9ydGVkIHNlcnZpY2VzXCIpO1xuXHRcdH1cblx0XHR0aGlzLmJ1c3lMb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0Ly8gYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGVkaXQgYWN0aW9uIHdlJ2xsIGhhdmUgdG8gcmVtb3ZlIGFsbCBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0Y29uc3QgbWVzc2FnZUhhbmRsaW5nS2V5ID0gbWVzc2FnZUhhbmRsZXIucmVnaXN0ZXJUb0hvbGRNZXNzYWdlcygpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG9OZXdDb250ZXh0ID1cblx0XHRcdFx0c1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnRcblx0XHRcdFx0XHQ/IGF3YWl0IGRyYWZ0LmNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50KFxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0YlByZXNlcnZlQ2hhbmdlczogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRvVmlldzogb1ZpZXdcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0Z3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXJcblx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHQ6IGF3YWl0IHN0aWNreS5lZGl0RG9jdW1lbnRJblN0aWNreVNlc3Npb24ob0NvbnRleHQsIGFwcENvbXBvbmVudCwgbWVzc2FnZUhhbmRsZXIpO1xuXG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7IHVuSG9sZEtleTogbWVzc2FnZUhhbmRsaW5nS2V5IH0pO1xuXHRcdFx0cmV0dXJuIG9OZXdDb250ZXh0O1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHsgY29uY3VycmVudEVkaXRGbGFnOiB0cnVlLCB1bkhvbGRLZXk6IG1lc3NhZ2VIYW5kbGluZ0tleSB9KTtcblx0XHRcdHRocm93IGVycjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbmNlbCAnZWRpdCcgbW9kZSBvZiBhIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgY2FuY2VsZWQgb3IgZGVsZXRlZFxuXHQgKiBAcGFyYW0gW21JblBhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiBDYW5jZWwgQnV0dG9uIG9mIHRoZSBkaXNjYXJkIHBvcG92ZXIgKG1hbmRhdG9yeSBmb3Igbm93KVxuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycy5za2lwRGlzY2FyZFBvcG92ZXIgT3B0aW9uYWwsIHN1cHJlc3NlcyB0aGUgZGlzY2FyZCBwb3BvdmVyIGluY2FzZSBvZiBkcmFmdCBhcHBsaWNhdGlvbnMgd2hpbGUgbmF2aWdhdGluZyBvdXQgb2YgT1Bcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwQ29tcG9uZW50XG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFRoZSBtb2RlbCB0byBsb2FkIHRleHQgcmVzb3VyY2VzXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGV4dGVuc2lvblxuXHQgKiBAcGFyYW0gaXNOZXdPYmplY3QgVHJ1ZSBpZiB3ZSdyZSB0cnlpbmcgdG8gY2FuY2VsIGEgbmV3bHkgY3JlYXRlZCBvYmplY3Rcblx0ICogQHBhcmFtIGlzT2JqZWN0TW9kaWZpZWQgVHJ1ZSBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIG1vZGlmaWVkIGJ5IHRoZSB1c2VyXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCA/Pz9cblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyBjYW5jZWxEb2N1bWVudChcblx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0bUluUGFyYW1ldGVyczogQ2FuY2VsUGFyYW1ldGVycyB8IHVuZGVmaW5lZCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRpc05ld09iamVjdDogYm9vbGVhbixcblx0XHRpc09iamVjdE1vZGlmaWVkOiBib29sZWFuXG5cdCk6IFByb21pc2U8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+IHtcblx0XHQvL2NvbnRleHQgbXVzdCBhbHdheXMgYmUgcGFzc2VkIC0gbWFuZGF0b3J5IHBhcmFtZXRlclxuXHRcdGlmICghb0NvbnRleHQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnRleHQgZXhpc3RzLiBQYXNzIGEgbWVhbmluZ2Z1bCBjb250ZXh0XCIpO1xuXHRcdH1cblx0XHRjb25zdCBtUGFyYW1ldGVycyA9IGdldFBhcmFtZXRlcnMobUluUGFyYW1ldGVycyk7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBzUHJvZ3JhbW1pbmdNb2RlbCA9IHRoaXMuZ2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dCk7XG5cblx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQgJiYgc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5jZWwgZG9jdW1lbnQgb25seSBhbGxvd2VkIGZvciBkcmFmdCBvciBzdGlja3kgc2Vzc2lvbiBzdXBwb3J0ZWQgc2VydmljZXNcIik7XG5cdFx0fVxuXHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50KTtcblx0XHR0cnkge1xuXHRcdFx0bGV0IHJldHVybmVkVmFsdWU6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQgJiYgIWlzT2JqZWN0TW9kaWZpZWQpIHtcblx0XHRcdFx0Y29uc3QgZHJhZnREYXRhQ29udGV4dCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtvQ29udGV4dC5nZXRQYXRoKCl9L0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhYCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0QWRtaW5EYXRhID0gYXdhaXQgZHJhZnREYXRhQ29udGV4dC5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHRcdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdFx0XHRcdGlzT2JqZWN0TW9kaWZpZWQgPSBkcmFmdEFkbWluRGF0YS5DcmVhdGlvbkRhdGVUaW1lICE9PSBkcmFmdEFkbWluRGF0YS5MYXN0Q2hhbmdlRGF0ZVRpbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghbVBhcmFtZXRlcnMuc2tpcERpc2NhcmRQb3BvdmVyKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuX2NvbmZpcm1EaXNjYXJkKG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiwgaXNPYmplY3RNb2RpZmllZCwgcmVzb3VyY2VNb2RlbCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0NvbnRleHQuaXNLZWVwQWxpdmUoKSkge1xuXHRcdFx0XHQvLyBpZiB0aGUgY29udGV4dCBpcyBrZXB0IGFsaXZlIHdlIHNldCBpdCBhZ2FpbiB0byBkZXRhY2ggdGhlIG9uQmVmb3JlRGVzdHJveSBjYWxsYmFjayBhbmQgaGFuZGxlIG5hdmlnYXRpb24gaGVyZVxuXHRcdFx0XHQvLyB0aGUgY29udGV4dCBuZWVkcyB0byBzdGlsbCBiZSBrZXB0IGFsaXZlIHRvIGJlIGFibGUgdG8gcmVzZXQgY2hhbmdlcyBwcm9wZXJseVxuXHRcdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUodHJ1ZSwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHRcdGlmIChtUGFyYW1ldGVycy5iZWZvcmVDYW5jZWxDYWxsQmFjaykge1xuXHRcdFx0XHRhd2FpdCBtUGFyYW1ldGVycy5iZWZvcmVDYW5jZWxDYWxsQmFjayh7IGNvbnRleHQ6IG9Db250ZXh0IH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0KSB7XG5cdFx0XHRcdGlmIChpc05ld09iamVjdCkge1xuXHRcdFx0XHRcdGlmIChvQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGF3YWl0IGRyYWZ0LmRlbGV0ZURyYWZ0KG9Db250ZXh0LCBtZXNzYWdlSGFuZGxlciwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBvU2libGluZ0NvbnRleHQgPSBvTW9kZWwuYmluZENvbnRleHQoYCR7b0NvbnRleHQuZ2V0UGF0aCgpfS9TaWJsaW5nRW50aXR5YCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IHNDYW5vbmljYWxQYXRoID0gYXdhaXQgb1NpYmxpbmdDb250ZXh0LnJlcXVlc3RDYW5vbmljYWxQYXRoKCk7XG5cdFx0XHRcdFx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm5lZFZhbHVlID0gb01vZGVsLmJpbmRDb250ZXh0KHNDYW5vbmljYWxQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdFx0YXdhaXQgZHJhZnQuZGVsZXRlRHJhZnQob0NvbnRleHQsIG1lc3NhZ2VIYW5kbGVyLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZGlzY2FyZGVkQ29udGV4dCA9IGF3YWl0IHN0aWNreS5kaXNjYXJkRG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0XHRpZiAoZGlzY2FyZGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGlmIChkaXNjYXJkZWRDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0XHRcdGRpc2NhcmRlZENvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIWlzTmV3T2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRkaXNjYXJkZWRDb250ZXh0LnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdHJldHVybmVkVmFsdWUgPSBkaXNjYXJkZWRDb250ZXh0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyByZW1vdmUgZXhpc3RpbmcgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlc1xuXHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHQvLyBzaG93IHVuYm91bmQgbWVzc2FnZXNcblx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcygpO1xuXHRcdFx0cmV0dXJuIHJldHVybmVkVmFsdWU7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoKTtcblx0XHRcdHRocm93IGVycjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgc2F2ZWRcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwQ29tcG9uZW50XG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFRoZSBtb2RlbCB0byBsb2FkIHRleHQgcmVzb3VyY2VzXG5cdCAqIEBwYXJhbSBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIFRydWUgaWYgd2Ugc2hvdWxkIGV4ZWN1dGUgc2lkZSBlZmZlY3RzIGluIGNhc2Ugb2YgYW4gZXJyb3Jcblx0ICogQHBhcmFtIGJpbmRpbmdzRm9yU2lkZUVmZmVjdHMgVGhlIGxpc3RCaW5kaW5ncyB0byBiZSB1c2VkIGZvciBleGVjdXRpbmcgc2lkZSBlZmZlY3RzIG9uIGVycm9yXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGV4dGVuc2lvblxuXHQgKiBAcGFyYW0gaXNOZXdPYmplY3QgVHJ1ZSBpZiB3ZSdyZSB0cnlpbmcgdG8gY2FuY2VsIGEgbmV3bHkgY3JlYXRlZCBvYmplY3Rcblx0ICogQHBhcmFtIHNraXBDb25maXJtYXRpb25Nc2dcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoID8/P1xuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIHNhdmVEb2N1bWVudChcblx0XHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3I6IGJvb2xlYW4sXG5cdFx0YmluZGluZ3NGb3JTaWRlRWZmZWN0czogT0RhdGFMaXN0QmluZGluZ1tdLFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRpc05ld09iamVjdDogYm9vbGVhbixcblx0XHRza2lwQ29uZmlybWF0aW9uTXNnID0gZmFsc2Vcblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD4ge1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKGNvbnRleHQpO1xuXHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kgJiYgc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlNhdmUgaXMgb25seSBhbGxvd2VkIGZvciBkcmFmdCBvciBzdGlja3kgc2Vzc2lvbiBzdXBwb3J0ZWQgc2VydmljZXNcIik7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdGNvbnN0IGVudGl0eVNldE5hbWUgPSB0aGlzLmdldENvbGxlY3Rpb25OYW1lRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBvQWN0aXZlRG9jdW1lbnQgPVxuXHRcdFx0XHRzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdFxuXHRcdFx0XHRcdD8gYXdhaXQgZHJhZnQuYWN0aXZhdGVEb2N1bWVudChjb250ZXh0LCBhcHBDb21wb25lbnQsIHt9LCBtZXNzYWdlSGFuZGxlcilcblx0XHRcdFx0XHQ6IGF3YWl0IHN0aWNreS5hY3RpdmF0ZURvY3VtZW50KGNvbnRleHQsIGFwcENvbXBvbmVudCwgbWVzc2FnZUhhbmRsZXIpO1xuXG5cdFx0XHRjb25zdCBtZXNzYWdlc1JlY2VpdmVkID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKCkuY29uY2F0KG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7IC8vIGdldCB1bmJvdW5kIGFuZCBib3VuZCBtZXNzYWdlcyBwcmVzZW50IGluIHRoZSBtb2RlbFxuXHRcdFx0aWYgKCFza2lwQ29uZmlybWF0aW9uTXNnICYmICEobWVzc2FnZXNSZWNlaXZlZC5sZW5ndGggPT09IDEgJiYgbWVzc2FnZXNSZWNlaXZlZFswXS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpKSB7XG5cdFx0XHRcdC8vIHNob3cgb3VyIG9iamVjdCBjcmVhdGlvbiB0b2FzdCBvbmx5IGlmIGl0IGlzIG5vdCBjb21pbmcgZnJvbSBiYWNrZW5kXG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KFxuXHRcdFx0XHRcdGlzTmV3T2JqZWN0XG5cdFx0XHRcdFx0XHQ/IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX09CSkVDVF9DUkVBVEVEXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSlcblx0XHRcdFx0XHRcdDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfT0JKRUNUX1NBVkVEXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9BY3RpdmVEb2N1bWVudDtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGlmIChleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yICYmIGJpbmRpbmdzRm9yU2lkZUVmZmVjdHM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0LyogVGhlIHNpZGVFZmZlY3RzIGFyZSBleGVjdXRlZCBvbmx5IGZvciB0YWJsZSBpdGVtcyBpbiB0cmFuc2llbnQgc3RhdGUgKi9cblx0XHRcdFx0YmluZGluZ3NGb3JTaWRlRWZmZWN0cy5mb3JFYWNoKChsaXN0QmluZGluZykgPT4ge1xuXHRcdFx0XHRcdGlmICghQ29tbW9uVXRpbHMuaGFzVHJhbnNpZW50Q29udGV4dChsaXN0QmluZGluZykpIHtcblx0XHRcdFx0XHRcdGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkobGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBjb250ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKCk7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuYnVzeVVubG9jayhhcHBDb21wb25lbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxscyBhIGJvdW5kIG9yIHVuYm91bmQgYWN0aW9uLlxuXHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlc10gQSBtYXAgb2YgYWN0aW9uIHBhcmFtZXRlciBuYW1lcyBhbmQgcHJvdmlkZWQgdmFsdWVzXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZ10gU2tpcHMgdGhlIHBhcmFtZXRlciBkaWFsb2cgaWYgdmFsdWVzIGFyZSBwcm92aWRlZCBmb3IgYWxsIG9mIHRoZW1cblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbjogRWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgdG8gYmUgY2FsbGVkXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb246IEFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nXSBNb2RlIGhvdyBhY3Rpb25zIGFyZSB0byBiZSBjYWxsZWQ6ICdDaGFuZ2VTZXQnIHRvIHB1dCBhbGwgYWN0aW9uIGNhbGxzIGludG8gb25lIGNoYW5nZXNldCwgJ0lzb2xhdGVkJyB0byBwdXQgdGhlbSBpbnRvIHNlcGFyYXRlIGNoYW5nZXNldHNcblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuYmluZGluZ1BhcmFtZXRlcnNcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2dcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWVcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLnZpZXdcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRyb2xJZFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuaXNDcmVhdGVBY3Rpb25cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmdyb3VwSWRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvblxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmlnbm9yZUVUYWddIElmIHNwZWNpZmllZCwgdGhlIGFjdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBFVGFnIGhhbmRsaW5nXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIGFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXIgVGhlIG1lc3NhZ2UgaGFuZGxlciBleHRlbnNpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHJlc3BvbnNlIG9iamVjdHMgKFRPRE86IHRvIGJlIGNoYW5nZWQpXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgY2FsbEFjdGlvbihcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRiaW5kaW5nUGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVycztcblx0XHRcdHBhcmFtZXRlclZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG5cdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdHNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W10gfCBudWxsO1xuXHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0dmlldzogVmlldztcblx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdGlzQ3JlYXRlQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHRcdFx0Z3JvdXBJZD86IHN0cmluZztcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdGlnbm9yZUVUYWc/OiBib29sZWFuO1xuXHRcdFx0ZmVGcmFtZXdvcmtDYWxsPzogYm9vbGVhbjtcblx0XHR9LFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlclxuXHQpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdG1QYXJhbWV0ZXJzID0gZ2V0UGFyYW1ldGVycyhtUGFyYW1ldGVycyk7XG5cdFx0bGV0IGNvbnRleHRUb1Byb2Nlc3M7XG5cdFx0bGV0IG9Nb2RlbDogT0RhdGFNb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIXNBY3Rpb25OYW1lKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlIG5hbWUgb2YgYWN0aW9uIHRvIGJlIGV4ZWN1dGVkXCIpO1xuXHRcdH1cblx0XHQvLyBhY3Rpb24gaW1wb3J0cyBhcmUgbm90IGRpcmVjdGx5IG9idGFpbmVkIGZyb20gdGhlIG1ldGFNb2RlbCBieSBpdCBpcyBwcmVzZW50IGluc2lkZSB0aGUgZW50aXR5Q29udGFpbmVyXG5cdFx0Ly8gYW5kIHRoZSBhY2lvbnMgaXQgcmVmZXJzIHRvIHByZXNlbnQgb3V0c2lkZSB0aGUgZW50aXR5Y29udGFpbmVyLCBoZW5jZSB0byBvYnRhaW4ga2luZCBvZiB0aGUgYWN0aW9uXG5cdFx0Ly8gc3BsaXQoKSBvbiBpdHMgbmFtZSB3YXMgcmVxdWlyZWRcblx0XHRjb25zdCBzTmFtZSA9IHNBY3Rpb25OYW1lLnNwbGl0KFwiL1wiKVsxXTtcblxuXHRcdGNvbnRleHRUb1Byb2Nlc3MgPSBzTmFtZSA/IHVuZGVmaW5lZCA6IG1QYXJhbWV0ZXJzLmNvbnRleHRzO1xuXHRcdC8vY2hlY2tpbmcgd2hldGhlciB0aGUgY29udGV4dCBpcyBhbiBhcnJheSB3aXRoIG1vcmUgdGhhbiAwIGxlbmd0aCBvciBub3QgYW4gYXJyYXkoY3JlYXRlIGFjdGlvbilcblx0XHRpZiAoY29udGV4dFRvUHJvY2VzcyAmJiAoKEFycmF5LmlzQXJyYXkoY29udGV4dFRvUHJvY2VzcykgJiYgY29udGV4dFRvUHJvY2Vzcy5sZW5ndGgpIHx8ICFBcnJheS5pc0FycmF5KGNvbnRleHRUb1Byb2Nlc3MpKSkge1xuXHRcdFx0Y29udGV4dFRvUHJvY2VzcyA9IEFycmF5LmlzQXJyYXkoY29udGV4dFRvUHJvY2VzcykgPyBjb250ZXh0VG9Qcm9jZXNzWzBdIDogY29udGV4dFRvUHJvY2Vzcztcblx0XHRcdG9Nb2RlbCA9IGNvbnRleHRUb1Byb2Nlc3MuZ2V0TW9kZWwoKTtcblx0XHR9XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLm1vZGVsKSB7XG5cdFx0XHRvTW9kZWwgPSBtUGFyYW1ldGVycy5tb2RlbDtcblx0XHR9XG5cdFx0aWYgKCFvTW9kZWwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlBhc3MgYSBjb250ZXh0IGZvciBhIGJvdW5kIGFjdGlvbiBvciBwYXNzIHRoZSBtb2RlbCBmb3IgYW4gdW5ib3VuZCBhY3Rpb25cIik7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb250cm9sID0gKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCA/IG1QYXJhbWV0ZXJzLnZpZXcuYnlJZChtUGFyYW1ldGVycy5jb250cm9sSWQpIDogbVBhcmFtZXRlcnMudmlldykgYXNcblx0XHRcdFx0fCBDb250cm9sXG5cdFx0XHRcdHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IG9SZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXTtcblx0XHRcdGlmIChjb250ZXh0VG9Qcm9jZXNzICYmIG1QYXJhbWV0ZXJzLmNvbnRleHRzKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRzID0gQXJyYXkuaXNBcnJheShtUGFyYW1ldGVycy5jb250ZXh0cykgPyBtUGFyYW1ldGVycy5jb250ZXh0cyA6IFttUGFyYW1ldGVycy5jb250ZXh0c107IC8vIEVuc3VyZSB0aGF0IGNvbnRleHRzIGlzIGFuIGFycmF5IChmb3Igc3RhdGljIGFjdGlvbnMgaXQncyBub3QgYW4gd2UgbmVlZCB0byBmaXggaXQpXG5cblx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdGFjdGlvblBhdGggPSBgJHttZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dHNbMF0uZ2V0UGF0aCgpKX0vJHtzQWN0aW9uTmFtZX1gLFxuXHRcdFx0XHRcdGJvdW5kQWN0aW9uID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke2FjdGlvblBhdGh9L0AkdWk1Lm92ZXJsb2FkLzBgKSE7XG5cblx0XHRcdFx0Y29uc3QgY29udmVydGVkVHlwZXMgPSBjb252ZXJ0VHlwZXMob01vZGVsLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdFx0Y29uc3QgY29udmVydGVkQWN0aW9uID0gY29udmVydGVkVHlwZXMucmVzb2x2ZVBhdGg8RWRtQWN0aW9uIHwgdW5kZWZpbmVkPihib3VuZEFjdGlvbi5nZXRQYXRoKCkpLnRhcmdldDtcblx0XHRcdFx0aWYgKCFjb252ZXJ0ZWRBY3Rpb24pIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGJvdW5kIGFjdGlvblwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvUmVzdWx0ID0gYXdhaXQgbmV3IE9wZXJhdGlvbihhcHBDb21wb25lbnQsIG9Nb2RlbCwgY29udmVydGVkQWN0aW9uLCB7XG5cdFx0XHRcdFx0cGFyYW1ldGVyVmFsdWVzOiBtUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXT5bXSxcblx0XHRcdFx0XHRjb250ZXh0cyxcblx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyxcblx0XHRcdFx0XHRsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsXG5cdFx0XHRcdFx0c2tpcFBhcmFtZXRlckRpYWxvZzogbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZyxcblx0XHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyczogbVBhcmFtZXRlcnMuYmluZGluZ1BhcmFtZXRlcnMsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZTogbVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0XHRvRGF0YVByb3BlcnRpZXM6IHtcblx0XHRcdFx0XHRcdGdob3N0Q29udGV4dEJpbmRpbmdQcm90ZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRcdFx0ZW5oYW5jZSRzZWxlY3Q6IG1QYXJhbWV0ZXJzLmZlRnJhbWV3b3JrQ2FsbCA9PT0gdHJ1ZSxcblx0XHRcdFx0XHRcdGdyb3VwSWQ6IG1QYXJhbWV0ZXJzLmdyb3VwSWQsXG5cdFx0XHRcdFx0XHRpZ25vcmVFVGFnOiBtUGFyYW1ldGVycy5pZ25vcmVFVGFnXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvRGF0YUV2ZW50czoge1xuXHRcdFx0XHRcdFx0b25PRGF0YVN1Ym1pdDogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcj8ucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvbk9EYXRhUmVzcG9uc2U6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b25SZXF1ZXN0U2lkZUVmZmVjdHM6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVBY3Rpb25FbmFibGVtZW50T25PcGVyYXRpb24oe1xuXHRcdFx0XHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0OiBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0XHRcdFx0XHRjb250cm9sOiBjb250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlZEFjdGlvblxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHZpZXc6IG1QYXJhbWV0ZXJzLnZpZXcgYXMgRkVWaWV3LFxuXHRcdFx0XHRcdGlzQ3JlYXRlQWN0aW9uOiBtUGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbixcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcjogbWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0fSkuZXhlY3V0ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1Jlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbnMuY2FsbEFjdGlvbkltcG9ydChzQWN0aW9uTmFtZSwgb01vZGVsLCBhcHBDb21wb25lbnQsIHtcblx0XHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM6IG1QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlcyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPltdLFxuXHRcdFx0XHRcdGxhYmVsOiBtUGFyYW1ldGVycy5sYWJlbCxcblx0XHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nOiBtUGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nLFxuXHRcdFx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzOiBtUGFyYW1ldGVycy5iaW5kaW5nUGFyYW1ldGVycyxcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lOiBtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRcdG9EYXRhRXZlbnRzOiB7XG5cdFx0XHRcdFx0XHRvbk9EYXRhU3VibWl0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvbk9EYXRhUmVzcG9uc2U6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcjogbWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0aWdub3JlRVRhZzogbVBhcmFtZXRlcnMuaWdub3JlRVRhZyxcblx0XHRcdFx0XHR2aWV3OiBtUGFyYW1ldGVycy52aWV3IGFzIEZFVmlld1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0XHRcdHRoaXMuX2hhbmRsZUFjdGlvblJlc3BvbnNlKG1QYXJhbWV0ZXJzLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb1Jlc3VsdDtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGlmIChtZXNzYWdlSGFuZGxlcikge1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVBY3Rpb25SZXNwb25zZShtUGFyYW1ldGVycywgc0FjdGlvbk5hbWUpO1xuXHRcdFx0fVxuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjb2xsZWN0aW9uIG5hbWUgZnJvbSB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbGxlY3Rpb24gbmFtZVxuXHQgKi9cblx0Z2V0Q29sbGVjdGlvbk5hbWVGcm9tQ29udGV4dChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YUNvbnRleHQoY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdHJldHVybiAoTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCkudGFyZ2V0T2JqZWN0IGFzIEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IHVuZGVmaW5lZClcblx0XHRcdD8ubmFtZTtcblx0fVxuXG5cdGhhbmRsZUFjdGlvbkVuYWJsZW1lbnRPbk9wZXJhdGlvbihwYXJhbWV0ZXJzOiB7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/OiBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IG51bGw7XG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nO1xuXHRcdGNvbnRyb2w/OiBDb250cm9sO1xuXHRcdGNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRjb252ZXJ0ZWRBY3Rpb246IEVkbUFjdGlvbjtcblx0fSk6IHZvaWQge1xuXHRcdGlmIChwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmIHBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0XHRsZXQgc2VsZWN0ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXHRcdFx0Ly9jaGVjayBmb3Igc2tpcHBpbmcgc3RhdGljIGFjdGlvbnNcblx0XHRcdGlmICghYWN0aW9uSGVscGVyLmlzU3RhdGljQWN0aW9uKHBhcmFtZXRlcnMuY29udmVydGVkQWN0aW9uKSkge1xuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzID0gcGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIikgfHwgW107XG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdEpTT04ucGFyc2UocGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHBhcmFtZXRlcnMuY29udHJvbCkge1xuXHRcdFx0XHRpZiAocGFyYW1ldGVycy5jb250cm9sLmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IHBhcmFtZXRlcnMuY29udHJvbC5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0SlNPTi5wYXJzZShwYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly91cGRhdGUgZGVsZXRlIGJ1dHRvblxuXHRcdFx0ZGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKHBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdH1cblx0fVxuXG5cdF9oYW5kbGVBY3Rpb25SZXNwb25zZShcblx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD86IEludGVybmFsTW9kZWxDb250ZXh0IHwgbnVsbDtcblx0XHR9LFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmdcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgYVRyYW5zaWVudE1lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpO1xuXHRcdGlmIChhVHJhbnNpZW50TWVzc2FnZXMubGVuZ3RoID4gMCAmJiBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzQWN0aW9uTmFtZVwiLCBtUGFyYW1ldGVycy5sYWJlbCA/IG1QYXJhbWV0ZXJzLmxhYmVsIDogc0FjdGlvbk5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHZhbGlkYXRpb24gZXJyb3JzIGZvciB0aGUgJ0Rpc2NhcmQnIGFjdGlvbi5cblx0ICogQGZpbmFsXG5cdCAqL1xuXHRoYW5kbGVWYWxpZGF0aW9uRXJyb3IoKTogdm9pZCB7XG5cdFx0Y29uc3QgZXJyb3JUb1JlbW92ZSA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZpbHRlcigoZXJyb3I6IE1lc3NhZ2UpID0+IGVycm9yLnZhbGlkYXRpb24pOyAvLyBvbmx5IG5lZWRzIHRvIGhhbmRsZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLCB0ZWNobmljYWwgYW5kIHBlcnNpc3RlbnQgZXJyb3JzIG5lZWRzIG5vdCB0byBiZSBjaGVja2VkIGhlcmUuXG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGVycm9yVG9SZW1vdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgUG9wb3Zlci4gRmFjdG9yeSBtZXRob2QgdG8gbWFrZSB1bml0IHRlc3RzIGVhc2llci5cblx0ICogQHBhcmFtIHNldHRpbmdzIEluaXRpYWwgcGFyYW1ldGVycyBmb3IgdGhlIHBvcG92ZXJcblx0ICogQHJldHVybnMgQSBuZXcgUG9wb3ZlclxuXHQgKi9cblx0X2NyZWF0ZVBvcG92ZXIoc2V0dGluZ3M/OiAkUG9wb3ZlclNldHRpbmdzKTogUG9wb3ZlciB7XG5cdFx0cmV0dXJuIG5ldyBQb3BvdmVyKHNldHRpbmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIHBvcG92ZXIgdG8gY29uZmlybSBkaXNjYXJkIGlmIG5lZWRlZC5cblx0ICogQHBhcmFtIGNhbmNlbEJ1dHRvbiBUaGUgY29udHJvbCB3aGljaCB3aWxsIG9wZW4gdGhlIHBvcG92ZXJcblx0ICogQHBhcmFtIGlzTW9kaWZpZWQgVHJ1ZSBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBhIGNvbmZpcm1hdGlvbiBwb3BvdmVyIG11c3QgYmUgc2hvd25cblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWwgVGhlIG1vZGVsIHRvIGxvYWQgdGV4dCByZXNvdXJjZXNcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBpZiB1c2VyIGNvbmZpcm1zIGRpc2NhcmQsIHJlamVjdHMgaWYgb3RoZXJ3aXNlLCByZWplY3RzIGlmIG5vIGNvbnRyb2wgcGFzc2VkIHRvIG9wZW4gcG9wb3ZlclxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIF9jb25maXJtRGlzY2FyZChjYW5jZWxCdXR0b246IEJ1dHRvbiwgaXNNb2RpZmllZDogYm9vbGVhbiwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIElmIHRoZSBkYXRhIGlzbid0IG1vZGlmaWVkLCBkbyBub3Qgc2hvdyBhbnkgY29uZmlybWF0aW9uIHBvcG92ZXJcblx0XHRpZiAoIWlzTW9kaWZpZWQpIHtcblx0XHRcdHRoaXMuaGFuZGxlVmFsaWRhdGlvbkVycm9yKCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0Y2FuY2VsQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBjb25maXJtYXRpb25Qb3BvdmVyID0gdGhpcy5fY3JlYXRlUG9wb3Zlcih7XG5cdFx0XHRcdHNob3dIZWFkZXI6IGZhbHNlLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IFwiVG9wXCJcblx0XHRcdH0pO1xuXHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBjb250ZW50IG9mIHRoZSBwb3BvdmVyXG5cdFx0XHRjb25zdCB0aXRsZSA9IG5ldyBUZXh0KHtcblx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfRFJBRlRfRElTQ0FSRF9NRVNTQUdFXCIpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGNvbmZpcm1CdXR0b24gPSBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfRFJBRlRfRElTQ0FSRF9CVVRUT05cIiksXG5cdFx0XHRcdHdpZHRoOiBcIjEwMCVcIixcblx0XHRcdFx0cHJlc3M6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVZhbGlkYXRpb25FcnJvcigpO1xuXHRcdFx0XHRcdGNvbmZpcm1hdGlvblBvcG92ZXIuZGF0YShcImNvbnRpbnVlRGlzY2FyZFwiLCB0cnVlKTtcblx0XHRcdFx0XHRjb25maXJtYXRpb25Qb3BvdmVyLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5hZGRDb250ZW50KG5ldyBWQm94KHsgaXRlbXM6IFt0aXRsZSwgY29uZmlybUJ1dHRvbl0gfSkpO1xuXG5cdFx0XHQvLyBBdHRhY2ggaGFuZGxlclxuXHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5hdHRhY2hCZWZvcmVPcGVuKCgpID0+IHtcblx0XHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5zZXRJbml0aWFsRm9jdXMoY29uZmlybUJ1dHRvbik7XG5cdFx0XHR9KTtcblx0XHRcdGNvbmZpcm1hdGlvblBvcG92ZXIuYXR0YWNoQWZ0ZXJDbG9zZSgoKSA9PiB7XG5cdFx0XHRcdGNhbmNlbEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpO1xuXHRcdFx0XHRpZiAoY29uZmlybWF0aW9uUG9wb3Zlci5kYXRhKFwiY29udGludWVEaXNjYXJkXCIpKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5vcGVuQnkoY2FuY2VsQnV0dG9uLCBmYWxzZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVsb2FkcyBkYXRhIGZvciBhbiBPRGF0YUxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgVGhlIGxpc3RiaW5kaW5nIHRvIHJlZnJlc2hcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudFxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBwcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZWZyZXNoTGlzdEJpbmRpbmcobGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChsaXN0QmluZGluZy5pc1Jvb3QoKSkge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xpc3RCaW5kaW5nSGllcmFyY2hpY2FsKGxpc3RCaW5kaW5nKSkge1xuXHRcdFx0XHRcdC8vIFdlIHVzZSBhIHNpZGUtZWZmZWN0IHJlZnJlc2ggZm9yIGEgVHJlZVRhYmxlLCB0byBwcmVzZXJ2ZSBleHBhbnNpb24gc3RhdGVzXG5cdFx0XHRcdFx0YXdhaXQgYXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IFwiXCIgfV0sIGxpc3RCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKSEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGF3YWl0IGxpc3RCaW5kaW5nLnJlcXVlc3RSZWZyZXNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGF3YWl0IGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGxpc3RCaW5kaW5nLmdldFBhdGgoKSB9XSwgbGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGBFcnJvciB3aGlsZSByZWZyZXNoaW5nIGxpc3QgYmluZGluZyAke2xpc3RCaW5kaW5nLmdldFBhdGgoKX1gLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIGNyZWF0ZVdpdGhEaWFsb2coXG5cdFx0bGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0ZmllbGROYW1lczogc3RyaW5nW10sXG5cdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0cGFyZW50Q29udHJvbD86IENvbnRyb2w7XG5cdFx0XHRkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRiSXNDcmVhdGVEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0YmVmb3JlQ3JlYXRlQ2FsbEJhY2s/OiBGdW5jdGlvbjtcblx0XHRcdGFmdGVyQ3JlYXRlQ2FsbEJhY2s/OiAobmV3RG9jdW1lbnRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4gUHJvbWlzZTx2b2lkPjtcblx0XHRcdGNyZWF0ZUF0RW5kPzogYm9vbGVhbjtcblx0XHRcdGluYWN0aXZlPzogYm9vbGVhbjtcblx0XHRcdHBhcmVudENvbnRleHQ/OiBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQ/OiBib29sZWFuO1xuXHRcdFx0Y3JlYXRlQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdGNyZWF0aW9uTW9kZT86IHN0cmluZztcblx0XHR9LFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyXG5cdCk6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+IHtcblx0XHRjb25zdCBtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBsaXN0TWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgobGlzdEJpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCkhKTtcblxuXHRcdC8vIENyZWF0ZSBhIGZha2UgKHRyYW5zaWVudCkgbGlzdEJpbmRpbmcgYW5kIGNvbnRleHQsIGp1c3QgZm9yIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIGRpYWxvZ1xuXHRcdGNvbnN0IHRyYW5zaWVudExpc3RCaW5kaW5nID0gbW9kZWwuYmluZExpc3QobGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBsaXN0QmluZGluZy5nZXRDb250ZXh0KCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG5cdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwic3VibWl0TGF0ZXJcIlxuXHRcdH0pO1xuXHRcdHRyYW5zaWVudExpc3RCaW5kaW5nLnJlZnJlc2hJbnRlcm5hbCA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdC8qICovXG5cdFx0fTtcblx0XHRjb25zdCB0cmFuc2llbnRDb250ZXh0ID0gdHJhbnNpZW50TGlzdEJpbmRpbmcuY3JlYXRlKHBhcmFtZXRlcnMuZGF0YSwgdHJ1ZSk7XG5cdFx0Y29uc3QgZmllbGRNZXRhQ29udGV4dHMgPSBmaWVsZE5hbWVzLm1hcCgobmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtsaXN0TWV0YVBhdGh9LyR7bmFtZX1gKSBhcyBDb250ZXh0O1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgY3JlYXRlRGlhbG9nID0gZ2V0Q29yZVVJRmFjdG9yeSgpLm5ld0NyZWF0ZURpYWxvZyhcblx0XHRcdHRyYW5zaWVudENvbnRleHQsXG5cdFx0XHRmaWVsZE5hbWVzLFxuXHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0cGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZyA/IFwiU3RhbmRhbG9uZVwiIDogXCJXaXRoTmF2aWdhdGlvblwiLFxuXHRcdFx0cGFyYW1ldGVycy5wYXJlbnRDb250cm9sXG5cdFx0KTtcblxuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMoXG5cdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0ZmllbGRNZXRhQ29udGV4dHMsXG5cdFx0XHRcdHRyYW5zaWVudENvbnRleHQsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRwYXJhbWV0ZXJzLmNyZWF0ZUFjdGlvbixcblx0XHRcdFx0cGFyYW1ldGVycy5kYXRhXG5cdFx0XHQpO1xuXHRcdFx0Y3JlYXRlRGlhbG9nLm9wZW5EaWFsb2coKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoKTtcblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0UHJvbWlzZUtlZXBlciA9IG5ldyBQcm9taXNlS2VlcGVyPE9EYXRhVjRDb250ZXh0PigpO1xuXG5cdFx0Y29uc3Qgb25FeGl0RGlhbG9nID0gYXN5bmMgKGV2ZW50OiBFeGl0RGlhbG9nRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdGlmICghZXZlbnQuZ2V0UGFyYW1ldGVyKFwiYWNjZXB0XCIpKSB7XG5cdFx0XHRcdC8vIFVzZXIgaGFzIGNhbmNlbGxlZCBjcmVhdGlvbjogZGVzdHJveSB0aGUgdHJhbnNpZW50IGxpc3QgYmluZGluZyBhbmQgY2xvc2UgdGhlIGRpYWxvZ1xuXHRcdFx0XHR0cmFuc2llbnRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0XHRcdGNyZWF0ZURpYWxvZy5jbG9zZURpYWxvZygpO1xuXHRcdFx0XHRyZXN1bHRQcm9taXNlS2VlcGVyLnJlamVjdChGRUxpYnJhcnkuQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y3JlYXRlRGlhbG9nLnNldEJ1c3kodHJ1ZSk7XG5cdFx0XHRwYXJhbWV0ZXJzLmJJc0NyZWF0ZURpYWxvZyA9IHRydWU7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCB0cmFuc2llbnREYXRhID0gdHJhbnNpZW50Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IGNyZWF0ZURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdE9iamVjdC5rZXlzKHRyYW5zaWVudERhdGEpLmZvckVhY2goKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7bGlzdE1ldGFQYXRofS8ke3Byb3BlcnR5UGF0aH1gKTtcblx0XHRcdFx0XHQvLyBFbnN1cmUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFyZSBub3QgcGFydCBvZiB0aGUgcGF5bG9hZCwgYXMgZGVlcCBjcmVhdGUgbm90IHN1cHBvcnRlZFxuXHRcdFx0XHRcdC8vIEFuZCByZW1vdmUgYW55IHByb3BlcnR5IHN0YXJ0aW5nIGJ5IEAkdWk1IGFzIHRoZXkgYXJlIG5vdCBwcm9wZXJ0eSBjcmVhdGVkIGJ5IGZpbGxpbmcgdGhlIGZvcm1cblx0XHRcdFx0XHRpZiAob1Byb3BlcnR5ICYmIG9Qcm9wZXJ0eS4ka2luZCAhPT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiAhcHJvcGVydHlQYXRoPy5zdGFydHNXaXRoKFwiQCR1aTVcIikpIHtcblx0XHRcdFx0XHRcdGNyZWF0ZURhdGFbcHJvcGVydHlQYXRoXSA9IHRyYW5zaWVudERhdGFbcHJvcGVydHlQYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChwYXJhbWV0ZXJzLmJlZm9yZUNyZWF0ZUNhbGxCYWNrKSB7XG5cdFx0XHRcdFx0Ly9iZWZvcmVDcmVhdGVDYWxsQmFjayBleHBlY3RzIGNyZWF0ZVBhcmFtZXRlcnMgb2YgdHlwZSBhbnlbXVxuXHRcdFx0XHRcdGNvbnN0IGNyZWF0ZURhdGFBc0FycmF5ID0gT2JqZWN0LmVudHJpZXMoY3JlYXRlRGF0YSkubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7IFtrZXldOiB2YWx1ZSB9KSk7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IHRvRVM2UHJvbWlzZShcblx0XHRcdFx0XHRcdFx0cGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjayh7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IGxpc3RCaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGVQYXJhbWV0ZXJzOiBjcmVhdGVEYXRhQXNBcnJheVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIG5ldyBkb2N1bWVudFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0dGhyb3cgRkVMaWJyYXJ5LkNvbnN0YW50cy5PbkJlZm9yZUNyZWF0ZUZhaWxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y3JlYXRlRGF0YSA9IGNyZWF0ZURhdGFBc0FycmF5LnJlZHVjZSgocmVzdWx0LCBjdXJyZW50T2JqZWN0KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4geyAuLi5yZXN1bHQsIC4uLmN1cnJlbnRPYmplY3QgfTtcblx0XHRcdFx0XHR9LCB7fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKGNyZWF0ZURhdGEpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG5ld0NvbnRleHQgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbnRleHQobGlzdEJpbmRpbmcsIGNyZWF0ZURhdGEsIHtcblx0XHRcdFx0XHRjcmVhdGVBdEVuZDogcGFyYW1ldGVycy5jcmVhdGVBdEVuZCxcblx0XHRcdFx0XHRjcmVhdGVJbmFjdGl2ZTogcGFyYW1ldGVycy5pbmFjdGl2ZSxcblx0XHRcdFx0XHRwYXJlbnRDb250ZXh0OiBwYXJhbWV0ZXJzLnBhcmVudENvbnRleHRcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Y29uc3QgY3JlYXRpb25TdWNjZXNzID0gYXdhaXQgdGhpcy53YWl0Rm9yQ3JlYXRlQ29tcGxldGlvbihuZXdDb250ZXh0LCBwYXJhbWV0ZXJzLmtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQgPT09IHRydWUpO1xuXHRcdFx0XHRpZiAoY3JlYXRpb25TdWNjZXNzKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IHBhcmFtZXRlcnMuYWZ0ZXJDcmVhdGVDYWxsQmFjaz8uKG5ld0NvbnRleHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVEaWFsb2cuZGlzcGxheUVycm9yTWVzc2FnZXMoTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKSk7XG5cdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7IHNob3dCb3VuZFN0YXRlTWVzc2FnZXM6IHRydWUgfSk7XG5cblx0XHRcdFx0XHRcdC8vIERlbGV0ZSB0aGUgY3JlYXRlZCBkb2N1bWVudCBhbmQgcmVmcmVzaCBpdHMgbGlzdCBiaW5kaW5nIChvdGhlcndpc2UgdGhlIGNyZWF0ZWQgZG9jdW1lbnQgaXMgc3RpbGwgdmlzaWJsZSBpbiB0aGUgbGlzdClcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuZGVsZXRlRG9jdW1lbnQobmV3Q29udGV4dCwgeyBzaWxlbnRNb2RlOiB0cnVlIH0sIGFwcENvbXBvbmVudCwgcmVzb3VyY2VNb2RlbCwgbWVzc2FnZUhhbmRsZXIpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5yZWZyZXNoTGlzdEJpbmRpbmcobGlzdEJpbmRpbmcsIGFwcENvbXBvbmVudCk7XG5cblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNyZWF0aW5nL3NhdmluZyB0aGUgbmV3IGRvY3VtZW50XCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0XHR0aHJvdyBGRUxpYnJhcnkuQ29uc3RhbnRzLkNyZWF0aW9uRmFpbGVkO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRyYW5zaWVudExpc3RCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRjcmVhdGVEaWFsb2cuY2xvc2VEaWFsb2coKTtcblx0XHRcdFx0XHRyZXN1bHRQcm9taXNlS2VlcGVyLnJlc29sdmUobmV3Q29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdC8vIGluIGNhc2Ugb2YgY3JlYXRpb24gZmFpbGVkLCBkaWFsb2cgc2hvdWxkIHN0YXkgb3BlbiAtIHRvIGFjaGlldmUgdGhlIHNhbWUsIG5vdGhpbmcgaGFzIHRvIGJlIGRvbmUgKGxpa2UgaW4gY2FzZSBvZiBzdWNjZXNzIHdpdGggYktlZXBEaWFsb2dPcGVuKVxuXHRcdFx0XHRpZiAoIVtGRUxpYnJhcnkuQ29uc3RhbnRzLk9uQmVmb3JlQ3JlYXRlRmFpbGVkLCBGRUxpYnJhcnkuQ29uc3RhbnRzLkNyZWF0aW9uRmFpbGVkXS5pbmNsdWRlcyhlcnJvcikpIHtcblx0XHRcdFx0XHQvLyBvdGhlciBlcnJvcnMgYXJlIG5vdCBleHBlY3RlZFxuXHRcdFx0XHRcdHRyYW5zaWVudExpc3RCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRjcmVhdGVEaWFsb2cuY2xvc2VEaWFsb2coKTtcblx0XHRcdFx0XHRyZXN1bHRQcm9taXNlS2VlcGVyLnJlamVjdChlcnJvciBhcyBzdHJpbmcgfCBFcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGNyZWF0ZURpYWxvZy5zZXRCdXN5KGZhbHNlKTtcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHsgaXNPcGVyYXRpb25EaWFsb2dPcGVuOiBjcmVhdGVEaWFsb2cuaXNPcGVuKCkgfSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNyZWF0ZURpYWxvZy5hdHRhY2hFeGl0RGlhbG9nKHt9LCBvbkV4aXREaWFsb2cpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdFByb21pc2VLZWVwZXIucHJvbWlzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXYWl0cyBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgY29udGV4dCB0byBiZSBmaW5pc2hlZC5cblx0ICogQHBhcmFtIG5ld0NvbnRleHQgVGhlIGNvbnRleHQgYmVpbmcgY3JlYXRlZFxuXHQgKiBAcGFyYW0ga2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bFxuXHQgKi9cblx0YXN5bmMgd2FpdEZvckNyZWF0ZUNvbXBsZXRpb24obmV3Q29udGV4dDogT0RhdGFWNENvbnRleHQsIGtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBwcm9taXNlS2VlcGVyID0gbmV3IFByb21pc2VLZWVwZXI8Ym9vbGVhbj4oKTtcblx0XHRjb25zdCBwYXJlbnRMaXN0QmluZGluZyA9IG5ld0NvbnRleHQuZ2V0QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cblx0XHRjb25zdCBvbkNyZWF0ZUNvbXBsZXRlZCA9IChldmVudDogT0RhdGFMaXN0QmluZGluZyRDcmVhdGVDb21wbGV0ZWRFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgY3JlYXRlZENvbnRleHQgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJjb250ZXh0XCIpO1xuXHRcdFx0Y29uc3Qgc3VjY2VzcyA9IGV2ZW50LmdldFBhcmFtZXRlcihcInN1Y2Nlc3NcIik7XG5cdFx0XHRpZiAoY3JlYXRlZENvbnRleHQgPT09IG5ld0NvbnRleHQpIHtcblx0XHRcdFx0cGFyZW50TGlzdEJpbmRpbmcuZGV0YWNoQ3JlYXRlQ29tcGxldGVkKG9uQ3JlYXRlQ29tcGxldGVkKTtcblx0XHRcdFx0cHJvbWlzZUtlZXBlci5yZXNvbHZlKHN1Y2Nlc3MgPT09IHRydWUpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRwYXJlbnRMaXN0QmluZGluZy5hdHRhY2hDcmVhdGVDb21wbGV0ZWQob25DcmVhdGVDb21wbGV0ZWQpO1xuXG5cdFx0Y29uc3QgY3JlYXRpb25TdWNjZXNzZnVsID0gYXdhaXQgcHJvbWlzZUtlZXBlci5wcm9taXNlO1xuXHRcdGlmICghY3JlYXRpb25TdWNjZXNzZnVsKSB7XG5cdFx0XHRpZiAoIWtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQpIHtcblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBwZW5kaW5nIFBPU1QgYW5kIGRlbGV0ZSB0aGUgY29udGV4dCBpbiB0aGUgbGlzdEJpbmRpbmdcblx0XHRcdFx0KG5ld0NvbnRleHQuY3JlYXRlZCgpID8/IFByb21pc2UucmVzb2x2ZSgpKS5jYXRjaChmdW5jdGlvbiAoY29udGV4dEVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLnRyYWNlKFwidHJhbnNpZW50IGNyZWF0aW9uIGNvbnRleHQgZGVsZXRpb24gZXJyb3JcIiwgY29udGV4dEVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRwYXJlbnRMaXN0QmluZGluZy5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0cGFyZW50TGlzdEJpbmRpbmcuZ2V0TW9kZWwoKS5yZXNldENoYW5nZXMocGFyZW50TGlzdEJpbmRpbmcuZ2V0VXBkYXRlR3JvdXBJZCgpKTtcblx0XHRcdFx0dGhyb3cgRkVMaWJyYXJ5LkNvbnN0YW50cy5DcmVhdGlvbkZhaWxlZDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXdhaXQgbmV3Q29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBuYW1lIG9mIHRoZSBOZXdBY3Rpb24gdG8gYmUgZXhlY3V0ZWQuXG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgU3RhcnR1cCBwYXJhbWV0ZXJzIG9mIHRoZSBhcHBsaWNhdGlvblxuXHQgKiBAcGFyYW0gW29TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlXVxuXHQgKiBAcGFyYW0gc0NyZWF0ZUhhc2ggSGFzaCB0byBiZSBjaGVja2VkIGZvciBhY3Rpb24gdHlwZVxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgTWV0YU1vZGVsIHVzZWQgdG8gY2hlY2sgZm9yIE5ld0FjdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHNNZXRhUGF0aCBUaGUgTWV0YVBhdGhcblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9nZXROZXdBY3Rpb24oXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiB7XG5cdFx0XHRwcmVmZXJyZWRNb2RlPzogc3RyaW5nW107XG5cdFx0fSxcblx0XHRzQ3JlYXRlSGFzaDogc3RyaW5nLFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdHNNZXRhUGF0aDogc3RyaW5nXG5cdCk6IHN0cmluZyB7XG5cdFx0bGV0IHNOZXdBY3Rpb247XG5cblx0XHRpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzICYmIG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlICYmIHNDcmVhdGVIYXNoLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJJLUFDVElPTj1DUkVBVEVXSVRIXCIpKSB7XG5cdFx0XHRjb25zdCBzUHJlZmVycmVkTW9kZSA9IG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdO1xuXHRcdFx0c05ld0FjdGlvbiA9IHNQcmVmZXJyZWRNb2RlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJDUkVBVEVXSVRIOlwiKVxuXHRcdFx0XHQ/IHNQcmVmZXJyZWRNb2RlLnN1YnN0cmluZyhzUHJlZmVycmVkTW9kZS5sYXN0SW5kZXhPZihcIjpcIikgKyAxKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzICYmXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZSAmJlxuXHRcdFx0c0NyZWF0ZUhhc2gudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkktQUNUSU9OPUFVVE9DUkVBVEVXSVRIXCIpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBzUHJlZmVycmVkTW9kZSA9IG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdO1xuXHRcdFx0c05ld0FjdGlvbiA9IHNQcmVmZXJyZWRNb2RlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJBVVRPQ1JFQVRFV0lUSDpcIilcblx0XHRcdFx0PyBzUHJlZmVycmVkTW9kZS5zdWJzdHJpbmcoc1ByZWZlcnJlZE1vZGUubGFzdEluZGV4T2YoXCI6XCIpICsgMSlcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNOZXdBY3Rpb24gPVxuXHRcdFx0XHRvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0T2JqZWN0ICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHQ/IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkL05ld0FjdGlvbmApIHx8XG5cdFx0XHRcdFx0ICBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvTmV3QWN0aW9uYClcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHNOZXdBY3Rpb247XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBsYWJlbCBmb3IgdGhlIHRpdGxlIG9mIGEgc3BlY2lmaWMgY3JlYXRlIGFjdGlvbiBkaWFsb2csIGUuZy4gQ3JlYXRlIFNhbGVzIE9yZGVyIGZyb20gUXVvdGF0aW9uLlxuXHQgKlxuXHQgKiBUaGUgZm9sbG93aW5nIHByaW9yaXR5IGlzIGFwcGxpZWQ6XG5cdCAqIDEuIGxhYmVsIG9mIGxpbmUtaXRlbSBhbm5vdGF0aW9uLlxuXHQgKiAyLiBsYWJlbCBhbm5vdGF0ZWQgaW4gdGhlIGFjdGlvbi5cblx0ICogMy4gXCJDcmVhdGVcIiBhcyBhIGNvbnN0YW50IGZyb20gaTE4bi5cblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIE1ldGFNb2RlbCB1c2VkIHRvIGNoZWNrIGZvciB0aGUgTmV3QWN0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gc01ldGFQYXRoIFRoZSBNZXRhUGF0aFxuXHQgKiBAcGFyYW0gc05ld0FjdGlvbiBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFJlc291cmNlQnVuZGxlIHRvIGFjY2VzcyB0aGUgZGVmYXVsdCBDcmVhdGUgbGFiZWxcblx0ICogQHJldHVybnMgVGhlIGxhYmVsIGZvciB0aGUgQ3JlYXRlIEFjdGlvbiBEaWFsb2dcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfZ2V0U3BlY2lmaWNDcmVhdGVBY3Rpb25EaWFsb2dMYWJlbChcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZCxcblx0XHRzTWV0YVBhdGg6IHN0cmluZyxcblx0XHRzTmV3QWN0aW9uOiBzdHJpbmcsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCB8IHVuZGVmaW5lZFxuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGxpbmVJdGVtcyA9IG9NZXRhTW9kZWw/LmdldE9iamVjdChgJHtzTWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbWApIGFzIExpbmVJdGVtIHwgdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgbGFiZWwgPSBsaW5lSXRlbXM/LmZpbmQoKGxpbmVJdGVtKSA9PiBpc0RhdGFGaWVsZEZvckFjdGlvbihsaW5lSXRlbSkgJiYgbGluZUl0ZW0uQWN0aW9uLnNwbGl0KFwiKFwiLCAxKVswXSA9PT0gc05ld0FjdGlvbilcblx0XHRcdD8uTGFiZWw7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0bGFiZWwgfHxcblx0XHRcdG9NZXRhTW9kZWw/LmdldE9iamVjdChgJHtzTWV0YVBhdGh9LyR7c05ld0FjdGlvbn1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsYCkgfHxcblx0XHRcdHJlc291cmNlTW9kZWw/LmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9TQVBGRV9BQ1RJT05fQ1JFQVRFXCIpXG5cdFx0KTtcblx0fVxufVxuXG5jb25zdCBzaW5nbGV0b24gPSBuZXcgVHJhbnNhY3Rpb25IZWxw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
|
|
1278
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcmVhdGlvbk1vZGUiLCJGRUxpYnJhcnkiLCJQcm9ncmFtbWluZ01vZGVsIiwiRGVsZXRlT3B0aW9uVHlwZXMiLCJkZWxldGVIZWxwZXIiLCJEZWxldGVEaWFsb2dDb250ZW50Q29udHJvbCIsImdldFBhcmFtZXRlcnMiLCJtUGFyYW1ldGVycyIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIlRyYW5zYWN0aW9uSGVscGVyIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiYnVzeUxvY2siLCJhcHBDb21wb25lbnQiLCJidXN5UGF0aCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZ2V0TW9kZWwiLCJidXN5VW5sb2NrIiwidW5sb2NrIiwiZ2V0UHJvZ3JhbW1pbmdNb2RlbCIsInNvdXJjZSIsInBhdGgiLCJpc0EiLCJnZXRQYXRoIiwiaXNSZWxhdGl2ZSIsImdldFJlc29sdmVkUGF0aCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsIkRyYWZ0IiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiU3RpY2t5IiwiTm9uRHJhZnQiLCJ2YWxpZGF0ZURvY3VtZW50Iiwib0NvbnRleHQiLCJvVmlldyIsInNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJzTW9kdWxlIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJyZXBsYWNlIiwic0Z1bmN0aW9uTmFtZSIsImxlbmd0aCIsIm1EYXRhIiwiZGF0YSIsIkZQTUhlbHBlciIsInZhbGlkYXRpb25XcmFwcGVyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXREYXRhRnJvbURlZmF1bHRWYWx1ZUZ1bmN0aW9uIiwibGlzdEJpbmRpbmciLCJtb2RlbCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJsaXN0QmluZGluZ09iamVjdFBhdGgiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0IiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJkZWZhdWx0RnVuY09uVGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5U2V0IiwiZGVmYXVsdEZ1bmN0aW9uTmFtZSIsInVuZGVmaW5lZCIsImZ1bmN0aW9uT25OYXZQcm9wIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJkZWZhdWx0RnVuY3Rpb25Db250ZXh0IiwiZ2V0Q29udGV4dCIsImdldEhlYWRlckNvbnRleHQiLCJkZWZhdWx0RnVuY3Rpb25QYXRoIiwiZ2V0TWV0YVBhdGgiLCJkZWZhdWx0RnVuY3Rpb25PYmplY3RQYXRoIiwiZGVmYXVsdEZ1bmN0aW9uUmVzdWx0IiwiaXNCb3VuZCIsIm9wZXJhdGlvbnMiLCJjYWxsQm91bmRGdW5jdGlvbiIsInRvU3RyaW5nIiwiY2FsbEZ1bmN0aW9uSW1wb3J0IiwiZ2V0T2JqZWN0IiwiaXNMaXN0QmluZGluZ0hpZXJhcmNoaWNhbCIsImdldEFnZ3JlZ2F0aW9uIiwiaGllcmFyY2h5UXVhbGlmaWVyIiwiaXNMaXN0QmluZGluZ0FuYWx5dGljYWwiLCJhZ2dyZWdhdGlvbiIsImNyZWF0ZUNvbnRleHQiLCJpbml0aWFsRGF0YSIsIm9wdGlvbnMiLCJkYXRhRm9yQ3JlYXRpb24iLCJsaXN0QmluZGluZ0ZvckNyZWF0aW9uIiwicGFyZW50Q29udGV4dCIsImlzRXhwYW5kZWQiLCJleHBhbmQiLCJPYmplY3QiLCJhc3NpZ24iLCJiaW5kTGlzdCIsIiQkZ3JvdXBJZCIsImdldEdyb3VwSWQiLCIkJHVwZGF0ZUdyb3VwSWQiLCJnZXRVcGRhdGVHcm91cElkIiwib2JqZWN0UGF0aCIsInBhcmVudE5hdmlnYXRpb24iLCJ0YXJnZXRFbnRpdHlUeXBlIiwiQWdncmVnYXRpb24iLCJQYXJlbnROYXZpZ2F0aW9uUHJvcGVydHkiLCJ2YWx1ZSIsIkVycm9yIiwicGFyZW50QmluZGluZ0RhdGEiLCJjcmVhdGUiLCJjcmVhdGVBdEVuZCIsImNyZWF0ZUluYWN0aXZlIiwiZ2V0Q3JlYXRpb25QYXJhbWV0ZXJzIiwiY3JlYXRlRGF0YSIsIm1ldGFQYXRoIiwibm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzIiwiZ2V0Q3JlYXRlUG9wdXBGaWVsZHMiLCJmaWx0ZXIiLCJmaWVsZE5hbWUiLCJjcmVhdGVEb2N1bWVudCIsIm1haW5MaXN0QmluZGluZyIsImluUGFyYW1ldGVycyIsInJlc291cmNlTW9kZWwiLCJtZXNzYWdlSGFuZGxlciIsImZyb21Db3B5UGFzdGUiLCJuZXdEb2N1bWVudENvbnRleHQiLCJwYXJhbWV0ZXJzIiwicHJvZ3JhbW1pbmdNb2RlbCIsImdldEJ1c3lQYXRoIiwiYmVmb3JlQ3JlYXRlQ2FsbEJhY2siLCJpbmFjdGl2ZSIsIm1lc3NhZ2VIYW5kbGluZ0tleSIsInJlZ2lzdGVyVG9Ib2xkTWVzc2FnZXMiLCJwZXJmb3JtQ3JlYXRpb24iLCJzaG93TWVzc2FnZURpYWxvZyIsImNvbnRyb2wiLCJwYXJlbnRDb250cm9sIiwidW5Ib2xkS2V5IiwiZXJyb3IiLCJDb25zdGFudHMiLCJBY3Rpb25FeGVjdXRpb25GYWlsZWQiLCJDYW5jZWxBY3Rpb25EaWFsb2ciLCJpc1RyYW5zaWVudCIsImRlbGV0ZSIsImJ1c3lNb2RlIiwiYnVzeUlkIiwiY3JlYXRlRG9jdW1lbnRDb250ZXh0IiwiY3JlYXRlUGFyYW1ldGVycyIsImVudHJpZXMiLCJtYXAiLCJfcmVmIiwia2V5IiwidG9FUzZQcm9taXNlIiwiY29udGV4dFBhdGgiLCJMb2ciLCJPbkJlZm9yZUNyZWF0ZUZhaWxlZCIsInJlZHVjZSIsInJlc3VsdCIsImN1cnJlbnRPYmplY3QiLCJjcmVhdGVQcm9taXNlIiwiQ29tbW9uVXRpbHMiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCJzdWJtaXRCYXRjaCIsImNyZWF0ZUhhc2giLCJnZXRSb3V0ZXJQcm94eSIsImdldEhhc2giLCJjb21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwibmV3QWN0aW9uIiwiX2dldE5ld0FjdGlvbiIsInBlcmZvcm1DcmVhdGlvbldpdGhBY3Rpb24iLCJzdGF0dXMiLCJyZWFzb24iLCJyZXR1cm5lZENvbnRleHQiLCJwZXJmb3JtQ3JlYXRpb25XaXRoUE9TVCIsImFjdGlvbk5hbWUiLCJoZWFkZXJDb250ZXh0UGF0aCIsIm1lc3NhZ2VzUGF0aCIsImdldE1lc3NhZ2VzUGF0aCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwiJCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0cyIsInNlbGVjdGVkUHJvcGVydGllcyIsInB1c2giLCJqb2luIiwiY2FsbEFjdGlvbiIsImNvbnRleHRzIiwic2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyIsImxhYmVsIiwiX2dldFNwZWNpZmljQ3JlYXRlQWN0aW9uRGlhbG9nTGFiZWwiLCJ2aWV3IiwiaXNDcmVhdGVBY3Rpb24iLCJza2lwUGFyYW1ldGVyRGlhbG9nIiwiZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhIiwiY2FuSGF2ZURpYWxvZyIsImNyZWF0aW9uTW9kZSIsIkNyZWF0aW9uUm93IiwiSW5saW5lIiwiY3JlYXRpb25EaWFsb2dGaWVsZHMiLCJDcmVhdGlvbkRpYWxvZyIsImZvckVhY2giLCJpbmNsdWRlcyIsImNyZWF0ZVdpdGhEaWFsb2ciLCJ3YWl0Rm9yQ3JlYXRlQ29tcGxldGlvbiIsImtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQiLCJtc2ciLCJtZXNzYWdlIiwiX2lzRHJhZnRFbmFibGVkIiwidkNvbnRleHRzIiwiY29udGV4dEZvckRyYWZ0TW9kZWwiLCJzUHJvZ3JhbW1pbmdNb2RlbCIsImRlbGV0ZURvY3VtZW50IiwiY29udGV4dHNUb0RlbGV0ZSIsIkFycmF5IiwiaXNBcnJheSIsImZpcnN0Q29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJyZWplY3QiLCJkcmFmdEVuYWJsZWQiLCJpdGVtcyIsInVuU2F2ZWRDb250ZXh0IiwiZW50aXR5U2V0TmFtZSIsImdldENvbGxlY3Rpb25OYW1lRnJvbUNvbnRleHQiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0IiwiZmluZCIsImNvbnRleHQiLCJjb250ZXh0RGF0YSIsIklzQWN0aXZlRW50aXR5IiwiSGFzRHJhZnRFbnRpdHkiLCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YSIsIkluUHJvY2Vzc0J5VXNlciIsIkRyYWZ0SXNDcmVhdGVkQnlNZSIsImxvY2tpbmdVc2VyTmFtZSIsIk1lc3NhZ2VCb3giLCJzaG93IiwiZ2V0VGV4dCIsInRpdGxlIiwib25DbG9zZSIsIm5vblRhYmxlVHh0IiwidW5TYXZlZENvbnRleHRVc2VyIiwiZGVzY3JpcHRpb24iLCJ0eXBlIiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ0ZXh0Iiwic2VsZWN0ZWQiLCJURVhUIiwidG90YWxEZWxldGFibGUiLCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlIiwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSIsInVuU2F2ZWRDb250ZXh0cyIsInVwZGF0ZURyYWZ0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzIiwibm9uRGVsZXRhYmxlVGV4dCIsImdldE5vbkRlbGV0YWJsZVRleHQiLCJvcHRpb25zRGVsZXRhYmxlVGV4dHMiLCJnZXRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMiLCJjb21tb25CaW5kaW5nIiwiZ2V0QmluZGluZyIsImJpbmRpbmdUeXBlIiwidXBkYXRlQ29udGVudEZvckRlbGV0ZURpYWxvZyIsImZuQ29uZmlybSIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZGVsZXRlQ29uZmlybUhhbmRsZXIiLCJvRXJyb3IiLCJkaWFsb2ciLCJjcmVhdGVEZWxldGVEaWFsb2ciLCJub0RpYWxvZyIsInNpbGVudE1vZGUiLCJhZGRTdHlsZUNsYXNzIiwib3BlbiIsImZuUmVqZWN0IiwiZGlhbG9nQ29uZmlybWVkIiwidkJveCIsIlZCb3giLCJyZXNvdXJjZUJ1bmRsZUNvcmUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJEaWFsb2ciLCJzdGF0ZSIsImNvbnRlbnQiLCJhcmlhTGFiZWxsZWRCeSIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiZWRpdERvY3VtZW50IiwiZ3JvdXBJZCIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm9OZXdDb250ZXh0IiwiZHJhZnQiLCJjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudCIsImJQcmVzZXJ2ZUNoYW5nZXMiLCJzdGlja3kiLCJlZGl0RG9jdW1lbnRJblN0aWNreVNlc3Npb24iLCJlcnIiLCJzaG93TWVzc2FnZXMiLCJjb25jdXJyZW50RWRpdEZsYWciLCJjYW5jZWxEb2N1bWVudCIsIm1JblBhcmFtZXRlcnMiLCJpc05ld09iamVjdCIsImlzT2JqZWN0TW9kaWZpZWQiLCJvTW9kZWwiLCJyZXR1cm5lZFZhbHVlIiwiZHJhZnREYXRhQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0IiwiZHJhZnRBZG1pbkRhdGEiLCJyZXF1ZXN0T2JqZWN0IiwiQ3JlYXRpb25EYXRlVGltZSIsIkxhc3RDaGFuZ2VEYXRlVGltZSIsInNraXBEaXNjYXJkUG9wb3ZlciIsIl9jb25maXJtRGlzY2FyZCIsImNhbmNlbEJ1dHRvbiIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwiYmVmb3JlQ2FuY2VsQ2FsbEJhY2siLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInJlc2V0Q2hhbmdlcyIsImRlbGV0ZURyYWZ0Iiwib1NpYmxpbmdDb250ZXh0Iiwic0Nhbm9uaWNhbFBhdGgiLCJyZXF1ZXN0Q2Fub25pY2FsUGF0aCIsImRpc2NhcmRlZENvbnRleHQiLCJkaXNjYXJkRG9jdW1lbnQiLCJyZWZyZXNoIiwic2F2ZURvY3VtZW50IiwiZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsImJpbmRpbmdzRm9yU2lkZUVmZmVjdHMiLCJza2lwQ29uZmlybWF0aW9uTXNnIiwiYXJndW1lbnRzIiwib0FjdGl2ZURvY3VtZW50IiwiYWN0aXZhdGVEb2N1bWVudCIsIm1lc3NhZ2VzUmVjZWl2ZWQiLCJnZXRNZXNzYWdlcyIsImNvbmNhdCIsImdldFR5cGUiLCJNZXNzYWdlVHlwZSIsIlN1Y2Nlc3MiLCJNZXNzYWdlVG9hc3QiLCJoYXNUcmFuc2llbnRDb250ZXh0IiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5Iiwic0FjdGlvbk5hbWUiLCJjb250ZXh0VG9Qcm9jZXNzIiwic05hbWUiLCJzcGxpdCIsImNvbnRyb2xJZCIsImJ5SWQiLCJvUmVzdWx0IiwiYWN0aW9uUGF0aCIsImJvdW5kQWN0aW9uIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImNvbnZlcnRlZEFjdGlvbiIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwiT3BlcmF0aW9uIiwicGFyYW1ldGVyVmFsdWVzIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwib0RhdGFQcm9wZXJ0aWVzIiwiZ2hvc3RDb250ZXh0QmluZGluZ1Byb3RlY3Rpb24iLCJlbmhhbmNlJHNlbGVjdCIsImZlRnJhbWV3b3JrQ2FsbCIsImlnbm9yZUVUYWciLCJvRGF0YUV2ZW50cyIsIm9uT0RhdGFTdWJtaXQiLCJvbk9EYXRhUmVzcG9uc2UiLCJvblJlcXVlc3RTaWRlRWZmZWN0cyIsImhhbmRsZUFjdGlvbkVuYWJsZW1lbnRPbk9wZXJhdGlvbiIsImludGVybmFsTW9kZWxDb250ZXh0Iiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiZXhlY3V0ZSIsImNhbGxBY3Rpb25JbXBvcnQiLCJfaGFuZGxlQWN0aW9uUmVzcG9uc2UiLCJuYW1lIiwiYWN0aW9uSGVscGVyIiwiaXNTdGF0aWNBY3Rpb24iLCJnZXRQcm9wZXJ0eSIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiSlNPTiIsInBhcnNlIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIiwiYVRyYW5zaWVudE1lc3NhZ2VzIiwic2V0UHJvcGVydHkiLCJoYW5kbGVWYWxpZGF0aW9uRXJyb3IiLCJlcnJvclRvUmVtb3ZlIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsInZhbGlkYXRpb24iLCJyZW1vdmVNZXNzYWdlcyIsIl9jcmVhdGVQb3BvdmVyIiwic2V0dGluZ3MiLCJQb3BvdmVyIiwiaXNNb2RpZmllZCIsInNldEVuYWJsZWQiLCJjb25maXJtYXRpb25Qb3BvdmVyIiwic2hvd0hlYWRlciIsInBsYWNlbWVudCIsIlRleHQiLCJjb25maXJtQnV0dG9uIiwid2lkdGgiLCJhZGRDb250ZW50IiwiYXR0YWNoQmVmb3JlT3BlbiIsInNldEluaXRpYWxGb2N1cyIsImF0dGFjaEFmdGVyQ2xvc2UiLCJvcGVuQnkiLCJyZWZyZXNoTGlzdEJpbmRpbmciLCJpc1Jvb3QiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsInJlcXVlc3RSZWZyZXNoIiwiZmllbGROYW1lcyIsImxpc3RNZXRhUGF0aCIsInRyYW5zaWVudExpc3RCaW5kaW5nIiwicmVmcmVzaEludGVybmFsIiwidHJhbnNpZW50Q29udGV4dCIsImZpZWxkTWV0YUNvbnRleHRzIiwiY3JlYXRlRGlhbG9nIiwiZ2V0Q29yZVVJRmFjdG9yeSIsIm5ld0NyZWF0ZURpYWxvZyIsInNldFVzZXJEZWZhdWx0cyIsImNyZWF0ZUFjdGlvbiIsIm9wZW5EaWFsb2ciLCJlIiwicmVzdWx0UHJvbWlzZUtlZXBlciIsIlByb21pc2VLZWVwZXIiLCJvbkV4aXREaWFsb2ciLCJldmVudCIsImdldFBhcmFtZXRlciIsImNsb3NlRGlhbG9nIiwic2V0QnVzeSIsImJJc0NyZWF0ZURpYWxvZyIsInRyYW5zaWVudERhdGEiLCJrZXlzIiwicHJvcGVydHlQYXRoIiwib1Byb3BlcnR5IiwiJGtpbmQiLCJzdGFydHNXaXRoIiwiY3JlYXRlRGF0YUFzQXJyYXkiLCJfcmVmMiIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwibmV3Q29udGV4dCIsImNyZWF0aW9uU3VjY2VzcyIsImFmdGVyQ3JlYXRlQ2FsbEJhY2siLCJkaXNwbGF5RXJyb3JNZXNzYWdlcyIsInNob3dCb3VuZFN0YXRlTWVzc2FnZXMiLCJDcmVhdGlvbkZhaWxlZCIsImlzT3BlcmF0aW9uRGlhbG9nT3BlbiIsImlzT3BlbiIsImF0dGFjaEV4aXREaWFsb2ciLCJwcm9taXNlIiwicHJvbWlzZUtlZXBlciIsInBhcmVudExpc3RCaW5kaW5nIiwib25DcmVhdGVDb21wbGV0ZWQiLCJjcmVhdGVkQ29udGV4dCIsInN1Y2Nlc3MiLCJkZXRhY2hDcmVhdGVDb21wbGV0ZWQiLCJhdHRhY2hDcmVhdGVDb21wbGV0ZWQiLCJjcmVhdGlvblN1Y2Nlc3NmdWwiLCJjcmVhdGVkIiwiY2F0Y2giLCJjb250ZXh0RXJyb3IiLCJ0cmFjZSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInNDcmVhdGVIYXNoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aCIsInNOZXdBY3Rpb24iLCJwcmVmZXJyZWRNb2RlIiwidG9VcHBlckNhc2UiLCJzUHJlZmVycmVkTW9kZSIsImxpbmVJdGVtcyIsImxpbmVJdGVtIiwiaXNEYXRhRmllbGRGb3JBY3Rpb24iLCJBY3Rpb24iLCJMYWJlbCIsInNpbmdsZXRvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVHJhbnNhY3Rpb25IZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24sIEFjdGlvbiBhcyBFZG1BY3Rpb24sIEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IExpbmVJdGVtIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXhpdERpYWxvZ0V2ZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL1VJUHJvdmlkZXJcIjtcbmltcG9ydCB7IGdldENvcmVVSUZhY3RvcnkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvVUlQcm92aWRlclwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kQ29udGV4dFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IG9wZXJhdGlvbnMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L29wZXJhdGlvbnNcIjtcbmltcG9ydCBzdGlja3kgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L3N0aWNreVwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkRm9yQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IERlbGV0ZU9wdGlvbiwgRGVsZXRlUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IGRlbGV0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9EZWxldGVIZWxwZXJcIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRDcmVhdGVQb3B1cEZpZWxkcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IHRvRVM2UHJvbWlzZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Ub0VTNlByb21pc2VcIjtcbmltcG9ydCB7IGlzTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCB0eXBlIHsgJFBvcG92ZXJTZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkSXRlbSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9NdWx0aVZhbHVlRmllbGRJdGVtXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIHsgT0RhdGFMaXN0QmluZGluZyRDcmVhdGVDb21wbGV0ZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCIuLi8uLi9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSB7IE9wZXJhdGlvblJlc3VsdCB9IGZyb20gXCIuL29wZXJhdGlvbnMvT0RhdGFPcGVyYXRpb25cIjtcbmltcG9ydCBPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9ucy9PcGVyYXRpb25cIjtcbmltcG9ydCBhY3Rpb25IZWxwZXIgZnJvbSBcIi4vb3BlcmF0aW9ucy9hY3Rpb25IZWxwZXJcIjtcblxuY29uc3QgQ3JlYXRpb25Nb2RlID0gRkVMaWJyYXJ5LkNyZWF0aW9uTW9kZTtcbmNvbnN0IFByb2dyYW1taW5nTW9kZWwgPSBGRUxpYnJhcnkuUHJvZ3JhbW1pbmdNb2RlbDtcblxuLy9FbnVtcyBmb3IgZGVsZXRlIHRleHQgY2FsY3VsYXRpb25zIGZvciBkZWxldGUgY29uZmlybSBkaWFsb2cuXG5jb25zdCBEZWxldGVPcHRpb25UeXBlcyA9IGRlbGV0ZUhlbHBlci5EZWxldGVPcHRpb25UeXBlcztcbmNvbnN0IERlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sID0gZGVsZXRlSGVscGVyLkRlbGV0ZURpYWxvZ0NvbnRlbnRDb250cm9sO1xuXG4vKiBNYWtlIHN1cmUgdGhhdCB0aGUgbVBhcmFtZXRlcnMgaXMgbm90IHRoZSBvRXZlbnQgKi9cbmZ1bmN0aW9uIGdldFBhcmFtZXRlcnM8VD4obVBhcmFtZXRlcnM/OiBFdmVudCB8IFQpOiBUIHtcblx0aWYgKG1QYXJhbWV0ZXJzICYmIChtUGFyYW1ldGVycyBhcyBFdmVudCkuZ2V0TWV0YWRhdGEgJiYgKG1QYXJhbWV0ZXJzIGFzIEV2ZW50KS5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAudWkuYmFzZS5FdmVudFwiKSB7XG5cdFx0bVBhcmFtZXRlcnMgPSB7fSBhcyBUO1xuXHR9XG5cdHJldHVybiAobVBhcmFtZXRlcnMgYXMgVCkgfHwgKHt9IGFzIFQpO1xufVxuXG5leHBvcnQgdHlwZSBDcmVhdGVQYXJhbWV0ZXJzID0ge1xuXHRkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdGJ1c3lNb2RlPzogc3RyaW5nO1xuXHRidXN5SWQ/OiBzdHJpbmc7XG5cdGtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQ/OiBib29sZWFuO1xuXHRwYXJlbnRDb250cm9sOiBWaWV3O1xuXHRpbmFjdGl2ZT86IGJvb2xlYW47XG5cdGJlZm9yZUNyZWF0ZUNhbGxCYWNrPzogRnVuY3Rpb247XG5cdGFmdGVyQ3JlYXRlQ2FsbEJhY2s/OiAoY29udGV4dDogT0RhdGFWNENvbnRleHQpID0+IFByb21pc2U8dm9pZD47XG5cdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRjcmVhdGlvbk1vZGU/OiBzdHJpbmc7XG5cdGNyZWF0ZUF0RW5kPzogYm9vbGVhbjtcblx0cGFyZW50Q29udGV4dD86IE9EYXRhVjRDb250ZXh0O1xuXHRjcmVhdGlvbkRpYWxvZ0ZpZWxkcz86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgQ2FuY2VsUGFyYW1ldGVycyA9IHsgY2FuY2VsQnV0dG9uOiBCdXR0b247IHNraXBEaXNjYXJkUG9wb3ZlcjogYm9vbGVhbjsgYmVmb3JlQ2FuY2VsQ2FsbEJhY2s/OiBGdW5jdGlvbiB9O1xuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25EZWxldGVQYXJhbWV0ZXJzID0gRGVsZXRlUGFyYW1ldGVycyAmIHtcblx0c2VsZWN0ZWRDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRub0RpYWxvZz86IGJvb2xlYW47XG59O1xuXG5jbGFzcyBUcmFuc2FjdGlvbkhlbHBlciB7XG5cdGJ1c3lMb2NrKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBidXN5UGF0aD86IHN0cmluZyk6IHZvaWQge1xuXHRcdEJ1c3lMb2NrZXIubG9jayhhcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJ1aVwiKSwgYnVzeVBhdGgpO1xuXHR9XG5cblx0YnVzeVVubG9jayhhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgYnVzeVBhdGg/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRCdXN5TG9ja2VyLnVubG9jayhhcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJ1aVwiKSwgYnVzeVBhdGgpO1xuXHR9XG5cblx0Z2V0UHJvZ3JhbW1pbmdNb2RlbChzb3VyY2U6IE9EYXRhVjRDb250ZXh0IHwgQmluZGluZyk6IHR5cGVvZiBQcm9ncmFtbWluZ01vZGVsIHtcblx0XHRsZXQgcGF0aDogc3RyaW5nO1xuXHRcdGlmIChzb3VyY2UuaXNBPE9EYXRhVjRDb250ZXh0PihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCIpKSB7XG5cdFx0XHRwYXRoID0gc291cmNlLmdldFBhdGgoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGF0aCA9IChzb3VyY2UuaXNSZWxhdGl2ZSgpID8gc291cmNlLmdldFJlc29sdmVkUGF0aCgpIDogc291cmNlLmdldFBhdGgoKSkgPz8gXCJcIjtcblx0XHR9XG5cblx0XHRjb25zdCBtZXRhTW9kZWwgPSBzb3VyY2UuZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKG1ldGFNb2RlbCAmJiBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgcGF0aCkpIHtcblx0XHRcdHJldHVybiBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0O1xuXHRcdH0gZWxzZSBpZiAobWV0YU1vZGVsICYmIE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChtZXRhTW9kZWwpKSB7XG5cdFx0XHRyZXR1cm4gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3k7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9ncmFtbWluZ01vZGVsLk5vbkRyYWZ0O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgYSBkb2N1bWVudC5cblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGRvY3VtZW50IHRvIGJlIHZhbGlkYXRlZFxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBDYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuZGF0YV0gQSBtYXAgb2YgZGF0YSB0aGF0IHNob3VsZCBiZSB2YWxpZGF0ZWRcblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb25dIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGF0aCB0byB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvblxuXHQgKiBAcGFyYW0gb1ZpZXcgQ29udGFpbnMgdGhlIG9iamVjdCBvZiB0aGUgY3VycmVudCB2aWV3XG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCByZXN1bHQgb2YgdGhlIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgdmFsaWRhdGVEb2N1bWVudChcblx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0bVBhcmFtZXRlcnM6IHsgY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uPzogc3RyaW5nOyBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9LFxuXHRcdG9WaWV3OiBWaWV3XG5cdCk6IFByb21pc2U8eyBtZXNzYWdlVGFyZ2V0Pzogc3RyaW5nOyBtZXNzYWdlVGV4dDogc3RyaW5nIH1bXT4ge1xuXHRcdGNvbnN0IHNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb247XG5cdFx0aWYgKHNDdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24pIHtcblx0XHRcdGNvbnN0IHNNb2R1bGUgPSBzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLnN1YnN0cmluZygwLCBzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMSkucmVwbGFjZSgvXFwuL2dpLCBcIi9cIiksXG5cdFx0XHRcdHNGdW5jdGlvbk5hbWUgPSBzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLnN1YnN0cmluZyhcblx0XHRcdFx0XHRzQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSArIDEsXG5cdFx0XHRcdFx0c0N1c3RvbVZhbGlkYXRpb25GdW5jdGlvbi5sZW5ndGhcblx0XHRcdFx0KSxcblx0XHRcdFx0bURhdGEgPSBtUGFyYW1ldGVycy5kYXRhO1xuXHRcdFx0ZGVsZXRlIG1EYXRhW1wiQCR1aTUuY29udGV4dC5pc1RyYW5zaWVudFwiXTtcblx0XHRcdHJldHVybiBGUE1IZWxwZXIudmFsaWRhdGlvbldyYXBwZXIoc01vZHVsZSwgc0Z1bmN0aW9uTmFtZSwgbURhdGEsIG9WaWV3LCBvQ29udGV4dCk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBkZWZhdHVsIHZhbHVlcyBmcm9tIHRoZSBEZWZhdWx0VmFsdWUgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBUaGUgbGlzdCBiaW5kaW5nIHRvIGJlIHVzZWQgZm9yIGNyZWF0aW9uXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBkZWZhdWx0IHZhbHVlcyAob3IgdW5kZWZpbmVkIGlmIHRoZXJlJ3Mgbm8gZGVmYXVsdCB2YWx1ZSBmdW5jdGlvbilcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0RGF0YUZyb21EZWZhdWx0VmFsdWVGdW5jdGlvbihsaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IFByb21pc2U8b2JqZWN0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgbW9kZWwgPSBsaXN0QmluZGluZy5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGxpc3RCaW5kaW5nLmdldFJlc29sdmVkUGF0aCgpIGFzIHN0cmluZyk7XG5cdFx0Y29uc3QgbGlzdEJpbmRpbmdPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCk7XG5cblx0XHRjb25zdCBkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0ID0gKGxpc3RCaW5kaW5nT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb25cblx0XHRcdD8uRGVmYXVsdFZhbHVlc0Z1bmN0aW9uO1xuXHRcdGNvbnN0IGRlZmF1bHRGdW5jT25UYXJnZXRFbnRpdHlTZXQgPSAobGlzdEJpbmRpbmdPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCB1bmRlZmluZWQpPy5hbm5vdGF0aW9ucy5Db21tb25cblx0XHRcdD8uRGVmYXVsdFZhbHVlc0Z1bmN0aW9uO1xuXHRcdGNvbnN0IGRlZmF1bHRGdW5jdGlvbk5hbWUgPSBkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0ID8/IGRlZmF1bHRGdW5jT25UYXJnZXRFbnRpdHlTZXQ7XG5cblx0XHRpZiAoIWRlZmF1bHRGdW5jdGlvbk5hbWUpIHtcblx0XHRcdC8vIE5vIGRlZmF1bHQgdmFsdWUgZnVuY3Rpb25cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZnVuY3Rpb25Pbk5hdlByb3AgPSBpc05hdmlnYXRpb25Qcm9wZXJ0eShsaXN0QmluZGluZ09iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSAmJiBkZWZhdWx0RnVuY09uVGFyZ2V0T2JqZWN0ICE9PSB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmN0aW9uQ29udGV4dCA9IGZ1bmN0aW9uT25OYXZQcm9wID8gbGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpIDogbGlzdEJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHRcdGlmICghZGVmYXVsdEZ1bmN0aW9uQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmN0aW9uUGF0aCA9IGAke21ldGFNb2RlbC5nZXRNZXRhUGF0aChkZWZhdWx0RnVuY3Rpb25Db250ZXh0LmdldFBhdGgoKSl9LyR7ZGVmYXVsdEZ1bmN0aW9uTmFtZX1gO1xuXG5cdFx0Y29uc3QgZGVmYXVsdEZ1bmN0aW9uT2JqZWN0UGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGRlZmF1bHRGdW5jdGlvblBhdGgpKTtcblx0XHRjb25zdCBkZWZhdWx0RnVuY3Rpb25SZXN1bHQgPSAoZGVmYXVsdEZ1bmN0aW9uT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgQWN0aW9uKT8uaXNCb3VuZFxuXHRcdFx0PyBhd2FpdCBvcGVyYXRpb25zLmNhbGxCb3VuZEZ1bmN0aW9uKGRlZmF1bHRGdW5jdGlvbk5hbWUudG9TdHJpbmcoKSwgZGVmYXVsdEZ1bmN0aW9uQ29udGV4dCwgbW9kZWwpXG5cdFx0XHQ6ICgoYXdhaXQgb3BlcmF0aW9ucy5jYWxsRnVuY3Rpb25JbXBvcnQoZGVmYXVsdEZ1bmN0aW9uTmFtZS50b1N0cmluZygpLCBtb2RlbCkpIGFzIE9EYXRhVjRDb250ZXh0KTtcblxuXHRcdHJldHVybiBkZWZhdWx0RnVuY3Rpb25SZXN1bHQuZ2V0T2JqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgbGlzdCBiaW5kaW5nIGNvcnJlc3BvbmRzIHRvIGEgaGllcmFyY2h5LlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmdcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgbGlzdCBiaW5kaW5nIGlzIGhpZXJhcmNoaWNhbC5cblx0ICovXG5cdGlzTGlzdEJpbmRpbmdIaWVyYXJjaGljYWwobGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKGxpc3RCaW5kaW5nLmdldEFnZ3JlZ2F0aW9uKCkgYXMgeyBoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCk/LmhpZXJhcmNoeVF1YWxpZmllciA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGdpdmVuIGxpc3QgYmluZGluZyBpcyBhbmFseXRpY2FsLlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgVGhlIGxpc3QgYmluZGluZyB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUUlVFIGlmIHRoZSBsaXN0IGJpbmRpbmcgaXMgYW5hbHl0aWNhbCwgYGZhbHNlYCBvdGhlcndpc2UuXG5cdCAqL1xuXHRpc0xpc3RCaW5kaW5nQW5hbHl0aWNhbChsaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uID0gbGlzdEJpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSBhcyB7IGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuXHRcdHJldHVybiBhZ2dyZWdhdGlvbiAhPT0gdW5kZWZpbmVkICYmICFhZ2dyZWdhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXI7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBjb250ZXh0IGluIGEgbGlzdCBiaW5kaW5nLiBIYW5kbGVzIGJvdGggZmxhdCBhbmQgaGllcmFyY2hpY2FsIGNhc2VzLlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmdcblx0ICogQHBhcmFtIGluaXRpYWxEYXRhIEluaXRpYWwgZGF0YSB0byBjcmVhdGUgdGhlIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvcHRpb25zIENyZWF0aW9uIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSBvcHRpb25zLmNyZWF0ZUF0RW5kIENyZWF0ZSB0aGUgY29udGV4dCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IChpZ25vcmVkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcGFyYW0gb3B0aW9ucy5jcmVhdGVJbmFjdGl2ZSBDcmVhdGUgdGhlIGNvbnRleHQgYXMgaW5hY3RpdmUgKGlnbm9yZWQgaW4gY2FzZSBvZiBhIGhpZXJhcmNoeSkuXG5cdCAqIEBwYXJhbSBvcHRpb25zLnBhcmVudENvbnRleHQgQ3JlYXRlIHRoZSBjb250ZXh0IGFzIGFcdCBjaGlsZCBvZiB0aGlzIGNvbnRleHQgKG9ueSB1c2VkIGluIGNhc2Ugb2YgYSBoaWVyYXJjaHkpLlxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb250ZXh0LlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVDb250ZXh0KFxuXHRcdGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLFxuXHRcdGluaXRpYWxEYXRhOiBvYmplY3QgfCB1bmRlZmluZWQsXG5cdFx0b3B0aW9uczogeyBjcmVhdGVBdEVuZD86IGJvb2xlYW47IGNyZWF0ZUluYWN0aXZlPzogYm9vbGVhbjsgcGFyZW50Q29udGV4dD86IE9EYXRhVjRDb250ZXh0IH1cblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD4ge1xuXHRcdGNvbnN0IGRhdGFGb3JDcmVhdGlvbiA9IGluaXRpYWxEYXRhID8/IHt9O1xuXG5cdFx0aWYgKHRoaXMuaXNMaXN0QmluZGluZ0hpZXJhcmNoaWNhbChsaXN0QmluZGluZykpIHtcblx0XHRcdGxldCBsaXN0QmluZGluZ0ZvckNyZWF0aW9uOiBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdFx0aWYgKG9wdGlvbnMucGFyZW50Q29udGV4dD8uaXNFeHBhbmRlZCgpID09PSBmYWxzZSkge1xuXHRcdFx0XHQvLyBJZiB0aGUgcGFyZW50IGNvbnRleHQgYWxyZWFkeSBoYXMgY2hpbGRyZW4gYW5kIGlzIGNvbGxhcHNlZCwgd2UgZXhwYW5kIGl0IGZpcnN0XG5cdFx0XHRcdGF3YWl0IGxpc3RCaW5kaW5nLmV4cGFuZChvcHRpb25zLnBhcmVudENvbnRleHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobGlzdEJpbmRpbmcuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oZGF0YUZvckNyZWF0aW9uLCB7IFwiQCR1aTUubm9kZS5wYXJlbnRcIjogb3B0aW9ucy5wYXJlbnRDb250ZXh0IH0pO1xuXHRcdFx0XHRsaXN0QmluZGluZ0ZvckNyZWF0aW9uID0gbGlzdEJpbmRpbmc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBBYnNvbHV0ZSBiaW5kaW5nOiBjcmVhdGlvbiBmcm9tIHRoZSBMaXN0UmVwb3J0XG5cdFx0XHRcdC8vIFdlIHVzZSBhIHRlbXBvcmFyeSBmbGF0IGxpc3RCaW5kaW5nIGZvciB0aGUgY3JlYXRpb24sIHRvIGF2b2lkIGFkZGluZyB0aGUgbmV3IGNvbnRleHQgaW4gdGhlIHRhYmxlICh3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgaXQgdW50aWwgaXQncyBzYXZlZClcblx0XHRcdFx0Y29uc3QgbW9kZWwgPSBsaXN0QmluZGluZy5nZXRNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0bGlzdEJpbmRpbmdGb3JDcmVhdGlvbiA9IG1vZGVsLmJpbmRMaXN0KGxpc3RCaW5kaW5nLmdldFBhdGgoKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwge1xuXHRcdFx0XHRcdCQkZ3JvdXBJZDogbGlzdEJpbmRpbmcuZ2V0R3JvdXBJZCgpLFxuXHRcdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogbGlzdEJpbmRpbmcuZ2V0VXBkYXRlR3JvdXBJZCgpXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIEFkZCB0aGUgcGFyZW50IHBhdGggaW4gdGhlIGluaXRpYWwgZGF0YSBpZiBhIHBhcmVudCBpcyBwcm92aWRlZFxuXHRcdFx0XHRpZiAob3B0aW9ucy5wYXJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb2JqZWN0UGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGxpc3RCaW5kaW5nLmdldFBhdGgoKSkpO1xuXHRcdFx0XHRcdGNvbnN0IGhpZXJhcmNoeVF1YWxpZmllciA9IChsaXN0QmluZGluZy5nZXRBZ2dyZWdhdGlvbigpIGFzIHsgaGllcmFyY2h5UXVhbGlmaWVyOiBzdHJpbmcgfSkuaGllcmFyY2h5UXVhbGlmaWVyO1xuXHRcdFx0XHRcdGNvbnN0IHBhcmVudE5hdmlnYXRpb24gPVxuXHRcdFx0XHRcdFx0b2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLkFnZ3JlZ2F0aW9uPy5bYFJlY3Vyc2l2ZUhpZXJhcmNoeSMke2hpZXJhcmNoeVF1YWxpZmllcn1gXVxuXHRcdFx0XHRcdFx0XHQ/LlBhcmVudE5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZTtcblx0XHRcdFx0XHRpZiAoIXBhcmVudE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcGFyZW50IG5hdmlnYXRpb24gcHJvcGVydHkgZm9yICR7bGlzdEJpbmRpbmcuZ2V0UGF0aCgpfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBwYXJlbnRCaW5kaW5nRGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdFx0XHRcdHBhcmVudEJpbmRpbmdEYXRhW2Ake3BhcmVudE5hdmlnYXRpb259QG9kYXRhLmJpbmRgXSA9IG9wdGlvbnMucGFyZW50Q29udGV4dC5nZXRQYXRoKCkucmVwbGFjZSgvXlxcLy8sIFwiXCIpOyAvLyBSZW1vdmUgbGVhZGluZyBcIi9cIiBmcm9tIHRoZSBwYXRoXG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihkYXRhRm9yQ3JlYXRpb24sIHBhcmVudEJpbmRpbmdEYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbGlzdEJpbmRpbmdGb3JDcmVhdGlvbi5jcmVhdGUoZGF0YUZvckNyZWF0aW9uLCB0cnVlKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuaXNMaXN0QmluZGluZ0FuYWx5dGljYWwobGlzdEJpbmRpbmcpKSB7XG5cdFx0XHRpZiAobGlzdEJpbmRpbmcuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNyZWF0aW5nIGEgbmV3IGRvY3VtZW50IGluIGEgYW5hbHl0aWNhbCB0YWJsZSBpcyBzdXBwb3J0ZWQgb25seSBpbiBhIExpc3RSZXBvcnRcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXZSB1c2UgYSB0ZW1wb3JhcnkgZmxhdCBsaXN0QmluZGluZyBmb3IgdGhlIGNyZWF0aW9uLCB0byBhdm9pZCBhZGRpbmcgdGhlIG5ldyBjb250ZXh0IGluIHRoZSB0YWJsZSAod2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGl0IHVudGlsIGl0J3Mgc2F2ZWQpXG5cdFx0XHRcdGNvbnN0IG1vZGVsID0gbGlzdEJpbmRpbmcuZ2V0TW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgbGlzdEJpbmRpbmdGb3JDcmVhdGlvbiA9IG1vZGVsLmJpbmRMaXN0KGxpc3RCaW5kaW5nLmdldFBhdGgoKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwge1xuXHRcdFx0XHRcdCQkZ3JvdXBJZDogbGlzdEJpbmRpbmcuZ2V0R3JvdXBJZCgpLFxuXHRcdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogbGlzdEJpbmRpbmcuZ2V0VXBkYXRlR3JvdXBJZCgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gbGlzdEJpbmRpbmdGb3JDcmVhdGlvbi5jcmVhdGUoZGF0YUZvckNyZWF0aW9uLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGxpc3RCaW5kaW5nLmNyZWF0ZShkYXRhRm9yQ3JlYXRpb24sIHRydWUsIG9wdGlvbnMuY3JlYXRlQXRFbmQsIG9wdGlvbnMuY3JlYXRlSW5hY3RpdmUpO1xuXHRcdH1cblx0fVxuXG5cdGdldENyZWF0aW9uUGFyYW1ldGVycyhsaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZywgY3JlYXRlRGF0YTogb2JqZWN0IHwgdW5kZWZpbmVkLCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBsaXN0QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKGxpc3RCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKSEuZ2V0UGF0aCgpKTtcblxuXHRcdGNvbnN0IG5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyA9IGdldENyZWF0ZVBvcHVwRmllbGRzKG1ldGFNb2RlbCwgbWV0YVBhdGgsIGFwcENvbXBvbmVudCk7XG5cdFx0Ly8gRG8gbm90IGNvbnNpZGVyIGZpZWxkcyBmb3Igd2hpY2ggd2UgcHJvdmlkZSBzb21lIGluaXRpYWwgZGF0YVxuXHRcdHJldHVybiBub25Db21wdXRlZFZpc2libGVGaWVsZHMuZmlsdGVyKChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0cmV0dXJuICEoZmllbGROYW1lIGluIChjcmVhdGVEYXRhID8/IHt9KSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBkb2N1bWVudC5cblx0ICogQHBhcmFtIG1haW5MaXN0QmluZGluZyBPRGF0YSBWNCBMaXN0QmluZGluZyBvYmplY3Rcblx0ICogQHBhcmFtIFtpblBhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBbaW5QYXJhbWV0ZXJzLmRhdGFdIEEgbWFwIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUgc2VudCB3aXRoaW4gdGhlIFBPU1Rcblx0ICogQHBhcmFtIFtpblBhcmFtZXRlcnMuYnVzeU1vZGVdIEdsb2JhbCAoZGVmYXVsdCksIExvY2FsLCBOb25lIFRPRE86IHRvIGJlIHJlZmFjdG9yZWRcblx0ICogQHBhcmFtIFtpblBhcmFtZXRlcnMuYnVzeUlkXSBJRCBvZiB0aGUgbG9jYWwgYnVzeSBpbmRpY2F0b3Jcblx0ICogQHBhcmFtIFtpblBhcmFtZXRlcnMua2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZF0gSWYgc2V0LCB0aGUgY29udGV4dCBzdGF5cyBpbiB0aGUgbGlzdCBpZiB0aGUgUE9TVCBmYWlsZWQgYW5kIFBPU1Qgd2lsbCBiZSByZXBlYXRlZCB3aXRoIHRoZSBuZXh0IGNoYW5nZVxuXHQgKiBAcGFyYW0gW2luUGFyYW1ldGVycy5pbmFjdGl2ZV0gSWYgc2V0LCB0aGUgY29udGV4dCBpcyBzZXQgYXMgaW5hY3RpdmUgZm9yIGVtcHR5IHJvd3Ncblx0ICogQHBhcmFtIFtpblBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZ10gU2tpcHMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIGFwcCBjb21wb25lbnRcblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWwgVGhlIHJlc291cmNlIG1vZGVsXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGV4dGVuc2lvblxuXHQgKiBAcGFyYW0gZnJvbUNvcHlQYXN0ZSBUcnVlIGlmIHRoZSBjcmVhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgYSBwYXN0ZSBhY3Rpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIG5ldyBiaW5kaW5nIGNvbnRleHRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyBjcmVhdGVEb2N1bWVudChcblx0XHRtYWluTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0aW5QYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzIHwgdW5kZWZpbmVkLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRcdGZyb21Db3B5UGFzdGU6IGJvb2xlYW5cblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD4ge1xuXHRcdGxldCBuZXdEb2N1bWVudENvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJzKGluUGFyYW1ldGVycyk7XG5cdFx0aWYgKCFtYWluTGlzdEJpbmRpbmcpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkJpbmRpbmcgcmVxdWlyZWQgZm9yIG5ldyBkb2N1bWVudCBjcmVhdGlvblwiKTtcblx0XHR9XG5cdFx0Y29uc3QgcHJvZ3JhbW1pbmdNb2RlbCA9IHRoaXMuZ2V0UHJvZ3JhbW1pbmdNb2RlbChtYWluTGlzdEJpbmRpbmcpO1xuXHRcdGlmIChwcm9ncmFtbWluZ01vZGVsICE9PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0ICYmIHByb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDcmVhdGUgZG9jdW1lbnQgb25seSBhbGxvd2VkIGZvciBkcmFmdCBvciBzdGlja3kgc2Vzc2lvbiBzdXBwb3J0ZWQgc2VydmljZXNcIik7XG5cdFx0fVxuXHRcdGNvbnN0IGJ1c3lQYXRoID0gdGhpcy5nZXRCdXN5UGF0aChwYXJhbWV0ZXJzKTtcblx0XHRwYXJhbWV0ZXJzLmJlZm9yZUNyZWF0ZUNhbGxCYWNrID0gZnJvbUNvcHlQYXN0ZSA/IHVuZGVmaW5lZCA6IHBhcmFtZXRlcnMuYmVmb3JlQ3JlYXRlQ2FsbEJhY2s7XG5cdFx0aWYgKCFpblBhcmFtZXRlcnM/LmluYWN0aXZlKSB7XG5cdFx0XHR0aGlzLmJ1c3lMb2NrKGFwcENvbXBvbmVudCwgYnVzeVBhdGgpO1xuXHRcdH1cblx0XHRjb25zdCBtZXNzYWdlSGFuZGxpbmdLZXkgPSBtZXNzYWdlSGFuZGxlci5yZWdpc3RlclRvSG9sZE1lc3NhZ2VzKCk7XG5cdFx0dHJ5IHtcblx0XHRcdG5ld0RvY3VtZW50Q29udGV4dCA9IGF3YWl0IHRoaXMucGVyZm9ybUNyZWF0aW9uKFxuXHRcdFx0XHRtYWluTGlzdEJpbmRpbmcsXG5cdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdGZyb21Db3B5UGFzdGVcblx0XHRcdCk7XG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7IGNvbnRyb2w6IHBhcmFtZXRlcnMucGFyZW50Q29udHJvbCwgdW5Ib2xkS2V5OiBtZXNzYWdlSGFuZGxpbmdLZXkgfSk7XG5cdFx0XHRyZXR1cm4gbmV3RG9jdW1lbnRDb250ZXh0ITtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0Ly8gVE9ETzogY3VycmVudGx5LCB0aGUgb25seSBlcnJvcnMgaGFuZGxlZCBoZXJlIGFyZSByYWlzZWQgYXMgc3RyaW5nIC0gc2hvdWxkIGJlIGNoYW5nZWQgdG8gRXJyb3Igb2JqZWN0c1xuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coeyBjb250cm9sOiBwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsIHVuSG9sZEtleTogbWVzc2FnZUhhbmRsaW5nS2V5IH0pO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoZXJyb3IgPT09IEZFTGlicmFyeS5Db25zdGFudHMuQWN0aW9uRXhlY3V0aW9uRmFpbGVkIHx8IGVycm9yID09PSBGRUxpYnJhcnkuQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZykgJiZcblx0XHRcdFx0bmV3RG9jdW1lbnRDb250ZXh0Py5pc1RyYW5zaWVudCgpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gVGhpcyBpcyBhIHdvcmthcm91bmQgc3VnZ2VzdGVkIGJ5IG1vZGVsIGFzIENvbnRleHQuZGVsZXRlIHJlc3VsdHMgaW4gYW4gZXJyb3Jcblx0XHRcdFx0Ly8gVE9ETzogcmVtb3ZlIHRoZSAkZGlyZWN0IG9uY2UgbW9kZWwgcmVzb2x2ZXMgdGhpcyBpc3N1ZVxuXHRcdFx0XHQvLyB0aGlzIGxpbmUgc2hvd3MgdGhlIGV4cGVjdGVkIGNvbnNvbGUgZXJyb3IgVW5jYXVnaHQgKGluIHByb21pc2UpIEVycm9yOiBSZXF1ZXN0IGNhbmNlbGVkOiBQT1NUIFRyYXZlbDsgZ3JvdXA6IHN1Ym1pdExhdGVyXG5cdFx0XHRcdG5ld0RvY3VtZW50Q29udGV4dC5kZWxldGUoXCIkZGlyZWN0XCIpO1xuXHRcdFx0fVxuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmICghaW5QYXJhbWV0ZXJzPy5pbmFjdGl2ZSkge1xuXHRcdFx0XHR0aGlzLmJ1c3lVbmxvY2soYXBwQ29tcG9uZW50LCBidXN5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRCdXN5UGF0aChtUGFyYW1ldGVyczogQ3JlYXRlUGFyYW1ldGVycyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIG1QYXJhbWV0ZXJzLmJ1c3lNb2RlID09PSBcIkxvY2FsXCIgPyBgL2J1c3lMb2NhbC8ke21QYXJhbWV0ZXJzLmJ1c3lJZH1gIDogXCIvYnVzeVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSBtYWluTGlzdEJpbmRpbmcgT0RhdGEgVjQgTGlzdEJpbmRpbmcgb2JqZWN0LlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXNcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGF0YSBBIG1hcCBvZiBkYXRhIHRoYXQgc2hvdWxkIGJlIHNlbnQgd2l0aGluIHRoZSBQT1NUXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmJ1c3lNb2RlIEdsb2JhbCAoZGVmYXVsdCksIExvY2FsLCBOb25lXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmJ1c3lJZCBJRCBvZiB0aGUgbG9jYWwgYnVzeSBpbmRpY2F0b3Jcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMua2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZCBJZiBzZXQsIHRoZSBjb250ZXh0IHN0YXlzIGluIHRoZSBsaXN0IGlmIHRoZSBQT1NUIGZhaWxlZCBhbmQgUE9TVCB3aWxsIGJlIHJlcGVhdGVkIHdpdGggdGhlIG5leHQgY2hhbmdlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2xcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuaW5hY3RpdmUgSWYgc2V0LCB0aGUgY29udGV4dCBpcyBzZXQgYXMgaW5hY3RpdmUgZm9yIGVtcHR5IHJvd3Ncblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYmVmb3JlQ3JlYXRlQ2FsbEJhY2sgQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgY3JlYXRpb25cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZyBTa2lwcyB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2dcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuY3JlYXRlQXRFbmQgQ3JlYXRlIHRoZSBjb250ZXh0IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKGlnbm9yZWQgaW4gY2FzZSBvZiBhIGhpZXJhcmNoeSkuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmNyZWF0ZUluYWN0aXZlIENyZWF0ZSB0aGUgY29udGV4dCBhcyBpbmFjdGl2ZSAoaWdub3JlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGFyZW50Q29udGV4dCBDcmVhdGUgdGhlIGNvbnRleHQgYXMgYSBjaGlsZCBvZiB0aGlzIGNvbnRleHQgKG9ubHkgdXNlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIG5ldyBiaW5kaW5nIGNvbnRleHRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlRG9jdW1lbnRDb250ZXh0KG1haW5MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZywgcGFyYW1ldGVyczogQ3JlYXRlUGFyYW1ldGVycyk6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+IHtcblx0XHRpZiAocGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjaykge1xuXHRcdFx0Ly9iZWZvcmVDcmVhdGVDYWxsQmFjayBleHBlY3RzIGNyZWF0ZVBhcmFtZXRlcnMgb2YgdHlwZSBhbnlbXVxuXHRcdFx0Y29uc3QgY3JlYXRlUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuZGF0YSA/IE9iamVjdC5lbnRyaWVzKHBhcmFtZXRlcnMuZGF0YSkubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7IFtrZXldOiB2YWx1ZSB9KSkgOiBbXTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRvRVM2UHJvbWlzZShcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLmJlZm9yZUNyZWF0ZUNhbGxCYWNrKHtcblx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBtYWluTGlzdEJpbmRpbmcgJiYgbWFpbkxpc3RCaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdGNyZWF0ZVBhcmFtZXRlcnM6IGNyZWF0ZVBhcmFtZXRlcnNcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdHRocm93IEZFTGlicmFyeS5Db25zdGFudHMuT25CZWZvcmVDcmVhdGVGYWlsZWQ7XG5cdFx0XHR9XG5cdFx0XHRwYXJhbWV0ZXJzLmRhdGEgPSBjcmVhdGVQYXJhbWV0ZXJzLnJlZHVjZSgocmVzdWx0LCBjdXJyZW50T2JqZWN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiB7IC4uLnJlc3VsdCwgLi4uY3VycmVudE9iamVjdCB9O1xuXHRcdFx0fSwge30pO1xuXHRcdH1cblx0XHRjb25zdCBjcmVhdGVQcm9taXNlID0gdGhpcy5jcmVhdGVDb250ZXh0KG1haW5MaXN0QmluZGluZywgcGFyYW1ldGVycy5kYXRhLCB7XG5cdFx0XHRjcmVhdGVBdEVuZDogISFwYXJhbWV0ZXJzLmNyZWF0ZUF0RW5kLFxuXHRcdFx0Y3JlYXRlSW5hY3RpdmU6ICEhcGFyYW1ldGVycy5pbmFjdGl2ZSxcblx0XHRcdHBhcmVudENvbnRleHQ6IHBhcmFtZXRlcnMucGFyZW50Q29udGV4dFxuXHRcdH0pO1xuXHRcdGlmIChtYWluTGlzdEJpbmRpbmcuZ2V0VXBkYXRlR3JvdXBJZCgpID09PSBDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpIHtcblx0XHRcdG1haW5MaXN0QmluZGluZy5nZXRNb2RlbCgpLnN1Ym1pdEJhdGNoKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCk7XG5cdFx0fVxuXHRcdHJldHVybiBjcmVhdGVQcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgZG9jdW1lbnQgZWl0aGVyIHZpYSBuZXcgQWN0aW9uIG9yIHN0YW5kYXJkIFBPU1QgY3JlYXRlLlxuXHQgKiBAcGFyYW0gbWFpbkxpc3RCaW5kaW5nIE9EYXRhIFY0IExpc3RCaW5kaW5nIG9iamVjdFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXNcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGF0YSBBIG1hcCBvZiBkYXRhIHRoYXQgc2hvdWxkIGJlIHNlbnQgd2l0aGluIHRoZSBQT1NUXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmJ1c3lNb2RlIEdsb2JhbCAoZGVmYXVsdCksIExvY2FsLCBOb25lXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmJ1c3lJZCBJRCBvZiB0aGUgbG9jYWwgYnVzeSBpbmRpY2F0b3Jcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMua2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZCBJZiBzZXQsIHRoZSBjb250ZXh0IHN0YXlzIGluIHRoZSBsaXN0IGlmIHRoZSBQT1NUIGZhaWxlZCBhbmQgUE9TVCB3aWxsIGJlIHJlcGVhdGVkIHdpdGggdGhlIG5leHQgY2hhbmdlXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2xcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuaW5hY3RpdmUgSWYgc2V0LCB0aGUgY29udGV4dCBpcyBzZXQgYXMgaW5hY3RpdmUgZm9yIGVtcHR5IHJvd3Ncblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuYmVmb3JlQ3JlYXRlQ2FsbEJhY2sgQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgY3JlYXRpb25cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZyBTa2lwcyB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2dcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuY3JlYXRlQXRFbmQgQ3JlYXRlIHRoZSBjb250ZXh0IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKGlnbm9yZWQgaW4gY2FzZSBvZiBhIGhpZXJhcmNoeSkuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmNyZWF0ZUluYWN0aXZlIENyZWF0ZSB0aGUgY29udGV4dCBhcyBpbmFjdGl2ZSAoaWdub3JlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMucGFyZW50Q29udGV4dCBDcmVhdGUgdGhlIGNvbnRleHQgYXMgYSBjaGlsZCBvZiB0aGlzIGNvbnRleHQgKG9ubHkgdXNlZCBpbiBjYXNlIG9mIGEgaGllcmFyY2h5KS5cblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwIGNvbXBvbmVudFxuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXIgVGhlIG1lc3NhZ2UgaGFuZGxlciBleHRlbnNpb25cblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWxcblx0ICogQHBhcmFtIGZyb21Db3B5UGFzdGUgVHJ1ZSBpZiB0aGUgY3JlYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIGJ5IGEgcGFzdGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCBuZXcgYmluZGluZyBjb250ZXh0XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHBlcmZvcm1DcmVhdGlvbihcblx0XHRtYWluTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUGFyYW1ldGVycyxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRmcm9tQ29weVBhc3RlOiBib29sZWFuXG5cdCk6IFByb21pc2U8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtYWluTGlzdEJpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChtYWluTGlzdEJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpIS5nZXRQYXRoKCkpO1xuXHRcdGNvbnN0IGNyZWF0ZUhhc2ggPSBhcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5nZXRIYXNoKCk7XG5cdFx0Y29uc3QgY29tcG9uZW50RGF0YSA9IGFwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0Y29uc3Qgc3RhcnR1cFBhcmFtZXRlcnMgPSBjb21wb25lbnREYXRhPy5zdGFydHVwUGFyYW1ldGVycyA/PyB7fTtcblx0XHRjb25zdCBuZXdBY3Rpb24gPSAhbWFpbkxpc3RCaW5kaW5nLmlzUmVsYXRpdmUoKVxuXHRcdFx0PyB0aGlzLl9nZXROZXdBY3Rpb24oc3RhcnR1cFBhcmFtZXRlcnMsIGNyZWF0ZUhhc2gsIG1ldGFNb2RlbCwgbWV0YVBhdGgpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmIChuZXdBY3Rpb24pIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucGVyZm9ybUNyZWF0aW9uV2l0aEFjdGlvbihcblx0XHRcdFx0bmV3QWN0aW9uLFxuXHRcdFx0XHRtYWluTGlzdEJpbmRpbmcsXG5cdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSB7XG5cdFx0XHRcdHRocm93IHJlc3VsdC5yZWFzb247XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0LnZhbHVlLnJldHVybmVkQ29udGV4dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMucGVyZm9ybUNyZWF0aW9uV2l0aFBPU1QobWFpbkxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzLCBhcHBDb21wb25lbnQsIHJlc291cmNlTW9kZWwsIG1lc3NhZ2VIYW5kbGVyLCBmcm9tQ29weVBhc3RlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGRvY3VtZW50IHdpdGggYW4gYWN0aW9uLlxuXHQgKiBAcGFyYW0gYWN0aW9uTmFtZVxuXHQgKiBAcGFyYW0gbWFpbkxpc3RCaW5kaW5nXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWxcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGNvbnRleHQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHBlcmZvcm1DcmVhdGlvbldpdGhBY3Rpb24oXG5cdFx0YWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdG1haW5MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVQYXJhbWV0ZXJzLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyXG5cdCk6IFByb21pc2U8UHJvbWlzZVNldHRsZWRSZXN1bHQ8T3BlcmF0aW9uUmVzdWx0Pj4ge1xuXHRcdGNvbnN0IGhlYWRlckNvbnRleHRQYXRoID0gbWFpbkxpc3RCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKSEuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1haW5MaXN0QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKGhlYWRlckNvbnRleHRQYXRoKTtcblx0XHRjb25zdCBtZXNzYWdlc1BhdGggPSBNb2RlbEhlbHBlci5nZXRNZXNzYWdlc1BhdGgobWV0YU1vZGVsLCBtZXRhUGF0aCk7XG5cdFx0Y29uc3QgYmluZGluZ1BhcmFtZXRlcnM6IEJpbmRDb250ZXh0UGFyYW1ldGVycyA9IHsgJCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0czogdHJ1ZSwgJCR1cGRhdGVHcm91cElkOiBcIiRhdXRvXCIgfTtcblxuXHRcdGNvbnN0IHNlbGVjdGVkUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0XHRpZiAobWVzc2FnZXNQYXRoKSB7XG5cdFx0XHRzZWxlY3RlZFByb3BlcnRpZXMucHVzaChtZXNzYWdlc1BhdGgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG1haW5MaXN0QmluZGluZykgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQpIHtcblx0XHRcdHNlbGVjdGVkUHJvcGVydGllcy5wdXNoKFwiSXNBY3RpdmVFbnRpdHlcIiwgXCJIYXNEcmFmdEVudGl0eVwiLCBcIkhhc0FjdGl2ZUVudGl0eVwiKTsgLy8gTmVlZGVkIGZvciBvdXIgaW50ZXJuYWwgbG9naWMgKGUuZy4gbmF2aWdhdGlvbilcblx0XHR9XG5cdFx0aWYgKHNlbGVjdGVkUHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRiaW5kaW5nUGFyYW1ldGVyc1tcIiRzZWxlY3RcIl0gPSBzZWxlY3RlZFByb3BlcnRpZXMuam9pbihcIixcIik7XG5cdFx0fVxuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2FsbEFjdGlvbihcblx0XHRcdGFjdGlvbk5hbWUsXG5cdFx0XHR7XG5cdFx0XHRcdGNvbnRleHRzOiBtYWluTGlzdEJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpLFxuXHRcdFx0XHRzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nOiB0cnVlLFxuXHRcdFx0XHRsYWJlbDogdGhpcy5fZ2V0U3BlY2lmaWNDcmVhdGVBY3Rpb25EaWFsb2dMYWJlbChtZXRhTW9kZWwsIG1ldGFQYXRoLCBhY3Rpb25OYW1lLCByZXNvdXJjZU1vZGVsKSxcblx0XHRcdFx0YmluZGluZ1BhcmFtZXRlcnM6IGJpbmRpbmdQYXJhbWV0ZXJzLFxuXHRcdFx0XHR2aWV3OiBwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wsXG5cdFx0XHRcdGlzQ3JlYXRlQWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nOiBwYXJhbWV0ZXJzLnNraXBQYXJhbWV0ZXJEaWFsb2dcblx0XHRcdH0sXG5cdFx0XHRhcHBDb21wb25lbnQsXG5cdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdCk7XG5cdFx0cmV0dXJuIHJlc3VsdFswXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgZG9jdWVtbnQgd2l0aCBhIHN0YW5kYXJkIFBPU1QgcmVxdWVzdC5cblx0ICogQHBhcmFtIG1haW5MaXN0QmluZGluZ1xuXHQgKiBAcGFyYW0gcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50XG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlclxuXHQgKiBAcGFyYW0gZnJvbUNvcHlQYXN0ZVxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb250ZXh0LlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBwZXJmb3JtQ3JlYXRpb25XaXRoUE9TVChcblx0XHRtYWluTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUGFyYW1ldGVycyxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRmcm9tQ29weVBhc3RlOiBib29sZWFuXG5cdCk6IFByb21pc2U8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0bGV0IG5ld0RvY3VtZW50Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBpbml0aWFsRGF0YSA9IHBhcmFtZXRlcnMuZGF0YTtcblx0XHRcdGlmICghZnJvbUNvcHlQYXN0ZSkge1xuXHRcdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVGdW5jdGlvbkRhdGEgPSBhd2FpdCB0aGlzLmdldERhdGFGcm9tRGVmYXVsdFZhbHVlRnVuY3Rpb24obWFpbkxpc3RCaW5kaW5nKTtcblx0XHRcdFx0cGFyYW1ldGVycy5kYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFZhbHVlRnVuY3Rpb25EYXRhLCBwYXJhbWV0ZXJzLmRhdGEpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtZXRlcnMuZGF0YSkge1xuXHRcdFx0XHRkZWxldGUgcGFyYW1ldGVycy5kYXRhW1wiQG9kYXRhLmNvbnRleHRcIl07XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNhbkhhdmVEaWFsb2cgPSBwYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93ICYmIHBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRcdFx0Y29uc3QgY3JlYXRpb25EaWFsb2dGaWVsZHMgPSBjYW5IYXZlRGlhbG9nID8gdGhpcy5nZXRDcmVhdGlvblBhcmFtZXRlcnMobWFpbkxpc3RCaW5kaW5nLCBpbml0aWFsRGF0YSwgYXBwQ29tcG9uZW50KSA6IFtdO1xuXHRcdFx0aWYgKHBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2cpIHtcblx0XHRcdFx0cGFyYW1ldGVycy5jcmVhdGlvbkRpYWxvZ0ZpZWxkcz8uZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCFjcmVhdGlvbkRpYWxvZ0ZpZWxkcy5pbmNsdWRlcyhmaWVsZE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGlvbkRpYWxvZ0ZpZWxkcy5wdXNoKGZpZWxkTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoY3JlYXRpb25EaWFsb2dGaWVsZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0Ly8gSW4gQ3JlYXRpb25EaWFsb2cgbW9kZSwgdGhlIGRpYWxvZyBpcyBtYW5kYXRvcnlcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJObyBmaWVsZHMgYXZhaWxhYmxlIGZvciB0aGUgY3JlYXRpb24gZGlhbG9nXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjcmVhdGlvbkRpYWxvZ0ZpZWxkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG5ld0RvY3VtZW50Q29udGV4dCA9IGF3YWl0IHRoaXMuY3JlYXRlV2l0aERpYWxvZyhcblx0XHRcdFx0XHRtYWluTGlzdEJpbmRpbmcsXG5cdFx0XHRcdFx0Y3JlYXRpb25EaWFsb2dGaWVsZHMsXG5cdFx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0XHRhcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3RG9jdW1lbnRDb250ZXh0ID0gYXdhaXQgdGhpcy5jcmVhdGVEb2N1bWVudENvbnRleHQobWFpbkxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKCFwYXJhbWV0ZXJzLmluYWN0aXZlKSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy53YWl0Rm9yQ3JlYXRlQ29tcGxldGlvbihuZXdEb2N1bWVudENvbnRleHQsIHBhcmFtZXRlcnMua2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZCA9PT0gdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBuZXdEb2N1bWVudENvbnRleHQ7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1zZyA9IChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBlcnJvcjtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSBuZXcgZG9jdW1lbnRcIiwgbXNnKTtcblx0XHRcdHRocm93IG1zZztcblx0XHR9XG5cdH1cblxuXHRfaXNEcmFmdEVuYWJsZWQodkNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY29udGV4dEZvckRyYWZ0TW9kZWwgPSB2Q29udGV4dHNbMF07XG5cdFx0Y29uc3Qgc1Byb2dyYW1taW5nTW9kZWwgPSB0aGlzLmdldFByb2dyYW1taW5nTW9kZWwoY29udGV4dEZvckRyYWZ0TW9kZWwpO1xuXHRcdHJldHVybiBzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGUgb25lIG9yIG11bHRpcGxlIGRvY3VtZW50KHMpLlxuXHQgKiBAcGFyYW0gY29udGV4dHMgQ29udGV4dHMgRWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgdG8gYmUgZGVsZXRlZFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLnRpdGxlIFRpdGxlIG9mIHRoZSBvYmplY3QgdG8gYmUgZGVsZXRlZFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gb2YgdGhlIG9iamVjdCB0byBiZSBkZWxldGVkXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycy5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgTnVtYmVyIG9mIG9iamVjdHMgc2VsZWN0ZWRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLm5vRGlhbG9nIFRvIGRpc2FibGUgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2dcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwQ29tcG9uZW50XG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFRoZSByZXNvdXJjZSBtb2RlbCB0byBsb2FkIHRleHQgcmVzb3VyY2VzXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGV4dGVuc2lvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2ZWQgb25jZSB0aGUgZG9jdW1lbnRzIGFyZSBkZWxldGVkXG5cdCAqL1xuXHRhc3luYyBkZWxldGVEb2N1bWVudChcblx0XHRjb250ZXh0czogT0RhdGFWNENvbnRleHQgfCBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdG1QYXJhbWV0ZXJzOiBUcmFuc2FjdGlvbkRlbGV0ZVBhcmFtZXRlcnMsXG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gZGVsZXRlIGRvY3VtZW50IGxvY2tcblx0XHR0aGlzLmJ1c3lMb2NrKGFwcENvbXBvbmVudCk7XG5cblx0XHRjb25zdCBjb250ZXh0c1RvRGVsZXRlID0gQXJyYXkuaXNBcnJheShjb250ZXh0cykgPyBbLi4uY29udGV4dHNdIDogW2NvbnRleHRzXTtcblx0XHRjb25zdCBmaXJzdENvbnRleHQgPSAobVBhcmFtZXRlcnMuc2VsZWN0ZWRDb250ZXh0cyA/PyBjb250ZXh0c1RvRGVsZXRlKVswXTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBkcmFmdEVuYWJsZWQgPSB0aGlzLl9pc0RyYWZ0RW5hYmxlZChtUGFyYW1ldGVycy5zZWxlY3RlZENvbnRleHRzIHx8IGNvbnRleHRzVG9EZWxldGUpO1xuXHRcdFx0XHRjb25zdCBpdGVtczogQ29udHJvbFtdID0gW107XG5cdFx0XHRcdGxldCBvcHRpb25zOiBEZWxldGVPcHRpb25bXSA9IFtdO1xuXHRcdFx0XHRsZXQgdW5TYXZlZENvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIGl0ZW1zKHRleHRzKSBhbmQgb3B0aW9ucyhjaGVja0JveGVzIGFuZCBzaW5nbGUgZGVmYXVsdCBvcHRpb24pIGZvciBjb25maXJtIGRpYWxvZy5cblx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMgPSBnZXRQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lID0gdGhpcy5nZXRDb2xsZWN0aW9uTmFtZUZyb21Db250ZXh0KGZpcnN0Q29udGV4dCk7XG5cdFx0XHRcdFx0aWYgKCFtUGFyYW1ldGVycy5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdFx0XHRcdC8vIG5vbi1UYWJsZVxuXHRcdFx0XHRcdFx0aWYgKGRyYWZ0RW5hYmxlZCkge1xuXHRcdFx0XHRcdFx0XHQvLyBDaGVjayBpZiAxIG9mIHRoZSBkcmFmdHMgaXMgbG9ja2VkIGJ5IGFub3RoZXIgdXNlclxuXHRcdFx0XHRcdFx0XHRjb25zdCBsb2NrZWRDb250ZXh0ID0gY29udGV4dHNUb0RlbGV0ZS5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgY29udGV4dERhdGEgPSBjb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YS5Jc0FjdGl2ZUVudGl0eSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGEuSGFzRHJhZnRFbnRpdHkgPT09IHRydWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YS5EcmFmdEFkbWluaXN0cmF0aXZlRGF0YS5JblByb2Nlc3NCeVVzZXIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdCFjb250ZXh0RGF0YS5EcmFmdEFkbWluaXN0cmF0aXZlRGF0YS5EcmFmdElzQ3JlYXRlZEJ5TWVcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0aWYgKGxvY2tlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBTaG93IG1lc3NhZ2UgYm94IHdpdGggdGhlIG5hbWUgb2YgdGhlIGxvY2tpbmcgdXNlciBhbmQgcmV0dXJuXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbG9ja2luZ1VzZXJOYW1lID0gbG9ja2VkQ29udGV4dC5nZXRPYmplY3QoKS5EcmFmdEFkbWluaXN0cmF0aXZlRGF0YS5JblByb2Nlc3NCeVVzZXI7XG5cdFx0XHRcdFx0XHRcdFx0TWVzc2FnZUJveC5zaG93KFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9TSU5HTEVfT0JKRUNUX0xPQ0tFRFwiLCBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxvY2tpbmdVc2VyTmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0XSksXG5cdFx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ERUxFVEVcIiksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xvc2U6IHJlamVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHVuU2F2ZWRDb250ZXh0ID0gY29udGV4dHNUb0RlbGV0ZS5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB7IElzQWN0aXZlRW50aXR5LCBIYXNEcmFmdEVudGl0eSwgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEgfSA9IGNvbnRleHQuZ2V0T2JqZWN0KCkgfHwge307XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gSXNBY3RpdmVFbnRpdHkgPT09IHRydWUgJiYgSGFzRHJhZnRFbnRpdHkgPT09IHRydWUgJiYgISFEcmFmdEFkbWluaXN0cmF0aXZlRGF0YT8uSW5Qcm9jZXNzQnlVc2VyO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRsZXQgbm9uVGFibGVUeHQgPSBcIlwiO1xuXHRcdFx0XHRcdFx0aWYgKHVuU2F2ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHVuU2F2ZWRDb250ZXh0VXNlciA9IHVuU2F2ZWRDb250ZXh0LmdldE9iamVjdCgpLkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLkluUHJvY2Vzc0J5VXNlcjtcblx0XHRcdFx0XHRcdFx0bm9uVGFibGVUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9DT05GSVJNX0RFTEVURV9XSVRIX1VOU0FWRURfQ0hBTkdFU1wiLFxuXHRcdFx0XHRcdFx0XHRcdFt1blNhdmVkQ29udGV4dFVzZXJdLFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAobVBhcmFtZXRlcnMudGl0bGUpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9uVGFibGVUeHQgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX0NPTkZJUk1fREVMRVRFX1dJVEhfT0JKRUNUSU5GT1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0W21QYXJhbWV0ZXJzLnRpdGxlLCBtUGFyYW1ldGVycy5kZXNjcmlwdGlvbl0sXG5cdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRub25UYWJsZVR4dCA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9PTkxZXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRbbVBhcmFtZXRlcnMudGl0bGVdLFxuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG5vblRhYmxlVHh0ID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfQ09ORklSTV9ERUxFVEVfV0lUSF9PQkpFQ1RUSVRMRV9TSU5HVUxBUlwiLFxuXHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvcHRpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBEZWxldGVPcHRpb25UeXBlcy5kZWxldGFibGVDb250ZXh0cyxcblx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IGNvbnRleHRzVG9EZWxldGUsXG5cdFx0XHRcdFx0XHRcdHRleHQ6IG5vblRhYmxlVHh0LFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0Y29udHJvbDogRGVsZXRlRGlhbG9nQ29udGVudENvbnRyb2wuVEVYVFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFRhYmxlXG5cdFx0XHRcdFx0XHRsZXQgdG90YWxEZWxldGFibGUgPSBjb250ZXh0c1RvRGVsZXRlLmxlbmd0aDtcblxuXHRcdFx0XHRcdFx0aWYgKGRyYWZ0RW5hYmxlZCkge1xuXHRcdFx0XHRcdFx0XHR0b3RhbERlbGV0YWJsZSArPVxuXHRcdFx0XHRcdFx0XHRcdChtUGFyYW1ldGVycy5kcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlPy5sZW5ndGggPz8gMCkgK1xuXHRcdFx0XHRcdFx0XHRcdChtUGFyYW1ldGVycy5kcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlPy5sZW5ndGggPz8gMCkgK1xuXHRcdFx0XHRcdFx0XHRcdChtUGFyYW1ldGVycy51blNhdmVkQ29udGV4dHM/Lmxlbmd0aCA/PyAwKTtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlSGVscGVyLnVwZGF0ZURyYWZ0T3B0aW9uc0ZvckRlbGV0YWJsZVRleHRzKFxuXHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHRzVG9EZWxldGUsXG5cdFx0XHRcdFx0XHRcdFx0dG90YWxEZWxldGFibGUsXG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRpdGVtcyxcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBub25EZWxldGFibGVUZXh0ID0gZGVsZXRlSGVscGVyLmdldE5vbkRlbGV0YWJsZVRleHQobVBhcmFtZXRlcnMsIHRvdGFsRGVsZXRhYmxlLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdFx0XHRcdFx0aWYgKG5vbkRlbGV0YWJsZVRleHQpIHtcblx0XHRcdFx0XHRcdFx0XHRpdGVtcy5wdXNoKG5vbkRlbGV0YWJsZVRleHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbnNEZWxldGFibGVUZXh0cyA9IGRlbGV0ZUhlbHBlci5nZXRPcHRpb25zRm9yRGVsZXRhYmxlVGV4dHMoXG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0c1RvRGVsZXRlLFxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0b3B0aW9ucyA9IFsuLi5vcHRpb25zLCAuLi5vcHRpb25zRGVsZXRhYmxlVGV4dHNdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGNvbW1vbkJpbmRpbmcgPSBmaXJzdENvbnRleHQuZ2V0QmluZGluZygpIGFzIEJpbmRpbmc7XG5cdFx0XHRcdGxldCBiaW5kaW5nVHlwZTogXCJUcmVlXCIgfCBcIkFuYWx5dGljYWxcIiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGNvbW1vbkJpbmRpbmcuaXNBPE9EYXRhTGlzdEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5pc0xpc3RCaW5kaW5nSGllcmFyY2hpY2FsKGNvbW1vbkJpbmRpbmcpKSB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nVHlwZSA9IFwiVHJlZVwiO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5pc0xpc3RCaW5kaW5nQW5hbHl0aWNhbChjb21tb25CaW5kaW5nKSkge1xuXHRcdFx0XHRcdFx0YmluZGluZ1R5cGUgPSBcIkFuYWx5dGljYWxcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb250ZW50IG9mIERlbGV0ZSBEaWFsb2dcblx0XHRcdFx0ZGVsZXRlSGVscGVyLnVwZGF0ZUNvbnRlbnRGb3JEZWxldGVEaWFsb2cob3B0aW9ucywgaXRlbXMpO1xuXHRcdFx0XHRjb25zdCBmbkNvbmZpcm0gPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0dGhpcy5idXN5TG9jayhhcHBDb21wb25lbnQpO1xuXG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IGRlbGV0ZUhlbHBlci5kZWxldGVDb25maXJtSGFuZGxlcihcblx0XHRcdFx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLFxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRhcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRcdGRyYWZ0RW5hYmxlZCxcblx0XHRcdFx0XHRcdFx0YmluZGluZ1R5cGVcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0IGRpYWxvZyA9IHRoaXMuY3JlYXRlRGVsZXRlRGlhbG9nKGl0ZW1zLCBtUGFyYW1ldGVycywgcmVzb3VyY2VNb2RlbCwgZm5Db25maXJtLCByZWplY3QpO1xuXG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5ub0RpYWxvZyA9PT0gdHJ1ZSB8fCBtUGFyYW1ldGVycy5zaWxlbnRNb2RlID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Zm5Db25maXJtKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGlhbG9nLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUNvbnRlbnRQYWRkaW5nXCIpO1xuXHRcdFx0XHRcdGRpYWxvZy5vcGVuKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdC8vIGRlbGV0ZSBkb2N1bWVudCB1bmxvY2tcblx0XHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBjb25maXJtYXRpb24gZGlhbG9nIGZvIHRoZSBkZWxldGlvbi5cblx0ICogQHBhcmFtIGl0ZW1zIEFuIGFycmF5IG9mIGNvbnRyb2xzIHVzZWQgZm9yIHRoZSBkaWFsb2cgY29udGVudFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLnBhcmVudENvbnRyb2wgUGFyZW50IGNvbnRyb2wgb2YgdGhlIGRlbGV0ZSBidXR0b24gaWYgYW55XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLmVudGl0eVNldE5hbWUgTmFtZSBvZiB0aGUgY3VycmVudCBlbnRpdHlTZXRcblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWwgVGhlIHJlc291cmNlIG1vZGVsIHRvIGxvYWQgdGV4dCByZXNvdXJjZXNcblx0ICogQHBhcmFtIGZuQ29uZmlybSBGdW5jdGlvbiBleGVjdXRlZCB1cG9uIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBkZWxldGlvblxuXHQgKiBAcGFyYW0gZm5SZWplY3QgRnVuY3Rpb24gZXhlY3V0ZWQgaWYgdGhlIGRpYWxvZyBpcyBjbG9zZWQgdmlhIENhbmNlbCBvciBFc2NhcGUgYnV0dG9uXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGRlbGV0ZSBjb25maXJtYXRpb24gZGlhbG9nXG5cdCAqL1xuXHRjcmVhdGVEZWxldGVEaWFsb2coXG5cdFx0aXRlbXM6IENvbnRyb2xbXSxcblx0XHRwYXJhbWV0ZXJzOiBQYXJ0aWFsPHsgcGFyZW50Q29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZDsgZW50aXR5U2V0TmFtZTogc3RyaW5nIH0+LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0Zm5Db25maXJtOiBGdW5jdGlvbixcblx0XHRmblJlamVjdDogRnVuY3Rpb25cblx0KTogRGlhbG9nIHtcblx0XHRsZXQgZGlhbG9nQ29uZmlybWVkID0gZmFsc2U7XG5cdFx0Y29uc3QgdkJveCA9IG5ldyBWQm94KHsgaXRlbXM6IGl0ZW1zIH0pO1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlQ29yZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdFx0bGV0IHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHBhcmFtZXRlcnMucGFyZW50Q29udHJvbD8uaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0dGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX0NPTU1PTl9UQUJMRV9ERUxFVEVcIiwgdW5kZWZpbmVkLCBwYXJhbWV0ZXJzLmVudGl0eVNldE5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aXRsZSA9IHJlc291cmNlQnVuZGxlQ29yZS5nZXRUZXh0KFwiQ19DT01NT05fREVMRVRFXCIpO1xuXHRcdH1cblx0XHRjb25zdCBkaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHRpdGxlOiB0aXRsZSxcblx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdGNvbnRlbnQ6IFt2Qm94XSxcblx0XHRcdGFyaWFMYWJlbGxlZEJ5OiBpdGVtcyxcblx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogdGl0bGUsXG5cdFx0XHRcdHR5cGU6IFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdGRpYWxvZ0NvbmZpcm1lZCA9IHRydWU7XG5cdFx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0Zm5Db25maXJtKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTFwiKSxcblx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRkaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdGRpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHRcdC8vIGlmIGRpYWxvZyBpcyBjbG9zZWQgdW5jb25maXJtZWQgKGUuZy4gdmlhIFwiQ2FuY2VsXCIgb3IgRXNjYXBlIGJ1dHRvbiksIGVuc3VyZSB0byByZWplY3QgcHJvbWlzZVxuXHRcdFx0XHRpZiAoIWRpYWxvZ0NvbmZpcm1lZCkge1xuXHRcdFx0XHRcdGZuUmVqZWN0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gZGlhbG9nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVkaXRzIGEgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnRcblx0ICogQHBhcmFtIG9WaWV3IEN1cnJlbnQgdmlld1xuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHBDb21wb25lbnRcblx0ICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXIgZXh0ZW5zaW9uXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBiYXRjaCBncm91cElkIGZvciBwb3N0IGNhbGwgb2YgZWRpdCBhY3Rpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIHRoZSBuZXcgZHJhZnQgY29udGV4dCBpbiBjYXNlIG9mIGRyYWZ0IHByb2dyYW1taW5nIG1vZGVsXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgZWRpdERvY3VtZW50KFxuXHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRvVmlldzogRkVWaWV3LFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRncm91cElkOiBzdHJpbmdcblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0KTtcblx0XHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJCaW5kaW5nIGNvbnRleHQgdG8gYWN0aXZlIGRvY3VtZW50IGlzIHJlcXVpcmVkXCIpO1xuXHRcdH1cblx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQgJiYgc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFZGl0IGlzIG9ubHkgYWxsb3dlZCBmb3IgZHJhZnQgb3Igc3RpY2t5IHNlc3Npb24gc3VwcG9ydGVkIHNlcnZpY2VzXCIpO1xuXHRcdH1cblx0XHR0aGlzLmJ1c3lMb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0Ly8gYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGVkaXQgYWN0aW9uIHdlJ2xsIGhhdmUgdG8gcmVtb3ZlIGFsbCBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzXG5cdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0Y29uc3QgbWVzc2FnZUhhbmRsaW5nS2V5ID0gbWVzc2FnZUhhbmRsZXIucmVnaXN0ZXJUb0hvbGRNZXNzYWdlcygpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG9OZXdDb250ZXh0ID1cblx0XHRcdFx0c1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnRcblx0XHRcdFx0XHQ/IGF3YWl0IGRyYWZ0LmNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50KFxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0YlByZXNlcnZlQ2hhbmdlczogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRvVmlldzogb1ZpZXdcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0Z3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXJcblx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHQ6IGF3YWl0IHN0aWNreS5lZGl0RG9jdW1lbnRJblN0aWNreVNlc3Npb24ob0NvbnRleHQsIGFwcENvbXBvbmVudCwgbWVzc2FnZUhhbmRsZXIpO1xuXG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7IHVuSG9sZEtleTogbWVzc2FnZUhhbmRsaW5nS2V5IH0pO1xuXHRcdFx0cmV0dXJuIG9OZXdDb250ZXh0O1xuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHsgY29uY3VycmVudEVkaXRGbGFnOiB0cnVlLCB1bkhvbGRLZXk6IG1lc3NhZ2VIYW5kbGluZ0tleSB9KTtcblx0XHRcdHRocm93IGVycjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbmNlbCAnZWRpdCcgbW9kZSBvZiBhIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgY2FuY2VsZWQgb3IgZGVsZXRlZFxuXHQgKiBAcGFyYW0gW21JblBhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBtSW5QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiBDYW5jZWwgQnV0dG9uIG9mIHRoZSBkaXNjYXJkIHBvcG92ZXIgKG1hbmRhdG9yeSBmb3Igbm93KVxuXHQgKiBAcGFyYW0gbUluUGFyYW1ldGVycy5za2lwRGlzY2FyZFBvcG92ZXIgT3B0aW9uYWwsIHN1cHJlc3NlcyB0aGUgZGlzY2FyZCBwb3BvdmVyIGluY2FzZSBvZiBkcmFmdCBhcHBsaWNhdGlvbnMgd2hpbGUgbmF2aWdhdGluZyBvdXQgb2YgT1Bcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwQ29tcG9uZW50XG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFRoZSBtb2RlbCB0byBsb2FkIHRleHQgcmVzb3VyY2VzXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGV4dGVuc2lvblxuXHQgKiBAcGFyYW0gaXNOZXdPYmplY3QgVHJ1ZSBpZiB3ZSdyZSB0cnlpbmcgdG8gY2FuY2VsIGEgbmV3bHkgY3JlYXRlZCBvYmplY3Rcblx0ICogQHBhcmFtIGlzT2JqZWN0TW9kaWZpZWQgVHJ1ZSBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIG1vZGlmaWVkIGJ5IHRoZSB1c2VyXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCA/Pz9cblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyBjYW5jZWxEb2N1bWVudChcblx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0bUluUGFyYW1ldGVyczogQ2FuY2VsUGFyYW1ldGVycyB8IHVuZGVmaW5lZCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRpc05ld09iamVjdDogYm9vbGVhbixcblx0XHRpc09iamVjdE1vZGlmaWVkOiBib29sZWFuXG5cdCk6IFByb21pc2U8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+IHtcblx0XHQvL2NvbnRleHQgbXVzdCBhbHdheXMgYmUgcGFzc2VkIC0gbWFuZGF0b3J5IHBhcmFtZXRlclxuXHRcdGlmICghb0NvbnRleHQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnRleHQgZXhpc3RzLiBQYXNzIGEgbWVhbmluZ2Z1bCBjb250ZXh0XCIpO1xuXHRcdH1cblx0XHRjb25zdCBtUGFyYW1ldGVycyA9IGdldFBhcmFtZXRlcnMobUluUGFyYW1ldGVycyk7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBzUHJvZ3JhbW1pbmdNb2RlbCA9IHRoaXMuZ2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dCk7XG5cblx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQgJiYgc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuU3RpY2t5KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5jZWwgZG9jdW1lbnQgb25seSBhbGxvd2VkIGZvciBkcmFmdCBvciBzdGlja3kgc2Vzc2lvbiBzdXBwb3J0ZWQgc2VydmljZXNcIik7XG5cdFx0fVxuXHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50KTtcblx0XHR0cnkge1xuXHRcdFx0bGV0IHJldHVybmVkVmFsdWU6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQgJiYgIWlzT2JqZWN0TW9kaWZpZWQpIHtcblx0XHRcdFx0Y29uc3QgZHJhZnREYXRhQ29udGV4dCA9IG9Nb2RlbC5iaW5kQ29udGV4dChgJHtvQ29udGV4dC5nZXRQYXRoKCl9L0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhYCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IGRyYWZ0QWRtaW5EYXRhID0gYXdhaXQgZHJhZnREYXRhQ29udGV4dC5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHRcdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdFx0XHRcdGlzT2JqZWN0TW9kaWZpZWQgPSBkcmFmdEFkbWluRGF0YS5DcmVhdGlvbkRhdGVUaW1lICE9PSBkcmFmdEFkbWluRGF0YS5MYXN0Q2hhbmdlRGF0ZVRpbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghbVBhcmFtZXRlcnMuc2tpcERpc2NhcmRQb3BvdmVyKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuX2NvbmZpcm1EaXNjYXJkKG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiwgaXNPYmplY3RNb2RpZmllZCwgcmVzb3VyY2VNb2RlbCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0NvbnRleHQuaXNLZWVwQWxpdmUoKSkge1xuXHRcdFx0XHQvLyBpZiB0aGUgY29udGV4dCBpcyBrZXB0IGFsaXZlIHdlIHNldCBpdCBhZ2FpbiB0byBkZXRhY2ggdGhlIG9uQmVmb3JlRGVzdHJveSBjYWxsYmFjayBhbmQgaGFuZGxlIG5hdmlnYXRpb24gaGVyZVxuXHRcdFx0XHQvLyB0aGUgY29udGV4dCBuZWVkcyB0byBzdGlsbCBiZSBrZXB0IGFsaXZlIHRvIGJlIGFibGUgdG8gcmVzZXQgY2hhbmdlcyBwcm9wZXJseVxuXHRcdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUodHJ1ZSwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHRcdGlmIChtUGFyYW1ldGVycy5iZWZvcmVDYW5jZWxDYWxsQmFjaykge1xuXHRcdFx0XHRhd2FpdCBtUGFyYW1ldGVycy5iZWZvcmVDYW5jZWxDYWxsQmFjayh7IGNvbnRleHQ6IG9Db250ZXh0IH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0KSB7XG5cdFx0XHRcdGlmIChpc05ld09iamVjdCkge1xuXHRcdFx0XHRcdGlmIChvQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGF3YWl0IGRyYWZ0LmRlbGV0ZURyYWZ0KG9Db250ZXh0LCBtZXNzYWdlSGFuZGxlciwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBvU2libGluZ0NvbnRleHQgPSBvTW9kZWwuYmluZENvbnRleHQoYCR7b0NvbnRleHQuZ2V0UGF0aCgpfS9TaWJsaW5nRW50aXR5YCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IHNDYW5vbmljYWxQYXRoID0gYXdhaXQgb1NpYmxpbmdDb250ZXh0LnJlcXVlc3RDYW5vbmljYWxQYXRoKCk7XG5cdFx0XHRcdFx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm5lZFZhbHVlID0gb01vZGVsLmJpbmRDb250ZXh0KHNDYW5vbmljYWxQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdFx0YXdhaXQgZHJhZnQuZGVsZXRlRHJhZnQob0NvbnRleHQsIG1lc3NhZ2VIYW5kbGVyLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZGlzY2FyZGVkQ29udGV4dCA9IGF3YWl0IHN0aWNreS5kaXNjYXJkRG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0XHRpZiAoZGlzY2FyZGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGlmIChkaXNjYXJkZWRDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0XHRcdGRpc2NhcmRlZENvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIWlzTmV3T2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRkaXNjYXJkZWRDb250ZXh0LnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdHJldHVybmVkVmFsdWUgPSBkaXNjYXJkZWRDb250ZXh0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyByZW1vdmUgZXhpc3RpbmcgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlc1xuXHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHQvLyBzaG93IHVuYm91bmQgbWVzc2FnZXNcblx0XHRcdGF3YWl0IG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcygpO1xuXHRcdFx0cmV0dXJuIHJldHVybmVkVmFsdWU7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoKTtcblx0XHRcdHRocm93IGVycjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgc2F2ZWRcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgYXBwQ29tcG9uZW50XG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFRoZSBtb2RlbCB0byBsb2FkIHRleHQgcmVzb3VyY2VzXG5cdCAqIEBwYXJhbSBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIFRydWUgaWYgd2Ugc2hvdWxkIGV4ZWN1dGUgc2lkZSBlZmZlY3RzIGluIGNhc2Ugb2YgYW4gZXJyb3Jcblx0ICogQHBhcmFtIGJpbmRpbmdzRm9yU2lkZUVmZmVjdHMgVGhlIGxpc3RCaW5kaW5ncyB0byBiZSB1c2VkIGZvciBleGVjdXRpbmcgc2lkZSBlZmZlY3RzIG9uIGVycm9yXG5cdCAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyIGV4dGVuc2lvblxuXHQgKiBAcGFyYW0gaXNOZXdPYmplY3QgVHJ1ZSBpZiB3ZSdyZSB0cnlpbmcgdG8gY2FuY2VsIGEgbmV3bHkgY3JlYXRlZCBvYmplY3Rcblx0ICogQHBhcmFtIHNraXBDb25maXJtYXRpb25Nc2dcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoID8/P1xuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIHNhdmVEb2N1bWVudChcblx0XHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRcdGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3I6IGJvb2xlYW4sXG5cdFx0YmluZGluZ3NGb3JTaWRlRWZmZWN0czogT0RhdGFMaXN0QmluZGluZ1tdLFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRpc05ld09iamVjdDogYm9vbGVhbixcblx0XHRza2lwQ29uZmlybWF0aW9uTXNnID0gZmFsc2Vcblx0KTogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD4ge1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKGNvbnRleHQpO1xuXHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCAhPT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kgJiYgc1Byb2dyYW1taW5nTW9kZWwgIT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlNhdmUgaXMgb25seSBhbGxvd2VkIGZvciBkcmFmdCBvciBzdGlja3kgc2Vzc2lvbiBzdXBwb3J0ZWQgc2VydmljZXNcIik7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdGNvbnN0IGVudGl0eVNldE5hbWUgPSB0aGlzLmdldENvbGxlY3Rpb25OYW1lRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBvQWN0aXZlRG9jdW1lbnQgPVxuXHRcdFx0XHRzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdFxuXHRcdFx0XHRcdD8gYXdhaXQgZHJhZnQuYWN0aXZhdGVEb2N1bWVudChjb250ZXh0LCBhcHBDb21wb25lbnQsIHt9LCBtZXNzYWdlSGFuZGxlcilcblx0XHRcdFx0XHQ6IGF3YWl0IHN0aWNreS5hY3RpdmF0ZURvY3VtZW50KGNvbnRleHQsIGFwcENvbXBvbmVudCwgbWVzc2FnZUhhbmRsZXIpO1xuXG5cdFx0XHRjb25zdCBtZXNzYWdlc1JlY2VpdmVkID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKCkuY29uY2F0KG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7IC8vIGdldCB1bmJvdW5kIGFuZCBib3VuZCBtZXNzYWdlcyBwcmVzZW50IGluIHRoZSBtb2RlbFxuXHRcdFx0aWYgKCFza2lwQ29uZmlybWF0aW9uTXNnICYmICEobWVzc2FnZXNSZWNlaXZlZC5sZW5ndGggPT09IDEgJiYgbWVzc2FnZXNSZWNlaXZlZFswXS5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpKSB7XG5cdFx0XHRcdC8vIHNob3cgb3VyIG9iamVjdCBjcmVhdGlvbiB0b2FzdCBvbmx5IGlmIGl0IGlzIG5vdCBjb21pbmcgZnJvbSBiYWNrZW5kXG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KFxuXHRcdFx0XHRcdGlzTmV3T2JqZWN0XG5cdFx0XHRcdFx0XHQ/IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX09CSkVDVF9DUkVBVEVEXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSlcblx0XHRcdFx0XHRcdDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfT0JKRUNUX1NBVkVEXCIsIHVuZGVmaW5lZCwgZW50aXR5U2V0TmFtZSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9BY3RpdmVEb2N1bWVudDtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGlmIChleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yICYmIGJpbmRpbmdzRm9yU2lkZUVmZmVjdHM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0LyogVGhlIHNpZGVFZmZlY3RzIGFyZSBleGVjdXRlZCBvbmx5IGZvciB0YWJsZSBpdGVtcyBpbiB0cmFuc2llbnQgc3RhdGUgKi9cblx0XHRcdFx0YmluZGluZ3NGb3JTaWRlRWZmZWN0cy5mb3JFYWNoKChsaXN0QmluZGluZykgPT4ge1xuXHRcdFx0XHRcdGlmICghQ29tbW9uVXRpbHMuaGFzVHJhbnNpZW50Q29udGV4dChsaXN0QmluZGluZykpIHtcblx0XHRcdFx0XHRcdGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkobGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBjb250ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgbWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKCk7XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuYnVzeVVubG9jayhhcHBDb21wb25lbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxscyBhIGJvdW5kIG9yIHVuYm91bmQgYWN0aW9uLlxuXHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlc10gQSBtYXAgb2YgYWN0aW9uIHBhcmFtZXRlciBuYW1lcyBhbmQgcHJvdmlkZWQgdmFsdWVzXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZ10gU2tpcHMgdGhlIHBhcmFtZXRlciBkaWFsb2cgaWYgdmFsdWVzIGFyZSBwcm92aWRlZCBmb3IgYWxsIG9mIHRoZW1cblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbjogRWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgdG8gYmUgY2FsbGVkXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb246IEFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nXSBNb2RlIGhvdyBhY3Rpb25zIGFyZSB0byBiZSBjYWxsZWQ6ICdDaGFuZ2VTZXQnIHRvIHB1dCBhbGwgYWN0aW9uIGNhbGxzIGludG8gb25lIGNoYW5nZXNldCwgJ0lzb2xhdGVkJyB0byBwdXQgdGhlbSBpbnRvIHNlcGFyYXRlIGNoYW5nZXNldHNcblx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuYmluZGluZ1BhcmFtZXRlcnNcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2dcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmVudGl0eVNldE5hbWVcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLnZpZXdcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmNvbnRyb2xJZFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuaXNDcmVhdGVBY3Rpb25cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcFxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmdyb3VwSWRcblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvblxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuaWdub3JlRVRhZyBJZiBzcGVjaWZpZWQsIHRoZSBhY3Rpb24gaXMgY2FsbGVkIHdpdGhvdXQgRVRhZyBoYW5kbGluZ1xuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMuZmVGcmFtZXdvcmtDYWxsXG5cdCAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIGFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gbWVzc2FnZUhhbmRsZXIgVGhlIG1lc3NhZ2UgaGFuZGxlciBleHRlbnNpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHJlc3BvbnNlIG9iamVjdHMgKFRPRE86IHRvIGJlIGNoYW5nZWQpXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgY2FsbEFjdGlvbihcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRiaW5kaW5nUGFyYW1ldGVycz86IEJpbmRDb250ZXh0UGFyYW1ldGVycztcblx0XHRcdHBhcmFtZXRlclZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG5cdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdHNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W10gfCBudWxsO1xuXHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0dmlldzogVmlldztcblx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdGlzQ3JlYXRlQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0PzogSW50ZXJuYWxNb2RlbENvbnRleHQgfCBudWxsO1xuXHRcdFx0Z3JvdXBJZD86IHN0cmluZztcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdGlnbm9yZUVUYWc/OiBib29sZWFuO1xuXHRcdFx0ZmVGcmFtZXdvcmtDYWxsPzogYm9vbGVhbjtcblx0XHR9LFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlclxuXHQpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdG1QYXJhbWV0ZXJzID0gZ2V0UGFyYW1ldGVycyhtUGFyYW1ldGVycyk7XG5cdFx0bGV0IGNvbnRleHRUb1Byb2Nlc3M7XG5cdFx0bGV0IG9Nb2RlbDogT0RhdGFNb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIXNBY3Rpb25OYW1lKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQcm92aWRlIG5hbWUgb2YgYWN0aW9uIHRvIGJlIGV4ZWN1dGVkXCIpO1xuXHRcdH1cblx0XHQvLyBhY3Rpb24gaW1wb3J0cyBhcmUgbm90IGRpcmVjdGx5IG9idGFpbmVkIGZyb20gdGhlIG1ldGFNb2RlbCBieSBpdCBpcyBwcmVzZW50IGluc2lkZSB0aGUgZW50aXR5Q29udGFpbmVyXG5cdFx0Ly8gYW5kIHRoZSBhY2lvbnMgaXQgcmVmZXJzIHRvIHByZXNlbnQgb3V0c2lkZSB0aGUgZW50aXR5Y29udGFpbmVyLCBoZW5jZSB0byBvYnRhaW4ga2luZCBvZiB0aGUgYWN0aW9uXG5cdFx0Ly8gc3BsaXQoKSBvbiBpdHMgbmFtZSB3YXMgcmVxdWlyZWRcblx0XHRjb25zdCBzTmFtZSA9IHNBY3Rpb25OYW1lLnNwbGl0KFwiL1wiKVsxXTtcblxuXHRcdGNvbnRleHRUb1Byb2Nlc3MgPSBzTmFtZSA/IHVuZGVmaW5lZCA6IG1QYXJhbWV0ZXJzLmNvbnRleHRzO1xuXHRcdC8vY2hlY2tpbmcgd2hldGhlciB0aGUgY29udGV4dCBpcyBhbiBhcnJheSB3aXRoIG1vcmUgdGhhbiAwIGxlbmd0aCBvciBub3QgYW4gYXJyYXkoY3JlYXRlIGFjdGlvbilcblx0XHRpZiAoY29udGV4dFRvUHJvY2VzcyAmJiAoKEFycmF5LmlzQXJyYXkoY29udGV4dFRvUHJvY2VzcykgJiYgY29udGV4dFRvUHJvY2Vzcy5sZW5ndGgpIHx8ICFBcnJheS5pc0FycmF5KGNvbnRleHRUb1Byb2Nlc3MpKSkge1xuXHRcdFx0Y29udGV4dFRvUHJvY2VzcyA9IEFycmF5LmlzQXJyYXkoY29udGV4dFRvUHJvY2VzcykgPyBjb250ZXh0VG9Qcm9jZXNzWzBdIDogY29udGV4dFRvUHJvY2Vzcztcblx0XHRcdG9Nb2RlbCA9IGNvbnRleHRUb1Byb2Nlc3MuZ2V0TW9kZWwoKTtcblx0XHR9XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLm1vZGVsKSB7XG5cdFx0XHRvTW9kZWwgPSBtUGFyYW1ldGVycy5tb2RlbDtcblx0XHR9XG5cdFx0aWYgKCFvTW9kZWwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlBhc3MgYSBjb250ZXh0IGZvciBhIGJvdW5kIGFjdGlvbiBvciBwYXNzIHRoZSBtb2RlbCBmb3IgYW4gdW5ib3VuZCBhY3Rpb25cIik7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb250cm9sID0gKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCA/IG1QYXJhbWV0ZXJzLnZpZXcuYnlJZChtUGFyYW1ldGVycy5jb250cm9sSWQpIDogbVBhcmFtZXRlcnMudmlldykgYXNcblx0XHRcdFx0fCBDb250cm9sXG5cdFx0XHRcdHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IG9SZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXTtcblx0XHRcdGlmIChjb250ZXh0VG9Qcm9jZXNzICYmIG1QYXJhbWV0ZXJzLmNvbnRleHRzKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRzID0gQXJyYXkuaXNBcnJheShtUGFyYW1ldGVycy5jb250ZXh0cykgPyBtUGFyYW1ldGVycy5jb250ZXh0cyA6IFttUGFyYW1ldGVycy5jb250ZXh0c107IC8vIEVuc3VyZSB0aGF0IGNvbnRleHRzIGlzIGFuIGFycmF5IChmb3Igc3RhdGljIGFjdGlvbnMgaXQncyBub3QgYW4gd2UgbmVlZCB0byBmaXggaXQpXG5cblx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdGFjdGlvblBhdGggPSBgJHttZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dHNbMF0uZ2V0UGF0aCgpKX0vJHtzQWN0aW9uTmFtZX1gLFxuXHRcdFx0XHRcdGJvdW5kQWN0aW9uID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke2FjdGlvblBhdGh9L0AkdWk1Lm92ZXJsb2FkLzBgKSE7XG5cblx0XHRcdFx0Y29uc3QgY29udmVydGVkVHlwZXMgPSBjb252ZXJ0VHlwZXMob01vZGVsLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdFx0Y29uc3QgY29udmVydGVkQWN0aW9uID0gY29udmVydGVkVHlwZXMucmVzb2x2ZVBhdGg8RWRtQWN0aW9uIHwgdW5kZWZpbmVkPihib3VuZEFjdGlvbi5nZXRQYXRoKCkpLnRhcmdldDtcblx0XHRcdFx0aWYgKCFjb252ZXJ0ZWRBY3Rpb24pIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGJvdW5kIGFjdGlvblwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvUmVzdWx0ID0gYXdhaXQgbmV3IE9wZXJhdGlvbihhcHBDb21wb25lbnQsIG9Nb2RlbCwgY29udmVydGVkQWN0aW9uLCB7XG5cdFx0XHRcdFx0cGFyYW1ldGVyVmFsdWVzOiBtUGFyYW1ldGVycy5wYXJhbWV0ZXJWYWx1ZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXT5bXSxcblx0XHRcdFx0XHRjb250ZXh0cyxcblx0XHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyxcblx0XHRcdFx0XHRsYWJlbDogbVBhcmFtZXRlcnMubGFiZWwsXG5cdFx0XHRcdFx0c2tpcFBhcmFtZXRlckRpYWxvZzogbVBhcmFtZXRlcnMuc2tpcFBhcmFtZXRlckRpYWxvZyxcblx0XHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyczogbVBhcmFtZXRlcnMuYmluZGluZ1BhcmFtZXRlcnMsXG5cdFx0XHRcdFx0ZW50aXR5U2V0TmFtZTogbVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0XHRvRGF0YVByb3BlcnRpZXM6IHtcblx0XHRcdFx0XHRcdGdob3N0Q29udGV4dEJpbmRpbmdQcm90ZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRcdFx0ZW5oYW5jZSRzZWxlY3Q6IG1QYXJhbWV0ZXJzLmZlRnJhbWV3b3JrQ2FsbCA9PT0gdHJ1ZSxcblx0XHRcdFx0XHRcdGdyb3VwSWQ6IG1QYXJhbWV0ZXJzLmdyb3VwSWQsXG5cdFx0XHRcdFx0XHRpZ25vcmVFVGFnOiBtUGFyYW1ldGVycy5pZ25vcmVFVGFnXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvRGF0YUV2ZW50czoge1xuXHRcdFx0XHRcdFx0b25PRGF0YVN1Ym1pdDogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcj8ucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvbk9EYXRhUmVzcG9uc2U6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b25SZXF1ZXN0U2lkZUVmZmVjdHM6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVBY3Rpb25FbmFibGVtZW50T25PcGVyYXRpb24oe1xuXHRcdFx0XHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0OiBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCxcblx0XHRcdFx0XHRcdFx0XHRjb250cm9sOiBjb250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlZEFjdGlvblxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHZpZXc6IG1QYXJhbWV0ZXJzLnZpZXcgYXMgRkVWaWV3LFxuXHRcdFx0XHRcdGlzQ3JlYXRlQWN0aW9uOiBtUGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbixcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlcjogbWVzc2FnZUhhbmRsZXIsXG5cdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0fSkuZXhlY3V0ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1Jlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbnMuY2FsbEFjdGlvbkltcG9ydChzQWN0aW9uTmFtZSwgb01vZGVsLCBhcHBDb21wb25lbnQsIHtcblx0XHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM6IG1QYXJhbWV0ZXJzLnBhcmFtZXRlclZhbHVlcyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPltdLFxuXHRcdFx0XHRcdGxhYmVsOiBtUGFyYW1ldGVycy5sYWJlbCxcblx0XHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nOiBtUGFyYW1ldGVycy5za2lwUGFyYW1ldGVyRGlhbG9nLFxuXHRcdFx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzOiBtUGFyYW1ldGVycy5iaW5kaW5nUGFyYW1ldGVycyxcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lOiBtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRcdG9EYXRhRXZlbnRzOiB7XG5cdFx0XHRcdFx0XHRvbk9EYXRhU3VibWl0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuYnVzeUxvY2soYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvbk9EYXRhUmVzcG9uc2U6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5idXN5VW5sb2NrKGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvRGF0YVByb3BlcnRpZXM6IHtcblx0XHRcdFx0XHRcdGlnbm9yZUVUYWc6IG1QYXJhbWV0ZXJzLmlnbm9yZUVUYWdcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyOiBtZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0XHR2aWV3OiBtUGFyYW1ldGVycy52aWV3IGFzIEZFVmlld1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0XHRcdHRoaXMuX2hhbmRsZUFjdGlvblJlc3BvbnNlKG1QYXJhbWV0ZXJzLCBzQWN0aW9uTmFtZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb1Jlc3VsdDtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGlmIChtZXNzYWdlSGFuZGxlcikge1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVBY3Rpb25SZXNwb25zZShtUGFyYW1ldGVycywgc0FjdGlvbk5hbWUpO1xuXHRcdFx0fVxuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjb2xsZWN0aW9uIG5hbWUgZnJvbSB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbGxlY3Rpb24gbmFtZVxuXHQgKi9cblx0Z2V0Q29sbGVjdGlvbk5hbWVGcm9tQ29udGV4dChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YUNvbnRleHQoY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdHJldHVybiAoTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCkudGFyZ2V0T2JqZWN0IGFzIEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IHVuZGVmaW5lZClcblx0XHRcdD8ubmFtZTtcblx0fVxuXG5cdGhhbmRsZUFjdGlvbkVuYWJsZW1lbnRPbk9wZXJhdGlvbihwYXJhbWV0ZXJzOiB7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/OiBJbnRlcm5hbE1vZGVsQ29udGV4dCB8IG51bGw7XG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nO1xuXHRcdGNvbnRyb2w/OiBDb250cm9sO1xuXHRcdGNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRjb252ZXJ0ZWRBY3Rpb246IEVkbUFjdGlvbjtcblx0fSk6IHZvaWQge1xuXHRcdGlmIChwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ICYmIHBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0XHRsZXQgc2VsZWN0ZWRDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSA9IFtdO1xuXHRcdFx0Ly9jaGVjayBmb3Igc2tpcHBpbmcgc3RhdGljIGFjdGlvbnNcblx0XHRcdGlmICghYWN0aW9uSGVscGVyLmlzU3RhdGljQWN0aW9uKHBhcmFtZXRlcnMuY29udmVydGVkQWN0aW9uKSkge1xuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzID0gcGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIikgfHwgW107XG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdEpTT04ucGFyc2UocGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHBhcmFtZXRlcnMuY29udHJvbCkge1xuXHRcdFx0XHRpZiAocGFyYW1ldGVycy5jb250cm9sLmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0c2VsZWN0ZWRDb250ZXh0cyA9IHBhcmFtZXRlcnMuY29udHJvbC5nZXRTZWxlY3RlZENvbnRleHRzKCkgYXMgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0SlNPTi5wYXJzZShwYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly91cGRhdGUgZGVsZXRlIGJ1dHRvblxuXHRcdFx0ZGVsZXRlSGVscGVyLnVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzKHBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdH1cblx0fVxuXG5cdF9oYW5kbGVBY3Rpb25SZXNwb25zZShcblx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD86IEludGVybmFsTW9kZWxDb250ZXh0IHwgbnVsbDtcblx0XHR9LFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmdcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgYVRyYW5zaWVudE1lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpO1xuXHRcdGlmIChhVHJhbnNpZW50TWVzc2FnZXMubGVuZ3RoID4gMCAmJiBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzQWN0aW9uTmFtZVwiLCBtUGFyYW1ldGVycy5sYWJlbCA/IG1QYXJhbWV0ZXJzLmxhYmVsIDogc0FjdGlvbk5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHZhbGlkYXRpb24gZXJyb3JzIGZvciB0aGUgJ0Rpc2NhcmQnIGFjdGlvbi5cblx0ICogQGZpbmFsXG5cdCAqL1xuXHRoYW5kbGVWYWxpZGF0aW9uRXJyb3IoKTogdm9pZCB7XG5cdFx0Y29uc3QgZXJyb3JUb1JlbW92ZSA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZpbHRlcigoZXJyb3I6IE1lc3NhZ2UpID0+IGVycm9yLnZhbGlkYXRpb24pOyAvLyBvbmx5IG5lZWRzIHRvIGhhbmRsZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLCB0ZWNobmljYWwgYW5kIHBlcnNpc3RlbnQgZXJyb3JzIG5lZWRzIG5vdCB0byBiZSBjaGVja2VkIGhlcmUuXG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGVycm9yVG9SZW1vdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgUG9wb3Zlci4gRmFjdG9yeSBtZXRob2QgdG8gbWFrZSB1bml0IHRlc3RzIGVhc2llci5cblx0ICogQHBhcmFtIHNldHRpbmdzIEluaXRpYWwgcGFyYW1ldGVycyBmb3IgdGhlIHBvcG92ZXJcblx0ICogQHJldHVybnMgQSBuZXcgUG9wb3ZlclxuXHQgKi9cblx0X2NyZWF0ZVBvcG92ZXIoc2V0dGluZ3M/OiAkUG9wb3ZlclNldHRpbmdzKTogUG9wb3ZlciB7XG5cdFx0cmV0dXJuIG5ldyBQb3BvdmVyKHNldHRpbmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIHBvcG92ZXIgdG8gY29uZmlybSBkaXNjYXJkIGlmIG5lZWRlZC5cblx0ICogQHBhcmFtIGNhbmNlbEJ1dHRvbiBUaGUgY29udHJvbCB3aGljaCB3aWxsIG9wZW4gdGhlIHBvcG92ZXJcblx0ICogQHBhcmFtIGlzTW9kaWZpZWQgVHJ1ZSBpZiB0aGUgb2JqZWN0IGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBhIGNvbmZpcm1hdGlvbiBwb3BvdmVyIG11c3QgYmUgc2hvd25cblx0ICogQHBhcmFtIHJlc291cmNlTW9kZWwgVGhlIG1vZGVsIHRvIGxvYWQgdGV4dCByZXNvdXJjZXNcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlcyBpZiB1c2VyIGNvbmZpcm1zIGRpc2NhcmQsIHJlamVjdHMgaWYgb3RoZXJ3aXNlLCByZWplY3RzIGlmIG5vIGNvbnRyb2wgcGFzc2VkIHRvIG9wZW4gcG9wb3ZlclxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIF9jb25maXJtRGlzY2FyZChjYW5jZWxCdXR0b246IEJ1dHRvbiwgaXNNb2RpZmllZDogYm9vbGVhbiwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIElmIHRoZSBkYXRhIGlzbid0IG1vZGlmaWVkLCBkbyBub3Qgc2hvdyBhbnkgY29uZmlybWF0aW9uIHBvcG92ZXJcblx0XHRpZiAoIWlzTW9kaWZpZWQpIHtcblx0XHRcdHRoaXMuaGFuZGxlVmFsaWRhdGlvbkVycm9yKCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0Y2FuY2VsQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCBjb25maXJtYXRpb25Qb3BvdmVyID0gdGhpcy5fY3JlYXRlUG9wb3Zlcih7XG5cdFx0XHRcdHNob3dIZWFkZXI6IGZhbHNlLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IFwiVG9wXCJcblx0XHRcdH0pO1xuXHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBjb250ZW50IG9mIHRoZSBwb3BvdmVyXG5cdFx0XHRjb25zdCB0aXRsZSA9IG5ldyBUZXh0KHtcblx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfRFJBRlRfRElTQ0FSRF9NRVNTQUdFXCIpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGNvbmZpcm1CdXR0b24gPSBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfRFJBRlRfRElTQ0FSRF9CVVRUT05cIiksXG5cdFx0XHRcdHdpZHRoOiBcIjEwMCVcIixcblx0XHRcdFx0cHJlc3M6ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVZhbGlkYXRpb25FcnJvcigpO1xuXHRcdFx0XHRcdGNvbmZpcm1hdGlvblBvcG92ZXIuZGF0YShcImNvbnRpbnVlRGlzY2FyZFwiLCB0cnVlKTtcblx0XHRcdFx0XHRjb25maXJtYXRpb25Qb3BvdmVyLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5hZGRDb250ZW50KG5ldyBWQm94KHsgaXRlbXM6IFt0aXRsZSwgY29uZmlybUJ1dHRvbl0gfSkpO1xuXG5cdFx0XHQvLyBBdHRhY2ggaGFuZGxlclxuXHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5hdHRhY2hCZWZvcmVPcGVuKCgpID0+IHtcblx0XHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5zZXRJbml0aWFsRm9jdXMoY29uZmlybUJ1dHRvbik7XG5cdFx0XHR9KTtcblx0XHRcdGNvbmZpcm1hdGlvblBvcG92ZXIuYXR0YWNoQWZ0ZXJDbG9zZSgoKSA9PiB7XG5cdFx0XHRcdGNhbmNlbEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpO1xuXHRcdFx0XHRpZiAoY29uZmlybWF0aW9uUG9wb3Zlci5kYXRhKFwiY29udGludWVEaXNjYXJkXCIpKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uZmlybWF0aW9uUG9wb3Zlci5vcGVuQnkoY2FuY2VsQnV0dG9uLCBmYWxzZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVsb2FkcyBkYXRhIGZvciBhbiBPRGF0YUxpc3RCaW5kaW5nLlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgVGhlIGxpc3RiaW5kaW5nIHRvIHJlZnJlc2hcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudFxuXHQgKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBwcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZWZyZXNoTGlzdEJpbmRpbmcobGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChsaXN0QmluZGluZy5pc1Jvb3QoKSkge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xpc3RCaW5kaW5nSGllcmFyY2hpY2FsKGxpc3RCaW5kaW5nKSkge1xuXHRcdFx0XHRcdC8vIFdlIHVzZSBhIHNpZGUtZWZmZWN0IHJlZnJlc2ggZm9yIGEgVHJlZVRhYmxlLCB0byBwcmVzZXJ2ZSBleHBhbnNpb24gc3RhdGVzXG5cdFx0XHRcdFx0YXdhaXQgYXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IFwiXCIgfV0sIGxpc3RCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKSEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGF3YWl0IGxpc3RCaW5kaW5nLnJlcXVlc3RSZWZyZXNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGF3YWl0IGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGxpc3RCaW5kaW5nLmdldFBhdGgoKSB9XSwgbGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGBFcnJvciB3aGlsZSByZWZyZXNoaW5nIGxpc3QgYmluZGluZyAke2xpc3RCaW5kaW5nLmdldFBhdGgoKX1gLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIGNyZWF0ZVdpdGhEaWFsb2coXG5cdFx0bGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0ZmllbGROYW1lczogc3RyaW5nW10sXG5cdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0cGFyZW50Q29udHJvbD86IENvbnRyb2w7XG5cdFx0XHRkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRiSXNDcmVhdGVEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0YmVmb3JlQ3JlYXRlQ2FsbEJhY2s/OiBGdW5jdGlvbjtcblx0XHRcdGFmdGVyQ3JlYXRlQ2FsbEJhY2s/OiAobmV3RG9jdW1lbnRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4gUHJvbWlzZTx2b2lkPjtcblx0XHRcdGNyZWF0ZUF0RW5kPzogYm9vbGVhbjtcblx0XHRcdGluYWN0aXZlPzogYm9vbGVhbjtcblx0XHRcdHBhcmVudENvbnRleHQ/OiBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQ/OiBib29sZWFuO1xuXHRcdFx0Y3JlYXRlQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdGNyZWF0aW9uTW9kZT86IHN0cmluZztcblx0XHR9LFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwsXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyXG5cdCk6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+IHtcblx0XHRjb25zdCBtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBsaXN0TWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgobGlzdEJpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCkhKTtcblxuXHRcdC8vIENyZWF0ZSBhIGZha2UgKHRyYW5zaWVudCkgbGlzdEJpbmRpbmcgYW5kIGNvbnRleHQsIGp1c3QgZm9yIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIGRpYWxvZ1xuXHRcdGNvbnN0IHRyYW5zaWVudExpc3RCaW5kaW5nID0gbW9kZWwuYmluZExpc3QobGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBsaXN0QmluZGluZy5nZXRDb250ZXh0KCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG5cdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwic3VibWl0TGF0ZXJcIlxuXHRcdH0pO1xuXHRcdHRyYW5zaWVudExpc3RCaW5kaW5nLnJlZnJlc2hJbnRlcm5hbCA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdC8qICovXG5cdFx0fTtcblx0XHRjb25zdCB0cmFuc2llbnRDb250ZXh0ID0gdHJhbnNpZW50TGlzdEJpbmRpbmcuY3JlYXRlKHBhcmFtZXRlcnMuZGF0YSwgdHJ1ZSk7XG5cdFx0Y29uc3QgZmllbGRNZXRhQ29udGV4dHMgPSBmaWVsZE5hbWVzLm1hcCgobmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtsaXN0TWV0YVBhdGh9LyR7bmFtZX1gKSBhcyBDb250ZXh0O1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgY3JlYXRlRGlhbG9nID0gZ2V0Q29yZVVJRmFjdG9yeSgpLm5ld0NyZWF0ZURpYWxvZyhcblx0XHRcdHRyYW5zaWVudENvbnRleHQsXG5cdFx0XHRmaWVsZE5hbWVzLFxuXHRcdFx0YXBwQ29tcG9uZW50LFxuXHRcdFx0cGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZyA/IFwiU3RhbmRhbG9uZVwiIDogXCJXaXRoTmF2aWdhdGlvblwiLFxuXHRcdFx0cGFyYW1ldGVycy5wYXJlbnRDb250cm9sXG5cdFx0KTtcblxuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMoXG5cdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0ZmllbGRNZXRhQ29udGV4dHMsXG5cdFx0XHRcdHRyYW5zaWVudENvbnRleHQsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRwYXJhbWV0ZXJzLmNyZWF0ZUFjdGlvbixcblx0XHRcdFx0cGFyYW1ldGVycy5kYXRhXG5cdFx0XHQpO1xuXHRcdFx0Y3JlYXRlRGlhbG9nLm9wZW5EaWFsb2coKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoKTtcblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0UHJvbWlzZUtlZXBlciA9IG5ldyBQcm9taXNlS2VlcGVyPE9EYXRhVjRDb250ZXh0PigpO1xuXG5cdFx0Y29uc3Qgb25FeGl0RGlhbG9nID0gYXN5bmMgKGV2ZW50OiBFeGl0RGlhbG9nRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdGlmICghZXZlbnQuZ2V0UGFyYW1ldGVyKFwiYWNjZXB0XCIpKSB7XG5cdFx0XHRcdC8vIFVzZXIgaGFzIGNhbmNlbGxlZCBjcmVhdGlvbjogZGVzdHJveSB0aGUgdHJhbnNpZW50IGxpc3QgYmluZGluZyBhbmQgY2xvc2UgdGhlIGRpYWxvZ1xuXHRcdFx0XHR0cmFuc2llbnRMaXN0QmluZGluZy5kZXN0cm95KCk7XG5cdFx0XHRcdGNyZWF0ZURpYWxvZy5jbG9zZURpYWxvZygpO1xuXHRcdFx0XHRyZXN1bHRQcm9taXNlS2VlcGVyLnJlamVjdChGRUxpYnJhcnkuQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y3JlYXRlRGlhbG9nLnNldEJ1c3kodHJ1ZSk7XG5cdFx0XHRwYXJhbWV0ZXJzLmJJc0NyZWF0ZURpYWxvZyA9IHRydWU7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCB0cmFuc2llbnREYXRhID0gdHJhbnNpZW50Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IGNyZWF0ZURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdE9iamVjdC5rZXlzKHRyYW5zaWVudERhdGEpLmZvckVhY2goKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IG1ldGFNb2RlbC5nZXRPYmplY3QoYCR7bGlzdE1ldGFQYXRofS8ke3Byb3BlcnR5UGF0aH1gKTtcblx0XHRcdFx0XHQvLyBFbnN1cmUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFyZSBub3QgcGFydCBvZiB0aGUgcGF5bG9hZCwgYXMgZGVlcCBjcmVhdGUgbm90IHN1cHBvcnRlZFxuXHRcdFx0XHRcdC8vIEFuZCByZW1vdmUgYW55IHByb3BlcnR5IHN0YXJ0aW5nIGJ5IEAkdWk1IGFzIHRoZXkgYXJlIG5vdCBwcm9wZXJ0eSBjcmVhdGVkIGJ5IGZpbGxpbmcgdGhlIGZvcm1cblx0XHRcdFx0XHRpZiAob1Byb3BlcnR5ICYmIG9Qcm9wZXJ0eS4ka2luZCAhPT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiAhcHJvcGVydHlQYXRoPy5zdGFydHNXaXRoKFwiQCR1aTVcIikpIHtcblx0XHRcdFx0XHRcdGNyZWF0ZURhdGFbcHJvcGVydHlQYXRoXSA9IHRyYW5zaWVudERhdGFbcHJvcGVydHlQYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChwYXJhbWV0ZXJzLmJlZm9yZUNyZWF0ZUNhbGxCYWNrKSB7XG5cdFx0XHRcdFx0Ly9iZWZvcmVDcmVhdGVDYWxsQmFjayBleHBlY3RzIGNyZWF0ZVBhcmFtZXRlcnMgb2YgdHlwZSBhbnlbXVxuXHRcdFx0XHRcdGNvbnN0IGNyZWF0ZURhdGFBc0FycmF5ID0gT2JqZWN0LmVudHJpZXMoY3JlYXRlRGF0YSkubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7IFtrZXldOiB2YWx1ZSB9KSk7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IHRvRVM2UHJvbWlzZShcblx0XHRcdFx0XHRcdFx0cGFyYW1ldGVycy5iZWZvcmVDcmVhdGVDYWxsQmFjayh7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IGxpc3RCaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGVQYXJhbWV0ZXJzOiBjcmVhdGVEYXRhQXNBcnJheVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIG5ldyBkb2N1bWVudFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0dGhyb3cgRkVMaWJyYXJ5LkNvbnN0YW50cy5PbkJlZm9yZUNyZWF0ZUZhaWxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y3JlYXRlRGF0YSA9IGNyZWF0ZURhdGFBc0FycmF5LnJlZHVjZSgocmVzdWx0LCBjdXJyZW50T2JqZWN0KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4geyAuLi5yZXN1bHQsIC4uLmN1cnJlbnRPYmplY3QgfTtcblx0XHRcdFx0XHR9LCB7fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKGNyZWF0ZURhdGEpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG5ld0NvbnRleHQgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbnRleHQobGlzdEJpbmRpbmcsIGNyZWF0ZURhdGEsIHtcblx0XHRcdFx0XHRjcmVhdGVBdEVuZDogcGFyYW1ldGVycy5jcmVhdGVBdEVuZCxcblx0XHRcdFx0XHRjcmVhdGVJbmFjdGl2ZTogcGFyYW1ldGVycy5pbmFjdGl2ZSxcblx0XHRcdFx0XHRwYXJlbnRDb250ZXh0OiBwYXJhbWV0ZXJzLnBhcmVudENvbnRleHRcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Y29uc3QgY3JlYXRpb25TdWNjZXNzID0gYXdhaXQgdGhpcy53YWl0Rm9yQ3JlYXRlQ29tcGxldGlvbihuZXdDb250ZXh0LCBwYXJhbWV0ZXJzLmtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQgPT09IHRydWUpO1xuXHRcdFx0XHRpZiAoY3JlYXRpb25TdWNjZXNzKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IHBhcmFtZXRlcnMuYWZ0ZXJDcmVhdGVDYWxsQmFjaz8uKG5ld0NvbnRleHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVEaWFsb2cuZGlzcGxheUVycm9yTWVzc2FnZXMoTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKSk7XG5cdFx0XHRcdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZyh7IHNob3dCb3VuZFN0YXRlTWVzc2FnZXM6IHRydWUgfSk7XG5cblx0XHRcdFx0XHRcdC8vIERlbGV0ZSB0aGUgY3JlYXRlZCBkb2N1bWVudCBhbmQgcmVmcmVzaCBpdHMgbGlzdCBiaW5kaW5nIChvdGhlcndpc2UgdGhlIGNyZWF0ZWQgZG9jdW1lbnQgaXMgc3RpbGwgdmlzaWJsZSBpbiB0aGUgbGlzdClcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuZGVsZXRlRG9jdW1lbnQobmV3Q29udGV4dCwgeyBzaWxlbnRNb2RlOiB0cnVlIH0sIGFwcENvbXBvbmVudCwgcmVzb3VyY2VNb2RlbCwgbWVzc2FnZUhhbmRsZXIpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5yZWZyZXNoTGlzdEJpbmRpbmcobGlzdEJpbmRpbmcsIGFwcENvbXBvbmVudCk7XG5cblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNyZWF0aW5nL3NhdmluZyB0aGUgbmV3IGRvY3VtZW50XCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0XHR0aHJvdyBGRUxpYnJhcnkuQ29uc3RhbnRzLkNyZWF0aW9uRmFpbGVkO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRyYW5zaWVudExpc3RCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRjcmVhdGVEaWFsb2cuY2xvc2VEaWFsb2coKTtcblx0XHRcdFx0XHRyZXN1bHRQcm9taXNlS2VlcGVyLnJlc29sdmUobmV3Q29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdC8vIGluIGNhc2Ugb2YgY3JlYXRpb24gZmFpbGVkLCBkaWFsb2cgc2hvdWxkIHN0YXkgb3BlbiAtIHRvIGFjaGlldmUgdGhlIHNhbWUsIG5vdGhpbmcgaGFzIHRvIGJlIGRvbmUgKGxpa2UgaW4gY2FzZSBvZiBzdWNjZXNzIHdpdGggYktlZXBEaWFsb2dPcGVuKVxuXHRcdFx0XHRpZiAoIVtGRUxpYnJhcnkuQ29uc3RhbnRzLk9uQmVmb3JlQ3JlYXRlRmFpbGVkLCBGRUxpYnJhcnkuQ29uc3RhbnRzLkNyZWF0aW9uRmFpbGVkXS5pbmNsdWRlcyhlcnJvcikpIHtcblx0XHRcdFx0XHQvLyBvdGhlciBlcnJvcnMgYXJlIG5vdCBleHBlY3RlZFxuXHRcdFx0XHRcdHRyYW5zaWVudExpc3RCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRjcmVhdGVEaWFsb2cuY2xvc2VEaWFsb2coKTtcblx0XHRcdFx0XHRyZXN1bHRQcm9taXNlS2VlcGVyLnJlamVjdChlcnJvciBhcyBzdHJpbmcgfCBFcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGNyZWF0ZURpYWxvZy5zZXRCdXN5KGZhbHNlKTtcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VzKHsgaXNPcGVyYXRpb25EaWFsb2dPcGVuOiBjcmVhdGVEaWFsb2cuaXNPcGVuKCkgfSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNyZWF0ZURpYWxvZy5hdHRhY2hFeGl0RGlhbG9nKHt9LCBvbkV4aXREaWFsb2cpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdFByb21pc2VLZWVwZXIucHJvbWlzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXYWl0cyBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgY29udGV4dCB0byBiZSBmaW5pc2hlZC5cblx0ICogQHBhcmFtIG5ld0NvbnRleHQgVGhlIGNvbnRleHQgYmVpbmcgY3JlYXRlZFxuXHQgKiBAcGFyYW0ga2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bFxuXHQgKi9cblx0YXN5bmMgd2FpdEZvckNyZWF0ZUNvbXBsZXRpb24obmV3Q29udGV4dDogT0RhdGFWNENvbnRleHQsIGtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRjb25zdCBwcm9taXNlS2VlcGVyID0gbmV3IFByb21pc2VLZWVwZXI8Ym9vbGVhbj4oKTtcblx0XHRjb25zdCBwYXJlbnRMaXN0QmluZGluZyA9IG5ld0NvbnRleHQuZ2V0QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cblx0XHRjb25zdCBvbkNyZWF0ZUNvbXBsZXRlZCA9IChldmVudDogT0RhdGFMaXN0QmluZGluZyRDcmVhdGVDb21wbGV0ZWRFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgY3JlYXRlZENvbnRleHQgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJjb250ZXh0XCIpO1xuXHRcdFx0Y29uc3Qgc3VjY2VzcyA9IGV2ZW50LmdldFBhcmFtZXRlcihcInN1Y2Nlc3NcIik7XG5cdFx0XHRpZiAoY3JlYXRlZENvbnRleHQgPT09IG5ld0NvbnRleHQpIHtcblx0XHRcdFx0cGFyZW50TGlzdEJpbmRpbmcuZGV0YWNoQ3JlYXRlQ29tcGxldGVkKG9uQ3JlYXRlQ29tcGxldGVkKTtcblx0XHRcdFx0cHJvbWlzZUtlZXBlci5yZXNvbHZlKHN1Y2Nlc3MgPT09IHRydWUpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRwYXJlbnRMaXN0QmluZGluZy5hdHRhY2hDcmVhdGVDb21wbGV0ZWQob25DcmVhdGVDb21wbGV0ZWQpO1xuXG5cdFx0Y29uc3QgY3JlYXRpb25TdWNjZXNzZnVsID0gYXdhaXQgcHJvbWlzZUtlZXBlci5wcm9taXNlO1xuXHRcdGlmICghY3JlYXRpb25TdWNjZXNzZnVsKSB7XG5cdFx0XHRpZiAoIWtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQpIHtcblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBwZW5kaW5nIFBPU1QgYW5kIGRlbGV0ZSB0aGUgY29udGV4dCBpbiB0aGUgbGlzdEJpbmRpbmdcblx0XHRcdFx0KG5ld0NvbnRleHQuY3JlYXRlZCgpID8/IFByb21pc2UucmVzb2x2ZSgpKS5jYXRjaChmdW5jdGlvbiAoY29udGV4dEVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLnRyYWNlKFwidHJhbnNpZW50IGNyZWF0aW9uIGNvbnRleHQgZGVsZXRpb24gZXJyb3JcIiwgY29udGV4dEVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRwYXJlbnRMaXN0QmluZGluZy5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0cGFyZW50TGlzdEJpbmRpbmcuZ2V0TW9kZWwoKS5yZXNldENoYW5nZXMocGFyZW50TGlzdEJpbmRpbmcuZ2V0VXBkYXRlR3JvdXBJZCgpKTtcblx0XHRcdFx0dGhyb3cgRkVMaWJyYXJ5LkNvbnN0YW50cy5DcmVhdGlvbkZhaWxlZDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXdhaXQgbmV3Q29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBuYW1lIG9mIHRoZSBOZXdBY3Rpb24gdG8gYmUgZXhlY3V0ZWQuXG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgU3RhcnR1cCBwYXJhbWV0ZXJzIG9mIHRoZSBhcHBsaWNhdGlvblxuXHQgKiBAcGFyYW0gW29TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlXVxuXHQgKiBAcGFyYW0gc0NyZWF0ZUhhc2ggSGFzaCB0byBiZSBjaGVja2VkIGZvciBhY3Rpb24gdHlwZVxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgTWV0YU1vZGVsIHVzZWQgdG8gY2hlY2sgZm9yIE5ld0FjdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHNNZXRhUGF0aCBUaGUgTWV0YVBhdGhcblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9nZXROZXdBY3Rpb24oXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiB7XG5cdFx0XHRwcmVmZXJyZWRNb2RlPzogc3RyaW5nW107XG5cdFx0fSxcblx0XHRzQ3JlYXRlSGFzaDogc3RyaW5nLFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdHNNZXRhUGF0aDogc3RyaW5nXG5cdCk6IHN0cmluZyB7XG5cdFx0bGV0IHNOZXdBY3Rpb247XG5cblx0XHRpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzICYmIG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlICYmIHNDcmVhdGVIYXNoLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJJLUFDVElPTj1DUkVBVEVXSVRIXCIpKSB7XG5cdFx0XHRjb25zdCBzUHJlZmVycmVkTW9kZSA9IG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdO1xuXHRcdFx0c05ld0FjdGlvbiA9IHNQcmVmZXJyZWRNb2RlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJDUkVBVEVXSVRIOlwiKVxuXHRcdFx0XHQ/IHNQcmVmZXJyZWRNb2RlLnN1YnN0cmluZyhzUHJlZmVycmVkTW9kZS5sYXN0SW5kZXhPZihcIjpcIikgKyAxKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzICYmXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZSAmJlxuXHRcdFx0c0NyZWF0ZUhhc2gudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkktQUNUSU9OPUFVVE9DUkVBVEVXSVRIXCIpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBzUHJlZmVycmVkTW9kZSA9IG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdO1xuXHRcdFx0c05ld0FjdGlvbiA9IHNQcmVmZXJyZWRNb2RlLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJBVVRPQ1JFQVRFV0lUSDpcIilcblx0XHRcdFx0PyBzUHJlZmVycmVkTW9kZS5zdWJzdHJpbmcoc1ByZWZlcnJlZE1vZGUubGFzdEluZGV4T2YoXCI6XCIpICsgMSlcblx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNOZXdBY3Rpb24gPVxuXHRcdFx0XHRvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0T2JqZWN0ICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHQ/IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkL05ld0FjdGlvbmApIHx8XG5cdFx0XHRcdFx0ICBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvTmV3QWN0aW9uYClcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHNOZXdBY3Rpb247XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBsYWJlbCBmb3IgdGhlIHRpdGxlIG9mIGEgc3BlY2lmaWMgY3JlYXRlIGFjdGlvbiBkaWFsb2csIGUuZy4gQ3JlYXRlIFNhbGVzIE9yZGVyIGZyb20gUXVvdGF0aW9uLlxuXHQgKlxuXHQgKiBUaGUgZm9sbG93aW5nIHByaW9yaXR5IGlzIGFwcGxpZWQ6XG5cdCAqIDEuIGxhYmVsIG9mIGxpbmUtaXRlbSBhbm5vdGF0aW9uLlxuXHQgKiAyLiBsYWJlbCBhbm5vdGF0ZWQgaW4gdGhlIGFjdGlvbi5cblx0ICogMy4gXCJDcmVhdGVcIiBhcyBhIGNvbnN0YW50IGZyb20gaTE4bi5cblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIE1ldGFNb2RlbCB1c2VkIHRvIGNoZWNrIGZvciB0aGUgTmV3QWN0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gc01ldGFQYXRoIFRoZSBNZXRhUGF0aFxuXHQgKiBAcGFyYW0gc05ld0FjdGlvbiBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFJlc291cmNlQnVuZGxlIHRvIGFjY2VzcyB0aGUgZGVmYXVsdCBDcmVhdGUgbGFiZWxcblx0ICogQHJldHVybnMgVGhlIGxhYmVsIGZvciB0aGUgQ3JlYXRlIEFjdGlvbiBEaWFsb2dcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfZ2V0U3BlY2lmaWNDcmVhdGVBY3Rpb25EaWFsb2dMYWJlbChcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZCxcblx0XHRzTWV0YVBhdGg6IHN0cmluZyxcblx0XHRzTmV3QWN0aW9uOiBzdHJpbmcsXG5cdFx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCB8IHVuZGVmaW5lZFxuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGxpbmVJdGVtcyA9IG9NZXRhTW9kZWw/LmdldE9iamVjdChgJHtzTWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbWApIGFzIExpbmVJdGVtIHwgdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgbGFiZWwgPSBsaW5lSXRlbXM/LmZpbmQoKGxpbmVJdGVtKSA9PiBpc0RhdGFGaWVsZEZvckFjdGlvbihsaW5lSXRlbSkgJiYgbGluZUl0ZW0uQWN0aW9uLnNwbGl0KFwiKFwiLCAxKVswXSA9PT0gc05ld0FjdGlvbilcblx0XHRcdD8uTGFiZWw7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0bGFiZWwgfHxcblx0XHRcdG9NZXRhTW9kZWw/LmdldE9iamVjdChgJHtzTWV0YVBhdGh9LyR7c05ld0FjdGlvbn1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsYCkgfHxcblx0XHRcdHJlc291cmNlTW9kZWw/LmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9TQVBGRV9BQ1RJT05fQ1JFQVRFXCIpXG5cdFx0KTtcblx0fVxufVxuXG5jb25zdCBzaW5nbGV0b24gPSBuZXcgVHJhbnNhY3Rpb25IZWxwZXIoKTtcbmV4cG9ydCBkZWZhdWx0IHNpbmdsZXRvbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0VBMkRBLE1BQU1BLFlBQVksR0FBR0MsU0FBUyxDQUFDRCxZQUFZO0VBQzNDLE1BQU1FLGdCQUFnQixHQUFHRCxTQUFTLENBQUNDLGdCQUFnQjs7RUFFbkQ7RUFDQSxNQUFNQyxpQkFBaUIsR0FBR0MsWUFBWSxDQUFDRCxpQkFBaUI7RUFDeEQsTUFBTUUsMEJBQTBCLEdBQUdELFlBQVksQ0FBQ0MsMEJBQTBCOztFQUUxRTtFQUNBLFNBQVNDLGFBQWFBLENBQUlDLFdBQXVCLEVBQUs7SUFDckQsSUFBSUEsV0FBVyxJQUFLQSxXQUFXLENBQVdDLFdBQVcsSUFBS0QsV0FBVyxDQUFXQyxXQUFXLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxLQUFLLG1CQUFtQixFQUFFO01BQ2hJRixXQUFXLEdBQUcsQ0FBQyxDQUFNO0lBQ3RCO0lBQ0EsT0FBUUEsV0FBVyxJQUFXLENBQUMsQ0FBTztFQUN2QztFQUFDLElBeUJLRyxpQkFBaUI7SUFBQSxTQUFBQSxrQkFBQTtJQUFBLElBQUFDLE1BQUEsR0FBQUQsaUJBQUEsQ0FBQUUsU0FBQTtJQUFBRCxNQUFBLENBQ3RCRSxRQUFRLEdBQVIsU0FBQUEsUUFBUUEsQ0FBQ0MsWUFBMEIsRUFBRUMsUUFBaUIsRUFBUTtNQUM3REMsVUFBVSxDQUFDQyxJQUFJLENBQUNILFlBQVksQ0FBQ0ksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFSCxRQUFRLENBQUM7SUFDdkQsQ0FBQztJQUFBSixNQUFBLENBRURRLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDTCxZQUEwQixFQUFFQyxRQUFpQixFQUFRO01BQy9EQyxVQUFVLENBQUNJLE1BQU0sQ0FBQ04sWUFBWSxDQUFDSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUVILFFBQVEsQ0FBQztJQUN6RCxDQUFDO0lBQUFKLE1BQUEsQ0FFRFUsbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQ0MsTUFBZ0MsRUFBMkI7TUFDOUUsSUFBSUMsSUFBWTtNQUNoQixJQUFJRCxNQUFNLENBQUNFLEdBQUcsQ0FBaUIsK0JBQStCLENBQUMsRUFBRTtRQUNoRUQsSUFBSSxHQUFHRCxNQUFNLENBQUNHLE9BQU8sQ0FBQyxDQUFDO01BQ3hCLENBQUMsTUFBTTtRQUNORixJQUFJLEdBQUcsQ0FBQ0QsTUFBTSxDQUFDSSxVQUFVLENBQUMsQ0FBQyxHQUFHSixNQUFNLENBQUNLLGVBQWUsQ0FBQyxDQUFDLEdBQUdMLE1BQU0sQ0FBQ0csT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFO01BQ2pGO01BRUEsTUFBTUcsU0FBUyxHQUFHTixNQUFNLENBQUNKLFFBQVEsQ0FBQyxDQUFDLEVBQUVXLFlBQVksQ0FBQyxDQUErQjtNQUNqRixJQUFJRCxTQUFTLElBQUlFLFdBQVcsQ0FBQ0MsZ0JBQWdCLENBQUNILFNBQVMsRUFBRUwsSUFBSSxDQUFDLEVBQUU7UUFDL0QsT0FBT3JCLGdCQUFnQixDQUFDOEIsS0FBSztNQUM5QixDQUFDLE1BQU0sSUFBSUosU0FBUyxJQUFJRSxXQUFXLENBQUNHLHdCQUF3QixDQUFDTCxTQUFTLENBQUMsRUFBRTtRQUN4RSxPQUFPMUIsZ0JBQWdCLENBQUNnQyxNQUFNO01BQy9CLENBQUMsTUFBTTtRQUNOLE9BQU9oQyxnQkFBZ0IsQ0FBQ2lDLFFBQVE7TUFDakM7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVRDO0lBQUF4QixNQUFBLENBVU15QixnQkFBZ0IsR0FBdEIsZUFBTUEsZ0JBQWdCQSxDQUNyQkMsUUFBd0IsRUFDeEI5QixXQUFpRixFQUNqRitCLEtBQVcsRUFDa0Q7TUFDN0QsTUFBTUMseUJBQXlCLEdBQUdoQyxXQUFXLElBQUlBLFdBQVcsQ0FBQ2lDLHdCQUF3QjtNQUNyRixJQUFJRCx5QkFBeUIsRUFBRTtRQUM5QixNQUFNRSxPQUFPLEdBQUdGLHlCQUF5QixDQUFDRyxTQUFTLENBQUMsQ0FBQyxFQUFFSCx5QkFBeUIsQ0FBQ0ksV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO1VBQzVIQyxhQUFhLEdBQUdOLHlCQUF5QixDQUFDRyxTQUFTLENBQ2xESCx5QkFBeUIsQ0FBQ0ksV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFDOUNKLHlCQUF5QixDQUFDTyxNQUMzQixDQUFDO1VBQ0RDLEtBQUssR0FBR3hDLFdBQVcsQ0FBQ3lDLElBQUk7UUFDekIsT0FBT0QsS0FBSyxDQUFDLDJCQUEyQixDQUFDO1FBQ3pDLE9BQU9FLFNBQVMsQ0FBQ0MsaUJBQWlCLENBQUNULE9BQU8sRUFBRUksYUFBYSxFQUFFRSxLQUFLLEVBQUVULEtBQUssRUFBRUQsUUFBUSxDQUFDO01BQ25GO01BQ0EsT0FBT2MsT0FBTyxDQUFDQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzNCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBekMsTUFBQSxDQUtjMEMsK0JBQStCLEdBQTdDLGVBQWNBLCtCQUErQkEsQ0FBQ0MsV0FBNkIsRUFBK0I7TUFDekcsTUFBTUMsS0FBSyxHQUFHRCxXQUFXLENBQUNwQyxRQUFRLENBQUMsQ0FBQztNQUNwQyxNQUFNVSxTQUFTLEdBQUcyQixLQUFLLENBQUMxQixZQUFZLENBQUMsQ0FBQztNQUN0QyxNQUFNMkIsV0FBVyxHQUFHNUIsU0FBUyxDQUFDNkIsY0FBYyxDQUFDSCxXQUFXLENBQUMzQixlQUFlLENBQUMsQ0FBVyxDQUFDO01BQ3JGLE1BQU0rQixxQkFBcUIsR0FBR0Msa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDSixXQUFXLENBQUM7TUFFekYsTUFBTUsseUJBQXlCLEdBQUlILHFCQUFxQixDQUFDSSxZQUFZLENBQW9DQyxXQUFXLENBQUNDLE1BQU0sRUFDeEhDLHFCQUFxQjtNQUN4QixNQUFNQyw0QkFBNEIsR0FBSVIscUJBQXFCLENBQUNTLGVBQWUsRUFBNEJKLFdBQVcsQ0FBQ0MsTUFBTSxFQUN0SEMscUJBQXFCO01BQ3hCLE1BQU1HLG1CQUFtQixHQUFHUCx5QkFBeUIsSUFBSUssNEJBQTRCO01BRXJGLElBQUksQ0FBQ0UsbUJBQW1CLEVBQUU7UUFDekI7UUFDQSxPQUFPQyxTQUFTO01BQ2pCO01BRUEsTUFBTUMsaUJBQWlCLEdBQUdDLG9CQUFvQixDQUFDYixxQkFBcUIsQ0FBQ0ksWUFBWSxDQUFDLElBQUlELHlCQUF5QixLQUFLUSxTQUFTO01BQzdILE1BQU1HLHNCQUFzQixHQUFHRixpQkFBaUIsR0FBR2hCLFdBQVcsQ0FBQ21CLFVBQVUsQ0FBQyxDQUFDLEdBQUduQixXQUFXLENBQUNvQixnQkFBZ0IsQ0FBQyxDQUFDO01BQzVHLElBQUksQ0FBQ0Ysc0JBQXNCLEVBQUU7UUFDNUIsT0FBT0gsU0FBUztNQUNqQjtNQUNBLE1BQU1NLG1CQUFtQixHQUFHLEdBQUcvQyxTQUFTLENBQUNnRCxXQUFXLENBQUNKLHNCQUFzQixDQUFDL0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJMkMsbUJBQW1CLEVBQUU7TUFFL0csTUFBTVMseUJBQXlCLEdBQUdsQixrQkFBa0IsQ0FBQ0MsMkJBQTJCLENBQUNoQyxTQUFTLENBQUM2QixjQUFjLENBQUNrQixtQkFBbUIsQ0FBQyxDQUFDO01BQy9ILE1BQU1HLHFCQUFxQixHQUFJRCx5QkFBeUIsQ0FBQ2YsWUFBWSxFQUFhaUIsT0FBTyxHQUN0RixNQUFNQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDYixtQkFBbUIsQ0FBQ2MsUUFBUSxDQUFDLENBQUMsRUFBRVYsc0JBQXNCLEVBQUVqQixLQUFLLENBQUMsR0FDL0YsTUFBTXlCLFVBQVUsQ0FBQ0csa0JBQWtCLENBQUNmLG1CQUFtQixDQUFDYyxRQUFRLENBQUMsQ0FBQyxFQUFFM0IsS0FBSyxDQUFxQjtNQUVuRyxPQUFPdUIscUJBQXFCLENBQUNNLFNBQVMsQ0FBQyxDQUFDO0lBQ3pDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBekUsTUFBQSxDQUtBMEUseUJBQXlCLEdBQXpCLFNBQUFBLHlCQUF5QkEsQ0FBQy9CLFdBQTZCLEVBQVc7TUFDakUsT0FBUUEsV0FBVyxDQUFDZ0MsY0FBYyxDQUFDLENBQUMsRUFBa0RDLGtCQUFrQixHQUFHLElBQUksR0FBRyxLQUFLO0lBQ3hIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBNUUsTUFBQSxDQUtBNkUsdUJBQXVCLEdBQXZCLFNBQUFBLHVCQUF1QkEsQ0FBQ2xDLFdBQTZCLEVBQVc7TUFDL0QsTUFBTW1DLFdBQVcsR0FBR25DLFdBQVcsQ0FBQ2dDLGNBQWMsQ0FBQyxDQUFnRDtNQUMvRixPQUFPRyxXQUFXLEtBQUtwQixTQUFTLElBQUksQ0FBQ29CLFdBQVcsQ0FBQ0Ysa0JBQWtCO0lBQ3BFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQTVFLE1BQUEsQ0FVYytFLGFBQWEsR0FBM0IsZUFBY0EsYUFBYUEsQ0FDMUJwQyxXQUE2QixFQUM3QnFDLFdBQStCLEVBQy9CQyxPQUE0RixFQUNsRTtNQUMxQixNQUFNQyxlQUFlLEdBQUdGLFdBQVcsSUFBSSxDQUFDLENBQUM7TUFFekMsSUFBSSxJQUFJLENBQUNOLHlCQUF5QixDQUFDL0IsV0FBVyxDQUFDLEVBQUU7UUFDaEQsSUFBSXdDLHNCQUF3QztRQUM1QyxJQUFJRixPQUFPLENBQUNHLGFBQWEsRUFBRUMsVUFBVSxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7VUFDbEQ7VUFDQSxNQUFNMUMsV0FBVyxDQUFDMkMsTUFBTSxDQUFDTCxPQUFPLENBQUNHLGFBQWEsQ0FBQztRQUNoRDtRQUVBLElBQUl6QyxXQUFXLENBQUM1QixVQUFVLENBQUMsQ0FBQyxFQUFFO1VBQzdCd0UsTUFBTSxDQUFDQyxNQUFNLENBQUNOLGVBQWUsRUFBRTtZQUFFLG1CQUFtQixFQUFFRCxPQUFPLENBQUNHO1VBQWMsQ0FBQyxDQUFDO1VBQzlFRCxzQkFBc0IsR0FBR3hDLFdBQVc7UUFDckMsQ0FBQyxNQUFNO1VBQ047VUFDQTtVQUNBLE1BQU1DLEtBQUssR0FBR0QsV0FBVyxDQUFDcEMsUUFBUSxDQUFDLENBQUM7VUFDcEMsTUFBTVUsU0FBUyxHQUFHMkIsS0FBSyxDQUFDMUIsWUFBWSxDQUFDLENBQUM7VUFDdENpRSxzQkFBc0IsR0FBR3ZDLEtBQUssQ0FBQzZDLFFBQVEsQ0FBQzlDLFdBQVcsQ0FBQzdCLE9BQU8sQ0FBQyxDQUFDLEVBQUU0QyxTQUFTLEVBQUVBLFNBQVMsRUFBRUEsU0FBUyxFQUFFO1lBQy9GZ0MsU0FBUyxFQUFFL0MsV0FBVyxDQUFDZ0QsVUFBVSxDQUFDLENBQUM7WUFDbkNDLGVBQWUsRUFBRWpELFdBQVcsQ0FBQ2tELGdCQUFnQixDQUFDO1VBQy9DLENBQUMsQ0FBQzs7VUFFRjtVQUNBLElBQUlaLE9BQU8sQ0FBQ0csYUFBYSxFQUFFO1lBQzFCLE1BQU1VLFVBQVUsR0FBRzlDLGtCQUFrQixDQUFDQywyQkFBMkIsQ0FBQ2hDLFNBQVMsQ0FBQzZCLGNBQWMsQ0FBQ0gsV0FBVyxDQUFDN0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xILE1BQU04RCxrQkFBa0IsR0FBSWpDLFdBQVcsQ0FBQ2dDLGNBQWMsQ0FBQyxDQUFDLENBQW9DQyxrQkFBa0I7WUFDOUcsTUFBTW1CLGdCQUFnQixHQUNyQkQsVUFBVSxDQUFDRSxnQkFBZ0IsQ0FBQzVDLFdBQVcsQ0FBQzZDLFdBQVcsR0FBRyxzQkFBc0JyQixrQkFBa0IsRUFBRSxDQUFDLEVBQzlGc0Isd0JBQXdCLENBQUNDLEtBQUs7WUFDbEMsSUFBSSxDQUFDSixnQkFBZ0IsRUFBRTtjQUN0QixNQUFNLElBQUlLLEtBQUssQ0FBQyw4Q0FBOEN6RCxXQUFXLENBQUM3QixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkY7WUFDQSxNQUFNdUYsaUJBQXlDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BEQSxpQkFBaUIsQ0FBQyxHQUFHTixnQkFBZ0IsYUFBYSxDQUFDLEdBQUdkLE9BQU8sQ0FBQ0csYUFBYSxDQUFDdEUsT0FBTyxDQUFDLENBQUMsQ0FBQ21CLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxR3NELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTixlQUFlLEVBQUVtQixpQkFBaUIsQ0FBQztVQUNsRDtRQUNEO1FBRUEsT0FBT2xCLHNCQUFzQixDQUFDbUIsTUFBTSxDQUFDcEIsZUFBZSxFQUFFLElBQUksQ0FBQztNQUM1RCxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNMLHVCQUF1QixDQUFDbEMsV0FBVyxDQUFDLEVBQUU7UUFDckQsSUFBSUEsV0FBVyxDQUFDNUIsVUFBVSxDQUFDLENBQUMsRUFBRTtVQUM3QixNQUFNLElBQUlxRixLQUFLLENBQUMsaUZBQWlGLENBQUM7UUFDbkcsQ0FBQyxNQUFNO1VBQ047VUFDQSxNQUFNeEQsS0FBSyxHQUFHRCxXQUFXLENBQUNwQyxRQUFRLENBQUMsQ0FBQztVQUNwQyxNQUFNNEUsc0JBQXNCLEdBQUd2QyxLQUFLLENBQUM2QyxRQUFRLENBQUM5QyxXQUFXLENBQUM3QixPQUFPLENBQUMsQ0FBQyxFQUFFNEMsU0FBUyxFQUFFQSxTQUFTLEVBQUVBLFNBQVMsRUFBRTtZQUNyR2dDLFNBQVMsRUFBRS9DLFdBQVcsQ0FBQ2dELFVBQVUsQ0FBQyxDQUFDO1lBQ25DQyxlQUFlLEVBQUVqRCxXQUFXLENBQUNrRCxnQkFBZ0IsQ0FBQztVQUMvQyxDQUFDLENBQUM7VUFDRixPQUFPVixzQkFBc0IsQ0FBQ21CLE1BQU0sQ0FBQ3BCLGVBQWUsRUFBRSxJQUFJLENBQUM7UUFDNUQ7TUFDRCxDQUFDLE1BQU07UUFDTixPQUFPdkMsV0FBVyxDQUFDMkQsTUFBTSxDQUFDcEIsZUFBZSxFQUFFLElBQUksRUFBRUQsT0FBTyxDQUFDc0IsV0FBVyxFQUFFdEIsT0FBTyxDQUFDdUIsY0FBYyxDQUFDO01BQzlGO0lBQ0QsQ0FBQztJQUFBeEcsTUFBQSxDQUVEeUcscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQzlELFdBQTZCLEVBQUUrRCxVQUE4QixFQUFFdkcsWUFBMEIsRUFBWTtNQUMxSCxNQUFNYyxTQUFTLEdBQUcwQixXQUFXLENBQUNwQyxRQUFRLENBQUMsQ0FBQyxDQUFDVyxZQUFZLENBQUMsQ0FBQztNQUN2RCxNQUFNeUYsUUFBUSxHQUFHMUYsU0FBUyxDQUFDZ0QsV0FBVyxDQUFDdEIsV0FBVyxDQUFDb0IsZ0JBQWdCLENBQUMsQ0FBQyxDQUFFakQsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUVqRixNQUFNOEYsd0JBQXdCLEdBQUdDLG9CQUFvQixDQUFDNUYsU0FBUyxFQUFFMEYsUUFBUSxFQUFFeEcsWUFBWSxDQUFDO01BQ3hGO01BQ0EsT0FBT3lHLHdCQUF3QixDQUFDRSxNQUFNLENBQUVDLFNBQWlCLElBQUs7UUFDN0QsT0FBTyxFQUFFQSxTQUFTLEtBQUtMLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzFDLENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FoQkM7SUFBQTFHLE1BQUEsQ0FpQk1nSCxjQUFjLEdBQXBCLGVBQU1BLGNBQWNBLENBQ25CQyxlQUFpQyxFQUNqQ0MsWUFBMEMsRUFDMUMvRyxZQUEwQixFQUMxQmdILGFBQTRCLEVBQzVCQyxjQUE4QixFQUM5QkMsYUFBc0IsRUFDSTtNQUMxQixJQUFJQyxrQkFBOEM7TUFDbEQsTUFBTUMsVUFBVSxHQUFHNUgsYUFBYSxDQUFDdUgsWUFBWSxDQUFDO01BQzlDLElBQUksQ0FBQ0QsZUFBZSxFQUFFO1FBQ3JCLE1BQU0sSUFBSWIsS0FBSyxDQUFDLDRDQUE0QyxDQUFDO01BQzlEO01BQ0EsTUFBTW9CLGdCQUFnQixHQUFHLElBQUksQ0FBQzlHLG1CQUFtQixDQUFDdUcsZUFBZSxDQUFDO01BQ2xFLElBQUlPLGdCQUFnQixLQUFLakksZ0JBQWdCLENBQUM4QixLQUFLLElBQUltRyxnQkFBZ0IsS0FBS2pJLGdCQUFnQixDQUFDZ0MsTUFBTSxFQUFFO1FBQ2hHLE1BQU0sSUFBSTZFLEtBQUssQ0FBQyw2RUFBNkUsQ0FBQztNQUMvRjtNQUNBLE1BQU1oRyxRQUFRLEdBQUcsSUFBSSxDQUFDcUgsV0FBVyxDQUFDRixVQUFVLENBQUM7TUFDN0NBLFVBQVUsQ0FBQ0csb0JBQW9CLEdBQUdMLGFBQWEsR0FBRzNELFNBQVMsR0FBRzZELFVBQVUsQ0FBQ0csb0JBQW9CO01BQzdGLElBQUksQ0FBQ1IsWUFBWSxFQUFFUyxRQUFRLEVBQUU7UUFDNUIsSUFBSSxDQUFDekgsUUFBUSxDQUFDQyxZQUFZLEVBQUVDLFFBQVEsQ0FBQztNQUN0QztNQUNBLE1BQU13SCxrQkFBa0IsR0FBR1IsY0FBYyxDQUFDUyxzQkFBc0IsQ0FBQyxDQUFDO01BQ2xFLElBQUk7UUFDSFAsa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUNRLGVBQWUsQ0FDOUNiLGVBQWUsRUFDZk0sVUFBVSxFQUNWcEgsWUFBWSxFQUNaaUgsY0FBYyxFQUNkRCxhQUFhLEVBQ2JFLGFBQ0QsQ0FBQztRQUNELE1BQU1ELGNBQWMsQ0FBQ1csaUJBQWlCLENBQUM7VUFBRUMsT0FBTyxFQUFFVCxVQUFVLENBQUNVLGFBQWE7VUFBRUMsU0FBUyxFQUFFTjtRQUFtQixDQUFDLENBQUM7UUFDNUcsT0FBT04sa0JBQWtCO01BQzFCLENBQUMsQ0FBQyxPQUFPYSxLQUFjLEVBQUU7UUFDeEI7UUFDQSxNQUFNZixjQUFjLENBQUNXLGlCQUFpQixDQUFDO1VBQUVDLE9BQU8sRUFBRVQsVUFBVSxDQUFDVSxhQUFhO1VBQUVDLFNBQVMsRUFBRU47UUFBbUIsQ0FBQyxDQUFDO1FBQzVHLElBQ0MsQ0FBQ08sS0FBSyxLQUFLN0ksU0FBUyxDQUFDOEksU0FBUyxDQUFDQyxxQkFBcUIsSUFBSUYsS0FBSyxLQUFLN0ksU0FBUyxDQUFDOEksU0FBUyxDQUFDRSxrQkFBa0IsS0FDeEdoQixrQkFBa0IsRUFBRWlCLFdBQVcsQ0FBQyxDQUFDLEVBQ2hDO1VBQ0Q7VUFDQTtVQUNBO1VBQ0FqQixrQkFBa0IsQ0FBQ2tCLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDckM7UUFDQSxNQUFNTCxLQUFLO01BQ1osQ0FBQyxTQUFTO1FBQ1QsSUFBSSxDQUFDakIsWUFBWSxFQUFFUyxRQUFRLEVBQUU7VUFDNUIsSUFBSSxDQUFDbkgsVUFBVSxDQUFDTCxZQUFZLEVBQUVDLFFBQVEsQ0FBQztRQUN4QztNQUNEO0lBQ0QsQ0FBQztJQUFBSixNQUFBLENBRU95SCxXQUFXLEdBQW5CLFNBQVFBLFdBQVdBLENBQUM3SCxXQUE2QixFQUFVO01BQzFELE9BQU9BLFdBQVcsQ0FBQzZJLFFBQVEsS0FBSyxPQUFPLEdBQUcsY0FBYzdJLFdBQVcsQ0FBQzhJLE1BQU0sRUFBRSxHQUFHLE9BQU87SUFDdkY7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQWhCQztJQUFBMUksTUFBQSxDQWlCYzJJLHFCQUFxQixHQUFuQyxlQUFjQSxxQkFBcUJBLENBQUMxQixlQUFpQyxFQUFFTSxVQUE0QixFQUEyQjtNQUM3SCxJQUFJQSxVQUFVLENBQUNHLG9CQUFvQixFQUFFO1FBQ3BDO1FBQ0EsTUFBTWtCLGdCQUFnQixHQUFHckIsVUFBVSxDQUFDbEYsSUFBSSxHQUFHa0QsTUFBTSxDQUFDc0QsT0FBTyxDQUFDdEIsVUFBVSxDQUFDbEYsSUFBSSxDQUFDLENBQUN5RyxHQUFHLENBQUNDLElBQUE7VUFBQSxJQUFDLENBQUNDLEdBQUcsRUFBRTdDLEtBQUssQ0FBQyxHQUFBNEMsSUFBQTtVQUFBLE9BQU07WUFBRSxDQUFDQyxHQUFHLEdBQUc3QztVQUFNLENBQUM7UUFBQSxDQUFDLENBQUMsR0FBRyxFQUFFO1FBQ3pILElBQUk7VUFDSCxNQUFNOEMsWUFBWSxDQUNqQjFCLFVBQVUsQ0FBQ0csb0JBQW9CLENBQUM7WUFDL0J3QixXQUFXLEVBQUVqQyxlQUFlLElBQUlBLGVBQWUsQ0FBQ25HLE9BQU8sQ0FBQyxDQUFDO1lBQ3pEOEgsZ0JBQWdCLEVBQUVBO1VBQ25CLENBQUMsQ0FDRixDQUFDO1FBQ0YsQ0FBQyxDQUFDLE9BQU9ULEtBQWMsRUFBRTtVQUN4QmdCLEdBQUcsQ0FBQ2hCLEtBQUssQ0FBQ0EsS0FBZSxDQUFDO1VBQzFCLE1BQU03SSxTQUFTLENBQUM4SSxTQUFTLENBQUNnQixvQkFBb0I7UUFDL0M7UUFDQTdCLFVBQVUsQ0FBQ2xGLElBQUksR0FBR3VHLGdCQUFnQixDQUFDUyxNQUFNLENBQUMsQ0FBQ0MsTUFBTSxFQUFFQyxhQUFhLEtBQUs7VUFDcEUsT0FBTztZQUFFLEdBQUdELE1BQU07WUFBRSxHQUFHQztVQUFjLENBQUM7UUFDdkMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO01BQ1A7TUFDQSxNQUFNQyxhQUFhLEdBQUcsSUFBSSxDQUFDekUsYUFBYSxDQUFDa0MsZUFBZSxFQUFFTSxVQUFVLENBQUNsRixJQUFJLEVBQUU7UUFDMUVrRSxXQUFXLEVBQUUsQ0FBQyxDQUFDZ0IsVUFBVSxDQUFDaEIsV0FBVztRQUNyQ0MsY0FBYyxFQUFFLENBQUMsQ0FBQ2UsVUFBVSxDQUFDSSxRQUFRO1FBQ3JDdkMsYUFBYSxFQUFFbUMsVUFBVSxDQUFDbkM7TUFDM0IsQ0FBQyxDQUFDO01BQ0YsSUFBSTZCLGVBQWUsQ0FBQ3BCLGdCQUFnQixDQUFDLENBQUMsS0FBSzRELFdBQVcsQ0FBQ0Msd0JBQXdCLEVBQUU7UUFDaEZ6QyxlQUFlLENBQUMxRyxRQUFRLENBQUMsQ0FBQyxDQUFDb0osV0FBVyxDQUFDRixXQUFXLENBQUNDLHdCQUF3QixDQUFDO01BQzdFO01BQ0EsT0FBT0YsYUFBYTtJQUNyQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FwQkM7SUFBQXhKLE1BQUEsQ0FxQmM4SCxlQUFlLEdBQTdCLGVBQWNBLGVBQWVBLENBQzVCYixlQUFpQyxFQUNqQ00sVUFBNEIsRUFDNUJwSCxZQUEwQixFQUMxQmlILGNBQThCLEVBQzlCRCxhQUE0QixFQUM1QkUsYUFBc0IsRUFDZ0I7TUFDdEMsTUFBTXBHLFNBQVMsR0FBR2dHLGVBQWUsQ0FBQzFHLFFBQVEsQ0FBQyxDQUFDLENBQUNXLFlBQVksQ0FBQyxDQUFDO01BQzNELE1BQU15RixRQUFRLEdBQUcxRixTQUFTLENBQUNnRCxXQUFXLENBQUNnRCxlQUFlLENBQUNsRCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUVqRCxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQ3JGLE1BQU04SSxVQUFVLEdBQUd6SixZQUFZLENBQUMwSixjQUFjLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUMxRCxNQUFNQyxhQUFhLEdBQUc1SixZQUFZLENBQUM2SixnQkFBZ0IsQ0FBQyxDQUFDO01BQ3JELE1BQU1DLGlCQUFpQixHQUFHRixhQUFhLEVBQUVFLGlCQUFpQixJQUFJLENBQUMsQ0FBQztNQUNoRSxNQUFNQyxTQUFTLEdBQUcsQ0FBQ2pELGVBQWUsQ0FBQ2xHLFVBQVUsQ0FBQyxDQUFDLEdBQzVDLElBQUksQ0FBQ29KLGFBQWEsQ0FBQ0YsaUJBQWlCLEVBQUVMLFVBQVUsRUFBRTNJLFNBQVMsRUFBRTBGLFFBQVEsQ0FBQyxHQUN0RWpELFNBQVM7TUFFWixJQUFJd0csU0FBUyxFQUFFO1FBQ2QsTUFBTVosTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDYyx5QkFBeUIsQ0FDbERGLFNBQVMsRUFDVGpELGVBQWUsRUFDZk0sVUFBVSxFQUNWcEgsWUFBWSxFQUNaZ0gsYUFBYSxFQUNiQyxjQUNELENBQUM7UUFDRCxJQUFJa0MsTUFBTSxDQUFDZSxNQUFNLEtBQUssVUFBVSxFQUFFO1VBQ2pDLE1BQU1mLE1BQU0sQ0FBQ2dCLE1BQU07UUFDcEI7UUFDQSxPQUFPaEIsTUFBTSxDQUFDbkQsS0FBSyxDQUFDb0UsZUFBZTtNQUNwQyxDQUFDLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQ0MsdUJBQXVCLENBQUN2RCxlQUFlLEVBQUVNLFVBQVUsRUFBRXBILFlBQVksRUFBRWdILGFBQWEsRUFBRUMsY0FBYyxFQUFFQyxhQUFhLENBQUM7TUFDN0g7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVRDO0lBQUFySCxNQUFBLENBVWNvSyx5QkFBeUIsR0FBdkMsZUFBY0EseUJBQXlCQSxDQUN0Q0ssVUFBa0IsRUFDbEJ4RCxlQUFpQyxFQUNqQ00sVUFBNEIsRUFDNUJwSCxZQUEwQixFQUMxQmdILGFBQTRCLEVBQzVCQyxjQUE4QixFQUNtQjtNQUNqRCxNQUFNc0QsaUJBQWlCLEdBQUd6RCxlQUFlLENBQUNsRCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUVqRCxPQUFPLENBQUMsQ0FBQztNQUN2RSxNQUFNRyxTQUFTLEdBQUdnRyxlQUFlLENBQUMxRyxRQUFRLENBQUMsQ0FBQyxDQUFDVyxZQUFZLENBQUMsQ0FBQztNQUMzRCxNQUFNeUYsUUFBUSxHQUFHMUYsU0FBUyxDQUFDZ0QsV0FBVyxDQUFDeUcsaUJBQWlCLENBQUM7TUFDekQsTUFBTUMsWUFBWSxHQUFHeEosV0FBVyxDQUFDeUosZUFBZSxDQUFDM0osU0FBUyxFQUFFMEYsUUFBUSxDQUFDO01BQ3JFLE1BQU1rRSxpQkFBd0MsR0FBRztRQUFFQyx5QkFBeUIsRUFBRSxJQUFJO1FBQUVsRixlQUFlLEVBQUU7TUFBUSxDQUFDO01BRTlHLE1BQU1tRixrQkFBNEIsR0FBRyxFQUFFO01BQ3ZDLElBQUlKLFlBQVksRUFBRTtRQUNqQkksa0JBQWtCLENBQUNDLElBQUksQ0FBQ0wsWUFBWSxDQUFDO01BQ3RDO01BQ0EsSUFBSSxJQUFJLENBQUNqSyxtQkFBbUIsQ0FBQ3VHLGVBQWUsQ0FBQyxLQUFLMUgsZ0JBQWdCLENBQUM4QixLQUFLLEVBQUU7UUFDekUwSixrQkFBa0IsQ0FBQ0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztNQUNqRjtNQUNBLElBQUlELGtCQUFrQixDQUFDNUksTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNsQzBJLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxHQUFHRSxrQkFBa0IsQ0FBQ0UsSUFBSSxDQUFDLEdBQUcsQ0FBQztNQUM1RDtNQUNBLE1BQU0zQixNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUM0QixVQUFVLENBQ25DVCxVQUFVLEVBQ1Y7UUFDQ1UsUUFBUSxFQUFFbEUsZUFBZSxDQUFDbEQsZ0JBQWdCLENBQUMsQ0FBQztRQUM1Q3FILHlCQUF5QixFQUFFLElBQUk7UUFDL0JDLEtBQUssRUFBRSxJQUFJLENBQUNDLG1DQUFtQyxDQUFDckssU0FBUyxFQUFFMEYsUUFBUSxFQUFFOEQsVUFBVSxFQUFFdEQsYUFBYSxDQUFDO1FBQy9GMEQsaUJBQWlCLEVBQUVBLGlCQUFpQjtRQUNwQ1UsSUFBSSxFQUFFaEUsVUFBVSxDQUFDVSxhQUFhO1FBQzlCdUQsY0FBYyxFQUFFLElBQUk7UUFDcEJDLG1CQUFtQixFQUFFbEUsVUFBVSxDQUFDa0U7TUFDakMsQ0FBQyxFQUNEdEwsWUFBWSxFQUNaaUgsY0FDRCxDQUFDO01BQ0QsT0FBT2tDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDakI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FUQztJQUFBdEosTUFBQSxDQVVjd0ssdUJBQXVCLEdBQXJDLGVBQWNBLHVCQUF1QkEsQ0FDcEN2RCxlQUFpQyxFQUNqQ00sVUFBNEIsRUFDNUJwSCxZQUEwQixFQUMxQmdILGFBQTRCLEVBQzVCQyxjQUE4QixFQUM5QkMsYUFBc0IsRUFDZ0I7TUFDdEMsSUFBSTtRQUNILElBQUlDLGtCQUE4QztRQUNsRCxNQUFNdEMsV0FBVyxHQUFHdUMsVUFBVSxDQUFDbEYsSUFBSTtRQUNuQyxJQUFJLENBQUNnRixhQUFhLEVBQUU7VUFDbkIsTUFBTXFFLHdCQUF3QixHQUFHLE1BQU0sSUFBSSxDQUFDaEosK0JBQStCLENBQUN1RSxlQUFlLENBQUM7VUFDNUZNLFVBQVUsQ0FBQ2xGLElBQUksR0FBR2tELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFa0csd0JBQXdCLEVBQUVuRSxVQUFVLENBQUNsRixJQUFJLENBQUM7UUFDL0U7UUFDQSxJQUFJa0YsVUFBVSxDQUFDbEYsSUFBSSxFQUFFO1VBQ3BCLE9BQU9rRixVQUFVLENBQUNsRixJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDekM7UUFFQSxNQUFNc0osYUFBYSxHQUFHcEUsVUFBVSxDQUFDcUUsWUFBWSxLQUFLdk0sWUFBWSxDQUFDd00sV0FBVyxJQUFJdEUsVUFBVSxDQUFDcUUsWUFBWSxLQUFLdk0sWUFBWSxDQUFDeU0sTUFBTTtRQUM3SCxNQUFNQyxvQkFBb0IsR0FBR0osYUFBYSxHQUFHLElBQUksQ0FBQ2xGLHFCQUFxQixDQUFDUSxlQUFlLEVBQUVqQyxXQUFXLEVBQUU3RSxZQUFZLENBQUMsR0FBRyxFQUFFO1FBQ3hILElBQUlvSCxVQUFVLENBQUNxRSxZQUFZLEtBQUt2TSxZQUFZLENBQUMyTSxjQUFjLEVBQUU7VUFDNUR6RSxVQUFVLENBQUN3RSxvQkFBb0IsRUFBRUUsT0FBTyxDQUFFbEYsU0FBUyxJQUFLO1lBQ3ZELElBQUksQ0FBQ2dGLG9CQUFvQixDQUFDRyxRQUFRLENBQUNuRixTQUFTLENBQUMsRUFBRTtjQUM5Q2dGLG9CQUFvQixDQUFDZixJQUFJLENBQUNqRSxTQUFTLENBQUM7WUFDckM7VUFDRCxDQUFDLENBQUM7VUFFRixJQUFJZ0Ysb0JBQW9CLENBQUM1SixNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RDO1lBQ0EsTUFBTSxJQUFJaUUsS0FBSyxDQUFDLDZDQUE2QyxDQUFDO1VBQy9EO1FBQ0Q7UUFFQSxJQUFJMkYsb0JBQW9CLENBQUM1SixNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ3BDbUYsa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUM2RSxnQkFBZ0IsQ0FDL0NsRixlQUFlLEVBQ2Y4RSxvQkFBb0IsRUFDcEJ4RSxVQUFVLEVBQ1ZwSCxZQUFZLEVBQ1pnSCxhQUFhLEVBQ2JDLGNBQ0QsQ0FBQztRQUNGLENBQUMsTUFBTTtVQUNORSxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQ3FCLHFCQUFxQixDQUFDMUIsZUFBZSxFQUFFTSxVQUFVLENBQUM7VUFDbEYsSUFBSSxDQUFDQSxVQUFVLENBQUNJLFFBQVEsRUFBRTtZQUN6QixNQUFNLElBQUksQ0FBQ3lFLHVCQUF1QixDQUFDOUUsa0JBQWtCLEVBQUVDLFVBQVUsQ0FBQzhFLDRCQUE0QixLQUFLLElBQUksQ0FBQztVQUN6RztRQUNEO1FBQ0EsT0FBTy9FLGtCQUFrQjtNQUMxQixDQUFDLENBQUMsT0FBT2EsS0FBYyxFQUFFO1FBQ3hCLE1BQU1tRSxHQUFHLEdBQUluRSxLQUFLLENBQVdvRSxPQUFPLElBQUlwRSxLQUFLO1FBQzdDZ0IsR0FBRyxDQUFDaEIsS0FBSyxDQUFDLHVDQUF1QyxFQUFFbUUsR0FBRyxDQUFDO1FBQ3ZELE1BQU1BLEdBQUc7TUFDVjtJQUNELENBQUM7SUFBQXRNLE1BQUEsQ0FFRHdNLGVBQWUsR0FBZixTQUFBQSxlQUFlQSxDQUFDQyxTQUEyQixFQUFXO01BQ3JELE1BQU1DLG9CQUFvQixHQUFHRCxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQ3pDLE1BQU1FLGlCQUFpQixHQUFHLElBQUksQ0FBQ2pNLG1CQUFtQixDQUFDZ00sb0JBQW9CLENBQUM7TUFDeEUsT0FBT0MsaUJBQWlCLEtBQUtwTixnQkFBZ0IsQ0FBQzhCLEtBQUs7SUFDcEQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FaQztJQUFBckIsTUFBQSxDQWFNNE0sY0FBYyxHQUFwQixlQUFNQSxjQUFjQSxDQUNuQnpCLFFBQTJDLEVBQzNDdkwsV0FBd0MsRUFDeENPLFlBQTBCLEVBQzFCZ0gsYUFBNEIsRUFDNUJDLGNBQThCLEVBQ2Q7TUFDaEI7TUFDQSxJQUFJLENBQUNsSCxRQUFRLENBQUNDLFlBQVksQ0FBQztNQUUzQixNQUFNME0sZ0JBQWdCLEdBQUdDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDNUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHQSxRQUFRLENBQUMsR0FBRyxDQUFDQSxRQUFRLENBQUM7TUFDN0UsTUFBTTZCLFlBQVksR0FBRyxDQUFDcE4sV0FBVyxDQUFDcU4sZ0JBQWdCLElBQUlKLGdCQUFnQixFQUFFLENBQUMsQ0FBQztNQUUxRSxPQUFPLElBQUlySyxPQUFPLENBQU8sQ0FBQ0MsT0FBTyxFQUFFeUssTUFBTSxLQUFLO1FBQzdDLElBQUk7VUFDSCxNQUFNQyxZQUFZLEdBQUcsSUFBSSxDQUFDWCxlQUFlLENBQUM1TSxXQUFXLENBQUNxTixnQkFBZ0IsSUFBSUosZ0JBQWdCLENBQUM7VUFDM0YsTUFBTU8sS0FBZ0IsR0FBRyxFQUFFO1VBQzNCLElBQUluSSxPQUF1QixHQUFHLEVBQUU7VUFDaEMsSUFBSW9JLGNBQW1DO1VBQ3ZDO1VBQ0EsSUFBSXpOLFdBQVcsRUFBRTtZQUNoQkEsV0FBVyxHQUFHRCxhQUFhLENBQUNDLFdBQVcsQ0FBQztZQUN4Q0EsV0FBVyxDQUFDME4sYUFBYSxHQUFHLElBQUksQ0FBQ0MsNEJBQTRCLENBQUNQLFlBQVksQ0FBQztZQUMzRSxJQUFJLENBQUNwTixXQUFXLENBQUM0Tix3QkFBd0IsRUFBRTtjQUMxQztjQUNBLElBQUlMLFlBQVksRUFBRTtnQkFDakI7Z0JBQ0EsTUFBTU0sYUFBYSxHQUFHWixnQkFBZ0IsQ0FBQ2EsSUFBSSxDQUFFQyxPQUFPLElBQUs7a0JBQ3hELE1BQU1DLFdBQVcsR0FBR0QsT0FBTyxDQUFDbEosU0FBUyxDQUFDLENBQUM7a0JBQ3ZDLE9BQ0NtSixXQUFXLENBQUNDLGNBQWMsS0FBSyxJQUFJLElBQ25DRCxXQUFXLENBQUNFLGNBQWMsS0FBSyxJQUFJLElBQ25DRixXQUFXLENBQUNHLHVCQUF1QixJQUNuQ0gsV0FBVyxDQUFDRyx1QkFBdUIsQ0FBQ0MsZUFBZSxJQUNuRCxDQUFDSixXQUFXLENBQUNHLHVCQUF1QixDQUFDRSxrQkFBa0I7Z0JBRXpELENBQUMsQ0FBQztnQkFDRixJQUFJUixhQUFhLEVBQUU7a0JBQ2xCO2tCQUNBLE1BQU1TLGVBQWUsR0FBR1QsYUFBYSxDQUFDaEosU0FBUyxDQUFDLENBQUMsQ0FBQ3NKLHVCQUF1QixDQUFDQyxlQUFlO2tCQUN6RkcsVUFBVSxDQUFDQyxJQUFJLENBQ2RqSCxhQUFhLENBQUNrSCxPQUFPLENBQUMsK0RBQStELEVBQUUsQ0FDdEZILGVBQWUsQ0FDZixDQUFDLEVBQ0Y7b0JBQ0NJLEtBQUssRUFBRW5ILGFBQWEsQ0FBQ2tILE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztvQkFDL0NFLE9BQU8sRUFBRXJCO2tCQUNWLENBQ0QsQ0FBQztrQkFDRDtnQkFDRCxDQUFDLE1BQU07a0JBQ05HLGNBQWMsR0FBR1IsZ0JBQWdCLENBQUNhLElBQUksQ0FBRUMsT0FBTyxJQUFLO29CQUNuRCxNQUFNO3NCQUFFRSxjQUFjO3NCQUFFQyxjQUFjO3NCQUFFQztvQkFBd0IsQ0FBQyxHQUFHSixPQUFPLENBQUNsSixTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0YsT0FBT29KLGNBQWMsS0FBSyxJQUFJLElBQUlDLGNBQWMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDQyx1QkFBdUIsRUFBRUMsZUFBZTtrQkFDeEcsQ0FBQyxDQUFDO2dCQUNIO2NBQ0Q7Y0FDQSxJQUFJUSxXQUFXLEdBQUcsRUFBRTtjQUNwQixJQUFJbkIsY0FBYyxFQUFFO2dCQUNuQixNQUFNb0Isa0JBQWtCLEdBQUdwQixjQUFjLENBQUM1SSxTQUFTLENBQUMsQ0FBQyxDQUFDc0osdUJBQXVCLENBQUNDLGVBQWU7Z0JBQzdGUSxXQUFXLEdBQUdySCxhQUFhLENBQUNrSCxPQUFPLENBQ2xDLDBEQUEwRCxFQUMxRCxDQUFDSSxrQkFBa0IsQ0FBQyxFQUNwQjdPLFdBQVcsQ0FBQzBOLGFBQ2IsQ0FBQztjQUNGLENBQUMsTUFBTSxJQUFJMU4sV0FBVyxDQUFDME8sS0FBSyxFQUFFO2dCQUM3QixJQUFJMU8sV0FBVyxDQUFDOE8sV0FBVyxFQUFFO2tCQUM1QkYsV0FBVyxHQUFHckgsYUFBYSxDQUFDa0gsT0FBTyxDQUNsQyxxREFBcUQsRUFDckQsQ0FBQ3pPLFdBQVcsQ0FBQzBPLEtBQUssRUFBRTFPLFdBQVcsQ0FBQzhPLFdBQVcsQ0FBQyxFQUM1QzlPLFdBQVcsQ0FBQzBOLGFBQ2IsQ0FBQztnQkFDRixDQUFDLE1BQU07a0JBQ05rQixXQUFXLEdBQUdySCxhQUFhLENBQUNrSCxPQUFPLENBQ2xDLDJEQUEyRCxFQUMzRCxDQUFDek8sV0FBVyxDQUFDME8sS0FBSyxDQUFDLEVBQ25CMU8sV0FBVyxDQUFDME4sYUFDYixDQUFDO2dCQUNGO2NBQ0QsQ0FBQyxNQUFNO2dCQUNOa0IsV0FBVyxHQUFHckgsYUFBYSxDQUFDa0gsT0FBTyxDQUNsQywrREFBK0QsRUFDL0QzSyxTQUFTLEVBQ1Q5RCxXQUFXLENBQUMwTixhQUNiLENBQUM7Y0FDRjtjQUNBckksT0FBTyxDQUFDK0YsSUFBSSxDQUFDO2dCQUNaMkQsSUFBSSxFQUFFblAsaUJBQWlCLENBQUNvUCxpQkFBaUI7Z0JBQ3pDekQsUUFBUSxFQUFFMEIsZ0JBQWdCO2dCQUMxQmdDLElBQUksRUFBRUwsV0FBVztnQkFDakJNLFFBQVEsRUFBRSxJQUFJO2dCQUNkOUcsT0FBTyxFQUFFdEksMEJBQTBCLENBQUNxUDtjQUNyQyxDQUFDLENBQUM7WUFDSCxDQUFDLE1BQU07Y0FDTjtjQUNBLElBQUlDLGNBQWMsR0FBR25DLGdCQUFnQixDQUFDMUssTUFBTTtjQUU1QyxJQUFJZ0wsWUFBWSxFQUFFO2dCQUNqQjZCLGNBQWMsSUFDYixDQUFDcFAsV0FBVyxDQUFDcVAsNEJBQTRCLEVBQUU5TSxNQUFNLElBQUksQ0FBQyxLQUNyRHZDLFdBQVcsQ0FBQ3NQLHlCQUF5QixFQUFFL00sTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUNuRHZDLFdBQVcsQ0FBQ3VQLGVBQWUsRUFBRWhOLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQzNDMUMsWUFBWSxDQUFDMlAsbUNBQW1DLENBQy9DeFAsV0FBVyxFQUNYaU4sZ0JBQWdCLEVBQ2hCbUMsY0FBYyxFQUNkN0gsYUFBYSxFQUNiaUcsS0FBSyxFQUNMbkksT0FDRCxDQUFDO2NBQ0YsQ0FBQyxNQUFNO2dCQUNOLE1BQU1vSyxnQkFBZ0IsR0FBRzVQLFlBQVksQ0FBQzZQLG1CQUFtQixDQUFDMVAsV0FBVyxFQUFFb1AsY0FBYyxFQUFFN0gsYUFBYSxDQUFDO2dCQUNyRyxJQUFJa0ksZ0JBQWdCLEVBQUU7a0JBQ3JCakMsS0FBSyxDQUFDcEMsSUFBSSxDQUFDcUUsZ0JBQWdCLENBQUM7Z0JBQzdCO2NBQ0Q7Y0FFQSxNQUFNRSxxQkFBcUIsR0FBRzlQLFlBQVksQ0FBQytQLDJCQUEyQixDQUNyRTVQLFdBQVcsRUFDWGlOLGdCQUFnQixFQUNoQjFGLGFBQ0QsQ0FBQztjQUNEbEMsT0FBTyxHQUFHLENBQUMsR0FBR0EsT0FBTyxFQUFFLEdBQUdzSyxxQkFBcUIsQ0FBQztZQUNqRDtVQUNEO1VBRUEsTUFBTUUsYUFBYSxHQUFHekMsWUFBWSxDQUFDMEMsVUFBVSxDQUFDLENBQVk7VUFDMUQsSUFBSUMsV0FBOEM7VUFDbEQsSUFBSUYsYUFBYSxDQUFDNU8sR0FBRyxDQUFtQix3Q0FBd0MsQ0FBQyxFQUFFO1lBQ2xGLElBQUksSUFBSSxDQUFDNkQseUJBQXlCLENBQUMrSyxhQUFhLENBQUMsRUFBRTtjQUNsREUsV0FBVyxHQUFHLE1BQU07WUFDckIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDOUssdUJBQXVCLENBQUM0SyxhQUFhLENBQUMsRUFBRTtjQUN2REUsV0FBVyxHQUFHLFlBQVk7WUFDM0I7VUFDRDs7VUFFQTtVQUNBbFEsWUFBWSxDQUFDbVEsNEJBQTRCLENBQUMzSyxPQUFPLEVBQUVtSSxLQUFLLENBQUM7VUFDekQsTUFBTXlDLFNBQVMsR0FBRyxNQUFBQSxDQUFBLEtBQTJCO1lBQzVDQyxlQUFlLENBQUNDLDZCQUE2QixDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDN1AsUUFBUSxDQUFDQyxZQUFZLENBQUM7WUFFM0IsSUFBSTtjQUNILE1BQU1WLFlBQVksQ0FBQ3VRLG9CQUFvQixDQUN0Qy9LLE9BQU8sRUFDUHJGLFdBQVcsRUFDWHdILGNBQWMsRUFDZEQsYUFBYSxFQUNiaEgsWUFBWSxFQUNaZ04sWUFBWSxFQUNad0MsV0FDRCxDQUFDO2NBQ0RsTixPQUFPLENBQUMsQ0FBQztZQUNWLENBQUMsQ0FBQyxPQUFPd04sTUFBZSxFQUFFO2NBQ3pCL0MsTUFBTSxDQUFDLENBQUM7WUFDVCxDQUFDLFNBQVM7Y0FDVCxJQUFJLENBQUMxTSxVQUFVLENBQUNMLFlBQVksQ0FBQztZQUM5QjtVQUNELENBQUM7VUFFRCxNQUFNK1AsTUFBTSxHQUFHLElBQUksQ0FBQ0Msa0JBQWtCLENBQUMvQyxLQUFLLEVBQUV4TixXQUFXLEVBQUV1SCxhQUFhLEVBQUUwSSxTQUFTLEVBQUUzQyxNQUFNLENBQUM7VUFFNUYsSUFBSXROLFdBQVcsQ0FBQ3dRLFFBQVEsS0FBSyxJQUFJLElBQUl4USxXQUFXLENBQUN5USxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQ3JFUixTQUFTLENBQUMsQ0FBQztVQUNaLENBQUMsTUFBTTtZQUNOSyxNQUFNLENBQUNJLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQztZQUMzQ0osTUFBTSxDQUFDSyxJQUFJLENBQUMsQ0FBQztVQUNkO1FBQ0QsQ0FBQyxTQUFTO1VBQ1Q7VUFDQSxJQUFJLENBQUMvUCxVQUFVLENBQUNMLFlBQVksQ0FBQztRQUM5QjtNQUNELENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FWQztJQUFBSCxNQUFBLENBV0FtUSxrQkFBa0IsR0FBbEIsU0FBQUEsa0JBQWtCQSxDQUNqQi9DLEtBQWdCLEVBQ2hCN0YsVUFBa0YsRUFDbEZKLGFBQTRCLEVBQzVCMEksU0FBbUIsRUFDbkJXLFFBQWtCLEVBQ1Q7TUFDVCxJQUFJQyxlQUFlLEdBQUcsS0FBSztNQUMzQixNQUFNQyxJQUFJLEdBQUcsSUFBSUMsSUFBSSxDQUFDO1FBQUV2RCxLQUFLLEVBQUVBO01BQU0sQ0FBQyxDQUFDO01BQ3ZDLE1BQU13RCxrQkFBa0IsR0FBR0MsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUU7TUFDdkUsSUFBSXhDLEtBQXlCO01BQzdCLElBQUkvRyxVQUFVLENBQUNVLGFBQWEsRUFBRXBILEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1FBQ3REeU4sS0FBSyxHQUFHbkgsYUFBYSxDQUFDa0gsT0FBTyxDQUFDLHVCQUF1QixFQUFFM0ssU0FBUyxFQUFFNkQsVUFBVSxDQUFDK0YsYUFBYSxDQUFDO01BQzVGLENBQUMsTUFBTTtRQUNOZ0IsS0FBSyxHQUFHc0Msa0JBQWtCLENBQUN2QyxPQUFPLENBQUMsaUJBQWlCLENBQUM7TUFDdEQ7TUFDQSxNQUFNNkIsTUFBTSxHQUFHLElBQUlhLE1BQU0sQ0FBQztRQUN6QnpDLEtBQUssRUFBRUEsS0FBSztRQUNaMEMsS0FBSyxFQUFFLFNBQVM7UUFDaEJDLE9BQU8sRUFBRSxDQUFDUCxJQUFJLENBQUM7UUFDZlEsY0FBYyxFQUFFOUQsS0FBSztRQUNyQitELFdBQVcsRUFBRSxJQUFJQyxNQUFNLENBQUM7VUFDdkJ2QyxJQUFJLEVBQUVQLEtBQUs7VUFDWEssSUFBSSxFQUFFLFlBQVk7VUFDbEIwQyxLQUFLLEVBQUUsU0FBQUEsQ0FBQSxFQUFrQjtZQUN4QlosZUFBZSxHQUFHLElBQUk7WUFDdEJQLE1BQU0sQ0FBQ29CLEtBQUssQ0FBQyxDQUFDO1lBQ2R6QixTQUFTLENBQUMsQ0FBQztVQUNaO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YwQixTQUFTLEVBQUUsSUFBSUgsTUFBTSxDQUFDO1VBQ3JCdkMsSUFBSSxFQUFFMUgsYUFBYSxDQUFDa0gsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1VBQ3JEZ0QsS0FBSyxFQUFFLFNBQUFBLENBQUEsRUFBa0I7WUFDeEJuQixNQUFNLENBQUNvQixLQUFLLENBQUMsQ0FBQztVQUNmO1FBQ0QsQ0FBQyxDQUFDO1FBQ0ZFLFVBQVUsRUFBRSxTQUFBQSxDQUFBLEVBQWtCO1VBQzdCdEIsTUFBTSxDQUFDdUIsT0FBTyxDQUFDLENBQUM7VUFDaEI7VUFDQSxJQUFJLENBQUNoQixlQUFlLEVBQUU7WUFDckJELFFBQVEsQ0FBQyxDQUFDO1VBQ1g7UUFDRDtNQUNELENBQUMsQ0FBQztNQUNGLE9BQU9OLE1BQU07SUFDZDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVRDO0lBQUFsUSxNQUFBLENBVU0wUixZQUFZLEdBQWxCLGVBQU1BLFlBQVlBLENBQ2pCaFEsUUFBd0IsRUFDeEJDLEtBQWEsRUFDYnhCLFlBQTBCLEVBQzFCaUgsY0FBOEIsRUFDOUJ1SyxPQUFlLEVBQ3VCO01BQ3RDLE1BQU1oRixpQkFBaUIsR0FBRyxJQUFJLENBQUNqTSxtQkFBbUIsQ0FBQ2dCLFFBQVEsQ0FBQztNQUM1RCxJQUFJLENBQUNBLFFBQVEsRUFBRTtRQUNkLE1BQU0sSUFBSTBFLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQztNQUNsRTtNQUNBLElBQUl1RyxpQkFBaUIsS0FBS3BOLGdCQUFnQixDQUFDOEIsS0FBSyxJQUFJc0wsaUJBQWlCLEtBQUtwTixnQkFBZ0IsQ0FBQ2dDLE1BQU0sRUFBRTtRQUNsRyxNQUFNLElBQUk2RSxLQUFLLENBQUMscUVBQXFFLENBQUM7TUFDdkY7TUFDQSxJQUFJLENBQUNsRyxRQUFRLENBQUNDLFlBQVksQ0FBQztNQUMzQjtNQUNBaUgsY0FBYyxDQUFDd0ssd0JBQXdCLENBQUMsQ0FBQztNQUN6QyxNQUFNaEssa0JBQWtCLEdBQUdSLGNBQWMsQ0FBQ1Msc0JBQXNCLENBQUMsQ0FBQztNQUVsRSxJQUFJO1FBQ0gsTUFBTWdLLFdBQVcsR0FDaEJsRixpQkFBaUIsS0FBS3BOLGdCQUFnQixDQUFDOEIsS0FBSyxHQUN6QyxNQUFNeVEsS0FBSyxDQUFDQyw2QkFBNkIsQ0FDekNyUSxRQUFRLEVBQ1J2QixZQUFZLEVBQ1o7VUFDQzZSLGdCQUFnQixFQUFFLElBQUk7VUFDdEJyUSxLQUFLLEVBQUVBO1FBQ1IsQ0FBQyxFQUNEZ1EsT0FBTyxFQUNQdkssY0FDQSxDQUFDLEdBQ0QsTUFBTTZLLE1BQU0sQ0FBQ0MsMkJBQTJCLENBQUN4USxRQUFRLEVBQUV2QixZQUFZLEVBQUVpSCxjQUFjLENBQUM7UUFFcEYsTUFBTUEsY0FBYyxDQUFDVyxpQkFBaUIsQ0FBQztVQUFFRyxTQUFTLEVBQUVOO1FBQW1CLENBQUMsQ0FBQztRQUN6RSxPQUFPaUssV0FBVztNQUNuQixDQUFDLENBQUMsT0FBT00sR0FBWSxFQUFFO1FBQ3RCLE1BQU0vSyxjQUFjLENBQUNnTCxZQUFZLENBQUM7VUFBRUMsa0JBQWtCLEVBQUUsSUFBSTtVQUFFbkssU0FBUyxFQUFFTjtRQUFtQixDQUFDLENBQUM7UUFDOUYsTUFBTXVLLEdBQUc7TUFDVixDQUFDLFNBQVM7UUFDVCxJQUFJLENBQUMzUixVQUFVLENBQUNMLFlBQVksQ0FBQztNQUM5QjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FiQztJQUFBSCxNQUFBLENBY01zUyxjQUFjLEdBQXBCLGVBQU1BLGNBQWNBLENBQ25CNVEsUUFBd0IsRUFDeEI2USxhQUEyQyxFQUMzQ3BTLFlBQTBCLEVBQzFCZ0gsYUFBNEIsRUFDNUJDLGNBQThCLEVBQzlCb0wsV0FBb0IsRUFDcEJDLGdCQUF5QixFQUNhO01BQ3RDO01BQ0EsSUFBSSxDQUFDL1EsUUFBUSxFQUFFO1FBQ2QsTUFBTSxJQUFJMEUsS0FBSyxDQUFDLDhDQUE4QyxDQUFDO01BQ2hFO01BQ0EsTUFBTXhHLFdBQVcsR0FBR0QsYUFBYSxDQUFDNFMsYUFBYSxDQUFDO01BQ2hELE1BQU1HLE1BQU0sR0FBR2hSLFFBQVEsQ0FBQ25CLFFBQVEsQ0FBQyxDQUFDO01BQ2xDLE1BQU1vTSxpQkFBaUIsR0FBRyxJQUFJLENBQUNqTSxtQkFBbUIsQ0FBQ2dCLFFBQVEsQ0FBQztNQUU1RCxJQUFJaUwsaUJBQWlCLEtBQUtwTixnQkFBZ0IsQ0FBQzhCLEtBQUssSUFBSXNMLGlCQUFpQixLQUFLcE4sZ0JBQWdCLENBQUNnQyxNQUFNLEVBQUU7UUFDbEcsTUFBTSxJQUFJNkUsS0FBSyxDQUFDLDZFQUE2RSxDQUFDO01BQy9GO01BQ0EsSUFBSSxDQUFDbEcsUUFBUSxDQUFDQyxZQUFZLENBQUM7TUFDM0IsSUFBSTtRQUNILElBQUl3UyxhQUF5QztRQUU3QyxJQUFJaEcsaUJBQWlCLEtBQUtwTixnQkFBZ0IsQ0FBQzhCLEtBQUssSUFBSSxDQUFDb1IsZ0JBQWdCLEVBQUU7VUFDdEUsTUFBTUcsZ0JBQWdCLEdBQUdGLE1BQU0sQ0FBQ0csV0FBVyxDQUFDLEdBQUduUixRQUFRLENBQUNaLE9BQU8sQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUNnUyxlQUFlLENBQUMsQ0FBQztVQUM5RyxNQUFNQyxjQUFjLEdBQUcsTUFBTUgsZ0JBQWdCLENBQUNJLGFBQWEsQ0FBQyxDQUFDO1VBQzdELElBQUlELGNBQWMsRUFBRTtZQUNuQk4sZ0JBQWdCLEdBQUdNLGNBQWMsQ0FBQ0UsZ0JBQWdCLEtBQUtGLGNBQWMsQ0FBQ0csa0JBQWtCO1VBQ3pGO1FBQ0Q7UUFDQSxJQUFJLENBQUN0VCxXQUFXLENBQUN1VCxrQkFBa0IsRUFBRTtVQUNwQyxNQUFNLElBQUksQ0FBQ0MsZUFBZSxDQUFDeFQsV0FBVyxDQUFDeVQsWUFBWSxFQUFFWixnQkFBZ0IsRUFBRXRMLGFBQWEsQ0FBQztRQUN0RjtRQUNBLElBQUl6RixRQUFRLENBQUM0UixXQUFXLENBQUMsQ0FBQyxFQUFFO1VBQzNCO1VBQ0E7VUFDQTVSLFFBQVEsQ0FBQzZSLFlBQVksQ0FBQyxJQUFJLEVBQUU3UCxTQUFTLENBQUM7UUFDdkM7UUFDQSxJQUFJOUQsV0FBVyxDQUFDNFQsb0JBQW9CLEVBQUU7VUFDckMsTUFBTTVULFdBQVcsQ0FBQzRULG9CQUFvQixDQUFDO1lBQUU3RixPQUFPLEVBQUVqTTtVQUFTLENBQUMsQ0FBQztRQUM5RDtRQUNBLElBQUlpTCxpQkFBaUIsS0FBS3BOLGdCQUFnQixDQUFDOEIsS0FBSyxFQUFFO1VBQ2pELElBQUltUixXQUFXLEVBQUU7WUFDaEIsSUFBSTlRLFFBQVEsQ0FBQytSLGlCQUFpQixDQUFDLENBQUMsRUFBRTtjQUNqQy9SLFFBQVEsQ0FBQ2dPLFVBQVUsQ0FBQyxDQUFDLENBQUNnRSxZQUFZLENBQUMsQ0FBQztZQUNyQztZQUNBLE1BQU01QixLQUFLLENBQUM2QixXQUFXLENBQUNqUyxRQUFRLEVBQUUwRixjQUFjLEVBQUVqSCxZQUFZLENBQUM7VUFDaEUsQ0FBQyxNQUFNO1lBQ04sTUFBTXlULGVBQWUsR0FBR2xCLE1BQU0sQ0FBQ0csV0FBVyxDQUFDLEdBQUduUixRQUFRLENBQUNaLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUNnUyxlQUFlLENBQUMsQ0FBQztZQUNuRyxJQUFJO2NBQ0gsTUFBTWUsY0FBYyxHQUFHLE1BQU1ELGVBQWUsQ0FBQ0Usb0JBQW9CLENBQUMsQ0FBQztjQUNuRSxJQUFJcFMsUUFBUSxDQUFDK1IsaUJBQWlCLENBQUMsQ0FBQyxFQUFFO2dCQUNqQy9SLFFBQVEsQ0FBQ2dPLFVBQVUsQ0FBQyxDQUFDLENBQUNnRSxZQUFZLENBQUMsQ0FBQztjQUNyQztjQUNBZixhQUFhLEdBQUdELE1BQU0sQ0FBQ0csV0FBVyxDQUFDZ0IsY0FBYyxDQUFDLENBQUNmLGVBQWUsQ0FBQyxDQUFDO1lBQ3JFLENBQUMsU0FBUztjQUNULE1BQU1oQixLQUFLLENBQUM2QixXQUFXLENBQUNqUyxRQUFRLEVBQUUwRixjQUFjLEVBQUVqSCxZQUFZLENBQUM7WUFDaEU7VUFDRDtRQUNELENBQUMsTUFBTTtVQUNOLE1BQU00VCxnQkFBZ0IsR0FBRyxNQUFNOUIsTUFBTSxDQUFDK0IsZUFBZSxDQUFDdFMsUUFBUSxDQUFDO1VBQy9ELElBQUlxUyxnQkFBZ0IsRUFBRTtZQUNyQixJQUFJQSxnQkFBZ0IsQ0FBQ04saUJBQWlCLENBQUMsQ0FBQyxFQUFFO2NBQ3pDTSxnQkFBZ0IsQ0FBQ3JFLFVBQVUsQ0FBQyxDQUFDLENBQUNnRSxZQUFZLENBQUMsQ0FBQztZQUM3QztZQUNBLElBQUksQ0FBQ2xCLFdBQVcsRUFBRTtjQUNqQnVCLGdCQUFnQixDQUFDRSxPQUFPLENBQUMsQ0FBQztjQUMxQnRCLGFBQWEsR0FBR29CLGdCQUFnQjtZQUNqQztVQUNEO1FBQ0Q7O1FBRUE7UUFDQTNNLGNBQWMsQ0FBQ3dLLHdCQUF3QixDQUFDLENBQUM7UUFDekM7UUFDQSxNQUFNeEssY0FBYyxDQUFDZ0wsWUFBWSxDQUFDLENBQUM7UUFDbkMsT0FBT08sYUFBYTtNQUNyQixDQUFDLENBQUMsT0FBT1IsR0FBWSxFQUFFO1FBQ3RCLE1BQU0vSyxjQUFjLENBQUNnTCxZQUFZLENBQUMsQ0FBQztRQUNuQyxNQUFNRCxHQUFHO01BQ1YsQ0FBQyxTQUFTO1FBQ1QsSUFBSSxDQUFDM1IsVUFBVSxDQUFDTCxZQUFZLENBQUM7TUFDOUI7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVpDO0lBQUFILE1BQUEsQ0FhTWtVLFlBQVksR0FBbEIsZUFBTUEsWUFBWUEsQ0FDakJ2RyxPQUF1QixFQUN2QnhOLFlBQTBCLEVBQzFCZ0gsYUFBNEIsRUFDNUJnTix5QkFBa0MsRUFDbENDLHNCQUEwQyxFQUMxQ2hOLGNBQThCLEVBQzlCb0wsV0FBb0IsRUFFTTtNQUFBLElBRDFCNkIsbUJBQW1CLEdBQUFDLFNBQUEsQ0FBQW5TLE1BQUEsUUFBQW1TLFNBQUEsUUFBQTVRLFNBQUEsR0FBQTRRLFNBQUEsTUFBRyxLQUFLO01BRTNCLE1BQU0zSCxpQkFBaUIsR0FBRyxJQUFJLENBQUNqTSxtQkFBbUIsQ0FBQ2lOLE9BQU8sQ0FBQztNQUMzRCxJQUFJaEIsaUJBQWlCLEtBQUtwTixnQkFBZ0IsQ0FBQ2dDLE1BQU0sSUFBSW9MLGlCQUFpQixLQUFLcE4sZ0JBQWdCLENBQUM4QixLQUFLLEVBQUU7UUFDbEcsTUFBTSxJQUFJK0UsS0FBSyxDQUFDLHFFQUFxRSxDQUFDO01BQ3ZGO01BRUEsSUFBSTtRQUNILElBQUksQ0FBQ2xHLFFBQVEsQ0FBQ0MsWUFBWSxDQUFDO1FBQzNCLE1BQU1tTixhQUFhLEdBQUcsSUFBSSxDQUFDQyw0QkFBNEIsQ0FBQ0ksT0FBTyxDQUFDO1FBQ2hFLE1BQU00RyxlQUFlLEdBQ3BCNUgsaUJBQWlCLEtBQUtwTixnQkFBZ0IsQ0FBQzhCLEtBQUssR0FDekMsTUFBTXlRLEtBQUssQ0FBQzBDLGdCQUFnQixDQUFDN0csT0FBTyxFQUFFeE4sWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFaUgsY0FBYyxDQUFDLEdBQ3ZFLE1BQU02SyxNQUFNLENBQUN1QyxnQkFBZ0IsQ0FBQzdHLE9BQU8sRUFBRXhOLFlBQVksRUFBRWlILGNBQWMsQ0FBQztRQUV4RSxNQUFNcU4sZ0JBQWdCLEdBQUczRSxlQUFlLENBQUM0RSxXQUFXLENBQUMsQ0FBQyxDQUFDQyxNQUFNLENBQUM3RSxlQUFlLENBQUM0RSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUNMLG1CQUFtQixJQUFJLEVBQUVJLGdCQUFnQixDQUFDdFMsTUFBTSxLQUFLLENBQUMsSUFBSXNTLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDRyxPQUFPLENBQUMsQ0FBQyxLQUFLQyxXQUFXLENBQUNDLE9BQU8sQ0FBQyxFQUFFO1VBQ3RIO1VBQ0FDLFlBQVksQ0FBQzNHLElBQUksQ0FDaEJvRSxXQUFXLEdBQ1JyTCxhQUFhLENBQUNrSCxPQUFPLENBQUMscUNBQXFDLEVBQUUzSyxTQUFTLEVBQUU0SixhQUFhLENBQUMsR0FDdEZuRyxhQUFhLENBQUNrSCxPQUFPLENBQUMsbUNBQW1DLEVBQUUzSyxTQUFTLEVBQUU0SixhQUFhLENBQ3ZGLENBQUM7UUFDRjtRQUVBLE9BQU9pSCxlQUFlO01BQ3ZCLENBQUMsQ0FBQyxPQUFPcEMsR0FBWSxFQUFFO1FBQ3RCLElBQUlnQyx5QkFBeUIsSUFBSUMsc0JBQXNCLEVBQUVqUyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ3BFO1VBQ0FpUyxzQkFBc0IsQ0FBQ25JLE9BQU8sQ0FBRXRKLFdBQVcsSUFBSztZQUMvQyxJQUFJLENBQUM4RyxXQUFXLENBQUN1TCxtQkFBbUIsQ0FBQ3JTLFdBQVcsQ0FBQyxFQUFFO2NBQ2xEeEMsWUFBWSxDQUFDOFUscUJBQXFCLENBQUMsQ0FBQyxDQUFDQyx1Q0FBdUMsQ0FBQ3ZTLFdBQVcsQ0FBQzdCLE9BQU8sQ0FBQyxDQUFDLEVBQUU2TSxPQUFPLENBQUM7WUFDN0c7VUFDRCxDQUFDLENBQUM7UUFDSDtRQUNBLE1BQU12RyxjQUFjLENBQUNnTCxZQUFZLENBQUMsQ0FBQztRQUNuQyxNQUFNRCxHQUFHO01BQ1YsQ0FBQyxTQUFTO1FBQ1QsSUFBSSxDQUFDM1IsVUFBVSxDQUFDTCxZQUFZLENBQUM7TUFDOUI7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0ExQkM7SUFBQUgsTUFBQSxDQTJCTWtMLFVBQVUsR0FBaEIsZUFBTUEsVUFBVUEsQ0FDZmlLLFdBQW1CLEVBQ25CdlYsV0FtQkMsRUFDRE8sWUFBMEIsRUFDMUJpSCxjQUE4QixFQUNxQjtNQUNuRHhILFdBQVcsR0FBR0QsYUFBYSxDQUFDQyxXQUFXLENBQUM7TUFDeEMsSUFBSXdWLGdCQUFnQjtNQUNwQixJQUFJMUMsTUFBOEI7TUFDbEMsSUFBSSxDQUFDeUMsV0FBVyxFQUFFO1FBQ2pCLE1BQU0sSUFBSS9PLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQztNQUN6RDtNQUNBO01BQ0E7TUFDQTtNQUNBLE1BQU1pUCxLQUFLLEdBQUdGLFdBQVcsQ0FBQ0csS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUV2Q0YsZ0JBQWdCLEdBQUdDLEtBQUssR0FBRzNSLFNBQVMsR0FBRzlELFdBQVcsQ0FBQ3VMLFFBQVE7TUFDM0Q7TUFDQSxJQUFJaUssZ0JBQWdCLEtBQU10SSxLQUFLLENBQUNDLE9BQU8sQ0FBQ3FJLGdCQUFnQixDQUFDLElBQUlBLGdCQUFnQixDQUFDalQsTUFBTSxJQUFLLENBQUMySyxLQUFLLENBQUNDLE9BQU8sQ0FBQ3FJLGdCQUFnQixDQUFDLENBQUMsRUFBRTtRQUMzSEEsZ0JBQWdCLEdBQUd0SSxLQUFLLENBQUNDLE9BQU8sQ0FBQ3FJLGdCQUFnQixDQUFDLEdBQUdBLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHQSxnQkFBZ0I7UUFDM0YxQyxNQUFNLEdBQUcwQyxnQkFBZ0IsQ0FBQzdVLFFBQVEsQ0FBQyxDQUFDO01BQ3JDO01BQ0EsSUFBSVgsV0FBVyxDQUFDZ0QsS0FBSyxFQUFFO1FBQ3RCOFAsTUFBTSxHQUFHOVMsV0FBVyxDQUFDZ0QsS0FBSztNQUMzQjtNQUNBLElBQUksQ0FBQzhQLE1BQU0sRUFBRTtRQUNaLE1BQU0sSUFBSXRNLEtBQUssQ0FBQywyRUFBMkUsQ0FBQztNQUM3RjtNQUNBLElBQUk7UUFDSCxNQUFNNEIsT0FBTyxHQUFJcEksV0FBVyxDQUFDMlYsU0FBUyxHQUFHM1YsV0FBVyxDQUFDMkwsSUFBSSxDQUFDaUssSUFBSSxDQUFDNVYsV0FBVyxDQUFDMlYsU0FBUyxDQUFDLEdBQUczVixXQUFXLENBQUMyTCxJQUV4RjtRQUNaLElBQUlrSyxPQUFnRDtRQUNwRCxJQUFJTCxnQkFBZ0IsSUFBSXhWLFdBQVcsQ0FBQ3VMLFFBQVEsRUFBRTtVQUM3QyxNQUFNQSxRQUFRLEdBQUcyQixLQUFLLENBQUNDLE9BQU8sQ0FBQ25OLFdBQVcsQ0FBQ3VMLFFBQVEsQ0FBQyxHQUFHdkwsV0FBVyxDQUFDdUwsUUFBUSxHQUFHLENBQUN2TCxXQUFXLENBQUN1TCxRQUFRLENBQUMsQ0FBQyxDQUFDOztVQUV0RyxNQUFNbEssU0FBUyxHQUFHeVIsTUFBTSxDQUFDeFIsWUFBWSxDQUFDLENBQUM7WUFDdEN3VSxVQUFVLEdBQUcsR0FBR3pVLFNBQVMsQ0FBQ2dELFdBQVcsQ0FBQ2tILFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSXFVLFdBQVcsRUFBRTtZQUM3RVEsV0FBVyxHQUFHMVUsU0FBUyxDQUFDMlUsb0JBQW9CLENBQUMsR0FBR0YsVUFBVSxtQkFBbUIsQ0FBRTtVQUVoRixNQUFNRyxjQUFjLEdBQUdDLFlBQVksQ0FBQ3BELE1BQU0sQ0FBQ3hSLFlBQVksQ0FBQyxDQUFDLENBQUM7VUFDMUQsTUFBTTZVLGVBQWUsR0FBR0YsY0FBYyxDQUFDRyxXQUFXLENBQXdCTCxXQUFXLENBQUM3VSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNtVixNQUFNO1VBQ3ZHLElBQUksQ0FBQ0YsZUFBZSxFQUFFO1lBQ3JCLE1BQU0sSUFBSTNQLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztVQUN4QztVQUNBcVAsT0FBTyxHQUFHLE1BQU0sSUFBSVMsU0FBUyxDQUFDL1YsWUFBWSxFQUFFdVMsTUFBTSxFQUFFcUQsZUFBZSxFQUFFO1lBQ3BFSSxlQUFlLEVBQUV2VyxXQUFXLENBQUN1VyxlQUFzRjtZQUNuSGhMLFFBQVE7WUFDUmlMLGtCQUFrQixFQUFFeFcsV0FBVyxDQUFDd1csa0JBQWtCO1lBQ2xEL0ssS0FBSyxFQUFFekwsV0FBVyxDQUFDeUwsS0FBSztZQUN4QkksbUJBQW1CLEVBQUU3TCxXQUFXLENBQUM2TCxtQkFBbUI7WUFDcERaLGlCQUFpQixFQUFFakwsV0FBVyxDQUFDaUwsaUJBQWlCO1lBQ2hEeUMsYUFBYSxFQUFFMU4sV0FBVyxDQUFDME4sYUFBYTtZQUN4QytJLGVBQWUsRUFBRTtjQUNoQkMsNkJBQTZCLEVBQUUsSUFBSTtjQUNuQ0MsY0FBYyxFQUFFM1csV0FBVyxDQUFDNFcsZUFBZSxLQUFLLElBQUk7Y0FDcEQ3RSxPQUFPLEVBQUUvUixXQUFXLENBQUMrUixPQUFPO2NBQzVCOEUsVUFBVSxFQUFFN1csV0FBVyxDQUFDNlc7WUFDekIsQ0FBQztZQUNEQyxXQUFXLEVBQUU7Y0FDWkMsYUFBYSxFQUFFQSxDQUFBLEtBQVk7Z0JBQzFCdlAsY0FBYyxFQUFFd0ssd0JBQXdCLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDMVIsUUFBUSxDQUFDQyxZQUFZLENBQUM7Y0FDNUIsQ0FBQztjQUNEeVcsZUFBZSxFQUFFQSxDQUFBLEtBQVk7Z0JBQzVCLElBQUksQ0FBQ3BXLFVBQVUsQ0FBQ0wsWUFBWSxDQUFDO2NBQzlCLENBQUM7Y0FDRDBXLG9CQUFvQixFQUFFQSxDQUFBLEtBQVk7Z0JBQ2pDLElBQUksQ0FBQ0MsaUNBQWlDLENBQUM7a0JBQ3RDQyxvQkFBb0IsRUFBRW5YLFdBQVcsQ0FBQ21YLG9CQUFvQjtrQkFDdERDLHFCQUFxQixFQUFFcFgsV0FBVyxDQUFDb1gscUJBQXFCO2tCQUN4RGhQLE9BQU8sRUFBRUEsT0FBTztrQkFDaEJtRCxRQUFRO2tCQUNSNEs7Z0JBQ0QsQ0FBQyxDQUFDO2NBQ0g7WUFDRCxDQUFDO1lBQ0R4SyxJQUFJLEVBQUUzTCxXQUFXLENBQUMyTCxJQUFjO1lBQ2hDQyxjQUFjLEVBQUU1TCxXQUFXLENBQUM0TCxjQUFjO1lBQzFDcEUsY0FBYyxFQUFFQSxjQUFjO1lBQzlCNlAsOEJBQThCLEVBQUVyWCxXQUFXLENBQUNxWDtVQUM3QyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDLE1BQU07VUFDTnpCLE9BQU8sR0FBRyxNQUFNcFIsVUFBVSxDQUFDOFMsZ0JBQWdCLENBQUNoQyxXQUFXLEVBQUV6QyxNQUFNLEVBQUV2UyxZQUFZLEVBQUU7WUFDOUVnVyxlQUFlLEVBQUV2VyxXQUFXLENBQUN1VyxlQUFzRjtZQUNuSDlLLEtBQUssRUFBRXpMLFdBQVcsQ0FBQ3lMLEtBQUs7WUFDeEJJLG1CQUFtQixFQUFFN0wsV0FBVyxDQUFDNkwsbUJBQW1CO1lBQ3BEWixpQkFBaUIsRUFBRWpMLFdBQVcsQ0FBQ2lMLGlCQUFpQjtZQUNoRHlDLGFBQWEsRUFBRTFOLFdBQVcsQ0FBQzBOLGFBQWE7WUFDeENvSixXQUFXLEVBQUU7Y0FDWkMsYUFBYSxFQUFFQSxDQUFBLEtBQU07Z0JBQ3BCLElBQUksQ0FBQ3pXLFFBQVEsQ0FBQ0MsWUFBWSxDQUFDO2NBQzVCLENBQUM7Y0FDRHlXLGVBQWUsRUFBRUEsQ0FBQSxLQUFNO2dCQUN0QixJQUFJLENBQUNwVyxVQUFVLENBQUNMLFlBQVksQ0FBQztjQUM5QjtZQUNELENBQUM7WUFDRGtXLGVBQWUsRUFBRTtjQUNoQkksVUFBVSxFQUFFN1csV0FBVyxDQUFDNlc7WUFDekIsQ0FBQztZQUNEclAsY0FBYyxFQUFFQSxjQUFjO1lBQzlCbUUsSUFBSSxFQUFFM0wsV0FBVyxDQUFDMkw7VUFDbkIsQ0FBQyxDQUFDO1FBQ0g7UUFFQSxJQUFJbkUsY0FBYyxFQUFFO1VBQ25CLElBQUksQ0FBQ2dRLHFCQUFxQixDQUFDeFgsV0FBVyxFQUFFdVYsV0FBVyxDQUFDO1FBQ3JEO1FBQ0EsT0FBT00sT0FBTztNQUNmLENBQUMsQ0FBQyxPQUFPdEQsR0FBWSxFQUFFO1FBQ3RCLElBQUkvSyxjQUFjLEVBQUU7VUFDbkIsSUFBSSxDQUFDZ1EscUJBQXFCLENBQUN4WCxXQUFXLEVBQUV1VixXQUFXLENBQUM7UUFDckQ7UUFDQSxNQUFNaEQsR0FBRztNQUNWO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFuUyxNQUFBLENBS0F1Tiw0QkFBNEIsR0FBNUIsU0FBQUEsNEJBQTRCQSxDQUFDSSxPQUF1QixFQUFzQjtNQUN6RSxNQUFNOUssV0FBVyxHQUFHOEssT0FBTyxDQUFDcE4sUUFBUSxDQUFDLENBQUMsQ0FBQ1csWUFBWSxDQUFDLENBQUMsQ0FBQzRCLGNBQWMsQ0FBQzZLLE9BQU8sQ0FBQzdNLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDdkYsT0FBUWtDLGtCQUFrQixDQUFDQywyQkFBMkIsQ0FBQ0osV0FBVyxDQUFDLENBQUNNLFlBQVksRUFDN0VrVSxJQUFJO0lBQ1IsQ0FBQztJQUFBclgsTUFBQSxDQUVEOFcsaUNBQWlDLEdBQWpDLFNBQUFBLGlDQUFpQ0EsQ0FBQ3ZQLFVBTWpDLEVBQVE7TUFDUixJQUFJQSxVQUFVLENBQUN3UCxvQkFBb0IsSUFBSXhQLFVBQVUsQ0FBQ3lQLHFCQUFxQixFQUFFO1FBQ3hFLElBQUkvSixnQkFBa0MsR0FBRyxFQUFFO1FBQzNDO1FBQ0EsSUFBSSxDQUFDcUssWUFBWSxDQUFDQyxjQUFjLENBQUNoUSxVQUFVLENBQUN3TyxlQUFlLENBQUMsRUFBRTtVQUM3RDlJLGdCQUFnQixHQUFHMUYsVUFBVSxDQUFDd1Asb0JBQW9CLENBQUNTLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7VUFDeEZDLGFBQWEsQ0FBQ0MsbUJBQW1CLENBQ2hDblEsVUFBVSxDQUFDd1Asb0JBQW9CLEVBQy9CWSxJQUFJLENBQUNDLEtBQUssQ0FBQ3JRLFVBQVUsQ0FBQ3lQLHFCQUFxQixDQUFDLEVBQzVDL0osZ0JBQWdCLEVBQ2hCLE9BQ0QsQ0FBQztRQUNGLENBQUMsTUFBTSxJQUFJMUYsVUFBVSxDQUFDUyxPQUFPLEVBQUU7VUFDOUIsSUFBSVQsVUFBVSxDQUFDUyxPQUFPLENBQUNuSCxHQUFHLENBQVEsa0JBQWtCLENBQUMsRUFBRTtZQUN0RG9NLGdCQUFnQixHQUFHMUYsVUFBVSxDQUFDUyxPQUFPLENBQUM2UCxtQkFBbUIsQ0FBQyxDQUFxQjtZQUMvRUosYUFBYSxDQUFDQyxtQkFBbUIsQ0FDaENuUSxVQUFVLENBQUN3UCxvQkFBb0IsRUFDL0JZLElBQUksQ0FBQ0MsS0FBSyxDQUFDclEsVUFBVSxDQUFDeVAscUJBQXFCLENBQUMsRUFDNUMvSixnQkFBZ0IsRUFDaEIsT0FDRCxDQUFDO1VBQ0Y7UUFDRDtRQUNBO1FBQ0F4TixZQUFZLENBQUNxWSxtQ0FBbUMsQ0FBQ3ZRLFVBQVUsQ0FBQ3dQLG9CQUFvQixFQUFFOUosZ0JBQWdCLENBQUM7TUFDcEc7SUFDRCxDQUFDO0lBQUFqTixNQUFBLENBRURvWCxxQkFBcUIsR0FBckIsU0FBQUEscUJBQXFCQSxDQUNwQnhYLFdBR0MsRUFDRHVWLFdBQW1CLEVBQ1o7TUFDUCxNQUFNNEMsa0JBQWtCLEdBQUdqSSxlQUFlLENBQUM0RSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztNQUNsRSxJQUFJcUQsa0JBQWtCLENBQUM1VixNQUFNLEdBQUcsQ0FBQyxJQUFJdkMsV0FBVyxJQUFJQSxXQUFXLENBQUNtWCxvQkFBb0IsRUFBRTtRQUNyRm5YLFdBQVcsQ0FBQ21YLG9CQUFvQixDQUFDaUIsV0FBVyxDQUFDLGFBQWEsRUFBRXBZLFdBQVcsQ0FBQ3lMLEtBQUssR0FBR3pMLFdBQVcsQ0FBQ3lMLEtBQUssR0FBRzhKLFdBQVcsQ0FBQztNQUNqSDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQW5WLE1BQUEsQ0FJQWlZLHFCQUFxQixHQUFyQixTQUFBQSxxQkFBcUJBLENBQUEsRUFBUztNQUM3QixNQUFNQyxhQUFhLEdBQUdDLFNBQVMsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FDL0NDLE9BQU8sQ0FBQyxDQUFDLENBQ1R2UixNQUFNLENBQUVxQixLQUFjLElBQUtBLEtBQUssQ0FBQ21RLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFDaERILFNBQVMsQ0FBQ0ksY0FBYyxDQUFDTCxhQUFhLENBQUM7SUFDeEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFsWSxNQUFBLENBS0F3WSxjQUFjLEdBQWQsU0FBQUEsY0FBY0EsQ0FBQ0MsUUFBMkIsRUFBVztNQUNwRCxPQUFPLElBQUlDLE9BQU8sQ0FBQ0QsUUFBUSxDQUFDO0lBQzdCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBelksTUFBQSxDQVFNb1QsZUFBZSxHQUFyQixlQUFNQSxlQUFlQSxDQUFDQyxZQUFvQixFQUFFc0YsVUFBbUIsRUFBRXhSLGFBQTRCLEVBQWlCO01BQzdHO01BQ0EsSUFBSSxDQUFDd1IsVUFBVSxFQUFFO1FBQ2hCLElBQUksQ0FBQ1YscUJBQXFCLENBQUMsQ0FBQztRQUM1QixPQUFPelYsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUN6QjtNQUVBNFEsWUFBWSxDQUFDdUYsVUFBVSxDQUFDLEtBQUssQ0FBQztNQUM5QixPQUFPLElBQUlwVyxPQUFPLENBQU8sQ0FBQ0MsT0FBTyxFQUFFeUssTUFBTSxLQUFLO1FBQzdDLE1BQU0yTCxtQkFBbUIsR0FBRyxJQUFJLENBQUNMLGNBQWMsQ0FBQztVQUMvQ00sVUFBVSxFQUFFLEtBQUs7VUFDakJDLFNBQVMsRUFBRTtRQUNaLENBQUMsQ0FBQztRQUNGRixtQkFBbUIsQ0FBQ3ZJLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQzs7UUFFeEQ7UUFDQSxNQUFNaEMsS0FBSyxHQUFHLElBQUkwSyxJQUFJLENBQUM7VUFDdEJuSyxJQUFJLEVBQUUxSCxhQUFhLENBQUNrSCxPQUFPLENBQUMsNENBQTRDO1FBQ3pFLENBQUMsQ0FBQztRQUNGLE1BQU00SyxhQUFhLEdBQUcsSUFBSTdILE1BQU0sQ0FBQztVQUNoQ3ZDLElBQUksRUFBRTFILGFBQWEsQ0FBQ2tILE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQztVQUN4RTZLLEtBQUssRUFBRSxNQUFNO1VBQ2I3SCxLQUFLLEVBQUVBLENBQUEsS0FBWTtZQUNsQixJQUFJLENBQUM0RyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzVCWSxtQkFBbUIsQ0FBQ3hXLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7WUFDakR3VyxtQkFBbUIsQ0FBQ3ZILEtBQUssQ0FBQyxDQUFDO1VBQzVCO1FBQ0QsQ0FBQyxDQUFDO1FBQ0Z1SCxtQkFBbUIsQ0FBQ00sVUFBVSxDQUFDLElBQUl4SSxJQUFJLENBQUM7VUFBRXZELEtBQUssRUFBRSxDQUFDa0IsS0FBSyxFQUFFMkssYUFBYTtRQUFFLENBQUMsQ0FBQyxDQUFDOztRQUUzRTtRQUNBSixtQkFBbUIsQ0FBQ08sZ0JBQWdCLENBQUMsTUFBTTtVQUMxQ1AsbUJBQW1CLENBQUNRLGVBQWUsQ0FBQ0osYUFBYSxDQUFDO1FBQ25ELENBQUMsQ0FBQztRQUNGSixtQkFBbUIsQ0FBQ1MsZ0JBQWdCLENBQUMsTUFBTTtVQUMxQ2pHLFlBQVksQ0FBQ3VGLFVBQVUsQ0FBQyxJQUFJLENBQUM7VUFDN0IsSUFBSUMsbUJBQW1CLENBQUN4VyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUNoREksT0FBTyxDQUFDLENBQUM7VUFDVixDQUFDLE1BQU07WUFDTnlLLE1BQU0sQ0FBQyxDQUFDO1VBQ1Q7UUFDRCxDQUFDLENBQUM7UUFFRjJMLG1CQUFtQixDQUFDVSxNQUFNLENBQUNsRyxZQUFZLEVBQUUsS0FBSyxDQUFDO01BQ2hELENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFyVCxNQUFBLENBTU13WixrQkFBa0IsR0FBeEIsZUFBTUEsa0JBQWtCQSxDQUFDN1csV0FBNkIsRUFBRXhDLFlBQTBCLEVBQWlCO01BQ2xHLElBQUk7UUFDSCxJQUFJd0MsV0FBVyxDQUFDOFcsTUFBTSxDQUFDLENBQUMsRUFBRTtVQUN6QixJQUFJLElBQUksQ0FBQy9VLHlCQUF5QixDQUFDL0IsV0FBVyxDQUFDLEVBQUU7WUFDaEQ7WUFDQSxNQUFNeEMsWUFBWSxDQUNoQjhVLHFCQUFxQixDQUFDLENBQUMsQ0FDdkJ5RSxrQkFBa0IsQ0FBQyxDQUFDO2NBQUVDLHVCQUF1QixFQUFFO1lBQUcsQ0FBQyxDQUFDLEVBQUVoWCxXQUFXLENBQUNvQixnQkFBZ0IsQ0FBQyxDQUFFLENBQUM7VUFDekYsQ0FBQyxNQUFNO1lBQ04sTUFBTXBCLFdBQVcsQ0FBQ2lYLGNBQWMsQ0FBQyxDQUFDO1VBQ25DO1FBQ0QsQ0FBQyxNQUFNO1VBQ04sTUFBTXpaLFlBQVksQ0FDaEI4VSxxQkFBcUIsQ0FBQyxDQUFDLENBQ3ZCeUUsa0JBQWtCLENBQUMsQ0FBQztZQUFFQyx1QkFBdUIsRUFBRWhYLFdBQVcsQ0FBQzdCLE9BQU8sQ0FBQztVQUFFLENBQUMsQ0FBQyxFQUFFNkIsV0FBVyxDQUFDbUIsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNyRztNQUNELENBQUMsQ0FBQyxPQUFPcUUsS0FBSyxFQUFFO1FBQ2ZnQixHQUFHLENBQUNoQixLQUFLLENBQUMsdUNBQXVDeEYsV0FBVyxDQUFDN0IsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFcUgsS0FBZSxDQUFDO01BQzNGO0lBQ0QsQ0FBQztJQUFBbkksTUFBQSxDQUVLbU0sZ0JBQWdCLEdBQXRCLGVBQU1BLGdCQUFnQkEsQ0FDckJ4SixXQUE2QixFQUM3QmtYLFVBQW9CLEVBQ3BCdFMsVUFZQyxFQUNEcEgsWUFBMEIsRUFDMUJnSCxhQUE0QixFQUM1QkMsY0FBOEIsRUFDSjtNQUMxQixNQUFNeEUsS0FBSyxHQUFHRCxXQUFXLENBQUNwQyxRQUFRLENBQUMsQ0FBZTtNQUNsRCxNQUFNVSxTQUFTLEdBQUcyQixLQUFLLENBQUMxQixZQUFZLENBQUMsQ0FBQztNQUN0QyxNQUFNNFksWUFBWSxHQUFHN1ksU0FBUyxDQUFDZ0QsV0FBVyxDQUFDdEIsV0FBVyxDQUFDM0IsZUFBZSxDQUFDLENBQUUsQ0FBQzs7TUFFMUU7TUFDQSxNQUFNK1ksb0JBQW9CLEdBQUduWCxLQUFLLENBQUM2QyxRQUFRLENBQUM5QyxXQUFXLENBQUM3QixPQUFPLENBQUMsQ0FBQyxFQUFFNkIsV0FBVyxDQUFDbUIsVUFBVSxDQUFDLENBQUMsRUFBRUosU0FBUyxFQUFFQSxTQUFTLEVBQUU7UUFDbEhrQyxlQUFlLEVBQUU7TUFDbEIsQ0FBQyxDQUFDO01BQ0ZtVSxvQkFBb0IsQ0FBQ0MsZUFBZSxHQUFHLFlBQWtCO1FBQ3hEO01BQUEsQ0FDQTtNQUNELE1BQU1DLGdCQUFnQixHQUFHRixvQkFBb0IsQ0FBQ3pULE1BQU0sQ0FBQ2lCLFVBQVUsQ0FBQ2xGLElBQUksRUFBRSxJQUFJLENBQUM7TUFDM0UsTUFBTTZYLGlCQUFpQixHQUFHTCxVQUFVLENBQUMvUSxHQUFHLENBQUV1TyxJQUFJLElBQUs7UUFDbEQsT0FBT3BXLFNBQVMsQ0FBQzJVLG9CQUFvQixDQUFDLEdBQUdrRSxZQUFZLElBQUl6QyxJQUFJLEVBQUUsQ0FBQztNQUNqRSxDQUFDLENBQUM7TUFFRixNQUFNOEMsWUFBWSxHQUFHQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FDdERKLGdCQUFnQixFQUNoQkosVUFBVSxFQUNWMVosWUFBWSxFQUNab0gsVUFBVSxDQUFDcUUsWUFBWSxLQUFLdk0sWUFBWSxDQUFDMk0sY0FBYyxHQUFHLFlBQVksR0FBRyxnQkFBZ0IsRUFDekZ6RSxVQUFVLENBQUNVLGFBQ1osQ0FBQztNQUVELElBQUk7UUFDSCxNQUFNd0IsV0FBVyxDQUFDNlEsZUFBZSxDQUNoQ25hLFlBQVksRUFDWitaLGlCQUFpQixFQUNqQkQsZ0JBQWdCLEVBQ2hCLEtBQUssRUFDTDFTLFVBQVUsQ0FBQ2dULFlBQVksRUFDdkJoVCxVQUFVLENBQUNsRixJQUNaLENBQUM7UUFDRDhYLFlBQVksQ0FBQ0ssVUFBVSxDQUFDLENBQUM7TUFDMUIsQ0FBQyxDQUFDLE9BQU9DLENBQUMsRUFBRTtRQUNYLE1BQU1yVCxjQUFjLENBQUNnTCxZQUFZLENBQUMsQ0FBQztRQUNuQyxNQUFNcUksQ0FBQztNQUNSO01BRUEsTUFBTUMsbUJBQW1CLEdBQUcsSUFBSUMsYUFBYSxDQUFpQixDQUFDO01BRS9ELE1BQU1DLFlBQVksR0FBRyxNQUFPQyxLQUFzQixJQUFvQjtRQUNyRSxJQUFJLENBQUNBLEtBQUssQ0FBQ0MsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQ2xDO1VBQ0FmLG9CQUFvQixDQUFDdEksT0FBTyxDQUFDLENBQUM7VUFDOUIwSSxZQUFZLENBQUNZLFdBQVcsQ0FBQyxDQUFDO1VBQzFCTCxtQkFBbUIsQ0FBQ3hOLE1BQU0sQ0FBQzVOLFNBQVMsQ0FBQzhJLFNBQVMsQ0FBQ0Usa0JBQWtCLENBQUM7VUFDbEU7UUFDRDtRQUVBNlIsWUFBWSxDQUFDYSxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQzFCelQsVUFBVSxDQUFDMFQsZUFBZSxHQUFHLElBQUk7UUFDakMsSUFBSTtVQUNILE1BQU1DLGFBQWEsR0FBR2pCLGdCQUFnQixDQUFDeFYsU0FBUyxDQUFDLENBQUM7VUFDbEQsSUFBSWlDLFVBQW1DLEdBQUcsQ0FBQyxDQUFDO1VBQzVDbkIsTUFBTSxDQUFDNFYsSUFBSSxDQUFDRCxhQUFhLENBQUMsQ0FBQ2pQLE9BQU8sQ0FBRW1QLFlBQVksSUFBSztZQUNwRCxNQUFNQyxTQUFTLEdBQUdwYSxTQUFTLENBQUN3RCxTQUFTLENBQUMsR0FBR3FWLFlBQVksSUFBSXNCLFlBQVksRUFBRSxDQUFDO1lBQ3hFO1lBQ0E7WUFDQSxJQUFJQyxTQUFTLElBQUlBLFNBQVMsQ0FBQ0MsS0FBSyxLQUFLLG9CQUFvQixJQUFJLENBQUNGLFlBQVksRUFBRUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2NBQ2hHN1UsVUFBVSxDQUFDMFUsWUFBWSxDQUFDLEdBQUdGLGFBQWEsQ0FBQ0UsWUFBWSxDQUFDO1lBQ3ZEO1VBQ0QsQ0FBQyxDQUFDO1VBRUYsSUFBSTdULFVBQVUsQ0FBQ0csb0JBQW9CLEVBQUU7WUFDcEM7WUFDQSxNQUFNOFQsaUJBQWlCLEdBQUdqVyxNQUFNLENBQUNzRCxPQUFPLENBQUNuQyxVQUFVLENBQUMsQ0FBQ29DLEdBQUcsQ0FBQzJTLEtBQUE7Y0FBQSxJQUFDLENBQUN6UyxHQUFHLEVBQUU3QyxLQUFLLENBQUMsR0FBQXNWLEtBQUE7Y0FBQSxPQUFNO2dCQUFFLENBQUN6UyxHQUFHLEdBQUc3QztjQUFNLENBQUM7WUFBQSxDQUFDLENBQUM7WUFDOUYsSUFBSTtjQUNILE1BQU04QyxZQUFZLENBQ2pCMUIsVUFBVSxDQUFDRyxvQkFBb0IsQ0FBQztnQkFDL0J3QixXQUFXLEVBQUV2RyxXQUFXLENBQUM3QixPQUFPLENBQUMsQ0FBQztnQkFDbEM4SCxnQkFBZ0IsRUFBRTRTO2NBQ25CLENBQUMsQ0FDRixDQUFDO1lBQ0YsQ0FBQyxDQUFDLE9BQU9yVCxLQUFLLEVBQUU7Y0FDZmdCLEdBQUcsQ0FBQ2hCLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRUEsS0FBZSxDQUFDO2NBQ25FLE1BQU03SSxTQUFTLENBQUM4SSxTQUFTLENBQUNnQixvQkFBb0I7WUFDL0M7WUFDQTFDLFVBQVUsR0FBRzhVLGlCQUFpQixDQUFDblMsTUFBTSxDQUFDLENBQUNDLE1BQU0sRUFBRUMsYUFBYSxLQUFLO2NBQ2hFLE9BQU87Z0JBQUUsR0FBR0QsTUFBTTtnQkFBRSxHQUFHQztjQUFjLENBQUM7WUFDdkMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQ1A7VUFDQSxJQUFJaEUsTUFBTSxDQUFDNFYsSUFBSSxDQUFDelUsVUFBVSxDQUFDLENBQUN2RSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDaEMsWUFBWSxDQUFDSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUN5WCxXQUFXLENBQUMwRCxnQkFBZ0IsQ0FBQ0MsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO1VBQ2pGO1VBQ0EsTUFBTUMsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDN1csYUFBYSxDQUFDcEMsV0FBVyxFQUFFK0QsVUFBVSxFQUFFO1lBQ3BFSCxXQUFXLEVBQUVnQixVQUFVLENBQUNoQixXQUFXO1lBQ25DQyxjQUFjLEVBQUVlLFVBQVUsQ0FBQ0ksUUFBUTtZQUNuQ3ZDLGFBQWEsRUFBRW1DLFVBQVUsQ0FBQ25DO1VBQzNCLENBQUMsQ0FBQztVQUVGLE1BQU15VyxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUN6UCx1QkFBdUIsQ0FBQ3dQLFVBQVUsRUFBRXJVLFVBQVUsQ0FBQzhFLDRCQUE0QixLQUFLLElBQUksQ0FBQztVQUN4SCxJQUFJd1AsZUFBZSxFQUFFO1lBQ3BCLElBQUk7Y0FDSCxNQUFNdFUsVUFBVSxDQUFDdVUsbUJBQW1CLEdBQUdGLFVBQVUsQ0FBQztZQUNuRCxDQUFDLENBQUMsT0FBT3pULEtBQUssRUFBRTtjQUNmZ1MsWUFBWSxDQUFDNEIsb0JBQW9CLENBQUM1RCxTQUFTLENBQUNDLGVBQWUsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Y0FDeEUsTUFBTWpSLGNBQWMsQ0FBQ1csaUJBQWlCLENBQUM7Z0JBQUVpVSxzQkFBc0IsRUFBRTtjQUFLLENBQUMsQ0FBQzs7Y0FFeEU7Y0FDQSxNQUFNLElBQUksQ0FBQ3BQLGNBQWMsQ0FBQ2dQLFVBQVUsRUFBRTtnQkFBRXZMLFVBQVUsRUFBRTtjQUFLLENBQUMsRUFBRWxRLFlBQVksRUFBRWdILGFBQWEsRUFBRUMsY0FBYyxDQUFDO2NBQ3hHLE1BQU0sSUFBSSxDQUFDb1Msa0JBQWtCLENBQUM3VyxXQUFXLEVBQUV4QyxZQUFZLENBQUM7Y0FFeERnSixHQUFHLENBQUNoQixLQUFLLENBQUMsOENBQThDLEVBQUVBLEtBQWUsQ0FBQztjQUMxRSxNQUFNN0ksU0FBUyxDQUFDOEksU0FBUyxDQUFDNlQsY0FBYztZQUN6QztZQUVBbEMsb0JBQW9CLENBQUN0SSxPQUFPLENBQUMsQ0FBQztZQUM5QjBJLFlBQVksQ0FBQ1ksV0FBVyxDQUFDLENBQUM7WUFDMUJMLG1CQUFtQixDQUFDalksT0FBTyxDQUFDbVosVUFBVSxDQUFDO1VBQ3hDO1FBQ0QsQ0FBQyxDQUFDLE9BQU96VCxLQUFjLEVBQUU7VUFDeEI7VUFDQSxJQUFJLENBQUMsQ0FBQzdJLFNBQVMsQ0FBQzhJLFNBQVMsQ0FBQ2dCLG9CQUFvQixFQUFFOUosU0FBUyxDQUFDOEksU0FBUyxDQUFDNlQsY0FBYyxDQUFDLENBQUMvUCxRQUFRLENBQUMvRCxLQUFLLENBQUMsRUFBRTtZQUNwRztZQUNBNFIsb0JBQW9CLENBQUN0SSxPQUFPLENBQUMsQ0FBQztZQUM5QjBJLFlBQVksQ0FBQ1ksV0FBVyxDQUFDLENBQUM7WUFDMUJMLG1CQUFtQixDQUFDeE4sTUFBTSxDQUFDL0UsS0FBdUIsQ0FBQztVQUNwRDtRQUNELENBQUMsU0FBUztVQUNUZ1MsWUFBWSxDQUFDYSxPQUFPLENBQUMsS0FBSyxDQUFDO1VBQzNCNVQsY0FBYyxDQUFDZ0wsWUFBWSxDQUFDO1lBQUU4SixxQkFBcUIsRUFBRS9CLFlBQVksQ0FBQ2dDLE1BQU0sQ0FBQztVQUFFLENBQUMsQ0FBQztRQUM5RTtNQUNELENBQUM7TUFFRGhDLFlBQVksQ0FBQ2lDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFeEIsWUFBWSxDQUFDO01BRS9DLE9BQU9GLG1CQUFtQixDQUFDMkIsT0FBTztJQUNuQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBcmMsTUFBQSxDQU1Nb00sdUJBQXVCLEdBQTdCLGVBQU1BLHVCQUF1QkEsQ0FBQ3dQLFVBQTBCLEVBQUV2UCw0QkFBcUMsRUFBb0I7TUFDbEgsTUFBTWlRLGFBQWEsR0FBRyxJQUFJM0IsYUFBYSxDQUFVLENBQUM7TUFDbEQsTUFBTTRCLGlCQUFpQixHQUFHWCxVQUFVLENBQUNsTSxVQUFVLENBQUMsQ0FBcUI7TUFFckUsTUFBTThNLGlCQUFpQixHQUFJM0IsS0FBNEMsSUFBVztRQUNqRixNQUFNNEIsY0FBYyxHQUFHNUIsS0FBSyxDQUFDQyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQ3BELE1BQU00QixPQUFPLEdBQUc3QixLQUFLLENBQUNDLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDN0MsSUFBSTJCLGNBQWMsS0FBS2IsVUFBVSxFQUFFO1VBQ2xDVyxpQkFBaUIsQ0FBQ0kscUJBQXFCLENBQUNILGlCQUFpQixDQUFDO1VBQzFERixhQUFhLENBQUM3WixPQUFPLENBQUNpYSxPQUFPLEtBQUssSUFBSSxDQUFDO1FBQ3hDO01BQ0QsQ0FBQztNQUVESCxpQkFBaUIsQ0FBQ0sscUJBQXFCLENBQUNKLGlCQUFpQixDQUFDO01BRTFELE1BQU1LLGtCQUFrQixHQUFHLE1BQU1QLGFBQWEsQ0FBQ0QsT0FBTztNQUN0RCxJQUFJLENBQUNRLGtCQUFrQixFQUFFO1FBQ3hCLElBQUksQ0FBQ3hRLDRCQUE0QixFQUFFO1VBQ2xDO1VBQ0EsQ0FBQ3VQLFVBQVUsQ0FBQ2tCLE9BQU8sQ0FBQyxDQUFDLElBQUl0YSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLEVBQUVzYSxLQUFLLENBQUMsVUFBVUMsWUFBcUIsRUFBRTtZQUNsRjdULEdBQUcsQ0FBQzhULEtBQUssQ0FBQywyQ0FBMkMsRUFBRUQsWUFBc0IsQ0FBQztVQUMvRSxDQUFDLENBQUM7VUFDRlQsaUJBQWlCLENBQUM3SSxZQUFZLENBQUMsQ0FBQztVQUNoQzZJLGlCQUFpQixDQUFDaGMsUUFBUSxDQUFDLENBQUMsQ0FBQ21ULFlBQVksQ0FBQzZJLGlCQUFpQixDQUFDMVcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1VBQy9FLE1BQU12RyxTQUFTLENBQUM4SSxTQUFTLENBQUM2VCxjQUFjO1FBQ3pDO1FBQ0EsT0FBTyxLQUFLO01BQ2IsQ0FBQyxNQUFNO1FBQ04sTUFBTUwsVUFBVSxDQUFDa0IsT0FBTyxDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJO01BQ1o7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVRDO0lBQUE5YyxNQUFBLENBVUFtSyxhQUFhLEdBQWIsU0FBQUEsYUFBYUEsQ0FDWitTLGtCQUVDLEVBQ0RDLFdBQW1CLEVBQ25CQyxVQUEwQixFQUMxQkMsU0FBaUIsRUFDUjtNQUNULElBQUlDLFVBQVU7TUFFZCxJQUFJSixrQkFBa0IsSUFBSUEsa0JBQWtCLENBQUNLLGFBQWEsSUFBSUosV0FBVyxDQUFDSyxXQUFXLENBQUMsQ0FBQyxDQUFDdFIsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7UUFDeEgsTUFBTXVSLGNBQWMsR0FBR1Asa0JBQWtCLENBQUNLLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDMURELFVBQVUsR0FBR0csY0FBYyxDQUFDRCxXQUFXLENBQUMsQ0FBQyxDQUFDdFIsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUM5RHVSLGNBQWMsQ0FBQzFiLFNBQVMsQ0FBQzBiLGNBQWMsQ0FBQ3piLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDN0QwQixTQUFTO01BQ2IsQ0FBQyxNQUFNLElBQ053WixrQkFBa0IsSUFDbEJBLGtCQUFrQixDQUFDSyxhQUFhLElBQ2hDSixXQUFXLENBQUNLLFdBQVcsQ0FBQyxDQUFDLENBQUN0UixRQUFRLENBQUMseUJBQXlCLENBQUMsRUFDNUQ7UUFDRCxNQUFNdVIsY0FBYyxHQUFHUCxrQkFBa0IsQ0FBQ0ssYUFBYSxDQUFDLENBQUMsQ0FBQztRQUMxREQsVUFBVSxHQUFHRyxjQUFjLENBQUNELFdBQVcsQ0FBQyxDQUFDLENBQUN0UixRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FDbEV1UixjQUFjLENBQUMxYixTQUFTLENBQUMwYixjQUFjLENBQUN6YixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQzdEMEIsU0FBUztNQUNiLENBQUMsTUFBTTtRQUNONFosVUFBVSxHQUNURixVQUFVLElBQUlBLFVBQVUsQ0FBQzNZLFNBQVMsS0FBS2YsU0FBUyxHQUM3QzBaLFVBQVUsQ0FBQzNZLFNBQVMsQ0FBQyxHQUFHNFksU0FBUyxtRUFBbUUsQ0FBQyxJQUNyR0QsVUFBVSxDQUFDM1ksU0FBUyxDQUFDLEdBQUc0WSxTQUFTLHFEQUFxRCxDQUFDLEdBQ3ZGM1osU0FBUztNQUNkO01BQ0EsT0FBTzRaLFVBQVU7SUFDbEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQWJDO0lBQUF0ZCxNQUFBLENBY0FzTCxtQ0FBbUMsR0FBbkMsU0FBQUEsbUNBQW1DQSxDQUNsQzhSLFVBQXNDLEVBQ3RDQyxTQUFpQixFQUNqQkMsVUFBa0IsRUFDbEJuVyxhQUF3QyxFQUNuQjtNQUNyQixNQUFNdVcsU0FBUyxHQUFHTixVQUFVLEVBQUUzWSxTQUFTLENBQUMsR0FBRzRZLFNBQVMsdUNBQXVDLENBQXlCO01BRXBILE1BQU1oUyxLQUFLLEdBQUdxUyxTQUFTLEVBQUVoUSxJQUFJLENBQUVpUSxRQUFRLElBQUtDLG9CQUFvQixDQUFDRCxRQUFRLENBQUMsSUFBSUEsUUFBUSxDQUFDRSxNQUFNLENBQUN2SSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLZ0ksVUFBVSxDQUFDLEVBQzNIUSxLQUFLO01BRVIsT0FDQ3pTLEtBQUssSUFDTCtSLFVBQVUsRUFBRTNZLFNBQVMsQ0FBQyxHQUFHNFksU0FBUyxJQUFJQyxVQUFVLHVDQUF1QyxDQUFDLElBQ3hGblcsYUFBYSxFQUFFa0gsT0FBTyxDQUFDLDBDQUEwQyxDQUFDO0lBRXBFLENBQUM7SUFBQSxPQUFBdE8saUJBQUE7RUFBQTtFQUdGLE1BQU1nZSxTQUFTLEdBQUcsSUFBSWhlLGlCQUFpQixDQUFDLENBQUM7RUFBQyxPQUMzQmdlLFNBQVM7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|