@sapui5/sap.fe.core 1.136.1 → 1.138.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 +76 -28
- package/src/sap/fe/core/ActionRuntime.ts +106 -30
- package/src/sap/fe/core/AppComponent.js +11 -1
- package/src/sap/fe/core/AppComponent.ts +10 -0
- package/src/sap/fe/core/AppStateHandler.js +9 -2
- package/src/sap/fe/core/AppStateHandler.ts +8 -2
- package/src/sap/fe/core/CommonUtils.js +15 -3
- package/src/sap/fe/core/CommonUtils.ts +13 -2
- package/src/sap/fe/core/PageController.controller.js +10 -0
- package/src/sap/fe/core/PageController.controller.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -4
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +2 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -12
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -16
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +27 -41
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +27 -41
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +22 -15
- package/src/sap/fe/core/controllerextensions/Paginator.js +20 -5
- package/src/sap/fe/core/controllerextensions/Paginator.ts +19 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -2
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +9 -5
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.tsx +8 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +4 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +178 -125
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +222 -174
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +5 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +39 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +51 -11
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +16 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +17 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +88 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +106 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +16 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +15 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +25 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +24 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +11 -8
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +13 -10
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -4
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +7 -3
- package/src/sap/fe/core/controls/DataWatcher.js +2 -2
- package/src/sap/fe/core/controls/DataWatcher.tsx +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +11 -6
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +13 -9
- package/src/sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/{BeforeNavigationDialog.tsx → InlineEditExitDialog.tsx} +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +3 -2
- package/src/sap/fe/core/converters/MetaModelConverter.ts +12 -4
- package/src/sap/fe/core/converters/controls/Common/Action.js +42 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +42 -5
- package/src/sap/fe/core/converters/controls/Common/Chart.js +4 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +46 -13
- package/src/sap/fe/core/converters/controls/Common/Table.ts +50 -11
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +11 -10
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +13 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +2 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +9 -9
- package/src/sap/fe/core/helpers/DeleteHelper.ts +8 -9
- package/src/sap/fe/core/helpers/FPMHelper.js +2 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +4 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +8 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +2 -2
- package/src/sap/fe/core/helpers/PasteHelper.ts +1 -1
- package/src/sap/fe/core/library.js +33 -4
- package/src/sap/fe/core/library.ts +33 -2
- package/src/sap/fe/core/messagebundle.properties +18 -2
- package/src/sap/fe/core/messagebundle_ar.properties +3 -2
- package/src/sap/fe/core/messagebundle_bg.properties +2 -1
- package/src/sap/fe/core/messagebundle_ca.properties +2 -1
- package/src/sap/fe/core/messagebundle_cnr.properties +2 -1
- package/src/sap/fe/core/messagebundle_cs.properties +4 -3
- package/src/sap/fe/core/messagebundle_cy.properties +2 -1
- package/src/sap/fe/core/messagebundle_da.properties +2 -1
- package/src/sap/fe/core/messagebundle_de.properties +8 -7
- package/src/sap/fe/core/messagebundle_el.properties +2 -1
- package/src/sap/fe/core/messagebundle_en.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -1
- package/src/sap/fe/core/messagebundle_es.properties +5 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
- package/src/sap/fe/core/messagebundle_et.properties +2 -1
- package/src/sap/fe/core/messagebundle_fi.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -1
- package/src/sap/fe/core/messagebundle_hr.properties +2 -1
- package/src/sap/fe/core/messagebundle_hu.properties +2 -1
- package/src/sap/fe/core/messagebundle_id.properties +2 -1
- package/src/sap/fe/core/messagebundle_it.properties +2 -1
- package/src/sap/fe/core/messagebundle_iw.properties +2 -1
- package/src/sap/fe/core/messagebundle_ja.properties +3 -2
- package/src/sap/fe/core/messagebundle_kk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ko.properties +2 -1
- package/src/sap/fe/core/messagebundle_lt.properties +2 -1
- package/src/sap/fe/core/messagebundle_lv.properties +2 -1
- package/src/sap/fe/core/messagebundle_mk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ms.properties +2 -1
- package/src/sap/fe/core/messagebundle_nl.properties +2 -1
- package/src/sap/fe/core/messagebundle_no.properties +3 -2
- package/src/sap/fe/core/messagebundle_pl.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
- package/src/sap/fe/core/messagebundle_ro.properties +2 -1
- package/src/sap/fe/core/messagebundle_ru.properties +2 -1
- package/src/sap/fe/core/messagebundle_sh.properties +2 -1
- package/src/sap/fe/core/messagebundle_sk.properties +2 -1
- package/src/sap/fe/core/messagebundle_sl.properties +2 -1
- package/src/sap/fe/core/messagebundle_sr.properties +2 -1
- package/src/sap/fe/core/messagebundle_sv.properties +2 -1
- package/src/sap/fe/core/messagebundle_th.properties +2 -1
- package/src/sap/fe/core/messagebundle_tr.properties +2 -1
- package/src/sap/fe/core/messagebundle_uk.properties +2 -1
- package/src/sap/fe/core/messagebundle_vi.properties +2 -1
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +6 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +5 -5
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -0
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +8 -2
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +7 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +75 -90
- package/src/sap/fe/core/templating/EntitySetHelper.ts +92 -118
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +1 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +0 -81
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +0 -126
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +0 -10
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +0 -2
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +0 -68
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +0 -52
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +0 -144
|
@@ -730,7 +730,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/common/Anno
|
|
|
730
730
|
_type: "ActionImport",
|
|
731
731
|
name: actionImportName,
|
|
732
732
|
fullyQualifiedName: `${entityContainerName}/${actionImportName}`,
|
|
733
|
-
actionName: actionImport.$Action
|
|
733
|
+
actionName: actionImport.$kind === "ActionImport" ? actionImport.$Action : actionImport.$Function
|
|
734
734
|
};
|
|
735
735
|
}
|
|
736
736
|
function prepareTypeDefinition(typeDefinition, typeName, namespacePrefix) {
|
|
@@ -888,6 +888,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/common/Anno
|
|
|
888
888
|
case "Singleton":
|
|
889
889
|
schema.singletons.push(prepareSingleton(elementValue, elementName, entityContainerName));
|
|
890
890
|
break;
|
|
891
|
+
case "FunctionImport":
|
|
891
892
|
case "ActionImport":
|
|
892
893
|
schema.actionImports.push(prepareActionImport(elementValue, elementName, entityContainerName));
|
|
893
894
|
break;
|
|
@@ -1316,4 +1317,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/common/Anno
|
|
|
1316
1317
|
}
|
|
1317
1318
|
return _exports;
|
|
1318
1319
|
}, false);
|
|
1319
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZVByb3BlcnR5VmFsdWUiLCJhbm5vdGF0aW9uT2JqZWN0IiwicHJvcGVydHlLZXkiLCJjdXJyZW50VGFyZ2V0IiwiYW5ub3RhdGlvbnNMaXN0cyIsIm9DYXBhYmlsaXRpZXMiLCJ2YWx1ZSIsInR5cGUiLCJTdHJpbmciLCJCb29sIiwiSW50IiwiQXJyYXkiLCJpc0FycmF5IiwiY29sbGVjdGlvblZhbHVlIiwiQ29sbGVjdGlvbiIsIm1hcCIsInN1YkFubm90YXRpb25PYmplY3QiLCJzdWJBbm5vdGF0aW9uT2JqZWN0SW5kZXgiLCJwYXJzZUFubm90YXRpb25PYmplY3QiLCJsZW5ndGgiLCJoYXNPd25Qcm9wZXJ0eSIsIiRQYXRoIiwidW5kZWZpbmVkIiwiUGF0aCIsIiREZWNpbWFsIiwiRGVjaW1hbCIsInBhcnNlRmxvYXQiLCIkUHJvcGVydHlQYXRoIiwiUHJvcGVydHlQYXRoIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiJElmIiwiJEFuZCIsIiRPciIsIiROb3QiLCIkRXEiLCIkTmUiLCIkR3QiLCIkR2UiLCIkTHQiLCIkTGUiLCIkQXBwbHkiLCIkRnVuY3Rpb24iLCIkQW5ub3RhdGlvblBhdGgiLCJBbm5vdGF0aW9uUGF0aCIsIiRFbnVtTWVtYmVyIiwiRW51bU1lbWJlciIsIlJlY29yZCIsIm5hbWUiLCJjdXJyZW50T2JqZWN0VGFyZ2V0IiwicGFyc2VkQW5ub3RhdGlvbk9iamVjdCIsInBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsInN1YkFubm90YXRpb25JbmRleCIsInBhcnNlZEFubm90YXRpb25PYmplY3RSZWNvcmQiLCJwcm9wZXJ0eVZhbHVlcyIsIiRUeXBlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJzdGFydHNXaXRoIiwicHVzaCIsImNyZWF0ZUFubm90YXRpb25MaXN0cyIsImdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QiLCJ0YXJnZXQiLCJhbm5vdGF0aW9ucyIsImNyZWF0ZVJlZmVyZW5jZUZhY2V0SWQiLCJyZWZlcmVuY2VGYWNldCIsImlkIiwiSUQiLCJUYXJnZXQiLCJwcmVwYXJlSWQiLCJyZW1vdmVDaGFydEFubm90YXRpb25zIiwiZmlsdGVyIiwib1JlY29yZCIsInJlY29yZEFzUmVmRmFjZXQiLCJpbmNsdWRlcyIsInJlbW92ZUlCTkFubm90YXRpb25zIiwiaGFuZGxlUHJlc2VudGF0aW9uVmFyaWFudCIsImFubm90YXRpb25PYmplY3RzIiwiYW5ub3RhdGlvblRhcmdldCIsImFubm90YXRpb25MaXN0cyIsIm91dEFubm90YXRpb25PYmplY3QiLCJNaWNyb0NoYXJ0IiwibG9hZExpYnJhcnkiLCJhbm5vdGF0aW9uS2V5IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZmllbGRHcm91cEFubm90YXRpb24iLCJEYXRhIiwicHJlc2VudGF0aW9uVmFyaWFudCIsIkNoYXJ0IiwiVmlzdWFsaXphdGlvbnMiLCJmaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwic29tZSIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbiIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiY3VycmVudE91dEFubm90YXRpb25PYmplY3QiLCJmaW5hbEtleSIsImFubm90YXRpb25PZkFubm90YXRpb25TcGxpdCIsInNwbGl0IiwiYW5ub3RhdGlvblF1YWxpZmllclNwbGl0IiwicXVhbGlmaWVyIiwidGVybSIsImN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0IiwiYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UiLCJyZWNvcmQiLCJ0eXBlVmFsdWUiLCJwcmVwYXJlUHJvcGVydHkiLCJwcm9wZXJ0eURlZmluaXRpb24iLCJlbnRpdHlUeXBlT2JqZWN0IiwicHJvcGVydHlOYW1lIiwiX3R5cGUiLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwicHJlY2lzaW9uIiwiJFByZWNpc2lvbiIsInNjYWxlIiwiJFNjYWxlIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5IiwibmF2UHJvcGVydHlEZWZpbml0aW9uIiwibmF2UHJvcGVydHlOYW1lIiwicmVmZXJlbnRpYWxDb25zdHJhaW50IiwiJFJlZmVyZW50aWFsQ29uc3RyYWludCIsInNvdXJjZVByb3BlcnR5TmFtZSIsInNvdXJjZVR5cGVOYW1lIiwic291cmNlUHJvcGVydHkiLCJ0YXJnZXRUeXBlTmFtZSIsInRhcmdldFByb3BlcnR5IiwibmF2aWdhdGlvblByb3BlcnR5IiwicGFydG5lciIsIiRQYXJ0bmVyIiwiaXNDb2xsZWN0aW9uIiwiJGlzQ29sbGVjdGlvbiIsImNvbnRhaW5zVGFyZ2V0IiwiJENvbnRhaW5zVGFyZ2V0IiwicHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiZW50aXR5Q29udGFpbmVyTmFtZSIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsIl9yZWYiLCJwYXRoIiwicHJlcGFyZUVudGl0eVNldCIsImVudGl0eVNldERlZmluaXRpb24iLCJlbnRpdHlTZXROYW1lIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJlbnRpdHlUeXBlTmFtZSIsInByZXBhcmVTaW5nbGV0b24iLCJzaW5nbGV0b25EZWZpbml0aW9uIiwic2luZ2xldG9uTmFtZSIsInByZXBhcmVBY3Rpb25JbXBvcnQiLCJhY3Rpb25JbXBvcnQiLCJhY3Rpb25JbXBvcnROYW1lIiwiYWN0aW9uTmFtZSIsIiRBY3Rpb24iLCJwcmVwYXJlVHlwZURlZmluaXRpb24iLCJ0eXBlRGVmaW5pdGlvbiIsInR5cGVOYW1lIiwibmFtZXNwYWNlUHJlZml4IiwidHlwZU9iamVjdCIsInN1YnN0cmluZyIsInVuZGVybHlpbmdUeXBlIiwiJFVuZGVybHlpbmdUeXBlIiwicHJlcGFyZUNvbXBsZXhUeXBlIiwiY29tcGxleFR5cGVEZWZpbml0aW9uIiwiY29tcGxleFR5cGVOYW1lIiwiY29tcGxleFR5cGVPYmplY3QiLCJwcm9wZXJ0aWVzIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJjb21wbGV4VHlwZVByb3BlcnRpZXMiLCJwcm9wZXJ0eU5hbWVPck5vdCIsIiRraW5kIiwic29ydCIsImEiLCJiIiwiY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsInByZXBhcmVFbnRpdHlLZXlzIiwiZW50aXR5VHlwZURlZmluaXRpb24iLCJvTWV0YU1vZGVsRGF0YSIsIiRLZXkiLCIkQmFzZVR5cGUiLCJwcmVwYXJlRW50aXR5VHlwZSIsIm1ldGFNb2RlbERhdGEiLCJpZ25vcmVEYXRhZmllbGREZWZhdWx0IiwiZW50aXR5VHlwZSIsImVudGl0eVByb3BlcnRpZXMiLCJhY3Rpb25zIiwia2V5IiwicHJvcGVydHkiLCJlbnRpdHlLZXkiLCJmaW5kIiwiZW50aXR5VHlwZUFubm90YXRpb25zIiwiJEFubm90YXRpb25zIiwiZmlsdGVyRmFjZXRzIiwiZmlsdGVyRmFjZXRBbm5vdGF0aW9uIiwiaGVhZGVySW5mb0Fubm90YXRpb24iLCJUeXBlTmFtZSIsIlR5cGVOYW1lUGx1cmFsIiwiVGl0bGUiLCJWYWx1ZSIsImVudGl0eVByb3BlcnR5IiwicHJlcGFyZUFjdGlvbiIsImFjdGlvblJhd0RhdGEiLCJvdmVybG9hZFBhcmFtZXRlcnMiLCIkUGFyYW1ldGVyIiwiJElzQm91bmQiLCJvdmVybG9hZCIsInBhcmFtZXRlciIsImpvaW4iLCJwYXJhbWV0ZXJzIiwiaXNCb3VuZCIsImlzRnVuY3Rpb24iLCJzb3VyY2VUeXBlIiwicmV0dXJuVHlwZSIsIiRSZXR1cm5UeXBlIiwicmV0dXJuQ29sbGVjdGlvbiIsInBhcmFtIiwiJE5hbWUiLCJwYXJzZUVudGl0eUNvbnRhaW5lciIsImVudGl0eUNvbnRhaW5lck1ldGFkYXRhIiwic2NoZW1hIiwiZW50aXR5Q29udGFpbmVyIiwiZWxlbWVudE5hbWUiLCJlbGVtZW50VmFsdWUiLCJlbnRpdHlTZXRzIiwic2luZ2xldG9ucyIsImFjdGlvbkltcG9ydHMiLCJwYXJzZUFubm90YXRpb25zIiwiY2FwYWJpbGl0aWVzIiwidmFsdWVzIiwicGFyc2VTY2hlbWEiLCJtZXRhbW9kZWxPYmplY3QiLCJuYW1lc3BhY2UiLCJzbGljZSIsImVudGl0eVR5cGVzIiwiY29tcGxleFR5cGVzIiwidHlwZURlZmluaXRpb25zIiwiYXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25TZXRzIiwicGFyc2VNZXRhTW9kZWxFbGVtZW50Iiwic3ViRWxlbWVudFZhbHVlIiwicGFyc2VNZXRhTW9kZWwiLCJtZXRhTW9kZWwiLCJhcmd1bWVudHMiLCJEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJyZXN1bHQiLCJpZGVudGlmaWNhdGlvbiIsInZlcnNpb24iLCJyZWZlcmVuY2VzIiwiQW5ub3RhdGlvbkNvbnZlcnRlciIsImxhenkiLCJnZXRPYmplY3QiLCJfZXhwb3J0cyIsImNvbnZlcnRlZE1ldGFNb2RlbE1hcCIsIm1ldGFNb2RlbElETWFwIiwibWV0YU1vZGVsTWFwIiwiV2Vha01hcCIsInZpcnR1YWxQcm9wZXJ0aWVzTWFwIiwiY29udmVydFR5cGVzIiwib01ldGFNb2RlbCIsIm1ldGFNb2RlbElEIiwicGFyc2VkT3V0cHV0IiwiY29udmVydCIsImNyaXRpY2FsaXR5IiwiZ2V0VmlydHVhbENyaXRpY2FsaXR5RXhwcmVzc2lvbiIsIm1ldGFNb2RlbFN5bWJvbCIsInNldCIsIm9FcnJvciIsIkVycm9yIiwiZ2V0TWV0YU1vZGVsQnlJZCIsInN5bWJvbCIsImdldCIsImdldENvbnZlcnRlZFR5cGVzIiwib0NvbnRleHQiLCJnZXRNb2RlbCIsImlzQSIsImRlbGV0ZU1vZGVsQ2FjaGVEYXRhIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJvTWV0YU1vZGVsQ29udGV4dCIsImJJbmNsdWRlVmlzaXRlZE9iamVjdHMiLCJvQ29udmVydGVkTWV0YWRhdGEiLCJzUGF0aCIsImdldFBhdGgiLCJhUGF0aFNwbGl0IiwiZmlyc3RQYXJ0IiwiYmVnaW5JbmRleCIsInRhcmdldEVudGl0eVNldCIsImVudGl0eVNldCIsInNpbmdsZXRvbiIsInJlbGF0aXZlUGF0aCIsImxvY2FsT2JqZWN0cyIsInJlbGF0aXZlU3BsaXQiLCJpZHgiLCJjdXJyZW50RW50aXR5U2V0Iiwic05hdlByb3BUb0NoZWNrIiwicmVwbGFjZSIsImFOYXZQcm9wcyIsInRhcmdldEVudGl0eVR5cGUiLCJzTmF2UHJvcCIsInRhcmdldE5hdlByb3AiLCJuYXZQcm9wIiwidGFyZ2V0VHlwZSIsInNoaWZ0Iiwib1RhcmdldCIsInJlc29sdmVQYXRoIiwidmlzaXRlZE9iamVjdHMiLCJjb25jYXQiLCJhY3Rpb24iLCJwYXJhbWV0ZXJOYW1lIiwiZW5kc1dpdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCIsIm1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgiLCJjb252ZXJ0ZWRUeXBlcyIsIm9ubHlTZXJ2aWNlT2JqZWN0cyIsImRhdGFNb2RlbE9iamVjdHMiLCJ2aXNpdGVkT2JqZWN0IiwiaXNTZXJ2aWNlT2JqZWN0IiwiaXNFbnRpdHlUeXBlIiwiaXNFbnRpdHlDb250YWluZXIiLCJyb290RW50aXR5U2V0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjdXJyZW50T2JqZWN0IiwibmF2aWdhdGVkUGF0aCIsImkiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsImJvdW5kRW50aXR5U2V0IiwiaXNFbnRpdHlTZXQiLCJpc1NpbmdsZXRvbiIsInN0YXJ0aW5nRW50aXR5U2V0Iiwic3RhcnRpbmdJbmRleCIsImluZGV4T2YiLCJyZXF1aXJlZERhdGFNb2RlbE9iamVjdHMiLCJvdXREYXRhTW9kZWxQYXRoIiwidGFyZ2V0T2JqZWN0IiwiY29udGV4dExvY2F0aW9uIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RFbnRpdHlLZXlzIiwiY29udGV4dCIsImdldE1ldGFNb2RlbCIsIm1ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJkYXRhTW9kZWwiLCJnZXRNZXRhQ29udGV4dCIsInJvb3RTZW1hbnRpY0tleXMiLCJDb21tb24iLCJTZW1hbnRpY0tleSIsInNlbWFudGljS2V5cyIsInJvb3RUZWNobmljYWxLZXlzIiwidGVjaG5pY2FsS2V5cyIsImV4dHJhY3RNb2RlbEFuZFBhdGgiLCJtb2RlbElkIiwidGFyZ2V0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGgiLCJtZXRhQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRWaXJ0dWFsQmluZGluZ0V4cHJlc3Npb24iLCJ2aXJ0dWFsS2V5IiwicGF0aEluZm9zIiwibWV0aG9kIiwidmlydHVhbFByb3BlcnR5IiwiY29uc3RhbnQiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiQ3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eUV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJiaW5kaW5nUGF0aCIsImZvcm1hdFJlc3VsdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWV0YU1vZGVsQ29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgZmlsZSBpcyByZXRyaWV2ZWQgZnJvbSBAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyLCBzaGFyZWQgY29kZSB3aXRoIHRvb2wgc3VpdGVcbmltcG9ydCB0eXBlIHtcblx0QWN0aW9uUGFyYW1ldGVyLFxuXHRBbm5vdGF0aW9uTGlzdCxcblx0QW5ub3RhdGlvblJlY29yZCxcblx0QW5ub3RhdGlvblRlcm0sXG5cdENvbnZlcnRlZE1ldGFkYXRhLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdEV4cHJlc3Npb24sXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UmF3QWN0aW9uLFxuXHRSYXdBY3Rpb25JbXBvcnQsXG5cdFJhd0Fubm90YXRpb24sXG5cdFJhd0NvbXBsZXhUeXBlLFxuXHRSYXdFbnRpdHlTZXQsXG5cdFJhd0VudGl0eVR5cGUsXG5cdFJhd01ldGFkYXRhLFxuXHRSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLFxuXHRSYXdQcm9wZXJ0eSxcblx0UmF3U2NoZW1hLFxuXHRSYXdTaW5nbGV0b24sXG5cdFJhd1R5cGVEZWZpbml0aW9uLFxuXHRSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UmVmZXJlbnRpYWxDb25zdHJhaW50LFxuXHRTZXJ2aWNlT2JqZWN0LFxuXHRTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbixcblx0U2luZ2xldG9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBcHBseUV4cHJlc3Npb24sIENvbGxlY3Rpb24sIENvbGxlY3Rpb25FeHByZXNzaW9uLCBQcm9wZXJ0eVZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0Jhc2VFZG1cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGgsIFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLCBSZWNvcmRDb21wbGV4VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19BbmFseXRpY3MgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyUmVzdHJpY3Rpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzLFxuXHRFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzLFxuXHRQcm9wZXJ0eUFubm90YXRpb25zX0NhcGFiaWxpdGllc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbl9FZG1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tdW5pY2F0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvcmVfRWRtXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfTWVhc3VyZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL01lYXN1cmVzX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX1BlcnNvbmFsRGF0YSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvUGVyc29uYWxEYXRhX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX1Nlc3Npb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFQb2ludCxcblx0RGF0YVBvaW50VHlwZSxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0RmlsdGVyRmFjZXRzLFxuXHRIZWFkZXJGYWNldHMsXG5cdEhlYWRlckluZm8sXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRSZWZlcmVuY2VGYWNldCxcblx0VGV4dEFycmFuZ2VtZW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHtcblx0RW50aXR5U2V0QW5ub3RhdGlvbnNfVUksXG5cdEVudGl0eVR5cGVBbm5vdGF0aW9uc19VSSxcblx0UHJvcGVydHlBbm5vdGF0aW9uc19VSVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbnN0YW50LCBmb3JtYXRSZXN1bHQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbkNvbnZlcnRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbW1vblwiO1xuaW1wb3J0IHtcblx0aXNFbnRpdHlDb250YWluZXIsXG5cdGlzRW50aXR5U2V0LFxuXHRpc0VudGl0eVR5cGUsXG5cdGlzTmF2aWdhdGlvblByb3BlcnR5LFxuXHRpc1NlcnZpY2VPYmplY3QsXG5cdGlzU2luZ2xldG9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHsgRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0Q29udGV4dCwgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXhwYW5kUGF0aFR5cGUsIE1ldGFNb2RlbEVudW0sIE1ldGFNb2RlbFR5cGUsIFJlbmFtZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB7IHByZXBhcmVJZCB9IGZyb20gXCIuLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIE1ldGFNb2RlbEFjdGlvblBhcmFtZXRlciA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0JE5hbWU6IHN0cmluZztcblx0JE51bGxhYmxlPzogYm9vbGVhbjtcblx0JE1heExlbmd0aD86IG51bWJlcjtcblx0JFByZWNpc2lvbj86IG51bWJlcjtcblx0JFNjYWxlPzogbnVtYmVyO1xuXHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBNZXRhTW9kZWxBY3Rpb24gPSB7XG5cdCRraW5kOiBcIkFjdGlvblwiIHwgXCJGdW5jdGlvblwiO1xuXHQkSXNCb3VuZDogYm9vbGVhbjtcblx0JEVudGl0eVNldFBhdGg6IHN0cmluZztcblx0JFBhcmFtZXRlcjogTWV0YU1vZGVsQWN0aW9uUGFyYW1ldGVyW107XG5cdCRSZXR1cm5UeXBlOiB7XG5cdFx0JFR5cGU6IHN0cmluZztcblx0XHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcblx0fTtcbn07XG5cbnR5cGUgTWV0YU1vZGVsQW5ub3RhdGlvbiA9IG51bGwgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgTWV0YU1vZGVsQW5ub3RhdGlvblJlY29yZDtcbnR5cGUgTWV0YU1vZGVsQW5ub3RhdGlvblJlY29yZCA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0JFByb3BlcnR5UGF0aD86IHN0cmluZztcblx0JFBhdGg/OiBzdHJpbmc7XG5cdCREZWNpbWFsPzogc3RyaW5nO1xuXHQkSWY/OiB1bmtub3duO1xuXHQkQW5kPzogdW5rbm93bjtcblx0JE9yPzogdW5rbm93bjtcblx0JE5vdD86IHVua25vd247XG5cdCRFcT86IHVua25vd247XG5cdCROZT86IHVua25vd247XG5cdCRHdD86IHVua25vd247XG5cdCRHZT86IHVua25vd247XG5cdCRMdD86IHVua25vd247XG5cdCRMZT86IHVua25vd247XG5cdCRBcHBseT86IHVua25vd247XG5cdCRGdW5jdGlvbj86IHVua25vd247XG5cdCRBbm5vdGF0aW9uUGF0aD86IHN0cmluZztcblx0JEVudW1NZW1iZXI/OiBzdHJpbmc7XG5cdCROYXZpZ2F0aW9uUHJvcGVydHlQYXRoPzogc3RyaW5nO1xufSAmIHtcblx0W3Byb3BlcnR5S2V5OiBzdHJpbmddOiBNZXRhTW9kZWxBbm5vdGF0aW9uO1xufTtcbmZ1bmN0aW9uIHBhcnNlUHJvcGVydHlWYWx1ZShcblx0YW5ub3RhdGlvbk9iamVjdDogTWV0YU1vZGVsQW5ub3RhdGlvbixcblx0cHJvcGVydHlLZXk6IHN0cmluZyxcblx0Y3VycmVudFRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc0xpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4sXG5cdG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IEV4cHJlc3Npb24gfSB7XG5cdGxldCB2YWx1ZSE6IEV4cHJlc3Npb247XG5cdGlmIChhbm5vdGF0aW9uT2JqZWN0ID09PSBudWxsKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTnVsbFwiIH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJTdHJpbmdcIiwgU3RyaW5nOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwibnVtYmVyXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25WYWx1ZTogQ29sbGVjdGlvbkV4cHJlc3Npb24gPSB7XG5cdFx0XHR0eXBlOiBcIkNvbGxlY3Rpb25cIixcblx0XHRcdENvbGxlY3Rpb246IGFubm90YXRpb25PYmplY3QubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uT2JqZWN0SW5kZXgpID0+XG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbk9iamVjdChcblx0XHRcdFx0XHRzdWJBbm5vdGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRcdGAke2N1cnJlbnRUYXJnZXR9LyR7cHJvcGVydHlLZXl9LyR7c3ViQW5ub3RhdGlvbk9iamVjdEluZGV4fWAsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNMaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdCkgYXMgQ29sbGVjdGlvblxuXHRcdH07XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3QubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiUGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFubm90YXRpb25QYXRoXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJSZWNvcmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJJZlwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkFuZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkVxXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTm90XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR3RcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiR3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkx0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTGVcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTGVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHQvLyAkVHlwZSBpcyBvcHRpb25hbC4uLlxuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJSZWNvcmRcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR2YWx1ZSA9IGNvbGxlY3Rpb25WYWx1ZTtcblx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0LiRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIlBhdGhcIiwgUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kUGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJEZWNpbWFsXCIsIERlY2ltYWw6IHBhcnNlRmxvYXQoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCkgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJQcm9wZXJ0eVBhdGhcIiwgUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiLCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRJZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJJZlwiLCAkSWY6IGFubm90YXRpb25PYmplY3QuJElmIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIkFuZFwiLCAkQW5kOiBhbm5vdGF0aW9uT2JqZWN0LiRBbmQgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRPciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJPclwiLCAkT3I6IGFubm90YXRpb25PYmplY3QuJE9yIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTm90ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIk5vdFwiLCAkTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgYXMgRXhwcmVzc2lvbiB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiRXFcIiwgJEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIk5lXCIsICROZTogYW5ub3RhdGlvbk9iamVjdC4kTmUgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJHdFwiLCAkR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiR2VcIiwgJEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIkx0XCIsICRMdDogYW5ub3RhdGlvbk9iamVjdC4kTHQgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJMZVwiLCAkTGU6IGFubm90YXRpb25PYmplY3QuJExlIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiQXBwbHlcIiwgJEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgJEZ1bmN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0LiRGdW5jdGlvbiB9IGFzIEFwcGx5RXhwcmVzc2lvbjtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsIEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJFbnVtTWVtYmVyXCIsIEVudW1NZW1iZXI6IGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWUgPSB7XG5cdFx0XHRcdHR5cGU6IFwiUmVjb3JkXCIsXG5cdFx0XHRcdFJlY29yZDogcGFyc2VBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3QsIGN1cnJlbnRUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpIGFzIEFubm90YXRpb25SZWNvcmRcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0bmFtZTogcHJvcGVydHlLZXksXG5cdFx0dmFsdWVcblx0fTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9uT2JqZWN0KFxuXHRhbm5vdGF0aW9uT2JqZWN0OiBNZXRhTW9kZWxBbm5vdGF0aW9uLFxuXHRjdXJyZW50T2JqZWN0VGFyZ2V0OiBzdHJpbmcsXG5cdGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEV4cHJlc3Npb24gfCBBbm5vdGF0aW9uUmVjb3JkIHtcblx0bGV0IHBhcnNlZEFubm90YXRpb25PYmplY3Q6IEV4cHJlc3Npb24gfCBBbm5vdGF0aW9uUmVjb3JkO1xuXHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiTnVsbFwiIH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIlN0cmluZ1wiLCBTdHJpbmc6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdCA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkJvb2xcIiwgQm9vbDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0ID09PSBcIm51bWJlclwiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdGNvbnN0IHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uID0ge1xuXHRcdFx0Y29sbGVjdGlvbjogYW5ub3RhdGlvbk9iamVjdC5tYXAoKHN1YkFubm90YXRpb25PYmplY3QsIHN1YkFubm90YXRpb25JbmRleCkgPT5cblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uT2JqZWN0KHN1YkFubm90YXRpb25PYmplY3QsIGAke2N1cnJlbnRPYmplY3RUYXJnZXR9LyR7c3ViQW5ub3RhdGlvbkluZGV4fWAsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0XHQpIGFzIENvbGxlY3Rpb25cblx0XHR9O1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbm5vdGF0aW9uUGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiSWZcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJOb3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTHRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLCBBbm5vdGF0aW9uUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3QuJFBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJERlY2ltYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJEZWNpbWFsXCIsIERlY2ltYWw6IHBhcnNlRmxvYXQoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCkgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIlByb3BlcnR5UGF0aFwiLCBQcm9wZXJ0eVBhdGg6IGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kSWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJZlwiLCAkSWY6IGFubm90YXRpb25PYmplY3QuJElmIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQW5kXCIsICRBbmQ6IGFubm90YXRpb25PYmplY3QuJEFuZCBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiT3JcIiwgJE9yOiBhbm5vdGF0aW9uT2JqZWN0LiRPciBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk5vdFwiLCAkTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgYXMgRXhwcmVzc2lvbiB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJFcVwiLCAkRXE6IGFubm90YXRpb25PYmplY3QuJEVxIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJOZVwiLCAkTmU6IGFubm90YXRpb25PYmplY3QuJE5lIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJHdFwiLCAkR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJHZVwiLCAkR2U6IGFubm90YXRpb25PYmplY3QuJEdlIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJMdFwiLCAkTHQ6IGFubm90YXRpb25PYmplY3QuJEx0IGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJMZVwiLCAkTGU6IGFubm90YXRpb25PYmplY3QuJExlIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdFx0dHlwZTogXCJBcHBseVwiLFxuXHRcdFx0XHQkQXBwbHk6IGFubm90YXRpb25PYmplY3QuJEFwcGx5LFxuXHRcdFx0XHQkRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uXG5cdFx0XHR9IGFzIEFwcGx5RXhwcmVzc2lvbjtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIsXG5cdFx0XHRcdE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7XG5cdFx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0XHRFbnVtTWVtYmVyOiBhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0UmVjb3JkOiBBbm5vdGF0aW9uUmVjb3JkID0ge1xuXHRcdFx0XHR0eXBlOiBcIlJlY29yZFwiLFxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlczogW11cblx0XHRcdH07XG5cdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdC4kVHlwZSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0UmVjb3JkLnR5cGUgPSBhbm5vdGF0aW9uT2JqZWN0LiRUeXBlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWVbXSA9IFtdO1xuXHRcdFx0T2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdCkuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRUeXBlXCIgJiZcblx0XHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkSWZcIiAmJlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRBcHBseVwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEFuZFwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJE9yXCIgJiZcblx0XHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTmVcIiAmJlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRHdFwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEdlXCIgJiZcblx0XHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTHRcIiAmJlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRMZVwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJE5vdFwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEVxXCIgJiZcblx0XHRcdFx0XHQhcHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucHVzaChcblx0XHRcdFx0XHRcdHBhcnNlUHJvcGVydHlWYWx1ZShhbm5vdGF0aW9uT2JqZWN0W3Byb3BlcnR5S2V5XSwgcHJvcGVydHlLZXksIGN1cnJlbnRPYmplY3RUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHRcdC8vIEFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdFx0XHRcdGNyZWF0ZUFubm90YXRpb25MaXN0cyhcblx0XHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0gfSxcblx0XHRcdFx0XHRcdGN1cnJlbnRPYmplY3RUYXJnZXQsXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uc0xpc3RzLFxuXHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdFJlY29yZC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHBhcnNlZEFubm90YXRpb25PYmplY3RSZWNvcmQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ITtcbn1cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QodGFyZ2V0OiBzdHJpbmcsIGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pik6IEFubm90YXRpb25MaXN0IHtcblx0aWYgKCFhbm5vdGF0aW9uc0xpc3RzLmhhc093blByb3BlcnR5KHRhcmdldCkpIHtcblx0XHRhbm5vdGF0aW9uc0xpc3RzW3RhcmdldF0gPSB7XG5cdFx0XHR0YXJnZXQ6IHRhcmdldCxcblx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGFubm90YXRpb25zTGlzdHNbdGFyZ2V0XTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlRmFjZXRJZChyZWZlcmVuY2VGYWNldDogTWV0YU1vZGVsVHlwZTxSZWZlcmVuY2VGYWNldD4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBpZCA9IHJlZmVyZW5jZUZhY2V0LklEID8/IHJlZmVyZW5jZUZhY2V0LlRhcmdldD8uJEFubm90YXRpb25QYXRoO1xuXHRyZXR1cm4gaWQgPyBwcmVwYXJlSWQoaWQpIDogaWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdDogTWV0YU1vZGVsVHlwZTxIZWFkZXJGYWNldHM+IHwgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdKTogdW5rbm93bltdIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBNZXRhTW9kZWxUeXBlPEZhY2V0VHlwZXM+IHwgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPik6IGJvb2xlYW4gPT4ge1xuXHRcdGNvbnN0IHJlY29yZEFzUmVmRmFjZXQgPSBvUmVjb3JkIGFzIE1ldGFNb2RlbFR5cGU8UmVmZXJlbmNlRmFjZXQ+O1xuXHRcdGlmIChyZWNvcmRBc1JlZkZhY2V0LlRhcmdldCAmJiByZWNvcmRBc1JlZkZhY2V0LlRhcmdldC4kQW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHJldHVybiAhcmVjb3JkQXNSZWZGYWNldC5UYXJnZXQuJEFubm90YXRpb25QYXRoLmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdKTogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KTogYm9vbGVhbiA9PiB7XG5cdFx0cmV0dXJuIG9SZWNvcmQuJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQoXG5cdGFubm90YXRpb25PYmplY3Q6IEV4cGFuZFBhdGhUeXBlPEFubm90YXRpb25QYXRoPENoYXJ0IHwgRGF0YVBvaW50IHwgTGluZUl0ZW0+PltdXG4pOiBFeHBhbmRQYXRoVHlwZTxBbm5vdGF0aW9uUGF0aDxDaGFydCB8IERhdGFQb2ludCB8IExpbmVJdGVtPj5bXSB7XG5cdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0LmZpbHRlcigob1JlY29yZCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBvUmVjb3JkLiRBbm5vdGF0aW9uUGF0aCAhPT0gYEAke1VJQW5ub3RhdGlvblRlcm1zLkNoYXJ0fWA7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdGFubm90YXRpb25PYmplY3RzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0YW5ub3RhdGlvblRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IHZvaWQge1xuXHRpZiAoT2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdHMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBvdXRBbm5vdGF0aW9uT2JqZWN0ID0gZ2V0T3JDcmVhdGVBbm5vdGF0aW9uTGlzdChhbm5vdGF0aW9uVGFyZ2V0LCBhbm5vdGF0aW9uTGlzdHMpO1xuXHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdGRlbGV0ZSBhbm5vdGF0aW9uT2JqZWN0c1tgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YF07XG5cdH0gZWxzZSB7XG5cdFx0b0NhcGFiaWxpdGllcy5sb2FkTGlicmFyeT8uKFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIik7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGFubm90YXRpb25LZXkgaW4gYW5ub3RhdGlvbk9iamVjdHMpIHtcblx0XHRsZXQgYW5ub3RhdGlvbk9iamVjdCA9IGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldO1xuXHRcdHN3aXRjaCAoYW5ub3RhdGlvbktleSkge1xuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVyRmFjZXRzfWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPEhlYWRlckZhY2V0cz4pO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9ufWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+W10pO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtfWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+W10pO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdKTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwfWA6XG5cdFx0XHRcdGNvbnN0IGZpZWxkR3JvdXBBbm5vdGF0aW9uID0gYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPEZpZWxkR3JvdXA+O1xuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uICYmIGZpZWxkR3JvdXBBbm5vdGF0aW9uLkRhdGEpIHtcblx0XHRcdFx0XHRmaWVsZEdyb3VwQW5ub3RhdGlvbi5EYXRhID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoZmllbGRHcm91cEFubm90YXRpb24uRGF0YSk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0ICYmIGZpZWxkR3JvdXBBbm5vdGF0aW9uLkRhdGEpIHtcblx0XHRcdFx0XHRmaWVsZEdyb3VwQW5ub3RhdGlvbi5EYXRhID0gcmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyhcblx0XHRcdFx0XHRcdGZpZWxkR3JvdXBBbm5vdGF0aW9uLkRhdGFcblx0XHRcdFx0XHQpIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz5bXTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50fWA6XG5cdFx0XHRcdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBhbm5vdGF0aW9uT2JqZWN0IGFzIE1ldGFNb2RlbFR5cGU8UHJlc2VudGF0aW9uVmFyaWFudD47XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5DaGFydCAmJiBwcmVzZW50YXRpb25WYXJpYW50LlZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudC5WaXN1YWxpemF0aW9ucyA9IGhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQocHJlc2VudGF0aW9uVmFyaWFudC5WaXN1YWxpemF0aW9ucyk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBgQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgOlxuXHRcdFx0XHQvLyBUaGlzIHNjZW5hcmlvIGlzIG5lZWRlZCBmb3IgZW5hYmxpbmcgc2VtYW50aWMgZmlsdGVyaW5nIG9uIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLWZpbHRlcnMuIEFzIG9mIG5vdyB0aGUgU2luZ2xlUmFuZ2UgYW5ub3RhdGlvbiBpcyByZWFkIGJ5IHRoZVxuXHRcdFx0XHQvLyBGaWVsZEhlbHBlciwgd2hpY2ggc2hvdWxkIG5vdCBpbmNsdWRlIGFueSBwcm9wZXJ0eXNwZWNpZmljIGxvZ2ljLiBXZSB3aWxsIHJlbW92ZSB0aGlzIG9uY2UgdGhlIEZpZWxkSGVscGVyIHJlY2VpdmVzIHRoZSBTaW5nbGVSYW5nZSBkYXRhIGZyb21cblx0XHRcdFx0Ly8gdGhlIGNvbnZlcnRlciBvciBoYXZpbmcgaXQgc2V0IGlzIG5vIGxvbmdlciBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIHNlbWFudGljIGZpbHRlcmluZy5cblx0XHRcdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zID0gYW5ub3RhdGlvbk9iamVjdHNbYEBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc2BdIGFzXG5cdFx0XHRcdFx0fCBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9ucz5cblx0XHRcdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGZpbHRlclJlc3RyaWN0aW9ucz8uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0IWZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLnNvbWUoKEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uPy5Qcm9wZXJ0eT8uJFByb3BlcnR5UGF0aC5pbmNsdWRlcyhcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLnB1c2goXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVcIixcblx0XHRcdFx0XHRcdFx0XHRBbGxvd2VkRXhwcmVzc2lvbnM6IFwiU2luZ2xlUmFuZ2VcIixcblx0XHRcdFx0XHRcdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9DcmVhdGlvbkRhdGVUaW1lXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVcIixcblx0XHRcdFx0XHRcdFx0XHRBbGxvd2VkRXhwcmVzc2lvbnM6IFwiU2luZ2xlUmFuZ2VcIixcblx0XHRcdFx0XHRcdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRsZXQgY3VycmVudE91dEFubm90YXRpb25PYmplY3QgPSBvdXRBbm5vdGF0aW9uT2JqZWN0O1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdGxldCBmaW5hbEtleSA9IGFubm90YXRpb25LZXk7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0ID0gYW5ub3RhdGlvbktleS5zcGxpdChcIkBcIik7XG5cdFx0aWYgKGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdC5sZW5ndGggPiAyKSB7XG5cdFx0XHRjdXJyZW50T3V0QW5ub3RhdGlvbk9iamVjdCA9IGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QoXG5cdFx0XHRcdGAke2Fubm90YXRpb25UYXJnZXR9QCR7YW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzFdfWAsXG5cdFx0XHRcdGFubm90YXRpb25MaXN0c1xuXHRcdFx0KTtcblx0XHRcdGZpbmFsS2V5ID0gYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmaW5hbEtleSA9IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsxXTtcblx0XHR9XG5cblx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBmaW5hbEtleS5zcGxpdChcIiNcIik7XG5cdFx0Y29uc3QgcXVhbGlmaWVyID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzFdO1xuXHRcdGZpbmFsS2V5ID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzBdO1xuXG5cdFx0Y29uc3QgcGFyc2VkQW5ub3RhdGlvbk9iamVjdDogUmF3QW5ub3RhdGlvbiA9IHtcblx0XHRcdHRlcm06IGZpbmFsS2V5LFxuXHRcdFx0cXVhbGlmaWVyOiBxdWFsaWZpZXJcblx0XHR9O1xuXHRcdGxldCBjdXJyZW50QW5ub3RhdGlvblRhcmdldCA9IGAke2Fubm90YXRpb25UYXJnZXR9QCR7cGFyc2VkQW5ub3RhdGlvbk9iamVjdC50ZXJtfWA7XG5cdFx0aWYgKHF1YWxpZmllcikge1xuXHRcdFx0Y3VycmVudEFubm90YXRpb25UYXJnZXQgKz0gYCMke3F1YWxpZmllcn1gO1xuXHRcdH1cblx0XHRjb25zdCBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSA9IGFubm90YXRpb25PYmplY3QgYXMgTWV0YU1vZGVsQW5ub3RhdGlvbjtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UgPT09IG51bGwpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiTnVsbFwiIH07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiU3RyaW5nXCIsIFN0cmluZzogYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSB9O1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RUb1BhcnNlID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkludFwiLCBJbnQ6IGFubm90YXRpb25PYmplY3RUb1BhcnNlIH07XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFubm90YXRpb25PYmplY3RUb1BhcnNlKSkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uID0gYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uSW5kZXgpID0+XG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbk9iamVjdChcblx0XHRcdFx0XHRzdWJBbm5vdGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRcdGAke2N1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0fS8ke3N1YkFubm90YXRpb25JbmRleH1gLFxuXHRcdFx0XHRcdGFubm90YXRpb25MaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdCkgYXMgQ29sbGVjdGlvbjtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRQcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiUHJvcGVydHlQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5ub3RhdGlvblBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiQW5ub3RhdGlvblBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIklmXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiT3JcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5lXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5vdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiR2VcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJMdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFuZFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFwcGx5XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RUb1BhcnNlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJElmICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJJZlwiLCAkSWY6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRJZiBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEFuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQW5kXCIsICRBbmQ6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRBbmQgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRPciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiT3JcIiwgJE9yOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kT3IgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiROb3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIk5vdFwiLCAkTm90OiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kTm90IGFzIEV4cHJlc3Npb24gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEVxICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJFcVwiLCAkRXE6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRFcSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJOZVwiLCAkTmU6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiROZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEd0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHdFwiLCAkR3Q6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRHdCBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHZVwiLCAkR2U6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRHZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJMdFwiLCAkTHQ6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRMdCBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJExlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJMZVwiLCAkTGU6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRMZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEFwcGx5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHtcblx0XHRcdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHRcdFx0JEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kQXBwbHksXG5cdFx0XHRcdFx0JEZ1bmN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kRnVuY3Rpb25cblx0XHRcdFx0fSBhcyBBcHBseUV4cHJlc3Npb247XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRQYXRoIH07XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRBbm5vdGF0aW9uUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7XG5cdFx0XHRcdFx0dHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLFxuXHRcdFx0XHRcdEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kQW5ub3RhdGlvblBhdGhcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJERlY2ltYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkRlY2ltYWxcIiwgRGVjaW1hbDogcGFyc2VGbG9hdChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kRGVjaW1hbCkgfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEVudW1NZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0ge1xuXHRcdFx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0XHRcdEVudW1NZW1iZXI6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRFbnVtTWVtYmVyXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZWNvcmQ6IEFubm90YXRpb25SZWNvcmQgPSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXM6IFtdXG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kVHlwZSkge1xuXHRcdFx0XHRcdGNvbnN0IHR5cGVWYWx1ZSA9IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRUeXBlO1xuXHRcdFx0XHRcdHJlY29yZC50eXBlID0gYCR7dHlwZVZhbHVlfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogRXhwcmVzc2lvbiB9W10gPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wZXJ0eUtleSBpbiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSkge1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eUtleSAhPT0gXCIkVHlwZVwiICYmICFwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucHVzaChcblx0XHRcdFx0XHRcdFx0cGFyc2VQcm9wZXJ0eVZhbHVlKFxuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RUb1BhcnNlW3Byb3BlcnR5S2V5XSxcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUtleSxcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50QW5ub3RhdGlvblRhcmdldCxcblx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdFx0XHRcdC8vIEFubm90YXRpb24gb2YgcmVjb3JkXG5cdFx0XHRcdFx0XHRjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdFx0XHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbcHJvcGVydHlLZXldIH0sXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJlY29yZC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnJlY29yZCA9IHJlY29yZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y3VycmVudE91dEFubm90YXRpb25PYmplY3QuYW5ub3RhdGlvbnMucHVzaChwYXJzZWRBbm5vdGF0aW9uT2JqZWN0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlUHJvcGVydHkoXG5cdHByb3BlcnR5RGVmaW5pdGlvbjogTWV0YU1vZGVsUHJvcGVydHksXG5cdGVudGl0eVR5cGVPYmplY3Q6IFJhd0VudGl0eVR5cGUgfCBSYXdDb21wbGV4VHlwZSxcblx0cHJvcGVydHlOYW1lOiBzdHJpbmdcbik6IFJhd1Byb3BlcnR5IHtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJQcm9wZXJ0eVwiLFxuXHRcdG5hbWU6IHByb3BlcnR5TmFtZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eVR5cGVPYmplY3QuZnVsbHlRdWFsaWZpZWROYW1lfS8ke3Byb3BlcnR5TmFtZX1gLFxuXHRcdHR5cGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRtYXhMZW5ndGg6IHByb3BlcnR5RGVmaW5pdGlvbi4kTWF4TGVuZ3RoLFxuXHRcdHByZWNpc2lvbjogcHJvcGVydHlEZWZpbml0aW9uLiRQcmVjaXNpb24sXG5cdFx0c2NhbGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kU2NhbGUsXG5cdFx0bnVsbGFibGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kTnVsbGFibGUgPz8gdHJ1ZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5KFxuXHRuYXZQcm9wZXJ0eURlZmluaXRpb246IE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0ZW50aXR5VHlwZU9iamVjdDogUmF3RW50aXR5VHlwZSB8IFJhd0NvbXBsZXhUeXBlLFxuXHRuYXZQcm9wZXJ0eU5hbWU6IHN0cmluZ1xuKTogUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRsZXQgcmVmZXJlbnRpYWxDb25zdHJhaW50OiBSZWZlcmVudGlhbENvbnN0cmFpbnRbXSA9IFtdO1xuXHRpZiAobmF2UHJvcGVydHlEZWZpbml0aW9uLiRSZWZlcmVudGlhbENvbnN0cmFpbnQpIHtcblx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnQgPSBPYmplY3Qua2V5cyhuYXZQcm9wZXJ0eURlZmluaXRpb24uJFJlZmVyZW50aWFsQ29uc3RyYWludCkubWFwKChzb3VyY2VQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNvdXJjZVR5cGVOYW1lOiBlbnRpdHlUeXBlT2JqZWN0Lm5hbWUsXG5cdFx0XHRcdHNvdXJjZVByb3BlcnR5OiBzb3VyY2VQcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdHRhcmdldFR5cGVOYW1lOiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFR5cGUsXG5cdFx0XHRcdHRhcmdldFByb3BlcnR5OiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFJlZmVyZW50aWFsQ29uc3RyYWludFtzb3VyY2VQcm9wZXJ0eU5hbWVdXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eTogUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkgPSB7XG5cdFx0X3R5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5XCIsXG5cdFx0bmFtZTogbmF2UHJvcGVydHlOYW1lLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5VHlwZU9iamVjdC5mdWxseVF1YWxpZmllZE5hbWV9LyR7bmF2UHJvcGVydHlOYW1lfWAsXG5cdFx0cGFydG5lcjogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRQYXJ0bmVyLFxuXHRcdGlzQ29sbGVjdGlvbjogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRpc0NvbGxlY3Rpb24gPyBuYXZQcm9wZXJ0eURlZmluaXRpb24uJGlzQ29sbGVjdGlvbiA6IGZhbHNlLFxuXHRcdGNvbnRhaW5zVGFyZ2V0OiAhIW5hdlByb3BlcnR5RGVmaW5pdGlvbi4kQ29udGFpbnNUYXJnZXQsXG5cdFx0dGFyZ2V0VHlwZU5hbWU6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnRcblx0fTtcblxuXHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhcblx0bmF2aWdhdGlvblByb3BlcnR5QmluZGluZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0ZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nXG4pOiBSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIHtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdFx0T2JqZWN0LmVudHJpZXMobmF2aWdhdGlvblByb3BlcnR5QmluZGluZykubWFwKChbcGF0aCwgdGFyZ2V0XSkgPT4gW3BhdGgsIGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7dGFyZ2V0fWBdKVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlTZXQoZW50aXR5U2V0RGVmaW5pdGlvbjogTWV0YU1vZGVsRW50aXR5U2V0LCBlbnRpdHlTZXROYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd0VudGl0eVNldCB7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRW50aXR5U2V0XCIsXG5cdFx0bmFtZTogZW50aXR5U2V0TmFtZSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nOiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhlbnRpdHlTZXREZWZpbml0aW9uLiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLCBlbnRpdHlDb250YWluZXJOYW1lKSxcblx0XHRlbnRpdHlUeXBlTmFtZTogZW50aXR5U2V0RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7ZW50aXR5U2V0TmFtZX1gXG5cdH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVTaW5nbGV0b24oc2luZ2xldG9uRGVmaW5pdGlvbjogTWV0YU1vZGVsU2luZ2xldG9uLCBzaW5nbGV0b25OYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd1NpbmdsZXRvbiB7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiU2luZ2xldG9uXCIsXG5cdFx0bmFtZTogc2luZ2xldG9uTmFtZSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nOiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhzaW5nbGV0b25EZWZpbml0aW9uLiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLCBlbnRpdHlDb250YWluZXJOYW1lKSxcblx0XHRlbnRpdHlUeXBlTmFtZTogc2luZ2xldG9uRGVmaW5pdGlvbi4kVHlwZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7c2luZ2xldG9uTmFtZX1gLFxuXHRcdG51bGxhYmxlOiB0cnVlXG5cdH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBY3Rpb25JbXBvcnQoYWN0aW9uSW1wb3J0OiBNZXRhTW9kZWxBY3Rpb25JbXBvcnQsIGFjdGlvbkltcG9ydE5hbWU6IHN0cmluZywgZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nKTogUmF3QWN0aW9uSW1wb3J0IHtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJBY3Rpb25JbXBvcnRcIixcblx0XHRuYW1lOiBhY3Rpb25JbXBvcnROYW1lLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5Q29udGFpbmVyTmFtZX0vJHthY3Rpb25JbXBvcnROYW1lfWAsXG5cdFx0YWN0aW9uTmFtZTogYWN0aW9uSW1wb3J0LiRBY3Rpb25cblx0fTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVR5cGVEZWZpbml0aW9uKHR5cGVEZWZpbml0aW9uOiBNZXRhTW9kZWxUeXBlRGVmaW5pdGlvbiwgdHlwZU5hbWU6IHN0cmluZywgbmFtZXNwYWNlUHJlZml4OiBzdHJpbmcpOiBSYXdUeXBlRGVmaW5pdGlvbiB7XG5cdGNvbnN0IHR5cGVPYmplY3Q6IFJhd1R5cGVEZWZpbml0aW9uID0ge1xuXHRcdF90eXBlOiBcIlR5cGVEZWZpbml0aW9uXCIsXG5cdFx0bmFtZTogdHlwZU5hbWUuc3Vic3RyaW5nKG5hbWVzcGFjZVByZWZpeC5sZW5ndGgpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogdHlwZU5hbWUsXG5cdFx0dW5kZXJseWluZ1R5cGU6IHR5cGVEZWZpbml0aW9uLiRVbmRlcmx5aW5nVHlwZVxuXHR9O1xuXHRyZXR1cm4gdHlwZU9iamVjdDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUNvbXBsZXhUeXBlKGNvbXBsZXhUeXBlRGVmaW5pdGlvbjogTWV0YU1vZGVsQ29tcGxleFR5cGUsIGNvbXBsZXhUeXBlTmFtZTogc3RyaW5nLCBuYW1lc3BhY2VQcmVmaXg6IHN0cmluZyk6IFJhd0NvbXBsZXhUeXBlIHtcblx0Y29uc3QgY29tcGxleFR5cGVPYmplY3Q6IFJhd0NvbXBsZXhUeXBlID0ge1xuXHRcdF90eXBlOiBcIkNvbXBsZXhUeXBlXCIsXG5cdFx0bmFtZTogY29tcGxleFR5cGVOYW1lLnN1YnN0cmluZyhuYW1lc3BhY2VQcmVmaXgubGVuZ3RoKSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGNvbXBsZXhUeXBlTmFtZSxcblx0XHRwcm9wZXJ0aWVzOiBbXSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW11cblx0fTtcblxuXHRjb25zdCBjb21wbGV4VHlwZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhjb21wbGV4VHlwZURlZmluaXRpb24pXG5cdFx0LmZpbHRlcigocHJvcGVydHlOYW1lT3JOb3QpID0+IHtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRLZXlcIiAmJiBwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRraW5kXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBsZXhUeXBlRGVmaW5pdGlvbltwcm9wZXJ0eU5hbWVPck5vdF0uJGtpbmQgPT09IFwiUHJvcGVydHlcIjtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYSA+IGIgPyAxIDogLTEpKVxuXHRcdC5tYXAoKHByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByZXBhcmVQcm9wZXJ0eShjb21wbGV4VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lXSBhcyBNZXRhTW9kZWxQcm9wZXJ0eSwgY29tcGxleFR5cGVPYmplY3QsIHByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cblx0Y29tcGxleFR5cGVPYmplY3QucHJvcGVydGllcyA9IGNvbXBsZXhUeXBlUHJvcGVydGllcztcblx0Y29uc3QgY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGNvbXBsZXhUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGxleFR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZU9yTm90XS4ka2luZCA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIjtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYSA+IGIgPyAxIDogLTEpKVxuXHRcdC5tYXAoKG5hdlByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkoXG5cdFx0XHRcdGNvbXBsZXhUeXBlRGVmaW5pdGlvbltuYXZQcm9wZXJ0eU5hbWVdIGFzIE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0XHRcdFx0Y29tcGxleFR5cGVPYmplY3QsXG5cdFx0XHRcdG5hdlByb3BlcnR5TmFtZVxuXHRcdFx0KTtcblx0XHR9KTtcblx0Y29tcGxleFR5cGVPYmplY3QubmF2aWdhdGlvblByb3BlcnRpZXMgPSBjb21wbGV4VHlwZU5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRyZXR1cm4gY29tcGxleFR5cGVPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlLZXlzKGVudGl0eVR5cGVEZWZpbml0aW9uOiBNZXRhTW9kZWxFbnRpdHlUeXBlLCBvTWV0YU1vZGVsRGF0YTogTWV0YU1vZGVsQ29udGVudCk6IHN0cmluZ1tdIHtcblx0aWYgKCFlbnRpdHlUeXBlRGVmaW5pdGlvbi4kS2V5ICYmIGVudGl0eVR5cGVEZWZpbml0aW9uLiRCYXNlVHlwZSkge1xuXHRcdHJldHVybiBwcmVwYXJlRW50aXR5S2V5cyhvTWV0YU1vZGVsRGF0YVtlbnRpdHlUeXBlRGVmaW5pdGlvbi4kQmFzZVR5cGVdIGFzIE1ldGFNb2RlbEVudGl0eVR5cGUsIG9NZXRhTW9kZWxEYXRhKTtcblx0fVxuXHRyZXR1cm4gZW50aXR5VHlwZURlZmluaXRpb24uJEtleSA/PyBbXTsgLy9oYW5kbGluZyBvZiBlbnRpdHkgdHlwZXMgd2l0aG91dCBrZXkgYXMgd2VsbCBhcyBiYXNldHlwZVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlRW50aXR5VHlwZShcblx0ZW50aXR5VHlwZURlZmluaXRpb246IE1ldGFNb2RlbEVudGl0eVR5cGUsXG5cdGVudGl0eVR5cGVOYW1lOiBzdHJpbmcsXG5cdG5hbWVzcGFjZVByZWZpeDogc3RyaW5nLFxuXHRtZXRhTW9kZWxEYXRhOiBNZXRhTW9kZWxDb250ZW50LFxuXHRpZ25vcmVEYXRhZmllbGREZWZhdWx0OiBib29sZWFuXG4pOiBSYXdFbnRpdHlUeXBlIHtcblx0Y29uc3QgZW50aXR5VHlwZTogUmF3RW50aXR5VHlwZSA9IHtcblx0XHRfdHlwZTogXCJFbnRpdHlUeXBlXCIsXG5cdFx0bmFtZTogZW50aXR5VHlwZU5hbWUuc3Vic3RyaW5nKG5hbWVzcGFjZVByZWZpeC5sZW5ndGgpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogZW50aXR5VHlwZU5hbWUsXG5cdFx0a2V5czogW10sXG5cdFx0ZW50aXR5UHJvcGVydGllczogW10sXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdGFjdGlvbnM6IHt9XG5cdH07XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gZW50aXR5VHlwZURlZmluaXRpb24pIHtcblx0XHRjb25zdCB2YWx1ZSA9IGVudGl0eVR5cGVEZWZpbml0aW9uW2tleV07XG5cblx0XHRzd2l0Y2ggKHZhbHVlLiRraW5kKSB7XG5cdFx0XHRjYXNlIFwiUHJvcGVydHlcIjpcblx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSBwcmVwYXJlUHJvcGVydHkodmFsdWUsIGVudGl0eVR5cGUsIGtleSk7XG5cdFx0XHRcdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5XCI6XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkodmFsdWUsIGVudGl0eVR5cGUsIGtleSk7XG5cdFx0XHRcdGVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChuYXZpZ2F0aW9uUHJvcGVydHkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRlbnRpdHlUeXBlLmtleXMgPSBwcmVwYXJlRW50aXR5S2V5cyhlbnRpdHlUeXBlRGVmaW5pdGlvbiwgbWV0YU1vZGVsRGF0YSlcblx0XHQubWFwKChlbnRpdHlLZXkpID0+IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PT0gZW50aXR5S2V5KSlcblx0XHQuZmlsdGVyKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkgIT09IHVuZGVmaW5lZCkgYXMgUmF3RW50aXR5VHlwZVtcImtleXNcIl07XG5cblx0Y29uc3QgZW50aXR5VHlwZUFubm90YXRpb25zID0gbWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdIGFzIE1ldGFNb2RlbEVudGl0eVR5cGVBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZDtcblx0Ly8gQ2hlY2sgaWYgdGhlcmUgYXJlIGZpbHRlciBmYWNldHMgZGVmaW5lZCBmb3IgdGhlIGVudGl0eVR5cGUgYW5kIGlmIHllcywgY2hlY2sgaWYgYWxsIG9mIHRoZW0gaGF2ZSBhbiBJRFxuXHQvLyBUaGUgSUQgaXMgb3B0aW9uYWwsIGJ1dCBpdCBpcyBpbnRlcm5hbGx5IHRha2VuIGZvciBncm91cGluZyBmaWx0ZXIgZmllbGRzIGFuZCBpZiBpdCdzIG5vdCBwcmVzZW50XG5cdC8vIGEgZmFsbGJhY2sgSUQgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIGhlcmUuXG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGVBbm5vdGF0aW9ucz8uW2BAJHtVSUFubm90YXRpb25UZXJtcy5GaWx0ZXJGYWNldHN9YF0gYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJGYWNldHM+O1xuXHRmaWx0ZXJGYWNldHM/LmZvckVhY2goKGZpbHRlckZhY2V0QW5ub3RhdGlvbjogTWV0YU1vZGVsVHlwZTxSZWZlcmVuY2VGYWNldD4pID0+IHtcblx0XHRmaWx0ZXJGYWNldEFubm90YXRpb24uSUQgPSBjcmVhdGVSZWZlcmVuY2VGYWNldElkKGZpbHRlckZhY2V0QW5ub3RhdGlvbik7XG5cdH0pO1xuXG5cdC8vIENoZWNrIGlmIGVudGl0eVR5cGUgaGFzIG5vdCBtYW5kYXRvcnkgSGVhZGVySW5mb1xuXHRpZiAoXG5cdFx0ISFlbnRpdHlUeXBlPy5rZXlzLmxlbmd0aCAmJlxuXHRcdG1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lXSAmJlxuXHRcdCFlbnRpdHlUeXBlQW5ub3RhdGlvbnM/LltgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVySW5mb31gXVxuXHQpIHtcblx0XHRjb25zdCBoZWFkZXJJbmZvQW5ub3RhdGlvbjogTWV0YU1vZGVsVHlwZTxIZWFkZXJJbmZvPiA9IHtcblx0XHRcdCRUeXBlOiBgJHtVSUFubm90YXRpb25UeXBlcy5IZWFkZXJJbmZvVHlwZX1gLFxuXHRcdFx0VHlwZU5hbWU6IGAke2VudGl0eVR5cGUubmFtZX1gLFxuXHRcdFx0VHlwZU5hbWVQbHVyYWw6IFwiXCIsXG5cdFx0XHRUaXRsZToge1xuXHRcdFx0XHQkVHlwZTogYCR7VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkfWAsXG5cdFx0XHRcdFZhbHVlOiB7XG5cdFx0XHRcdFx0JFBhdGg6IGAke2VudGl0eVR5cGUua2V5c1swXS5uYW1lfWBcblx0XHRcdFx0fVxuXHRcdFx0fSBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZD4sXG5cdFx0XHR0ZXJtOiBVSUFubm90YXRpb25UZXJtcy5IZWFkZXJJbmZvXG5cdFx0fTtcblx0XHQvLyBBZGQgdGhlIG1pc3NpbmcgSGVhZGVySW5mb1xuXHRcdChtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gYXMgTWV0YU1vZGVsRW50aXR5VHlwZUFubm90YXRpb25zKVtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVySW5mb31gXSA9XG5cdFx0XHRoZWFkZXJJbmZvQW5ub3RhdGlvbjtcblx0fVxuXG5cdGZvciAoY29uc3QgZW50aXR5UHJvcGVydHkgb2YgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzKSB7XG5cdFx0aWYgKCFtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdKSB7XG5cdFx0XHRtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdID0ge307XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdCFpZ25vcmVEYXRhZmllbGREZWZhdWx0ICYmXG5cdFx0XHQhKG1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZV0gYXMgTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucylbXG5cdFx0XHRcdGBAJHtVSUFubm90YXRpb25UZXJtcy5EYXRhRmllbGREZWZhdWx0fWBcblx0XHRcdF1cblx0XHQpIHtcblx0XHRcdChtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdIGFzIE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMpW1xuXHRcdFx0XHRgQCR7VUlBbm5vdGF0aW9uVGVybXMuRGF0YUZpZWxkRGVmYXVsdH1gXG5cdFx0XHRdID0ge1xuXHRcdFx0XHQkVHlwZTogVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkLFxuXHRcdFx0XHRWYWx1ZTogeyAkUGF0aDogZW50aXR5UHJvcGVydHkubmFtZSB9XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbnRpdHlUeXBlO1xufVxuZnVuY3Rpb24gcHJlcGFyZUFjdGlvbihhY3Rpb25SYXdEYXRhOiBNZXRhTW9kZWxBY3Rpb24sIGFjdGlvbk5hbWU6IHN0cmluZywgbmFtZXNwYWNlUHJlZml4OiBzdHJpbmcpOiBSYXdBY3Rpb24ge1xuXHRsZXQgb3ZlcmxvYWRQYXJhbWV0ZXJzOiBNZXRhTW9kZWxBY3Rpb25bXCIkUGFyYW1ldGVyXCJdO1xuXHRpZiAoYWN0aW9uUmF3RGF0YS4ka2luZCA9PT0gXCJGdW5jdGlvblwiKSB7XG5cdFx0Ly8gZnVuY3Rpb24gLSBvdmVybG9hZCBpbmNsdWRlcyBhbGwgcGFyYW1ldGVycyAoYm91bmQgZW50aXR5IHR5cGUgX2FuZF8gb3RoZXIgcGFyYW1ldGVycylcblx0XHRvdmVybG9hZFBhcmFtZXRlcnMgPSBhY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXIgPz8gW107XG5cdH0gZWxzZSB7XG5cdFx0Ly8gYWN0aW9uIC0gb3ZlcmxvYWQgaXMgdGhlIGZpcnN0IHBhcmFtZXRlciBvciB0aGUgZW1wdHkgdW5ib3VuZCBvdmVybG9hZCBpbiBjYXNlIG9mIGFuIHVuYm91bmQgYWN0aW9uXG5cdFx0b3ZlcmxvYWRQYXJhbWV0ZXJzID0gYWN0aW9uUmF3RGF0YS4kSXNCb3VuZCA/IFthY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXJbMF1dIDogW107XG5cdH1cblxuXHRjb25zdCBvdmVybG9hZCA9IG92ZXJsb2FkUGFyYW1ldGVyc1xuXHRcdC5tYXAoKHBhcmFtZXRlcikgPT4gKHBhcmFtZXRlci4kaXNDb2xsZWN0aW9uID8gYENvbGxlY3Rpb24oJHtwYXJhbWV0ZXIuJFR5cGV9KWAgOiBwYXJhbWV0ZXIuJFR5cGUpKVxuXHRcdC5qb2luKFwiLFwiKTtcblxuXHRjb25zdCBmdWxseVF1YWxpZmllZE5hbWUgPSBgJHthY3Rpb25OYW1lfSgke292ZXJsb2FkfSlgO1xuXG5cdGNvbnN0IHBhcmFtZXRlcnMgPSBhY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXIgPz8gW107XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQWN0aW9uXCIsXG5cdFx0bmFtZTogYWN0aW9uTmFtZS5zdWJzdHJpbmcobmFtZXNwYWNlUHJlZml4Lmxlbmd0aCksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdGlzQm91bmQ6IGFjdGlvblJhd0RhdGEuJElzQm91bmQgPz8gZmFsc2UsXG5cdFx0aXNGdW5jdGlvbjogYWN0aW9uUmF3RGF0YS4ka2luZCA9PT0gXCJGdW5jdGlvblwiLFxuXHRcdHNvdXJjZVR5cGU6IG92ZXJsb2FkUGFyYW1ldGVyc1swXT8uJFR5cGUgPz8gXCJcIixcblx0XHRyZXR1cm5UeXBlOiBhY3Rpb25SYXdEYXRhLiRSZXR1cm5UeXBlPy4kVHlwZSA/PyBcIlwiLFxuXHRcdHJldHVybkNvbGxlY3Rpb246IGFjdGlvblJhd0RhdGEuJFJldHVyblR5cGU/LiRpc0NvbGxlY3Rpb24gPz8gZmFsc2UsXG5cdFx0cGFyYW1ldGVyczogcGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiAoe1xuXHRcdFx0X3R5cGU6IFwiQWN0aW9uUGFyYW1ldGVyXCIsXG5cdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2Z1bGx5UXVhbGlmaWVkTmFtZX0vJHtwYXJhbS4kTmFtZX1gLFxuXHRcdFx0aXNDb2xsZWN0aW9uOiBwYXJhbS4kaXNDb2xsZWN0aW9uID8/IGZhbHNlLFxuXHRcdFx0bmFtZTogcGFyYW0uJE5hbWUsXG5cdFx0XHR0eXBlOiBwYXJhbS4kVHlwZSxcblx0XHRcdG51bGxhYmxlOiBwYXJhbS4kTnVsbGFibGUgPz8gZmFsc2UsXG5cdFx0XHRtYXhMZW5ndGg6IHBhcmFtLiRNYXhMZW5ndGgsXG5cdFx0XHRwcmVjaXNpb246IHBhcmFtLiRQcmVjaXNpb24sXG5cdFx0XHRzY2FsZTogcGFyYW0uJFNjYWxlXG5cdFx0fSkpXG5cdH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRW50aXR5Q29udGFpbmVyKFxuXHRuYW1lc3BhY2VQcmVmaXg6IHN0cmluZyxcblx0ZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nLFxuXHRlbnRpdHlDb250YWluZXJNZXRhZGF0YTogTWV0YU1vZGVsRW50aXR5Q29udGFpbmVyLFxuXHRzY2hlbWE6IFJhd1NjaGVtYVxuKTogdm9pZCB7XG5cdHNjaGVtYS5lbnRpdHlDb250YWluZXIgPSB7XG5cdFx0X3R5cGU6IFwiRW50aXR5Q29udGFpbmVyXCIsXG5cdFx0bmFtZTogZW50aXR5Q29udGFpbmVyTmFtZS5zdWJzdHJpbmcobmFtZXNwYWNlUHJlZml4Lmxlbmd0aCksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBlbnRpdHlDb250YWluZXJOYW1lXG5cdH07XG5cblx0Zm9yIChjb25zdCBlbGVtZW50TmFtZSBpbiBlbnRpdHlDb250YWluZXJNZXRhZGF0YSkge1xuXHRcdGNvbnN0IGVsZW1lbnRWYWx1ZSA9IGVudGl0eUNvbnRhaW5lck1ldGFkYXRhW2VsZW1lbnROYW1lXTtcblx0XHRzd2l0Y2ggKGVsZW1lbnRWYWx1ZS4ka2luZCkge1xuXHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRzY2hlbWEuZW50aXR5U2V0cy5wdXNoKHByZXBhcmVFbnRpdHlTZXQoZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIlNpbmdsZXRvblwiOlxuXHRcdFx0XHRzY2hlbWEuc2luZ2xldG9ucy5wdXNoKHByZXBhcmVTaW5nbGV0b24oZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIkFjdGlvbkltcG9ydFwiOlxuXHRcdFx0XHRzY2hlbWEuYWN0aW9uSW1wb3J0cy5wdXNoKHByZXBhcmVBY3Rpb25JbXBvcnQoZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9ucyhhbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsQW5ub3RhdGlvbnM+LCBjYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKTogQW5ub3RhdGlvbkxpc3RbXSB7XG5cdGNvbnN0IGFubm90YXRpb25MaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+ID0ge307XG5cdGZvciAoY29uc3QgdGFyZ2V0IGluIGFubm90YXRpb25zKSB7XG5cdFx0Y3JlYXRlQW5ub3RhdGlvbkxpc3RzKGFubm90YXRpb25zW3RhcmdldF0sIHRhcmdldCwgYW5ub3RhdGlvbkxpc3RzLCBjYXBhYmlsaXRpZXMpO1xuXHR9XG5cdHJldHVybiBPYmplY3QudmFsdWVzKGFubm90YXRpb25MaXN0cyk7XG59XG5cbnR5cGUgTWV0YU1vZGVsU2NoZW1hID0ge1xuXHQka2luZDogXCJTY2hlbWFcIjtcbn07XG50eXBlIE1ldGFNb2RlbEVudGl0eVNldCA9IHtcblx0JGtpbmQ6IFwiRW50aXR5U2V0XCI7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbnR5cGUgTWV0YU1vZGVsVHlwZXM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHQvLyBAdHMtaWdub3JlXG5cdFtrZXkgaW4ga2V5b2YgVF06IE1ldGFNb2RlbFR5cGU8VFtrZXldPjtcbn07XG5leHBvcnQgdHlwZSBNZXRhTW9kZWxFbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBSZW5hbWU8XCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5cIiwgTWV0YU1vZGVsVHlwZXM8RW50aXR5VHlwZUFubm90YXRpb25zX0NhcGFiaWxpdGllcz4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxFbnRpdHlUeXBlQW5ub3RhdGlvbnNfVUk+PjtcblxuZXhwb3J0IHR5cGUgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbnMgPSBSZW5hbWU8XCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5cIiwgTWV0YU1vZGVsVHlwZXM8RW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzPj4gJlxuXHRSZW5hbWU8XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuXCIsIE1ldGFNb2RlbFR5cGVzPEVudGl0eVNldEFubm90YXRpb25zX1VJPj47XG5cbmV4cG9ydCB0eXBlIE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMgPSBSZW5hbWU8XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbj4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX1VJPj4gJlxuXHRSZW5hbWU8XCJAT3JnLk9EYXRhLkNvcmUuVjEuXCIsIE1ldGFNb2RlbFR5cGVzPFByb3BlcnR5QW5ub3RhdGlvbnNfQ29yZT4+ICZcblx0UmVuYW1lPFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuXCIsIE1ldGFNb2RlbFR5cGVzPFByb3BlcnR5QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzPj4gJlxuXHRSZW5hbWU8XCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX01lYXN1cmVzPj4gJlxuXHRSZW5hbWU8XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX0FuYWx5dGljcz4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuXCIsIE1ldGFNb2RlbFR5cGVzPFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbXVuaWNhdGlvbj4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5cIiwgTWV0YU1vZGVsVHlwZXM8UHJvcGVydHlBbm5vdGF0aW9uc19QZXJzb25hbERhdGE+PiAmXG5cdFJlbmFtZTxcIkBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX1Nlc3Npb24+PiAmIHtcblx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIjogTWV0YU1vZGVsRW51bTxUZXh0QXJyYW5nZW1lbnQ+O1xuXHR9O1xudHlwZSBNZXRhTW9kZWxBY3Rpb25JbXBvcnQgPSB7XG5cdCRraW5kOiBcIkFjdGlvbkltcG9ydFwiO1xuXHQkQWN0aW9uOiBzdHJpbmc7XG59O1xudHlwZSBNZXRhTW9kZWxTaW5nbGV0b24gPSB7XG5cdCRraW5kOiBcIlNpbmdsZXRvblwiO1xuXHQkVHlwZTogc3RyaW5nO1xuXHQkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xudHlwZSBNZXRhTW9kZWxFbnRpdHlDb250YWluZXIgPSB7XG5cdCRraW5kOiBcIkVudGl0eUNvbnRhaW5lclwiO1xufSAmIHtcblx0W25hbWU6IHN0cmluZ106IE1ldGFNb2RlbEVudGl0eVNldCB8IE1ldGFNb2RlbFNpbmdsZXRvbiB8IE1ldGFNb2RlbEFjdGlvbkltcG9ydDtcbn07XG50eXBlIE1ldGFNb2RlbFByb3BlcnR5ID0ge1xuXHQka2luZDogXCJQcm9wZXJ0eVwiO1xuXHQkVHlwZTogc3RyaW5nO1xuXHQkTWF4TGVuZ3RoPzogbnVtYmVyO1xuXHQkUHJlY2lzaW9uPzogbnVtYmVyO1xuXHQkU2NhbGU/OiBudW1iZXI7XG5cdCROdWxsYWJsZT86IGJvb2xlYW47XG59O1xudHlwZSBNZXRhTW9kZWxOYXZpZ2F0aW9uUHJvcGVydHkgPSB7XG5cdCRraW5kOiBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiO1xuXHQkVHlwZTogc3RyaW5nO1xuXHQkUGFydG5lcj86IHN0cmluZztcblx0JGlzQ29sbGVjdGlvbj86IGJvb2xlYW47XG5cdCRDb250YWluc1RhcmdldD86IGJvb2xlYW47XG5cdCRSZWZlcmVudGlhbENvbnN0cmFpbnQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xudHlwZSBNZXRhTW9kZWxFbnRpdHlUeXBlID0ge1xuXHQka2luZDogXCJFbnRpdHlUeXBlXCI7XG5cdCRCYXNlVHlwZT86IHN0cmluZztcblx0JEtleTogc3RyaW5nW107XG59ICYge1xuXHRbbmFtZTogc3RyaW5nXTogTWV0YU1vZGVsUHJvcGVydHkgfCBNZXRhTW9kZWxOYXZpZ2F0aW9uUHJvcGVydHk7XG59O1xudHlwZSBNZXRhTW9kZWxDb21wbGV4VHlwZSA9IHtcblx0JGtpbmQ6IFwiQ29tcGxleFR5cGVcIjtcbn0gJiB7XG5cdFtuYW1lOiBzdHJpbmddOiBNZXRhTW9kZWxQcm9wZXJ0eSB8IE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eTtcbn07XG50eXBlIE1ldGFNb2RlbFR5cGVEZWZpbml0aW9uID0ge1xuXHQka2luZDogXCJUeXBlRGVmaW5pdGlvblwiO1xuXHQkVW5kZXJseWluZ1R5cGU6IHN0cmluZztcbn07XG50eXBlIE1ldGFNb2RlbE9iamVjdCA9XG5cdHwgTWV0YU1vZGVsRW50aXR5U2V0XG5cdHwgTWV0YU1vZGVsU2NoZW1hXG5cdHwgTWV0YU1vZGVsRW50aXR5Q29udGFpbmVyXG5cdHwgTWV0YU1vZGVsQWN0aW9uXG5cdHwgTWV0YU1vZGVsRW50aXR5VHlwZVxuXHR8IE1ldGFNb2RlbENvbXBsZXhUeXBlXG5cdHwgTWV0YU1vZGVsVHlwZURlZmluaXRpb247XG50eXBlIE1ldGFNb2RlbEFubm90YXRpb25zID0gTWV0YU1vZGVsRW50aXR5VHlwZUFubm90YXRpb25zIHwgTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyB8IE1ldGFNb2RlbEVudGl0eVNldEFubm90YXRpb25zO1xuXG50eXBlIE1ldGFNb2RlbENvbnRlbnQgPSB7XG5cdCRBbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsQW5ub3RhdGlvbnM+O1xufSAmIFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbE9iamVjdCB8IE1ldGFNb2RlbE9iamVjdFtdPjtcbmZ1bmN0aW9uIHBhcnNlU2NoZW1hKG1ldGFNb2RlbERhdGE6IE1ldGFNb2RlbENvbnRlbnQsIGlnbm9yZURhdGFmaWVsZERlZmF1bHQ6IGJvb2xlYW4pOiBSYXdTY2hlbWEge1xuXHQvLyBhc3N1bWluZyB0aGVyZSBpcyBvbmx5IG9uZSBzY2hlbWEvbmFtZXNwYWNlXG5cdGNvbnN0IG5hbWVzcGFjZVByZWZpeCA9XG5cdFx0T2JqZWN0LmtleXMobWV0YU1vZGVsRGF0YSkuZmluZCgoa2V5KSA9PiB7XG5cdFx0XHRjb25zdCBtZXRhbW9kZWxPYmplY3QgPSBtZXRhTW9kZWxEYXRhW2tleV07XG5cdFx0XHRyZXR1cm4gIUFycmF5LmlzQXJyYXkobWV0YW1vZGVsT2JqZWN0KSAmJiBtZXRhbW9kZWxPYmplY3QuJGtpbmQgPT09IFwiU2NoZW1hXCI7XG5cdFx0fSkgPz8gXCJcIjtcblxuXHRjb25zdCBzY2hlbWE6IFJhd1NjaGVtYSA9IHtcblx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZVByZWZpeC5zbGljZSgwLCAtMSksXG5cdFx0ZW50aXR5Q29udGFpbmVyOiB7IF90eXBlOiBcIkVudGl0eUNvbnRhaW5lclwiLCBuYW1lOiBcIlwiLCBmdWxseVF1YWxpZmllZE5hbWU6IFwiXCIgfSxcblx0XHRlbnRpdHlTZXRzOiBbXSxcblx0XHRlbnRpdHlUeXBlczogW10sXG5cdFx0Y29tcGxleFR5cGVzOiBbXSxcblx0XHR0eXBlRGVmaW5pdGlvbnM6IFtdLFxuXHRcdHNpbmdsZXRvbnM6IFtdLFxuXHRcdGFzc29jaWF0aW9uczogW10sXG5cdFx0YXNzb2NpYXRpb25TZXRzOiBbXSxcblx0XHRhY3Rpb25zOiBbXSxcblx0XHRhY3Rpb25JbXBvcnRzOiBbXSxcblx0XHRhbm5vdGF0aW9uczoge31cblx0fTtcblxuXHRjb25zdCBwYXJzZU1ldGFNb2RlbEVsZW1lbnQgPSAobmFtZTogc3RyaW5nLCB2YWx1ZTogTWV0YU1vZGVsT2JqZWN0KTogdm9pZCA9PiB7XG5cdFx0c3dpdGNoICh2YWx1ZS4ka2luZCkge1xuXHRcdFx0Y2FzZSBcIkVudGl0eUNvbnRhaW5lclwiOlxuXHRcdFx0XHRwYXJzZUVudGl0eUNvbnRhaW5lcihuYW1lc3BhY2VQcmVmaXgsIG5hbWUsIHZhbHVlLCBzY2hlbWEpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIkFjdGlvblwiOlxuXHRcdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRcdHNjaGVtYS5hY3Rpb25zLnB1c2gocHJlcGFyZUFjdGlvbih2YWx1ZSwgbmFtZSwgbmFtZXNwYWNlUHJlZml4KSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiRW50aXR5VHlwZVwiOlxuXHRcdFx0XHRzY2hlbWEuZW50aXR5VHlwZXMucHVzaChwcmVwYXJlRW50aXR5VHlwZSh2YWx1ZSwgbmFtZSwgbmFtZXNwYWNlUHJlZml4LCBtZXRhTW9kZWxEYXRhLCBpZ25vcmVEYXRhZmllbGREZWZhdWx0KSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdFx0c2NoZW1hLmNvbXBsZXhUeXBlcy5wdXNoKHByZXBhcmVDb21wbGV4VHlwZSh2YWx1ZSwgbmFtZSwgbmFtZXNwYWNlUHJlZml4KSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiVHlwZURlZmluaXRpb25cIjpcblx0XHRcdFx0c2NoZW1hLnR5cGVEZWZpbml0aW9ucy5wdXNoKHByZXBhcmVUeXBlRGVmaW5pdGlvbih2YWx1ZSwgbmFtZSwgbmFtZXNwYWNlUHJlZml4KSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0Y2FzZSBcIlNjaGVtYVwiOlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH07XG5cblx0Zm9yIChjb25zdCBlbGVtZW50TmFtZSBpbiBtZXRhTW9kZWxEYXRhKSB7XG5cdFx0Y29uc3QgZWxlbWVudFZhbHVlID0gbWV0YU1vZGVsRGF0YVtlbGVtZW50TmFtZV07XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50VmFsdWUpKSB7XG5cdFx0XHQvLyB2YWx1ZSBjYW4gYmUgYW4gYXJyYXkgaW4gY2FzZSBvZiBhY3Rpb25zIG9yIGZ1bmN0aW9uc1xuXHRcdFx0Zm9yIChjb25zdCBzdWJFbGVtZW50VmFsdWUgb2YgZWxlbWVudFZhbHVlKSB7XG5cdFx0XHRcdHBhcnNlTWV0YU1vZGVsRWxlbWVudChlbGVtZW50TmFtZSwgc3ViRWxlbWVudFZhbHVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFyc2VNZXRhTW9kZWxFbGVtZW50KGVsZW1lbnROYW1lLCBlbGVtZW50VmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzY2hlbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1ldGFNb2RlbChcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0Y2FwYWJpbGl0aWVzOiBFbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IERlZmF1bHRFbnZpcm9ubWVudENhcGFiaWxpdGllcyxcblx0aWdub3JlRGF0YWZpZWxkRGVmYXVsdCA9IGZhbHNlXG4pOiBSYXdNZXRhZGF0YSB7XG5cdGNvbnN0IHJlc3VsdDogT21pdDxSYXdNZXRhZGF0YSwgXCJzY2hlbWFcIj4gPSB7XG5cdFx0aWRlbnRpZmljYXRpb246IFwibWV0YW1vZGVsUmVzdWx0XCIsXG5cdFx0dmVyc2lvbjogXCI0LjBcIixcblx0XHRyZWZlcmVuY2VzOiBbXVxuXHR9O1xuXG5cdC8vIHBhcnNlIHRoZSBzY2hlbWEgd2hlbiBpdCBpcyBhY2Nlc3NlZCBmb3IgdGhlIGZpcnN0IHRpbWVcblx0QW5ub3RhdGlvbkNvbnZlcnRlci5sYXp5KHJlc3VsdCBhcyBSYXdNZXRhZGF0YSwgXCJzY2hlbWFcIiwgKCkgPT4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbERhdGEgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiLyRcIik7XG5cdFx0Y29uc3Qgc2NoZW1hID0gcGFyc2VTY2hlbWEobWV0YU1vZGVsRGF0YSwgaWdub3JlRGF0YWZpZWxkRGVmYXVsdCk7XG5cblx0XHRBbm5vdGF0aW9uQ29udmVydGVyLmxhenkoc2NoZW1hLmFubm90YXRpb25zLCBcIm1ldGFtb2RlbFJlc3VsdFwiLCAoKSA9PiBwYXJzZUFubm90YXRpb25zKG1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zLCBjYXBhYmlsaXRpZXMpKTtcblxuXHRcdHJldHVybiBzY2hlbWE7XG5cdH0pO1xuXG5cdHJldHVybiByZXN1bHQgYXMgUmF3TWV0YWRhdGE7XG59XG5cbmNvbnN0IGNvbnZlcnRlZE1ldGFNb2RlbE1hcDogUmVjb3JkPHN0cmluZywgQ29udmVydGVkTWV0YWRhdGE+ID0ge307XG5jb25zdCBtZXRhTW9kZWxJRE1hcDogUmVjb3JkPHN0cmluZywgU3RyaW5nPiA9IHt9O1xuY29uc3QgbWV0YU1vZGVsTWFwOiBXZWFrTWFwPFN0cmluZywgT0RhdGFNZXRhTW9kZWw+ID0gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IHZpcnR1YWxQcm9wZXJ0aWVzTWFwOiBSZWNvcmQ8XG5cdHN0cmluZyxcblx0UmVjb3JkPHN0cmluZywgKHBhdGg6IHN0cmluZywgY29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLCByZWxhdGl2ZVBhdGg/OiBzdHJpbmcpID0+IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPj5cbj4gPSB7fTtcblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBPRGF0YU1ldGFNb2RlbCBpbnRvIGFub3RoZXIgZm9ybWF0IHRoYXQgYWxsb3cgZm9yIGVhc3kgbWFuaXB1bGF0aW9uIG9mIHRoZSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBPRGF0YU1ldGFNb2RlbFxuICogQHBhcmFtIG9DYXBhYmlsaXRpZXMgVGhlIGN1cnJlbnQgY2FwYWJpbGl0aWVzXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBvYmplY3QtbGlrZSBhbm5vdGF0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGVzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBvQ2FwYWJpbGl0aWVzPzogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMpOiBDb252ZXJ0ZWRNZXRhZGF0YSB7XG5cdGNvbnN0IG1ldGFNb2RlbElEID0gKG9NZXRhTW9kZWwgYXMgeyBpZD86IHN0cmluZyB9KS5pZCE7XG5cdGlmICghY29udmVydGVkTWV0YU1vZGVsTWFwLmhhc093blByb3BlcnR5KG1ldGFNb2RlbElEKSkge1xuXHRcdGNvbnN0IHBhcnNlZE91dHB1dCA9IHBhcnNlTWV0YU1vZGVsKG9NZXRhTW9kZWwsIG9DYXBhYmlsaXRpZXMpO1xuXHRcdHRyeSB7XG5cdFx0XHRjb252ZXJ0ZWRNZXRhTW9kZWxNYXBbbWV0YU1vZGVsSURdID0gQW5ub3RhdGlvbkNvbnZlcnRlci5jb252ZXJ0KHBhcnNlZE91dHB1dCk7XG5cdFx0XHR2aXJ0dWFsUHJvcGVydGllc01hcFttZXRhTW9kZWxJRF0gPSB7XG5cdFx0XHRcdGNyaXRpY2FsaXR5OiBnZXRWaXJ0dWFsQ3JpdGljYWxpdHlFeHByZXNzaW9uXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsU3ltYm9sID0gbmV3IFN0cmluZyhtZXRhTW9kZWxJRCk7XG5cdFx0XHRtZXRhTW9kZWxJRE1hcFttZXRhTW9kZWxJRF0gPSBtZXRhTW9kZWxTeW1ib2w7XG5cdFx0XHRtZXRhTW9kZWxNYXAuc2V0KG1ldGFNb2RlbFN5bWJvbCwgb01ldGFNb2RlbCk7XG5cdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3Iob0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb252ZXJ0ZWRNZXRhTW9kZWxNYXBbbWV0YU1vZGVsSURdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFNb2RlbEJ5SWQoaWQ6IHN0cmluZyk6IE9EYXRhTWV0YU1vZGVsIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc3ltYm9sID0gbWV0YU1vZGVsSURNYXBbaWRdO1xuXHRyZXR1cm4gbWV0YU1vZGVsTWFwLmdldChzeW1ib2wpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnZlcnRlZFR5cGVzKG9Db250ZXh0OiBDb250ZXh0KTogQ29udmVydGVkTWV0YWRhdGEge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSBhcyB1bmtub3duIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRpZiAoIW9NZXRhTW9kZWwuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBPRGF0YU1ldGFNb2RlbFwiKTtcblx0fVxuXHRyZXR1cm4gY29udmVydFR5cGVzKG9NZXRhTW9kZWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlTW9kZWxDYWNoZURhdGEob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiB2b2lkIHtcblx0aWYgKG9NZXRhTW9kZWwpIHtcblx0XHRkZWxldGUgY29udmVydGVkTWV0YU1vZGVsTWFwWyhvTWV0YU1vZGVsIGFzIHVua25vd24gYXMgeyBpZDogc3RyaW5nIH0pLmlkXTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydE1ldGFNb2RlbENvbnRleHQob01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQsIGJJbmNsdWRlVmlzaXRlZE9iamVjdHM6IHRydWUpOiB1bmRlZmluZWQgfCBSZXNvbHZlZFRhcmdldDtcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCk6IHVuZGVmaW5lZCB8IFNlcnZpY2VPYmplY3QgfCBBY3Rpb25QYXJhbWV0ZXIgfCBSZWNvcmRDb21wbGV4VHlwZTtcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChcblx0b01ldGFNb2RlbENvbnRleHQ6IENvbnRleHQsXG5cdGJJbmNsdWRlVmlzaXRlZE9iamVjdHMgPSBmYWxzZVxuKTogdW5kZWZpbmVkIHwgU2VydmljZU9iamVjdCB8IEFjdGlvblBhcmFtZXRlciB8IFJlY29yZENvbXBsZXhUeXBlIHwgUmVzb2x2ZWRUYXJnZXQge1xuXHRjb25zdCBvQ29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdGNvbnN0IHNQYXRoID0gb01ldGFNb2RlbENvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdGNvbnN0IGFQYXRoU3BsaXQgPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBmaXJzdFBhcnQgPSBhUGF0aFNwbGl0WzFdO1xuXHRsZXQgYmVnaW5JbmRleCA9IDI7XG5cdGlmIChvQ29udmVydGVkTWV0YWRhdGEuZW50aXR5Q29udGFpbmVyLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gZmlyc3RQYXJ0KSB7XG5cdFx0Zmlyc3RQYXJ0ID0gYVBhdGhTcGxpdFsyXTtcblx0XHRiZWdpbkluZGV4Kys7XG5cdH1cblx0bGV0IHRhcmdldEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uID0gb0NvbnZlcnRlZE1ldGFkYXRhLmVudGl0eVNldHMuZmluZChcblx0XHQoZW50aXR5U2V0KSA9PiBlbnRpdHlTZXQubmFtZSA9PT0gZmlyc3RQYXJ0XG5cdCkgYXMgRW50aXR5U2V0O1xuXHRpZiAoIXRhcmdldEVudGl0eVNldCkge1xuXHRcdHRhcmdldEVudGl0eVNldCA9IG9Db252ZXJ0ZWRNZXRhZGF0YS5zaW5nbGV0b25zLmZpbmQoKHNpbmdsZXRvbikgPT4gc2luZ2xldG9uLm5hbWUgPT09IGZpcnN0UGFydCkgYXMgU2luZ2xldG9uO1xuXHR9XG5cdGxldCByZWxhdGl2ZVBhdGggPSBhUGF0aFNwbGl0LnNsaWNlKGJlZ2luSW5kZXgpLmpvaW4oXCIvXCIpO1xuXG5cdGNvbnN0IGxvY2FsT2JqZWN0czogU2VydmljZU9iamVjdFtdID0gW3RhcmdldEVudGl0eVNldF07XG5cdHdoaWxlIChyZWxhdGl2ZVBhdGggJiYgcmVsYXRpdmVQYXRoLmxlbmd0aCA+IDAgJiYgcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiKSkge1xuXHRcdGxldCByZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRsZXQgaWR4ID0gMDtcblx0XHRsZXQgY3VycmVudEVudGl0eVNldCwgc05hdlByb3BUb0NoZWNrO1xuXG5cdFx0cmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlU3BsaXQuc2xpY2UoMSk7IC8vIFJlbW92aW5nIFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIlxuXHRcdHdoaWxlICghY3VycmVudEVudGl0eVNldCAmJiByZWxhdGl2ZVNwbGl0Lmxlbmd0aCA+IGlkeCkge1xuXHRcdFx0aWYgKHJlbGF0aXZlU3BsaXRbaWR4XSAhPT0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiKSB7XG5cdFx0XHRcdC8vIEZpbmRpbmcgdGhlIGNvcnJlY3QgZW50aXR5U2V0IGZvciB0aGUgbmF2aWdhaXRvbiBwcm9wZXJ0eSBiaW5kaW5nIGV4YW1wbGU6IFwiU2V0L19TYWxlc09yZGVyXCJcblx0XHRcdFx0c05hdlByb3BUb0NoZWNrID0gcmVsYXRpdmVTcGxpdFxuXHRcdFx0XHRcdC5zbGljZSgwLCBpZHggKyAxKVxuXHRcdFx0XHRcdC5qb2luKFwiL1wiKVxuXHRcdFx0XHRcdC5yZXBsYWNlKFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIsIFwiXCIpO1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gdGFyZ2V0RW50aXR5U2V0ICYmIHRhcmdldEVudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW3NOYXZQcm9wVG9DaGVja107XG5cdFx0XHR9XG5cdFx0XHRpZHgrKztcblx0XHR9XG5cdFx0aWYgKCFjdXJyZW50RW50aXR5U2V0KSB7XG5cdFx0XHQvLyBGYWxsIGJhY2sgdG8gU2luZ2xlIG5hdiBwcm9wIGlmIGVudGl0eVNldCBpcyBub3QgZm91bmQuXG5cdFx0XHRzTmF2UHJvcFRvQ2hlY2sgPSByZWxhdGl2ZVNwbGl0WzBdO1xuXHRcdH1cblx0XHRjb25zdCBhTmF2UHJvcHMgPSBzTmF2UHJvcFRvQ2hlY2s/LnNwbGl0KFwiL1wiKSB8fCBbXTtcblx0XHRsZXQgdGFyZ2V0RW50aXR5VHlwZSA9IHRhcmdldEVudGl0eVNldCAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRmb3IgKGNvbnN0IHNOYXZQcm9wIG9mIGFOYXZQcm9wcykge1xuXHRcdFx0Ly8gUHVzaGluZyBhbGwgbmF2IHByb3BzIHRvIHRoZSB2aXNpdGVkIG9iamVjdHMuIGV4YW1wbGU6IFwiU2V0XCIsIFwiX1NhbGVzT3JkZXJcIiBmb3IgXCJTZXQvX1NhbGVzT3JkZXJcIihpbiBOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKVxuXHRcdFx0Y29uc3QgdGFyZ2V0TmF2UHJvcCA9IHRhcmdldEVudGl0eVR5cGUgJiYgdGFyZ2V0RW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUgPT09IHNOYXZQcm9wKTtcblx0XHRcdGlmICh0YXJnZXROYXZQcm9wKSB7XG5cdFx0XHRcdGxvY2FsT2JqZWN0cy5wdXNoKHRhcmdldE5hdlByb3ApO1xuXHRcdFx0XHR0YXJnZXRFbnRpdHlUeXBlID0gdGFyZ2V0TmF2UHJvcC50YXJnZXRUeXBlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRhcmdldEVudGl0eVNldCA9XG5cdFx0XHQodGFyZ2V0RW50aXR5U2V0ICYmIGN1cnJlbnRFbnRpdHlTZXQpIHx8ICh0YXJnZXRFbnRpdHlTZXQgJiYgdGFyZ2V0RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbcmVsYXRpdmVTcGxpdFswXV0pO1xuXHRcdGlmICh0YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdC8vIFB1c2hpbmcgdGhlIHRhcmdldCBlbnRpdHlTZXQgdG8gdmlzaXRlZCBvYmplY3RzXG5cdFx0XHRsb2NhbE9iamVjdHMucHVzaCh0YXJnZXRFbnRpdHlTZXQpO1xuXHRcdH1cblx0XHQvLyBSZS1jYWxjdWxhdGluZyB0aGUgcmVsYXRpdmUgcGF0aFxuXHRcdC8vIEFzIGVhY2ggbmF2aWdhdGlvbiBuYW1lIGlzIGVuY2xvc2VkIGJldHdlZW4gJyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJyBhbmQgJyQnICh0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgZW50aXR5c2V0IGVhc2lseSBpbiB0aGUgbWV0YW1vZGVsKVxuXHRcdC8vIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjbG9zaW5nICckJyB0byBiZSBhYmxlIHRvIHN3aXRjaCB0byB0aGUgbmV4dCBuYXZpZ2F0aW9uXG5cdFx0cmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlU3BsaXQuc2xpY2UoYU5hdlByb3BzLmxlbmd0aCB8fCAxKTtcblx0XHRpZiAocmVsYXRpdmVTcGxpdC5sZW5ndGggJiYgcmVsYXRpdmVTcGxpdFswXSA9PT0gXCIkXCIpIHtcblx0XHRcdHJlbGF0aXZlU3BsaXQuc2hpZnQoKTtcblx0XHR9XG5cdFx0cmVsYXRpdmVQYXRoID0gcmVsYXRpdmVTcGxpdC5qb2luKFwiL1wiKTtcblx0fVxuXHRpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkVHlwZVwiKSkge1xuXHRcdC8vIEFzICRUeXBlQCBpcyBhbGxvd2VkIGFzIHdlbGxcblx0XHRpZiAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoXCIkVHlwZUBcIikpIHtcblx0XHRcdHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlUGF0aC5yZXBsYWNlKFwiJFR5cGVcIiwgXCJcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdlJ3JlIGFueXdheSBnb2luZyB0byBsb29rIG9uIHRoZSBlbnRpdHlUeXBlLi4uXG5cdFx0XHRyZWxhdGl2ZVBhdGggPSBhUGF0aFNwbGl0LnNsaWNlKDMpLmpvaW4oXCIvXCIpO1xuXHRcdH1cblx0fVxuXHRpZiAodGFyZ2V0RW50aXR5U2V0ICYmIHJlbGF0aXZlUGF0aC5sZW5ndGgpIHtcblx0XHRjb25zdCBvVGFyZ2V0ID0gdGFyZ2V0RW50aXR5U2V0LmVudGl0eVR5cGUucmVzb2x2ZVBhdGgocmVsYXRpdmVQYXRoLCBiSW5jbHVkZVZpc2l0ZWRPYmplY3RzKTtcblx0XHRpZiAob1RhcmdldCkge1xuXHRcdFx0aWYgKGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRcdFx0b1RhcmdldC52aXNpdGVkT2JqZWN0cyA9IGxvY2FsT2JqZWN0cy5jb25jYXQob1RhcmdldC52aXNpdGVkT2JqZWN0cyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5hY3Rpb25zKSB7XG5cdFx0XHQvLyBpZiB0YXJnZXQgaXMgYW4gYWN0aW9uIG9yIGFuIGFjdGlvbiBwYXJhbWV0ZXJcblx0XHRcdGNvbnN0IGFjdGlvbnMgPSB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5hY3Rpb25zO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVTcGxpdCA9IHJlbGF0aXZlUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRpZiAoYWN0aW9uc1tyZWxhdGl2ZVNwbGl0WzBdXSkge1xuXHRcdFx0XHRjb25zdCBhY3Rpb24gPSBhY3Rpb25zW3JlbGF0aXZlU3BsaXRbMF1dO1xuXHRcdFx0XHRpZiAocmVsYXRpdmVTcGxpdFsxXSAmJiBhY3Rpb24ucGFyYW1ldGVycykge1xuXHRcdFx0XHRcdGNvbnN0IHBhcmFtZXRlck5hbWUgPSByZWxhdGl2ZVNwbGl0WzFdO1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24ucGFyYW1ldGVycy5maW5kKChwYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBwYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lLmVuZHNXaXRoKGAvJHtwYXJhbWV0ZXJOYW1lfWApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0aXZlUGF0aC5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvVGFyZ2V0O1xuXHR9IGVsc2Uge1xuXHRcdGlmIChiSW5jbHVkZVZpc2l0ZWRPYmplY3RzKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0YXJnZXQ6IHRhcmdldEVudGl0eVNldCxcblx0XHRcdFx0dmlzaXRlZE9iamVjdHM6IGxvY2FsT2JqZWN0c1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldEVudGl0eVNldDtcblx0fVxufVxuXG5leHBvcnQgdHlwZSBSZXNvbHZlZFRhcmdldDxUIGV4dGVuZHMgU2VydmljZU9iamVjdEFuZEFubm90YXRpb24gPSBTZXJ2aWNlT2JqZWN0PiA9IHtcblx0dGFyZ2V0PzogVCBleHRlbmRzIFNlcnZpY2VPYmplY3QgPyBUIDogQW5ub3RhdGlvblRlcm08VD47XG5cdHZpc2l0ZWRPYmplY3RzOiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbltdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxUPihvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCwgb0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQ/OiBDb250ZXh0KTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB7XG5cdGNvbnN0IG9Db252ZXJ0ZWRNZXRhZGF0YSA9IGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0Y29uc3QgbWV0YU1vZGVsQ29udGV4dCA9IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9NZXRhTW9kZWxDb250ZXh0LCB0cnVlKSBhcyBSZXNvbHZlZFRhcmdldDtcblx0bGV0IHRhcmdldEVudGl0eVNldExvY2F0aW9uO1xuXHRpZiAob0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQgJiYgb0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQuZ2V0UGF0aCgpICE9PSBcIi9cIikge1xuXHRcdHRhcmdldEVudGl0eVNldExvY2F0aW9uID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9FbnRpdHlTZXRNZXRhTW9kZWxDb250ZXh0KTtcblx0fVxuXHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RGcm9tUGF0aDxUPihtZXRhTW9kZWxDb250ZXh0LCBvQ29udmVydGVkTWV0YWRhdGEsIHRhcmdldEVudGl0eVNldExvY2F0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGg8VD4oXG5cdG1ldGFNb2RlbENvbnRleHQ6IFJlc29sdmVkVGFyZ2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHRhcmdldEVudGl0eVNldExvY2F0aW9uPzogRGF0YU1vZGVsT2JqZWN0Q29udGV4dCxcblx0b25seVNlcnZpY2VPYmplY3RzID0gZmFsc2Vcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RzID0gbWV0YU1vZGVsQ29udGV4dC52aXNpdGVkT2JqZWN0cy5maWx0ZXIoXG5cdFx0KHZpc2l0ZWRPYmplY3QpID0+IGlzU2VydmljZU9iamVjdCh2aXNpdGVkT2JqZWN0KSAmJiAhaXNFbnRpdHlUeXBlKHZpc2l0ZWRPYmplY3QpICYmICFpc0VudGl0eUNvbnRhaW5lcih2aXNpdGVkT2JqZWN0KVxuXHQpO1xuXHRpZiAoXG5cdFx0aXNTZXJ2aWNlT2JqZWN0KG1ldGFNb2RlbENvbnRleHQudGFyZ2V0KSAmJlxuXHRcdCFpc0VudGl0eVR5cGUobWV0YU1vZGVsQ29udGV4dC50YXJnZXQpICYmXG5cdFx0ZGF0YU1vZGVsT2JqZWN0c1tkYXRhTW9kZWxPYmplY3RzLmxlbmd0aCAtIDFdICE9PSBtZXRhTW9kZWxDb250ZXh0LnRhcmdldCAmJlxuXHRcdCFvbmx5U2VydmljZU9iamVjdHNcblx0KSB7XG5cdFx0ZGF0YU1vZGVsT2JqZWN0cy5wdXNoKG1ldGFNb2RlbENvbnRleHQudGFyZ2V0KTtcblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBOYXZpZ2F0aW9uUHJvcGVydHlbXSA9IFtdO1xuXHRjb25zdCByb290RW50aXR5U2V0OiBFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RzWzBdIGFzIEVudGl0eVNldDtcblxuXHRsZXQgY3VycmVudEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkID0gcm9vdEVudGl0eVNldDtcblx0bGV0IGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlID0gcm9vdEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRsZXQgY3VycmVudE9iamVjdDogU2VydmljZU9iamVjdEFuZEFubm90YXRpb24gfCB1bmRlZmluZWQ7XG5cdGxldCBuYXZpZ2F0ZWRQYXRoID0gW107XG5cblx0Zm9yIChsZXQgaSA9IDE7IGkgPCBkYXRhTW9kZWxPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y3VycmVudE9iamVjdCA9IGRhdGFNb2RlbE9iamVjdHNbaV07XG5cblx0XHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkoY3VycmVudE9iamVjdCkpIHtcblx0XHRcdG5hdmlnYXRlZFBhdGgucHVzaChjdXJyZW50T2JqZWN0Lm5hbWUpO1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChjdXJyZW50T2JqZWN0KTtcblx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gY3VycmVudE9iamVjdC50YXJnZXRUeXBlO1xuXHRcdFx0Y29uc3QgYm91bmRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCA9IGN1cnJlbnRFbnRpdHlTZXQ/Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbbmF2aWdhdGVkUGF0aC5qb2luKFwiL1wiKV07XG5cdFx0XHRpZiAoYm91bmRFbnRpdHlTZXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gYm91bmRFbnRpdHlTZXQ7XG5cdFx0XHRcdG5hdmlnYXRlZFBhdGggPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGlzRW50aXR5U2V0KGN1cnJlbnRPYmplY3QpIHx8IGlzU2luZ2xldG9uKGN1cnJlbnRPYmplY3QpKSB7XG5cdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gY3VycmVudE9iamVjdDtcblx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID0gY3VycmVudEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChuYXZpZ2F0ZWRQYXRoLmxlbmd0aCA+IDApIHtcblx0XHQvLyBQYXRoIHdpdGhvdXQgTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyAtLT4gbm8gdGFyZ2V0IGVudGl0eSBzZXRcblx0XHRjdXJyZW50RW50aXR5U2V0ID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKHRhcmdldEVudGl0eVNldExvY2F0aW9uICYmIHRhcmdldEVudGl0eVNldExvY2F0aW9uLnN0YXJ0aW5nRW50aXR5U2V0ICE9PSByb290RW50aXR5U2V0KSB7XG5cdFx0Ly8gSW4gY2FzZSB0aGUgZW50aXR5c2V0IGlzIG5vdCBzdGFydGluZyBmcm9tIHRoZSBzYW1lIGxvY2F0aW9uIGl0IG1heSBtZWFuIHRoYXQgd2UgYXJlIGRvaW5nIHRvbyBtdWNoIHdvcmsgZWFybGllciBmb3Igc29tZSByZWFzb25cblx0XHQvLyBBcyBzdWNoIHdlIG5lZWQgdG8gcmVkZWZpbmUgdGhlIGNvbnRleHQgc291cmNlIGZvciB0aGUgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb25cblx0XHRjb25zdCBzdGFydGluZ0luZGV4ID0gZGF0YU1vZGVsT2JqZWN0cy5pbmRleE9mKHRhcmdldEVudGl0eVNldExvY2F0aW9uLnN0YXJ0aW5nRW50aXR5U2V0KTtcblx0XHRpZiAoc3RhcnRpbmdJbmRleCAhPT0gLTEpIHtcblx0XHRcdC8vIElmIGl0J3Mgbm90IGZvdW5kIEkgZG9uJ3Qga25vdyB3aGF0IHdlIGNhbiBkbyAocHJvYmFibHkgbm90aGluZylcblx0XHRcdGNvbnN0IHJlcXVpcmVkRGF0YU1vZGVsT2JqZWN0cyA9IGRhdGFNb2RlbE9iamVjdHMuc2xpY2UoMCwgc3RhcnRpbmdJbmRleCk7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5zdGFydGluZ0VudGl0eVNldCA9IHJvb3RFbnRpdHlTZXQ7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbi5uYXZpZ2F0aW9uUHJvcGVydGllcyA9IHJlcXVpcmVkRGF0YU1vZGVsT2JqZWN0c1xuXHRcdFx0XHQuZmlsdGVyKGlzTmF2aWdhdGlvblByb3BlcnR5KVxuXHRcdFx0XHQuY29uY2F0KHRhcmdldEVudGl0eVNldExvY2F0aW9uLm5hdmlnYXRpb25Qcm9wZXJ0aWVzIGFzIE5hdmlnYXRpb25Qcm9wZXJ0eVtdKTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0RGF0YU1vZGVsUGF0aCA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogcm9vdEVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGN1cnJlbnRFbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogY3VycmVudEVudGl0eVR5cGUsXG5cdFx0dGFyZ2V0T2JqZWN0OiBtZXRhTW9kZWxDb250ZXh0LnRhcmdldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRjb250ZXh0TG9jYXRpb246IHRhcmdldEVudGl0eVNldExvY2F0aW9uLFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHRpZiAoIWlzU2VydmljZU9iamVjdChvdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCkgJiYgb25seVNlcnZpY2VPYmplY3RzKSB7XG5cdFx0b3V0RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgPSBpc1NlcnZpY2VPYmplY3QoY3VycmVudE9iamVjdCkgPyBjdXJyZW50T2JqZWN0IDogdW5kZWZpbmVkO1xuXHR9XG5cdGlmICghb3V0RGF0YU1vZGVsUGF0aC5jb250ZXh0TG9jYXRpb24pIHtcblx0XHRvdXREYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbiA9IG91dERhdGFNb2RlbFBhdGg7XG5cdH1cblx0cmV0dXJuIG91dERhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxUPjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGZldGNoZXMgdGhlIHRlY2huaWNhbCBhbmQgc2VtYW50aWMga2V5cyBvZiBlbnRpdHkgc2V0cy5cbiAqIEBwYXJhbSBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGVjaG5pY2FsIGFuZCBzZW1hbnRpYyBrZXlzIG9mIHRoZSBlbnRpdHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEVudGl0eUtleXMoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiB7XG5cdHRlY2huaWNhbEtleXM6IHN0cmluZ1tdO1xuXHRzZW1hbnRpY0tleXM6IHN0cmluZ1tdO1xufSB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRleHQ/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpO1xuXHRpZiAobWV0YU1vZGVsKSB7XG5cdFx0Y29uc3QgbWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHRjb25zdCBkYXRhTW9kZWwgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KG1ldGFQYXRoKSk7XG5cdFx0Y29uc3Qgcm9vdFNlbWFudGljS2V5cyA9IGRhdGFNb2RlbC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdFx0bGV0IHNlbWFudGljS2V5czogc3RyaW5nW10gPSBbXTtcblx0XHRpZiAocm9vdFNlbWFudGljS2V5cykge1xuXHRcdFx0c2VtYW50aWNLZXlzID0gcm9vdFNlbWFudGljS2V5cy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ga2V5LnZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IHJvb3RUZWNobmljYWxLZXlzID0gZGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUua2V5cztcblx0XHRsZXQgdGVjaG5pY2FsS2V5czogc3RyaW5nW10gPSBbXTtcblx0XHRpZiAocm9vdFRlY2huaWNhbEtleXMpIHtcblx0XHRcdHRlY2huaWNhbEtleXMgPSByb290VGVjaG5pY2FsS2V5cy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbWFudGljS2V5czogc2VtYW50aWNLZXlzLFxuXHRcdFx0dGVjaG5pY2FsS2V5czogdGVjaG5pY2FsS2V5c1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHsgdGVjaG5pY2FsS2V5czogW10sIHNlbWFudGljS2V5czogW10gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RNb2RlbEFuZFBhdGg8VCBleHRlbmRzIHN0cmluZyB8IHVuZGVmaW5lZD4obWV0YVBhdGg6IFQpOiB7IGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7IHBhdGg6IFQgfSB7XG5cdGlmIChtZXRhUGF0aD8uaW5jbHVkZXMoXCI+XCIpKSB7XG5cdFx0Y29uc3QgW21vZGVsSWQsIC4uLnBhdGhdID0gbWV0YVBhdGguc3BsaXQoXCI+XCIpO1xuXHRcdGNvbnN0IHRhcmdldFBhdGggPSBwYXRoLmpvaW4oXCI+XCIpO1xuXHRcdHJldHVybiB7IGlkOiBtb2RlbElkLCBwYXRoOiB0YXJnZXRQYXRoIGFzIFQgfTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4geyBpZDogdW5kZWZpbmVkLCBwYXRoOiBtZXRhUGF0aCB9O1xuXHR9XG59XG5cbi8qKlxuICogRmV0Y2hlcyB0aGUgRGF0YU1vZGVsIE9iamVjdCBQYXRoIGZvciBhIGdpdmVuIHRhcmdldCBwYXRoLlxuICogQHBhcmFtIHRhcmdldFBhdGhcbiAqIEBwYXJhbSBtZXRhTW9kZWxcbiAqIEByZXR1cm5zIERhdGFNb2RlbCBPYmplY3QgUGF0aCBmb3IgdGFyZ2V0IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGg8VD4oXG5cdHRhcmdldFBhdGg6IHN0cmluZyxcblx0bWV0YU1vZGVsPzogT0RhdGFNZXRhTW9kZWxcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gfCB1bmRlZmluZWQge1xuXHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbD8uZ2V0TWV0YVBhdGgodGFyZ2V0UGF0aCk7XG5cdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YVBhdGggPyBtZXRhTW9kZWw/LmdldENvbnRleHQobWV0YVBhdGgpIDogdW5kZWZpbmVkO1xuXHRyZXR1cm4gbWV0YUNvbnRleHQgJiYgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgYSAgdmlydHVhbCBwYXRoLlxuICogQHBhcmFtIHBhdGggVGhlIHZpcnR1YWwgcGF0aFxuICogQHBhcmFtIGNvbnZlcnRlZFR5cGVzIFRoZSBjb252ZXJ0ZWQgbWV0YWRhdGFcbiAqIEByZXR1cm5zIERhdGFNb2RlbCBPYmplY3QgUGF0aCBmb3IgdGFyZ2V0IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpcnR1YWxCaW5kaW5nRXhwcmVzc2lvbihwYXRoOiBzdHJpbmcsIGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB7XG5cdGNvbnN0IHZpcnR1YWxLZXkgPSBcIkAkdWk1LmZlLnZpcnR1YWwuXCI7XG5cdGlmIChwYXRoLmluY2x1ZGVzKHZpcnR1YWxLZXkpKSB7XG5cdFx0Y29uc3QgaWQgPSBPYmplY3Qua2V5cyhjb252ZXJ0ZWRNZXRhTW9kZWxNYXApLmZpbmQoKGlkKSA9PiBjb252ZXJ0ZWRNZXRhTW9kZWxNYXBbaWRdID09PSBjb252ZXJ0ZWRUeXBlcyk7XG5cdFx0aWYgKGlkICYmIHZpcnR1YWxQcm9wZXJ0aWVzTWFwW2lkXSkge1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5pbmRleE9mKGNvbnZlcnRlZFR5cGVzLm5hbWVzcGFjZSkpO1xuXHRcdFx0Y29uc3QgcGF0aEluZm9zID0gcGF0aC5zcGxpdCh2aXJ0dWFsS2V5KTtcblx0XHRcdGlmIChwYXRoSW5mb3MubGVuZ3RoID09PSAyKSB7XG5cdFx0XHRcdGNvbnN0IG1ldGhvZCA9IHBhdGhJbmZvc1sxXTtcblx0XHRcdFx0Y29uc3QgdmlydHVhbFByb3BlcnR5ID0gcGF0aEluZm9zWzBdLnJlcGxhY2UocmVsYXRpdmVQYXRoLCBcIlwiKTtcblx0XHRcdFx0aWYgKHZpcnR1YWxQcm9wZXJ0aWVzTWFwW2lkXVttZXRob2RdKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZpcnR1YWxQcm9wZXJ0aWVzTWFwW2lkXVttZXRob2RdKHZpcnR1YWxQcm9wZXJ0eSwgY29udmVydGVkVHlwZXMsIHJlbGF0aXZlUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNvbnN0YW50KHVuZGVmaW5lZCk7XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KHVuZGVmaW5lZCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIG9mIGEgY3JpdGljYWxpdHkuXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBwb2ludGluZyB0byBhIERhdGFGaWVsZCBvciBEYXRhUG9pbnRcbiAqIEBwYXJhbSBjb252ZXJ0ZWRUeXBlcyBUaGUgY29udmVydGVkIG1ldGFkYXRhXG4gKiBAcGFyYW0gcmVsYXRpdmVQYXRoIFRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgdGhlIGNyaXRpY2FsaXR5XG4gKi9cbmZ1bmN0aW9uIGdldFZpcnR1YWxDcml0aWNhbGl0eUV4cHJlc3Npb24oXG5cdHBhdGg6IHN0cmluZyxcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRyZWxhdGl2ZVBhdGg/OiBzdHJpbmdcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB7XG5cdGNvbnN0IGNyaXRpY2FsaXR5UHJvcGVydHkgPSBjb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aDxEYXRhUG9pbnRUeXBlIHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4ocGF0aCk/LnRhcmdldD8uQ3JpdGljYWxpdHk7XG5cdGNvbnN0IGNyaXRpY2FsaXR5RXhwcmVzc2lvbiA9IGNyaXRpY2FsaXR5UHJvcGVydHlcblx0XHQ/IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSBhcyB1bmtub3duIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+LFxuXHRcdFx0XHRbXSxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHQoYmluZGluZ1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiByZWxhdGl2ZVBhdGggPyBgJHtyZWxhdGl2ZVBhdGh9JHtiaW5kaW5nUGF0aH1gIDogYmluZGluZ1BhdGg7XG5cdFx0XHRcdH1cblx0XHQgIClcblx0XHQ6IHVuZGVmaW5lZDtcblx0aWYgKCFjcml0aWNhbGl0eUV4cHJlc3Npb24pIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodW5kZWZpbmVkKTtcblx0fVxuXHRyZXR1cm4gZm9ybWF0UmVzdWx0KFtjcml0aWNhbGl0eUV4cHJlc3Npb25dLCBcInNhcC5mZS5jb3JlLmZvcm1hdHRlcnMuQ3JpdGljYWxpdHlGb3JtYXR0ZXIjZ2V0Q3JpdGljYWxpdHlcIik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrSUEsU0FBU0Esa0JBQWtCQSxDQUMxQkMsZ0JBQXFDLEVBQ3JDQyxXQUFtQixFQUNuQkMsYUFBcUIsRUFDckJDLGdCQUFnRCxFQUNoREMsYUFBc0MsRUFDQTtJQUN0QyxJQUFJQyxLQUFrQjtJQUN0QixJQUFJTCxnQkFBZ0IsS0FBSyxJQUFJLEVBQUU7TUFDOUJLLEtBQUssR0FBRztRQUFFQyxJQUFJLEVBQUU7TUFBTyxDQUFDO0lBQ3pCLENBQUMsTUFBTSxJQUFJLE9BQU9OLGdCQUFnQixLQUFLLFFBQVEsRUFBRTtNQUNoREssS0FBSyxHQUFHO1FBQUVDLElBQUksRUFBRSxRQUFRO1FBQUVDLE1BQU0sRUFBRVA7TUFBaUIsQ0FBQztJQUNyRCxDQUFDLE1BQU0sSUFB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
|
|
1320
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZVByb3BlcnR5VmFsdWUiLCJhbm5vdGF0aW9uT2JqZWN0IiwicHJvcGVydHlLZXkiLCJjdXJyZW50VGFyZ2V0IiwiYW5ub3RhdGlvbnNMaXN0cyIsIm9DYXBhYmlsaXRpZXMiLCJ2YWx1ZSIsInR5cGUiLCJTdHJpbmciLCJCb29sIiwiSW50IiwiQXJyYXkiLCJpc0FycmF5IiwiY29sbGVjdGlvblZhbHVlIiwiQ29sbGVjdGlvbiIsIm1hcCIsInN1YkFubm90YXRpb25PYmplY3QiLCJzdWJBbm5vdGF0aW9uT2JqZWN0SW5kZXgiLCJwYXJzZUFubm90YXRpb25PYmplY3QiLCJsZW5ndGgiLCJoYXNPd25Qcm9wZXJ0eSIsIiRQYXRoIiwidW5kZWZpbmVkIiwiUGF0aCIsIiREZWNpbWFsIiwiRGVjaW1hbCIsInBhcnNlRmxvYXQiLCIkUHJvcGVydHlQYXRoIiwiUHJvcGVydHlQYXRoIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiJElmIiwiJEFuZCIsIiRPciIsIiROb3QiLCIkRXEiLCIkTmUiLCIkR3QiLCIkR2UiLCIkTHQiLCIkTGUiLCIkQXBwbHkiLCIkRnVuY3Rpb24iLCIkQW5ub3RhdGlvblBhdGgiLCJBbm5vdGF0aW9uUGF0aCIsIiRFbnVtTWVtYmVyIiwiRW51bU1lbWJlciIsIlJlY29yZCIsIm5hbWUiLCJjdXJyZW50T2JqZWN0VGFyZ2V0IiwicGFyc2VkQW5ub3RhdGlvbk9iamVjdCIsInBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsInN1YkFubm90YXRpb25JbmRleCIsInBhcnNlZEFubm90YXRpb25PYmplY3RSZWNvcmQiLCJwcm9wZXJ0eVZhbHVlcyIsIiRUeXBlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJzdGFydHNXaXRoIiwicHVzaCIsImNyZWF0ZUFubm90YXRpb25MaXN0cyIsImdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QiLCJ0YXJnZXQiLCJhbm5vdGF0aW9ucyIsImNyZWF0ZVJlZmVyZW5jZUZhY2V0SWQiLCJyZWZlcmVuY2VGYWNldCIsImlkIiwiSUQiLCJUYXJnZXQiLCJwcmVwYXJlSWQiLCJyZW1vdmVDaGFydEFubm90YXRpb25zIiwiZmlsdGVyIiwib1JlY29yZCIsInJlY29yZEFzUmVmRmFjZXQiLCJpbmNsdWRlcyIsInJlbW92ZUlCTkFubm90YXRpb25zIiwiaGFuZGxlUHJlc2VudGF0aW9uVmFyaWFudCIsImFubm90YXRpb25PYmplY3RzIiwiYW5ub3RhdGlvblRhcmdldCIsImFubm90YXRpb25MaXN0cyIsIm91dEFubm90YXRpb25PYmplY3QiLCJNaWNyb0NoYXJ0IiwibG9hZExpYnJhcnkiLCJhbm5vdGF0aW9uS2V5IiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZmllbGRHcm91cEFubm90YXRpb24iLCJEYXRhIiwicHJlc2VudGF0aW9uVmFyaWFudCIsIkNoYXJ0IiwiVmlzdWFsaXphdGlvbnMiLCJmaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwic29tZSIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbiIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiY3VycmVudE91dEFubm90YXRpb25PYmplY3QiLCJmaW5hbEtleSIsImFubm90YXRpb25PZkFubm90YXRpb25TcGxpdCIsInNwbGl0IiwiYW5ub3RhdGlvblF1YWxpZmllclNwbGl0IiwicXVhbGlmaWVyIiwidGVybSIsImN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0IiwiYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UiLCJyZWNvcmQiLCJ0eXBlVmFsdWUiLCJwcmVwYXJlUHJvcGVydHkiLCJwcm9wZXJ0eURlZmluaXRpb24iLCJlbnRpdHlUeXBlT2JqZWN0IiwicHJvcGVydHlOYW1lIiwiX3R5cGUiLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwicHJlY2lzaW9uIiwiJFByZWNpc2lvbiIsInNjYWxlIiwiJFNjYWxlIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5IiwibmF2UHJvcGVydHlEZWZpbml0aW9uIiwibmF2UHJvcGVydHlOYW1lIiwicmVmZXJlbnRpYWxDb25zdHJhaW50IiwiJFJlZmVyZW50aWFsQ29uc3RyYWludCIsInNvdXJjZVByb3BlcnR5TmFtZSIsInNvdXJjZVR5cGVOYW1lIiwic291cmNlUHJvcGVydHkiLCJ0YXJnZXRUeXBlTmFtZSIsInRhcmdldFByb3BlcnR5IiwibmF2aWdhdGlvblByb3BlcnR5IiwicGFydG5lciIsIiRQYXJ0bmVyIiwiaXNDb2xsZWN0aW9uIiwiJGlzQ29sbGVjdGlvbiIsImNvbnRhaW5zVGFyZ2V0IiwiJENvbnRhaW5zVGFyZ2V0IiwicHJlcGFyZU5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIiwiZW50aXR5Q29udGFpbmVyTmFtZSIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsIl9yZWYiLCJwYXRoIiwicHJlcGFyZUVudGl0eVNldCIsImVudGl0eVNldERlZmluaXRpb24iLCJlbnRpdHlTZXROYW1lIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmciLCJlbnRpdHlUeXBlTmFtZSIsInByZXBhcmVTaW5nbGV0b24iLCJzaW5nbGV0b25EZWZpbml0aW9uIiwic2luZ2xldG9uTmFtZSIsInByZXBhcmVBY3Rpb25JbXBvcnQiLCJhY3Rpb25JbXBvcnQiLCJhY3Rpb25JbXBvcnROYW1lIiwiYWN0aW9uTmFtZSIsIiRraW5kIiwiJEFjdGlvbiIsInByZXBhcmVUeXBlRGVmaW5pdGlvbiIsInR5cGVEZWZpbml0aW9uIiwidHlwZU5hbWUiLCJuYW1lc3BhY2VQcmVmaXgiLCJ0eXBlT2JqZWN0Iiwic3Vic3RyaW5nIiwidW5kZXJseWluZ1R5cGUiLCIkVW5kZXJseWluZ1R5cGUiLCJwcmVwYXJlQ29tcGxleFR5cGUiLCJjb21wbGV4VHlwZURlZmluaXRpb24iLCJjb21wbGV4VHlwZU5hbWUiLCJjb21wbGV4VHlwZU9iamVjdCIsInByb3BlcnRpZXMiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImNvbXBsZXhUeXBlUHJvcGVydGllcyIsInByb3BlcnR5TmFtZU9yTm90Iiwic29ydCIsImEiLCJiIiwiY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcyIsInByZXBhcmVFbnRpdHlLZXlzIiwiZW50aXR5VHlwZURlZmluaXRpb24iLCJvTWV0YU1vZGVsRGF0YSIsIiRLZXkiLCIkQmFzZVR5cGUiLCJwcmVwYXJlRW50aXR5VHlwZSIsIm1ldGFNb2RlbERhdGEiLCJpZ25vcmVEYXRhZmllbGREZWZhdWx0IiwiZW50aXR5VHlwZSIsImVudGl0eVByb3BlcnRpZXMiLCJhY3Rpb25zIiwia2V5IiwicHJvcGVydHkiLCJlbnRpdHlLZXkiLCJmaW5kIiwiZW50aXR5VHlwZUFubm90YXRpb25zIiwiJEFubm90YXRpb25zIiwiZmlsdGVyRmFjZXRzIiwiZmlsdGVyRmFjZXRBbm5vdGF0aW9uIiwiaGVhZGVySW5mb0Fubm90YXRpb24iLCJUeXBlTmFtZSIsIlR5cGVOYW1lUGx1cmFsIiwiVGl0bGUiLCJWYWx1ZSIsImVudGl0eVByb3BlcnR5IiwicHJlcGFyZUFjdGlvbiIsImFjdGlvblJhd0RhdGEiLCJvdmVybG9hZFBhcmFtZXRlcnMiLCIkUGFyYW1ldGVyIiwiJElzQm91bmQiLCJvdmVybG9hZCIsInBhcmFtZXRlciIsImpvaW4iLCJwYXJhbWV0ZXJzIiwiaXNCb3VuZCIsImlzRnVuY3Rpb24iLCJzb3VyY2VUeXBlIiwicmV0dXJuVHlwZSIsIiRSZXR1cm5UeXBlIiwicmV0dXJuQ29sbGVjdGlvbiIsInBhcmFtIiwiJE5hbWUiLCJwYXJzZUVudGl0eUNvbnRhaW5lciIsImVudGl0eUNvbnRhaW5lck1ldGFkYXRhIiwic2NoZW1hIiwiZW50aXR5Q29udGFpbmVyIiwiZWxlbWVudE5hbWUiLCJlbGVtZW50VmFsdWUiLCJlbnRpdHlTZXRzIiwic2luZ2xldG9ucyIsImFjdGlvbkltcG9ydHMiLCJwYXJzZUFubm90YXRpb25zIiwiY2FwYWJpbGl0aWVzIiwidmFsdWVzIiwicGFyc2VTY2hlbWEiLCJtZXRhbW9kZWxPYmplY3QiLCJuYW1lc3BhY2UiLCJzbGljZSIsImVudGl0eVR5cGVzIiwiY29tcGxleFR5cGVzIiwidHlwZURlZmluaXRpb25zIiwiYXNzb2NpYXRpb25zIiwiYXNzb2NpYXRpb25TZXRzIiwicGFyc2VNZXRhTW9kZWxFbGVtZW50Iiwic3ViRWxlbWVudFZhbHVlIiwicGFyc2VNZXRhTW9kZWwiLCJtZXRhTW9kZWwiLCJhcmd1bWVudHMiLCJEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJyZXN1bHQiLCJpZGVudGlmaWNhdGlvbiIsInZlcnNpb24iLCJyZWZlcmVuY2VzIiwiQW5ub3RhdGlvbkNvbnZlcnRlciIsImxhenkiLCJnZXRPYmplY3QiLCJfZXhwb3J0cyIsImNvbnZlcnRlZE1ldGFNb2RlbE1hcCIsIm1ldGFNb2RlbElETWFwIiwibWV0YU1vZGVsTWFwIiwiV2Vha01hcCIsInZpcnR1YWxQcm9wZXJ0aWVzTWFwIiwiY29udmVydFR5cGVzIiwib01ldGFNb2RlbCIsIm1ldGFNb2RlbElEIiwicGFyc2VkT3V0cHV0IiwiY29udmVydCIsImNyaXRpY2FsaXR5IiwiZ2V0VmlydHVhbENyaXRpY2FsaXR5RXhwcmVzc2lvbiIsIm1ldGFNb2RlbFN5bWJvbCIsInNldCIsIm9FcnJvciIsIkVycm9yIiwiZ2V0TWV0YU1vZGVsQnlJZCIsInN5bWJvbCIsImdldCIsImdldENvbnZlcnRlZFR5cGVzIiwib0NvbnRleHQiLCJnZXRNb2RlbCIsImlzQSIsImRlbGV0ZU1vZGVsQ2FjaGVEYXRhIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJvTWV0YU1vZGVsQ29udGV4dCIsImJJbmNsdWRlVmlzaXRlZE9iamVjdHMiLCJvQ29udmVydGVkTWV0YWRhdGEiLCJzUGF0aCIsImdldFBhdGgiLCJhUGF0aFNwbGl0IiwiZmlyc3RQYXJ0IiwiYmVnaW5JbmRleCIsInRhcmdldEVudGl0eVNldCIsImVudGl0eVNldCIsInNpbmdsZXRvbiIsInJlbGF0aXZlUGF0aCIsImxvY2FsT2JqZWN0cyIsInJlbGF0aXZlU3BsaXQiLCJpZHgiLCJjdXJyZW50RW50aXR5U2V0Iiwic05hdlByb3BUb0NoZWNrIiwicmVwbGFjZSIsImFOYXZQcm9wcyIsInRhcmdldEVudGl0eVR5cGUiLCJzTmF2UHJvcCIsInRhcmdldE5hdlByb3AiLCJuYXZQcm9wIiwidGFyZ2V0VHlwZSIsInNoaWZ0Iiwib1RhcmdldCIsInJlc29sdmVQYXRoIiwidmlzaXRlZE9iamVjdHMiLCJjb25jYXQiLCJhY3Rpb24iLCJwYXJhbWV0ZXJOYW1lIiwiZW5kc1dpdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCIsIm1ldGFNb2RlbENvbnRleHQiLCJ0YXJnZXRFbnRpdHlTZXRMb2NhdGlvbiIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgiLCJjb252ZXJ0ZWRUeXBlcyIsIm9ubHlTZXJ2aWNlT2JqZWN0cyIsImRhdGFNb2RlbE9iamVjdHMiLCJ2aXNpdGVkT2JqZWN0IiwiaXNTZXJ2aWNlT2JqZWN0IiwiaXNFbnRpdHlUeXBlIiwiaXNFbnRpdHlDb250YWluZXIiLCJyb290RW50aXR5U2V0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjdXJyZW50T2JqZWN0IiwibmF2aWdhdGVkUGF0aCIsImkiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsImJvdW5kRW50aXR5U2V0IiwiaXNFbnRpdHlTZXQiLCJpc1NpbmdsZXRvbiIsInN0YXJ0aW5nRW50aXR5U2V0Iiwic3RhcnRpbmdJbmRleCIsImluZGV4T2YiLCJyZXF1aXJlZERhdGFNb2RlbE9iamVjdHMiLCJvdXREYXRhTW9kZWxQYXRoIiwidGFyZ2V0T2JqZWN0IiwiY29udGV4dExvY2F0aW9uIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RFbnRpdHlLZXlzIiwiY29udGV4dCIsImdldE1ldGFNb2RlbCIsIm1ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJkYXRhTW9kZWwiLCJnZXRNZXRhQ29udGV4dCIsInJvb3RTZW1hbnRpY0tleXMiLCJDb21tb24iLCJTZW1hbnRpY0tleSIsInNlbWFudGljS2V5cyIsInJvb3RUZWNobmljYWxLZXlzIiwidGVjaG5pY2FsS2V5cyIsImV4dHJhY3RNb2RlbEFuZFBhdGgiLCJtb2RlbElkIiwidGFyZ2V0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGgiLCJtZXRhQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRWaXJ0dWFsQmluZGluZ0V4cHJlc3Npb24iLCJ2aXJ0dWFsS2V5IiwicGF0aEluZm9zIiwibWV0aG9kIiwidmlydHVhbFByb3BlcnR5IiwiY29uc3RhbnQiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiQ3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eUV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJiaW5kaW5nUGF0aCIsImZvcm1hdFJlc3VsdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWV0YU1vZGVsQ29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgZmlsZSBpcyByZXRyaWV2ZWQgZnJvbSBAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyLCBzaGFyZWQgY29kZSB3aXRoIHRvb2wgc3VpdGVcbmltcG9ydCB0eXBlIHtcblx0QWN0aW9uUGFyYW1ldGVyLFxuXHRBbm5vdGF0aW9uTGlzdCxcblx0QW5ub3RhdGlvblJlY29yZCxcblx0QW5ub3RhdGlvblRlcm0sXG5cdENvbnZlcnRlZE1ldGFkYXRhLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdEV4cHJlc3Npb24sXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UmF3QWN0aW9uLFxuXHRSYXdBY3Rpb25JbXBvcnQsXG5cdFJhd0Fubm90YXRpb24sXG5cdFJhd0NvbXBsZXhUeXBlLFxuXHRSYXdFbnRpdHlTZXQsXG5cdFJhd0VudGl0eVR5cGUsXG5cdFJhd01ldGFkYXRhLFxuXHRSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLFxuXHRSYXdQcm9wZXJ0eSxcblx0UmF3U2NoZW1hLFxuXHRSYXdTaW5nbGV0b24sXG5cdFJhd1R5cGVEZWZpbml0aW9uLFxuXHRSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UmVmZXJlbnRpYWxDb25zdHJhaW50LFxuXHRTZXJ2aWNlT2JqZWN0LFxuXHRTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbixcblx0U2luZ2xldG9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBcHBseUV4cHJlc3Npb24sIENvbGxlY3Rpb24sIENvbGxlY3Rpb25FeHByZXNzaW9uLCBQcm9wZXJ0eVZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0Jhc2VFZG1cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGgsIFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLCBSZWNvcmRDb21wbGV4VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19BbmFseXRpY3MgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyUmVzdHJpY3Rpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzLFxuXHRFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzLFxuXHRQcm9wZXJ0eUFubm90YXRpb25zX0NhcGFiaWxpdGllc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbl9FZG1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19Db21tdW5pY2F0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tdW5pY2F0aW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvcmVfRWRtXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfTWVhc3VyZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL01lYXN1cmVzX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX1BlcnNvbmFsRGF0YSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvUGVyc29uYWxEYXRhX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX1Nlc3Npb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFQb2ludCxcblx0RGF0YVBvaW50VHlwZSxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0RmlsdGVyRmFjZXRzLFxuXHRIZWFkZXJGYWNldHMsXG5cdEhlYWRlckluZm8sXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRSZWZlcmVuY2VGYWNldCxcblx0VGV4dEFycmFuZ2VtZW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHtcblx0RW50aXR5U2V0QW5ub3RhdGlvbnNfVUksXG5cdEVudGl0eVR5cGVBbm5vdGF0aW9uc19VSSxcblx0UHJvcGVydHlBbm5vdGF0aW9uc19VSVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbnN0YW50LCBmb3JtYXRSZXN1bHQsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbkNvbnZlcnRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbW1vblwiO1xuaW1wb3J0IHtcblx0aXNFbnRpdHlDb250YWluZXIsXG5cdGlzRW50aXR5U2V0LFxuXHRpc0VudGl0eVR5cGUsXG5cdGlzTmF2aWdhdGlvblByb3BlcnR5LFxuXHRpc1NlcnZpY2VPYmplY3QsXG5cdGlzU2luZ2xldG9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHsgRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0Q29udGV4dCwgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXhwYW5kUGF0aFR5cGUsIE1ldGFNb2RlbEVudW0sIE1ldGFNb2RlbFR5cGUsIFJlbmFtZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB7IHByZXBhcmVJZCB9IGZyb20gXCIuLi9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIE1ldGFNb2RlbEFjdGlvblBhcmFtZXRlciA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0JE5hbWU6IHN0cmluZztcblx0JE51bGxhYmxlPzogYm9vbGVhbjtcblx0JE1heExlbmd0aD86IG51bWJlcjtcblx0JFByZWNpc2lvbj86IG51bWJlcjtcblx0JFNjYWxlPzogbnVtYmVyO1xuXHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBNZXRhTW9kZWxBY3Rpb24gPSB7XG5cdCRraW5kOiBcIkFjdGlvblwiIHwgXCJGdW5jdGlvblwiO1xuXHQkSXNCb3VuZDogYm9vbGVhbjtcblx0JEVudGl0eVNldFBhdGg6IHN0cmluZztcblx0JFBhcmFtZXRlcjogTWV0YU1vZGVsQWN0aW9uUGFyYW1ldGVyW107XG5cdCRSZXR1cm5UeXBlOiB7XG5cdFx0JFR5cGU6IHN0cmluZztcblx0XHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcblx0fTtcbn07XG5cbnR5cGUgTWV0YU1vZGVsQW5ub3RhdGlvbiA9IG51bGwgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgTWV0YU1vZGVsQW5ub3RhdGlvblJlY29yZDtcbnR5cGUgTWV0YU1vZGVsQW5ub3RhdGlvblJlY29yZCA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0JFByb3BlcnR5UGF0aD86IHN0cmluZztcblx0JFBhdGg/OiBzdHJpbmc7XG5cdCREZWNpbWFsPzogc3RyaW5nO1xuXHQkSWY/OiB1bmtub3duO1xuXHQkQW5kPzogdW5rbm93bjtcblx0JE9yPzogdW5rbm93bjtcblx0JE5vdD86IHVua25vd247XG5cdCRFcT86IHVua25vd247XG5cdCROZT86IHVua25vd247XG5cdCRHdD86IHVua25vd247XG5cdCRHZT86IHVua25vd247XG5cdCRMdD86IHVua25vd247XG5cdCRMZT86IHVua25vd247XG5cdCRBcHBseT86IHVua25vd247XG5cdCRGdW5jdGlvbj86IHVua25vd247XG5cdCRBbm5vdGF0aW9uUGF0aD86IHN0cmluZztcblx0JEVudW1NZW1iZXI/OiBzdHJpbmc7XG5cdCROYXZpZ2F0aW9uUHJvcGVydHlQYXRoPzogc3RyaW5nO1xufSAmIHtcblx0W3Byb3BlcnR5S2V5OiBzdHJpbmddOiBNZXRhTW9kZWxBbm5vdGF0aW9uO1xufTtcbmZ1bmN0aW9uIHBhcnNlUHJvcGVydHlWYWx1ZShcblx0YW5ub3RhdGlvbk9iamVjdDogTWV0YU1vZGVsQW5ub3RhdGlvbixcblx0cHJvcGVydHlLZXk6IHN0cmluZyxcblx0Y3VycmVudFRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uc0xpc3RzOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uTGlzdD4sXG5cdG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IEV4cHJlc3Npb24gfSB7XG5cdGxldCB2YWx1ZSE6IEV4cHJlc3Npb247XG5cdGlmIChhbm5vdGF0aW9uT2JqZWN0ID09PSBudWxsKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiTnVsbFwiIH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJTdHJpbmdcIiwgU3RyaW5nOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0dmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwibnVtYmVyXCIpIHtcblx0XHR2YWx1ZSA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25WYWx1ZTogQ29sbGVjdGlvbkV4cHJlc3Npb24gPSB7XG5cdFx0XHR0eXBlOiBcIkNvbGxlY3Rpb25cIixcblx0XHRcdENvbGxlY3Rpb246IGFubm90YXRpb25PYmplY3QubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uT2JqZWN0SW5kZXgpID0+XG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbk9iamVjdChcblx0XHRcdFx0XHRzdWJBbm5vdGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRcdGAke2N1cnJlbnRUYXJnZXR9LyR7cHJvcGVydHlLZXl9LyR7c3ViQW5ub3RhdGlvbk9iamVjdEluZGV4fWAsXG5cdFx0XHRcdFx0YW5ub3RhdGlvbnNMaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdCkgYXMgQ29sbGVjdGlvblxuXHRcdH07XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3QubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkUHJvcGVydHlQYXRoXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiUGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEFubm90YXRpb25QYXRoXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJSZWNvcmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJJZlwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkFuZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkVxXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTm90XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR3RcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiR3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIkx0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTGVcIikpIHtcblx0XHRcdFx0Y29sbGVjdGlvblZhbHVlLkNvbGxlY3Rpb24udHlwZSA9IFwiTGVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHQvLyAkVHlwZSBpcyBvcHRpb25hbC4uLlxuXHRcdFx0XHRjb2xsZWN0aW9uVmFsdWUuQ29sbGVjdGlvbi50eXBlID0gXCJSZWNvcmRcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25WYWx1ZS5Db2xsZWN0aW9uLnR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR2YWx1ZSA9IGNvbGxlY3Rpb25WYWx1ZTtcblx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0LiRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIlBhdGhcIiwgUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kUGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJEZWNpbWFsXCIsIERlY2ltYWw6IHBhcnNlRmxvYXQoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCkgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJQcm9wZXJ0eVBhdGhcIiwgUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRQcm9wZXJ0eVBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiLCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRJZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJJZlwiLCAkSWY6IGFubm90YXRpb25PYmplY3QuJElmIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIkFuZFwiLCAkQW5kOiBhbm5vdGF0aW9uT2JqZWN0LiRBbmQgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRPciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJPclwiLCAkT3I6IGFubm90YXRpb25PYmplY3QuJE9yIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTm90ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIk5vdFwiLCAkTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgYXMgRXhwcmVzc2lvbiB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiRXFcIiwgJEVxOiBhbm5vdGF0aW9uT2JqZWN0LiRFcSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIk5lXCIsICROZTogYW5ub3RhdGlvbk9iamVjdC4kTmUgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRHdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJHdFwiLCAkR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiR2VcIiwgJEdlOiBhbm5vdGF0aW9uT2JqZWN0LiRHZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIkx0XCIsICRMdDogYW5ub3RhdGlvbk9iamVjdC4kTHQgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRMZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJMZVwiLCAkTGU6IGFubm90YXRpb25PYmplY3QuJExlIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFsdWUgPSB7IHR5cGU6IFwiQXBwbHlcIiwgJEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0LiRBcHBseSwgJEZ1bmN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0LiRGdW5jdGlvbiB9IGFzIEFwcGx5RXhwcmVzc2lvbjtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJEFubm90YXRpb25QYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbHVlID0geyB0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsIEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0LiRBbm5vdGF0aW9uUGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRW51bU1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWx1ZSA9IHsgdHlwZTogXCJFbnVtTWVtYmVyXCIsIEVudW1NZW1iZXI6IGFubm90YXRpb25PYmplY3QuJEVudW1NZW1iZXIgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWUgPSB7XG5cdFx0XHRcdHR5cGU6IFwiUmVjb3JkXCIsXG5cdFx0XHRcdFJlY29yZDogcGFyc2VBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3QsIGN1cnJlbnRUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpIGFzIEFubm90YXRpb25SZWNvcmRcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0bmFtZTogcHJvcGVydHlLZXksXG5cdFx0dmFsdWVcblx0fTtcbn1cblxuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9uT2JqZWN0KFxuXHRhbm5vdGF0aW9uT2JqZWN0OiBNZXRhTW9kZWxBbm5vdGF0aW9uLFxuXHRjdXJyZW50T2JqZWN0VGFyZ2V0OiBzdHJpbmcsXG5cdGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IEV4cHJlc3Npb24gfCBBbm5vdGF0aW9uUmVjb3JkIHtcblx0bGV0IHBhcnNlZEFubm90YXRpb25PYmplY3Q6IEV4cHJlc3Npb24gfCBBbm5vdGF0aW9uUmVjb3JkO1xuXHRpZiAoYW5ub3RhdGlvbk9iamVjdCA9PT0gbnVsbCkge1xuXHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiTnVsbFwiIH07XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwic3RyaW5nXCIpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIlN0cmluZ1wiLCBTdHJpbmc6IGFubm90YXRpb25PYmplY3QgfTtcblx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdCA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIkJvb2xcIiwgQm9vbDogYW5ub3RhdGlvbk9iamVjdCB9O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0ID09PSBcIm51bWJlclwiKSB7XG5cdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJbnRcIiwgSW50OiBhbm5vdGF0aW9uT2JqZWN0IH07XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdGNvbnN0IHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uID0ge1xuXHRcdFx0Y29sbGVjdGlvbjogYW5ub3RhdGlvbk9iamVjdC5tYXAoKHN1YkFubm90YXRpb25PYmplY3QsIHN1YkFubm90YXRpb25JbmRleCkgPT5cblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uT2JqZWN0KHN1YkFubm90YXRpb25PYmplY3QsIGAke2N1cnJlbnRPYmplY3RUYXJnZXR9LyR7c3ViQW5ub3RhdGlvbkluZGV4fWAsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0XHQpIGFzIENvbGxlY3Rpb25cblx0XHR9O1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlByb3BlcnR5UGF0aFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbm5vdGF0aW9uUGF0aFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkFubm90YXRpb25QYXRoXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiSWZcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBbmRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIk9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTmVcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJOb3RcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJHZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0WzBdLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25Db2xsZWN0aW9uLmNvbGxlY3Rpb24udHlwZSA9IFwiTHRcIjtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFswXS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RbMF0uaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJBcHBseVwiO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFswXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uQ29sbGVjdGlvbi5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbkNvbGxlY3Rpb24uY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLCBBbm5vdGF0aW9uUGF0aDogYW5ub3RhdGlvbk9iamVjdC4kQW5ub3RhdGlvblBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3QuJFBhdGggfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJERlY2ltYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJEZWNpbWFsXCIsIERlY2ltYWw6IHBhcnNlRmxvYXQoYW5ub3RhdGlvbk9iamVjdC4kRGVjaW1hbCkgfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIlByb3BlcnR5UGF0aFwiLCBQcm9wZXJ0eVBhdGg6IGFubm90YXRpb25PYmplY3QuJFByb3BlcnR5UGF0aCB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kSWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJJZlwiLCAkSWY6IGFubm90YXRpb25PYmplY3QuJElmIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiQW5kXCIsICRBbmQ6IGFubm90YXRpb25PYmplY3QuJEFuZCBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7IHR5cGU6IFwiT3JcIiwgJE9yOiBhbm5vdGF0aW9uT2JqZWN0LiRPciBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5vdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ID0geyB0eXBlOiBcIk5vdFwiLCAkTm90OiBhbm5vdGF0aW9uT2JqZWN0LiROb3QgYXMgRXhwcmVzc2lvbiB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kRXEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJFcVwiLCAkRXE6IGFubm90YXRpb25PYmplY3QuJEVxIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTmUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJOZVwiLCAkTmU6IGFubm90YXRpb25PYmplY3QuJE5lIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJHdFwiLCAkR3Q6IGFubm90YXRpb25PYmplY3QuJEd0IGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kR2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJHZVwiLCAkR2U6IGFubm90YXRpb25PYmplY3QuJEdlIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJMdFwiLCAkTHQ6IGFubm90YXRpb25PYmplY3QuJEx0IGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kTGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHsgdHlwZTogXCJMZVwiLCAkTGU6IGFubm90YXRpb25PYmplY3QuJExlIGFzIFtFeHByZXNzaW9uLCBFeHByZXNzaW9uXSB9O1xuXHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdC4kQXBwbHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdFx0dHlwZTogXCJBcHBseVwiLFxuXHRcdFx0XHQkQXBwbHk6IGFubm90YXRpb25PYmplY3QuJEFwcGx5LFxuXHRcdFx0XHQkRnVuY3Rpb246IGFubm90YXRpb25PYmplY3QuJEZ1bmN0aW9uXG5cdFx0XHR9IGFzIEFwcGx5RXhwcmVzc2lvbjtcblx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHtcblx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIsXG5cdFx0XHRcdE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IGFubm90YXRpb25PYmplY3QuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QgPSB7XG5cdFx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0XHRFbnVtTWVtYmVyOiBhbm5vdGF0aW9uT2JqZWN0LiRFbnVtTWVtYmVyXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0UmVjb3JkOiBBbm5vdGF0aW9uUmVjb3JkID0ge1xuXHRcdFx0XHR0eXBlOiBcIlJlY29yZFwiLFxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlczogW11cblx0XHRcdH07XG5cdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdC4kVHlwZSkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0UmVjb3JkLnR5cGUgPSBhbm5vdGF0aW9uT2JqZWN0LiRUeXBlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWVbXSA9IFtdO1xuXHRcdFx0T2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdCkuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRUeXBlXCIgJiZcblx0XHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkSWZcIiAmJlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRBcHBseVwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEFuZFwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJE9yXCIgJiZcblx0XHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTmVcIiAmJlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRHdFwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEdlXCIgJiZcblx0XHRcdFx0XHRwcm9wZXJ0eUtleSAhPT0gXCIkTHRcIiAmJlxuXHRcdFx0XHRcdHByb3BlcnR5S2V5ICE9PSBcIiRMZVwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJE5vdFwiICYmXG5cdFx0XHRcdFx0cHJvcGVydHlLZXkgIT09IFwiJEVxXCIgJiZcblx0XHRcdFx0XHQhcHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucHVzaChcblx0XHRcdFx0XHRcdHBhcnNlUHJvcGVydHlWYWx1ZShhbm5vdGF0aW9uT2JqZWN0W3Byb3BlcnR5S2V5XSwgcHJvcGVydHlLZXksIGN1cnJlbnRPYmplY3RUYXJnZXQsIGFubm90YXRpb25zTGlzdHMsIG9DYXBhYmlsaXRpZXMpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHRcdC8vIEFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdFx0XHRcdGNyZWF0ZUFubm90YXRpb25MaXN0cyhcblx0XHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFtwcm9wZXJ0eUtleV0gfSxcblx0XHRcdFx0XHRcdGN1cnJlbnRPYmplY3RUYXJnZXQsXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uc0xpc3RzLFxuXHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdFJlY29yZC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdCA9IHBhcnNlZEFubm90YXRpb25PYmplY3RSZWNvcmQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwYXJzZWRBbm5vdGF0aW9uT2JqZWN0ITtcbn1cbmZ1bmN0aW9uIGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QodGFyZ2V0OiBzdHJpbmcsIGFubm90YXRpb25zTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pik6IEFubm90YXRpb25MaXN0IHtcblx0aWYgKCFhbm5vdGF0aW9uc0xpc3RzLmhhc093blByb3BlcnR5KHRhcmdldCkpIHtcblx0XHRhbm5vdGF0aW9uc0xpc3RzW3RhcmdldF0gPSB7XG5cdFx0XHR0YXJnZXQ6IHRhcmdldCxcblx0XHRcdGFubm90YXRpb25zOiBbXVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGFubm90YXRpb25zTGlzdHNbdGFyZ2V0XTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlRmFjZXRJZChyZWZlcmVuY2VGYWNldDogTWV0YU1vZGVsVHlwZTxSZWZlcmVuY2VGYWNldD4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBpZCA9IHJlZmVyZW5jZUZhY2V0LklEID8/IHJlZmVyZW5jZUZhY2V0LlRhcmdldD8uJEFubm90YXRpb25QYXRoO1xuXHRyZXR1cm4gaWQgPyBwcmVwYXJlSWQoaWQpIDogaWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdDogTWV0YU1vZGVsVHlwZTxIZWFkZXJGYWNldHM+IHwgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdKTogdW5rbm93bltdIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBNZXRhTW9kZWxUeXBlPEZhY2V0VHlwZXM+IHwgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPik6IGJvb2xlYW4gPT4ge1xuXHRcdGNvbnN0IHJlY29yZEFzUmVmRmFjZXQgPSBvUmVjb3JkIGFzIE1ldGFNb2RlbFR5cGU8UmVmZXJlbmNlRmFjZXQ+O1xuXHRcdGlmIChyZWNvcmRBc1JlZkZhY2V0LlRhcmdldCAmJiByZWNvcmRBc1JlZkZhY2V0LlRhcmdldC4kQW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHJldHVybiAhcmVjb3JkQXNSZWZGYWNldC5UYXJnZXQuJEFubm90YXRpb25QYXRoLmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5DaGFydH1gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdKTogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdIHtcblx0cmV0dXJuIGFubm90YXRpb25PYmplY3QuZmlsdGVyKChvUmVjb3JkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KTogYm9vbGVhbiA9PiB7XG5cdFx0cmV0dXJuIG9SZWNvcmQuJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQoXG5cdGFubm90YXRpb25PYmplY3Q6IEV4cGFuZFBhdGhUeXBlPEFubm90YXRpb25QYXRoPENoYXJ0IHwgRGF0YVBvaW50IHwgTGluZUl0ZW0+PltdXG4pOiBFeHBhbmRQYXRoVHlwZTxBbm5vdGF0aW9uUGF0aDxDaGFydCB8IERhdGFQb2ludCB8IExpbmVJdGVtPj5bXSB7XG5cdHJldHVybiBhbm5vdGF0aW9uT2JqZWN0LmZpbHRlcigob1JlY29yZCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBvUmVjb3JkLiRBbm5vdGF0aW9uUGF0aCAhPT0gYEAke1VJQW5ub3RhdGlvblRlcm1zLkNoYXJ0fWA7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdGFubm90YXRpb25PYmplY3RzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0YW5ub3RhdGlvblRhcmdldDogc3RyaW5nLFxuXHRhbm5vdGF0aW9uTGlzdHM6IFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25MaXN0Pixcblx0b0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcbik6IHZvaWQge1xuXHRpZiAoT2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdHMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBvdXRBbm5vdGF0aW9uT2JqZWN0ID0gZ2V0T3JDcmVhdGVBbm5vdGF0aW9uTGlzdChhbm5vdGF0aW9uVGFyZ2V0LCBhbm5vdGF0aW9uTGlzdHMpO1xuXHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdGRlbGV0ZSBhbm5vdGF0aW9uT2JqZWN0c1tgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YF07XG5cdH0gZWxzZSB7XG5cdFx0b0NhcGFiaWxpdGllcy5sb2FkTGlicmFyeT8uKFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIik7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGFubm90YXRpb25LZXkgaW4gYW5ub3RhdGlvbk9iamVjdHMpIHtcblx0XHRsZXQgYW5ub3RhdGlvbk9iamVjdCA9IGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldO1xuXHRcdHN3aXRjaCAoYW5ub3RhdGlvbktleSkge1xuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVyRmFjZXRzfWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0KSB7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdCA9IHJlbW92ZUNoYXJ0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPEhlYWRlckZhY2V0cz4pO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9ufWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+W10pO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtfWA6XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0ID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+W10pO1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RzW2Fubm90YXRpb25LZXldID0gYW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuTWljcm9DaGFydCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QgPSByZW1vdmVDaGFydEFubm90YXRpb25zKGFubm90YXRpb25PYmplY3QgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPltdKTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwfWA6XG5cdFx0XHRcdGNvbnN0IGZpZWxkR3JvdXBBbm5vdGF0aW9uID0gYW5ub3RhdGlvbk9iamVjdCBhcyBNZXRhTW9kZWxUeXBlPEZpZWxkR3JvdXA+O1xuXHRcdFx0XHRpZiAoIW9DYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uICYmIGZpZWxkR3JvdXBBbm5vdGF0aW9uLkRhdGEpIHtcblx0XHRcdFx0XHRmaWVsZEdyb3VwQW5ub3RhdGlvbi5EYXRhID0gcmVtb3ZlSUJOQW5ub3RhdGlvbnMoZmllbGRHcm91cEFubm90YXRpb24uRGF0YSk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5NaWNyb0NoYXJ0ICYmIGZpZWxkR3JvdXBBbm5vdGF0aW9uLkRhdGEpIHtcblx0XHRcdFx0XHRmaWVsZEdyb3VwQW5ub3RhdGlvbi5EYXRhID0gcmVtb3ZlQ2hhcnRBbm5vdGF0aW9ucyhcblx0XHRcdFx0XHRcdGZpZWxkR3JvdXBBbm5vdGF0aW9uLkRhdGFcblx0XHRcdFx0XHQpIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz5bXTtcblx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0c1thbm5vdGF0aW9uS2V5XSA9IGFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGBAJHtVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50fWA6XG5cdFx0XHRcdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBhbm5vdGF0aW9uT2JqZWN0IGFzIE1ldGFNb2RlbFR5cGU8UHJlc2VudGF0aW9uVmFyaWFudD47XG5cdFx0XHRcdGlmICghb0NhcGFiaWxpdGllcy5DaGFydCAmJiBwcmVzZW50YXRpb25WYXJpYW50LlZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudC5WaXN1YWxpemF0aW9ucyA9IGhhbmRsZVByZXNlbnRhdGlvblZhcmlhbnQocHJlc2VudGF0aW9uVmFyaWFudC5WaXN1YWxpemF0aW9ucyk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbk9iamVjdHNbYW5ub3RhdGlvbktleV0gPSBhbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBgQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RgOlxuXHRcdFx0XHQvLyBUaGlzIHNjZW5hcmlvIGlzIG5lZWRlZCBmb3IgZW5hYmxpbmcgc2VtYW50aWMgZmlsdGVyaW5nIG9uIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLWZpbHRlcnMuIEFzIG9mIG5vdyB0aGUgU2luZ2xlUmFuZ2UgYW5ub3RhdGlvbiBpcyByZWFkIGJ5IHRoZVxuXHRcdFx0XHQvLyBGaWVsZEhlbHBlciwgd2hpY2ggc2hvdWxkIG5vdCBpbmNsdWRlIGFueSBwcm9wZXJ0eXNwZWNpZmljIGxvZ2ljLiBXZSB3aWxsIHJlbW92ZSB0aGlzIG9uY2UgdGhlIEZpZWxkSGVscGVyIHJlY2VpdmVzIHRoZSBTaW5nbGVSYW5nZSBkYXRhIGZyb21cblx0XHRcdFx0Ly8gdGhlIGNvbnZlcnRlciBvciBoYXZpbmcgaXQgc2V0IGlzIG5vIGxvbmdlciBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIHNlbWFudGljIGZpbHRlcmluZy5cblx0XHRcdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zID0gYW5ub3RhdGlvbk9iamVjdHNbYEBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc2BdIGFzXG5cdFx0XHRcdFx0fCBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9ucz5cblx0XHRcdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGZpbHRlclJlc3RyaWN0aW9ucz8uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0IWZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLnNvbWUoKEZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uPy5Qcm9wZXJ0eT8uJFByb3BlcnR5UGF0aC5pbmNsdWRlcyhcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLnB1c2goXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVcIixcblx0XHRcdFx0XHRcdFx0XHRBbGxvd2VkRXhwcmVzc2lvbnM6IFwiU2luZ2xlUmFuZ2VcIixcblx0XHRcdFx0XHRcdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9DcmVhdGlvbkRhdGVUaW1lXCJcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVcIixcblx0XHRcdFx0XHRcdFx0XHRBbGxvd2VkRXhwcmVzc2lvbnM6IFwiU2luZ2xlUmFuZ2VcIixcblx0XHRcdFx0XHRcdFx0XHRQcm9wZXJ0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRsZXQgY3VycmVudE91dEFubm90YXRpb25PYmplY3QgPSBvdXRBbm5vdGF0aW9uT2JqZWN0O1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGFubm90YXRpb24gb2YgYW5ub3RhdGlvblxuXHRcdGxldCBmaW5hbEtleSA9IGFubm90YXRpb25LZXk7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0ID0gYW5ub3RhdGlvbktleS5zcGxpdChcIkBcIik7XG5cdFx0aWYgKGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdC5sZW5ndGggPiAyKSB7XG5cdFx0XHRjdXJyZW50T3V0QW5ub3RhdGlvbk9iamVjdCA9IGdldE9yQ3JlYXRlQW5ub3RhdGlvbkxpc3QoXG5cdFx0XHRcdGAke2Fubm90YXRpb25UYXJnZXR9QCR7YW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzFdfWAsXG5cdFx0XHRcdGFubm90YXRpb25MaXN0c1xuXHRcdFx0KTtcblx0XHRcdGZpbmFsS2V5ID0gYW5ub3RhdGlvbk9mQW5ub3RhdGlvblNwbGl0WzJdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmaW5hbEtleSA9IGFubm90YXRpb25PZkFubm90YXRpb25TcGxpdFsxXTtcblx0XHR9XG5cblx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBmaW5hbEtleS5zcGxpdChcIiNcIik7XG5cdFx0Y29uc3QgcXVhbGlmaWVyID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzFdO1xuXHRcdGZpbmFsS2V5ID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzBdO1xuXG5cdFx0Y29uc3QgcGFyc2VkQW5ub3RhdGlvbk9iamVjdDogUmF3QW5ub3RhdGlvbiA9IHtcblx0XHRcdHRlcm06IGZpbmFsS2V5LFxuXHRcdFx0cXVhbGlmaWVyOiBxdWFsaWZpZXJcblx0XHR9O1xuXHRcdGxldCBjdXJyZW50QW5ub3RhdGlvblRhcmdldCA9IGAke2Fubm90YXRpb25UYXJnZXR9QCR7cGFyc2VkQW5ub3RhdGlvbk9iamVjdC50ZXJtfWA7XG5cdFx0aWYgKHF1YWxpZmllcikge1xuXHRcdFx0Y3VycmVudEFubm90YXRpb25UYXJnZXQgKz0gYCMke3F1YWxpZmllcn1gO1xuXHRcdH1cblx0XHRjb25zdCBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSA9IGFubm90YXRpb25PYmplY3QgYXMgTWV0YU1vZGVsQW5ub3RhdGlvbjtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UgPT09IG51bGwpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiTnVsbFwiIH07XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiU3RyaW5nXCIsIFN0cmluZzogYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQm9vbFwiLCBCb29sOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSB9O1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RUb1BhcnNlID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkludFwiLCBJbnQ6IGFubm90YXRpb25PYmplY3RUb1BhcnNlIH07XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFubm90YXRpb25PYmplY3RUb1BhcnNlKSkge1xuXHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uID0gYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UubWFwKChzdWJBbm5vdGF0aW9uT2JqZWN0LCBzdWJBbm5vdGF0aW9uSW5kZXgpID0+XG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbk9iamVjdChcblx0XHRcdFx0XHRzdWJBbm5vdGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRcdGAke2N1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0fS8ke3N1YkFubm90YXRpb25JbmRleH1gLFxuXHRcdFx0XHRcdGFubm90YXRpb25MaXN0cyxcblx0XHRcdFx0XHRvQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdClcblx0XHRcdCkgYXMgQ29sbGVjdGlvbjtcblx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRQcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiUHJvcGVydHlQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5ub3RhdGlvblBhdGhcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiQW5ub3RhdGlvblBhdGhcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRUeXBlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIklmXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiT3JcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJFcVwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5lXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIk5vdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkd0XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LmNvbGxlY3Rpb24udHlwZSA9IFwiR2VcIjtcblx0XHRcdFx0fSBlbHNlIGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZVswXS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJMdFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkxlXCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbMF0uaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFuZFwiO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIkFwcGx5XCI7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RUb1BhcnNlWzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC5jb2xsZWN0aW9uLnR5cGUgPSBcIlJlY29yZFwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QuY29sbGVjdGlvbi50eXBlID0gXCJTdHJpbmdcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIGFubm90YXRpb25PYmplY3RUb1BhcnNlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJElmICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJJZlwiLCAkSWY6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRJZiBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEFuZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiQW5kXCIsICRBbmQ6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRBbmQgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRPciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7IHR5cGU6IFwiT3JcIiwgJE9yOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kT3IgYXMgW0V4cHJlc3Npb24sIEV4cHJlc3Npb25dIH07XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiROb3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIk5vdFwiLCAkTm90OiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kTm90IGFzIEV4cHJlc3Npb24gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEVxICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJFcVwiLCAkRXE6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRFcSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJE5lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJOZVwiLCAkTmU6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiROZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEd0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHdFwiLCAkR3Q6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRHdCBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJHZVwiLCAkR2U6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRHZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJMdFwiLCAkTHQ6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRMdCBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJExlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJMZVwiLCAkTGU6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRMZSBhcyBbRXhwcmVzc2lvbiwgRXhwcmVzc2lvbl0gfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEFwcGx5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHtcblx0XHRcdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHRcdFx0JEFwcGx5OiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kQXBwbHksXG5cdFx0XHRcdFx0JEZ1bmN0aW9uOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kRnVuY3Rpb25cblx0XHRcdFx0fSBhcyBBcHBseUV4cHJlc3Npb247XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cGFyc2VkQW5ub3RhdGlvbk9iamVjdC52YWx1ZSA9IHsgdHlwZTogXCJQYXRoXCIsIFBhdGg6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRQYXRoIH07XG5cdFx0XHR9IGVsc2UgaWYgKGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRBbm5vdGF0aW9uUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHBhcnNlZEFubm90YXRpb25PYmplY3QudmFsdWUgPSB7XG5cdFx0XHRcdFx0dHlwZTogXCJBbm5vdGF0aW9uUGF0aFwiLFxuXHRcdFx0XHRcdEFubm90YXRpb25QYXRoOiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kQW5ub3RhdGlvblBhdGhcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJERlY2ltYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0geyB0eXBlOiBcIkRlY2ltYWxcIiwgRGVjaW1hbDogcGFyc2VGbG9hdChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kRGVjaW1hbCkgfTtcblx0XHRcdH0gZWxzZSBpZiAoYW5ub3RhdGlvbk9iamVjdFRvUGFyc2UuJEVudW1NZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnZhbHVlID0ge1xuXHRcdFx0XHRcdHR5cGU6IFwiRW51bU1lbWJlclwiLFxuXHRcdFx0XHRcdEVudW1NZW1iZXI6IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRFbnVtTWVtYmVyXG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZWNvcmQ6IEFubm90YXRpb25SZWNvcmQgPSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXM6IFtdXG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZS4kVHlwZSkge1xuXHRcdFx0XHRcdGNvbnN0IHR5cGVWYWx1ZSA9IGFubm90YXRpb25PYmplY3RUb1BhcnNlLiRUeXBlO1xuXHRcdFx0XHRcdHJlY29yZC50eXBlID0gYCR7dHlwZVZhbHVlfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogRXhwcmVzc2lvbiB9W10gPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wZXJ0eUtleSBpbiBhbm5vdGF0aW9uT2JqZWN0VG9QYXJzZSkge1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eUtleSAhPT0gXCIkVHlwZVwiICYmICFwcm9wZXJ0eUtleS5zdGFydHNXaXRoKFwiQFwiKSkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXMucHVzaChcblx0XHRcdFx0XHRcdFx0cGFyc2VQcm9wZXJ0eVZhbHVlKFxuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25PYmplY3RUb1BhcnNlW3Byb3BlcnR5S2V5XSxcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eUtleSxcblx0XHRcdFx0XHRcdFx0XHRjdXJyZW50QW5ub3RhdGlvblRhcmdldCxcblx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0XHRcdFx0b0NhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlLZXkuc3RhcnRzV2l0aChcIkBcIikpIHtcblx0XHRcdFx0XHRcdC8vIEFubm90YXRpb24gb2YgcmVjb3JkXG5cdFx0XHRcdFx0XHRjcmVhdGVBbm5vdGF0aW9uTGlzdHMoXG5cdFx0XHRcdFx0XHRcdHsgW3Byb3BlcnR5S2V5XTogYW5ub3RhdGlvbk9iamVjdFRvUGFyc2VbcHJvcGVydHlLZXldIH0sXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRBbm5vdGF0aW9uVGFyZ2V0LFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uTGlzdHMsXG5cdFx0XHRcdFx0XHRcdG9DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJlY29yZC5wcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXHRcdFx0XHRwYXJzZWRBbm5vdGF0aW9uT2JqZWN0LnJlY29yZCA9IHJlY29yZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y3VycmVudE91dEFubm90YXRpb25PYmplY3QuYW5ub3RhdGlvbnMucHVzaChwYXJzZWRBbm5vdGF0aW9uT2JqZWN0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlUHJvcGVydHkoXG5cdHByb3BlcnR5RGVmaW5pdGlvbjogTWV0YU1vZGVsUHJvcGVydHksXG5cdGVudGl0eVR5cGVPYmplY3Q6IFJhd0VudGl0eVR5cGUgfCBSYXdDb21wbGV4VHlwZSxcblx0cHJvcGVydHlOYW1lOiBzdHJpbmdcbik6IFJhd1Byb3BlcnR5IHtcblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJQcm9wZXJ0eVwiLFxuXHRcdG5hbWU6IHByb3BlcnR5TmFtZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eVR5cGVPYmplY3QuZnVsbHlRdWFsaWZpZWROYW1lfS8ke3Byb3BlcnR5TmFtZX1gLFxuXHRcdHR5cGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRtYXhMZW5ndGg6IHByb3BlcnR5RGVmaW5pdGlvbi4kTWF4TGVuZ3RoLFxuXHRcdHByZWNpc2lvbjogcHJvcGVydHlEZWZpbml0aW9uLiRQcmVjaXNpb24sXG5cdFx0c2NhbGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kU2NhbGUsXG5cdFx0bnVsbGFibGU6IHByb3BlcnR5RGVmaW5pdGlvbi4kTnVsbGFibGUgPz8gdHJ1ZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5KFxuXHRuYXZQcm9wZXJ0eURlZmluaXRpb246IE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0ZW50aXR5VHlwZU9iamVjdDogUmF3RW50aXR5VHlwZSB8IFJhd0NvbXBsZXhUeXBlLFxuXHRuYXZQcm9wZXJ0eU5hbWU6IHN0cmluZ1xuKTogUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRsZXQgcmVmZXJlbnRpYWxDb25zdHJhaW50OiBSZWZlcmVudGlhbENvbnN0cmFpbnRbXSA9IFtdO1xuXHRpZiAobmF2UHJvcGVydHlEZWZpbml0aW9uLiRSZWZlcmVudGlhbENvbnN0cmFpbnQpIHtcblx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnQgPSBPYmplY3Qua2V5cyhuYXZQcm9wZXJ0eURlZmluaXRpb24uJFJlZmVyZW50aWFsQ29uc3RyYWludCkubWFwKChzb3VyY2VQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNvdXJjZVR5cGVOYW1lOiBlbnRpdHlUeXBlT2JqZWN0Lm5hbWUsXG5cdFx0XHRcdHNvdXJjZVByb3BlcnR5OiBzb3VyY2VQcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdHRhcmdldFR5cGVOYW1lOiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFR5cGUsXG5cdFx0XHRcdHRhcmdldFByb3BlcnR5OiBuYXZQcm9wZXJ0eURlZmluaXRpb24uJFJlZmVyZW50aWFsQ29uc3RyYWludFtzb3VyY2VQcm9wZXJ0eU5hbWVdXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eTogUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkgPSB7XG5cdFx0X3R5cGU6IFwiTmF2aWdhdGlvblByb3BlcnR5XCIsXG5cdFx0bmFtZTogbmF2UHJvcGVydHlOYW1lLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogYCR7ZW50aXR5VHlwZU9iamVjdC5mdWxseVF1YWxpZmllZE5hbWV9LyR7bmF2UHJvcGVydHlOYW1lfWAsXG5cdFx0cGFydG5lcjogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRQYXJ0bmVyLFxuXHRcdGlzQ29sbGVjdGlvbjogbmF2UHJvcGVydHlEZWZpbml0aW9uLiRpc0NvbGxlY3Rpb24gPyBuYXZQcm9wZXJ0eURlZmluaXRpb24uJGlzQ29sbGVjdGlvbiA6IGZhbHNlLFxuXHRcdGNvbnRhaW5zVGFyZ2V0OiAhIW5hdlByb3BlcnR5RGVmaW5pdGlvbi4kQ29udGFpbnNUYXJnZXQsXG5cdFx0dGFyZ2V0VHlwZU5hbWU6IG5hdlByb3BlcnR5RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRyZWZlcmVudGlhbENvbnN0cmFpbnRcblx0fTtcblxuXHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhcblx0bmF2aWdhdGlvblByb3BlcnR5QmluZGluZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0ZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nXG4pOiBSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIHtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRcdFx0T2JqZWN0LmVudHJpZXMobmF2aWdhdGlvblByb3BlcnR5QmluZGluZykubWFwKChbcGF0aCwgdGFyZ2V0XSkgPT4gW3BhdGgsIGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7dGFyZ2V0fWBdKVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlTZXQoZW50aXR5U2V0RGVmaW5pdGlvbjogTWV0YU1vZGVsRW50aXR5U2V0LCBlbnRpdHlTZXROYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd0VudGl0eVNldCB7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRW50aXR5U2V0XCIsXG5cdFx0bmFtZTogZW50aXR5U2V0TmFtZSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nOiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhlbnRpdHlTZXREZWZpbml0aW9uLiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLCBlbnRpdHlDb250YWluZXJOYW1lKSxcblx0XHRlbnRpdHlUeXBlTmFtZTogZW50aXR5U2V0RGVmaW5pdGlvbi4kVHlwZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7ZW50aXR5U2V0TmFtZX1gXG5cdH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVTaW5nbGV0b24oc2luZ2xldG9uRGVmaW5pdGlvbjogTWV0YU1vZGVsU2luZ2xldG9uLCBzaW5nbGV0b25OYW1lOiBzdHJpbmcsIGVudGl0eUNvbnRhaW5lck5hbWU6IHN0cmluZyk6IFJhd1NpbmdsZXRvbiB7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiU2luZ2xldG9uXCIsXG5cdFx0bmFtZTogc2luZ2xldG9uTmFtZSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nOiBwcmVwYXJlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyhzaW5nbGV0b25EZWZpbml0aW9uLiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLCBlbnRpdHlDb250YWluZXJOYW1lKSxcblx0XHRlbnRpdHlUeXBlTmFtZTogc2luZ2xldG9uRGVmaW5pdGlvbi4kVHlwZSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2VudGl0eUNvbnRhaW5lck5hbWV9LyR7c2luZ2xldG9uTmFtZX1gLFxuXHRcdG51bGxhYmxlOiB0cnVlXG5cdH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBY3Rpb25JbXBvcnQoXG5cdGFjdGlvbkltcG9ydDogTWV0YU1vZGVsQWN0aW9uSW1wb3J0IHwgTWV0YU1vZGVsRnVuY3Rpb25JbXBvcnQsXG5cdGFjdGlvbkltcG9ydE5hbWU6IHN0cmluZyxcblx0ZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nXG4pOiBSYXdBY3Rpb25JbXBvcnQge1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkFjdGlvbkltcG9ydFwiLFxuXHRcdG5hbWU6IGFjdGlvbkltcG9ydE5hbWUsXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBgJHtlbnRpdHlDb250YWluZXJOYW1lfS8ke2FjdGlvbkltcG9ydE5hbWV9YCxcblx0XHRhY3Rpb25OYW1lOiBhY3Rpb25JbXBvcnQuJGtpbmQgPT09IFwiQWN0aW9uSW1wb3J0XCIgPyBhY3Rpb25JbXBvcnQuJEFjdGlvbiA6IGFjdGlvbkltcG9ydC4kRnVuY3Rpb25cblx0fTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVR5cGVEZWZpbml0aW9uKHR5cGVEZWZpbml0aW9uOiBNZXRhTW9kZWxUeXBlRGVmaW5pdGlvbiwgdHlwZU5hbWU6IHN0cmluZywgbmFtZXNwYWNlUHJlZml4OiBzdHJpbmcpOiBSYXdUeXBlRGVmaW5pdGlvbiB7XG5cdGNvbnN0IHR5cGVPYmplY3Q6IFJhd1R5cGVEZWZpbml0aW9uID0ge1xuXHRcdF90eXBlOiBcIlR5cGVEZWZpbml0aW9uXCIsXG5cdFx0bmFtZTogdHlwZU5hbWUuc3Vic3RyaW5nKG5hbWVzcGFjZVByZWZpeC5sZW5ndGgpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogdHlwZU5hbWUsXG5cdFx0dW5kZXJseWluZ1R5cGU6IHR5cGVEZWZpbml0aW9uLiRVbmRlcmx5aW5nVHlwZVxuXHR9O1xuXHRyZXR1cm4gdHlwZU9iamVjdDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUNvbXBsZXhUeXBlKGNvbXBsZXhUeXBlRGVmaW5pdGlvbjogTWV0YU1vZGVsQ29tcGxleFR5cGUsIGNvbXBsZXhUeXBlTmFtZTogc3RyaW5nLCBuYW1lc3BhY2VQcmVmaXg6IHN0cmluZyk6IFJhd0NvbXBsZXhUeXBlIHtcblx0Y29uc3QgY29tcGxleFR5cGVPYmplY3Q6IFJhd0NvbXBsZXhUeXBlID0ge1xuXHRcdF90eXBlOiBcIkNvbXBsZXhUeXBlXCIsXG5cdFx0bmFtZTogY29tcGxleFR5cGVOYW1lLnN1YnN0cmluZyhuYW1lc3BhY2VQcmVmaXgubGVuZ3RoKSxcblx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGNvbXBsZXhUeXBlTmFtZSxcblx0XHRwcm9wZXJ0aWVzOiBbXSxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW11cblx0fTtcblxuXHRjb25zdCBjb21wbGV4VHlwZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhjb21wbGV4VHlwZURlZmluaXRpb24pXG5cdFx0LmZpbHRlcigocHJvcGVydHlOYW1lT3JOb3QpID0+IHtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRLZXlcIiAmJiBwcm9wZXJ0eU5hbWVPck5vdCAhPSBcIiRraW5kXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBsZXhUeXBlRGVmaW5pdGlvbltwcm9wZXJ0eU5hbWVPck5vdF0uJGtpbmQgPT09IFwiUHJvcGVydHlcIjtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYSA+IGIgPyAxIDogLTEpKVxuXHRcdC5tYXAoKHByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByZXBhcmVQcm9wZXJ0eShjb21wbGV4VHlwZURlZmluaXRpb25bcHJvcGVydHlOYW1lXSBhcyBNZXRhTW9kZWxQcm9wZXJ0eSwgY29tcGxleFR5cGVPYmplY3QsIHByb3BlcnR5TmFtZSk7XG5cdFx0fSk7XG5cblx0Y29tcGxleFR5cGVPYmplY3QucHJvcGVydGllcyA9IGNvbXBsZXhUeXBlUHJvcGVydGllcztcblx0Y29uc3QgY29tcGxleFR5cGVOYXZpZ2F0aW9uUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGNvbXBsZXhUeXBlRGVmaW5pdGlvbilcblx0XHQuZmlsdGVyKChwcm9wZXJ0eU5hbWVPck5vdCkgPT4ge1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJEtleVwiICYmIHByb3BlcnR5TmFtZU9yTm90ICE9IFwiJGtpbmRcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGxleFR5cGVEZWZpbml0aW9uW3Byb3BlcnR5TmFtZU9yTm90XS4ka2luZCA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIjtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5zb3J0KChhLCBiKSA9PiAoYSA+IGIgPyAxIDogLTEpKVxuXHRcdC5tYXAoKG5hdlByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkoXG5cdFx0XHRcdGNvbXBsZXhUeXBlRGVmaW5pdGlvbltuYXZQcm9wZXJ0eU5hbWVdIGFzIE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0XHRcdFx0Y29tcGxleFR5cGVPYmplY3QsXG5cdFx0XHRcdG5hdlByb3BlcnR5TmFtZVxuXHRcdFx0KTtcblx0XHR9KTtcblx0Y29tcGxleFR5cGVPYmplY3QubmF2aWdhdGlvblByb3BlcnRpZXMgPSBjb21wbGV4VHlwZU5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRyZXR1cm4gY29tcGxleFR5cGVPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVFbnRpdHlLZXlzKGVudGl0eVR5cGVEZWZpbml0aW9uOiBNZXRhTW9kZWxFbnRpdHlUeXBlLCBvTWV0YU1vZGVsRGF0YTogTWV0YU1vZGVsQ29udGVudCk6IHN0cmluZ1tdIHtcblx0aWYgKCFlbnRpdHlUeXBlRGVmaW5pdGlvbi4kS2V5ICYmIGVudGl0eVR5cGVEZWZpbml0aW9uLiRCYXNlVHlwZSkge1xuXHRcdHJldHVybiBwcmVwYXJlRW50aXR5S2V5cyhvTWV0YU1vZGVsRGF0YVtlbnRpdHlUeXBlRGVmaW5pdGlvbi4kQmFzZVR5cGVdIGFzIE1ldGFNb2RlbEVudGl0eVR5cGUsIG9NZXRhTW9kZWxEYXRhKTtcblx0fVxuXHRyZXR1cm4gZW50aXR5VHlwZURlZmluaXRpb24uJEtleSA/PyBbXTsgLy9oYW5kbGluZyBvZiBlbnRpdHkgdHlwZXMgd2l0aG91dCBrZXkgYXMgd2VsbCBhcyBiYXNldHlwZVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlRW50aXR5VHlwZShcblx0ZW50aXR5VHlwZURlZmluaXRpb246IE1ldGFNb2RlbEVudGl0eVR5cGUsXG5cdGVudGl0eVR5cGVOYW1lOiBzdHJpbmcsXG5cdG5hbWVzcGFjZVByZWZpeDogc3RyaW5nLFxuXHRtZXRhTW9kZWxEYXRhOiBNZXRhTW9kZWxDb250ZW50LFxuXHRpZ25vcmVEYXRhZmllbGREZWZhdWx0OiBib29sZWFuXG4pOiBSYXdFbnRpdHlUeXBlIHtcblx0Y29uc3QgZW50aXR5VHlwZTogUmF3RW50aXR5VHlwZSA9IHtcblx0XHRfdHlwZTogXCJFbnRpdHlUeXBlXCIsXG5cdFx0bmFtZTogZW50aXR5VHlwZU5hbWUuc3Vic3RyaW5nKG5hbWVzcGFjZVByZWZpeC5sZW5ndGgpLFxuXHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogZW50aXR5VHlwZU5hbWUsXG5cdFx0a2V5czogW10sXG5cdFx0ZW50aXR5UHJvcGVydGllczogW10sXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdGFjdGlvbnM6IHt9XG5cdH07XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gZW50aXR5VHlwZURlZmluaXRpb24pIHtcblx0XHRjb25zdCB2YWx1ZSA9IGVudGl0eVR5cGVEZWZpbml0aW9uW2tleV07XG5cblx0XHRzd2l0Y2ggKHZhbHVlLiRraW5kKSB7XG5cdFx0XHRjYXNlIFwiUHJvcGVydHlcIjpcblx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSBwcmVwYXJlUHJvcGVydHkodmFsdWUsIGVudGl0eVR5cGUsIGtleSk7XG5cdFx0XHRcdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTmF2aWdhdGlvblByb3BlcnR5XCI6XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IHByZXBhcmVOYXZpZ2F0aW9uUHJvcGVydHkodmFsdWUsIGVudGl0eVR5cGUsIGtleSk7XG5cdFx0XHRcdGVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChuYXZpZ2F0aW9uUHJvcGVydHkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRlbnRpdHlUeXBlLmtleXMgPSBwcmVwYXJlRW50aXR5S2V5cyhlbnRpdHlUeXBlRGVmaW5pdGlvbiwgbWV0YU1vZGVsRGF0YSlcblx0XHQubWFwKChlbnRpdHlLZXkpID0+IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkubmFtZSA9PT0gZW50aXR5S2V5KSlcblx0XHQuZmlsdGVyKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkgIT09IHVuZGVmaW5lZCkgYXMgUmF3RW50aXR5VHlwZVtcImtleXNcIl07XG5cblx0Y29uc3QgZW50aXR5VHlwZUFubm90YXRpb25zID0gbWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnNbZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWVdIGFzIE1ldGFNb2RlbEVudGl0eVR5cGVBbm5vdGF0aW9ucyB8IHVuZGVmaW5lZDtcblx0Ly8gQ2hlY2sgaWYgdGhlcmUgYXJlIGZpbHRlciBmYWNldHMgZGVmaW5lZCBmb3IgdGhlIGVudGl0eVR5cGUgYW5kIGlmIHllcywgY2hlY2sgaWYgYWxsIG9mIHRoZW0gaGF2ZSBhbiBJRFxuXHQvLyBUaGUgSUQgaXMgb3B0aW9uYWwsIGJ1dCBpdCBpcyBpbnRlcm5hbGx5IHRha2VuIGZvciBncm91cGluZyBmaWx0ZXIgZmllbGRzIGFuZCBpZiBpdCdzIG5vdCBwcmVzZW50XG5cdC8vIGEgZmFsbGJhY2sgSUQgbmVlZHMgdG8gYmUgZ2VuZXJhdGVkIGhlcmUuXG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGVBbm5vdGF0aW9ucz8uW2BAJHtVSUFubm90YXRpb25UZXJtcy5GaWx0ZXJGYWNldHN9YF0gYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJGYWNldHM+O1xuXHRmaWx0ZXJGYWNldHM/LmZvckVhY2goKGZpbHRlckZhY2V0QW5ub3RhdGlvbjogTWV0YU1vZGVsVHlwZTxSZWZlcmVuY2VGYWNldD4pID0+IHtcblx0XHRmaWx0ZXJGYWNldEFubm90YXRpb24uSUQgPSBjcmVhdGVSZWZlcmVuY2VGYWNldElkKGZpbHRlckZhY2V0QW5ub3RhdGlvbik7XG5cdH0pO1xuXG5cdC8vIENoZWNrIGlmIGVudGl0eVR5cGUgaGFzIG5vdCBtYW5kYXRvcnkgSGVhZGVySW5mb1xuXHRpZiAoXG5cdFx0ISFlbnRpdHlUeXBlPy5rZXlzLmxlbmd0aCAmJlxuXHRcdG1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lXSAmJlxuXHRcdCFlbnRpdHlUeXBlQW5ub3RhdGlvbnM/LltgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVySW5mb31gXVxuXHQpIHtcblx0XHRjb25zdCBoZWFkZXJJbmZvQW5ub3RhdGlvbjogTWV0YU1vZGVsVHlwZTxIZWFkZXJJbmZvPiA9IHtcblx0XHRcdCRUeXBlOiBgJHtVSUFubm90YXRpb25UeXBlcy5IZWFkZXJJbmZvVHlwZX1gLFxuXHRcdFx0VHlwZU5hbWU6IGAke2VudGl0eVR5cGUubmFtZX1gLFxuXHRcdFx0VHlwZU5hbWVQbHVyYWw6IFwiXCIsXG5cdFx0XHRUaXRsZToge1xuXHRcdFx0XHQkVHlwZTogYCR7VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkfWAsXG5cdFx0XHRcdFZhbHVlOiB7XG5cdFx0XHRcdFx0JFBhdGg6IGAke2VudGl0eVR5cGUua2V5c1swXS5uYW1lfWBcblx0XHRcdFx0fVxuXHRcdFx0fSBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZD4sXG5cdFx0XHR0ZXJtOiBVSUFubm90YXRpb25UZXJtcy5IZWFkZXJJbmZvXG5cdFx0fTtcblx0XHQvLyBBZGQgdGhlIG1pc3NpbmcgSGVhZGVySW5mb1xuXHRcdChtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZV0gYXMgTWV0YU1vZGVsRW50aXR5VHlwZUFubm90YXRpb25zKVtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGVhZGVySW5mb31gXSA9XG5cdFx0XHRoZWFkZXJJbmZvQW5ub3RhdGlvbjtcblx0fVxuXG5cdGZvciAoY29uc3QgZW50aXR5UHJvcGVydHkgb2YgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzKSB7XG5cdFx0aWYgKCFtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdKSB7XG5cdFx0XHRtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdID0ge307XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdCFpZ25vcmVEYXRhZmllbGREZWZhdWx0ICYmXG5cdFx0XHQhKG1ldGFNb2RlbERhdGEuJEFubm90YXRpb25zW2VudGl0eVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZV0gYXMgTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucylbXG5cdFx0XHRcdGBAJHtVSUFubm90YXRpb25UZXJtcy5EYXRhRmllbGREZWZhdWx0fWBcblx0XHRcdF1cblx0XHQpIHtcblx0XHRcdChtZXRhTW9kZWxEYXRhLiRBbm5vdGF0aW9uc1tlbnRpdHlQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVdIGFzIE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMpW1xuXHRcdFx0XHRgQCR7VUlBbm5vdGF0aW9uVGVybXMuRGF0YUZpZWxkRGVmYXVsdH1gXG5cdFx0XHRdID0ge1xuXHRcdFx0XHQkVHlwZTogVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkLFxuXHRcdFx0XHRWYWx1ZTogeyAkUGF0aDogZW50aXR5UHJvcGVydHkubmFtZSB9XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbnRpdHlUeXBlO1xufVxuZnVuY3Rpb24gcHJlcGFyZUFjdGlvbihhY3Rpb25SYXdEYXRhOiBNZXRhTW9kZWxBY3Rpb24sIGFjdGlvbk5hbWU6IHN0cmluZywgbmFtZXNwYWNlUHJlZml4OiBzdHJpbmcpOiBSYXdBY3Rpb24ge1xuXHRsZXQgb3ZlcmxvYWRQYXJhbWV0ZXJzOiBNZXRhTW9kZWxBY3Rpb25bXCIkUGFyYW1ldGVyXCJdO1xuXHRpZiAoYWN0aW9uUmF3RGF0YS4ka2luZCA9PT0gXCJGdW5jdGlvblwiKSB7XG5cdFx0Ly8gZnVuY3Rpb24gLSBvdmVybG9hZCBpbmNsdWRlcyBhbGwgcGFyYW1ldGVycyAoYm91bmQgZW50aXR5IHR5cGUgX2FuZF8gb3RoZXIgcGFyYW1ldGVycylcblx0XHRvdmVybG9hZFBhcmFtZXRlcnMgPSBhY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXIgPz8gW107XG5cdH0gZWxzZSB7XG5cdFx0Ly8gYWN0aW9uIC0gb3ZlcmxvYWQgaXMgdGhlIGZpcnN0IHBhcmFtZXRlciBvciB0aGUgZW1wdHkgdW5ib3VuZCBvdmVybG9hZCBpbiBjYXNlIG9mIGFuIHVuYm91bmQgYWN0aW9uXG5cdFx0b3ZlcmxvYWRQYXJhbWV0ZXJzID0gYWN0aW9uUmF3RGF0YS4kSXNCb3VuZCA/IFthY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXJbMF1dIDogW107XG5cdH1cblxuXHRjb25zdCBvdmVybG9hZCA9IG92ZXJsb2FkUGFyYW1ldGVyc1xuXHRcdC5tYXAoKHBhcmFtZXRlcikgPT4gKHBhcmFtZXRlci4kaXNDb2xsZWN0aW9uID8gYENvbGxlY3Rpb24oJHtwYXJhbWV0ZXIuJFR5cGV9KWAgOiBwYXJhbWV0ZXIuJFR5cGUpKVxuXHRcdC5qb2luKFwiLFwiKTtcblxuXHRjb25zdCBmdWxseVF1YWxpZmllZE5hbWUgPSBgJHthY3Rpb25OYW1lfSgke292ZXJsb2FkfSlgO1xuXG5cdGNvbnN0IHBhcmFtZXRlcnMgPSBhY3Rpb25SYXdEYXRhLiRQYXJhbWV0ZXIgPz8gW107XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQWN0aW9uXCIsXG5cdFx0bmFtZTogYWN0aW9uTmFtZS5zdWJzdHJpbmcobmFtZXNwYWNlUHJlZml4Lmxlbmd0aCksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdGlzQm91bmQ6IGFjdGlvblJhd0RhdGEuJElzQm91bmQgPz8gZmFsc2UsXG5cdFx0aXNGdW5jdGlvbjogYWN0aW9uUmF3RGF0YS4ka2luZCA9PT0gXCJGdW5jdGlvblwiLFxuXHRcdHNvdXJjZVR5cGU6IG92ZXJsb2FkUGFyYW1ldGVyc1swXT8uJFR5cGUgPz8gXCJcIixcblx0XHRyZXR1cm5UeXBlOiBhY3Rpb25SYXdEYXRhLiRSZXR1cm5UeXBlPy4kVHlwZSA/PyBcIlwiLFxuXHRcdHJldHVybkNvbGxlY3Rpb246IGFjdGlvblJhd0RhdGEuJFJldHVyblR5cGU/LiRpc0NvbGxlY3Rpb24gPz8gZmFsc2UsXG5cdFx0cGFyYW1ldGVyczogcGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiAoe1xuXHRcdFx0X3R5cGU6IFwiQWN0aW9uUGFyYW1ldGVyXCIsXG5cdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IGAke2Z1bGx5UXVhbGlmaWVkTmFtZX0vJHtwYXJhbS4kTmFtZX1gLFxuXHRcdFx0aXNDb2xsZWN0aW9uOiBwYXJhbS4kaXNDb2xsZWN0aW9uID8/IGZhbHNlLFxuXHRcdFx0bmFtZTogcGFyYW0uJE5hbWUsXG5cdFx0XHR0eXBlOiBwYXJhbS4kVHlwZSxcblx0XHRcdG51bGxhYmxlOiBwYXJhbS4kTnVsbGFibGUgPz8gZmFsc2UsXG5cdFx0XHRtYXhMZW5ndGg6IHBhcmFtLiRNYXhMZW5ndGgsXG5cdFx0XHRwcmVjaXNpb246IHBhcmFtLiRQcmVjaXNpb24sXG5cdFx0XHRzY2FsZTogcGFyYW0uJFNjYWxlXG5cdFx0fSkpXG5cdH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlRW50aXR5Q29udGFpbmVyKFxuXHRuYW1lc3BhY2VQcmVmaXg6IHN0cmluZyxcblx0ZW50aXR5Q29udGFpbmVyTmFtZTogc3RyaW5nLFxuXHRlbnRpdHlDb250YWluZXJNZXRhZGF0YTogTWV0YU1vZGVsRW50aXR5Q29udGFpbmVyLFxuXHRzY2hlbWE6IFJhd1NjaGVtYVxuKTogdm9pZCB7XG5cdHNjaGVtYS5lbnRpdHlDb250YWluZXIgPSB7XG5cdFx0X3R5cGU6IFwiRW50aXR5Q29udGFpbmVyXCIsXG5cdFx0bmFtZTogZW50aXR5Q29udGFpbmVyTmFtZS5zdWJzdHJpbmcobmFtZXNwYWNlUHJlZml4Lmxlbmd0aCksXG5cdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBlbnRpdHlDb250YWluZXJOYW1lXG5cdH07XG5cblx0Zm9yIChjb25zdCBlbGVtZW50TmFtZSBpbiBlbnRpdHlDb250YWluZXJNZXRhZGF0YSkge1xuXHRcdGNvbnN0IGVsZW1lbnRWYWx1ZSA9IGVudGl0eUNvbnRhaW5lck1ldGFkYXRhW2VsZW1lbnROYW1lXTtcblx0XHRzd2l0Y2ggKGVsZW1lbnRWYWx1ZS4ka2luZCkge1xuXHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRzY2hlbWEuZW50aXR5U2V0cy5wdXNoKHByZXBhcmVFbnRpdHlTZXQoZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIlNpbmdsZXRvblwiOlxuXHRcdFx0XHRzY2hlbWEuc2luZ2xldG9ucy5wdXNoKHByZXBhcmVTaW5nbGV0b24oZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJGdW5jdGlvbkltcG9ydFwiOlxuXHRcdFx0Y2FzZSBcIkFjdGlvbkltcG9ydFwiOlxuXHRcdFx0XHRzY2hlbWEuYWN0aW9uSW1wb3J0cy5wdXNoKHByZXBhcmVBY3Rpb25JbXBvcnQoZWxlbWVudFZhbHVlLCBlbGVtZW50TmFtZSwgZW50aXR5Q29udGFpbmVyTmFtZSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9ucyhhbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsQW5ub3RhdGlvbnM+LCBjYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKTogQW5ub3RhdGlvbkxpc3RbXSB7XG5cdGNvbnN0IGFubm90YXRpb25MaXN0czogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbkxpc3Q+ID0ge307XG5cdGZvciAoY29uc3QgdGFyZ2V0IGluIGFubm90YXRpb25zKSB7XG5cdFx0Y3JlYXRlQW5ub3RhdGlvbkxpc3RzKGFubm90YXRpb25zW3RhcmdldF0sIHRhcmdldCwgYW5ub3RhdGlvbkxpc3RzLCBjYXBhYmlsaXRpZXMpO1xuXHR9XG5cdHJldHVybiBPYmplY3QudmFsdWVzKGFubm90YXRpb25MaXN0cyk7XG59XG5cbnR5cGUgTWV0YU1vZGVsU2NoZW1hID0ge1xuXHQka2luZDogXCJTY2hlbWFcIjtcbn07XG50eXBlIE1ldGFNb2RlbEVudGl0eVNldCA9IHtcblx0JGtpbmQ6IFwiRW50aXR5U2V0XCI7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbnR5cGUgTWV0YU1vZGVsVHlwZXM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHQvLyBAdHMtaWdub3JlXG5cdFtrZXkgaW4ga2V5b2YgVF06IE1ldGFNb2RlbFR5cGU8VFtrZXldPjtcbn07XG5leHBvcnQgdHlwZSBNZXRhTW9kZWxFbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBSZW5hbWU8XCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5cIiwgTWV0YU1vZGVsVHlwZXM8RW50aXR5VHlwZUFubm90YXRpb25zX0NhcGFiaWxpdGllcz4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxFbnRpdHlUeXBlQW5ub3RhdGlvbnNfVUk+PjtcblxuZXhwb3J0IHR5cGUgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbnMgPSBSZW5hbWU8XCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5cIiwgTWV0YU1vZGVsVHlwZXM8RW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzPj4gJlxuXHRSZW5hbWU8XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuXCIsIE1ldGFNb2RlbFR5cGVzPEVudGl0eVNldEFubm90YXRpb25zX1VJPj47XG5cbmV4cG9ydCB0eXBlIE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMgPSBSZW5hbWU8XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbj4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX1VJPj4gJlxuXHRSZW5hbWU8XCJAT3JnLk9EYXRhLkNvcmUuVjEuXCIsIE1ldGFNb2RlbFR5cGVzPFByb3BlcnR5QW5ub3RhdGlvbnNfQ29yZT4+ICZcblx0UmVuYW1lPFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuXCIsIE1ldGFNb2RlbFR5cGVzPFByb3BlcnR5QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzPj4gJlxuXHRSZW5hbWU8XCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX01lYXN1cmVzPj4gJlxuXHRSZW5hbWU8XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX0FuYWx5dGljcz4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuXCIsIE1ldGFNb2RlbFR5cGVzPFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbXVuaWNhdGlvbj4+ICZcblx0UmVuYW1lPFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5cIiwgTWV0YU1vZGVsVHlwZXM8UHJvcGVydHlBbm5vdGF0aW9uc19QZXJzb25hbERhdGE+PiAmXG5cdFJlbmFtZTxcIkBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlwiLCBNZXRhTW9kZWxUeXBlczxQcm9wZXJ0eUFubm90YXRpb25zX1Nlc3Npb24+PiAmIHtcblx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIjogTWV0YU1vZGVsRW51bTxUZXh0QXJyYW5nZW1lbnQ+O1xuXHR9O1xudHlwZSBNZXRhTW9kZWxBY3Rpb25JbXBvcnQgPSB7XG5cdCRraW5kOiBcIkFjdGlvbkltcG9ydFwiO1xuXHQkQWN0aW9uOiBzdHJpbmc7XG59O1xudHlwZSBNZXRhTW9kZWxGdW5jdGlvbkltcG9ydCA9IHtcblx0JGtpbmQ6IFwiRnVuY3Rpb25JbXBvcnRcIjtcblx0JEZ1bmN0aW9uOiBzdHJpbmc7XG59O1xudHlwZSBNZXRhTW9kZWxTaW5nbGV0b24gPSB7XG5cdCRraW5kOiBcIlNpbmdsZXRvblwiO1xuXHQkVHlwZTogc3RyaW5nO1xuXHQkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xudHlwZSBNZXRhTW9kZWxFbnRpdHlDb250YWluZXIgPSB7XG5cdCRraW5kOiBcIkVudGl0eUNvbnRhaW5lclwiO1xufSAmIHtcblx0W25hbWU6IHN0cmluZ106IE1ldGFNb2RlbEVudGl0eVNldCB8IE1ldGFNb2RlbFNpbmdsZXRvbiB8IE1ldGFNb2RlbEFjdGlvbkltcG9ydCB8IE1ldGFNb2RlbEZ1bmN0aW9uSW1wb3J0O1xufTtcbnR5cGUgTWV0YU1vZGVsUHJvcGVydHkgPSB7XG5cdCRraW5kOiBcIlByb3BlcnR5XCI7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCRNYXhMZW5ndGg/OiBudW1iZXI7XG5cdCRQcmVjaXNpb24/OiBudW1iZXI7XG5cdCRTY2FsZT86IG51bWJlcjtcblx0JE51bGxhYmxlPzogYm9vbGVhbjtcbn07XG50eXBlIE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eSA9IHtcblx0JGtpbmQ6IFwiTmF2aWdhdGlvblByb3BlcnR5XCI7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCRQYXJ0bmVyPzogc3RyaW5nO1xuXHQkaXNDb2xsZWN0aW9uPzogYm9vbGVhbjtcblx0JENvbnRhaW5zVGFyZ2V0PzogYm9vbGVhbjtcblx0JFJlZmVyZW50aWFsQ29uc3RyYWludDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG50eXBlIE1ldGFNb2RlbEVudGl0eVR5cGUgPSB7XG5cdCRraW5kOiBcIkVudGl0eVR5cGVcIjtcblx0JEJhc2VUeXBlPzogc3RyaW5nO1xuXHQkS2V5OiBzdHJpbmdbXTtcbn0gJiB7XG5cdFtuYW1lOiBzdHJpbmddOiBNZXRhTW9kZWxQcm9wZXJ0eSB8IE1ldGFNb2RlbE5hdmlnYXRpb25Qcm9wZXJ0eTtcbn07XG50eXBlIE1ldGFNb2RlbENvbXBsZXhUeXBlID0ge1xuXHQka2luZDogXCJDb21wbGV4VHlwZVwiO1xufSAmIHtcblx0W25hbWU6IHN0cmluZ106IE1ldGFNb2RlbFByb3BlcnR5IHwgTWV0YU1vZGVsTmF2aWdhdGlvblByb3BlcnR5O1xufTtcbnR5cGUgTWV0YU1vZGVsVHlwZURlZmluaXRpb24gPSB7XG5cdCRraW5kOiBcIlR5cGVEZWZpbml0aW9uXCI7XG5cdCRVbmRlcmx5aW5nVHlwZTogc3RyaW5nO1xufTtcbnR5cGUgTWV0YU1vZGVsT2JqZWN0ID1cblx0fCBNZXRhTW9kZWxFbnRpdHlTZXRcblx0fCBNZXRhTW9kZWxTY2hlbWFcblx0fCBNZXRhTW9kZWxFbnRpdHlDb250YWluZXJcblx0fCBNZXRhTW9kZWxBY3Rpb25cblx0fCBNZXRhTW9kZWxFbnRpdHlUeXBlXG5cdHwgTWV0YU1vZGVsQ29tcGxleFR5cGVcblx0fCBNZXRhTW9kZWxUeXBlRGVmaW5pdGlvbjtcbnR5cGUgTWV0YU1vZGVsQW5ub3RhdGlvbnMgPSBNZXRhTW9kZWxFbnRpdHlUeXBlQW5ub3RhdGlvbnMgfCBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zIHwgTWV0YU1vZGVsRW50aXR5U2V0QW5ub3RhdGlvbnM7XG5cbnR5cGUgTWV0YU1vZGVsQ29udGVudCA9IHtcblx0JEFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxBbm5vdGF0aW9ucz47XG59ICYgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsT2JqZWN0IHwgTWV0YU1vZGVsT2JqZWN0W10+O1xuZnVuY3Rpb24gcGFyc2VTY2hlbWEobWV0YU1vZGVsRGF0YTogTWV0YU1vZGVsQ29udGVudCwgaWdub3JlRGF0YWZpZWxkRGVmYXVsdDogYm9vbGVhbik6IFJhd1NjaGVtYSB7XG5cdC8vIGFzc3VtaW5nIHRoZXJlIGlzIG9ubHkgb25lIHNjaGVtYS9uYW1lc3BhY2Vcblx0Y29uc3QgbmFtZXNwYWNlUHJlZml4ID1cblx0XHRPYmplY3Qua2V5cyhtZXRhTW9kZWxEYXRhKS5maW5kKChrZXkpID0+IHtcblx0XHRcdGNvbnN0IG1ldGFtb2RlbE9iamVjdCA9IG1ldGFNb2RlbERhdGFba2V5XTtcblx0XHRcdHJldHVybiAhQXJyYXkuaXNBcnJheShtZXRhbW9kZWxPYmplY3QpICYmIG1ldGFtb2RlbE9iamVjdC4ka2luZCA9PT0gXCJTY2hlbWFcIjtcblx0XHR9KSA/PyBcIlwiO1xuXG5cdGNvbnN0IHNjaGVtYTogUmF3U2NoZW1hID0ge1xuXHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlUHJlZml4LnNsaWNlKDAsIC0xKSxcblx0XHRlbnRpdHlDb250YWluZXI6IHsgX3R5cGU6IFwiRW50aXR5Q29udGFpbmVyXCIsIG5hbWU6IFwiXCIsIGZ1bGx5UXVhbGlmaWVkTmFtZTogXCJcIiB9LFxuXHRcdGVudGl0eVNldHM6IFtdLFxuXHRcdGVudGl0eVR5cGVzOiBbXSxcblx0XHRjb21wbGV4VHlwZXM6IFtdLFxuXHRcdHR5cGVEZWZpbml0aW9uczogW10sXG5cdFx0c2luZ2xldG9uczogW10sXG5cdFx0YXNzb2NpYXRpb25zOiBbXSxcblx0XHRhc3NvY2lhdGlvblNldHM6IFtdLFxuXHRcdGFjdGlvbnM6IFtdLFxuXHRcdGFjdGlvbkltcG9ydHM6IFtdLFxuXHRcdGFubm90YXRpb25zOiB7fVxuXHR9O1xuXG5cdGNvbnN0IHBhcnNlTWV0YU1vZGVsRWxlbWVudCA9IChuYW1lOiBzdHJpbmcsIHZhbHVlOiBNZXRhTW9kZWxPYmplY3QpOiB2b2lkID0+IHtcblx0XHRzd2l0Y2ggKHZhbHVlLiRraW5kKSB7XG5cdFx0XHRjYXNlIFwiRW50aXR5Q29udGFpbmVyXCI6XG5cdFx0XHRcdHBhcnNlRW50aXR5Q29udGFpbmVyKG5hbWVzcGFjZVByZWZpeCwgbmFtZSwgdmFsdWUsIHNjaGVtYSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiQWN0aW9uXCI6XG5cdFx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRcdFx0c2NoZW1hLmFjdGlvbnMucHVzaChwcmVwYXJlQWN0aW9uKHZhbHVlLCBuYW1lLCBuYW1lc3BhY2VQcmVmaXgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJFbnRpdHlUeXBlXCI6XG5cdFx0XHRcdHNjaGVtYS5lbnRpdHlUeXBlcy5wdXNoKHByZXBhcmVFbnRpdHlUeXBlKHZhbHVlLCBuYW1lLCBuYW1lc3BhY2VQcmVmaXgsIG1ldGFNb2RlbERhdGEsIGlnbm9yZURhdGFmaWVsZERlZmF1bHQpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0XHRzY2hlbWEuY29tcGxleFR5cGVzLnB1c2gocHJlcGFyZUNvbXBsZXhUeXBlKHZhbHVlLCBuYW1lLCBuYW1lc3BhY2VQcmVmaXgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJUeXBlRGVmaW5pdGlvblwiOlxuXHRcdFx0XHRzY2hlbWEudHlwZURlZmluaXRpb25zLnB1c2gocHJlcGFyZVR5cGVEZWZpbml0aW9uKHZhbHVlLCBuYW1lLCBuYW1lc3BhY2VQcmVmaXgpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRW50aXR5U2V0XCI6XG5cdFx0XHRjYXNlIFwiU2NoZW1hXCI6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblxuXHRmb3IgKGNvbnN0IGVsZW1lbnROYW1lIGluIG1ldGFNb2RlbERhdGEpIHtcblx0XHRjb25zdCBlbGVtZW50VmFsdWUgPSBtZXRhTW9kZWxEYXRhW2VsZW1lbnROYW1lXTtcblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnRWYWx1ZSkpIHtcblx0XHRcdC8vIHZhbHVlIGNhbiBiZSBhbiBhcnJheSBpbiBjYXNlIG9mIGFjdGlvbnMgb3IgZnVuY3Rpb25zXG5cdFx0XHRmb3IgKGNvbnN0IHN1YkVsZW1lbnRWYWx1ZSBvZiBlbGVtZW50VmFsdWUpIHtcblx0XHRcdFx0cGFyc2VNZXRhTW9kZWxFbGVtZW50KGVsZW1lbnROYW1lLCBzdWJFbGVtZW50VmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXJzZU1ldGFNb2RlbEVsZW1lbnQoZWxlbWVudE5hbWUsIGVsZW1lbnRWYWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHNjaGVtYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWV0YU1vZGVsKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRjYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0gRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzLFxuXHRpZ25vcmVEYXRhZmllbGREZWZhdWx0ID0gZmFsc2Vcbik6IFJhd01ldGFkYXRhIHtcblx0Y29uc3QgcmVzdWx0OiBPbWl0PFJhd01ldGFkYXRhLCBcInNjaGVtYVwiPiA9IHtcblx0XHRpZGVudGlmaWNhdGlvbjogXCJtZXRhbW9kZWxSZXN1bHRcIixcblx0XHR2ZXJzaW9uOiBcIjQuMFwiLFxuXHRcdHJlZmVyZW5jZXM6IFtdXG5cdH07XG5cblx0Ly8gcGFyc2UgdGhlIHNjaGVtYSB3aGVuIGl0IGlzIGFjY2Vzc2VkIGZvciB0aGUgZmlyc3QgdGltZVxuXHRBbm5vdGF0aW9uQ29udmVydGVyLmxhenkocmVzdWx0IGFzIFJhd01ldGFkYXRhLCBcInNjaGVtYVwiLCAoKSA9PiB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsRGF0YSA9IG1ldGFNb2RlbC5nZXRPYmplY3QoXCIvJFwiKTtcblx0XHRjb25zdCBzY2hlbWEgPSBwYXJzZVNjaGVtYShtZXRhTW9kZWxEYXRhLCBpZ25vcmVEYXRhZmllbGREZWZhdWx0KTtcblxuXHRcdEFubm90YXRpb25Db252ZXJ0ZXIubGF6eShzY2hlbWEuYW5ub3RhdGlvbnMsIFwibWV0YW1vZGVsUmVzdWx0XCIsICgpID0+IHBhcnNlQW5ub3RhdGlvbnMobWV0YU1vZGVsRGF0YS4kQW5ub3RhdGlvbnMsIGNhcGFiaWxpdGllcykpO1xuXG5cdFx0cmV0dXJuIHNjaGVtYTtcblx0fSk7XG5cblx0cmV0dXJuIHJlc3VsdCBhcyBSYXdNZXRhZGF0YTtcbn1cblxuY29uc3QgY29udmVydGVkTWV0YU1vZGVsTWFwOiBSZWNvcmQ8c3RyaW5nLCBDb252ZXJ0ZWRNZXRhZGF0YT4gPSB7fTtcbmNvbnN0IG1ldGFNb2RlbElETWFwOiBSZWNvcmQ8c3RyaW5nLCBTdHJpbmc+ID0ge307XG5jb25zdCBtZXRhTW9kZWxNYXA6IFdlYWtNYXA8U3RyaW5nLCBPRGF0YU1ldGFNb2RlbD4gPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgdmlydHVhbFByb3BlcnRpZXNNYXA6IFJlY29yZDxcblx0c3RyaW5nLFxuXHRSZWNvcmQ8c3RyaW5nLCAocGF0aDogc3RyaW5nLCBjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsIHJlbGF0aXZlUGF0aD86IHN0cmluZykgPT4gQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+PlxuPiA9IHt9O1xuXG4vKipcbiAqIENvbnZlcnQgdGhlIE9EYXRhTWV0YU1vZGVsIGludG8gYW5vdGhlciBmb3JtYXQgdGhhdCBhbGxvdyBmb3IgZWFzeSBtYW5pcHVsYXRpb24gb2YgdGhlIGFubm90YXRpb25zLlxuICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIE9EYXRhTWV0YU1vZGVsXG4gKiBAcGFyYW0gb0NhcGFiaWxpdGllcyBUaGUgY3VycmVudCBjYXBhYmlsaXRpZXNcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIG9iamVjdC1saWtlIGFubm90YXRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZXMob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIG9DYXBhYmlsaXRpZXM/OiBFbnZpcm9ubWVudENhcGFiaWxpdGllcyk6IENvbnZlcnRlZE1ldGFkYXRhIHtcblx0Y29uc3QgbWV0YU1vZGVsSUQgPSAob01ldGFNb2RlbCBhcyB7IGlkPzogc3RyaW5nIH0pLmlkITtcblx0aWYgKCFjb252ZXJ0ZWRNZXRhTW9kZWxNYXAuaGFzT3duUHJvcGVydHkobWV0YU1vZGVsSUQpKSB7XG5cdFx0Y29uc3QgcGFyc2VkT3V0cHV0ID0gcGFyc2VNZXRhTW9kZWwob01ldGFNb2RlbCwgb0NhcGFiaWxpdGllcyk7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnZlcnRlZE1ldGFNb2RlbE1hcFttZXRhTW9kZWxJRF0gPSBBbm5vdGF0aW9uQ29udmVydGVyLmNvbnZlcnQocGFyc2VkT3V0cHV0KTtcblx0XHRcdHZpcnR1YWxQcm9wZXJ0aWVzTWFwW21ldGFNb2RlbElEXSA9IHtcblx0XHRcdFx0Y3JpdGljYWxpdHk6IGdldFZpcnR1YWxDcml0aWNhbGl0eUV4cHJlc3Npb25cblx0XHRcdH07XG5cdFx0XHRjb25zdCBtZXRhTW9kZWxTeW1ib2wgPSBuZXcgU3RyaW5nKG1ldGFNb2RlbElEKTtcblx0XHRcdG1ldGFNb2RlbElETWFwW21ldGFNb2RlbElEXSA9IG1ldGFNb2RlbFN5bWJvbDtcblx0XHRcdG1ldGFNb2RlbE1hcC5zZXQobWV0YU1vZGVsU3ltYm9sLCBvTWV0YU1vZGVsKTtcblx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbnZlcnRlZE1ldGFNb2RlbE1hcFttZXRhTW9kZWxJRF07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0YU1vZGVsQnlJZChpZDogc3RyaW5nKTogT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzeW1ib2wgPSBtZXRhTW9kZWxJRE1hcFtpZF07XG5cdHJldHVybiBtZXRhTW9kZWxNYXAuZ2V0KHN5bWJvbCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udmVydGVkVHlwZXMob0NvbnRleHQ6IENvbnRleHQpOiBDb252ZXJ0ZWRNZXRhZGF0YSB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpIGFzIHVua25vd24gYXMgT0RhdGFNZXRhTW9kZWw7XG5cdGlmICghb01ldGFNb2RlbC5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcIikpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhIE9EYXRhTWV0YU1vZGVsXCIpO1xuXHR9XG5cdHJldHVybiBjb252ZXJ0VHlwZXMob01ldGFNb2RlbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVNb2RlbENhY2hlRGF0YShvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHZvaWQge1xuXHRpZiAob01ldGFNb2RlbCkge1xuXHRcdGRlbGV0ZSBjb252ZXJ0ZWRNZXRhTW9kZWxNYXBbKG9NZXRhTW9kZWwgYXMgdW5rbm93biBhcyB7IGlkOiBzdHJpbmcgfSkuaWRdO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCwgYkluY2x1ZGVWaXNpdGVkT2JqZWN0czogdHJ1ZSk6IHVuZGVmaW5lZCB8IFJlc29sdmVkVGFyZ2V0O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9NZXRhTW9kZWxDb250ZXh0OiBDb250ZXh0KTogdW5kZWZpbmVkIHwgU2VydmljZU9iamVjdCB8IEFjdGlvblBhcmFtZXRlciB8IFJlY29yZENvbXBsZXhUeXBlO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KFxuXHRvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCxcblx0YkluY2x1ZGVWaXNpdGVkT2JqZWN0cyA9IGZhbHNlXG4pOiB1bmRlZmluZWQgfCBTZXJ2aWNlT2JqZWN0IHwgQWN0aW9uUGFyYW1ldGVyIHwgUmVjb3JkQ29tcGxleFR5cGUgfCBSZXNvbHZlZFRhcmdldCB7XG5cdGNvbnN0IG9Db252ZXJ0ZWRNZXRhZGF0YSA9IGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0Y29uc3Qgc1BhdGggPSBvTWV0YU1vZGVsQ29udGV4dC5nZXRQYXRoKCk7XG5cblx0Y29uc3QgYVBhdGhTcGxpdCA9IHNQYXRoLnNwbGl0KFwiL1wiKTtcblx0bGV0IGZpcnN0UGFydCA9IGFQYXRoU3BsaXRbMV07XG5cdGxldCBiZWdpbkluZGV4ID0gMjtcblx0aWYgKG9Db252ZXJ0ZWRNZXRhZGF0YS5lbnRpdHlDb250YWluZXIuZnVsbHlRdWFsaWZpZWROYW1lID09PSBmaXJzdFBhcnQpIHtcblx0XHRmaXJzdFBhcnQgPSBhUGF0aFNwbGl0WzJdO1xuXHRcdGJlZ2luSW5kZXgrKztcblx0fVxuXHRsZXQgdGFyZ2V0RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gPSBvQ29udmVydGVkTWV0YWRhdGEuZW50aXR5U2V0cy5maW5kKFxuXHRcdChlbnRpdHlTZXQpID0+IGVudGl0eVNldC5uYW1lID09PSBmaXJzdFBhcnRcblx0KSBhcyBFbnRpdHlTZXQ7XG5cdGlmICghdGFyZ2V0RW50aXR5U2V0KSB7XG5cdFx0dGFyZ2V0RW50aXR5U2V0ID0gb0NvbnZlcnRlZE1ldGFkYXRhLnNpbmdsZXRvbnMuZmluZCgoc2luZ2xldG9uKSA9PiBzaW5nbGV0b24ubmFtZSA9PT0gZmlyc3RQYXJ0KSBhcyBTaW5nbGV0b247XG5cdH1cblx0bGV0IHJlbGF0aXZlUGF0aCA9IGFQYXRoU3BsaXQuc2xpY2UoYmVnaW5JbmRleCkuam9pbihcIi9cIik7XG5cblx0Y29uc3QgbG9jYWxPYmplY3RzOiBTZXJ2aWNlT2JqZWN0W10gPSBbdGFyZ2V0RW50aXR5U2V0XTtcblx0d2hpbGUgKHJlbGF0aXZlUGF0aCAmJiByZWxhdGl2ZVBhdGgubGVuZ3RoID4gMCAmJiByZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIpKSB7XG5cdFx0bGV0IHJlbGF0aXZlU3BsaXQgPSByZWxhdGl2ZVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBpZHggPSAwO1xuXHRcdGxldCBjdXJyZW50RW50aXR5U2V0LCBzTmF2UHJvcFRvQ2hlY2s7XG5cblx0XHRyZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVTcGxpdC5zbGljZSgxKTsgLy8gUmVtb3ZpbmcgXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiXG5cdFx0d2hpbGUgKCFjdXJyZW50RW50aXR5U2V0ICYmIHJlbGF0aXZlU3BsaXQubGVuZ3RoID4gaWR4KSB7XG5cdFx0XHRpZiAocmVsYXRpdmVTcGxpdFtpZHhdICE9PSBcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCIpIHtcblx0XHRcdFx0Ly8gRmluZGluZyB0aGUgY29ycmVjdCBlbnRpdHlTZXQgZm9yIHRoZSBuYXZpZ2FpdG9uIHByb3BlcnR5IGJpbmRpbmcgZXhhbXBsZTogXCJTZXQvX1NhbGVzT3JkZXJcIlxuXHRcdFx0XHRzTmF2UHJvcFRvQ2hlY2sgPSByZWxhdGl2ZVNwbGl0XG5cdFx0XHRcdFx0LnNsaWNlKDAsIGlkeCArIDEpXG5cdFx0XHRcdFx0LmpvaW4oXCIvXCIpXG5cdFx0XHRcdFx0LnJlcGxhY2UoXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIiwgXCJcIik7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSB0YXJnZXRFbnRpdHlTZXQgJiYgdGFyZ2V0RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbc05hdlByb3BUb0NoZWNrXTtcblx0XHRcdH1cblx0XHRcdGlkeCsrO1xuXHRcdH1cblx0XHRpZiAoIWN1cnJlbnRFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEZhbGwgYmFjayB0byBTaW5nbGUgbmF2IHByb3AgaWYgZW50aXR5U2V0IGlzIG5vdCBmb3VuZC5cblx0XHRcdHNOYXZQcm9wVG9DaGVjayA9IHJlbGF0aXZlU3BsaXRbMF07XG5cdFx0fVxuXHRcdGNvbnN0IGFOYXZQcm9wcyA9IHNOYXZQcm9wVG9DaGVjaz8uc3BsaXQoXCIvXCIpIHx8IFtdO1xuXHRcdGxldCB0YXJnZXRFbnRpdHlUeXBlID0gdGFyZ2V0RW50aXR5U2V0ICYmIHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRcdGZvciAoY29uc3Qgc05hdlByb3Agb2YgYU5hdlByb3BzKSB7XG5cdFx0XHQvLyBQdXNoaW5nIGFsbCBuYXYgcHJvcHMgdG8gdGhlIHZpc2l0ZWQgb2JqZWN0cy4gZXhhbXBsZTogXCJTZXRcIiwgXCJfU2FsZXNPcmRlclwiIGZvciBcIlNldC9fU2FsZXNPcmRlclwiKGluIE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcpXG5cdFx0XHRjb25zdCB0YXJnZXROYXZQcm9wID0gdGFyZ2V0RW50aXR5VHlwZSAmJiB0YXJnZXRFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSA9PT0gc05hdlByb3ApO1xuXHRcdFx0aWYgKHRhcmdldE5hdlByb3ApIHtcblx0XHRcdFx0bG9jYWxPYmplY3RzLnB1c2godGFyZ2V0TmF2UHJvcCk7XG5cdFx0XHRcdHRhcmdldEVudGl0eVR5cGUgPSB0YXJnZXROYXZQcm9wLnRhcmdldFR5cGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0dGFyZ2V0RW50aXR5U2V0ID1cblx0XHRcdCh0YXJnZXRFbnRpdHlTZXQgJiYgY3VycmVudEVudGl0eVNldCkgfHwgKHRhcmdldEVudGl0eVNldCAmJiB0YXJnZXRFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tyZWxhdGl2ZVNwbGl0WzBdXSk7XG5cdFx0aWYgKHRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0Ly8gUHVzaGluZyB0aGUgdGFyZ2V0IGVudGl0eVNldCB0byB2aXNpdGVkIG9iamVjdHNcblx0XHRcdGxvY2FsT2JqZWN0cy5wdXNoKHRhcmdldEVudGl0eVNldCk7XG5cdFx0fVxuXHRcdC8vIFJlLWNhbGN1bGF0aW5nIHRoZSByZWxhdGl2ZSBwYXRoXG5cdFx0Ly8gQXMgZWFjaCBuYXZpZ2F0aW9uIG5hbWUgaXMgZW5jbG9zZWQgYmV0d2VlbiAnJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnIGFuZCAnJCcgKHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBlbnRpdHlzZXQgZWFzaWx5IGluIHRoZSBtZXRhbW9kZWwpXG5cdFx0Ly8gd2UgbmVlZCB0byByZW1vdmUgdGhlIGNsb3NpbmcgJyQnIHRvIGJlIGFibGUgdG8gc3dpdGNoIHRvIHRoZSBuZXh0IG5hdmlnYXRpb25cblx0XHRyZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVTcGxpdC5zbGljZShhTmF2UHJvcHMubGVuZ3RoIHx8IDEpO1xuXHRcdGlmIChyZWxhdGl2ZVNwbGl0Lmxlbmd0aCAmJiByZWxhdGl2ZVNwbGl0WzBdID09PSBcIiRcIikge1xuXHRcdFx0cmVsYXRpdmVTcGxpdC5zaGlmdCgpO1xuXHRcdH1cblx0XHRyZWxhdGl2ZVBhdGggPSByZWxhdGl2ZVNwbGl0LmpvaW4oXCIvXCIpO1xuXHR9XG5cdGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIiRUeXBlXCIpKSB7XG5cdFx0Ly8gQXMgJFR5cGVAIGlzIGFsbG93ZWQgYXMgd2VsbFxuXHRcdGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIiRUeXBlQFwiKSkge1xuXHRcdFx0cmVsYXRpdmVQYXRoID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoXCIkVHlwZVwiLCBcIlwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2UncmUgYW55d2F5IGdvaW5nIHRvIGxvb2sgb24gdGhlIGVudGl0eVR5cGUuLi5cblx0XHRcdHJlbGF0aXZlUGF0aCA9IGFQYXRoU3BsaXQuc2xpY2UoMykuam9pbihcIi9cIik7XG5cdFx0fVxuXHR9XG5cdGlmICh0YXJnZXRFbnRpdHlTZXQgJiYgcmVsYXRpdmVQYXRoLmxlbmd0aCkge1xuXHRcdGNvbnN0IG9UYXJnZXQgPSB0YXJnZXRFbnRpdHlTZXQuZW50aXR5VHlwZS5yZXNvbHZlUGF0aChyZWxhdGl2ZVBhdGgsIGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpO1xuXHRcdGlmIChvVGFyZ2V0KSB7XG5cdFx0XHRpZiAoYkluY2x1ZGVWaXNpdGVkT2JqZWN0cykge1xuXHRcdFx0XHRvVGFyZ2V0LnZpc2l0ZWRPYmplY3RzID0gbG9jYWxPYmplY3RzLmNvbmNhdChvVGFyZ2V0LnZpc2l0ZWRPYmplY3RzKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlICYmIHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlLmFjdGlvbnMpIHtcblx0XHRcdC8vIGlmIHRhcmdldCBpcyBhbiBhY3Rpb24gb3IgYW4gYWN0aW9uIHBhcmFtZXRlclxuXHRcdFx0Y29uc3QgYWN0aW9ucyA9IHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlICYmIHRhcmdldEVudGl0eVNldC5lbnRpdHlUeXBlLmFjdGlvbnM7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVNwbGl0ID0gcmVsYXRpdmVQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGlmIChhY3Rpb25zW3JlbGF0aXZlU3BsaXRbMF1dKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbiA9IGFjdGlvbnNbcmVsYXRpdmVTcGxpdFswXV07XG5cdFx0XHRcdGlmIChyZWxhdGl2ZVNwbGl0WzFdICYmIGFjdGlvbi5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyTmFtZSA9IHJlbGF0aXZlU3BsaXRbMV07XG5cdFx0XHRcdFx0cmV0dXJuIGFjdGlvbi5wYXJhbWV0ZXJzLmZpbmQoKHBhcmFtZXRlcikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHBhcmFtZXRlci5mdWxseVF1YWxpZmllZE5hbWUuZW5kc1dpdGgoYC8ke3BhcmFtZXRlck5hbWV9YCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAocmVsYXRpdmVQYXRoLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9UYXJnZXQ7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGJJbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHRhcmdldDogdGFyZ2V0RW50aXR5U2V0LFxuXHRcdFx0XHR2aXNpdGVkT2JqZWN0czogbG9jYWxPYmplY3RzXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0RW50aXR5U2V0O1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIFJlc29sdmVkVGFyZ2V0PFQgZXh0ZW5kcyBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbiA9IFNlcnZpY2VPYmplY3Q+ID0ge1xuXHR0YXJnZXQ/OiBUIGV4dGVuZHMgU2VydmljZU9iamVjdCA/IFQgOiBBbm5vdGF0aW9uVGVybTxUPjtcblx0dmlzaXRlZE9iamVjdHM6IFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFQ+KG9NZXRhTW9kZWxDb250ZXh0OiBDb250ZXh0LCBvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dD86IENvbnRleHQpOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+IHtcblx0Y29uc3Qgb0NvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKG9NZXRhTW9kZWxDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRjb25zdCBtZXRhTW9kZWxDb250ZXh0ID0gY29udmVydE1ldGFNb2RlbENvbnRleHQob01ldGFNb2RlbENvbnRleHQsIHRydWUpIGFzIFJlc29sdmVkVGFyZ2V0O1xuXHRsZXQgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb247XG5cdGlmIChvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dCAmJiBvRW50aXR5U2V0TWV0YU1vZGVsQ29udGV4dC5nZXRQYXRoKCkgIT09IFwiL1wiKSB7XG5cdFx0dGFyZ2V0RW50aXR5U2V0TG9jYXRpb24gPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0VudGl0eVNldE1ldGFNb2RlbENvbnRleHQpO1xuXHR9XG5cdHJldHVybiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEZyb21QYXRoPFQ+KG1ldGFNb2RlbENvbnRleHQsIG9Db252ZXJ0ZWRNZXRhZGF0YSwgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RGcm9tUGF0aDxUPihcblx0bWV0YU1vZGVsQ29udGV4dDogUmVzb2x2ZWRUYXJnZXQsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0dGFyZ2V0RW50aXR5U2V0TG9jYXRpb24/OiBEYXRhTW9kZWxPYmplY3RDb250ZXh0LFxuXHRvbmx5U2VydmljZU9iamVjdHMgPSBmYWxzZVxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdHMgPSBtZXRhTW9kZWxDb250ZXh0LnZpc2l0ZWRPYmplY3RzLmZpbHRlcihcblx0XHQodmlzaXRlZE9iamVjdCkgPT4gaXNTZXJ2aWNlT2JqZWN0KHZpc2l0ZWRPYmplY3QpICYmICFpc0VudGl0eVR5cGUodmlzaXRlZE9iamVjdCkgJiYgIWlzRW50aXR5Q29udGFpbmVyKHZpc2l0ZWRPYmplY3QpXG5cdCk7XG5cdGlmIChcblx0XHRpc1NlcnZpY2VPYmplY3QobWV0YU1vZGVsQ29udGV4dC50YXJnZXQpICYmXG5cdFx0IWlzRW50aXR5VHlwZShtZXRhTW9kZWxDb250ZXh0LnRhcmdldCkgJiZcblx0XHRkYXRhTW9kZWxPYmplY3RzW2RhdGFNb2RlbE9iamVjdHMubGVuZ3RoIC0gMV0gIT09IG1ldGFNb2RlbENvbnRleHQudGFyZ2V0ICYmXG5cdFx0IW9ubHlTZXJ2aWNlT2JqZWN0c1xuXHQpIHtcblx0XHRkYXRhTW9kZWxPYmplY3RzLnB1c2gobWV0YU1vZGVsQ29udGV4dC50YXJnZXQpO1xuXHR9XG5cblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXM6IE5hdmlnYXRpb25Qcm9wZXJ0eVtdID0gW107XG5cdGNvbnN0IHJvb3RFbnRpdHlTZXQ6IEVudGl0eVNldCA9IGRhdGFNb2RlbE9iamVjdHNbMF0gYXMgRW50aXR5U2V0O1xuXG5cdGxldCBjdXJyZW50RW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQgPSByb290RW50aXR5U2V0O1xuXHRsZXQgY3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUgPSByb290RW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdGxldCBjdXJyZW50T2JqZWN0OiBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbiB8IHVuZGVmaW5lZDtcblx0bGV0IG5hdmlnYXRlZFBhdGggPSBbXTtcblxuXHRmb3IgKGxldCBpID0gMTsgaSA8IGRhdGFNb2RlbE9iamVjdHMubGVuZ3RoOyBpKyspIHtcblx0XHRjdXJyZW50T2JqZWN0ID0gZGF0YU1vZGVsT2JqZWN0c1tpXTtcblxuXHRcdGlmIChpc05hdmlnYXRpb25Qcm9wZXJ0eShjdXJyZW50T2JqZWN0KSkge1xuXHRcdFx0bmF2aWdhdGVkUGF0aC5wdXNoKGN1cnJlbnRPYmplY3QubmFtZSk7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKGN1cnJlbnRPYmplY3QpO1xuXHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBjdXJyZW50T2JqZWN0LnRhcmdldFR5cGU7XG5cdFx0XHRjb25zdCBib3VuZEVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkID0gY3VycmVudEVudGl0eVNldD8ubmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tuYXZpZ2F0ZWRQYXRoLmpvaW4oXCIvXCIpXTtcblx0XHRcdGlmIChib3VuZEVudGl0eVNldCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBib3VuZEVudGl0eVNldDtcblx0XHRcdFx0bmF2aWdhdGVkUGF0aCA9IFtdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaXNFbnRpdHlTZXQoY3VycmVudE9iamVjdCkgfHwgaXNTaW5nbGV0b24oY3VycmVudE9iamVjdCkpIHtcblx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBjdXJyZW50T2JqZWN0O1xuXHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBjdXJyZW50RW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdFx0fVxuXHR9XG5cblx0aWYgKG5hdmlnYXRlZFBhdGgubGVuZ3RoID4gMCkge1xuXHRcdC8vIFBhdGggd2l0aG91dCBOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIC0tPiBubyB0YXJnZXQgZW50aXR5IHNldFxuXHRcdGN1cnJlbnRFbnRpdHlTZXQgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAodGFyZ2V0RW50aXR5U2V0TG9jYXRpb24gJiYgdGFyZ2V0RW50aXR5U2V0TG9jYXRpb24uc3RhcnRpbmdFbnRpdHlTZXQgIT09IHJvb3RFbnRpdHlTZXQpIHtcblx0XHQvLyBJbiBjYXNlIHRoZSBlbnRpdHlzZXQgaXMgbm90IHN0YXJ0aW5nIGZyb20gdGhlIHNhbWUgbG9jYXRpb24gaXQgbWF5IG1lYW4gdGhhdCB3ZSBhcmUgZG9pbmcgdG9vIG11Y2ggd29yayBlYXJsaWVyIGZvciBzb21lIHJlYXNvblxuXHRcdC8vIEFzIHN1Y2ggd2UgbmVlZCB0byByZWRlZmluZSB0aGUgY29udGV4dCBzb3VyY2UgZm9yIHRoZSB0YXJnZXRFbnRpdHlTZXRMb2NhdGlvblxuXHRcdGNvbnN0IHN0YXJ0aW5nSW5kZXggPSBkYXRhTW9kZWxPYmplY3RzLmluZGV4T2YodGFyZ2V0RW50aXR5U2V0TG9jYXRpb24uc3RhcnRpbmdFbnRpdHlTZXQpO1xuXHRcdGlmIChzdGFydGluZ0luZGV4ICE9PSAtMSkge1xuXHRcdFx0Ly8gSWYgaXQncyBub3QgZm91bmQgSSBkb24ndCBrbm93IHdoYXQgd2UgY2FuIGRvIChwcm9iYWJseSBub3RoaW5nKVxuXHRcdFx0Y29uc3QgcmVxdWlyZWREYXRhTW9kZWxPYmplY3RzID0gZGF0YU1vZGVsT2JqZWN0cy5zbGljZSgwLCBzdGFydGluZ0luZGV4KTtcblx0XHRcdHRhcmdldEVudGl0eVNldExvY2F0aW9uLnN0YXJ0aW5nRW50aXR5U2V0ID0gcm9vdEVudGl0eVNldDtcblx0XHRcdHRhcmdldEVudGl0eVNldExvY2F0aW9uLm5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gcmVxdWlyZWREYXRhTW9kZWxPYmplY3RzXG5cdFx0XHRcdC5maWx0ZXIoaXNOYXZpZ2F0aW9uUHJvcGVydHkpXG5cdFx0XHRcdC5jb25jYXQodGFyZ2V0RW50aXR5U2V0TG9jYXRpb24ubmF2aWdhdGlvblByb3BlcnRpZXMgYXMgTmF2aWdhdGlvblByb3BlcnR5W10pO1xuXHRcdH1cblx0fVxuXHRjb25zdCBvdXREYXRhTW9kZWxQYXRoID0ge1xuXHRcdHN0YXJ0aW5nRW50aXR5U2V0OiByb290RW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVNldDogY3VycmVudEVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBjdXJyZW50RW50aXR5VHlwZSxcblx0XHR0YXJnZXRPYmplY3Q6IG1ldGFNb2RlbENvbnRleHQudGFyZ2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLFxuXHRcdGNvbnRleHRMb2NhdGlvbjogdGFyZ2V0RW50aXR5U2V0TG9jYXRpb24sXG5cdFx0Y29udmVydGVkVHlwZXM6IGNvbnZlcnRlZFR5cGVzXG5cdH07XG5cdGlmICghaXNTZXJ2aWNlT2JqZWN0KG91dERhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0KSAmJiBvbmx5U2VydmljZU9iamVjdHMpIHtcblx0XHRvdXREYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCA9IGlzU2VydmljZU9iamVjdChjdXJyZW50T2JqZWN0KSA/IGN1cnJlbnRPYmplY3QgOiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKCFvdXREYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbikge1xuXHRcdG91dERhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uID0gb3V0RGF0YU1vZGVsUGF0aDtcblx0fVxuXHRyZXR1cm4gb3V0RGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZmV0Y2hlcyB0aGUgdGVjaG5pY2FsIGFuZCBzZW1hbnRpYyBrZXlzIG9mIGVudGl0eSBzZXRzLlxuICogQHBhcmFtIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBvYmplY3QgY29udGFpbmluZyB0ZWNobmljYWwgYW5kIHNlbWFudGljIGtleXMgb2YgdGhlIGVudGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RW50aXR5S2V5cyhjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHtcblx0dGVjaG5pY2FsS2V5czogc3RyaW5nW107XG5cdHNlbWFudGljS2V5czogc3RyaW5nW107XG59IHtcblx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dD8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCk7XG5cdGlmIChtZXRhTW9kZWwpIHtcblx0XHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChjb250ZXh0Py5nZXRQYXRoKCkpO1xuXHRcdGNvbnN0IGRhdGFNb2RlbCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobWV0YVBhdGgpKTtcblx0XHRjb25zdCByb290U2VtYW50aWNLZXlzID0gZGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnMuQ29tbW9uPy5TZW1hbnRpY0tleTtcblx0XHRsZXQgc2VtYW50aWNLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGlmIChyb290U2VtYW50aWNLZXlzKSB7XG5cdFx0XHRzZW1hbnRpY0tleXMgPSByb290U2VtYW50aWNLZXlzLm1hcCgoa2V5KSA9PiB7XG5cdFx0XHRcdHJldHVybiBrZXkudmFsdWU7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3Qgcm9vdFRlY2huaWNhbEtleXMgPSBkYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZS5rZXlzO1xuXHRcdGxldCB0ZWNobmljYWxLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGlmIChyb290VGVjaG5pY2FsS2V5cykge1xuXHRcdFx0dGVjaG5pY2FsS2V5cyA9IHJvb3RUZWNobmljYWxLZXlzLm1hcCgoa2V5KSA9PiB7XG5cdFx0XHRcdHJldHVybiBrZXkubmFtZTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXMsXG5cdFx0XHR0ZWNobmljYWxLZXlzOiB0ZWNobmljYWxLZXlzXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4geyB0ZWNobmljYWxLZXlzOiBbXSwgc2VtYW50aWNLZXlzOiBbXSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE1vZGVsQW5kUGF0aDxUIGV4dGVuZHMgc3RyaW5nIHwgdW5kZWZpbmVkPihtZXRhUGF0aDogVCk6IHsgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDsgcGF0aDogVCB9IHtcblx0aWYgKG1ldGFQYXRoPy5pbmNsdWRlcyhcIj5cIikpIHtcblx0XHRjb25zdCBbbW9kZWxJZCwgLi4ucGF0aF0gPSBtZXRhUGF0aC5zcGxpdChcIj5cIik7XG5cdFx0Y29uc3QgdGFyZ2V0UGF0aCA9IHBhdGguam9pbihcIj5cIik7XG5cdFx0cmV0dXJuIHsgaWQ6IG1vZGVsSWQsIHBhdGg6IHRhcmdldFBhdGggYXMgVCB9O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7IGlkOiB1bmRlZmluZWQsIHBhdGg6IG1ldGFQYXRoIH07XG5cdH1cbn1cblxuLyoqXG4gKiBGZXRjaGVzIHRoZSBEYXRhTW9kZWwgT2JqZWN0IFBhdGggZm9yIGEgZ2l2ZW4gdGFyZ2V0IHBhdGguXG4gKiBAcGFyYW0gdGFyZ2V0UGF0aFxuICogQHBhcmFtIG1ldGFNb2RlbFxuICogQHJldHVybnMgRGF0YU1vZGVsIE9iamVjdCBQYXRoIGZvciB0YXJnZXQgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aDxUPihcblx0dGFyZ2V0UGF0aDogc3RyaW5nLFxuXHRtZXRhTW9kZWw/OiBPRGF0YU1ldGFNb2RlbFxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1ldGFQYXRoID0gbWV0YU1vZGVsPy5nZXRNZXRhUGF0aCh0YXJnZXRQYXRoKTtcblx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhUGF0aCA/IG1ldGFNb2RlbD8uZ2V0Q29udGV4dChtZXRhUGF0aCkgOiB1bmRlZmluZWQ7XG5cdHJldHVybiBtZXRhQ29udGV4dCAmJiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiBhICB2aXJ0dWFsIHBhdGguXG4gKiBAcGFyYW0gcGF0aCBUaGUgdmlydHVhbCBwYXRoXG4gKiBAcGFyYW0gY29udmVydGVkVHlwZXMgVGhlIGNvbnZlcnRlZCBtZXRhZGF0YVxuICogQHJldHVybnMgRGF0YU1vZGVsIE9iamVjdCBQYXRoIGZvciB0YXJnZXQgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlydHVhbEJpbmRpbmdFeHByZXNzaW9uKHBhdGg6IHN0cmluZywgY29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0Y29uc3QgdmlydHVhbEtleSA9IFwiQCR1aTUuZmUudmlydHVhbC5cIjtcblx0aWYgKHBhdGguaW5jbHVkZXModmlydHVhbEtleSkpIHtcblx0XHRjb25zdCBpZCA9IE9iamVjdC5rZXlzKGNvbnZlcnRlZE1ldGFNb2RlbE1hcCkuZmluZCgoaWQpID0+IGNvbnZlcnRlZE1ldGFNb2RlbE1hcFtpZF0gPT09IGNvbnZlcnRlZFR5cGVzKTtcblx0XHRpZiAoaWQgJiYgdmlydHVhbFByb3BlcnRpZXNNYXBbaWRdKSB7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmluZGV4T2YoY29udmVydGVkVHlwZXMubmFtZXNwYWNlKSk7XG5cdFx0XHRjb25zdCBwYXRoSW5mb3MgPSBwYXRoLnNwbGl0KHZpcnR1YWxLZXkpO1xuXHRcdFx0aWYgKHBhdGhJbmZvcy5sZW5ndGggPT09IDIpIHtcblx0XHRcdFx0Y29uc3QgbWV0aG9kID0gcGF0aEluZm9zWzFdO1xuXHRcdFx0XHRjb25zdCB2aXJ0dWFsUHJvcGVydHkgPSBwYXRoSW5mb3NbMF0ucmVwbGFjZShyZWxhdGl2ZVBhdGgsIFwiXCIpO1xuXHRcdFx0XHRpZiAodmlydHVhbFByb3BlcnRpZXNNYXBbaWRdW21ldGhvZF0pIHtcblx0XHRcdFx0XHRyZXR1cm4gdmlydHVhbFByb3BlcnRpZXNNYXBbaWRdW21ldGhvZF0odmlydHVhbFByb3BlcnR5LCBjb252ZXJ0ZWRUeXBlcywgcmVsYXRpdmVQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY29uc3RhbnQodW5kZWZpbmVkKTtcblx0fVxuXHRyZXR1cm4gY29uc3RhbnQodW5kZWZpbmVkKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb2YgYSBjcml0aWNhbGl0eS5cbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHBvaW50aW5nIHRvIGEgRGF0YUZpZWxkIG9yIERhdGFQb2ludFxuICogQHBhcmFtIGNvbnZlcnRlZFR5cGVzIFRoZSBjb252ZXJ0ZWQgbWV0YWRhdGFcbiAqIEBwYXJhbSByZWxhdGl2ZVBhdGggVGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgY3JpdGljYWxpdHlcbiAqL1xuZnVuY3Rpb24gZ2V0VmlydHVhbENyaXRpY2FsaXR5RXhwcmVzc2lvbihcblx0cGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHJlbGF0aXZlUGF0aD86IHN0cmluZ1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0Y29uc3QgY3JpdGljYWxpdHlQcm9wZXJ0eSA9IGNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoPERhdGFQb2ludFR5cGUgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihwYXRoKT8udGFyZ2V0Py5Dcml0aWNhbGl0eTtcblx0Y29uc3QgY3JpdGljYWxpdHlFeHByZXNzaW9uID0gY3JpdGljYWxpdHlQcm9wZXJ0eVxuXHRcdD8gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5IGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8UHJpbWl0aXZlVHlwZT4sXG5cdFx0XHRcdFtdLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdChiaW5kaW5nUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlbGF0aXZlUGF0aCA/IGAke3JlbGF0aXZlUGF0aH0ke2JpbmRpbmdQYXRofWAgOiBiaW5kaW5nUGF0aDtcblx0XHRcdFx0fVxuXHRcdCAgKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRpZiAoIWNyaXRpY2FsaXR5RXhwcmVzc2lvbikge1xuXHRcdHJldHVybiBjb25zdGFudCh1bmRlZmluZWQpO1xuXHR9XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2NyaXRpY2FsaXR5RXhwcmVzc2lvbl0sIFwic2FwLmZlLmNvcmUuZm9ybWF0dGVycy5Dcml0aWNhbGl0eUZvcm1hdHRlciNnZXRDcml0aWNhbGl0eVwiKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtJQSxTQUFTQSxrQkFBa0JBLENBQzFCQyxnQkFBcUMsRUFDckNDLFdBQW1CLEVBQ25CQyxhQUFxQixFQUNyQkMsZ0JB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QUNtQixjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDckRQLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDUCxJQUFJLEdBQUcsSUFBSTtRQUN2QyxDQUFDLE1BQU0sSUFBSU4sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNtQixjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDckRQLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDUCxJQUFJLEdBQUcsSUFBSTtRQUN2QyxDQUFDLE1BQU0sSUFBSU4sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNtQixjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7VUFDdERQLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDUCxJQUFJLEdBQUcsS0FBSztRQUN4QyxDQUFDLE1BQU0sSUFBSU4sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNtQixjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDckRQLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDUCxJQUFJLEdBQUcsSUFBSTtRQUN2QyxDQUFDLE1BQU0sSUFBSU4sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNtQixjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDckRQLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDUCxJQUFJLEdBQUcsSUFBSTtRQUN2QyxDQUFDLE1BQU0sSUFBSU4sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNtQixjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDckRQLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDUCxJQUFJLEdBQUcsSUFBSTtRQUN2QyxDQUFDLE1BQU0sSUFBSU4sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNtQixjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7VUFDckRQLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDUCxJQUFJLEdBQUcsSUFBSTtRQUN2QyxDQUFDLE1BQU0sSUFBSU4sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNtQixjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7VUFDeERQLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDUCxJ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
|