@sapui5/sap.fe.core 1.114.2 → 1.114.4
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/controllerextensions/EditFlow-dbg.js +28 -9
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +29 -11
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.ts +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter-dbg.js +14 -1
- package/src/sap/fe/core/formatters/StandardFormatter.js +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter.ts +13 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/library-dbg.js +1 -1
- package/src/sap/fe/core/library-preload.js +6 -6
- package/src/sap/fe/core/library-preload.js.map +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/manifest.json +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +3 -2
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +2 -1
|
@@ -2701,4 +2701,4 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
|
|
|
2701
2701
|
updateTableVisualizationForType
|
|
2702
2702
|
};
|
|
2703
2703
|
}, false);
|
|
2704
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5UeXBlIiwiZ2V0VGFibGVBY3Rpb25zIiwibGluZUl0ZW1Bbm5vdGF0aW9uIiwidmlzdWFsaXphdGlvblBhdGgiLCJjb252ZXJ0ZXJDb250ZXh0IiwibmF2aWdhdGlvblNldHRpbmdzIiwiYVRhYmxlQWN0aW9ucyIsImdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMiLCJhQW5ub3RhdGlvbkFjdGlvbnMiLCJ0YWJsZUFjdGlvbnMiLCJhSGlkZGVuQWN0aW9ucyIsImhpZGRlblRhYmxlQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImFjdGlvbk92ZXJ3cml0ZUNvbmZpZyIsImlzTmF2aWdhYmxlIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlT25TZWxlY3QiLCJlbmFibGVBdXRvU2Nyb2xsIiwiZW5hYmxlZCIsInZpc2libGUiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJjb21tYW5kIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJjb21tYW5kQWN0aW9ucyIsImdldFRhYmxlQ29sdW1ucyIsImlzSW5zaWdodHNFbmFibGVkIiwiYW5ub3RhdGlvbkNvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zIiwibWFuaWZlc3RDb2x1bW5zIiwiZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdCIsImNvbHVtbnMiLCJnZXRBbm5vdGF0aW9uRW50aXR5VHlwZSIsIndpZHRoIiwiaW1wb3J0YW5jZSIsImhvcml6b250YWxBbGlnbiIsImF2YWlsYWJpbGl0eSIsInNldHRpbmdzIiwiZm9ybWF0T3B0aW9ucyIsImdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwidGFibGVDb2x1bW5zIiwiYWdncmVnYXRpb25IZWxwZXIiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImZpbmRDb2x1bW5Gcm9tUGF0aCIsInBhdGgiLCJmaW5kIiwiY29sdW1uIiwiYW5ub3RhdGlvbkNvbHVtbiIsInByb3BlcnR5SW5mb3MiLCJ1bmRlZmluZWQiLCJyZWxhdGl2ZVBhdGgiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImN1cnJlbmN5T3JVbml0UHJvcGVydGllcyIsIlNldCIsImZvckVhY2giLCJ0YWJsZUNvbHVtbiIsInVuaXQiLCJhZGQiLCJjdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiZGVmaW5pdGlvbnMiLCJhbm5vdGF0aW9uIiwiYWdncmVnYXRlZFByb3BlcnR5IiwiX2VudGl0eVR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJuYW1lIiwicXVhbGlmaWVyIiwiY29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwibWFwIiwiY3R4RGVmUHJvcGVydHkiLCJ2YWx1ZSIsInJlc3VsdCIsInJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJoYXMiLCJkZWZhdWx0QWdncmVnYXRlIiwiY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lIiwiZm91bmRDb2x1bW4iLCJwdXNoIiwibGVuZ3RoIiwidXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZSIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsInR5cGUiLCJhZ2dyZWdhdGVzRGVmaW5pdGlvbnMiLCJlbmFibGVBbmFseXRpY3MiLCJlbmFibGUkc2VsZWN0IiwiZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0IiwiYWdncmVnYXRlcyIsIl91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyIsImFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZW5hYmxlQmFzaWNTZWFyY2giLCJpbmRleE9mIiwiZ3JvdXBDb25kaXRpb25zIiwiZ2V0R3JvdXBDb25kaXRpb25zIiwiYWdncmVnYXRlQ29uZGl0aW9ucyIsImdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJpbmNsdWRlcyIsImdldE5hdmlnYXRpb25UYXJnZXRQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uIiwibmF2Q29uZmlnIiwiT2JqZWN0Iiwia2V5cyIsImRhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsIm5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoIiwidGFyZ2V0RW50aXR5U2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzIiwiZmluZENvbHVtbkJ5UGF0aCIsIm9Db2x1bW4iLCJvVGFibGVDb2x1bW4iLCJvUHJvcGVydHkiLCJvUHJvcCIsIm9Vbml0IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5Iiwib1RpbWV6b25lIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkiLCJzVGltZXpvbmUiLCJDb21tb24iLCJUaW1lem9uZSIsIm9Vbml0Q29sdW1uIiwic1VuaXQiLCJNZWFzdXJlcyIsIklTT0N1cnJlbmN5IiwiVW5pdCIsInVuaXRUZXh0Iiwib1RpbWV6b25lQ29sdW1uIiwidGltZXpvbmUiLCJ0aW1lem9uZVRleHQiLCJ0b1N0cmluZyIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJ0ZXh0QW5ub3RhdGlvbiIsIlRleHQiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIm9UZXh0Q29sdW1uIiwidGV4dEFycmFuZ2VtZW50IiwidGV4dFByb3BlcnR5IiwibW9kZSIsImdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyIsImhlYWRlckluZm9UaXRsZVBhdGgiLCJVSSIsIkhlYWRlckluZm8iLCJUaXRsZSIsIlZhbHVlIiwic2VtYW50aWNLZXlBbm5vdGF0aW9ucyIsIlNlbWFudGljS2V5IiwiaGVhZGVySW5mb1R5cGVOYW1lIiwiVHlwZU5hbWUiLCJzZW1hbnRpY0tleUNvbHVtbnMiLCJjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50Iiwidmlld0NvbmZpZ3VyYXRpb24iLCJ0YWJsZU1hbmlmZXN0Q29uZmlnIiwiZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJzcGxpdFBhdGgiLCJuYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsInNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZSIsIm9WaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsImdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24iLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiSlNPTiIsInN0cmluZ2lmeSIsIm9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiaGVhZGVySW5mb1RpdGxlIiwic2VtYW50aWNLZXlzIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImlzQmxhbmtUYWJsZSIsImdldENvbHVtbnNGcm9tRW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJBY3Rpb25IZWxwZXIiLCJnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aCIsInJlc3RyaWN0aW9ucyIsImdldFJlc3RyaWN0aW9ucyIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsInVwZGF0YWJsZSIsImlzVXBkYXRhYmxlIiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsImlzQ29uc3RhbnQiLCJleHByZXNzaW9uIiwibmF2aWdhdGlvbkV4cHJlc3Npb24iLCJfdHlwZSIsInVwZGF0YWJsZUV4cHJlc3Npb24iLCJDYXBhYmlsaXRpZXMiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0aWVzIiwiYWN0aW9uTmFtZSIsInByb3BlcnR5TmFtZSIsInNpemUiLCJ0aXRsZVByb3BlcnR5IiwiQXJyYXkiLCJmcm9tIiwiam9pbiIsImdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJjdXJyZW50RW50aXR5VHlwZSIsImNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNFbnRpdHlTZXQiLCJhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCIkVHlwZSIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJzb3VyY2VFbnRpdHlUeXBlIiwiUmVxdWlyZXNDb250ZXh0IiwiSW5saW5lIiwidmFsdWVPZiIsIkhpZGRlbiIsImVxdWFsIiwiZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbCIsImdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbiIsInNvdXJjZSIsImNvbnN0YW50Iiwic3Vic3RyaW5nIiwic3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5Iiwic3BsaXQiLCJuYXZpZ2F0aW9uUGF0aCIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwidGFyZ2V0T2JqZWN0IiwicGFydG5lciIsInBhdGhJbk1vZGVsIiwic2xpY2UiLCJ1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0IiwiZGF0YUZpZWxkSWQiLCJzb21lIiwiYWN0aW9uS2V5IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwibWFuaWZlc3RBY3Rpb25JZCIsImdlbmVyYXRlIiwiQWN0aW9uIiwiU2VtYW50aWNPYmplY3QiLCJoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhciIsImFjdGlvbiIsImdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dCIsImFWaXNpYmxlUGF0aEV4cHJlc3Npb25zIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24iLCJpc0RlbGV0YWJsZSIsImlzUGF0aERlbGV0YWJsZSIsImlzUGF0aFVwZGF0YWJsZSIsImdldFNlbGVjdGlvbk1vZGUiLCJ0YXJnZXRDYXBhYmlsaXRpZXMiLCJkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24iLCJTZWxlY3Rpb25Nb2RlIiwiTm9uZSIsInRhYmxlTWFuaWZlc3RTZXR0aW5ncyIsInNlbGVjdGlvbk1vZGUiLCJ0YWJsZVNldHRpbmdzIiwiYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucyIsImFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zIiwiaXNQYXJlbnREZWxldGFibGUiLCJwYXJlbnRFbnRpdHlTZXREZWxldGFibGUiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJPYmplY3RQYWdlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJiTWFzc0VkaXRFbmFibGVkIiwiaWZFbHNlIiwiYW5kIiwiSXNFZGl0YWJsZSIsIk11bHRpIiwiQXV0byIsIlNpbmdsZSIsImJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwib3IiLCJlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiY29uY2F0IiwiY29weURhdGFGaWVsZCIsImdldENvcHlBY3Rpb24iLCJmaWx0ZXIiLCJkYXRhRmllbGRJc0NvcHlBY3Rpb24iLCJzRW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIkFjdGlvblR5cGUiLCJDb3B5IiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwia2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwibm90IiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbiIsInRleHQiLCJMYWJlbCIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJnZXRUZXh0IiwiRGVmYXVsdCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJEZXRlcm1pbmluZyIsInVzZUVuYWJsZWRFeHByZXNzaW9uIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwic291cmNlVHlwZSIsInBhcmFtZXRlcnMiLCJpc0NvbGxlY3Rpb24iLCJ0YWJsZUFjdGlvbiIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0SGlnaGxpZ2h0Um93QmluZGluZyIsImNyaXRpY2FsaXR5QW5ub3RhdGlvbiIsImlzRHJhZnRSb290T3JOb2RlIiwidGFyZ2V0RW50aXR5VHlwZSIsImRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uIiwiTWVzc2FnZVR5cGUiLCJnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUiLCJhTWlzc2luZ0tleXMiLCJmb3JtYXRSZXN1bHQiLCJFbnRpdHkiLCJIYXNBY3RpdmUiLCJJc0FjdGl2ZSIsInRhYmxlRm9ybWF0dGVycyIsInJvd0hpZ2hsaWdodGluZyIsIl9nZXRDcmVhdGlvbkJlaGF2aW91ciIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwibmF2aWdhdGlvbiIsImNyZWF0ZSIsImRldGFpbCIsIm9yaWdpbmFsVGFibGVTZXR0aW5ncyIsIm91dGJvdW5kIiwib3V0Ym91bmREZXRhaWwiLCJuZXdBY3Rpb24iLCJ0YXJnZXRBbm5vdGF0aW9ucyIsInRhcmdldEFubm90YXRpb25zQ29tbW9uIiwidGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uIiwiU2Vzc2lvbiIsIkRyYWZ0Um9vdCIsIk5ld0FjdGlvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJjcmVhdGlvbk1vZGUiLCJDcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsIkVycm9yIiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJOZXdQYWdlIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJ0YWJsZVR5cGUiLCJwcmVzc1Byb3BlcnR5IiwibmF2aWdhdGlvblRhcmdldCIsImNyaXRpY2FsaXR5UHJvcGVydHkiLCJkaXNwbGF5IiwidGFyZ2V0IiwiQ3JpdGljYWxpdHkiLCJNb2RlbEhlbHBlciIsImdldERyYWZ0Um9vdCIsImdldERyYWZ0Tm9kZSIsInJvd05hdmlnYXRlZEV4cHJlc3Npb24iLCJuYXZpZ2F0ZWRSb3ciLCJwcmVzcyIsInJvd05hdmlnYXRlZCIsIklzSW5hY3RpdmUiLCJjb2x1bW5zVG9CZUNyZWF0ZWQiLCJub25Tb3J0YWJsZUNvbHVtbnMiLCJ0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24iLCJleGlzdHMiLCJ0YXJnZXRUeXBlIiwicmVsYXRlZFByb3BlcnRpZXNJbmZvIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzIiwicmVsYXRlZFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydHlOYW1lcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwidGV4dE9ubHlQcm9wZXJ0aWVzRnJvbVRleHRBbm5vdGF0aW9uIiwiY29sdW1uSW5mbyIsImdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkiLCJleHBvcnRTZXR0aW5ncyIsInRlbXBsYXRlIiwiZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSIsIndyYXAiLCJleHBvcnRTZXR0aW5nc1dyYXBwaW5nIiwiX2dldEV4cG9ydERhdGFUeXBlIiwiZXhwb3J0VW5pdE5hbWUiLCJ1bml0UHJvcGVydHkiLCJleHBvcnRVbml0U3RyaW5nIiwiZXhwb3J0VGltZXpvbmVOYW1lIiwidGltZXpvbmVQcm9wZXJ0eSIsInV0YyIsImV4cG9ydFRpbWV6b25lU3RyaW5nIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJ1cGRhdGVQcm9wZXJ0eUxhYmVsIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3MiLCJyZWxhdGVkQ29sdW1ucyIsIl9jcmVhdGVSZWxhdGVkQ29sdW1ucyIsImZ1bGxQcm9wZXJ0eVBhdGgiLCJ1c2VEYXRhRmllbGRQcmVmaXgiLCJhdmFpbGFibGVGb3JBZGFwdGF0aW9uIiwicmVwbGFjZVNwZWNpYWxDaGFycyIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgiLCJnZXRTZW1hbnRpY09iamVjdFBhdGgiLCJpc0hpZGRlbiIsImdyb3VwUGF0aCIsIl9zbGljZUF0U2xhc2giLCJpc0dyb3VwIiwibGFiZWwiLCJnZXRMYWJlbCIsImV4cG9ydFR5cGUiLCJzRGF0ZUlucHV0Rm9ybWF0IiwiZGF0YVR5cGUiLCJnZXREYXRhRmllbGREYXRhVHlwZSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsImlzQVByb3BlcnR5RnJvbVRleHRPbmx5QW5ub3RhdGlvbiIsInNvcnRhYmxlIiwidHlwZUNvbmZpZyIsImNsYXNzTmFtZSIsImNvbnN0cmFpbnRzIiwiX2lzRXhwb3J0YWJsZUNvbHVtbiIsImlucHV0Rm9ybWF0Iiwic2NhbGUiLCJkZWxpbWl0ZXIiLCJjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMiLCJfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzIiwiQW5ub3RhdGlvbiIsImdyb3VwTGFiZWwiLCJncm91cCIsInNlbWFudGljT2JqZWN0UGF0aCIsImlzR3JvdXBhYmxlIiwiaXNQcm9wZXJ0eUdyb3VwYWJsZSIsImlzS2V5IiwiY2FzZVNlbnNpdGl2ZSIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsImdldEltcG9ydGFuY2UiLCJEYXRhRmllbGREZWZhdWx0IiwiYWRkaXRpb25hbExhYmVscyIsInNUb29sdGlwIiwiX2dldFRvb2x0aXAiLCJ0b29sdGlwIiwidGFyZ2V0VmFsdWVmcm9tRFAiLCJnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50IiwiaXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdCIsImxpbmtlZEFubm90YXRpb25Db2x1bW5zIiwiY29sIiwicHJvcGVydHlUeXBlIiwiZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5IiwiaXNQcm9wZXJ0eSIsImlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIiwiVGFyZ2V0IiwiJHRhcmdldCIsIk1lZGlhVHlwZSIsInRlcm0iLCJpc1VSTCIsIl9pc1ZhbGlkQ29sdW1uIiwiX2dldFZpc2libGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkTW9kZWxQYXRoIiwicHJvcGVydHlWYWx1ZSIsImlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQiLCJpc0FuYWx5dGljYWxMZWFmIiwiX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImRhdGFGaWVsZEdyb3VwIiwiZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiRGF0YSIsImlubmVyRGF0YUZpZWxkIiwiZGF0YUZpZWxkRGVmYXVsdCIsImlzRGF0YUZpZWxkVHlwZXMiLCJRdWlja0luZm8iLCJkYXRhcG9pbnRUYXJnZXQiLCJnZXRSb3dTdGF0dXNWaXNpYmlsaXR5IiwiY29sTmFtZSIsImlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXAiLCJnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyIiwiZXhpc3RpbmdDb2x1bW5zIiwicmVsYXRlZFByb3BlcnR5TmFtZU1hcCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJyZWxhdGVkQ29sdW1uIiwiaXNQYXJ0T2ZMaW5lSXRlbSIsImV4aXN0aW5nQ29sdW1uIiwibmV3TmFtZSIsInByb3BlcnR5SW5mbyIsIl9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZSIsImNyZWF0ZVRlY2huaWNhbFByb3BlcnR5IiwicmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXAiLCJjb2x1bW5FeGlzdHMiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJ0ZWNobmljYWxDb2x1bW4iLCJhZ2dyZWdhdGFibGUiLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsInRlY2huaWNhbGx5QWdncmVnYXRhYmxlIiwiX2dldFNob3dEYXRhRmllbGRzTGFiZWwiLCJmaWVsZEdyb3VwTmFtZSIsIm9Db2x1bW5zIiwiYUNvbHVtbktleXMiLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwiX2dldFJlbGF0aXZlUGF0aCIsImlzTGFzdFNsYXNoIiwiaXNMYXN0UGFydCIsImlTbGFzaEluZGV4IiwibGFzdEluZGV4T2YiLCJfaXNDb2x1bW5NdWx0aVZhbHVlZCIsInByb3BlcnR5T2JqZWN0UGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJfaXNDb2x1bW5Tb3J0YWJsZSIsInByb3BlcnR5UGF0aCIsImZpbHRlckZ1bmN0aW9ucyIsIl9nZXRGaWx0ZXJGdW5jdGlvbnMiLCJpc0FycmF5IiwiQ29udmVydGVyQ29udGV4dCIsIlR5cGVHdWFyZHMiLCJGaWx0ZXJGdW5jdGlvbnMiLCJnZXRFbnRpdHlDb250YWluZXIiLCJfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSIsInRleHRMaW5lc0VkaXQiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzIiwiYVNlbWFudGljS2V5VmFsdWVzIiwiYlNlbWFudGljS2V5Rm91bmQiLCJpIiwidmFsdWVzIiwic2VtYW50aWNLZXlGb3VuZCIsIl9maW5kUHJvcGVydGllcyIsInNlbWFudGljS2V5VmFsdWVzIiwiZmllbGRHcm91cFByb3BlcnRpZXMiLCJzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwIiwic1Byb3BlcnR5UGF0aCIsInRtcCIsImZpZWxkR3JvdXBQcm9wZXJ0eVBhdGgiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwIiwiYVByb3BlcnRpZXMiLCJfcHJvcGVydGllc0ZvdW5kIiwiZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uIiwiaXNGaWVsZEdyb3VwQ29sdW1uIiwic2VtYW50aWNLZXkiLCJzZW1hbnRpY0tleUluRmllbGRHcm91cCIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsInNob3dFcnJvck9iamVjdFN0YXR1cyIsImhhc0RyYWZ0SW5kaWNhdG9yIiwiX2dldEltcE51bWJlciIsIkltcG9ydGFuY2UiLCJfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZSIsIl9nZXRNYXhJbXBvcnRhbmNlIiwiZmllbGRzIiwibWF4SW1wTnVtYmVyIiwiaW1wTnVtYmVyIiwiRGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2UiLCJmaWVsZCIsImZpZWxkc1dpdGhJbXBvcnRhbmNlIiwibWFwU2VtYW50aWNLZXlzIiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiZGF0YUZpZWxkVGFyZ2V0IiwiZmllbGRHcm91cERhdGEiLCJmaWVsZEdyb3VwSGFzU2VtYW50aWNLZXkiLCJmaWVsZEdyb3VwRGF0YUZpZWxkIiwiSGlnaCIsIml0ZW0iLCJjaGVja0lmQ29sdW1uSXNTdXBwb3J0ZWRGb3JJbnNpZ2h0cyIsInNMYWJlbCIsImlzTXVsdGlWYWx1ZSIsImlzSW1hZ2VDb2x1bW4iLCJpc0ltYWdlVVJMIiwiZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zIiwidGFibGVDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldFRhcmdldE9iamVjdFBhdGgiLCJsaW5lSXRlbSIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5IiwidmlzdWFsU2V0dGluZ3MiLCJ3aWR0aENhbGN1bGF0aW9uIiwiZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHMiLCJGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJIVE1MNSIsIkNzc0RlZmF1bHRzIiwiaXNJbnNpZ2h0c1N1cHBvcnRlZCIsInJlbGF0ZWRQcm9wZXJ0eU5hbWUiLCJhZGRpdGlvbmFsUHJvcGVydHlOYW1lIiwiX2dldFByb3BlcnR5TmFtZXMiLCJtYXRjaGVkUHJvcGVydGllcyIsInJlc29sdmVQYXRoIiwiX2FwcGVuZEN1c3RvbVRlbXBsYXRlIiwiaW50ZXJuYWxDb2x1bW5zIiwiaXNBbm5vdGF0aW9uQ29sdW1uIiwiaXNTbG90Q29sdW1uIiwibWFuaWZlc3RDb2x1bW4iLCJTbG90IiwiaXNDdXN0b21Db2x1bW4iLCJfdXBkYXRlTGlua2VkUHJvcGVydGllc09uQ3VzdG9tQ29sdW1ucyIsImFubm90YXRpb25UYWJsZUNvbHVtbnMiLCJwcm9wIiwicmVwbGFjZSIsInZhbGlkYXRlS2V5IiwiYmFzZVRhYmxlQ29sdW1uIiwicG9zaXRpb24iLCJhbmNob3IiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInByb3BlcnRpZXNUb092ZXJ3cml0ZUFubm90YXRpb25Db2x1bW4iLCJpc0FjdGlvbk5hdmlnYWJsZSIsImJhc2VNYW5pZmVzdENvbHVtbiIsImhlYWRlciIsIkhvcml6b250YWxBbGlnbiIsIkJlZ2luIiwiaWQiLCJjdXN0b21UYWJsZUNvbHVtbiIsIm1lc3NhZ2UiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIk1hbmlmZXN0IiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlQ2F0ZWdvcnlUeXBlIiwiQW5ub3RhdGlvbkNvbHVtbnMiLCJJbnZhbGlkS2V5IiwiZ2V0UDEzbk1vZGUiLCJ2YXJpYW50TWFuYWdlbWVudCIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiYVBlcnNvbmFsaXphdGlvbiIsImlzQW5hbHl0aWNhbFRhYmxlIiwiaXNSZXNwb25zaXZlVGFibGUiLCJwZXJzb25hbGl6YXRpb24iLCJzb3J0IiwiYWdncmVnYXRlIiwiTGlzdFJlcG9ydCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJpc0ZpbHRlckJhckhpZGRlbiIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJnZXRTb3J0Q29uZGl0aW9ucyIsIm5vblNvcnRhYmxlUHJvcGVydGllcyIsInNvcnRDb25kaXRpb25zIiwiU29ydE9yZGVyIiwic29ydGVycyIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJjb25kaXRpb25Qcm9wZXJ0eSIsIlByb3BlcnR5IiwiaW5mb05hbWUiLCJjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzIiwiZGVzY2VuZGluZyIsIkRlc2NlbmRpbmciLCJnZXRJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJsZXZlbCIsIkluaXRpYWxFeHBhbnNpb25MZXZlbCIsInBhdGhzIiwiaW5mb05hbWVzIiwiY3VycmVudFBhdGgiLCJHcm91cEJ5IiwiYUdyb3VwQnkiLCJhR3JvdXBMZXZlbHMiLCJncm91cExldmVscyIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZSIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbiIsImN1c3RvbUFnZ3JlZ2F0ZSIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm8iLCJUb3RhbCIsImFUb3RhbHMiLCJ0eXBlTmFtZVBsdXJhbCIsIlR5cGVOYW1lUGx1cmFsIiwidGl0bGUiLCJwYWdlTWFuaWZlc3RTZXR0aW5ncyIsImhhc0Fic29sdXRlUGF0aCIsInAxM25Nb2RlIiwiZ2V0VGFibGVJRCIsImNyZWF0aW9uQmVoYXZpb3VyIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwiaXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQiLCJnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyIsImlzRHJhZnRPclN0aWNreVN1cHBvcnRlZCIsInRocmVzaG9sZCIsIk1heEl0ZW1zIiwiaXNTZWFyY2hhYmxlIiwiaXNQYXRoU2VhcmNoYWJsZSIsInN0YW5kYXJkQWN0aW9ucyIsImdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlIiwiZGVsZXRlIiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJwYXN0ZSIsImdldFN0YW5kYXJkQWN0aW9uUGFzdGUiLCJtYXNzRWRpdCIsImdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQiLCJpbnNpZ2h0cyIsImdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMiLCJjcmVhdGlvblJvdyIsImdldENyZWF0aW9uUm93IiwiZW50aXR5TmFtZSIsImNvbGxlY3Rpb24iLCJyb3ciLCJpc0luRGlzcGxheU1vZGUiLCJhdXRvQmluZE9uSW5pdCIsInNlYXJjaGFibGUiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJpc0NvbXBsZXhQcm9wZXJ0eSIsImV4cG9ydERhdGFUeXBlIiwidGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aCIsInN1YnN0ciIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwic2VsZWN0aW9uIiwicHJvcGVydHlOYW1lcyIsIlNlbGVjdE9wdGlvbnMiLCJzZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UiLCJpc0lwaG9uZSIsImVuYWJsZUZ1bGxTY3JlZW4iLCJJc3N1ZVR5cGUiLCJGVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCIsIl9nZXRNdWx0aVNlbGVjdE1vZGUiLCJtdWx0aVNlbGVjdE1vZGUiLCJzZWxlY3RBbGwiLCJ1c2VJY29uVGFiQmFyIiwiX2dldFRhYmxlVHlwZSIsImlzRGVza3RvcCIsIl9nZXRUYWJsZU1vZGUiLCJpc1RlbXBsYXRlTGlzdFJlcG9ydCIsInJvd0NvdW50TW9kZSIsInJvd0NvdW50IiwiX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX3RhYmxlVHlwZSIsIl90YWJsZVNldHRpbmdzIiwiY29uZGVuc2VkVGFibGVMYXlvdXQiLCJfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdCIsInNlbGVjdGlvbkxpbWl0IiwiX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJfZ2V0RmlsdGVycyIsInF1aWNrRmlsdGVyUGF0aHMiLCJxdWlja1NlbGVjdGlvblZhcmlhbnQiLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwicXVpY2tWYXJpYW50U2VsZWN0aW9uIiwiX2dldEVuYWJsZUV4cG9ydCIsImVuYWJsZVBhc3RlIiwiZW5hYmxlRXhwb3J0IiwiX2dldEZyb3plbkNvbHVtbkNvdW50IiwiZnJvemVuQ29sdW1uQ291bnQiLCJfZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlcnMiLCJoaWRlVGFibGVUaXRsZSIsImhlYWRlclZpc2libGUiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5hdlByb3BlcnR5IiwiY2hlY2tDb25kZW5zZWRMYXlvdXQiLCJfbWFuaWZlc3RXcmFwcGVyIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwiaXNQaG9uZSIsInRlbXBsYXRlVHlwZSIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50Iiwib0ZpbHRlckNvbmZpZ3VyYXRpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJ0YWJsZVJvd01vZGUiLCJvQ29uZmlndXJhdGlvbiIsImRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEiLCJlbmFibGVNYXNzRWRpdCIsImlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUiLCJzaG93Um93Q291bnQiLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiaXNDb21wYWN0VHlwZSIsInRhYmxlQ29uZmlndXJhdGlvbiIsImhpZXJhcmNoeVF1YWxpZmllciIsIm9UYXJnZXRNYXBwaW5nIiwiaXNUeXBlRGVmaW5pdGlvbiIsIkVETV9UWVBFX01BUFBJTkciLCJ1bmRlcmx5aW5nVHlwZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiSXNEaWdpdFNlcXVlbmNlIiwicGFyc2VBc1N0cmluZyIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdEVudGl0eVR5cGUsXG5cdEVudW1WYWx1ZSxcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0UHJvcGVydHlQYXRoXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGdW5jdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY0tleSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbl9FZG1cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0QW5ub3RhdGlvbnNfU2Vzc2lvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvU2Vzc2lvbl9FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFQb2ludCxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlLFxuXHRTZWxlY3RPcHRpb25UeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGxleFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHtcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSxcblx0Z2V0RGF0YUZpZWxkRGF0YVR5cGUsXG5cdGdldFNlbWFudGljT2JqZWN0UGF0aCxcblx0Z2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludCxcblx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCxcblx0aXNEYXRhRmllbGRUeXBlcyxcblx0aXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiwgQ29tYmluZWRBY3Rpb24sIEN1c3RvbUFjdGlvbiwgT3ZlcnJpZGVUeXBlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHtcblx0ZGF0YUZpZWxkSXNDb3B5QWN0aW9uLFxuXHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LFxuXHRnZXRDb3B5QWN0aW9uLFxuXHRpc0FjdGlvbk5hdmlnYWJsZSxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBFbnRpdHksIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBpbnNlcnRDdXN0b21FbGVtZW50cywgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVDYXRlZ29yeVR5cGUsIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0RURNX1RZUEVfTUFQUElORyxcblx0ZXF1YWwsXG5cdGZvcm1hdFJlc3VsdCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSwgcmVwbGFjZVNwZWNpYWxDaGFycyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBUeXBlR3VhcmRzIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7XG5cdGlzQW5ub3RhdGlvbk9mVHlwZSxcblx0aXNOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRpc1Byb3BlcnR5LFxuXHRpc1R5cGVEZWZpbml0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhEZWxldGFibGUsXG5cdGlzUGF0aFNlYXJjaGFibGUsXG5cdGlzUGF0aFVwZGF0YWJsZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSwgdHlwZSBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9FbnRpdHlTZXRIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0aXNJbWFnZVVSTFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgaXNNdWx0aVZhbHVlRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgQWN0aW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2hlbHBlcnMvQWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4gfSBmcm9tIFwiLi4vLi4vaGVscGVycy9EYXRhRmllbGRIZWxwZXJcIjtcbmltcG9ydCB7IGdldFRhYmxlSUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHR5cGUge1xuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlLFxuXHRGb3JtYXRPcHRpb25zVHlwZSxcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0TmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb24sXG5cdFRhYmxlQ29sdW1uU2V0dGluZ3MsXG5cdFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRWaWV3UGF0aENvbmZpZ3VyYXRpb25cbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7XG5cdEFjdGlvblR5cGUsXG5cdENyZWF0aW9uTW9kZSxcblx0SG9yaXpvbnRhbEFsaWduLFxuXHRJbXBvcnRhbmNlLFxuXHRTZWxlY3Rpb25Nb2RlLFxuXHRUZW1wbGF0ZVR5cGUsXG5cdFZhcmlhbnRNYW5hZ2VtZW50VHlwZSxcblx0VmlzdWFsaXphdGlvblR5cGVcbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIE1hbmlmZXN0V3JhcHBlciBmcm9tIFwiLi4vLi4vTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuaW1wb3J0IHR5cGUgeyBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGUgfSBmcm9tIFwiLi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7XG5cdGdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Z2V0Q3JlYXRpb25Sb3csXG5cdGdldERlbGV0ZVZpc2liaWxpdHksXG5cdGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nLFxuXHRnZXRNYXNzRWRpdFZpc2liaWxpdHksXG5cdGdldFJlc3RyaWN0aW9ucyxcblx0Z2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzLFxuXHRnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0LFxuXHRnZXRTdGFuZGFyZEFjdGlvblBhc3RlLFxuXHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQsXG5cdGlzSW5EaXNwbGF5TW9kZVxufSBmcm9tIFwiLi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcblxuaW1wb3J0IHsgZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG5cdGF1dG9CaW5kT25Jbml0OiBib29sZWFuO1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHRpZDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IHN0cmluZztcblx0cm93Pzoge1xuXHRcdGFjdGlvbj86IHN0cmluZztcblx0XHRwcmVzcz86IHN0cmluZztcblx0XHRyb3dIaWdobGlnaHRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdHJvd05hdmlnYXRlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0dmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR9O1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZT47XG5cdFx0aXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdFx0dXBkYXRhYmxlUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdH07XG5cdGRpc3BsYXlNb2RlPzogYm9vbGVhbjtcblx0dGhyZXNob2xkOiBudW1iZXI7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0c29ydENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGdyb3VwQ29uZGl0aW9ucz86IHN0cmluZztcblx0YWdncmVnYXRlQ29uZGl0aW9ucz86IHN0cmluZztcblx0aW5pdGlhbEV4cGFuc2lvbkxldmVsPzogbnVtYmVyO1xuXG5cdC8qKiBDcmVhdGUgbmV3IGVudHJpZXMgKi9cblx0Y3JlYXRlOiBDcmVhdGVCZWhhdmlvciB8IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWw7XG5cdHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHNlYXJjaGFibGU6IGJvb2xlYW47XG5cblx0aW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIHdpdGhpbiB0aGUgYXBwIChkZWZhdWx0IGNhc2UpXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUJlaGF2aW9yID0ge1xuXHRtb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGFwcGVuZDogYm9vbGVhbjtcblx0bmV3QWN0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCBieSBuYXZpZ2F0aW5nIHRvIHNvbWUgdGFyZ2V0XG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgPSB7XG5cdG1vZGU6IFwiRXh0ZXJuYWxcIjtcblx0b3V0Ym91bmQ6IHN0cmluZztcblx0b3V0Ym91bmREZXRhaWw6IE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uW1wib3V0Ym91bmREZXRhaWxcIl07XG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uID0ge1xuXHRpc0RlbGV0YWJsZTogYm9vbGVhbjtcblx0aXNVcGRhdGFibGU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uID0ge1xuXHRwYXRoczoge1xuXHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdH1bXTtcblx0c2hvd0NvdW50cz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiA9IHtcblx0cHJvcGVydHlOYW1lczogc3RyaW5nW107XG5cdHRleHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGVBdEVuZDogYm9vbGVhbjtcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6IGJvb2xlYW47XG5cdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogYm9vbGVhbjtcblx0ZW5hYmxlRXhwb3J0OiBib29sZWFuO1xuXHRmcm96ZW5Db2x1bW5Db3VudD86IG51bWJlcjtcblx0aGVhZGVyVmlzaWJsZTogYm9vbGVhbjtcblx0ZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24+O1xuXHR0eXBlOiBUYWJsZVR5cGU7XG5cdHJvd0NvdW50TW9kZT86IFRhYmxlUm93Q291bnRNb2RlO1xuXHRyb3dDb3VudD86IG51bWJlcjtcblx0c2VsZWN0QWxsPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uTGltaXQ6IG51bWJlcjtcblx0bXVsdGlTZWxlY3RNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVuYWJsZVBhc3RlOiBib29sZWFuO1xuXHRlbmFibGVGdWxsU2NyZWVuOiBib29sZWFuO1xuXHRzaG93Um93Q291bnQ6IGJvb2xlYW47XG5cdGlubGluZUNyZWF0aW9uUm93Q291bnQ/OiBudW1iZXI7XG5cdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU/OiBib29sZWFuO1xuXHRlbmFibGVNYXNzRWRpdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiBib29sZWFuO1xuXHRkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aXNDb21wYWN0VHlwZT86IGJvb2xlYW47XG5cdGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZztcblx0ZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVUeXBlID0gXCJHcmlkVGFibGVcIiB8IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfCBcIkFuYWx5dGljYWxUYWJsZVwiIHwgXCJUcmVlVGFibGVcIjtcbmV4cG9ydCB0eXBlIFRhYmxlUm93Q291bnRNb2RlID0gXCJBdXRvXCIgfCBcIkZpeGVkXCI7XG5cbmVudW0gQ29sdW1uVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIiwgLy8gRGVmYXVsdCBUeXBlIChDdXN0b20gQ29sdW1uKVxuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG4vLyBDdXN0b20gQ29sdW1uIGZyb20gTWFuaWZlc3RcbmV4cG9ydCB0eXBlIE1hbmlmZXN0RGVmaW5lZEN1c3RvbUNvbHVtbiA9IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbiAmIHtcblx0dHlwZT86IENvbHVtblR5cGUuRGVmYXVsdDtcbn07XG5cbi8vIFNsb3QgQ29sdW1uIGZyb20gQnVpbGRpbmcgQmxvY2tcbmV4cG9ydCB0eXBlIEZyYWdtZW50RGVmaW5lZFNsb3RDb2x1bW4gPSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gJiB7XG5cdHR5cGU6IENvbHVtblR5cGUuU2xvdDtcbn07XG5cbi8vIFByb3BlcnRpZXMgYWxsIENvbHVtblR5cGVzIGhhdmU6XG5leHBvcnQgdHlwZSBCYXNlVGFibGVDb2x1bW4gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU6IENvbHVtblR5cGU7IC8vT3JpZ2luIG9mIHRoZSBzb3VyY2Ugd2hlcmUgd2UgYXJlIGdldHRpbmcgdGhlIHRlbXBsYXRlZCBpbmZvcm1hdGlvbiBmcm9tXG5cdHdpZHRoPzogc3RyaW5nO1xuXHRpbXBvcnRhbmNlPzogSW1wb3J0YW5jZTtcblx0aG9yaXpvbnRhbEFsaWduPzogSG9yaXpvbnRhbEFsaWduO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdGNhc2VTZW5zaXRpdmU6IGJvb2xlYW47XG5cdGlzSW5zaWdodHNTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHRsYWJlbD86IHN0cmluZztcbn07XG5cbi8vIFByb3BlcnRpZXMgb24gQ3VzdG9tIENvbHVtbnMgYW5kIFNsb3QgQ29sdW1uc1xuZXhwb3J0IHR5cGUgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0aWQ6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0ZXhwb3J0U2V0dGluZ3M/OiB7XG5cdFx0dGVtcGxhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHR3cmFwOiBib29sZWFuO1xuXHR9IHwgbnVsbDtcblx0Zm9ybWF0T3B0aW9uczogeyB0ZXh0TGluZXNFZGl0OiBudW1iZXIgfTtcblx0aXNHcm91cGFibGU6IGJvb2xlYW47XG5cdGlzTmF2aWdhYmxlOiBib29sZWFuO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0dmlzdWFsU2V0dGluZ3M6IHsgd2lkdGhDYWxjdWxhdGlvbjogbnVsbCB9O1xuXHRwcm9wZXJ0aWVzPzogc3RyaW5nW107IC8vV2UgbmVlZCB0aGUgcHJvcGVydGllcyByZWxhdGl2ZVBhdGggdG8gYmUgYWRkZWQgdG8gdGhlICRTZWxlY3QgcmVxdWVzdCBmb3IgZXhwb3J0aW5nXG59O1xuXG4vLyBQcm9wZXJ0aWVzIGRlcml2ZWQgZnJvbSBNYW5pZmVzdCB0byBvdmVycmlkZSBBbm5vdGF0aW9uIGNvbmZpZ3VyYXRpb25zXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZSA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0c2V0dGluZ3M/OiBUYWJsZUNvbHVtblNldHRpbmdzO1xuXHRmb3JtYXRPcHRpb25zPzogRm9ybWF0T3B0aW9uc1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eVR5cGVDb25zdHJhaW50cyA9IFBhcnRpYWw8e1xuXHRzY2FsZTogbnVtYmVyO1xuXHRwcmVjaXNpb246IG51bWJlcjtcblx0bWF4TGVuZ3RoOiBudW1iZXI7XG5cdG51bGxhYmxlOiBib29sZWFuO1xuXHRtaW5pbXVtOiBzdHJpbmc7XG5cdG1heGltdW06IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlOiBib29sZWFuO1xufT47XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZUZvcm1hdE9wdGlvbnMgPSBQYXJ0aWFsPHtcblx0cGFyc2VBc1N0cmluZzogYm9vbGVhbjtcblx0ZW1wdHlTdHJpbmc6IHN0cmluZztcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiBib29sZWFuO1xufT47XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZUNvbmZpZyA9IHtcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM6IFByb3BlcnR5VHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBQcm9wZXJ0eVR5cGVGb3JtYXRPcHRpb25zO1xuXHR0eXBlSW5zdGFuY2U/OiB1bmtub3duO1xuXHRiYXNlVHlwZT86IHN0cmluZztcblx0Y2xhc3NOYW1lPzoga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbHVtbkV4cG9ydFNldHRpbmdzID0gUGFydGlhbDx7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHdyYXA6IGJvb2xlYW47XG5cdHR5cGU6IHN0cmluZztcblx0aW5wdXRGb3JtYXQ6IHN0cmluZztcblx0Zm9ybWF0OiBzdHJpbmc7XG5cdHNjYWxlOiBudW1iZXI7XG5cdGRlbGltaXRlcjogYm9vbGVhbjtcblx0dW5pdDogc3RyaW5nO1xuXHR1bml0UHJvcGVydHk6IHN0cmluZztcblx0dGltZXpvbmU6IHN0cmluZztcblx0dGltZXpvbmVQcm9wZXJ0eTogc3RyaW5nO1xuXHR1dGM6IGJvb2xlYW47XG59PjtcblxuLy8gUHJvcGVydGllcyBmb3IgQW5ub3RhdGlvbiBDb2x1bW5zXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSBBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZSAmIHtcblx0bmFtZTogc3RyaW5nO1xuXHRwcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dG9vbHRpcD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucz86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRzaG93RGF0YUZpZWxkc0xhYmVsPzogYm9vbGVhbjtcblx0aXNLZXk/OiBib29sZWFuO1xuXHRpc0dyb3VwYWJsZT86IGJvb2xlYW47XG5cdHVuaXQ/OiBzdHJpbmc7XG5cdHVuaXRUZXh0Pzogc3RyaW5nO1xuXHR0aW1lem9uZVRleHQ/OiBzdHJpbmc7XG5cdHRpbWV6b25lPzogc3RyaW5nO1xuXHRzZW1hbnRpY09iamVjdFBhdGg/OiBzdHJpbmc7XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRleHBvcnRTZXR0aW5ncz86IGNvbHVtbkV4cG9ydFNldHRpbmdzIHwgbnVsbDtcblx0dGV4dEFycmFuZ2VtZW50Pzoge1xuXHRcdHRleHRQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdG1vZGU6IERpc3BsYXlNb2RlO1xuXHR9O1xuXHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHR2aXN1YWxTZXR0aW5ncz86IFZpc3VhbFNldHRpbmdzO1xuXHR0eXBlQ29uZmlnPzogUHJvcGVydHlUeXBlQ29uZmlnO1xuXHRpc1BhcnRPZkxpbmVJdGVtPzogYm9vbGVhbjsgLy8gdGVtcG9yYXJ5IGluZGljYXRvciB0byBvbmx5IGFsbG93IGZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgd2hlbiB0aGV5J3JlIHBhcnQgb2YgYSBsaW5lIGl0ZW1cblx0YWRkaXRpb25hbExhYmVscz86IHN0cmluZ1tdO1xuXHRleHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZT86IHN0cmluZztcblx0YWdncmVnYXRhYmxlPzogYm9vbGVhbjtcblx0ZXh0ZW5zaW9uPzogRXh0ZW5zaW9uRm9yQW5hbHl0aWNzO1xuXHRpc0luc2lnaHRzU3VwcG9ydGVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEV4dGVuc2lvbkZvckFuYWx5dGljcyA9IHtcblx0Y3VzdG9tQWdncmVnYXRlPzoge1xuXHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIFRlY2huaWNhbENvbHVtbiA9IEFubm90YXRpb25UYWJsZUNvbHVtbiAmIHtcblx0ZXh0ZW5zaW9uPzoge1xuXHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiBib29sZWFuO1xuXHRcdHRlY2huaWNhbGx5QWdncmVnYXRhYmxlOiBib29sZWFuO1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgVmlzdWFsU2V0dGluZ3MgPSB7XG5cdHdpZHRoQ2FsY3VsYXRpb24/OiBXaWR0aENhbGN1bGF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgV2lkdGhDYWxjdWxhdGlvbiA9IG51bGwgfCB7XG5cdG1pbldpZHRoPzogbnVtYmVyO1xuXHRtYXhXaWR0aD86IG51bWJlcjtcblx0ZGVmYXVsdFdpZHRoPzogbnVtYmVyO1xuXHRpbmNsdWRlTGFiZWw/OiBib29sZWFuO1xuXHRnYXA/OiBudW1iZXI7XG5cdC8vIG9ubHkgcmVsZXZhbnQgZm9yIGNvbXBsZXggdHlwZXNcblx0ZXhjbHVkZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0dmVydGljYWxBcnJhbmdlbWVudD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbHVtbiA9IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5leHBvcnQgdHlwZSBNYW5pZmVzdENvbHVtbiA9IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlPjtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRlRGF0YSA9IHtcblx0ZGVmYXVsdEFnZ3JlZ2F0ZToge1xuXHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fTtcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlO1xuXHRhbm5vdGF0aW9uOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRjb250cm9sOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zPzogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0YWdncmVnYXRlcz86IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+O1xuXHRlbmFibGVBbmFseXRpY3M/OiBib29sZWFuO1xuXHRlbmFibGVCYXNpY1NlYXJjaD86IGJvb2xlYW47XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nO1xuXHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBzdHJpbmc7XG5cdGhlYWRlckluZm9UaXRsZTogc3RyaW5nO1xuXHRzZW1hbnRpY0tleXM6IHN0cmluZ1tdO1xuXHRoZWFkZXJJbmZvVHlwZU5hbWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz4gfCB1bmRlZmluZWQ7XG5cdGVuYWJsZSRzZWxlY3Q6IGJvb2xlYW47XG5cdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogYm9vbGVhbjtcblx0aXNJbnNpZ2h0c0VuYWJsZWQ/OiBib29sZWFuO1xufTtcblxudHlwZSBTb3J0ZXJUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGRlc2NlbmRpbmc6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGFubm90YXRpb24tYmFzZWQgYW5kIG1hbmlmZXN0LWJhc2VkIHRhYmxlIGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMgVGhlIGNvbXBsZXRlIHRhYmxlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQWN0aW9ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBhVGFibGVBY3Rpb25zID0gZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgYUFubm90YXRpb25BY3Rpb25zID0gYVRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnM7XG5cdGNvbnN0IGFIaWRkZW5BY3Rpb25zID0gYVRhYmxlQWN0aW9ucy5oaWRkZW5UYWJsZUFjdGlvbnM7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0YUFubm90YXRpb25BY3Rpb25zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHR0cnVlLFxuXHRcdGFIaWRkZW5BY3Rpb25zXG5cdCk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZUF1dG9TY3JvbGw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRjb21tYW5kOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH07XG5cdGNvbnN0IGFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhQW5ub3RhdGlvbkFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpO1xuXG5cdHJldHVybiB7XG5cdFx0YWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY29sdW1ucywgYW5ub3RhdGlvbi1iYXNlZCBhcyB3ZWxsIGFzIG1hbmlmZXN0IGJhc2VkLlxuICogVGhleSBhcmUgc29ydGVkIGFuZCBzb21lIHByb3BlcnRpZXMgY2FuIGJlIG92ZXJ3cml0dGVuIHZpYSB0aGUgbWFuaWZlc3QgKGNoZWNrIG91dCB0aGUga2V5cyB0aGF0IGNhbiBiZSBvdmVyd3JpdHRlbikuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEBwYXJhbSBpc0luc2lnaHRzRW5hYmxlZFxuICogQHJldHVybnMgUmV0dXJucyBhbGwgdGFibGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgdGVtcGxhdGluZyBvciBwZXJzb25hbGl6YXRpb24gb3IgdGhlaXIgb3JpZ2luXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUNvbHVtbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGlzSW5zaWdodHNFbmFibGVkPzogYm9vbGVhblxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGFubm90YXRpb25Db2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBpc0luc2lnaHRzRW5hYmxlZCk7XG5cdGNvbnN0IG1hbmlmZXN0Q29sdW1ucyA9IGdldENvbHVtbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5jb2x1bW5zLFxuXHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5nc1xuXHQpO1xuXG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhhbm5vdGF0aW9uQ29sdW1ucyBhcyBUYWJsZUNvbHVtbltdLCBtYW5pZmVzdENvbHVtbnMgYXMgUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudDxUYWJsZUNvbHVtbj4+LCB7XG5cdFx0d2lkdGg6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0aW1wb3J0YW5jZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRob3Jpem9udGFsQWxpZ246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0YXZhaWxhYmlsaXR5OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGZvcm1hdE9wdGlvbnM6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fSk7XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGN1c3RvbSBhZ2dyZWdhdGlvbiBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZvciB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgYWdncmVnYXRlIGRlZmluaXRpb25zIGZyb20gdGhlIGVudGl0eVR5cGUsIG9yIHVuZGVmaW5lZCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0ZnVuY3Rpb24gZmluZENvbHVtbkZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGFibGVDb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IHBhdGg7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIWFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gS2VlcCBhIHNldCBvZiBhbGwgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzLCBhcyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHRoZW0gYXMgYWdncmVnYXRlc1xuXHQvLyBUaGV5IGFyZSBhZ2dyZWdhdGVzIGZvciB0ZWNobmljYWwgcmVhc29ucyAodG8gbWFuYWdlIG11bHRpLXVuaXRzIHNpdHVhdGlvbnMpIGJ1dCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZnJvbSBhIHVzZXIgc3RhbmRwb2ludFxuXHRjb25zdCBjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCB0YWJsZUNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdGN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5hZGQodGFibGVDb2x1bW4udW5pdCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IGRlZmluaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblxuXHRjdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5mb3JFYWNoKChhbm5vdGF0aW9uKSA9PiB7XG5cdFx0Y29uc3QgYWdncmVnYXRlZFByb3BlcnR5ID0gYWdncmVnYXRpb25IZWxwZXIuX2VudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5Lm5hbWUgPT09IGFubm90YXRpb24ucXVhbGlmaWVyO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGFubm90YXRpb24uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0ZGVmaW5pdGlvbnNbYWdncmVnYXRlZFByb3BlcnR5Lm5hbWVdID0gY29udGV4dERlZmluaW5nUHJvcGVydGllc1xuXHRcdFx0XHQ/IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubWFwKChjdHhEZWZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGN0eERlZlByb3BlcnR5LnZhbHVlO1xuXHRcdFx0XHQgIH0pXG5cdFx0XHRcdDogW107XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiA9IHt9O1xuXG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCB0YWJsZUNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiB0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdGNvbnN0IHJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBkZWZpbml0aW9uc1t0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhdO1xuXG5cdFx0XHQvLyBJZ25vcmUgYWdncmVnYXRlcyBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbmNpZXMgb3IgdW5pdHMgb2YgbWVhc3VyZVxuXHRcdFx0aWYgKHJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgJiYgIWN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5oYXModGFibGVDb2x1bW4ubmFtZSkpIHtcblx0XHRcdFx0cmVzdWx0W3RhYmxlQ29sdW1uLm5hbWVdID0ge1xuXHRcdFx0XHRcdGRlZmF1bHRBZ2dyZWdhdGU6IHt9LFxuXHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRcdHJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMuZm9yRWFjaCgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZm91bmRDb2x1bW4gPSBmaW5kQ29sdW1uRnJvbVBhdGgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0XHRpZiAoZm91bmRDb2x1bW4pIHtcblx0XHRcdFx0XHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMucHVzaChmb3VuZENvbHVtbi5uYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJlc3VsdFt0YWJsZUNvbHVtbi5uYW1lXS5kZWZhdWx0QWdncmVnYXRlLmNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIGEgdGFibGUgdmlzdWFsaXphdGlvbiBmb3IgYW5hbHl0aWNhbCB1c2UgY2FzZXMuXG4gKlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gVGhlIHByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiAoaWYgYW55KVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZShcblx0dGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbikge1xuXHRpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyA9IGdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUoZW50aXR5VHlwZSwgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0YWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0XHRpZiAoYWdncmVnYXRlc0RlZmluaXRpb25zKSB7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzID0gdHJ1ZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkc2VsZWN0ID0gZmFsc2U7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0ID0gZmFsc2U7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYWdncmVnYXRlcyA9IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucztcblx0XHRcdF91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyh0YWJsZVZpc3VhbGl6YXRpb24pO1xuXG5cdFx0XHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5kZXhPZihcInNlYXJjaFwiKSA+PSAwIDogdHJ1ZTtcblxuXHRcdFx0Ly8gQWRkIGdyb3VwIGFuZCBzb3J0IGNvbmRpdGlvbnMgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnRcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlXG5cdFx0XHQpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWdncmVnYXRlQ29uZGl0aW9ucyA9IGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1uc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID0gXCJHcmlkVGFibGVcIjsgLy8gQW5hbHl0aWNhbFRhYmxlIGlzbid0IGEgcmVhbCB0eXBlIGZvciB0aGUgTURDOlRhYmxlLCBzbyB3ZSBhbHdheXMgc3dpdGNoIGJhY2sgdG8gR3JpZFxuXHR9IGVsc2UgaWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMoXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSB0cnVlO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoIHRvIGNoZWNrIGluIHRoZSBtYW5pZmVzdCBzZXR0aW5nc1xuICogQHJldHVybnMgTmF2aWdhdGlvbiBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoICYmIG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdGNvbnN0IG5hdkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRpZiAoT2JqZWN0LmtleXMobmF2Q29uZmlnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBuYXZDb25maWdGb3JDb250ZXh0UGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihjb250ZXh0UGF0aCk7XG5cdGlmIChuYXZDb25maWdGb3JDb250ZXh0UGF0aCAmJiBPYmplY3Qua2V5cyhuYXZDb25maWdGb3JDb250ZXh0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjb250ZXh0UGF0aDtcblx0fVxuXG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgJ3VuaXQnIGFuZCAndGV4dEFycmFuZ2VtZW50JyBwcm9wZXJ0aWVzIGluIGNvbHVtbnMgd2hlbiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcbiAqIEBwYXJhbSB0YWJsZUNvbHVtbnMgVGhlIGNvbHVtbnMgdG8gYmUgdXBkYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGlua2VkUHJvcGVydGllcyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHtcblx0ZnVuY3Rpb24gZmluZENvbHVtbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwYXRoO1xuXHRcdH0pO1xuXHR9XG5cblx0dGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2x1bW4pID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHkgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZCgob1Byb3A6IFByb3BlcnR5KSA9PiBvUHJvcC5uYW1lID09PSBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3Qgb1VuaXQgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0XHRcdFx0Y29uc3Qgb1RpbWV6b25lID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkob1Byb3BlcnR5KTtcblx0XHRcdFx0Y29uc3Qgc1RpbWV6b25lID0gb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblx0XHRcdFx0aWYgKG9Vbml0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1VuaXRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKG9Vbml0Lm5hbWUpO1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi51bml0ID0gb1VuaXRDb2x1bW4/Lm5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1VuaXQgPSBvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0XHRcdFx0aWYgKHNVbml0KSB7XG5cdFx0XHRcdFx0XHRvVGFibGVDb2x1bW4udW5pdFRleHQgPSBgJHtzVW5pdH1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1RpbWV6b25lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RpbWV6b25lQ29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChvVGltZXpvbmUubmFtZSk7XG5cdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRpbWV6b25lID0gb1RpbWV6b25lQ29sdW1uPy5uYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNUaW1lem9uZSkge1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50aW1lem9uZVRleHQgPSBzVGltZXpvbmUudG9TdHJpbmcoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0ZXh0QW5ub3RhdGlvbikgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikge1xuXHRcdFx0XHRcdGNvbnN0IG9UZXh0Q29sdW1uID0gZmluZENvbHVtbkJ5UGF0aCh0ZXh0QW5ub3RhdGlvbi5wYXRoKTtcblx0XHRcdFx0XHRpZiAob1RleHRDb2x1bW4gJiYgb1RleHRDb2x1bW4ubmFtZSAhPT0gb1RhYmxlQ29sdW1uLm5hbWUpIHtcblx0XHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50ZXh0QXJyYW5nZW1lbnQgPSB7XG5cdFx0XHRcdFx0XHRcdHRleHRQcm9wZXJ0eTogb1RleHRDb2x1bW4ubmFtZSxcblx0XHRcdFx0XHRcdFx0bW9kZTogZGlzcGxheU1vZGVcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0Y29uc3QgaGVhZGVySW5mb1RpdGxlUGF0aCA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZVxuXHRcdD8ucGF0aDtcblx0Y29uc3Qgc2VtYW50aWNLZXlBbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdGNvbnN0IGhlYWRlckluZm9UeXBlTmFtZSA9IGNvbnZlcnRlckNvbnRleHQ/LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWU7XG5cdGNvbnN0IHNlbWFudGljS2V5Q29sdW1uczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHNlbWFudGljS2V5QW5ub3RhdGlvbnMpIHtcblx0XHRzZW1hbnRpY0tleUFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW4pIHtcblx0XHRcdHNlbWFudGljS2V5Q29sdW1ucy5wdXNoKG9Db2x1bW4udmFsdWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHsgaGVhZGVySW5mb1RpdGxlUGF0aCwgc2VtYW50aWNLZXlDb2x1bW5zLCBoZWFkZXJJbmZvVHlwZU5hbWUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudD86IGJvb2xlYW4sXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRpc0luc2lnaHRzRW5hYmxlZD86IGJvb2xlYW5cbik6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50XG5cdCk7XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRUYWJsZUNvbHVtbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzLCBpc0luc2lnaHRzRW5hYmxlZCk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uU2V0dGluZ3MpO1xuXG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0XHRjb2x1bW5zLFxuXHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHRcdCksXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKHRhYmxlQWN0aW9ucy5hY3Rpb25zKSxcblx0XHRjb21tYW5kQWN0aW9uczogdGFibGVBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBKU09OLnN0cmluZ2lmeShvcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRoZWFkZXJJbmZvVGl0bGU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVGl0bGVQYXRoLFxuXHRcdHNlbWFudGljS2V5czogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLnNlbWFudGljS2V5Q29sdW1ucyxcblx0XHRoZWFkZXJJbmZvVHlwZU5hbWU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVHlwZU5hbWUsXG5cdFx0ZW5hYmxlJHNlbGVjdDogdHJ1ZSxcblx0XHRlbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQ6IHRydWVcblx0fTtcblxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUoXG5cdFx0b1Zpc3VhbGl6YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb25cblx0KTtcblxuXHRyZXR1cm4gb1Zpc3VhbGl6YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIGlzQmxhbmtUYWJsZT86IGJvb2xlYW4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoe30sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBbXSwgW10sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWcudHlwZSwgW10pO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXAgPSBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAodW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlID0gZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBvVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlnLCBpc0JsYW5rVGFibGUgPyBbXSA6IGNvbHVtbnMpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZSxcblx0XHRlbmFibGUkc2VsZWN0OiB0cnVlLFxuXHRcdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogdHJ1ZVxuXHR9O1xuXG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKG9WaXN1YWxpemF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIG9WaXN1YWxpemF0aW9uO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG1hcCBvZiBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRocyBmb3IgYWxsIERhdGFGaWVsZEZvckFjdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGxpbmUgaXRlbVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHJlY29yZCBjb250YWluaW5nIGFsbCBhY3Rpb24gbmFtZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdHJldHVybiBBY3Rpb25IZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbiwgXCJ0YWJsZVwiLCBjb252ZXJ0ZXJDb250ZXh0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHVwZGF0YWJsZSBwcm9wZXJ0eVBhdGggZm9yIHRoZSBjdXJyZW50IGVudGl0eXNldCBpZiB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdXBkYXRhYmxlIHByb3BlcnR5IGZvciB0aGUgcm93c1xuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zID0gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCB1cGRhdGFibGUgPSByZXN0cmljdGlvbnMuaXNVcGRhdGFibGU7XG5cdGNvbnN0IGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPSAhaXNDb25zdGFudCh1cGRhdGFibGUuZXhwcmVzc2lvbikgJiYgdXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCB1cGRhdGFibGVFeHByZXNzaW9uID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlO1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1cGRhdGFibGVFeHByZXNzaW9uKSAmJiB1cGRhdGFibGVFeHByZXNzaW9uLnBhdGg7XG5cblx0cmV0dXJuIGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPyAodXBkYXRhYmxlUHJvcGVydHlQYXRoIGFzIHN0cmluZykgOiBcIlwiO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgcHJvcGVydHkgcGF0aHMgYXNzaWduZWQgdG8gdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCBUaGUgcmVjb3JkIGNvbnNpc3Rpbmcgb2YgYWN0aW9ucyBhbmQgdGhlaXIgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBDU1Ygc3RyaW5nIG9mIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NvY2lhdGVkIHdpdGggdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgcHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gb3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwW2FjdGlvbk5hbWVdO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IG51bGwpIHtcblx0XHRcdC8vIEFubm90YXRpb24gY29uZmlndXJlZCB3aXRoIGV4cGxpY2l0ICdudWxsJyAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsZXZhbnQpXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChhY3Rpb25OYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eU5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0eSBwYXRocyBhbmQgbm90IENvbnN0YW50IHZhbHVlcy5cblx0XHRcdHByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHByb3BlcnRpZXMuc2l6ZSkge1xuXHRcdC8vIFNvbWUgYWN0aW9ucyBoYXZlIGFuIG9wZXJhdGlvbiBhdmFpbGFibGUgYmFzZWQgb24gcHJvcGVydHkgLS0+IHdlIG5lZWQgdG8gbG9hZCB0aGUgSGVhZGVySW5mby5UaXRsZSBwcm9wZXJ0eVxuXHRcdC8vIHNvIHRoYXQgdGhlIGRpYWxvZyBvbiBwYXJ0aWFsIGFjdGlvbnMgaXMgZGlzcGxheWVkIHByb3Blcmx5IChCQ1AgMjE4MDI3MTQyNSlcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0Y29uc3QgdGl0bGVQcm9wZXJ0eSA9IChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aDtcblx0XHRpZiAodGl0bGVQcm9wZXJ0eSkge1xuXHRcdFx0cHJvcGVydGllcy5hZGQodGl0bGVQcm9wZXJ0eSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIEFycmF5LmZyb20ocHJvcGVydGllcykuam9pbihcIixcIik7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiByZXR1cm5zIGFsbCB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZXhwcmVzc2lvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBPYmplY3QgcGF0aCBvZiB0aGUgZGF0YSBtb2RlbFxuICogQHBhcmFtIGlzRW50aXR5U2V0XG4gKiBAcmV0dXJucyBBbGwgdGhlIGBVSS5IaWRkZW5gIHBhdGggZXhwcmVzc2lvbnMgZm91bmQgaW4gdGhlIHJlbGV2YW50IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc0VudGl0eVNldDogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmXG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlKSB8fFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSlcblx0XHQpIHtcblx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0YVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zLnB1c2goXG5cdFx0XHRcdFx0ZXF1YWwoZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbChkYXRhRmllbGQsIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLCBpc0VudGl0eVNldCksIGZhbHNlKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgRGF0YUZpZWxkIHBhdGguXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gZ2V0UGF0aEZyb21BY3Rpb25Bbm5vdGF0aW9uKGV4cHJlc3Npb246IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKSB7XG5cdGxldCBwYXRoOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGV4cHJlc3Npb24pKSB7XG5cdFx0cGF0aCA9IGV4cHJlc3Npb24ucGF0aDtcblx0fSBlbHNlIHtcblx0XHRwYXRoID0gZXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gcGF0aDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBpc0VudGl0eVNldFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXRIaWRkZW5FeHByZXNzaW9uQXRUYWJsZUxldmVsKFxuXHRzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc0VudGl0eVNldDogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0Y29uc3QgZXhwcmVzc2lvbiA9IHNvdXJjZS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0bGV0IHBhdGggPSBnZXRQYXRoRnJvbUFjdGlvbkFubm90YXRpb24oZXhwcmVzc2lvbik7XG5cdGlmICh0eXBlb2YgcGF0aCA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoXCJ2aXNpYmxlXCIgaW4gc291cmNlKSB7XG5cdFx0XHRwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSwgcGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIGNvcnJlY3Q6XG5cdFx0XHRjb25zdCBzcGxpdFBhdGhGb3JOYXZpZ2F0aW9uUHJvcGVydHkgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5WzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc05hdmlnYXRpb25Qcm9wZXJ0eShjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0KSAmJlxuXHRcdFx0XHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucGFydG5lciA9PT0gbmF2aWdhdGlvblBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5LnNsaWNlKDEpLmpvaW4oXCIvXCIpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHRcdH1cblx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gbmF2aWdhdGlvbiBwcm9wZXJ0eSwgaWYgaXQncyBhbiBlbnRpdHlTZXQsIHRoZSBleHByZXNzaW9uIGJpbmRpbmcgaGFzIHRvIGJlIHJldHVybmVkOlxuXHRcdH0gZWxzZSBpZiAoaXNFbnRpdHlTZXQpIHtcblx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChwYXRoKTtcblx0XHRcdC8vIG90aGVyd2lzZSB0aGUgZXhwcmVzc2lvbiBiaW5kaW5nIGNhbm5vdCBiZSB0YWtlbiBpbnRvIGFjY291bnQgZm9yIHRoZSBzZWxlY3Rpb24gbW9kZSBldmFsdWF0aW9uOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG59XG5cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBtYW5pZmVzdCBhY3Rpb25zIGFuZCBjaGVjayB0aGUgZm9sbG93aW5nOlxuICpcbiAqIElmIHRoZSBkYXRhIGZpZWxkIGlzIGFsc28gcmVmZXJlbmNlZCBhcyBhIGN1c3RvbSBhY3Rpb24uXG4gKiBJZiB0aGUgdW5kZXJseWluZyBtYW5pZmVzdCBhY3Rpb24gaXMgZWl0aGVyIGEgYm91bmQgYWN0aW9uIG9yIGhhcyB0aGUgJ1JlcXVpcmVzQ29udGV4dCcgcHJvcGVydHkgc2V0IHRvIHRydWUuXG4gKlxuICogSWYgc28sIHRoZSAncmVxdWlyZXNTZWxlY3Rpb24nIHByb3BlcnR5IGlzIGZvcmNlZCB0byAndHJ1ZScgaW4gdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRJZCBJZCBvZiB0aGUgRGF0YUZpZWxkIGV2YWx1YXRlZFxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZXZhbHVhdGVkXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIERhdGFGaWVsZCBpcyBmb3VuZCBhbW9uZyB0aGUgbWFuaWZlc3QgYWN0aW9uc1xuICovXG5mdW5jdGlvbiB1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0KFxuXHRkYXRhRmllbGRJZDogc3RyaW5nLFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+XG4pOiBib29sZWFuIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuc29tZSgoYWN0aW9uS2V5KSA9PiB7XG5cdFx0aWYgKGFjdGlvbktleSA9PT0gZGF0YUZpZWxkSWQpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgfHxcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy5SZXF1aXJlc0NvbnRleHRcblx0XHRcdCkge1xuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbnNbZGF0YUZpZWxkSWRdLnJlcXVpcmVzU2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiBjaGVjayB0aGUgZm9sbG93aW5nOlxuICogSWYgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIHRhYmxlIHRvb2xiYXIgYW5kIHJlcXVpcmVzIGEgY29udGV4dFxuICogSWYgYW4gYWN0aW9uIGlzIGFsc28gZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QsIGl0IGlzIHNldCBhc2lkZSBhbmQgd2lsbCBiZSBjb25zaWRlcmVkXG4gKiB3aGVuIGdvaW5nIHRocm91Z2ggdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBFbnRpdHkgVHlwZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IDEgYWN0aW9uIHRoYXQgbWVldHMgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPixcblx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbGluZUl0ZW1Bbm5vdGF0aW9uLnNvbWUoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikgJiZcblx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gZmFsc2UgfHwgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHVuZGVmaW5lZClcblx0XHQpIHtcblx0XHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0XHRjb25zdCBtYW5pZmVzdEFjdGlvbklkID0gZ2VuZXJhdGUoW1wiRGF0YUZpZWxkRm9yQWN0aW9uXCIsIGRhdGFGaWVsZC5BY3Rpb24gYXMgc3RyaW5nXSk7XG5cdFx0XHRcdC8vIGlmIHRoZSBEYXRhRmllbGRGb3JBY3RvbiBmcm9tIGFubm90YXRpb24gYWxzbyBleGlzdHMgaW4gdGhlIG1hbmlmZXN0LCBpdHMgdmlzaWJpbGl0eSB3aWxsIGJlIGV2YWx1YXRlZCBsYXRlciBvblxuXHRcdFx0XHRpZiAodXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChtYW5pZmVzdEFjdGlvbklkLCBkYXRhRmllbGQsIG1hbmlmZXN0QWN0aW9ucykpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiYgY3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGU7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdC8vIGlmIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBhbm5vdGF0aW9uIGFsc28gZXhpc3RzIGluIHRoZSBtYW5pZmVzdCwgaXRzIHZpc2liaWxpdHkgd2lsbCBiZSBldmFsdWF0ZWQgbGF0ZXIgb25cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHVwZGF0ZU1hbmlmZXN0QWN0aW9uQW5kVGFnSXQoXG5cdFx0XHRcdFx0XHRgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOjoke2RhdGFGaWVsZC5TZW1hbnRpY09iamVjdH06OiR7ZGF0YUZpZWxkLkFjdGlvbn1gLFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5zb21lKChhY3Rpb25LZXkpID0+IHtcblx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIGFjdGlvbi52aXNpYmxlPy50b1N0cmluZygpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgY3VzdG9tIGFjdGlvbnMgKHdpdGgga2V5IHJlcXVpcmVzU2VsZWN0aW9uKSBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHRoZSBjdXJyZW50IGxpbmUgaXRlbSBhbmQgcmV0dXJucyBhbGwgdGhlXG4gKiB2aXNpYmxlIGtleSB2YWx1ZXMgYXMgYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBBcnJheTxFeHByZXNzaW9uPGJvb2xlYW4+PiBBbGwgdGhlIHZpc2libGUgcGF0aCBleHByZXNzaW9ucyBvZiB0aGUgYWN0aW9ucyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dChtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAobWFuaWZlc3RBY3Rpb25zKSB7XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5mb3JFYWNoKChhY3Rpb25LZXkpID0+IHtcblx0XHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZSAmJiBhY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYWN0aW9uLnZpc2libGUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvKlRoZSBmaW5hbCBhaW0gd291bGQgYmUgdG8gY2hlY2sgaWYgdGhlIHBhdGggZXhwcmVzc2lvbiBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgY29udGV4dFxuXHRcdFx0XHRcdGFuZCBjb25zaWRlcnMgb25seSB0aG9zZSBleHByZXNzaW9ucyBmb3IgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbixcblx0XHRcdFx0XHRidXQgY3VycmVudGx5IG5vdCBwb3NzaWJsZSBmcm9tIHRoZSBtYW5pZmVzdCBhcyB0aGUgdmlzaWJsZSBrZXkgaXMgYm91bmQgb24gdGhlIHBhcmVudCBlbnRpdHkuXG5cdFx0XHRcdFx0VHJpY2t5IHRvIGRpZmZlcmVudGlhdGUgdGhlIHBhdGggYXMgaXQncyBkb25lIGZvciB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdFx0XHRcdFx0Rm9yIHRoZSB0aW1lIGJlaW5nIHdlIGNvbnNpZGVyIGFsbCB0aGUgcGF0aHMgb2YgdGhlIG1hbmlmZXN0Ki9cblxuXHRcdFx0XHRcdGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zLnB1c2gocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uPy52aXNpYmxlPy52YWx1ZU9mKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgcGF0aCBpcyBzdGF0aWNhbGx5IGRlbGV0YWJsZSBvciB1cGRhdGFibGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24ge1xuXHRjb25zdCBpc0RlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdGNvbnN0IGlzVXBkYXRhYmxlID0gaXNQYXRoVXBkYXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0cmV0dXJuIHtcblx0XHRpc0RlbGV0YWJsZTogIShpc0NvbnN0YW50KGlzRGVsZXRhYmxlKSAmJiBpc0RlbGV0YWJsZS52YWx1ZSA9PT0gZmFsc2UpLFxuXHRcdGlzVXBkYXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNVcGRhdGFibGUpICYmIGlzVXBkYXRhYmxlLnZhbHVlID09PSBmYWxzZSlcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuLFxuXHR0YXJnZXRDYXBhYmlsaXRpZXM6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uLFxuXHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdH1cblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblx0bGV0IGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW10sXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0W10sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdGZhbHNlXG5cdCk7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlRXhwcmVzc2lvbihpc1BhcmVudERlbGV0YWJsZSwgdHJ1ZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXG5cdGNvbnN0IGJNYXNzRWRpdEVuYWJsZWQ6IGJvb2xlYW4gPSAhaXNDb25zdGFudChtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSB8fCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLnZhbHVlICE9PSBmYWxzZTtcblx0aWYgKHNlbGVjdGlvbk1vZGUgJiYgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5Ob25lICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlICYmIGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIE1hc3MgRWRpdCBpbiBPUCBpcyBlbmFibGVkIG9ubHkgaW4gZWRpdCBtb2RlLlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKFVJLklzRWRpdGFibGUsIG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdGNvbnN0YW50KFwiTXVsdGlcIiksXG5cdFx0XHRcdFx0aWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpKTtcblx0fVxuXHRpZiAoIXNlbGVjdGlvbk1vZGUgfHwgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5BdXRvKSB7XG5cdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblx0aWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHQvLyBPdmVycmlkZSBkZWZhdWx0IHNlbGVjdGlvbiBtb2RlIHdoZW4gbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRzZWxlY3Rpb25Nb2RlID0gc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5TaW5nbGUgPyBTZWxlY3Rpb25Nb2RlLlNpbmdsZSA6IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblxuXHRpZiAoXG5cdFx0aGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb24sIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSkgfHxcblx0XHRoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucylcblx0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdH1cblx0YUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucyA9IGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzRW50aXR5U2V0XG5cdCk7XG5cdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblxuXHQvLyBObyBhY3Rpb24gcmVxdWlyaW5nIGEgY29udGV4dDpcblx0aWYgKFxuXHRcdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0KGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGJNYXNzRWRpdEVuYWJsZWQpXG5cdCkge1xuXHRcdGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHQvLyBCdWlsZGluZyBleHByZXNzaW9uIGZvciBkZWxldGUgYW5kIG1hc3MgZWRpdFxuXHRcdFx0XHRjb25zdCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IG9yKFxuXHRcdFx0XHRcdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IHRydWUsIC8vIGRlZmF1bHQgZGVsZXRlIHZpc2liaWxpdHkgYXMgdHJ1ZVxuXHRcdFx0XHRcdG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShhbmQoVUkuSXNFZGl0YWJsZSwgYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24pLCBjb25zdGFudChzZWxlY3Rpb25Nb2RlKSwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdFx0XHR9XG5cdFx0XHQvLyBFbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSBpZiAoYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0Ly8gZXhhbXBsZTogTFIgc2NlbmFyaW9cblx0XHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChzZWxlY3Rpb25Nb2RlKSwgY29uc3RhbnQoXCJOb25lXCIpKSk7XG5cdFx0XHQvLyBFbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHR9XG5cdFx0Ly8gVGhlcmUgYXJlIGFjdGlvbnMgcmVxdWlyaW5nIGEgY29udGV4dDpcblx0fSBlbHNlIGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHQvLyBFeGFtcGxlOiBPUCBjYXNlXG5cdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIiB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHQvLyBVc2Ugc2VsZWN0aW9uTW9kZSBpbiBlZGl0IG1vZGUgaWYgZGVsZXRlIGlzIGVuYWJsZWQgb3IgbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRcdGNvbnN0IGVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0XHRcdGJNYXNzRWRpdEVuYWJsZWQgJiYgIXRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSxcblx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSlcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8vRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0fSBlbHNlIGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdC8vIEV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdFx0Ly9FbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSwgbWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgdGFibGUgYWN0aW9ucyBmcm9tIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBhbm5vdGF0aW9uIGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IHRhYmxlQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cdGNvbnN0IGhpZGRlblRhYmxlQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cblx0Y29uc3QgY29weURhdGFGaWVsZCA9IGdldENvcHlBY3Rpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gZGF0YUZpZWxkSXNDb3B5QWN0aW9uKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyk7XG5cdFx0fSkgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXVxuXHQpO1xuXG5cdGNvbnN0IHNFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuZnVsbHlRdWFsaWZpZWROYW1lO1xuXG5cdGlmIChjb3B5RGF0YUZpZWxkKSB7XG5cdFx0dGFibGVBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5Db3B5LFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChjb3B5RGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoY29weURhdGFGaWVsZCksXG5cdFx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihlcXVhbChwYXRoSW5Nb2RlbChcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKSksXG5cdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRjb3B5RGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCksXG5cdFx0XHR0ZXh0OiBjb3B5RGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpID8/IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikuZ2V0VGV4dChcIkNfQ09NTU9OX0NPUFlcIiksXG5cdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9XG5cblx0bGluZUl0ZW1Bbm5vdGF0aW9uXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gIWRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKTtcblx0XHR9KVxuXHRcdC5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGlmIChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRoaWRkZW5UYWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdChkYXRhRmllbGQpICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSAmJlxuXHRcdFx0XHRkYXRhRmllbGQuRGV0ZXJtaW5pbmc/LnZhbHVlT2YoKSAhPT0gdHJ1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRcdFx0XHQvLyBUaGVyZSBhcmUgdGhyZWUgY2FzZXMgd2hlbiBhIHRhYmxlIGFjdGlvbiBoYXMgYW4gT3BlcmF0aW9uQXZhaWxhYmxlIHRoYXQgbGVhZHMgdG8gYW4gZW5hYmxlbWVudCBleHByZXNzaW9uXG5cdFx0XHRcdFx0XHQvLyBhbmQgaXMgbm90IGRlcGVuZGVudCB1cG9uIHRoZSB0YWJsZSBlbnRyaWVzLlxuXHRcdFx0XHRcdFx0Ly8gMS4gQW4gYWN0aW9uIHdpdGggYW4gb3ZlcmxvYWQsIHRoYXQgaXMgZXhlY3V0ZWQgYWdhaW5zdCBhIHBhcmVudCBlbnRpdHkuXG5cdFx0XHRcdFx0XHQvLyAyLiBBbiB1bmJvdW5kIGFjdGlvblxuXHRcdFx0XHRcdFx0Ly8gMy4gQSBzdGF0aWMgYWN0aW9uICh0aGF0IGlzLCBib3VuZCB0byBhIGNvbGxlY3Rpb24pXG5cdFx0XHRcdFx0XHRsZXQgdXNlRW5hYmxlZEV4cHJlc3Npb24gPSBmYWxzZTtcblx0XHRcdFx0XHRcdGlmIChkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCFkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVW5ib3VuZCBhY3Rpb24uIElzIHJlY29nbmlzZWQsIGJ1dCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gY2hlY2tzIGZvciBpc0JvdW5kID0gdHJ1ZSwgc28gbm90IGdlbmVyYXRlZC5cblx0XHRcdFx0XHRcdFx0XHR1c2VFbmFibGVkRXhwcmVzc2lvbiA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJiBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5zb3VyY2VUeXBlICE9PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIE92ZXJsb2FkIGFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdHVzZUVuYWJsZWRFeHByZXNzaW9uID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzWzBdLmlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFN0YXRpYyBhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHR1c2VFbmFibGVkRXhwcmVzc2lvbiA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgdGFibGVBY3Rpb246IEJhc2VBY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRpZiAodXNlRW5hYmxlZEV4cHJlc3Npb24pIHtcblx0XHRcdFx0XHRcdFx0dGFibGVBY3Rpb24uZW5hYmxlZCA9IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0XHRcdHRhYmxlQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0XHRub3QoXG5cdFx0XHRcdFx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdHRhYmxlQWN0aW9ucyxcblx0XHRoaWRkZW5UYWJsZUFjdGlvbnNcblx0fTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYmluZGluZ0V4cHJlc3Npb24gZm9yIHRoZSBoaWdobGlnaHQgcm93U2V0dGluZyBwYXJhbWV0ZXIuXG4gKlxuICogQHBhcmFtIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiBQYXRoIG9yIHZhbHVlIG9mIHRoZSBjcml0aWNhbGl0eVxuICogQHBhcmFtIGlzRHJhZnRSb290T3JOb2RlICBJcyB0aGUgY3VycmVudCBlbnRpdHlTZXQgYW4gRHJhZnQgcm9vdCBvciBhIG5vZGVcbiAqIEBwYXJhbSB0YXJnZXRFbnRpdHlUeXBlIFRoZSB0YXJnZXRlZCBlbnRpdHlUeXBlXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uQmluZGluZ1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0Y3JpdGljYWxpdHlBbm5vdGF0aW9uOiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Q3JpdGljYWxpdHlUeXBlPiB8IEVudW1WYWx1ZTxDcml0aWNhbGl0eVR5cGU+IHwgdW5kZWZpbmVkLFxuXHRpc0RyYWZ0Um9vdE9yTm9kZTogYm9vbGVhbixcblx0dGFyZ2V0RW50aXR5VHlwZT86IEVudGl0eVR5cGVcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4ge1xuXHRsZXQgZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb246IE1lc3NhZ2VUeXBlIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGlmIChjcml0aWNhbGl0eUFubm90YXRpb24pIHtcblx0XHRpZiAodHlwZW9mIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY3JpdGljYWxpdHlBbm5vdGF0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBFbnVtIFZhbHVlIHNvIHdlIGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgcGFydFxuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoY3JpdGljYWxpdHlBbm5vdGF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBhTWlzc2luZ0tleXM6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxzdHJpbmc+W10gPSBbXTtcblx0dGFyZ2V0RW50aXR5VHlwZT8ua2V5cy5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5Lm5hbWUgIT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0YU1pc3NpbmdLZXlzLnB1c2gocGF0aEluTW9kZWwoa2V5Lm5hbWUsIHVuZGVmaW5lZCkpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbixcblx0XHRcdHBhdGhJbk1vZGVsKGBmaWx0ZXJlZE1lc3NhZ2VzYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdGlzRHJhZnRSb290T3JOb2RlICYmIEVudGl0eS5IYXNBY3RpdmUsXG5cdFx0XHRpc0RyYWZ0Um9vdE9yTm9kZSAmJiBFbnRpdHkuSXNBY3RpdmUsXG5cdFx0XHRgJHtpc0RyYWZ0Um9vdE9yTm9kZX1gLFxuXHRcdFx0Li4uYU1pc3NpbmdLZXlzXG5cdFx0XSxcblx0XHR0YWJsZUZvcm1hdHRlcnMucm93SGlnaGxpZ2h0aW5nLFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcbn1cblxuZnVuY3Rpb24gX2dldENyZWF0aW9uQmVoYXZpb3VyKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uW1wiY3JlYXRlXCJdIHtcblx0Y29uc3QgbmF2aWdhdGlvbiA9IG5hdmlnYXRpb25TZXR0aW5ncz8uY3JlYXRlIHx8IG5hdmlnYXRpb25TZXR0aW5ncz8uZGV0YWlsO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3Qgb3JpZ2luYWxUYWJsZVNldHRpbmdzID0gKHRhYmxlTWFuaWZlc3RTZXR0aW5ncyAmJiB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncykgfHwge307XG5cdC8vIGNyb3NzLWFwcFxuXHRpZiAobmF2aWdhdGlvbj8ub3V0Ym91bmQgJiYgbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCAmJiBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRtb2RlOiBcIkV4dGVybmFsXCIsXG5cdFx0XHRvdXRib3VuZDogbmF2aWdhdGlvbi5vdXRib3VuZCxcblx0XHRcdG91dGJvdW5kRGV0YWlsOiBuYXZpZ2F0aW9uLm91dGJvdW5kRGV0YWlsLFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzOiBuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0XHR9O1xuXHR9XG5cblx0bGV0IG5ld0FjdGlvbjtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIGluLWFwcFxuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbixcblx0XHRcdHRhcmdldEFubm90YXRpb25zU2Vzc2lvbiA9IHRhcmdldEFubm90YXRpb25zPy5TZXNzaW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX1Nlc3Npb247XG5cdFx0bmV3QWN0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uIHx8IHRhcmdldEFubm90YXRpb25zU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uO1xuXG5cdFx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93ICYmIG5ld0FjdGlvbikge1xuXHRcdFx0Ly8gQSBjb21iaW5hdGlvbiBvZiAnQ3JlYXRpb25Sb3cnIGFuZCAnTmV3QWN0aW9uJyBkb2VzIG5vdCBtYWtlIHNlbnNlXG5cdFx0XHR0aHJvdyBFcnJvcihgQ3JlYXRpb24gbW9kZSAnJHtDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3d9JyBjYW4gbm90IGJlIHVzZWQgd2l0aCBhIGN1c3RvbSAnbmV3JyBhY3Rpb24gKCR7bmV3QWN0aW9ufSlgKTtcblx0XHR9XG5cdFx0aWYgKG5hdmlnYXRpb24/LnJvdXRlKSB7XG5cdFx0XHQvLyByb3V0ZSBzcGVjaWZpZWRcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRcdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRcdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb24/LnRvU3RyaW5nKCksXG5cdFx0XHRcdG5hdmlnYXRlVG9UYXJnZXQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UgPyBuYXZpZ2F0aW9uLnJvdXRlIDogdW5kZWZpbmVkIC8vIG5hdmlnYXRlIG9ubHkgaW4gTmV3UGFnZSBtb2RlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8vIG5vIG5hdmlnYXRpb24gb3Igbm8gcm91dGUgc3BlY2lmaWVkIC0gZmFsbGJhY2sgdG8gaW5saW5lIGNyZWF0ZSBpZiBvcmlnaW5hbCBjcmVhdGlvbiBtb2RlIHdhcyAnTmV3UGFnZSdcblx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UpIHtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRcdC8vIEluIGNhc2UgdGhlcmUgd2FzIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjcmVhdGVBdEVuZCB3ZSBmb3JjZSBpdCB0byBmYWxzZVxuXHRcdGlmIChvcmlnaW5hbFRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bW9kZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlLFxuXHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb24/LnRvU3RyaW5nKClcblx0fTtcbn1cblxuY29uc3QgX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR0YXJnZXRQYXRoOiBzdHJpbmcsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlXG4pIHtcblx0bGV0IHByZXNzUHJvcGVydHksIG5hdmlnYXRpb25UYXJnZXQ7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+ID0gY29uc3RhbnQoTWVzc2FnZVR5cGUuTm9uZSk7XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0aWYgKG5hdmlnYXRpb25TZXR0aW5ncyAmJiBsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRpc3BsYXk/LnRhcmdldCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5vdXRib3VuZDtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHksXG5cdFx0XHQhIU1vZGVsSGVscGVyLmdldERyYWZ0Um9vdCh0YXJnZXRFbnRpdHlTZXQpIHx8ICEhTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHRhcmdldEVudGl0eVNldCksXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdFx0KTtcblx0XHRpZiAobmF2aWdhdGlvblRhcmdldCkge1xuXHRcdFx0cHJlc3NQcm9wZXJ0eSA9XG5cdFx0XHRcdFwiLmhhbmRsZXJzLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCggJGNvbnRyb2xsZXIgLCdcIiArIG5hdmlnYXRpb25UYXJnZXQgKyBcIicsICR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9KVwiO1xuXHRcdH1cblx0XHRpZiAoIW5hdmlnYXRpb25UYXJnZXQgJiYgbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ucm91dGUpIHtcblx0XHRcdHByZXNzUHJvcGVydHkgPVxuXHRcdFx0XHRcIkFQSS5vblRhYmxlUm93UHJlc3MoJGV2ZW50LCAkY29udHJvbGxlciwgJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0sIHsgY2FsbEV4dGVuc2lvbjogdHJ1ZSwgdGFyZ2V0UGF0aDogJ1wiICtcblx0XHRcdFx0dGFyZ2V0UGF0aCArXG5cdFx0XHRcdFwiJywgZWRpdGFibGUgOiBcIiArXG5cdFx0XHRcdChNb2RlbEhlbHBlci5nZXREcmFmdFJvb3QodGFyZ2V0RW50aXR5U2V0KSB8fCBNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KVxuXHRcdFx0XHRcdD8gXCIhJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0uZ2V0UHJvcGVydHkoJ0lzQWN0aXZlRW50aXR5JylcIlxuXHRcdFx0XHRcdDogXCJ1bmRlZmluZWRcIikgK1xuXHRcdFx0XHQodGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiIHx8IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IFwiLCBiUmVjcmVhdGVDb250ZXh0OiB0cnVlXCIgOiBcIlwiKSArXG5cdFx0XHRcdFwifSlcIjsgLy9OZWVkIHRvIGFjY2VzcyB0byBEcmFmdFJvb3QgYW5kIERyYWZ0Tm9kZSAhISEhISEhXG5cdFx0fVxuXHR9XG5cdGNvbnN0IHJvd05hdmlnYXRlZEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGZvcm1hdFJlc3VsdChcblx0XHRbcGF0aEluTW9kZWwoXCIvZGVlcGVzdFBhdGhcIiwgXCJpbnRlcm5hbFwiKV0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLm5hdmlnYXRlZFJvdyxcblx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdCk7XG5cdHJldHVybiB7XG5cdFx0cHJlc3M6IHByZXNzUHJvcGVydHksXG5cdFx0YWN0aW9uOiBwcmVzc1Byb3BlcnR5ID8gXCJOYXZpZ2F0aW9uXCIgOiB1bmRlZmluZWQsXG5cdFx0cm93SGlnaGxpZ2h0aW5nOiBjb21waWxlRXhwcmVzc2lvbihjcml0aWNhbGl0eVByb3BlcnR5KSxcblx0XHRyb3dOYXZpZ2F0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKHJvd05hdmlnYXRlZEV4cHJlc3Npb24pLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChVSS5Jc0luYWN0aXZlKSlcblx0fTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbHVtbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIFRoZSBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQgYmFzZWQgb24gTGluZUl0ZW0gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBhbGwgbm9uIHNvcnRhYmxlIGNvbHVtbiBuYW1lcy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcGFyYW0gdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZyb20gYSBwcm9wZXJ0eSB1c2luZyBhIHRleHQgYW5ub3RhdGlvbiB3aXRoIHRleHRPbmx5IGFzIHRleHQgYXJyYW5nZW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgY29sdW1uIGZyb20gdGhlIGVudGl0eVR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uIChcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uOiBzdHJpbmdbXVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZUNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gYW5ub3RhdGlvbkNvbHVtbnM7XG5cdC8vIENhdGNoIGFscmVhZHkgZXhpc3RpbmcgY29sdW1ucyAtIHdoaWNoIHdlcmUgYWRkZWQgYmVmb3JlIGJ5IExpbmVJdGVtIEFubm90YXRpb25zXG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRcdGNvbnN0IGV4aXN0cyA9IGFubm90YXRpb25Db2x1bW5zLnNvbWUoKGNvbHVtbikgPT4ge1xuXHRcdFx0cmV0dXJuIGNvbHVtbi5uYW1lID09PSBwcm9wZXJ0eS5uYW1lO1xuXHRcdH0pO1xuXG5cdFx0Ly8gaWYgdGFyZ2V0IHR5cGUgZXhpc3RzLCBpdCBpcyBhIGNvbXBsZXggcHJvcGVydHkgYW5kIHNob3VsZCBiZSBpZ25vcmVkXG5cdFx0aWYgKCFwcm9wZXJ0eS50YXJnZXRUeXBlICYmICFleGlzdHMpIHtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbzogQ29tcGxleFByb3BlcnR5SW5mbyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRhYmxlVHlwZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllcyk7XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdC8vIEluY2x1ZGUgdGV4dCBwcm9wZXJ0aWVzIGZvdW5kIGR1cmluZyBhbmFseXNpcyBvbiBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zXG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5wdXNoKC4uLnJlbGF0ZWRQcm9wZXJ0aWVzSW5mby50ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHQuLi5jb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NXcmFwcGluZ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnR5cGUgPSBfZ2V0RXhwb3J0RGF0YVR5cGUocHJvcGVydHkudHlwZSwgcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMSk7XG5cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0TmFtZSkge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudW5pdFByb3BlcnR5ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXROYW1lO1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiQ3VycmVuY3lcIjsgLy8gRm9yY2UgdG8gYSBjdXJyZW5jeSBiZWNhdXNlIHRoZXJlJ3MgYSB1bml0UHJvcGVydHkgKG90aGVyd2lzZSB0aGUgdmFsdWUgaXNuJ3QgcHJvcGVybHkgZm9ybWF0dGVkIHdoZW4gZXhwb3J0ZWQpXG5cdFx0XHRcdH0gZWxzZSBpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXRTdHJpbmcpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnVuaXQgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdFN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lTmFtZSkge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudGltZXpvbmVQcm9wZXJ0eSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZU5hbWU7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy51dGMgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVTdHJpbmcpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnRpbWV6b25lID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lU3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gdXBkYXRlIFByb3BlcnR5IExhYmVsIHdoZW4gaXQncyByZWZlcmVuY2VkIG9ubHkgb25jZSBpbiBhIGNvbHVtbiwgbmV3IGxhYmVsIHdpbGwgYmUgdGhlIGxhYmVsIG9mIHRoZSBjb2x1bW5cblx0XHRcdHVwZGF0ZVByb3BlcnR5TGFiZWwoYW5ub3RhdGlvbkNvbHVtbnMsIGNvbHVtbnNUb0JlQ3JlYXRlZCwgY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmIChhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblx0XHQvLyBJbiBjYXNlIGEgcHJvcGVydHkgaGFzIGRlZmluZWQgYSAjVGV4dE9ubHkgdGV4dCBhcnJhbmdlbWVudCBkb24ndCBvbmx5IGNyZWF0ZSB0aGUgY29tcGxleCBwcm9wZXJ0eSB3aXRoIHRoZSB0ZXh0IHByb3BlcnR5IGFzIGEgY2hpbGQgcHJvcGVydHksXG5cdFx0Ly8gYnV0IGFsc28gdGhlIHByb3BlcnR5IGl0c2VsZiBhcyBpdCBjYW4gYmUgdXNlZCBhcyB3aXRoaW4gdGhlIHNvcnRDb25kaXRpb25zIG9yIG9uIGN1c3RvbSBjb2x1bW5zLlxuXHRcdC8vIFRoaXMgc3RlcCBtdXN0IGJlIHZhbGlkZSBhbHNvIGZyb20gdGhlIGNvbHVtbnMgYWRkZWQgdmlhIExpbmVJdGVtcyBvciBmcm9tIGEgY29sdW1uIGF2YWlsYWJsZSBvbiB0aGUgcDEzbi5cblx0XHRpZiAoZ2V0RGlzcGxheU1vZGUocHJvcGVydHkpID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyA9IG5vblNvcnRhYmxlQ29sdW1ucy5jb25jYXQocHJvcGVydHkubmFtZSk7XG5cdFx0XHR0YWJsZUNvbHVtbnMucHVzaChcblx0XHRcdFx0Z2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFtdXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBDcmVhdGUgYSBwcm9wZXJ0eUluZm8gZm9yIGVhY2ggcmVsYXRlZCBwcm9wZXJ0eS5cblx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBfY3JlYXRlUmVsYXRlZENvbHVtbnMoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdHRhYmxlQ29sdW1ucyxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHQpO1xuXG5cdHJldHVybiB0YWJsZUNvbHVtbnMuY29uY2F0KHJlbGF0ZWRDb2x1bW5zKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgY29sdW1uIGRlZmluaXRpb24gZnJvbSBhIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBFbnRpdHkgdHlwZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGNvbHVtbiBpcyBjcmVhdGVkXG4gKiBAcGFyYW0gZnVsbFByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEBwYXJhbSByZWxhdGl2ZVBhdGggVGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgY29udGV4dFxuICogQHBhcmFtIHVzZURhdGFGaWVsZFByZWZpeCBTaG91bGQgYmUgcHJlZml4ZWQgd2l0aCBcIkRhdGFGaWVsZDo6XCIsIGVsc2UgaXQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIFwiUHJvcGVydHk6OlwiXG4gKiBAcGFyYW0gYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiBEZWNpZGVzIHdoZXRoZXIgdGhlIGNvbHVtbiBzaG91bGQgYmUgYXZhaWxhYmxlIGZvciBhZGFwdGF0aW9uXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBhbGwgbm9uLXNvcnRhYmxlIGNvbHVtbiBuYW1lc1xuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbkhlbHBlciBmb3IgdGhlIGVudGl0eVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZyb20gYSBwcm9wZXJ0eSB1c2luZyBhIHRleHQgYW5ub3RhdGlvbiB3aXRoIHRleHRPbmx5IGFzIHRleHQgYXJyYW5nZW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvbiBjb2x1bW4gZGVmaW5pdGlvblxuICovXG5jb25zdCBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmcsXG5cdHVzZURhdGFGaWVsZFByZWZpeDogYm9vbGVhbixcblx0YXZhaWxhYmxlRm9yQWRhcHRhdGlvbjogYm9vbGVhbixcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0YWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb246IHN0cmluZ1tdXG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4ge1xuXHRjb25zdCBuYW1lID0gdXNlRGF0YUZpZWxkUHJlZml4ID8gcmVsYXRpdmVQYXRoIDogYFByb3BlcnR5Ojoke3JlbGF0aXZlUGF0aH1gO1xuXHRjb25zdCBrZXkgPSAodXNlRGF0YUZpZWxkUHJlZml4ID8gXCJEYXRhRmllbGQ6OlwiIDogXCJQcm9wZXJ0eTo6XCIpICsgcmVwbGFjZVNwZWNpYWxDaGFycyhyZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5KTtcblx0Y29uc3QgaXNIaWRkZW4gPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlO1xuXHRjb25zdCBncm91cFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb3BlcnR5Lm5hbWUgPyBfc2xpY2VBdFNsYXNoKHByb3BlcnR5Lm5hbWUsIHRydWUsIGZhbHNlKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSBwcm9wZXJ0eS5uYW1lO1xuXHRjb25zdCBsYWJlbCA9IGdldExhYmVsKHByb3BlcnR5LCBpc0dyb3VwKTtcblx0Y29uc3QgZXhwb3J0VHlwZTogc3RyaW5nID0gX2dldEV4cG9ydERhdGFUeXBlKHByb3BlcnR5LnR5cGUpO1xuXHRjb25zdCBzRGF0ZUlucHV0Rm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5EYXRlXCIgPyBcIllZWVktTU0tRERcIiA6IHVuZGVmaW5lZDtcblx0Y29uc3QgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldERhdGFGaWVsZERhdGFUeXBlKHByb3BlcnR5KTtcblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSwgZGF0YVR5cGUpO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5ID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkNvbW1vblwiLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNLZXksIFtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRdKVswXTtcblx0Y29uc3QgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uID1cblx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24gJiYgdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uLmluZGV4T2YocmVsYXRpdmVQYXRoKSA+PSAwO1xuXHRjb25zdCBzb3J0YWJsZSA9ICghaXNIaWRkZW4gfHwgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uKSAmJiBub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihyZWxhdGl2ZVBhdGgpID09PSAtMTtcblx0Y29uc3QgdHlwZUNvbmZpZyA9IHtcblx0XHRjbGFzc05hbWU6IHByb3BlcnR5LnR5cGUgfHwgZGF0YVR5cGUsXG5cdFx0Zm9ybWF0T3B0aW9uczogcHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0Y29uc3RyYWludHM6IHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHR9O1xuXHRsZXQgZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkV4cG9ydFNldHRpbmdzIHwgbnVsbCA9IG51bGw7XG5cdGlmIChfaXNFeHBvcnRhYmxlQ29sdW1uKHByb3BlcnR5KSkge1xuXHRcdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRjb25zdCB0aW1lem9uZVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkocHJvcGVydHkpO1xuXHRcdGNvbnN0IHVuaXRUZXh0ID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0Y29uc3QgdGltZXpvbmVUZXh0ID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cblx0XHRleHBvcnRTZXR0aW5ncyA9IHtcblx0XHRcdHR5cGU6IGV4cG9ydFR5cGUsXG5cdFx0XHRpbnB1dEZvcm1hdDogc0RhdGVJbnB1dEZvcm1hdCxcblx0XHRcdHNjYWxlOiBwcm9wZXJ0eS5zY2FsZSxcblx0XHRcdGRlbGltaXRlcjogcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uSW50NjRcIlxuXHRcdH07XG5cblx0XHRpZiAodW5pdFByb3BlcnR5KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSB1bml0UHJvcGVydHkubmFtZTtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnR5cGUgPSBcIkN1cnJlbmN5XCI7IC8vIEZvcmNlIHRvIGEgY3VycmVuY3kgYmVjYXVzZSB0aGVyZSdzIGEgdW5pdFByb3BlcnR5IChvdGhlcndpc2UgdGhlIHZhbHVlIGlzbid0IHByb3Blcmx5IGZvcm1hdHRlZCB3aGVuIGV4cG9ydGVkKVxuXHRcdH0gZWxzZSBpZiAodW5pdFRleHQpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnVuaXQgPSBgJHt1bml0VGV4dH1gO1xuXHRcdH1cblx0XHRpZiAodGltZXpvbmVQcm9wZXJ0eSkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MudGltZXpvbmVQcm9wZXJ0eSA9IHRpbWV6b25lUHJvcGVydHkubmFtZTtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnV0YyA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGltZXpvbmVUZXh0KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy50aW1lem9uZSA9IHRpbWV6b25lVGV4dC50b1N0cmluZygpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzKHJlbGF0aXZlUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSB7XG5cdFx0a2V5OiBrZXksXG5cdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdGxhYmVsOiBsYWJlbCxcblx0XHRncm91cExhYmVsOiBpc0dyb3VwID8gZ2V0TGFiZWwocHJvcGVydHkpIDogdW5kZWZpbmVkLFxuXHRcdGdyb3VwOiBpc0dyb3VwID8gZ3JvdXBQYXRoIDogdW5kZWZpbmVkLFxuXHRcdGFubm90YXRpb25QYXRoOiBmdWxsUHJvcGVydHlQYXRoLFxuXHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRhdmFpbGFiaWxpdHk6ICFhdmFpbGFibGVGb3JBZGFwdGF0aW9uIHx8IGlzSGlkZGVuID8gXCJIaWRkZW5cIiA6IFwiQWRhcHRhdGlvblwiLFxuXHRcdG5hbWU6IG5hbWUsXG5cdFx0cmVsYXRpdmVQYXRoOiByZWxhdGl2ZVBhdGgsXG5cdFx0c29ydGFibGU6IHNvcnRhYmxlLFxuXHRcdGlzR3JvdXBhYmxlOiBhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpID8gISFhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5R3JvdXBhYmxlKHByb3BlcnR5KSA6IHNvcnRhYmxlLFxuXHRcdGlzS2V5OiBwcm9wZXJ0eS5pc0tleSxcblx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHR5cGVDb25maWc6IHR5cGVDb25maWcgYXMgUHJvcGVydHlUeXBlQ29uZmlnLFxuXHRcdGltcG9ydGFuY2U6IGdldEltcG9ydGFuY2UocHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0LCBzZW1hbnRpY0tleXMpLFxuXHRcdGFkZGl0aW9uYWxMYWJlbHM6IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsc1xuXHR9O1xuXHRjb25zdCBzVG9vbHRpcCA9IF9nZXRUb29sdGlwKHByb3BlcnR5KTtcblx0aWYgKHNUb29sdGlwKSB7XG5cdFx0Y29sdW1uLnRvb2x0aXAgPSBzVG9vbHRpcDtcblx0fVxuXHRjb25zdCB0YXJnZXRWYWx1ZWZyb21EUCA9IGdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQocHJvcGVydHkpO1xuXHRpZiAoaXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdChwcm9wZXJ0eSkgJiYgdHlwZW9mIHRhcmdldFZhbHVlZnJvbURQID09PSBcInN0cmluZ1wiICYmIGNvbHVtbi5leHBvcnRTZXR0aW5ncykge1xuXHRcdGNvbHVtbi5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IHRhcmdldFZhbHVlZnJvbURQO1xuXHRcdGNvbHVtbi5leHBvcnRTZXR0aW5ncy50ZW1wbGF0ZSA9IFwiezB9L1wiICsgdGFyZ2V0VmFsdWVmcm9tRFA7XG5cdH1cblx0cmV0dXJuIGNvbHVtbjtcbn07XG5cbi8qKlxuICogVXBkYXRlIHByb3BlcnR5IGxhYmVsIGluIGNhc2UgaXQncyBvbmx5IHJlZmVyZW5jZWQgaW4gb25lIGNvbHVtbi4gVGhlIGxhYmVsIG9mIHRoZSBjb2x1bW4gbXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHByb3BlcnR5IGxhYmVsLlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkIGJhc2VkIG9uIExpbmVJdGVtIGFubm90YXRpb25zLlxuICogQHBhcmFtIGNvbHVtbnNUb0JlQ3JlYXRlZCBUaGUgY29sdW1ucyB0byBiZSBjcmVhdGVkXG4gKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydHlMYWJlbChcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uXG4pOiB2b2lkIHtcblx0Y29uc3QgbGlua2VkQW5ub3RhdGlvbkNvbHVtbnMgPSBhbm5vdGF0aW9uQ29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLnByb3BlcnR5SW5mb3M/LmluY2x1ZGVzKGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoKSk7XG5cdGlmIChcblx0XHRsaW5rZWRBbm5vdGF0aW9uQ29sdW1ucz8ubGVuZ3RoID09PSAxICYmXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkW2NvbHVtbkluZm8ucmVsYXRpdmVQYXRoXSAmJlxuXHRcdGxpbmtlZEFubm90YXRpb25Db2x1bW5zWzBdLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCA9PT0gMVxuXHQpIHtcblx0XHRjb2x1bW5JbmZvLmxhYmVsID0gbGlua2VkQW5ub3RhdGlvbkNvbHVtbnNbMF0ubGFiZWw7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIEJvb2xlYW4gdHJ1ZSBmb3IgZXhwb3J0YWJsZSBjb2x1bW5zLCBmYWxzZSBmb3Igbm9uIGV4cG9ydGFibGUgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFRoZSBkYXRhRmllbGQgb3IgcHJvcGVydHkgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyBUcnVlIGZvciBleHBvcnRhYmxlIGNvbHVtbiwgZmFsc2UgZm9yIG5vbiBleHBvcnRhYmxlIGNvbHVtblxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBfaXNFeHBvcnRhYmxlQ29sdW1uKHNvdXJjZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdGxldCBwcm9wZXJ0eVR5cGUsIHByb3BlcnR5O1xuXHRjb25zdCBkYXRhRmllbGREZWZhdWx0UHJvcGVydHkgPSAoc291cmNlIGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucy5VST8uRGF0YUZpZWxkRGVmYXVsdDtcblx0aWYgKGlzUHJvcGVydHkoc291cmNlKSAmJiBkYXRhRmllbGREZWZhdWx0UHJvcGVydHk/LiRUeXBlKSB7XG5cdFx0aWYgKGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKGRhdGFGaWVsZERlZmF1bHRQcm9wZXJ0eSkgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cHJvcGVydHlUeXBlID0gZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5Py4kVHlwZTtcblx0fSBlbHNlIGlmIChpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihzb3VyY2UgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cHJvcGVydHkgPSBzb3VyY2UgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcztcblx0XHRwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eS4kVHlwZTtcblx0XHRpZiAocHJvcGVydHlUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmIChwcm9wZXJ0eSBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlKSB7XG5cdFx0XHQvL0ZvciBDaGFydFxuXHRcdFx0cHJvcGVydHlUeXBlID0gKHByb3BlcnR5IGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldD8uJFR5cGU7XG5cdFx0XHRyZXR1cm4gVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZS5pbmRleE9mKHByb3BlcnR5VHlwZSkgPT09IC0xO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQocHJvcGVydHkgYXMgRGF0YUZpZWxkKS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk1lZGlhVHlwZT8udGVybSA9PT0gXCJPcmcuT0RhdGEuQ29yZS5WMS5NZWRpYVR5cGVcIiAmJlxuXHRcdFx0KHByb3BlcnR5IGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5pc1VSTCAhPT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0Ly9Gb3IgU3RyZWFtXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVcblx0XHQ/IFtcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwXG5cdFx0ICBdLmluZGV4T2YocHJvcGVydHlUeXBlKSA9PT0gLTFcblx0XHQ6IHRydWU7XG59XG5cbi8qKlxuICogUmV0dXJucyBCb29sZWFuIHRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBEaWZmZXJlbnQgRGF0YUZpZWxkIHR5cGVzIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyBUcnVlIGZvciB2YWxpZCBjb2x1bW5zLCBmYWxzZSBmb3IgaW52YWxpZCBjb2x1bW5zXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfaXNWYWxpZENvbHVtbiA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJldHVybiAhIWRhdGFGaWVsZC5JbmxpbmU7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0ZGVmYXVsdDpcblx0XHQvLyBUb2RvOiBSZXBsYWNlIHdpdGggcHJvcGVyIExvZyBzdGF0ZW1lbnQgb25jZSBhdmFpbGFibGVcblx0XHQvLyAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIERhdGFGaWVsZCBBYnN0cmFjdCB0eXBlOiBcIiArIGRhdGFGaWVsZC4kVHlwZSk7XG5cdH1cbn07XG4vKipcbiAqIFJldHVybnMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiBhIERhdGFGaWVsZCBvciBEYXRhUG9pbnQgYW5ub3RhdGlvbi5cbiAqXG4gKiBTQVAgRmlvcmkgZWxlbWVudHMgd2lsbCBldmFsdWF0ZSBlaXRoZXIgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGRlZmluZWQgb24gdGhlIGFubm90YXRpb24gaXRzZWxmIG9yIG9uIHRoZSB0YXJnZXQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHRoYXQgaXMgZXZhbHVhdGVkIGJ5IFNBUCBGaW9yaSBlbGVtZW50cy5cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIGJpbmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgX2dldFZpc2libGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHRhcmdldE9iamVjdDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyA9IGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdGxldCBwcm9wZXJ0eVZhbHVlO1xuXHRpZiAodGFyZ2V0T2JqZWN0KSB7XG5cdFx0c3dpdGNoICh0YXJnZXRPYmplY3QuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0YXJnZXRPYmplY3QuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRcdC8vIGlmIGl0IGlzIGEgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBwb2ludGluZyB0byBhIERhdGFQb2ludCB3ZSBsb29rIGF0IHRoZSBkYXRhUG9pbnQncyB2YWx1ZVxuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0Py5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldD8uVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHQvLyBGSVhNRSBQcm92ZSBtZSB3cm9uZyB0aGF0IHRoaXMgaXMgdXNlbGVzc1xuXHRjb25zdCBpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkID0gLypmb3JtYXRPcHRpb25zPy5pc0FuYWx5dGljcyA/IFVJLklzRXhwYW5kZWQgOiovIGNvbnN0YW50KGZhbHNlKTtcblx0Y29uc3QgaXNBbmFseXRpY2FsTGVhZiA9IC8qZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBlcXVhbChVSS5Ob2RlTGV2ZWwsIDApIDoqLyBjb25zdGFudChmYWxzZSk7XG5cblx0Ly8gQSBkYXRhIGZpZWxkIGlzIHZpc2libGUgaWY6XG5cdC8vIC0gdGhlIFVJLkhpZGRlbiBleHByZXNzaW9uIGluIHRoZSBvcmlnaW5hbCBhbm5vdGF0aW9uIGRvZXMgbm90IGV2YWx1YXRlIHRvICd0cnVlJ1xuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgdGFyZ2V0IHByb3BlcnR5IGRvZXMgbm90IGV2YWx1YXRlIHRvICd0cnVlJ1xuXHQvLyAtIGluIGNhc2Ugb2YgQW5hbHl0aWNzIGl0J3Mgbm90IHZpc2libGUgZm9yIGFuIGV4cGFuZGVkIEdyb3VwSGVhZGVyXG5cdHJldHVybiBhbmQoXG5cdFx0Li4uW1xuXHRcdFx0bm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpLFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHQhIXByb3BlcnR5VmFsdWUsXG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgJiYgbm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwcm9wZXJ0eVZhbHVlLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpLFxuXHRcdFx0b3Iobm90KGlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQpLCBpc0FuYWx5dGljYWxMZWFmKVxuXHRcdF1cblx0KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBoaWRkZW4gYmluZGluZyBleHByZXNzaW9ucyBmb3IgYSBmaWVsZCBncm91cC5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkR3JvdXAgRGF0YUZpZWxkIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyBDb21waWxlIGJpbmRpbmcgb2YgZmllbGQgZ3JvdXAgZXhwcmVzc2lvbnMuXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zID0gZnVuY3Rpb24gKGRhdGFGaWVsZEdyb3VwOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGlmIChcblx0XHRkYXRhRmllbGRHcm91cC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlXG5cdCkge1xuXHRcdGlmIChkYXRhRmllbGRHcm91cD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZEdyb3VwLmFubm90YXRpb25zLlVJLkhpZGRlbiksIHRydWUpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldC4kdGFyZ2V0LkRhdGE/LmZvckVhY2goKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzKSA9PiB7XG5cdFx0XHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucy5wdXNoKF9nZXRWaXNpYmxlRXhwcmVzc2lvbih7IHRhcmdldE9iamVjdDogaW5uZXJEYXRhRmllbGQgfSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoKSk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2Uob3IoLi4uZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zKSwgY29uc3RhbnQodHJ1ZSksIGNvbnN0YW50KGZhbHNlKSkpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgcHJvcGVydHkgYW5kIGRhdGFGaWVsZC5cbiAqXG4gKiBAcGFyYW0gW3Byb3BlcnR5XSBQcm9wZXJ0eSwgRGF0YUZpZWxkIG9yIE5hdmlnYXRpb24gUHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSBpc0dyb3VwXG4gKiBAcmV0dXJucyBMYWJlbCBvZiB0aGUgcHJvcGVydHkgb3IgRGF0YUZpZWxkXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBnZXRMYWJlbCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5LCBpc0dyb3VwID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoaXNQcm9wZXJ0eShwcm9wZXJ0eSkgfHwgaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0Y29uc3QgZGF0YUZpZWxkRGVmYXVsdCA9IChwcm9wZXJ0eSBhcyBQcm9wZXJ0eSkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0O1xuXHRcdGlmIChkYXRhRmllbGREZWZhdWx0ICYmICFkYXRhRmllbGREZWZhdWx0LnF1YWxpZmllciAmJiBkYXRhRmllbGREZWZhdWx0LkxhYmVsPy52YWx1ZU9mKCkpIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkRGVmYXVsdC5MYWJlbD8udmFsdWVPZigpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKTtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHByb3BlcnR5KSkge1xuXHRcdGlmICghIWlzR3JvdXAgJiYgcHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/Lm5hbWVcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2UgaWYgKHByb3BlcnR5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKClcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHR9XG59O1xuXG5jb25zdCBfZ2V0VG9vbHRpcCA9IGZ1bmN0aW9uIChzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghc291cmNlKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkgfHwgc291cmNlLmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mbykge1xuXHRcdHJldHVybiBzb3VyY2UuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihzb3VyY2UuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mby52YWx1ZU9mKCkpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhzb3VyY2UpKSB7XG5cdFx0cmV0dXJuIHNvdXJjZS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihzb3VyY2UuVmFsdWUuJHRhcmdldC5hbm5vdGF0aW9ucy5Db21tb24uUXVpY2tJbmZvLnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChzb3VyY2UuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRjb25zdCBkYXRhcG9pbnRUYXJnZXQgPSBzb3VyY2UuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludDtcblx0XHRyZXR1cm4gZGF0YXBvaW50VGFyZ2V0Py5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhcG9pbnRUYXJnZXQuVmFsdWUuJHRhcmdldC5hbm5vdGF0aW9ucy5Db21tb24uUXVpY2tJbmZvLnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShjb2xOYW1lOiBzdHJpbmcsIGlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXA/OiBCb29sZWFuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRwYXRoSW5Nb2RlbChgc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcmAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRwYXRoSW5Nb2RlbChgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRjb2xOYW1lLFxuXHRcdFx0aXNTZW1hbnRpY0tleUluRmllbGRHcm91cFxuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLmdldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXJcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJvcGVydHlJbmZvIGZvciBlYWNoIGlkZW50aWZpZWQgcHJvcGVydHkgY29uc3VtZWQgYnkgYSBMaW5lSXRlbS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIElkZW50aWZpZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBleGlzdGluZ0NvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBMaW5lSXRlbXMgYW5kIFByb3BlcnRpZXMgb2YgZW50aXR5VHlwZS5cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbiBuYW1lcyB3aGljaCBjYW5ub3QgYmUgc29ydGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGZvciB0aGUgTGluZUl0ZW1cbiAqIEBwYXJhbSB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24gVGhlIGFycmF5IG9mIGNvbHVtbnMgZnJvbSBhIHByb3BlcnR5IHVzaW5nIGEgdGV4dCBhbm5vdGF0aW9uIHdpdGggdGV4dE9ubHkgYXMgdGV4dCBhcnJhbmdlbWVudC5cbiAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQuXG4gKi9cbmNvbnN0IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyA9IGZ1bmN0aW9uIChcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGV4aXN0aW5nQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbjogc3RyaW5nW11cbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgcmVsYXRlZENvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW107XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0T2JqZWN0LmtleXMoY29sdW1uc1RvQmVDcmVhdGVkKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0sXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChuYW1lKSxcblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgdGhlIHJlbGF0ZWQgY29sdW1uIGFscmVhZHkgZXhpc3RzLlxuXHRcdFx0cmVsYXRlZENvbHVtbiA9IGV4aXN0aW5nQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAocmVsYXRlZENvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBDYXNlIDE6IEtleSBjb250YWlucyBEYXRhRmllbGQgcHJlZml4IHRvIGVuc3VyZSBhbGwgcHJvcGVydHkgY29sdW1ucyBoYXZlIHRoZSBzYW1lIGtleSBmb3JtYXQuXG5cdFx0XHQvLyBOZXcgY3JlYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaXMgc2V0IHRvIGhpZGRlbi5cblx0XHRcdGNvbnN0IGNvbHVtbiA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHRcdFx0KTtcblx0XHRcdGNvbHVtbi5pc1BhcnRPZkxpbmVJdGVtID0gZXhpc3RpbmdDb2x1bW5zLnNvbWUoXG5cdFx0XHRcdChleGlzdGluZ0NvbHVtbikgPT4gZXhpc3RpbmdDb2x1bW4ucHJvcGVydHlJbmZvcz8uaW5jbHVkZXMobmFtZSkgJiYgZXhpc3RpbmdDb2x1bW4uaXNQYXJ0T2ZMaW5lSXRlbVxuXHRcdFx0KTtcblx0XHRcdHVwZGF0ZVByb3BlcnR5TGFiZWwoZXhpc3RpbmdDb2x1bW5zLCBjb2x1bW5zVG9CZUNyZWF0ZWQsIGNvbHVtbik7XG5cdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0fSBlbHNlIGlmIChyZWxhdGVkQ29sdW1uLmFubm90YXRpb25QYXRoICE9PSBhbm5vdGF0aW9uUGF0aCB8fCByZWxhdGVkQ29sdW1uLnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdC8vIENhc2UgMjogVGhlIGV4aXN0aW5nIGNvbHVtbiBwb2ludHMgdG8gYSBMaW5lSXRlbSAob3IpXG5cdFx0XHQvLyBDYXNlIDM6IFRoaXMgaXMgYSBzZWxmIHJlZmVyZW5jZSBmcm9tIGFuIGV4aXN0aW5nIGNvbHVtblxuXG5cdFx0XHRjb25zdCBuZXdOYW1lID0gYFByb3BlcnR5Ojoke25hbWV9YDtcblxuXHRcdFx0Ly8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVsYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGluIGEgcHJldmlvdXMgaXRlcmF0aW9uLlxuXHRcdFx0aWYgKCFleGlzdGluZ0NvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmV3TmFtZSkpIHtcblx0XHRcdFx0Ly8gQ3JlYXRlIGEgbmV3IHByb3BlcnR5IGNvbHVtbiB3aXRoICdQcm9wZXJ0eTo6JyBwcmVmaXgsXG5cdFx0XHRcdC8vIFNldCBpdCB0byBoaWRkZW4gYXMgaXQgaXMgb25seSBjb25zdW1lZCBieSBDb21wbGV4IHByb3BlcnR5IGluZm9zLlxuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbHVtbi5pc1BhcnRPZkxpbmVJdGVtID0gcmVsYXRlZENvbHVtbi5pc1BhcnRPZkxpbmVJdGVtO1xuXHRcdFx0XHR1cGRhdGVQcm9wZXJ0eUxhYmVsKGV4aXN0aW5nQ29sdW1ucywgY29sdW1uc1RvQmVDcmVhdGVkLCBjb2x1bW4pO1xuXHRcdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbbmFtZV0gPSBuZXdOYW1lO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0ZXhpc3RpbmdDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpICYmXG5cdFx0XHRcdGV4aXN0aW5nQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5pbmNsdWRlcyhuYW1lKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRoZSBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHk6OicgZm9yIHVuaXF1ZW5lc3MuXG5cdC8vIFVwZGF0ZSB0aGUgc2FtZSBpbiBvdGhlciBwcm9wZXJ0eUluZm9zW10gcmVmZXJlbmNlcyB3aGljaCBwb2ludCB0byB0aGlzIHByb3BlcnR5LlxuXHRleGlzdGluZ0NvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8ubWFwKChwcm9wZXJ0eUluZm8pID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm8pO1xuXHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcz8ubWFwKFxuXHRcdFx0KHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdCk7XG5cdH0pO1xuXG5cdHJldHVybiByZWxhdGVkQ29sdW1ucztcbn07XG5cbi8qKlxuICogR2V0dGluZyB0aGUgQ29sdW1uIE5hbWVcbiAqIElmIGl0IHBvaW50cyB0byBhIERhdGFGaWVsZCB3aXRoIG9uZSBwcm9wZXJ0eSBvciBEYXRhUG9pbnQgd2l0aCBvbmUgcHJvcGVydHksIGl0IHdpbGwgdXNlIHRoZSBwcm9wZXJ0eSBuYW1lXG4gKiBoZXJlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZXhpc3RpbmcgZmxleCBjaGFuZ2VzLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMgVGhlIG5hbWUgb2YgYW5ub3RhdGlvbiBjb2x1bW5zXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUgPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdC8vIFRoaXMgaXMgbmVlZGVkIGFzIHdlIGhhdmUgZmxleGliaWxpdHkgY2hhbmdlcyBhbHJlYWR5IHRoYXQgd2UgaGF2ZSB0byBjaGVjayBhZ2FpbnN0XG5cdGlmIChpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkgJiYgZGF0YUZpZWxkLlZhbHVlPy5wYXRoKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5WYWx1ZT8ucGF0aDtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LnBhdGgpIHtcblx0XHQvLyBUaGlzIGlzIGZvciByZW1vdmluZyBkdXBsaWNhdGUgcHJvcGVydGllcy4gRm9yIGV4YW1wbGUsICdQcm9ncmVzcycgUHJvcGVydHkgaXMgcmVtb3ZlZCBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBEYXRhUG9pbnRcblx0XHRyZXR1cm4gKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUucGF0aDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBQcm9wZXJ0eUluZm8gZm9yIHRoZSBpZGVudGlmaWVkIGFkZGl0aW9uYWwgcHJvcGVydHkgZm9yIHRoZSBBTFAgdGFibGUgdXNlLWNhc2UuXG4gKlxuICogRm9yIGUuZy4gSWYgVUkuSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5LCBpbmNsdWRlIHRoaXMgdGVjaG5pY2FsIHByb3BlcnR5IGluIHRoZSBhZGRpdGlvbmFsUHJvcGVydGllcyBvZiBDb21wbGV4UHJvcGVydHlJbmZvIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSBjb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmb3IgTGluZUl0ZW1zIGFuZCBQcm9wZXJ0aWVzIG9mIGVudGl0eVR5cGUgZnJvbSB0aGUgdGFibGUgdmlzdWFsaXphdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eUluZm8gb2YgdGhlIHRlY2huaWNhbCBwcm9wZXJ0eSB0byBiZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBjb2x1bW5zLlxuICogQHByaXZhdGVcbiAqL1xuXG5jb25zdCBjcmVhdGVUZWNobmljYWxQcm9wZXJ0eSA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sIHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG5cdGNvbnN0IGtleSA9IGBQcm9wZXJ0eV9UZWNobmljYWw6OiR7bmFtZX1gO1xuXHQvLyBWYWxpZGF0ZSBpZiB0aGUgdGVjaG5pY2FsIHByb3BlcnR5IGhhc24ndCB5ZXQgYmVlbiBjcmVhdGVkIG9uIHByZXZpb3VzIGl0ZXJhdGlvbnMuXG5cdGNvbnN0IGNvbHVtbkV4aXN0cyA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5ID09PSBrZXkpO1xuXHQvLyBSZXRyaWV2ZSB0aGUgc2ltcGxlIHByb3BlcnR5IHVzZWQgYnkgdGhlIGhpZGRlbiBhbm5vdGF0aW9uLCBpdCB3aWxsIGJlIHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgbWFuZGF0b3J5IGF0dHJpYnV0ZXMgb2YgbmV3bHkgY3JlYXRlZCB0ZWNobmljYWwgcHJvcGVydHkuIEZvciBlLmcuIHJlbGF0aXZlUGF0aFxuXHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPVxuXHRcdCFjb2x1bW5FeGlzdHMgJiYgKGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSAmJiAhY29sdW1uLnByb3BlcnR5SW5mb3MpIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikhO1xuXHRpZiAoYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgdGVjaG5pY2FsQ29sdW1uOiBUZWNobmljYWxDb2x1bW4gPSB7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGxhYmVsOiBhZGRpdGlvbmFsUHJvcGVydHkubGFiZWwsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYWRkaXRpb25hbFByb3BlcnR5LmFubm90YXRpb25QYXRoLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkhpZGRlblwiLFxuXHRcdFx0bmFtZToga2V5LFxuXHRcdFx0cmVsYXRpdmVQYXRoOiBhZGRpdGlvbmFsUHJvcGVydHkucmVsYXRpdmVQYXRoLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0aXNHcm91cGFibGU6IGZhbHNlLFxuXHRcdFx0aXNLZXk6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcblx0XHRcdGFnZ3JlZ2F0YWJsZTogZmFsc2UsXG5cdFx0XHRleHRlbnNpb246IHtcblx0XHRcdFx0dGVjaG5pY2FsbHlHcm91cGFibGU6IHRydWUsXG5cdFx0XHRcdHRlY2huaWNhbGx5QWdncmVnYXRhYmxlOiB0cnVlXG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb2x1bW5zLnB1c2godGVjaG5pY2FsQ29sdW1uKTtcblx0XHRyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcFtuYW1lXSA9IHRlY2huaWNhbENvbHVtbi5uYW1lO1xuXHR9XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGRhdGEgZmllbGQgbGFiZWxzIGhhdmUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gZmllbGRHcm91cE5hbWUgVGhlIGBEYXRhRmllbGRgIG5hbWUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgYHNob3dEYXRhRmllbGRzTGFiZWxgIHZhbHVlIGZyb20gdGhlIG1hbmlmZXN0XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbCA9IGZ1bmN0aW9uIChmaWVsZEdyb3VwTmFtZTogc3RyaW5nLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Db2x1bW5zID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKT8uY29sdW1ucztcblx0Y29uc3QgYUNvbHVtbktleXMgPSBvQ29sdW1ucyAmJiBPYmplY3Qua2V5cyhvQ29sdW1ucyk7XG5cdHJldHVybiAoXG5cdFx0YUNvbHVtbktleXMgJiZcblx0XHQhIWFDb2x1bW5LZXlzLmZpbmQoZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4ga2V5ID09PSBmaWVsZEdyb3VwTmFtZSAmJiBvQ29sdW1uc1trZXldLnNob3dEYXRhRmllbGRzTGFiZWw7XG5cdFx0fSlcblx0KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgd2l0aCByZXNwZWN0IHRvIHRoZSByb290IGVudGl0eS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBgRGF0YUZpZWxkYCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aFxuICovXG5jb25zdCBfZ2V0UmVsYXRpdmVQYXRoID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB7XG5cdGxldCByZWxhdGl2ZVBhdGggPSBcIlwiO1xuXG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCk/LlZhbHVlPy5wYXRoO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSBkYXRhRmllbGQ/LlRhcmdldD8udmFsdWU7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uR3JvdXA6XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiByZWxhdGl2ZVBhdGg7XG59O1xuXG5jb25zdCBfc2xpY2VBdFNsYXNoID0gZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgaXNMYXN0U2xhc2g6IGJvb2xlYW4sIGlzTGFzdFBhcnQ6IGJvb2xlYW4pIHtcblx0Y29uc3QgaVNsYXNoSW5kZXggPSBpc0xhc3RTbGFzaCA/IHBhdGgubGFzdEluZGV4T2YoXCIvXCIpIDogcGF0aC5pbmRleE9mKFwiL1wiKTtcblxuXHRpZiAoaVNsYXNoSW5kZXggPT09IC0xKSB7XG5cdFx0cmV0dXJuIHBhdGg7XG5cdH1cblx0cmV0dXJuIGlzTGFzdFBhcnQgPyBwYXRoLnN1YnN0cmluZyhpU2xhc2hJbmRleCArIDEsIHBhdGgubGVuZ3RoKSA6IHBhdGguc3Vic3RyaW5nKDAsIGlTbGFzaEluZGV4KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgY29sdW1uIGNvbnRhaW5zIGEgbXVsdGktdmFsdWUgZmllbGQuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgRGF0YUZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBEYXRhRmllbGQgY29ycmVzcG9uZHMgdG8gYSBtdWx0aS12YWx1ZSBmaWVsZC5cbiAqL1xuY29uc3QgX2lzQ29sdW1uTXVsdGlWYWx1ZWQgPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGlmIChpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlZhbHVlKSkge1xuXHRcdGNvbnN0IHByb3BlcnR5T2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCk7XG5cdFx0cmV0dXJuIGlzTXVsdGlWYWx1ZUZpZWxkKHByb3BlcnR5T2JqZWN0UGF0aCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIGEgY29sdW1uIGlzIHNvcnRhYmxlLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIENvbGxlY3Rpb24gb2Ygbm9uLXNvcnRhYmxlIGNvbHVtbiBuYW1lcyBhcyBwZXIgYW5ub3RhdGlvblxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY29sdW1uIGlzIHNvcnRhYmxlXG4gKi9cbmNvbnN0IF9pc0NvbHVtblNvcnRhYmxlID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgcHJvcGVydHlQYXRoOiBzdHJpbmcsIG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihwcm9wZXJ0eVBhdGgpID09PSAtMSAmJiAvLyBDb2x1bW4gaXMgbm90IG1hcmtlZCBhcyBub24tc29ydGFibGUgdmlhIGFubm90YXRpb25cblx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uIHx8XG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb24pXG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBmaWx0ZXJpbmcgb24gdGhlIHRhYmxlIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFJldHVybnMgJ2ZhbHNlJyBpZiBGaWx0ZXJGdW5jdGlvbnMgYW5ub3RhdGlvbiBzdXBwb3J0cyAndG9sb3dlcicsIGVsc2UgJ3RydWUnXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGdW5jdGlvbnM6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGdW5jdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGZpbHRlckZ1bmN0aW9ucykgPyAoZmlsdGVyRnVuY3Rpb25zIGFzIFN0cmluZ1tdKS5pbmRleE9mKFwidG9sb3dlclwiKSA9PT0gLTEgOiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2dldEZpbHRlckZ1bmN0aW9ucyhDb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogRmlsdGVyRnVuY3Rpb25zIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0aWYgKFR5cGVHdWFyZHMuaXNFbnRpdHlTZXQoZW50aXR5U2V0KSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnMgPz9cblx0XHRcdENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCkuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnNcblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIGZvciB0ZXh0IGZpZWxkcyBpbiBhIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoZm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGUgfCB1bmRlZmluZWQpOiBGb3JtYXRPcHRpb25zVHlwZSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBmb3JtYXRPcHRpb25zID09PSB1bmRlZmluZWRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDoge1xuXHRcdFx0XHR0ZXh0TGluZXNFZGl0OiA0LFxuXHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zXG5cdFx0ICB9O1xufVxuXG5mdW5jdGlvbiBfZmluZFNlbWFudGljS2V5VmFsdWVzKHNlbWFudGljS2V5czogU2VtYW50aWNLZXksIG5hbWU6IHN0cmluZykge1xuXHRjb25zdCBhU2VtYW50aWNLZXlWYWx1ZXM6IHN0cmluZ1tdID0gW107XG5cdGxldCBiU2VtYW50aWNLZXlGb3VuZCA9IGZhbHNlO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbWFudGljS2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdGFTZW1hbnRpY0tleVZhbHVlcy5wdXNoKHNlbWFudGljS2V5c1tpXS52YWx1ZSk7XG5cdFx0aWYgKHNlbWFudGljS2V5c1tpXS52YWx1ZSA9PT0gbmFtZSkge1xuXHRcdFx0YlNlbWFudGljS2V5Rm91bmQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdHZhbHVlczogYVNlbWFudGljS2V5VmFsdWVzLFxuXHRcdHNlbWFudGljS2V5Rm91bmQ6IGJTZW1hbnRpY0tleUZvdW5kXG5cdH07XG59XG5cbmZ1bmN0aW9uIF9maW5kUHJvcGVydGllcyhzZW1hbnRpY0tleVZhbHVlczogc3RyaW5nW10sIGZpZWxkR3JvdXBQcm9wZXJ0aWVzOiBzdHJpbmdbXSkge1xuXHRsZXQgc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCA9IGZhbHNlO1xuXHRsZXQgc1Byb3BlcnR5UGF0aDtcblx0aWYgKHNlbWFudGljS2V5VmFsdWVzICYmIHNlbWFudGljS2V5VmFsdWVzLmxlbmd0aCA+PSAxICYmIGZpZWxkR3JvdXBQcm9wZXJ0aWVzICYmIGZpZWxkR3JvdXBQcm9wZXJ0aWVzLmxlbmd0aCA+PSAxKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzZW1hbnRpY0tleVZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKFtzZW1hbnRpY0tleVZhbHVlc1tpXV0uc29tZSgodG1wKSA9PiBmaWVsZEdyb3VwUHJvcGVydGllcy5pbmRleE9mKHRtcCkgPj0gMCkpIHtcblx0XHRcdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCA9IHRydWU7XG5cdFx0XHRcdHNQcm9wZXJ0eVBhdGggPSBzZW1hbnRpY0tleVZhbHVlc1tpXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCxcblx0XHRmaWVsZEdyb3VwUHJvcGVydHlQYXRoOiBzUHJvcGVydHlQYXRoXG5cdH07XG59XG5cbi8qKlxuICogRmluZCB0aGUgZmlyc3QgcHJvcGVydHkgaW4gdGhlIGZpZWxkR3JvdXAgdGhhdCBpcyBwYXJ0IG9mIHRoZSBzZW1hbnRpYyBrZXlzLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cFxuICogQHBhcmFtIHNlbWFudGljS2V5VmFsdWVzXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBhIGZsYWcgdHJ1ZSBpZiBhIHByb3BlcnR5IGlzIGZvdW5kIGFuZCBhIHByb3BlcnR5UGF0aC5cbiAqL1xuZnVuY3Rpb24gX2ZpbmRTZW1hbnRpY0tleVZhbHVlc0luRmllbGRHcm91cChkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGwsIHNlbWFudGljS2V5VmFsdWVzOiBzdHJpbmdbXSkge1xuXHQvLyB0aGlzIGluZm8gaXMgdXNlZCBpbiBGaWVsZGxIZWxwZXIjaXNEcmFmdEluZGljYXRvclZpc2libGVJbkZpZWxkR3JvdXAgdG8gc2hvdyBhIGRyYWZ0IGluZGljYXRvciBhdCB0aGUgZW5kIG9mIGEgZmllbGQgZ3JvdXBcblx0Y29uc3QgYVByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGxldCBfcHJvcGVydGllc0ZvdW5kOiB7IHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXA6IGJvb2xlYW47IGZpZWxkR3JvdXBQcm9wZXJ0eVBhdGg/OiBzdHJpbmcgfSA9IHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBmYWxzZSxcblx0XHRmaWVsZEdyb3VwUHJvcGVydHlQYXRoOiB1bmRlZmluZWRcblx0fTtcblx0aWYgKFxuXHRcdGRhdGFGaWVsZEdyb3VwICYmXG5cdFx0ZGF0YUZpZWxkR3JvdXAuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHQpIHtcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoaW5uZXJEYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fCBpbm5lckRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCkgJiZcblx0XHRcdFx0aW5uZXJEYXRhRmllbGQuVmFsdWVcblx0XHRcdCkge1xuXHRcdFx0XHRhUHJvcGVydGllcy5wdXNoKGlubmVyRGF0YUZpZWxkLlZhbHVlLnBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0X3Byb3BlcnRpZXNGb3VuZCA9IF9maW5kUHJvcGVydGllcyhzZW1hbnRpY0tleVZhbHVlcywgYVByb3BlcnRpZXMpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogX3Byb3BlcnRpZXNGb3VuZC5zZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwLFxuXHRcdHByb3BlcnR5UGF0aDogX3Byb3BlcnRpZXNGb3VuZC5maWVsZEdyb3VwUHJvcGVydHlQYXRoXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIHdpdGggZHJhZnRJbmRpY2F0b3IgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlzXG4gKiBAcGFyYW0gaXNGaWVsZEdyb3VwQ29sdW1uXG4gKiBAcGFyYW0gZGF0YUZpZWxkR3JvdXBcbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4oXG5cdG5hbWU6IHN0cmluZyxcblx0c2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSxcblx0aXNGaWVsZEdyb3VwQ29sdW1uOiBib29sZWFuLFxuXHRkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGxcbik6IFBhcnRpYWw8e1xuXHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0ZmllbGRHcm91cE5hbWU6IHN0cmluZztcblx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aGFzRHJhZnRJbmRpY2F0b3I6IGJvb2xlYW47XG59PiB7XG5cdGlmICghc2VtYW50aWNLZXlzKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGNvbnN0IHNlbWFudGljS2V5ID0gX2ZpbmRTZW1hbnRpY0tleVZhbHVlcyhzZW1hbnRpY0tleXMsIG5hbWUpO1xuXHRjb25zdCBzZW1hbnRpY0tleUluRmllbGRHcm91cCA9IF9maW5kU2VtYW50aWNLZXlWYWx1ZXNJbkZpZWxkR3JvdXAoZGF0YUZpZWxkR3JvdXAsIHNlbWFudGljS2V5LnZhbHVlcyk7XG5cdGlmIChzZW1hbnRpY0tleUluRmllbGRHcm91cC5zZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwKSB7XG5cdFx0Ly8gU2VtYW50aWMgS2V5IGhhcyBhIHByb3BlcnR5IGluIGEgRmllbGRHcm91cFxuXHRcdHJldHVybiB7XG5cdFx0XHQvL1RPRE8gd2Ugc2hvdWxkIHJhdGhlciBzdG9yZSBoYXNTZW1hbnRpY0tleUluRmllbGRHcm91cFxuXHRcdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBzZW1hbnRpY0tleUluRmllbGRHcm91cC5wcm9wZXJ0eVBhdGgsXG5cdFx0XHRmaWVsZEdyb3VwTmFtZTogbmFtZSxcblx0XHRcdHNob3dFcnJvck9iamVjdFN0YXR1czogY29tcGlsZUV4cHJlc3Npb24oZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShuYW1lLCB0cnVlKSlcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHNlbWFudGljS2V5LnNlbWFudGljS2V5Rm91bmQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aGFzRHJhZnRJbmRpY2F0b3I6IHRydWUsXG5cdFx0XHRzaG93RXJyb3JPYmplY3RTdGF0dXM6IGNvbXBpbGVFeHByZXNzaW9uKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkobmFtZSwgZmFsc2UpKVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBfZ2V0SW1wTnVtYmVyKGRhdGFGaWVsZDogRGF0YUZpZWxkVHlwZXMpOiBudW1iZXIge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9IaWdoXCIpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL01lZGl1bVwiKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9Mb3dcIikpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXHRyZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkOiBEYXRhRmllbGRUeXBlcyk6IEltcG9ydGFuY2Uge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXHRyZXR1cm4gaW1wb3J0YW5jZSA/IChpbXBvcnRhbmNlLnNwbGl0KFwiL1wiKVsxXSBhcyBJbXBvcnRhbmNlKSA6IEltcG9ydGFuY2UuTm9uZTtcbn1cblxuZnVuY3Rpb24gX2dldE1heEltcG9ydGFuY2UoZmllbGRzOiBEYXRhRmllbGRUeXBlc1tdKTogSW1wb3J0YW5jZSB7XG5cdGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcblx0XHRsZXQgbWF4SW1wTnVtYmVyID0gLTE7XG5cdFx0bGV0IGltcE51bWJlciA9IC0xO1xuXHRcdGxldCBEYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZTtcblx0XHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuXHRcdFx0aW1wTnVtYmVyID0gX2dldEltcE51bWJlcihmaWVsZCk7XG5cdFx0XHRpZiAoaW1wTnVtYmVyID4gbWF4SW1wTnVtYmVyKSB7XG5cdFx0XHRcdG1heEltcE51bWJlciA9IGltcE51bWJlcjtcblx0XHRcdFx0RGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2UgPSBmaWVsZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKERhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlIGFzIERhdGFGaWVsZFR5cGVzKTtcblx0fVxuXHRyZXR1cm4gSW1wb3J0YW5jZS5Ob25lO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGltcG9ydGFuY2UgdmFsdWUgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEBwYXJhbSBzZW1hbnRpY0tleXNcbiAqIEByZXR1cm5zIFRoZSBpbXBvcnRhbmNlIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbXBvcnRhbmNlKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IHVuZGVmaW5lZCwgc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSk6IEltcG9ydGFuY2UgfCB1bmRlZmluZWQge1xuXHQvL0V2YWx1YXRlIGRlZmF1bHQgSW1wb3J0YW5jZSBpcyBub3Qgc2V0IGV4cGxpY2l0bHlcblx0bGV0IGZpZWxkc1dpdGhJbXBvcnRhbmNlLFxuXHRcdG1hcFNlbWFudGljS2V5czogc3RyaW5nW10gPSBbXTtcblx0Ly9DaGVjayBpZiBzZW1hbnRpY0tleXMgYXJlIGRlZmluZWQgYXQgdGhlIEVudGl0eVNldCBsZXZlbFxuXHRpZiAoc2VtYW50aWNLZXlzICYmIHNlbWFudGljS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0bWFwU2VtYW50aWNLZXlzID0gc2VtYW50aWNLZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRyZXR1cm4ga2V5LnZhbHVlO1xuXHRcdH0pO1xuXHR9XG5cdGlmICghZGF0YUZpZWxkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZFRhcmdldCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGRhdGFGaWVsZFRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpKSB7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YSA9IGRhdGFGaWVsZFRhcmdldC5EYXRhO1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cEhhc1NlbWFudGljS2V5ID1cblx0XHRcdFx0ZmllbGRHcm91cERhdGEgJiZcblx0XHRcdFx0ZmllbGRHcm91cERhdGEuc29tZShmdW5jdGlvbiAoZmllbGRHcm91cERhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZmllbGRHcm91cERhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGggJiZcblx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGQuJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0XHRcdG1hcFNlbWFudGljS2V5cy5pbmNsdWRlcygoZmllbGRHcm91cERhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGgpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHQvL0lmIGEgRmllbGRHcm91cCBjb250YWlucyBhIHNlbWFudGljS2V5LCBpbXBvcnRhbmNlIHNldCB0byBIaWdoXG5cdFx0XHRpZiAoZmllbGRHcm91cEhhc1NlbWFudGljS2V5KSB7XG5cdFx0XHRcdHJldHVybiBJbXBvcnRhbmNlLkhpZ2g7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL0lmIHRoZSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIGhhcyBhbiBJbXBvcnRhbmNlIHdlIHRha2UgaXRcblx0XHRcdFx0aWYgKGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKGRhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBlbHNlIHRoZSBoaWdoZXN0IGltcG9ydGFuY2UgKGlmIGFueSkgaXMgcmV0dXJuZWRcblx0XHRcdFx0ZmllbGRzV2l0aEltcG9ydGFuY2UgPVxuXHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhICYmXG5cdFx0XHRcdFx0ZmllbGRHcm91cERhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaXRlbT8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gX2dldE1heEltcG9ydGFuY2UoZmllbGRzV2l0aEltcG9ydGFuY2UgYXMgRGF0YUZpZWxkVHlwZXNbXSk7XG5cdFx0XHR9XG5cdFx0XHQvL0lmIHRoZSBjdXJyZW50IGZpZWxkIGlzIGEgc2VtYW50aWNLZXksIGltcG9ydGFuY2Ugc2V0IHRvIEhpZ2hcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcykuVmFsdWUgJiZcblx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGggJiZcblx0XHRtYXBTZW1hbnRpY0tleXMuaW5jbHVkZXMoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcykuVmFsdWUucGF0aClcblx0XHQ/IEltcG9ydGFuY2UuSGlnaFxuXHRcdDogX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBkaXNwbGF5aW5nIG9mIHRoZSBjb2x1bW4gaXMgc3VwcG9ydGVkIGZvciBhbiBpbnNpZ2h0cyBjYXJkLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEBwYXJhbSBzTGFiZWxcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gaXNNdWx0aVZhbHVlXG4gKiBAcmV0dXJucyBUcnVlIGlmIGRpc3BsYXlpbmcgb2YgdGhlIGNvbHVtbiBpcyBzdXBwb3J0ZWQgZm9yIGFuIGluc2lnaHRzIGNhcmQuXG4gKi9cbmNvbnN0IGNoZWNrSWZDb2x1bW5Jc1N1cHBvcnRlZEZvckluc2lnaHRzID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdHNMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc011bHRpVmFsdWU6IGJvb2xlYW5cbikge1xuXHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKTtcblxuXHRpZiAoc0xhYmVsICYmIHNMYWJlbCAhPT0gXCJcIiAmJiBhbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCIpICE9PSAtMSAmJiBpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkpIHtcblx0XHQvLyBpbmNsdWRlIG9ubHkgdGhvc2UgY29sdW1ucyB0aGF0IGFyZSBhbm5vdGF0ZWQgYXMgcGFydCBvZiB0aGUgdGFibGUgKHNraXAgZW50aXR5IHByb3BzKVxuXHRcdGNvbnN0IGlzSW1hZ2VDb2x1bW4gPSBkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQgPyBpc0ltYWdlVVJMKGRhdGFGaWVsZC5WYWx1ZS4kdGFyZ2V0KSA6IGZhbHNlO1xuXHRcdHJldHVybiAhaXNNdWx0aVZhbHVlICYmICFpc0ltYWdlQ29sdW1uO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGxpbmUgaXRlbXMgZnJvbSBtZXRhZGF0YSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgd2l0aCB0aGVpciBhbm5vdGF0aW9uc1xuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSB2aXN1YWxpemF0aW9uIHBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGlzSW5zaWdodHNFbmFibGVkXG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zID0gZnVuY3Rpb24gKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0luc2lnaHRzRW5hYmxlZD86IGJvb2xlYW5cbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXSxcblx0XHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5PiA9IHt9LFxuXHRcdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10gPSBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSksXG5cdFx0dGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0dGFibGVUeXBlOiBUYWJsZVR5cGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnR5cGUgfHwgXCJSZXNwb25zaXZlVGFibGVcIjtcblx0Y29uc3QgdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5ID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkNvbW1vblwiLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNLZXksIFtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRdKVswXTtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IHRhYmxlQ29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpXG5cdFx0KTtcblxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChsaW5lSXRlbSkgPT4ge1xuXHRcdFx0Ly8gVE9ETzogdmFyaWFibGUgbmFtZSBzaG91bGQgYmUgZGF0YWZpZWxkIGFuZCBub3QgbGluZUl0ZW1cblx0XHRcdGlmICghX2lzVmFsaWRDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCBleHBvcnRTZXR0aW5nczogY29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsID0gbnVsbDtcblx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0XHRpc0RhdGFGaWVsZFR5cGVzKGxpbmVJdGVtKSAmJiBsaW5lSXRlbS5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0PyBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgbGluZUl0ZW0pXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBfZ2V0UmVsYXRpdmVQYXRoKGxpbmVJdGVtKTtcblx0XHRcdC8vIERldGVybWluZSBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjb25zdW1lZCBieSB0aGlzIExpbmVJdGVtLlxuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvOiBDb21wbGV4UHJvcGVydHlJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkobGluZUl0ZW0sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlVHlwZSk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSByZWxhdGl2ZVBhdGggPyBfc2xpY2VBdFNsYXNoKHJlbGF0aXZlUGF0aCwgdHJ1ZSwgZmFsc2UpIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSByZWxhdGl2ZVBhdGg7XG5cdFx0XHRjb25zdCBzTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldExhYmVsKGxpbmVJdGVtLCBpc0dyb3VwKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3QgaXNGaWVsZEdyb3VwQ29sdW1uOiBib29sZWFuID0gZ3JvdXBQYXRoID8gZ3JvdXBQYXRoLmluZGV4T2YoYEAke1VJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXB9YCkgPiAtMSA6IGZhbHNlO1xuXHRcdFx0Y29uc3Qgc2hvd0RhdGFGaWVsZHNMYWJlbDogYm9vbGVhbiA9IGlzRmllbGRHcm91cENvbHVtblxuXHRcdFx0XHQ/IF9nZXRTaG93RGF0YUZpZWxkc0xhYmVsKG5hbWUsIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0Y29uc3QgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldERhdGFGaWVsZERhdGFUeXBlKGxpbmVJdGVtKTtcblx0XHRcdGNvbnN0IHNEYXRlSW5wdXRGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGRhdGFUeXBlID09PSBcIkVkbS5EYXRlXCIgPyBcIllZWVktTU0tRERcIiA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSBfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZShcblx0XHRcdFx0Z2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uKG5hbWUsIHNlbWFudGljS2V5cywgaXNGaWVsZEdyb3VwQ29sdW1uLCBsaW5lSXRlbSlcblx0XHRcdCk7XG5cdFx0XHRsZXQgZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHRcdGlmIChcblx0XHRcdFx0bGluZUl0ZW0uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0bGluZUl0ZW0uVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGVcblx0XHRcdCkge1xuXHRcdFx0XHRmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMgPSBfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zKGxpbmVJdGVtKTtcblx0XHRcdH1cblx0XHRcdGlmIChfaXNFeHBvcnRhYmxlQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHQvL2V4Y2x1ZGUgdGhlIHR5cGVzIGxpc3RlZCBhYm92ZSBmb3IgdGhlIEV4cG9ydCAoZ2VuZXJhdGVzIGVycm9yIG9uIEV4cG9ydCBhcyBQREYpXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzID0ge1xuXHRcdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NXcmFwcGluZyxcblx0XHRcdFx0XHR0eXBlOiBkYXRhVHlwZSA/IF9nZXRFeHBvcnREYXRhVHlwZShkYXRhVHlwZSwgcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMSkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0aW5wdXRGb3JtYXQ6IHNEYXRlSW5wdXRGb3JtYXQsXG5cdFx0XHRcdFx0ZGVsaW1pdGVyOiBkYXRhVHlwZSA9PT0gXCJFZG0uSW50NjRcIlxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdE5hbWUpIHtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdE5hbWU7XG5cdFx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiQ3VycmVuY3lcIjsgLy8gRm9yY2UgdG8gYSBjdXJyZW5jeSBiZWNhdXNlIHRoZXJlJ3MgYSB1bml0UHJvcGVydHkgKG90aGVyd2lzZSB0aGUgdmFsdWUgaXNuJ3QgcHJvcGVybHkgZm9ybWF0dGVkIHdoZW4gZXhwb3J0ZWQpXG5cdFx0XHRcdH0gZWxzZSBpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXRTdHJpbmcpIHtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy51bml0ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXRTdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZU5hbWUpIHtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy50aW1lem9uZVByb3BlcnR5ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lTmFtZTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVTdHJpbmcpIHtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy50aW1lem9uZSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZVN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcHJvcGVydHlUeXBlQ29uZmlnOiBQcm9wZXJ0eVR5cGVDb25maWcgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoZGF0YVR5cGUpIHtcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhsaW5lSXRlbSwgZGF0YVR5cGUpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgdHlwZUNvbmZpZzogUHJvcGVydHlUeXBlQ29uZmlnID0ge1xuXHRcdFx0XHRjbGFzc05hbWU6IGRhdGFUeXBlIGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGUsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IHtcblx0XHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdC4uLnByb3BlcnR5VHlwZUNvbmZpZz8uZm9ybWF0T3B0aW9uc1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb25zdHJhaW50czogeyAuLi5wcm9wZXJ0eVR5cGVDb25maWc/LmNvbnN0cmFpbnRzIH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCB2aXN1YWxTZXR0aW5nczogVmlzdWFsU2V0dGluZ3MgPSB7fTtcblx0XHRcdGlmICghZGF0YVR5cGUgfHwgIXR5cGVDb25maWcpIHtcblx0XHRcdFx0Ly8gZm9yIGNoYXJ0c1xuXHRcdFx0XHR2aXN1YWxTZXR0aW5ncy53aWR0aENhbGN1bGF0aW9uID0gbnVsbDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGlzTXVsdGlWYWx1ZSA9IF9pc0NvbHVtbk11bHRpVmFsdWVkKGxpbmVJdGVtLCB0YWJsZUNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0Y29uc3Qgc29ydGFibGUgPSAhaXNNdWx0aVZhbHVlICYmIF9pc0NvbHVtblNvcnRhYmxlKGxpbmVJdGVtLCByZWxhdGl2ZVBhdGgsIG5vblNvcnRhYmxlQ29sdW1ucyk7XG5cdFx0XHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IGVuYWJsZUFkZENhcmRUb0luc2lnaHRzID0gdGFibGVNYW5pZmVzdENvbmZpZy50YWJsZVNldHRpbmdzPy5lbmFibGVBZGRDYXJkVG9JbnNpZ2h0cyA/PyB0cnVlO1xuXHRcdFx0Y29uc3QgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChsaW5lSXRlbSksXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0bGFiZWw6IHNMYWJlbCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IGdldExhYmVsKGxpbmVJdGVtKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0Z3JvdXA6IGlzR3JvdXAgPyBncm91cFBhdGggOiB1bmRlZmluZWQsXG5cdFx0XHRcdEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGxpbmVJdGVtLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihsaW5lSXRlbSkgPyBcIkhpZGRlblwiIDogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdG5hbWU6IG5hbWUsXG5cdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWw6IHNob3dEYXRhRmllbGRzTGFiZWwsXG5cdFx0XHRcdHJlbGF0aXZlUGF0aDogcmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRzb3J0YWJsZTogc29ydGFibGUsXG5cdFx0XHRcdHByb3BlcnR5SW5mb3M6IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmxlbmd0aCA/IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvczogYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdHdpZHRoOiAobGluZUl0ZW0uYW5ub3RhdGlvbnM/LkhUTUw1Py5Dc3NEZWZhdWx0cz8ud2lkdGg/LnZhbHVlT2YoKSBhcyBzdHJpbmcpIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0aW1wb3J0YW5jZTogZ2V0SW1wb3J0YW5jZShsaW5lSXRlbSBhcyBEYXRhRmllbGRUeXBlcywgc2VtYW50aWNLZXlzKSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWUsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IGZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0dHlwZUNvbmZpZzogdHlwZUNvbmZpZyxcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3M6IHZpc3VhbFNldHRpbmdzLFxuXHRcdFx0XHR0aW1lem9uZVRleHQ6IGV4cG9ydFNldHRpbmdzPy50aW1lem9uZSxcblx0XHRcdFx0aXNQYXJ0T2ZMaW5lSXRlbTogdHJ1ZVxuXHRcdFx0fTtcblx0XHRcdGNvbHVtbi5pc0luc2lnaHRzU3VwcG9ydGVkID1cblx0XHRcdFx0ZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHMgPT09IHRydWUgJiZcblx0XHRcdFx0aXNJbnNpZ2h0c0VuYWJsZWQgPT09IHRydWUgJiZcblx0XHRcdFx0Y2hlY2tJZkNvbHVtbklzU3VwcG9ydGVkRm9ySW5zaWdodHMobGluZUl0ZW0sIHNMYWJlbCwgY29udmVydGVyQ29udGV4dCwgaXNNdWx0aVZhbHVlKTtcblx0XHRcdGNvbnN0IHNUb29sdGlwID0gX2dldFRvb2x0aXAobGluZUl0ZW0pO1xuXHRcdFx0aWYgKHNUb29sdGlwKSB7XG5cdFx0XHRcdGNvbHVtbi50b29sdGlwID0gc1Rvb2x0aXA7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5wdXNoKC4uLnJlbGF0ZWRQcm9wZXJ0aWVzSW5mby50ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSAmJiBjb2x1bW4uZXhwb3J0U2V0dGluZ3MpIHtcblx0XHRcdFx0Y29sdW1uLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdFx0XHRjb2x1bW4uZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0XHR9XG5cblx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2goY29sdW1uKTtcblxuXHRcdFx0Ly8gQ29sbGVjdCBpbmZvcm1hdGlvbiBvZiByZWxhdGVkIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2goKHJlbGF0ZWRQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW3JlbGF0ZWRQcm9wZXJ0eU5hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbcmVsYXRlZFByb3BlcnR5TmFtZV07XG5cblx0XHRcdFx0Ly8gSW4gY2FzZSBvZiBhIG11bHRpLXZhbHVlLCByZWxhdGVkIHByb3BlcnRpZXMgY2Fubm90IGJlIHNvcnRlZCBhcyB3ZSBnbyB0aHJvdWdoIGEgMS1uIHJlbGF0aW9uXG5cdFx0XHRcdGlmIChpc011bHRpVmFsdWUpIHtcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMucHVzaChyZWxhdGVkUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIENyZWF0ZSBjb2x1bW5zIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaWRlbnRpZmllZCBmb3IgQUxQIHVzZSBjYXNlLlxuXHRcdFx0YWRkaXRpb25hbFByb3BlcnR5TmFtZXMuZm9yRWFjaCgoYWRkaXRpb25hbFByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFthZGRpdGlvbmFsUHJvcGVydHlOYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1thZGRpdGlvbmFsUHJvcGVydHlOYW1lXTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gR2V0IGNvbHVtbnMgZnJvbSB0aGUgUHJvcGVydGllcyBvZiBFbnRpdHlUeXBlXG5cdHJldHVybiBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVUeXBlLFxuXHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHQpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgY2hlY2tzIGFnYWluc3QgZXhpc3RpbmcgcHJvcGVydGllcyBhbHJlYWR5IGFkZGVkIGJ5IGFubm90YXRpb25zLlxuICogSWYgYSBub3QgeWV0IHN0b3JlZCBwcm9wZXJ0eSBpcyBmb3VuZCBpdCBhZGRzIGl0IGZvciBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgb25seSB0byB0aGUgYW5ub3RhdGlvbkNvbHVtbnMuXG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBfZ2V0UHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRsZXQgbWF0Y2hlZFByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdG1hdGNoZWRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5UGF0aCkge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGFubm90YXRpb25Db2x1bW5zLmZpbmQoZnVuY3Rpb24gKGFubm90YXRpb25Db2x1bW4pIHtcblx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwcm9wZXJ0eVBhdGggJiYgYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLm5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyhcblx0XHRcdFx0XHR7IFtwcm9wZXJ0eVBhdGhdOiBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCkgfSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0W11cblx0XHRcdFx0KTtcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaChyZWxhdGVkQ29sdW1uc1swXSk7XG5cdFx0XHRcdHJldHVybiByZWxhdGVkQ29sdW1uc1swXS5uYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuY29uc3QgX2FwcGVuZEN1c3RvbVRlbXBsYXRlID0gZnVuY3Rpb24gKHByb3BlcnRpZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0cmV0dXJuIHByb3BlcnRpZXNcblx0XHQubWFwKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpfX1gO1xuXHRcdH0pXG5cdFx0LmpvaW4oYCR7XCJcXG5cIn1gKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbnMgZnJvbSBtYW5pZmVzdC5cbiAqXG4gKiBUaGVzZSBtYXkgYmUgY3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QsIHNsb3QgY29sdW1ucyBjb21pbmcgdGhyb3VnaFxuICogYSBidWlsZGluZyBibG9jaywgb3IgYW5ub3RhdGlvbiBjb2x1bW5zIHRvIG92ZXJ3cml0ZSBhbm5vdGF0aW9uLWJhc2VkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGNvbHVtbnNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbU1hbmlmZXN0ID0gZnVuY3Rpb24gKFxuXHRjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZT4sXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RDb2x1bW4+IHtcblx0Y29uc3QgaW50ZXJuYWxDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdENvbHVtbj4gPSB7fTtcblxuXHRmdW5jdGlvbiBpc0Fubm90YXRpb25Db2x1bW4oXG5cdFx0Y29sdW1uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSxcblx0XHRrZXk6IHN0cmluZ1xuXHQpOiBjb2x1bW4gaXMgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUge1xuXHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKChhbm5vdGF0aW9uQ29sdW1uKSA9PiBhbm5vdGF0aW9uQ29sdW1uLmtleSA9PT0ga2V5KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzU2xvdENvbHVtbihtYW5pZmVzdENvbHVtbjogQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uKTogbWFuaWZlc3RDb2x1bW4gaXMgRnJhZ21lbnREZWZpbmVkU2xvdENvbHVtbiB7XG5cdFx0cmV0dXJuIG1hbmlmZXN0Q29sdW1uLnR5cGUgPT09IENvbHVtblR5cGUuU2xvdDtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzQ3VzdG9tQ29sdW1uKG1hbmlmZXN0Q29sdW1uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4pOiBtYW5pZmVzdENvbHVtbiBpcyBNYW5pZmVzdERlZmluZWRDdXN0b21Db2x1bW4ge1xuXHRcdHJldHVybiBtYW5pZmVzdENvbHVtbi50eXBlID09PSB1bmRlZmluZWQgJiYgISFtYW5pZmVzdENvbHVtbi50ZW1wbGF0ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIF91cGRhdGVMaW5rZWRQcm9wZXJ0aWVzT25DdXN0b21Db2x1bW5zKHByb3BlcnR5SW5mb3M6IHN0cmluZ1tdLCBhbm5vdGF0aW9uVGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSkge1xuXHRcdGNvbnN0IG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10gPSBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSk7XG5cdFx0cHJvcGVydHlJbmZvcy5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0YW5ub3RhdGlvblRhYmxlQ29sdW1ucy5mb3JFYWNoKChwcm9wKSA9PiB7XG5cdFx0XHRcdGlmIChwcm9wLm5hbWUgPT09IHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0cHJvcC5zb3J0YWJsZSA9IG5vblNvcnRhYmxlQ29sdW1ucy5pbmRleE9mKHByb3BlcnR5LnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpKSA9PT0gLTE7XG5cdFx0XHRcdFx0cHJvcC5pc0dyb3VwYWJsZSA9IHByb3Auc29ydGFibGU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gY29sdW1ucykge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29sdW1uID0gY29sdW1uc1trZXldO1xuXHRcdEtleUhlbHBlci52YWxpZGF0ZUtleShrZXkpO1xuXG5cdFx0Ly8gQmFzZVRhYmxlQ29sdW1uXG5cdFx0Y29uc3QgYmFzZVRhYmxlQ29sdW1uID0ge1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHR3aWR0aDogbWFuaWZlc3RDb2x1bW4ud2lkdGggfHwgdW5kZWZpbmVkLFxuXHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0YW5jaG9yOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbj8uYW5jaG9yLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBQbGFjZW1lbnQuQWZ0ZXIgOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbi5wbGFjZW1lbnRcblx0XHRcdH0sXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dClcblx0XHR9O1xuXG5cdFx0aWYgKGlzQW5ub3RhdGlvbkNvbHVtbihtYW5pZmVzdENvbHVtbiwga2V5KSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydGllc1RvT3ZlcndyaXRlQW5ub3RhdGlvbkNvbHVtbjogQ3VzdG9tRWxlbWVudDxBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZT4gPSB7XG5cdFx0XHRcdC4uLmJhc2VUYWJsZUNvbHVtbixcblx0XHRcdFx0aW1wb3J0YW5jZTogbWFuaWZlc3RDb2x1bW4/LmltcG9ydGFuY2UsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogbWFuaWZlc3RDb2x1bW4/Lmhvcml6b250YWxBbGlnbixcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBtYW5pZmVzdENvbHVtbj8uYXZhaWxhYmlsaXR5LFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiBpc0Fubm90YXRpb25Db2x1bW4obWFuaWZlc3RDb2x1bW4sIGtleSlcblx0XHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHRcdDogaXNBY3Rpb25OYXZpZ2FibGUobWFuaWZlc3RDb2x1bW4sIG5hdmlnYXRpb25TZXR0aW5ncywgdHJ1ZSksXG5cdFx0XHRcdHNldHRpbmdzOiBtYW5pZmVzdENvbHVtbi5zZXR0aW5ncyxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUobWFuaWZlc3RDb2x1bW4uZm9ybWF0T3B0aW9ucylcblx0XHRcdH07XG5cdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IHByb3BlcnRpZXNUb092ZXJ3cml0ZUFubm90YXRpb25Db2x1bW47XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mb3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gX2dldFByb3BlcnR5TmFtZXMoXG5cdFx0XHRcdG1hbmlmZXN0Q29sdW1uLnByb3BlcnRpZXMsXG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRlbnRpdHlUeXBlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgYmFzZU1hbmlmZXN0Q29sdW1uID0ge1xuXHRcdFx0XHQuLi5iYXNlVGFibGVDb2x1bW4sXG5cdFx0XHRcdGhlYWRlcjogbWFuaWZlc3RDb2x1bW4uaGVhZGVyLFxuXHRcdFx0XHRpbXBvcnRhbmNlOiBtYW5pZmVzdENvbHVtbj8uaW1wb3J0YW5jZSB8fCBJbXBvcnRhbmNlLk5vbmUsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogbWFuaWZlc3RDb2x1bW4/Lmhvcml6b250YWxBbGlnbiB8fCBIb3Jpem9udGFsQWxpZ24uQmVnaW4sXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogbWFuaWZlc3RDb2x1bW4/LmF2YWlsYWJpbGl0eSB8fCBcIkRlZmF1bHRcIixcblx0XHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0Q29sdW1uLnRlbXBsYXRlLFxuXHRcdFx0XHRwcm9wZXJ0eUluZm9zOiBwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogcHJvcGVydHlJbmZvc1xuXHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZTogX2FwcGVuZEN1c3RvbVRlbXBsYXRlKHByb3BlcnR5SW5mb3MpLFxuXHRcdFx0XHRcdFx0XHR3cmFwOiAhIShwcm9wZXJ0eUluZm9zLmxlbmd0aCA+IDEpXG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRpZDogYEN1c3RvbUNvbHVtbjo6JHtrZXl9YCxcblx0XHRcdFx0bmFtZTogYEN1c3RvbUNvbHVtbjo6JHtrZXl9YCxcblx0XHRcdFx0Ly9OZWVkZWQgZm9yIE1EQzpcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogeyB0ZXh0TGluZXNFZGl0OiA0IH0sXG5cdFx0XHRcdGlzR3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IGZhbHNlLFxuXHRcdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRcdHZpc3VhbFNldHRpbmdzOiB7IHdpZHRoQ2FsY3VsYXRpb246IG51bGwgfSxcblx0XHRcdFx0cHJvcGVydGllczogbWFuaWZlc3RDb2x1bW4ucHJvcGVydGllc1xuXHRcdFx0fTtcblx0XHRcdGlmIChwcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRcdF91cGRhdGVMaW5rZWRQcm9wZXJ0aWVzT25DdXN0b21Db2x1bW5zKHByb3BlcnR5SW5mb3MsIGFubm90YXRpb25Db2x1bW5zKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzU2xvdENvbHVtbihtYW5pZmVzdENvbHVtbikpIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tVGFibGVDb2x1bW46IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4gPSB7XG5cdFx0XHRcdFx0Li4uYmFzZU1hbmlmZXN0Q29sdW1uLFxuXHRcdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuU2xvdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IGN1c3RvbVRhYmxlQ29sdW1uO1xuXHRcdFx0fSBlbHNlIGlmIChpc0N1c3RvbUNvbHVtbihtYW5pZmVzdENvbHVtbikpIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tVGFibGVDb2x1bW46IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4gPSB7XG5cdFx0XHRcdFx0Li4uYmFzZU1hbmlmZXN0Q29sdW1uLFxuXHRcdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuRGVmYXVsdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IGN1c3RvbVRhYmxlQ29sdW1uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGBUaGUgYW5ub3RhdGlvbiBjb2x1bW4gJyR7a2V5fScgcmVmZXJlbmNlZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IGZvdW5kYDtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0LmFkZElzc3VlKFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeS5NYW5pZmVzdCxcblx0XHRcdFx0XHRcdElzc3VlU2V2ZXJpdHkuTG93LFxuXHRcdFx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlLFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGU/LkFubm90YXRpb25Db2x1bW5zPy5JbnZhbGlkS2V5XG5cdFx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGludGVybmFsQ29sdW1ucztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb25cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgYVBlcnNvbmFsaXphdGlvbjogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgaXNBbmFseXRpY2FsVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXHRjb25zdCBpc1Jlc3BvbnNpdmVUYWJsZSA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGlmICh0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gUGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0Y29uc3QgcGVyc29uYWxpemF0aW9uID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MucGVyc29uYWxpemF0aW9uO1xuXHRcdGlmIChwZXJzb25hbGl6YXRpb24gPT09IHRydWUpIHtcblx0XHRcdC8vIFRhYmxlIHBlcnNvbmFsaXphdGlvbiBmdWxseSBlbmFibGVkLlxuXHRcdFx0c3dpdGNoICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJBbmFseXRpY2FsVGFibGVcIjpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXAsQWdncmVnYXRlXCI7XG5cdFx0XHRcdGNhc2UgXCJSZXNwb25zaXZlVGFibGVcIjpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXBcIjtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXJcIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwZXJzb25hbGl6YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdC8vIFNwZWNpZmljIHBlcnNvbmFsaXphdGlvbiBvcHRpb25zIGVuYWJsZWQgaW4gbWFuaWZlc3QuIFVzZSB0aGVtIGFzIGlzLlxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5zb3J0KSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmNvbHVtbikge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmdyb3VwICYmIChpc0FuYWx5dGljYWxUYWJsZSB8fCBpc1Jlc3BvbnNpdmVUYWJsZSkpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmFnZ3JlZ2F0ZSAmJiBpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5sZW5ndGggPiAwID8gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gTm8gcGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sIHx8IF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQpKSB7XG5cdFx0XHRcdC8vIEZlYXR1cmUgcGFyaXR5IHdpdGggVjIuXG5cdFx0XHRcdC8vIEVuYWJsZSB0YWJsZSBmaWx0ZXJpbmcgYnkgZGVmYXVsdCBvbmx5IGluIGNhc2Ugb2YgQ29udHJvbCBsZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdFx0XHRcdC8vIE9yIHdoZW4gdGhlIExSIGZpbHRlciBiYXIgaXMgaGlkZGVuIHZpYSBtYW5pZmVzdCBzZXR0aW5nXG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblxuXHRcdGlmIChpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0fVxuXHRcdGlmIChpc1Jlc3BvbnNpdmVUYWJsZSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0fVxuXHRcdHJldHVybiBhUGVyc29uYWxpemF0aW9uLmpvaW4oXCIsXCIpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEJvb2xlYW4gdmFsdWUgc3VnZ2VzdGluZyBpZiBhIGZpbHRlciBiYXIgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcGFnZS5cbiAqXG4gKiBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuICogVW50aWwgdGhlbiwgaGlkaW5nIGZpbHRlciBiYXIgaXMgbm93IGFsbG93ZWQgaWYgYSBjaGFydCBpcyBiZWluZyB1c2VkIG9uIExSLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdFdyYXBwZXIgTWFuaWZlc3Qgc2V0dGluZ3MgZ2V0dGVyIGZvciB0aGUgcGFnZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgQm9vbGVhbiBzdWdnZXN0aW5nIGlmIGEgZmlsdGVyIGJhciBpcyBiZWluZyB1c2VkIG9uIHRoZSBwYWdlLlxuICovXG5mdW5jdGlvbiBfaXNGaWx0ZXJCYXJIaWRkZW4obWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRtYW5pZmVzdFdyYXBwZXIuaXNGaWx0ZXJCYXJIaWRkZW4oKSAmJlxuXHRcdCFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSAmJlxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyB0aGUgc29ydCBjb25kaXRpb25zIGZvciB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIFRhYmxlIGNvbHVtbnMgcHJvY2Vzc2VkIGJ5IHRoZSBjb252ZXJ0ZXJcbiAqIEByZXR1cm5zIFNvcnQgY29uZGl0aW9ucyBmb3IgYSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0U29ydENvbmRpdGlvbnMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Ly8gQ3VycmVudGx5IG5hdmlnYXRpb24gcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZCBhcyBzb3J0ZXJcblx0Y29uc3Qgbm9uU29ydGFibGVQcm9wZXJ0aWVzID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRsZXQgc29ydENvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Tb3J0T3JkZXIpIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJUeXBlW10gPSBbXTtcblx0XHRjb25zdCBjb25kaXRpb25zID0ge1xuXHRcdFx0c29ydGVyczogc29ydGVyc1xuXHRcdH07XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgY29uZGl0aW9uUHJvcGVydHkgPSBjb25kaXRpb24uUHJvcGVydHk7XG5cdFx0XHRpZiAoY29uZGl0aW9uUHJvcGVydHkgJiYgbm9uU29ydGFibGVQcm9wZXJ0aWVzLmluZGV4T2YoY29uZGl0aW9uUHJvcGVydHkuJHRhcmdldD8ubmFtZSkgPT09IC0xKSB7XG5cdFx0XHRcdGNvbnN0IGluZm9OYW1lID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhbY29uZGl0aW9uUHJvcGVydHldLCBjb2x1bW5zKVswXTtcblx0XHRcdFx0aWYgKGluZm9OYW1lKSB7XG5cdFx0XHRcdFx0Y29uZGl0aW9ucy5zb3J0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0bmFtZTogaW5mb05hbWUsXG5cdFx0XHRcdFx0XHRkZXNjZW5kaW5nOiAhIWNvbmRpdGlvbi5EZXNjZW5kaW5nXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRzb3J0Q29uZGl0aW9ucyA9IGNvbmRpdGlvbnMuc29ydGVycy5sZW5ndGggPyBKU09OLnN0cmluZ2lmeShjb25kaXRpb25zKSA6IHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gc29ydENvbmRpdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGNvbnN0IGxldmVsID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uSW5pdGlhbEV4cGFuc2lvbkxldmVsPy52YWx1ZU9mKCk7XG5cblx0cmV0dXJuIHR5cGVvZiBsZXZlbCA9PT0gXCJudW1iZXJcIiA/IGxldmVsIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBwcm9wZXJ0eVBhdGggdG8gYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzLlxuICpcbiAqIEBwYXJhbSBwYXRocyB0aGUgYXJyYXkgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0gY29sdW1ucyB0aGUgYXJyYXkgb2YgcHJvcGVydHlJbmZvc1xuICogQHJldHVybnMgYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzXG4gKi9cblxuZnVuY3Rpb24gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhwYXRoczogUHJvcGVydHlQYXRoW10sIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IGluZm9OYW1lczogc3RyaW5nW10gPSBbXTtcblx0bGV0IHByb3BlcnR5SW5mbzogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIGFubm90YXRpb25Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0cGF0aHMuZm9yRWFjaCgoY3VycmVudFBhdGgpID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LnZhbHVlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8gPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpbmZvTmFtZXMucHVzaChwcm9wZXJ0eUluZm8ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gaW5mb05hbWVzO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGdyb3VwIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEdyb3VwQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHR0YWJsZVR5cGU6IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGdyb3VwQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lkdyb3VwQnkpIHtcblx0XHRsZXQgYUdyb3VwQnkgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Hcm91cEJ5O1xuXHRcdGlmICh0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRcdGFHcm91cEJ5ID0gYUdyb3VwQnkuc2xpY2UoMCwgMSk7XG5cdFx0fVxuXHRcdGNvbnN0IGFHcm91cExldmVscyA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoYUdyb3VwQnksIGNvbHVtbnMpLm1hcCgoaW5mb05hbWUpID0+IHtcblx0XHRcdHJldHVybiB7IG5hbWU6IGluZm9OYW1lIH07XG5cdFx0fSk7XG5cblx0XHRncm91cENvbmRpdGlvbnMgPSBhR3JvdXBMZXZlbHMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoeyBncm91cExldmVsczogYUdyb3VwTGV2ZWxzIH0pIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnM7XG59XG4vKipcbiAqIFVwZGF0ZXMgdGhlIGNvbHVtbidzIHByb3BlcnR5SW5mb3Mgb2YgYSBhbmFseXRpY2FsIHRhYmxlIGludGVncmF0aW5nIGFsbCBleHRlbnNpb25zIGFuZCBiaW5kaW5nLXJlbGV2YW50IHByb3BlcnR5IGluZm8gcGFydC5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqL1xuXG5mdW5jdGlvbiBfdXBkYXRlUHJvcGVydHlJbmZvc1dpdGhBZ2dyZWdhdGVzRGVmaW5pdGlvbnModGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24pIHtcblx0Y29uc3QgcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eU5hbWUgPSBPYmplY3Qua2V5cyh0YWJsZVZpc3VhbGl6YXRpb24uYWdncmVnYXRlcyEpLmZpbmQoKGFnZ3JlZ2F0ZSkgPT4gYWdncmVnYXRlID09PSBjb2x1bW4ubmFtZSk7XG5cdFx0aWYgKGFnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZSkge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uID0gdGFibGVWaXN1YWxpemF0aW9uLmFnZ3JlZ2F0ZXMhW2FnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZV07XG5cdFx0XHRjb2x1bW4uYWdncmVnYXRhYmxlID0gdHJ1ZTtcblx0XHRcdGNvbHVtbi5leHRlbnNpb24gPSB7XG5cdFx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZTogYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uLmRlZmF1bHRBZ2dyZWdhdGUgPz8ge31cblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3M/Lmxlbmd0aCkge1xuXHRcdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zLmZvckVhY2goKGFkZGl0aW9uYWxQcm9wZXJ0eUluZm8pID0+IHtcblx0XHRcdFx0Ly8gQ3JlYXRlIHByb3BlcnR5SW5mbyBmb3IgZWFjaCBhZGRpdGlvbmFsIHByb3BlcnR5LlxuXHRcdFx0XHQvLyBUaGUgbmV3IHByb3BlcnR5ICduYW1lJyBoYXMgYmVlbiBwcmVmaXhlZCB3aXRoICdQcm9wZXJ0eV9UZWNobmljYWw6OicgZm9yIHVuaXF1ZW5lc3MgYW5kIGl0IGhhcyBiZWVuIG5hbWVkIHRlY2huaWNhbCBwcm9wZXJ0eSBhcyBpdCByZXF1aXJlcyBkZWRpY2F0ZWQgTURDIGF0dHJpYnV0ZXMgKHRlY2huaWNhbGx5R3JvdXBhYmxlIGFuZCB0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZSkuXG5cdFx0XHRcdGNyZWF0ZVRlY2huaWNhbFByb3BlcnR5KGFkZGl0aW9uYWxQcm9wZXJ0eUluZm8sIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLCByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmIChjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MpIHtcblx0XHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcy5tYXAoXG5cdFx0XHRcdChwcm9wZXJ0eUluZm8pID0+IHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwW3Byb3BlcnR5SW5mb10gPz8gcHJvcGVydHlJbmZvXG5cdFx0XHQpO1xuXHRcdFx0Ly8gQWRkIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byB0aGUgY29tcGxleCBwcm9wZXJ0eSB1c2luZyB0aGUgaGlkZGVuIGFubm90YXRpb24uXG5cdFx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcyA9IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5jb25jYXQoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGFnZ3JlZ2F0ZSBjb25kaXRpb25zLlxuICpcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGFnZ3JlZ2F0ZUNvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Ub3RhbCkge1xuXHRcdGNvbnN0IGFUb3RhbHMgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Ub3RhbDtcblx0XHRjb25zdCBhZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdFx0Y29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhVG90YWxzLCBjb2x1bW5zKS5mb3JFYWNoKChpbmZvTmFtZSkgPT4ge1xuXHRcdFx0YWdncmVnYXRlc1tpbmZvTmFtZV0gPSB7fTtcblx0XHR9KTtcblxuXHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBKU09OLnN0cmluZ2lmeShhZ2dyZWdhdGVzKTtcblx0fVxuXG5cdHJldHVybiBhZ2dyZWdhdGVDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIHtcblx0Ly8gTmVlZCB0byBnZXQgdGhlIHRhcmdldFxuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHR5cGVOYW1lUGx1cmFsID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lUGx1cmFsO1xuXHRjb25zdCB0aXRsZSA9IHR5cGVOYW1lUGx1cmFsICYmIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0eXBlTmFtZVBsdXJhbCkpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhZ2VNYW5pZmVzdFNldHRpbmdzOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoYXNBYnNvbHV0ZVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMCxcblx0XHRwMTNuTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKSxcblx0XHRpZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBnZXRUYWJsZUlEKHZpc3VhbGl6YXRpb25QYXRoKSA6IGdldFRhYmxlSUQoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpLCBcIkxpbmVJdGVtXCIpO1xuXHRjb25zdCB0YXJnZXRDYXBhYmlsaXRpZXMgPSBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25UYXJnZXRQYXRoKTtcblx0Y29uc3QgY3JlYXRpb25CZWhhdmlvdXIgPSBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoXG5cdCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjcmVhdGlvbkJlaGF2aW91ci5tb2RlIGFzIENyZWF0aW9uTW9kZSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHQpO1xuXG5cdGNvbnN0IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgbWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgaXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQgPSBnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dCkpO1xuXG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGhhc0Fic29sdXRlUGF0aCxcblx0XHR0YXJnZXRDYXBhYmlsaXRpZXMsXG5cdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvblxuXHQpO1xuXHRsZXQgdGhyZXNob2xkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IDEwIDogMzA7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uTWF4SXRlbXMpIHtcblx0XHR0aHJlc2hvbGQgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5NYXhJdGVtcy52YWx1ZU9mKCkgYXMgbnVtYmVyO1xuXHR9XG5cblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGlzU2VhcmNoYWJsZSA9IGlzUGF0aFNlYXJjaGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnMgPSB7XG5cdFx0Y3JlYXRlOiBnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRkZWxldGU6IGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdHBhc3RlOiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkKSxcblx0XHRtYXNzRWRpdDogZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRpbnNpZ2h0czogZ2V0U3RhbmRhcmRBY3Rpb25JbnNpZ2h0cyhjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0Y3JlYXRpb25Sb3c6IGdldENyZWF0aW9uUm93KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpXG5cdH07XG5cblx0cmV0dXJuIHtcblx0XHRpZDogaWQsXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5U2V0ID8gZW50aXR5U2V0Lm5hbWUgOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdHJvdzogX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eShcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0UGF0aCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGVcblx0XHQpLFxuXHRcdHAxM25Nb2RlOiBwMTNuTW9kZSxcblx0XHRzdGFuZGFyZEFjdGlvbnM6IHtcblx0XHRcdGFjdGlvbnM6IHN0YW5kYXJkQWN0aW9ucyxcblx0XHRcdGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkOiBpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCxcblx0XHRcdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgoY29udmVydGVyQ29udGV4dClcblx0XHR9LFxuXHRcdGRpc3BsYXlNb2RlOiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3VyYXRpb24pLFxuXHRcdGNyZWF0ZTogY3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0c2VsZWN0aW9uTW9kZTogc2VsZWN0aW9uTW9kZSxcblx0XHRhdXRvQmluZE9uSW5pdDpcblx0XHRcdF9pc0ZpbHRlckJhckhpZGRlbihwYWdlTWFuaWZlc3RTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCkgfHxcblx0XHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlICYmXG5cdFx0XHRcdCEodmlld0NvbmZpZ3VyYXRpb24gJiYgcGFnZU1hbmlmZXN0U2V0dGluZ3MuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpKSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiICYmICFwMTNuTW9kZSA/IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lIDogdmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0dGhyZXNob2xkOiB0aHJlc2hvbGQsXG5cdFx0c29ydENvbmRpdGlvbnM6IGdldFNvcnRDb25kaXRpb25zKGNvbnZlcnRlckNvbnRleHQsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBjb2x1bW5zKSxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0c2VhcmNoYWJsZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSAhPT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhKGlzQ29uc3RhbnQoaXNTZWFyY2hhYmxlKSAmJiBpc1NlYXJjaGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpbml0aWFsRXhwYW5zaW9uTGV2ZWw6IGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbilcblx0fTtcbn1cblxuZnVuY3Rpb24gX2dldEV4cG9ydERhdGFUeXBlKGRhdGFUeXBlOiBzdHJpbmcsIGlzQ29tcGxleFByb3BlcnR5ID0gZmFsc2UpOiBzdHJpbmcge1xuXHRsZXQgZXhwb3J0RGF0YVR5cGUgPSBcIlN0cmluZ1wiO1xuXHRpZiAoaXNDb21wbGV4UHJvcGVydHkpIHtcblx0XHRpZiAoZGF0YVR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlVGltZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gZXhwb3J0RGF0YVR5cGU7XG5cdH0gZWxzZSB7XG5cdFx0c3dpdGNoIChkYXRhVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkVkbS5EZWNpbWFsXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0XHRjYXNlIFwiRWRtLkRvdWJsZVwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJOdW1iZXJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVPZlRpbWVcIjpcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiRGF0ZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkRhdGVUaW1lXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIlRpbWVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkJvb2xlYW5cIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBleHBvcnREYXRhVHlwZTtcbn1cblxuLyoqXG4gKiBTcGxpdCB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIGludG8gdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgcGF0aCBhbmQgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBzcGxpdCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGg6IHN0cmluZykge1xuXHRjb25zdCBbdGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGhdID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXHRsZXQgbmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cigwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHJldHVybiB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oc2VsZWN0aW9uVmFyaWFudFBhdGgpO1xuXHRjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50VHlwZTtcblxuXHRpZiAoc2VsZWN0aW9uKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRzZWxlY3Rpb24uU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eU5hbWU/LnZhbHVlID8/IFwiXCI7XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lcy5pbmRleE9mKHByb3BlcnR5UGF0aCkgPT09IC0xKSB7XG5cdFx0XHRcdHByb3BlcnR5TmFtZXMucHVzaChwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0ZXh0OiBzZWxlY3Rpb24/LlRleHQ/LnRvU3RyaW5nKCksXG5cdFx0XHRwcm9wZXJ0eU5hbWVzOiBwcm9wZXJ0eU5hbWVzXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzSXBob25lOiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0Ly8gSWYgZW5hYmxlRnVsbFNjcmVlbiBpcyBub3Qgc2V0LCB1c2UgYXMgZGVmYXVsdCB0cnVlIG9uIHBob25lIGFuZCBmYWxzZSBvdGhlcndpc2Vcblx0bGV0IGVuYWJsZUZ1bGxTY3JlZW4gPSB0YWJsZVNldHRpbmdzLmVuYWJsZUZ1bGxTY3JlZW4gPz8gaXNJcGhvbmU7XG5cdC8vIE1ha2Ugc3VyZSB0aGF0IGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCBvbiBMaXN0UmVwb3J0IGZvciBkZXNrdG9wIG9yIHRhYmxldFxuXHRpZiAoIWlzSXBob25lICYmIGVuYWJsZUZ1bGxTY3JlZW4gJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRlbmFibGVGdWxsU2NyZWVuID0gZmFsc2U7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuRlVMTFNDUkVFTk1PREVfTk9UX09OX0xJU1RSRVBPUlQpO1xuXHR9XG5cdHJldHVybiBlbmFibGVGdWxsU2NyZWVuO1xufVxuXG5mdW5jdGlvbiBfZ2V0TXVsdGlTZWxlY3RNb2RlKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IG11bHRpU2VsZWN0TW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAodGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRzd2l0Y2ggKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkpIHtcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0OlxuXHRcdGNhc2UgVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTpcblx0XHRcdG11bHRpU2VsZWN0TW9kZSA9ICF0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZTpcblx0XHRcdG11bHRpU2VsZWN0TW9kZSA9IHRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID09PSBmYWxzZSA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkudXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRcdG11bHRpU2VsZWN0TW9kZSA9ICF0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXG5cdHJldHVybiBtdWx0aVNlbGVjdE1vZGU7XG59XG5cbmZ1bmN0aW9uIF9nZXRUYWJsZVR5cGUoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogVGFibGVUeXBlIHtcblx0bGV0IHRhYmxlVHlwZSA9IHRhYmxlU2V0dGluZ3M/LnR5cGUgfHwgXCJSZXNwb25zaXZlVGFibGVcIjtcblx0LyogIE5vdywgd2Uga2VlcCB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgbWFuaWZlc3QsIGV2ZW4gaWYgaXQgbGVhZHMgdG8gZXJyb3JzLlxuXHRcdFdlIG9ubHkgY2hhbmdlIGlmIHdlJ3JlIG5vdCBvbiBkZXNrdG9wIGZyb20gQW5hbHl0aWNhbC9UcmVlIHRvIFJlc3BvbnNpdmUuXG5cdCAqL1xuXHRpZiAoKHRhYmxlVHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIiB8fCB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpICYmICFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRGVza3RvcCgpKSB7XG5cdFx0dGFibGVUeXBlID0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0fVxuXHRyZXR1cm4gdGFibGVUeXBlO1xufVxuXG5mdW5jdGlvbiBfZ2V0VGFibGVNb2RlKFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0aXNUZW1wbGF0ZUxpc3RSZXBvcnQ6IGJvb2xlYW5cbik6IHsgcm93Q291bnRNb2RlPzogVGFibGVSb3dDb3VudE1vZGU7IHJvd0NvdW50PzogbnVtYmVyIH0ge1xuXHRpZiAodGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0aWYgKGlzVGVtcGxhdGVMaXN0UmVwb3J0KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyb3dDb3VudE1vZGU6IFwiQXV0b1wiLFxuXHRcdFx0XHRyb3dDb3VudDogM1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cm93Q291bnRNb2RlOiB0YWJsZVNldHRpbmdzLnJvd0NvdW50TW9kZSA/PyBcIkZpeGVkXCIsXG5cdFx0XHRcdHJvd0NvdW50OiB0YWJsZVNldHRpbmdzLnJvd0NvdW50ID8gdGFibGVTZXR0aW5ncy5yb3dDb3VudCA6IDVcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7fTtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXQoX3RhYmxlVHlwZTogVGFibGVUeXBlLCBfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3MuY29uZGVuc2VkVGFibGVMYXlvdXQgIT09IHVuZGVmaW5lZCAmJiBfdGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiXG5cdFx0PyBfdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dFxuXHRcdDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIF9nZXRUYWJsZVNlbGVjdGlvbkxpbWl0KF90YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogbnVtYmVyIHtcblx0cmV0dXJuIF90YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA9PT0gdHJ1ZSB8fCBfdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCA9PT0gMCA/IDAgOiBfdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCB8fCAyMDA7XG59XG5cbmZ1bmN0aW9uIF9nZXRUYWJsZUlubGluZUNyZWF0aW9uUm93Q291bnQoX3RhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBudW1iZXIge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50ID8gX3RhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50IDogMjtcbn1cblxuZnVuY3Rpb24gX2dldEZpbHRlcnMoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHF1aWNrRmlsdGVyUGF0aHM6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9W10sXG5cdHF1aWNrU2VsZWN0aW9uVmFyaWFudDogdW5rbm93bixcblx0cGF0aDogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1cbikge1xuXHRpZiAocXVpY2tTZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0cXVpY2tGaWx0ZXJQYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGggfSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRxdWlja0ZpbHRlcnM6IHtcblx0XHRcdHNob3dDb3VudHM6IHRhYmxlU2V0dGluZ3M/LnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uc2hvd0NvdW50cyxcblx0XHRcdHBhdGhzOiBxdWlja0ZpbHRlclBhdGhzXG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZ2V0RW5hYmxlRXhwb3J0KFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbmFibGVQYXN0ZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydCAhPT0gdW5kZWZpbmVkXG5cdFx0PyB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydFxuXHRcdDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gXCJPYmplY3RQYWdlXCIgfHwgZW5hYmxlUGFzdGU7XG59XG5cbmZ1bmN0aW9uIF9nZXRGcm96ZW5Db2x1bW5Db3VudCh0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHRhYmxlU2V0dGluZ3MuZnJvemVuQ29sdW1uQ291bnQ7XG59XG5cbmZ1bmN0aW9uIF9nZXRGaWx0ZXJDb25maWd1cmF0aW9uKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pIHtcblx0aWYgKCFsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0Y29uc3QgcXVpY2tGaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSA9IFtdO1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pO1xuXHRsZXQgcXVpY2tTZWxlY3Rpb25WYXJpYW50O1xuXHRsZXQgZmlsdGVycztcblx0dGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5wYXRocz8uZm9yRWFjaCgocGF0aDogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0pID0+IHtcblx0XHRxdWlja1NlbGVjdGlvblZhcmlhbnQgPSB0YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdGZpbHRlcnMgPSBfZ2V0RmlsdGVycyh0YWJsZVNldHRpbmdzLCBxdWlja0ZpbHRlclBhdGhzLCBxdWlja1NlbGVjdGlvblZhcmlhbnQsIHBhdGgpO1xuXHR9KTtcblxuXHRsZXQgaGlkZVRhYmxlVGl0bGUgPSBmYWxzZTtcblx0aGlkZVRhYmxlVGl0bGUgPSAhIXRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5oaWRlVGFibGVUaXRsZTtcblx0cmV0dXJuIHtcblx0XHRmaWx0ZXJzOiBmaWx0ZXJzLFxuXHRcdGhlYWRlclZpc2libGU6ICEocXVpY2tTZWxlY3Rpb25WYXJpYW50ICYmIGhpZGVUYWJsZVRpdGxlKVxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHJlbGF0aXZlUGF0aCkubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChuYXZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzLnB1c2goZ2V0TGFiZWwobmF2UHJvcGVydHkpIHx8IG5hdlByb3BlcnR5Lm5hbWUpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHM7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjaGVja0NvbmRlbnNlZExheW91dCA9IGZhbHNlXG4pOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgX21hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0YWJsZVNldHRpbmdzID0gKHRhYmxlTWFuaWZlc3RTZXR0aW5ncyAmJiB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncykgfHwge307XG5cdGNvbnN0IGNyZWF0aW9uTW9kZSA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5uYW1lIHx8IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRjb25zdCBlbmFibGVBdXRvQ29sdW1uV2lkdGggPSAhX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCk7XG5cdGNvbnN0IGVuYWJsZVBhc3RlID1cblx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlIDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJPYmplY3RQYWdlXCI7IC8vIFBhc3RlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgZXhjZXB0ZWQgZm9yIE9QXG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCk7XG5cdGNvbnN0IGRhdGFTdGF0ZUluZGljYXRvckZpbHRlciA9IHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgPyBcIkFQSS5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJcIiA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCA9IGNoZWNrQ29uZGVuc2VkTGF5b3V0ICYmIF9tYW5pZmVzdFdyYXBwZXIuaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQoKTtcblx0Y29uc3Qgb0ZpbHRlckNvbmZpZ3VyYXRpb24gPSBfZ2V0RmlsdGVyQ29uZmlndXJhdGlvbih0YWJsZVNldHRpbmdzLCBsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCB0YWJsZVR5cGU6IFRhYmxlVHlwZSA9IF9nZXRUYWJsZVR5cGUodGFibGVTZXR0aW5ncywgYWdncmVnYXRpb25IZWxwZXIsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCB0YWJsZVJvd01vZGUgPSBfZ2V0VGFibGVNb2RlKHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncywgdGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCk7XG5cdGNvbnN0IGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0KHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncyk7XG5cdGNvbnN0IG9Db25maWd1cmF0aW9uID0ge1xuXHRcdC8vIElmIG5vIGNyZWF0ZUF0RW5kIGlzIHNwZWNpZmllZCBpdCB3aWxsIGJlIGZhbHNlIGZvciBJbmxpbmUgY3JlYXRlIGFuZCB0cnVlIG90aGVyd2lzZVxuXHRcdGNyZWF0ZUF0RW5kOlxuXHRcdFx0dGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmRcblx0XHRcdFx0OiBjcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmUsXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24sXG5cdFx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIsXG5cdFx0Ly8gaWYgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQsIGkuZS4gc2V0IHRvIGZhbHNlXG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogIWN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA/ICEhdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgOiBmYWxzZSxcblx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCxcblx0XHRlbmFibGVFeHBvcnQ6IF9nZXRFbmFibGVFeHBvcnQodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgZW5hYmxlUGFzdGUpLFxuXHRcdGZyb3plbkNvbHVtbkNvdW50OiBfZ2V0RnJvemVuQ29sdW1uQ291bnQodGFibGVTZXR0aW5ncyksXG5cdFx0ZW5hYmxlRnVsbFNjcmVlbjogX2dldEZ1bGxTY3JlZW5CYXNlZE9uRGV2aWNlKHRhYmxlU2V0dGluZ3MsIGNvbnZlcnRlckNvbnRleHQsIF9tYW5pZmVzdFdyYXBwZXIuaXNQaG9uZSgpKSxcblx0XHRlbmFibGVNYXNzRWRpdDogdGFibGVTZXR0aW5ncz8uZW5hYmxlTWFzc0VkaXQsXG5cdFx0ZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHM6IHRhYmxlU2V0dGluZ3M/LmVuYWJsZUFkZENhcmRUb0luc2lnaHRzLFxuXHRcdGVuYWJsZVBhc3RlOiBlbmFibGVQYXN0ZSxcblx0XHRoZWFkZXJWaXNpYmxlOiB0cnVlLFxuXHRcdG11bHRpU2VsZWN0TW9kZTogX2dldE11bHRpU2VsZWN0TW9kZSh0YWJsZVNldHRpbmdzLCB0YWJsZVR5cGUsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHNlbGVjdGlvbkxpbWl0OiBfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdCh0YWJsZVNldHRpbmdzKSxcblx0XHRpbmxpbmVDcmVhdGlvblJvd0NvdW50OiBfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50KHRhYmxlU2V0dGluZ3MpLFxuXHRcdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU6IHRhYmxlU2V0dGluZ3M/LmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA/PyBmYWxzZSxcblx0XHRzaG93Um93Q291bnQ6ICF0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMgJiYgIV9tYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKT8uc2hvd0NvdW50cyxcblx0XHR0eXBlOiB0YWJsZVR5cGUsXG5cdFx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGNvbmRlbnNlZFRhYmxlTGF5b3V0ICYmIGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQsXG5cdFx0aXNDb21wYWN0VHlwZTogX21hbmlmZXN0V3JhcHBlci5pc0NvbXBhY3RUeXBlKClcblx0fTtcblxuXHRjb25zdCB0YWJsZUNvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7IC4uLm9Db25maWd1cmF0aW9uLCAuLi50YWJsZVJvd01vZGUsIC4uLm9GaWx0ZXJDb25maWd1cmF0aW9uIH07XG5cblx0aWYgKHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIgPSB0YWJsZVNldHRpbmdzLmhpZXJhcmNoeVF1YWxpZmllcjtcblx0fVxuXG5cdHJldHVybiB0YWJsZUNvbmZpZ3VyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29uZmlnKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvcGVydHlUeXBlQ29uZmlnIHtcblx0bGV0IG9UYXJnZXRNYXBwaW5nO1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBpc1R5cGVEZWZpbml0aW9uKG9Qcm9wZXJ0eS50YXJnZXRUeXBlKVxuXHRcdFx0PyBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eS50YXJnZXRUeXBlLnVuZGVybHlpbmdUeXBlXVxuXHRcdFx0OiBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eS50eXBlXTtcblx0fVxuXHRpZiAob1RhcmdldE1hcHBpbmcgPT09IHVuZGVmaW5lZCAmJiBkYXRhVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXTtcblx0fVxuXG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogUHJvcGVydHlUeXBlQ29uZmlnID0ge1xuXHRcdHR5cGU6IG9UYXJnZXRNYXBwaW5nPy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpICYmIG9UYXJnZXRNYXBwaW5nICE9PSB1bmRlZmluZWQpIHtcblx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMgPSB7XG5cdFx0XHRzY2FsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRTY2FsZSA/IG9Qcm9wZXJ0eS5zY2FsZSA6IHVuZGVmaW5lZCxcblx0XHRcdHByZWNpc2lvbjogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRQcmVjaXNpb24gPyBvUHJvcGVydHkucHJlY2lzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4TGVuZ3RoOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE1heExlbmd0aCA/IG9Qcm9wZXJ0eS5tYXhMZW5ndGggOiB1bmRlZmluZWQsXG5cdFx0XHRudWxsYWJsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiROdWxsYWJsZSA/IG9Qcm9wZXJ0eS5udWxsYWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1pbmltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdG1heGltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdGlzRGlnaXRTZXF1ZW5jZTpcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzRGlnaXRTZXF1ZW5jZX1gXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcblx0Z2V0VGFibGVBY3Rpb25zLFxuXHRnZXRUYWJsZUNvbHVtbnMsXG5cdGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSxcblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyxcblx0Y3JlYXRlVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uLFxuXHRnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGdldFNlbGVjdGlvbk1vZGUsXG5cdGdldFJvd1N0YXR1c1Zpc2liaWxpdHksXG5cdGdldEltcG9ydGFuY2UsXG5cdGdldFAxM25Nb2RlLFxuXHRnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uLFxuXHRpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUsXG5cdHNwbGl0UGF0aCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24sXG5cdGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRnZXRUeXBlQ29uZmlnLFxuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlXG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFpUUtBLFVBQVUsRUFNZjtFQUFBLFdBTktBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxVQUFVO0lBQVZBLFVBQVU7RUFBQSxHQUFWQSxVQUFVLEtBQVZBLFVBQVU7RUFrTWY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0MsZUFBZSxDQUM5QkMsa0JBQTRCLEVBQzVCQyxpQkFBeUIsRUFDekJDLGdCQUFrQyxFQUNsQ0Msa0JBQW9ELEVBQ25DO0lBQ2pCLE1BQU1DLGFBQWEsR0FBR0MseUJBQXlCLENBQUNMLGtCQUFrQixFQUFFQyxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDeEcsTUFBTUksa0JBQWtCLEdBQUdGLGFBQWEsQ0FBQ0csWUFBWTtJQUNyRCxNQUFNQyxjQUFjLEdBQUdKLGFBQWEsQ0FBQ0ssa0JBQWtCO0lBQ3ZELE1BQU1DLGVBQWUsR0FBR0Msc0JBQXNCLENBQzdDVCxnQkFBZ0IsQ0FBQ1UsK0JBQStCLENBQUNYLGlCQUFpQixDQUFDLENBQUNZLE9BQU8sRUFDM0VYLGdCQUFnQixFQUNoQkksa0JBQWtCLEVBQ2xCSCxrQkFBa0IsRUFDbEIsSUFBSSxFQUNKSyxjQUFjLENBQ2Q7SUFDRCxNQUFNTSxxQkFBeUMsR0FBRztNQUNqREMs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
|
|
2704
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5UeXBlIiwiZ2V0VGFibGVBY3Rpb25zIiwibGluZUl0ZW1Bbm5vdGF0aW9uIiwidmlzdWFsaXphdGlvblBhdGgiLCJjb252ZXJ0ZXJDb250ZXh0IiwibmF2aWdhdGlvblNldHRpbmdzIiwiYVRhYmxlQWN0aW9ucyIsImdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMiLCJhQW5ub3RhdGlvbkFjdGlvbnMiLCJ0YWJsZUFjdGlvbnMiLCJhSGlkZGVuQWN0aW9ucyIsImhpZGRlblRhYmxlQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImFjdGlvbk92ZXJ3cml0ZUNvbmZpZyIsImlzTmF2aWdhYmxlIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlT25TZWxlY3QiLCJlbmFibGVBdXRvU2Nyb2xsIiwiZW5hYmxlZCIsInZpc2libGUiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJjb21tYW5kIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJjb21tYW5kQWN0aW9ucyIsImdldFRhYmxlQ29sdW1ucyIsImlzSW5zaWdodHNFbmFibGVkIiwiYW5ub3RhdGlvbkNvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zIiwibWFuaWZlc3RDb2x1bW5zIiwiZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdCIsImNvbHVtbnMiLCJnZXRBbm5vdGF0aW9uRW50aXR5VHlwZSIsIndpZHRoIiwiaW1wb3J0YW5jZSIsImhvcml6b250YWxBbGlnbiIsImF2YWlsYWJpbGl0eSIsInNldHRpbmdzIiwiZm9ybWF0T3B0aW9ucyIsImdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUiLCJlbnRpdHlUeXBlIiwidGFibGVDb2x1bW5zIiwiYWdncmVnYXRpb25IZWxwZXIiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImZpbmRDb2x1bW5Gcm9tUGF0aCIsInBhdGgiLCJmaW5kIiwiY29sdW1uIiwiYW5ub3RhdGlvbkNvbHVtbiIsInByb3BlcnR5SW5mb3MiLCJ1bmRlZmluZWQiLCJyZWxhdGl2ZVBhdGgiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImN1cnJlbmN5T3JVbml0UHJvcGVydGllcyIsIlNldCIsImZvckVhY2giLCJ0YWJsZUNvbHVtbiIsInVuaXQiLCJhZGQiLCJjdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiZGVmaW5pdGlvbnMiLCJhbm5vdGF0aW9uIiwiYWdncmVnYXRlZFByb3BlcnR5IiwiX2VudGl0eVR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJuYW1lIiwicXVhbGlmaWVyIiwiY29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwibWFwIiwiY3R4RGVmUHJvcGVydHkiLCJ2YWx1ZSIsInJlc3VsdCIsInJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJoYXMiLCJkZWZhdWx0QWdncmVnYXRlIiwiY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lIiwiZm91bmRDb2x1bW4iLCJwdXNoIiwibGVuZ3RoIiwidXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZSIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsInR5cGUiLCJhZ2dyZWdhdGVzRGVmaW5pdGlvbnMiLCJlbmFibGVBbmFseXRpY3MiLCJlbmFibGUkc2VsZWN0IiwiZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0IiwiYWdncmVnYXRlcyIsIl91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyIsImFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZW5hYmxlQmFzaWNTZWFyY2giLCJpbmRleE9mIiwiZ3JvdXBDb25kaXRpb25zIiwiZ2V0R3JvdXBDb25kaXRpb25zIiwiYWdncmVnYXRlQ29uZGl0aW9ucyIsImdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJpbmNsdWRlcyIsImdldE5hdmlnYXRpb25UYXJnZXRQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uIiwibmF2Q29uZmlnIiwiT2JqZWN0Iiwia2V5cyIsImRhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsIm5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoIiwidGFyZ2V0RW50aXR5U2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzIiwiZmluZENvbHVtbkJ5UGF0aCIsIm9Db2x1bW4iLCJvVGFibGVDb2x1bW4iLCJvUHJvcGVydHkiLCJvUHJvcCIsIm9Vbml0IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5Iiwib1RpbWV6b25lIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkiLCJzVGltZXpvbmUiLCJDb21tb24iLCJUaW1lem9uZSIsIm9Vbml0Q29sdW1uIiwic1VuaXQiLCJNZWFzdXJlcyIsIklTT0N1cnJlbmN5IiwiVW5pdCIsInVuaXRUZXh0Iiwib1RpbWV6b25lQ29sdW1uIiwidGltZXpvbmUiLCJ0aW1lem9uZVRleHQiLCJ0b1N0cmluZyIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJ0ZXh0QW5ub3RhdGlvbiIsIlRleHQiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIm9UZXh0Q29sdW1uIiwidGV4dEFycmFuZ2VtZW50IiwidGV4dFByb3BlcnR5IiwibW9kZSIsImdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyIsImhlYWRlckluZm9UaXRsZVBhdGgiLCJVSSIsIkhlYWRlckluZm8iLCJUaXRsZSIsIlZhbHVlIiwic2VtYW50aWNLZXlBbm5vdGF0aW9ucyIsIlNlbWFudGljS2V5IiwiaGVhZGVySW5mb1R5cGVOYW1lIiwiVHlwZU5hbWUiLCJzZW1hbnRpY0tleUNvbHVtbnMiLCJjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50Iiwidmlld0NvbmZpZ3VyYXRpb24iLCJ0YWJsZU1hbmlmZXN0Q29uZmlnIiwiZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJzcGxpdFBhdGgiLCJuYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsInNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZSIsIm9WaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsImdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24iLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiSlNPTiIsInN0cmluZ2lmeSIsIm9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiaGVhZGVySW5mb1RpdGxlIiwic2VtYW50aWNLZXlzIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImlzQmxhbmtUYWJsZSIsImdldENvbHVtbnNGcm9tRW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJBY3Rpb25IZWxwZXIiLCJnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aCIsInJlc3RyaWN0aW9ucyIsImdldFJlc3RyaWN0aW9ucyIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsInVwZGF0YWJsZSIsImlzVXBkYXRhYmxlIiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsImlzQ29uc3RhbnQiLCJleHByZXNzaW9uIiwibmF2aWdhdGlvbkV4cHJlc3Npb24iLCJfdHlwZSIsInVwZGF0YWJsZUV4cHJlc3Npb24iLCJDYXBhYmlsaXRpZXMiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0aWVzIiwiYWN0aW9uTmFtZSIsInByb3BlcnR5TmFtZSIsInNpemUiLCJ0aXRsZVByb3BlcnR5IiwiQXJyYXkiLCJmcm9tIiwiam9pbiIsImdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJjdXJyZW50RW50aXR5VHlwZSIsImNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNFbnRpdHlTZXQiLCJhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCIkVHlwZSIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJzb3VyY2VFbnRpdHlUeXBlIiwiUmVxdWlyZXNDb250ZXh0IiwiSW5saW5lIiwidmFsdWVPZiIsIkhpZGRlbiIsImVxdWFsIiwiZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbCIsImdldFBhdGhGcm9tQWN0aW9uQW5ub3RhdGlvbiIsInNvdXJjZSIsImNvbnN0YW50Iiwic3Vic3RyaW5nIiwic3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5Iiwic3BsaXQiLCJuYXZpZ2F0aW9uUGF0aCIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwidGFyZ2V0T2JqZWN0IiwicGFydG5lciIsInBhdGhJbk1vZGVsIiwic2xpY2UiLCJ1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0IiwiZGF0YUZpZWxkSWQiLCJzb21lIiwiYWN0aW9uS2V5IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwibWFuaWZlc3RBY3Rpb25JZCIsImdlbmVyYXRlIiwiQWN0aW9uIiwiU2VtYW50aWNPYmplY3QiLCJoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhciIsImFjdGlvbiIsImdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dCIsImFWaXNpYmxlUGF0aEV4cHJlc3Npb25zIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24iLCJpc0RlbGV0YWJsZSIsImlzUGF0aERlbGV0YWJsZSIsImlzUGF0aFVwZGF0YWJsZSIsImdldFNlbGVjdGlvbk1vZGUiLCJ0YXJnZXRDYXBhYmlsaXRpZXMiLCJkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24iLCJTZWxlY3Rpb25Nb2RlIiwiTm9uZSIsInRhYmxlTWFuaWZlc3RTZXR0aW5ncyIsInNlbGVjdGlvbk1vZGUiLCJ0YWJsZVNldHRpbmdzIiwiYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucyIsImFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zIiwiaXNQYXJlbnREZWxldGFibGUiLCJwYXJlbnRFbnRpdHlTZXREZWxldGFibGUiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJPYmplY3RQYWdlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJiTWFzc0VkaXRFbmFibGVkIiwiaWZFbHNlIiwiYW5kIiwiSXNFZGl0YWJsZSIsIk11bHRpIiwiQXV0byIsIlNpbmdsZSIsImJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwib3IiLCJlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiY29uY2F0IiwiY29weURhdGFGaWVsZCIsImdldENvcHlBY3Rpb24iLCJmaWx0ZXIiLCJkYXRhRmllbGRJc0NvcHlBY3Rpb24iLCJzRW50aXR5VHlwZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIkFjdGlvblR5cGUiLCJDb3B5IiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwia2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwibm90IiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbiIsInRleHQiLCJMYWJlbCIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJnZXRUZXh0IiwiRGVmYXVsdCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJEZXRlcm1pbmluZyIsInVzZUVuYWJsZWRFeHByZXNzaW9uIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwic291cmNlVHlwZSIsInBhcmFtZXRlcnMiLCJpc0NvbGxlY3Rpb24iLCJ0YWJsZUFjdGlvbiIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0SGlnaGxpZ2h0Um93QmluZGluZyIsImNyaXRpY2FsaXR5QW5ub3RhdGlvbiIsImlzRHJhZnRSb290T3JOb2RlIiwidGFyZ2V0RW50aXR5VHlwZSIsImRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uIiwiTWVzc2FnZVR5cGUiLCJnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUiLCJhTWlzc2luZ0tleXMiLCJmb3JtYXRSZXN1bHQiLCJFbnRpdHkiLCJIYXNBY3RpdmUiLCJJc0FjdGl2ZSIsInRhYmxlRm9ybWF0dGVycyIsInJvd0hpZ2hsaWdodGluZyIsIl9nZXRDcmVhdGlvbkJlaGF2aW91ciIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwibmF2aWdhdGlvbiIsImNyZWF0ZSIsImRldGFpbCIsIm9yaWdpbmFsVGFibGVTZXR0aW5ncyIsIm91dGJvdW5kIiwib3V0Ym91bmREZXRhaWwiLCJuZXdBY3Rpb24iLCJ0YXJnZXRBbm5vdGF0aW9ucyIsInRhcmdldEFubm90YXRpb25zQ29tbW9uIiwidGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uIiwiU2Vzc2lvbiIsIkRyYWZ0Um9vdCIsIk5ld0FjdGlvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJjcmVhdGlvbk1vZGUiLCJDcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsIkVycm9yIiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJOZXdQYWdlIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJ0YWJsZVR5cGUiLCJwcmVzc1Byb3BlcnR5IiwibmF2aWdhdGlvblRhcmdldCIsImNyaXRpY2FsaXR5UHJvcGVydHkiLCJkaXNwbGF5IiwidGFyZ2V0IiwiQ3JpdGljYWxpdHkiLCJNb2RlbEhlbHBlciIsImdldERyYWZ0Um9vdCIsImdldERyYWZ0Tm9kZSIsInJvd05hdmlnYXRlZEV4cHJlc3Npb24iLCJuYXZpZ2F0ZWRSb3ciLCJwcmVzcyIsInJvd05hdmlnYXRlZCIsIklzSW5hY3RpdmUiLCJjb2x1bW5zVG9CZUNyZWF0ZWQiLCJub25Tb3J0YWJsZUNvbHVtbnMiLCJ0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24iLCJleGlzdHMiLCJ0YXJnZXRUeXBlIiwicmVsYXRlZFByb3BlcnRpZXNJbmZvIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzIiwicmVsYXRlZFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydHlOYW1lcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwidGV4dE9ubHlQcm9wZXJ0aWVzRnJvbVRleHRBbm5vdGF0aW9uIiwiY29sdW1uSW5mbyIsImdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkiLCJleHBvcnRTZXR0aW5ncyIsInRlbXBsYXRlIiwiZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSIsIndyYXAiLCJleHBvcnRTZXR0aW5nc1dyYXBwaW5nIiwiX2dldEV4cG9ydERhdGFUeXBlIiwiZXhwb3J0VW5pdE5hbWUiLCJ1bml0UHJvcGVydHkiLCJleHBvcnRVbml0U3RyaW5nIiwiZXhwb3J0VGltZXpvbmVOYW1lIiwidGltZXpvbmVQcm9wZXJ0eSIsInV0YyIsImV4cG9ydFRpbWV6b25lU3RyaW5nIiwiZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUiLCJ1cGRhdGVQcm9wZXJ0eUxhYmVsIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3MiLCJyZWxhdGVkQ29sdW1ucyIsIl9jcmVhdGVSZWxhdGVkQ29sdW1ucyIsImZ1bGxQcm9wZXJ0eVBhdGgiLCJ1c2VEYXRhRmllbGRQcmVmaXgiLCJhdmFpbGFibGVGb3JBZGFwdGF0aW9uIiwicmVwbGFjZVNwZWNpYWxDaGFycyIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgiLCJnZXRTZW1hbnRpY09iamVjdFBhdGgiLCJpc0hpZGRlbiIsImdyb3VwUGF0aCIsIl9zbGljZUF0U2xhc2giLCJpc0dyb3VwIiwibGFiZWwiLCJnZXRMYWJlbCIsImV4cG9ydFR5cGUiLCJzRGF0ZUlucHV0Rm9ybWF0IiwiZGF0YVR5cGUiLCJnZXREYXRhRmllbGREYXRhVHlwZSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImdldFR5cGVDb25maWciLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsImlzQVByb3BlcnR5RnJvbVRleHRPbmx5QW5ub3RhdGlvbiIsInNvcnRhYmxlIiwidHlwZUNvbmZpZyIsImNsYXNzTmFtZSIsImNvbnN0cmFpbnRzIiwiX2lzRXhwb3J0YWJsZUNvbHVtbiIsImlucHV0Rm9ybWF0Iiwic2NhbGUiLCJkZWxpbWl0ZXIiLCJjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMiLCJfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzIiwiQW5ub3RhdGlvbiIsImdyb3VwTGFiZWwiLCJncm91cCIsInNlbWFudGljT2JqZWN0UGF0aCIsImlzR3JvdXBhYmxlIiwiaXNQcm9wZXJ0eUdyb3VwYWJsZSIsImlzS2V5IiwiY2FzZVNlbnNpdGl2ZSIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsImdldEltcG9ydGFuY2UiLCJEYXRhRmllbGREZWZhdWx0IiwiYWRkaXRpb25hbExhYmVscyIsInNUb29sdGlwIiwiX2dldFRvb2x0aXAiLCJ0b29sdGlwIiwidGFyZ2V0VmFsdWVmcm9tRFAiLCJnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50IiwiaXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdCIsImxpbmtlZEFubm90YXRpb25Db2x1bW5zIiwiY29sIiwicHJvcGVydHlUeXBlIiwiZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5IiwiaXNQcm9wZXJ0eSIsImlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIiwiVGFyZ2V0IiwiJHRhcmdldCIsIk1lZGlhVHlwZSIsInRlcm0iLCJpc1VSTCIsIl9pc1ZhbGlkQ29sdW1uIiwiX2dldFZpc2libGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkTW9kZWxQYXRoIiwicHJvcGVydHlWYWx1ZSIsImlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQiLCJpc0FuYWx5dGljYWxMZWFmIiwiX2dldEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImRhdGFGaWVsZEdyb3VwIiwiZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiRGF0YSIsImlubmVyRGF0YUZpZWxkIiwiZGF0YUZpZWxkRGVmYXVsdCIsImlzRGF0YUZpZWxkVHlwZXMiLCJRdWlja0luZm8iLCJkYXRhcG9pbnRUYXJnZXQiLCJnZXRSb3dTdGF0dXNWaXNpYmlsaXR5IiwiY29sTmFtZSIsImlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXAiLCJnZXRFcnJvclN0YXR1c1RleHRWaXNpYmlsaXR5Rm9ybWF0dGVyIiwiZXhpc3RpbmdDb2x1bW5zIiwicmVsYXRlZFByb3BlcnR5TmFtZU1hcCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJyZWxhdGVkQ29sdW1uIiwiaXNQYXJ0T2ZMaW5lSXRlbSIsImV4aXN0aW5nQ29sdW1uIiwibmV3TmFtZSIsInByb3BlcnR5SW5mbyIsIl9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZSIsImNyZWF0ZVRlY2huaWNhbFByb3BlcnR5IiwicmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXAiLCJjb2x1bW5FeGlzdHMiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJ0ZWNobmljYWxDb2x1bW4iLCJhZ2dyZWdhdGFibGUiLCJleHRlbnNpb24iLCJ0ZWNobmljYWxseUdyb3VwYWJsZSIsInRlY2huaWNhbGx5QWdncmVnYXRhYmxlIiwiX2dldFNob3dEYXRhRmllbGRzTGFiZWwiLCJmaWVsZEdyb3VwTmFtZSIsIm9Db2x1bW5zIiwiYUNvbHVtbktleXMiLCJzaG93RGF0YUZpZWxkc0xhYmVsIiwiX2dldFJlbGF0aXZlUGF0aCIsImlzTGFzdFNsYXNoIiwiaXNMYXN0UGFydCIsImlTbGFzaEluZGV4IiwibGFzdEluZGV4T2YiLCJfaXNDb2x1bW5NdWx0aVZhbHVlZCIsInByb3BlcnR5T2JqZWN0UGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJfaXNDb2x1bW5Tb3J0YWJsZSIsInByb3BlcnR5UGF0aCIsImZpbHRlckZ1bmN0aW9ucyIsIl9nZXRGaWx0ZXJGdW5jdGlvbnMiLCJpc0FycmF5IiwiQ29udmVydGVyQ29udGV4dCIsIlR5cGVHdWFyZHMiLCJGaWx0ZXJGdW5jdGlvbnMiLCJnZXRFbnRpdHlDb250YWluZXIiLCJfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSIsInRleHRMaW5lc0VkaXQiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzIiwiYVNlbWFudGljS2V5VmFsdWVzIiwiYlNlbWFudGljS2V5Rm91bmQiLCJpIiwidmFsdWVzIiwic2VtYW50aWNLZXlGb3VuZCIsIl9maW5kUHJvcGVydGllcyIsInNlbWFudGljS2V5VmFsdWVzIiwiZmllbGRHcm91cFByb3BlcnRpZXMiLCJzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwIiwic1Byb3BlcnR5UGF0aCIsInRtcCIsImZpZWxkR3JvdXBQcm9wZXJ0eVBhdGgiLCJfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwIiwiYVByb3BlcnRpZXMiLCJfcHJvcGVydGllc0ZvdW5kIiwiZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uIiwiaXNGaWVsZEdyb3VwQ29sdW1uIiwic2VtYW50aWNLZXkiLCJzZW1hbnRpY0tleUluRmllbGRHcm91cCIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsInNob3dFcnJvck9iamVjdFN0YXR1cyIsImhhc0RyYWZ0SW5kaWNhdG9yIiwiX2dldEltcE51bWJlciIsIkltcG9ydGFuY2UiLCJfZ2V0RGF0YUZpZWxkSW1wb3J0YW5jZSIsIl9nZXRNYXhJbXBvcnRhbmNlIiwiZmllbGRzIiwibWF4SW1wTnVtYmVyIiwiaW1wTnVtYmVyIiwiRGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2UiLCJmaWVsZCIsImZpZWxkc1dpdGhJbXBvcnRhbmNlIiwibWFwU2VtYW50aWNLZXlzIiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiZGF0YUZpZWxkVGFyZ2V0IiwiZmllbGRHcm91cERhdGEiLCJmaWVsZEdyb3VwSGFzU2VtYW50aWNLZXkiLCJmaWVsZEdyb3VwRGF0YUZpZWxkIiwiSGlnaCIsIml0ZW0iLCJjaGVja0lmQ29sdW1uSXNTdXBwb3J0ZWRGb3JJbnNpZ2h0cyIsInNMYWJlbCIsImlzTXVsdGlWYWx1ZSIsImlzSW1hZ2VDb2x1bW4iLCJpc0ltYWdlVVJMIiwiZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zIiwidGFibGVDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldFRhcmdldE9iamVjdFBhdGgiLCJsaW5lSXRlbSIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5IiwidmlzdWFsU2V0dGluZ3MiLCJ3aWR0aENhbGN1bGF0aW9uIiwiZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHMiLCJGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJIVE1MNSIsIkNzc0RlZmF1bHRzIiwiaXNJbnNpZ2h0c1N1cHBvcnRlZCIsInJlbGF0ZWRQcm9wZXJ0eU5hbWUiLCJhZGRpdGlvbmFsUHJvcGVydHlOYW1lIiwiX2dldFByb3BlcnR5TmFtZXMiLCJtYXRjaGVkUHJvcGVydGllcyIsInJlc29sdmVQYXRoIiwiX2FwcGVuZEN1c3RvbVRlbXBsYXRlIiwiaW50ZXJuYWxDb2x1bW5zIiwiaXNBbm5vdGF0aW9uQ29sdW1uIiwiaXNTbG90Q29sdW1uIiwibWFuaWZlc3RDb2x1bW4iLCJTbG90IiwiaXNDdXN0b21Db2x1bW4iLCJfdXBkYXRlTGlua2VkUHJvcGVydGllc09uQ3VzdG9tQ29sdW1ucyIsImFubm90YXRpb25UYWJsZUNvbHVtbnMiLCJwcm9wIiwicmVwbGFjZSIsInZhbGlkYXRlS2V5IiwiYmFzZVRhYmxlQ29sdW1uIiwicG9zaXRpb24iLCJhbmNob3IiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInByb3BlcnRpZXNUb092ZXJ3cml0ZUFubm90YXRpb25Db2x1bW4iLCJpc0FjdGlvbk5hdmlnYWJsZSIsImJhc2VNYW5pZmVzdENvbHVtbiIsImhlYWRlciIsIkhvcml6b250YWxBbGlnbiIsIkJlZ2luIiwiaWQiLCJjdXN0b21UYWJsZUNvbHVtbiIsIm1lc3NhZ2UiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIk1hbmlmZXN0IiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlQ2F0ZWdvcnlUeXBlIiwiQW5ub3RhdGlvbkNvbHVtbnMiLCJJbnZhbGlkS2V5IiwiZ2V0UDEzbk1vZGUiLCJ2YXJpYW50TWFuYWdlbWVudCIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiYVBlcnNvbmFsaXphdGlvbiIsImlzQW5hbHl0aWNhbFRhYmxlIiwiaXNSZXNwb25zaXZlVGFibGUiLCJwZXJzb25hbGl6YXRpb24iLCJzb3J0IiwiYWdncmVnYXRlIiwiTGlzdFJlcG9ydCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJpc0ZpbHRlckJhckhpZGRlbiIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJnZXRTb3J0Q29uZGl0aW9ucyIsIm5vblNvcnRhYmxlUHJvcGVydGllcyIsInNvcnRDb25kaXRpb25zIiwiU29ydE9yZGVyIiwic29ydGVycyIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJjb25kaXRpb25Qcm9wZXJ0eSIsIlByb3BlcnR5IiwiaW5mb05hbWUiLCJjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzIiwiZGVzY2VuZGluZyIsIkRlc2NlbmRpbmciLCJnZXRJbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJsZXZlbCIsIkluaXRpYWxFeHBhbnNpb25MZXZlbCIsInBhdGhzIiwiaW5mb05hbWVzIiwiY3VycmVudFBhdGgiLCJHcm91cEJ5IiwiYUdyb3VwQnkiLCJhR3JvdXBMZXZlbHMiLCJncm91cExldmVscyIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZSIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5RGVmaW5pdGlvbiIsImN1c3RvbUFnZ3JlZ2F0ZSIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm8iLCJUb3RhbCIsImFUb3RhbHMiLCJ0eXBlTmFtZVBsdXJhbCIsIlR5cGVOYW1lUGx1cmFsIiwidGl0bGUiLCJwYWdlTWFuaWZlc3RTZXR0aW5ncyIsImhhc0Fic29sdXRlUGF0aCIsInAxM25Nb2RlIiwiZ2V0VGFibGVJRCIsImNyZWF0aW9uQmVoYXZpb3VyIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwiaXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQiLCJnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyIsImlzRHJhZnRPclN0aWNreVN1cHBvcnRlZCIsInRocmVzaG9sZCIsIk1heEl0ZW1zIiwiaXNTZWFyY2hhYmxlIiwiaXNQYXRoU2VhcmNoYWJsZSIsInN0YW5kYXJkQWN0aW9ucyIsImdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlIiwiZGVsZXRlIiwiZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUiLCJwYXN0ZSIsImdldFN0YW5kYXJkQWN0aW9uUGFzdGUiLCJtYXNzRWRpdCIsImdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQiLCJpbnNpZ2h0cyIsImdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMiLCJjcmVhdGlvblJvdyIsImdldENyZWF0aW9uUm93IiwiZW50aXR5TmFtZSIsImNvbGxlY3Rpb24iLCJyb3ciLCJpc0luRGlzcGxheU1vZGUiLCJhdXRvQmluZE9uSW5pdCIsInNlYXJjaGFibGUiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJpc0NvbXBsZXhQcm9wZXJ0eSIsImV4cG9ydERhdGFUeXBlIiwidGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aCIsInN1YnN0ciIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwic2VsZWN0aW9uIiwicHJvcGVydHlOYW1lcyIsIlNlbGVjdE9wdGlvbnMiLCJzZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UiLCJpc0lwaG9uZSIsImVuYWJsZUZ1bGxTY3JlZW4iLCJJc3N1ZVR5cGUiLCJGVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCIsIl9nZXRNdWx0aVNlbGVjdE1vZGUiLCJtdWx0aVNlbGVjdE1vZGUiLCJzZWxlY3RBbGwiLCJ1c2VJY29uVGFiQmFyIiwiX2dldFRhYmxlVHlwZSIsImlzRGVza3RvcCIsIl9nZXRUYWJsZU1vZGUiLCJpc1RlbXBsYXRlTGlzdFJlcG9ydCIsInJvd0NvdW50TW9kZSIsInJvd0NvdW50IiwiX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX3RhYmxlVHlwZSIsIl90YWJsZVNldHRpbmdzIiwiY29uZGVuc2VkVGFibGVMYXlvdXQiLCJfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdCIsInNlbGVjdGlvbkxpbWl0IiwiX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJfZ2V0RmlsdGVycyIsInF1aWNrRmlsdGVyUGF0aHMiLCJxdWlja1NlbGVjdGlvblZhcmlhbnQiLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwicXVpY2tWYXJpYW50U2VsZWN0aW9uIiwiX2dldEVuYWJsZUV4cG9ydCIsImVuYWJsZVBhc3RlIiwiZW5hYmxlRXhwb3J0IiwiX2dldEZyb3plbkNvbHVtbkNvdW50IiwiZnJvemVuQ29sdW1uQ291bnQiLCJfZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlcnMiLCJoaWRlVGFibGVUaXRsZSIsImhlYWRlclZpc2libGUiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5hdlByb3BlcnR5IiwiY2hlY2tDb25kZW5zZWRMYXlvdXQiLCJfbWFuaWZlc3RXcmFwcGVyIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwiaXNQaG9uZSIsInRlbXBsYXRlVHlwZSIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50Iiwib0ZpbHRlckNvbmZpZ3VyYXRpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJ0YWJsZVJvd01vZGUiLCJvQ29uZmlndXJhdGlvbiIsImRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEiLCJlbmFibGVNYXNzRWRpdCIsImlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUiLCJzaG93Um93Q291bnQiLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiaXNDb21wYWN0VHlwZSIsInRhYmxlQ29uZmlndXJhdGlvbiIsImhpZXJhcmNoeVF1YWxpZmllciIsIm9UYXJnZXRNYXBwaW5nIiwiaXNUeXBlRGVmaW5pdGlvbiIsIkVETV9UWVBFX01BUFBJTkciLCJ1bmRlcmx5aW5nVHlwZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiSXNEaWdpdFNlcXVlbmNlIiwicGFyc2VBc1N0cmluZyIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdEVudGl0eVR5cGUsXG5cdEVudW1WYWx1ZSxcblx0TmF2aWdhdGlvblByb3BlcnR5LFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0UHJvcGVydHlQYXRoXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGdW5jdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY0tleSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbl9FZG1cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0QW5ub3RhdGlvbnNfU2Vzc2lvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvU2Vzc2lvbl9FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFQb2ludCxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlLFxuXHRTZWxlY3RPcHRpb25UeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGxleFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHtcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSxcblx0Z2V0RGF0YUZpZWxkRGF0YVR5cGUsXG5cdGdldFNlbWFudGljT2JqZWN0UGF0aCxcblx0Z2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludCxcblx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCxcblx0aXNEYXRhRmllbGRUeXBlcyxcblx0aXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiwgQ29tYmluZWRBY3Rpb24sIEN1c3RvbUFjdGlvbiwgT3ZlcnJpZGVUeXBlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHtcblx0ZGF0YUZpZWxkSXNDb3B5QWN0aW9uLFxuXHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LFxuXHRnZXRDb3B5QWN0aW9uLFxuXHRpc0FjdGlvbk5hdmlnYWJsZSxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBFbnRpdHksIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBpbnNlcnRDdXN0b21FbGVtZW50cywgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVDYXRlZ29yeVR5cGUsIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0RURNX1RZUEVfTUFQUElORyxcblx0ZXF1YWwsXG5cdGZvcm1hdFJlc3VsdCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSwgcmVwbGFjZVNwZWNpYWxDaGFycyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBUeXBlR3VhcmRzIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7XG5cdGlzQW5ub3RhdGlvbk9mVHlwZSxcblx0aXNOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRpc1Byb3BlcnR5LFxuXHRpc1R5cGVEZWZpbml0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGVuaGFuY2VEYXRhTW9kZWxQYXRoLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhEZWxldGFibGUsXG5cdGlzUGF0aFNlYXJjaGFibGUsXG5cdGlzUGF0aFVwZGF0YWJsZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSwgdHlwZSBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9FbnRpdHlTZXRIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0aXNJbWFnZVVSTFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgaXNNdWx0aVZhbHVlRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgRGVmYXVsdFR5cGVGb3JFZG1UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgQWN0aW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2hlbHBlcnMvQWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4gfSBmcm9tIFwiLi4vLi4vaGVscGVycy9EYXRhRmllbGRIZWxwZXJcIjtcbmltcG9ydCB7IGdldFRhYmxlSUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHR5cGUge1xuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlLFxuXHRGb3JtYXRPcHRpb25zVHlwZSxcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0TmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb24sXG5cdFRhYmxlQ29sdW1uU2V0dGluZ3MsXG5cdFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRWaWV3UGF0aENvbmZpZ3VyYXRpb25cbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7XG5cdEFjdGlvblR5cGUsXG5cdENyZWF0aW9uTW9kZSxcblx0SG9yaXpvbnRhbEFsaWduLFxuXHRJbXBvcnRhbmNlLFxuXHRTZWxlY3Rpb25Nb2RlLFxuXHRUZW1wbGF0ZVR5cGUsXG5cdFZhcmlhbnRNYW5hZ2VtZW50VHlwZSxcblx0VmlzdWFsaXphdGlvblR5cGVcbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIE1hbmlmZXN0V3JhcHBlciBmcm9tIFwiLi4vLi4vTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUgfSBmcm9tIFwiLi9Dcml0aWNhbGl0eVwiO1xuaW1wb3J0IHR5cGUgeyBTdGFuZGFyZEFjdGlvbkNvbmZpZ1R5cGUgfSBmcm9tIFwiLi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7XG5cdGdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Z2V0Q3JlYXRpb25Sb3csXG5cdGdldERlbGV0ZVZpc2liaWxpdHksXG5cdGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nLFxuXHRnZXRNYXNzRWRpdFZpc2liaWxpdHksXG5cdGdldFJlc3RyaWN0aW9ucyxcblx0Z2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUsXG5cdGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzLFxuXHRnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0LFxuXHRnZXRTdGFuZGFyZEFjdGlvblBhc3RlLFxuXHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQsXG5cdGlzSW5EaXNwbGF5TW9kZVxufSBmcm9tIFwiLi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcblxuaW1wb3J0IHsgZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG5cdGF1dG9CaW5kT25Jbml0OiBib29sZWFuO1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHRpZDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IHN0cmluZztcblx0cm93Pzoge1xuXHRcdGFjdGlvbj86IHN0cmluZztcblx0XHRwcmVzcz86IHN0cmluZztcblx0XHRyb3dIaWdobGlnaHRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdHJvd05hdmlnYXRlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0dmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR9O1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZT47XG5cdFx0aXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdFx0dXBkYXRhYmxlUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdH07XG5cdGRpc3BsYXlNb2RlPzogYm9vbGVhbjtcblx0dGhyZXNob2xkOiBudW1iZXI7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0c29ydENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGdyb3VwQ29uZGl0aW9ucz86IHN0cmluZztcblx0YWdncmVnYXRlQ29uZGl0aW9ucz86IHN0cmluZztcblx0aW5pdGlhbEV4cGFuc2lvbkxldmVsPzogbnVtYmVyO1xuXG5cdC8qKiBDcmVhdGUgbmV3IGVudHJpZXMgKi9cblx0Y3JlYXRlOiBDcmVhdGVCZWhhdmlvciB8IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWw7XG5cdHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHNlYXJjaGFibGU6IGJvb2xlYW47XG5cblx0aW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIHdpdGhpbiB0aGUgYXBwIChkZWZhdWx0IGNhc2UpXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUJlaGF2aW9yID0ge1xuXHRtb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGFwcGVuZDogYm9vbGVhbjtcblx0bmV3QWN0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCBieSBuYXZpZ2F0aW5nIHRvIHNvbWUgdGFyZ2V0XG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgPSB7XG5cdG1vZGU6IFwiRXh0ZXJuYWxcIjtcblx0b3V0Ym91bmQ6IHN0cmluZztcblx0b3V0Ym91bmREZXRhaWw6IE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uW1wib3V0Ym91bmREZXRhaWxcIl07XG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uID0ge1xuXHRpc0RlbGV0YWJsZTogYm9vbGVhbjtcblx0aXNVcGRhdGFibGU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uID0ge1xuXHRwYXRoczoge1xuXHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdH1bXTtcblx0c2hvd0NvdW50cz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiA9IHtcblx0cHJvcGVydHlOYW1lczogc3RyaW5nW107XG5cdHRleHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uID0ge1xuXHRjcmVhdGVBdEVuZDogYm9vbGVhbjtcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6IGJvb2xlYW47XG5cdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogYm9vbGVhbjtcblx0ZW5hYmxlRXhwb3J0OiBib29sZWFuO1xuXHRmcm96ZW5Db2x1bW5Db3VudD86IG51bWJlcjtcblx0aGVhZGVyVmlzaWJsZTogYm9vbGVhbjtcblx0ZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24+O1xuXHR0eXBlOiBUYWJsZVR5cGU7XG5cdHJvd0NvdW50TW9kZT86IFRhYmxlUm93Q291bnRNb2RlO1xuXHRyb3dDb3VudD86IG51bWJlcjtcblx0c2VsZWN0QWxsPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uTGltaXQ6IG51bWJlcjtcblx0bXVsdGlTZWxlY3RNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVuYWJsZVBhc3RlOiBib29sZWFuO1xuXHRlbmFibGVGdWxsU2NyZWVuOiBib29sZWFuO1xuXHRzaG93Um93Q291bnQ6IGJvb2xlYW47XG5cdGlubGluZUNyZWF0aW9uUm93Q291bnQ/OiBudW1iZXI7XG5cdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU/OiBib29sZWFuO1xuXHRlbmFibGVNYXNzRWRpdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiBib29sZWFuO1xuXHRkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aXNDb21wYWN0VHlwZT86IGJvb2xlYW47XG5cdGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZztcblx0ZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVUeXBlID0gXCJHcmlkVGFibGVcIiB8IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfCBcIkFuYWx5dGljYWxUYWJsZVwiIHwgXCJUcmVlVGFibGVcIjtcbmV4cG9ydCB0eXBlIFRhYmxlUm93Q291bnRNb2RlID0gXCJBdXRvXCIgfCBcIkZpeGVkXCI7XG5cbmVudW0gQ29sdW1uVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIiwgLy8gRGVmYXVsdCBUeXBlIChDdXN0b20gQ29sdW1uKVxuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG4vLyBDdXN0b20gQ29sdW1uIGZyb20gTWFuaWZlc3RcbmV4cG9ydCB0eXBlIE1hbmlmZXN0RGVmaW5lZEN1c3RvbUNvbHVtbiA9IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbiAmIHtcblx0dHlwZT86IENvbHVtblR5cGUuRGVmYXVsdDtcbn07XG5cbi8vIFNsb3QgQ29sdW1uIGZyb20gQnVpbGRpbmcgQmxvY2tcbmV4cG9ydCB0eXBlIEZyYWdtZW50RGVmaW5lZFNsb3RDb2x1bW4gPSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gJiB7XG5cdHR5cGU6IENvbHVtblR5cGUuU2xvdDtcbn07XG5cbi8vIFByb3BlcnRpZXMgYWxsIENvbHVtblR5cGVzIGhhdmU6XG5leHBvcnQgdHlwZSBCYXNlVGFibGVDb2x1bW4gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU6IENvbHVtblR5cGU7IC8vT3JpZ2luIG9mIHRoZSBzb3VyY2Ugd2hlcmUgd2UgYXJlIGdldHRpbmcgdGhlIHRlbXBsYXRlZCBpbmZvcm1hdGlvbiBmcm9tXG5cdHdpZHRoPzogc3RyaW5nO1xuXHRpbXBvcnRhbmNlPzogSW1wb3J0YW5jZTtcblx0aG9yaXpvbnRhbEFsaWduPzogSG9yaXpvbnRhbEFsaWduO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdGNhc2VTZW5zaXRpdmU6IGJvb2xlYW47XG5cdGlzSW5zaWdodHNTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXHRsYWJlbD86IHN0cmluZztcbn07XG5cbi8vIFByb3BlcnRpZXMgb24gQ3VzdG9tIENvbHVtbnMgYW5kIFNsb3QgQ29sdW1uc1xuZXhwb3J0IHR5cGUgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0aWQ6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0ZXhwb3J0U2V0dGluZ3M/OiB7XG5cdFx0dGVtcGxhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHR3cmFwOiBib29sZWFuO1xuXHR9IHwgbnVsbDtcblx0Zm9ybWF0T3B0aW9uczogeyB0ZXh0TGluZXNFZGl0OiBudW1iZXIgfTtcblx0aXNHcm91cGFibGU6IGJvb2xlYW47XG5cdGlzTmF2aWdhYmxlOiBib29sZWFuO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0dmlzdWFsU2V0dGluZ3M6IHsgd2lkdGhDYWxjdWxhdGlvbjogbnVsbCB9O1xuXHRwcm9wZXJ0aWVzPzogc3RyaW5nW107XG59O1xuXG4vLyBQcm9wZXJ0aWVzIGRlcml2ZWQgZnJvbSBNYW5pZmVzdCB0byBvdmVycmlkZSBBbm5vdGF0aW9uIGNvbmZpZ3VyYXRpb25zXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZSA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0c2V0dGluZ3M/OiBUYWJsZUNvbHVtblNldHRpbmdzO1xuXHRmb3JtYXRPcHRpb25zPzogRm9ybWF0T3B0aW9uc1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eVR5cGVDb25zdHJhaW50cyA9IFBhcnRpYWw8e1xuXHRzY2FsZTogbnVtYmVyO1xuXHRwcmVjaXNpb246IG51bWJlcjtcblx0bWF4TGVuZ3RoOiBudW1iZXI7XG5cdG51bGxhYmxlOiBib29sZWFuO1xuXHRtaW5pbXVtOiBzdHJpbmc7XG5cdG1heGltdW06IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlOiBib29sZWFuO1xufT47XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZUZvcm1hdE9wdGlvbnMgPSBQYXJ0aWFsPHtcblx0cGFyc2VBc1N0cmluZzogYm9vbGVhbjtcblx0ZW1wdHlTdHJpbmc6IHN0cmluZztcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiBib29sZWFuO1xufT47XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZUNvbmZpZyA9IHtcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM6IFByb3BlcnR5VHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBQcm9wZXJ0eVR5cGVGb3JtYXRPcHRpb25zO1xuXHR0eXBlSW5zdGFuY2U/OiB1bmtub3duO1xuXHRiYXNlVHlwZT86IHN0cmluZztcblx0Y2xhc3NOYW1lPzoga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbHVtbkV4cG9ydFNldHRpbmdzID0gUGFydGlhbDx7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHdyYXA6IGJvb2xlYW47XG5cdHR5cGU6IHN0cmluZztcblx0aW5wdXRGb3JtYXQ6IHN0cmluZztcblx0Zm9ybWF0OiBzdHJpbmc7XG5cdHNjYWxlOiBudW1iZXI7XG5cdGRlbGltaXRlcjogYm9vbGVhbjtcblx0dW5pdDogc3RyaW5nO1xuXHR1bml0UHJvcGVydHk6IHN0cmluZztcblx0dGltZXpvbmU6IHN0cmluZztcblx0dGltZXpvbmVQcm9wZXJ0eTogc3RyaW5nO1xuXHR1dGM6IGJvb2xlYW47XG59PjtcblxuLy8gUHJvcGVydGllcyBmb3IgQW5ub3RhdGlvbiBDb2x1bW5zXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSBBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZSAmIHtcblx0bmFtZTogc3RyaW5nO1xuXHRwcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dG9vbHRpcD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucz86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRzaG93RGF0YUZpZWxkc0xhYmVsPzogYm9vbGVhbjtcblx0aXNLZXk/OiBib29sZWFuO1xuXHRpc0dyb3VwYWJsZT86IGJvb2xlYW47XG5cdHVuaXQ/OiBzdHJpbmc7XG5cdHVuaXRUZXh0Pzogc3RyaW5nO1xuXHR0aW1lem9uZVRleHQ/OiBzdHJpbmc7XG5cdHRpbWV6b25lPzogc3RyaW5nO1xuXHRzZW1hbnRpY09iamVjdFBhdGg/OiBzdHJpbmc7XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRleHBvcnRTZXR0aW5ncz86IGNvbHVtbkV4cG9ydFNldHRpbmdzIHwgbnVsbDtcblx0dGV4dEFycmFuZ2VtZW50Pzoge1xuXHRcdHRleHRQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdG1vZGU6IERpc3BsYXlNb2RlO1xuXHR9O1xuXHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHR2aXN1YWxTZXR0aW5ncz86IFZpc3VhbFNldHRpbmdzO1xuXHR0eXBlQ29uZmlnPzogUHJvcGVydHlUeXBlQ29uZmlnO1xuXHRpc1BhcnRPZkxpbmVJdGVtPzogYm9vbGVhbjsgLy8gdGVtcG9yYXJ5IGluZGljYXRvciB0byBvbmx5IGFsbG93IGZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgd2hlbiB0aGV5J3JlIHBhcnQgb2YgYSBsaW5lIGl0ZW1cblx0YWRkaXRpb25hbExhYmVscz86IHN0cmluZ1tdO1xuXHRleHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZT86IHN0cmluZztcblx0YWdncmVnYXRhYmxlPzogYm9vbGVhbjtcblx0ZXh0ZW5zaW9uPzogRXh0ZW5zaW9uRm9yQW5hbHl0aWNzO1xuXHRpc0luc2lnaHRzU3VwcG9ydGVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEV4dGVuc2lvbkZvckFuYWx5dGljcyA9IHtcblx0Y3VzdG9tQWdncmVnYXRlPzoge1xuXHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIFRlY2huaWNhbENvbHVtbiA9IEFubm90YXRpb25UYWJsZUNvbHVtbiAmIHtcblx0ZXh0ZW5zaW9uPzoge1xuXHRcdHRlY2huaWNhbGx5R3JvdXBhYmxlOiBib29sZWFuO1xuXHRcdHRlY2huaWNhbGx5QWdncmVnYXRhYmxlOiBib29sZWFuO1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgVmlzdWFsU2V0dGluZ3MgPSB7XG5cdHdpZHRoQ2FsY3VsYXRpb24/OiBXaWR0aENhbGN1bGF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgV2lkdGhDYWxjdWxhdGlvbiA9IG51bGwgfCB7XG5cdG1pbldpZHRoPzogbnVtYmVyO1xuXHRtYXhXaWR0aD86IG51bWJlcjtcblx0ZGVmYXVsdFdpZHRoPzogbnVtYmVyO1xuXHRpbmNsdWRlTGFiZWw/OiBib29sZWFuO1xuXHRnYXA/OiBudW1iZXI7XG5cdC8vIG9ubHkgcmVsZXZhbnQgZm9yIGNvbXBsZXggdHlwZXNcblx0ZXhjbHVkZVByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0dmVydGljYWxBcnJhbmdlbWVudD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbHVtbiA9IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4gfCBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5leHBvcnQgdHlwZSBNYW5pZmVzdENvbHVtbiA9IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlPjtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRlRGF0YSA9IHtcblx0ZGVmYXVsdEFnZ3JlZ2F0ZToge1xuXHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fTtcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlO1xuXHRhbm5vdGF0aW9uOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRjb250cm9sOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zPzogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0YWdncmVnYXRlcz86IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+O1xuXHRlbmFibGVBbmFseXRpY3M/OiBib29sZWFuO1xuXHRlbmFibGVCYXNpY1NlYXJjaD86IGJvb2xlYW47XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nO1xuXHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBzdHJpbmc7XG5cdGhlYWRlckluZm9UaXRsZTogc3RyaW5nO1xuXHRzZW1hbnRpY0tleXM6IHN0cmluZ1tdO1xuXHRoZWFkZXJJbmZvVHlwZU5hbWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz4gfCB1bmRlZmluZWQ7XG5cdGVuYWJsZSRzZWxlY3Q6IGJvb2xlYW47XG5cdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogYm9vbGVhbjtcblx0aXNJbnNpZ2h0c0VuYWJsZWQ/OiBib29sZWFuO1xufTtcblxudHlwZSBTb3J0ZXJUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGRlc2NlbmRpbmc6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGFubm90YXRpb24tYmFzZWQgYW5kIG1hbmlmZXN0LWJhc2VkIHRhYmxlIGFjdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMgVGhlIGNvbXBsZXRlIHRhYmxlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQWN0aW9ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBhVGFibGVBY3Rpb25zID0gZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgYUFubm90YXRpb25BY3Rpb25zID0gYVRhYmxlQWN0aW9ucy50YWJsZUFjdGlvbnM7XG5cdGNvbnN0IGFIaWRkZW5BY3Rpb25zID0gYVRhYmxlQWN0aW9ucy5oaWRkZW5UYWJsZUFjdGlvbnM7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0YUFubm90YXRpb25BY3Rpb25zLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHR0cnVlLFxuXHRcdGFIaWRkZW5BY3Rpb25zXG5cdCk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZU9uU2VsZWN0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZUF1dG9TY3JvbGw6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRjb21tYW5kOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH07XG5cdGNvbnN0IGFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhhQW5ub3RhdGlvbkFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBhY3Rpb25PdmVyd3JpdGVDb25maWcpO1xuXG5cdHJldHVybiB7XG5cdFx0YWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY29sdW1ucywgYW5ub3RhdGlvbi1iYXNlZCBhcyB3ZWxsIGFzIG1hbmlmZXN0IGJhc2VkLlxuICogVGhleSBhcmUgc29ydGVkIGFuZCBzb21lIHByb3BlcnRpZXMgY2FuIGJlIG92ZXJ3cml0dGVuIHZpYSB0aGUgbWFuaWZlc3QgKGNoZWNrIG91dCB0aGUga2V5cyB0aGF0IGNhbiBiZSBvdmVyd3JpdHRlbikuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEBwYXJhbSBpc0luc2lnaHRzRW5hYmxlZFxuICogQHJldHVybnMgUmV0dXJucyBhbGwgdGFibGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgdGVtcGxhdGluZyBvciBwZXJzb25hbGl6YXRpb24gb3IgdGhlaXIgb3JpZ2luXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUNvbHVtbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGlzSW5zaWdodHNFbmFibGVkPzogYm9vbGVhblxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGFubm90YXRpb25Db2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBpc0luc2lnaHRzRW5hYmxlZCk7XG5cdGNvbnN0IG1hbmlmZXN0Q29sdW1ucyA9IGdldENvbHVtbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5jb2x1bW5zLFxuXHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5nc1xuXHQpO1xuXG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhhbm5vdGF0aW9uQ29sdW1ucyBhcyBUYWJsZUNvbHVtbltdLCBtYW5pZmVzdENvbHVtbnMgYXMgUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudDxUYWJsZUNvbHVtbj4+LCB7XG5cdFx0d2lkdGg6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0aW1wb3J0YW5jZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRob3Jpem9udGFsQWxpZ246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0YXZhaWxhYmlsaXR5OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGZvcm1hdE9wdGlvbnM6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fSk7XG59XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGN1c3RvbSBhZ2dyZWdhdGlvbiBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gdGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZvciB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgYWdncmVnYXRlIGRlZmluaXRpb25zIGZyb20gdGhlIGVudGl0eVR5cGUsIG9yIHVuZGVmaW5lZCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0ZnVuY3Rpb24gZmluZENvbHVtbkZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGFibGVDb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IHBhdGg7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIWFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gS2VlcCBhIHNldCBvZiBhbGwgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzLCBhcyB3ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHRoZW0gYXMgYWdncmVnYXRlc1xuXHQvLyBUaGV5IGFyZSBhZ2dyZWdhdGVzIGZvciB0ZWNobmljYWwgcmVhc29ucyAodG8gbWFuYWdlIG11bHRpLXVuaXRzIHNpdHVhdGlvbnMpIGJ1dCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZnJvbSBhIHVzZXIgc3RhbmRwb2ludFxuXHRjb25zdCBjdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCB0YWJsZUNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdGN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5hZGQodGFibGVDb2x1bW4udW5pdCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IGRlZmluaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblxuXHRjdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5mb3JFYWNoKChhbm5vdGF0aW9uKSA9PiB7XG5cdFx0Y29uc3QgYWdncmVnYXRlZFByb3BlcnR5ID0gYWdncmVnYXRpb25IZWxwZXIuX2VudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5Lm5hbWUgPT09IGFubm90YXRpb24ucXVhbGlmaWVyO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgY29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IGFubm90YXRpb24uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0ZGVmaW5pdGlvbnNbYWdncmVnYXRlZFByb3BlcnR5Lm5hbWVdID0gY29udGV4dERlZmluaW5nUHJvcGVydGllc1xuXHRcdFx0XHQ/IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubWFwKChjdHhEZWZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGN0eERlZlByb3BlcnR5LnZhbHVlO1xuXHRcdFx0XHQgIH0pXG5cdFx0XHRcdDogW107XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiA9IHt9O1xuXG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb25zdCB0YWJsZUNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKHRhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiB0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdGNvbnN0IHJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBkZWZpbml0aW9uc1t0YWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhdO1xuXG5cdFx0XHQvLyBJZ25vcmUgYWdncmVnYXRlcyBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbmNpZXMgb3IgdW5pdHMgb2YgbWVhc3VyZVxuXHRcdFx0aWYgKHJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgJiYgIWN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5oYXModGFibGVDb2x1bW4ubmFtZSkpIHtcblx0XHRcdFx0cmVzdWx0W3RhYmxlQ29sdW1uLm5hbWVdID0ge1xuXHRcdFx0XHRcdGRlZmF1bHRBZ2dyZWdhdGU6IHt9LFxuXHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogdGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRcdHJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMuZm9yRWFjaCgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZm91bmRDb2x1bW4gPSBmaW5kQ29sdW1uRnJvbVBhdGgoY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0XHRpZiAoZm91bmRDb2x1bW4pIHtcblx0XHRcdFx0XHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMucHVzaChmb3VuZENvbHVtbi5uYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJlc3VsdFt0YWJsZUNvbHVtbi5uYW1lXS5kZWZhdWx0QWdncmVnYXRlLmNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIGEgdGFibGUgdmlzdWFsaXphdGlvbiBmb3IgYW5hbHl0aWNhbCB1c2UgY2FzZXMuXG4gKlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gVGhlIHByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiAoaWYgYW55KVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yVHlwZShcblx0dGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbikge1xuXHRpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyA9IGdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUoZW50aXR5VHlwZSwgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0YWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0XHRpZiAoYWdncmVnYXRlc0RlZmluaXRpb25zKSB7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzID0gdHJ1ZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkc2VsZWN0ID0gZmFsc2U7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlJCRnZXRLZWVwQWxpdmVDb250ZXh0ID0gZmFsc2U7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYWdncmVnYXRlcyA9IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucztcblx0XHRcdF91cGRhdGVQcm9wZXJ0eUluZm9zV2l0aEFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyh0YWJsZVZpc3VhbGl6YXRpb24pO1xuXG5cdFx0XHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5kZXhPZihcInNlYXJjaFwiKSA+PSAwIDogdHJ1ZTtcblxuXHRcdFx0Ly8gQWRkIGdyb3VwIGFuZCBzb3J0IGNvbmRpdGlvbnMgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnRcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlXG5cdFx0XHQpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWdncmVnYXRlQ29uZGl0aW9ucyA9IGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1uc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID0gXCJHcmlkVGFibGVcIjsgLy8gQW5hbHl0aWNhbFRhYmxlIGlzbid0IGEgcmVhbCB0eXBlIGZvciB0aGUgTURDOlRhYmxlLCBzbyB3ZSBhbHdheXMgc3dpdGNoIGJhY2sgdG8gR3JpZFxuXHR9IGVsc2UgaWYgKHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMoXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUJhc2ljU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5lbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQgPSB0cnVlO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoIHRvIGNoZWNrIGluIHRoZSBtYW5pZmVzdCBzZXR0aW5nc1xuICogQHJldHVybnMgTmF2aWdhdGlvbiBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoICYmIG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdGNvbnN0IG5hdkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRpZiAoT2JqZWN0LmtleXMobmF2Q29uZmlnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBuYXZDb25maWdGb3JDb250ZXh0UGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihjb250ZXh0UGF0aCk7XG5cdGlmIChuYXZDb25maWdGb3JDb250ZXh0UGF0aCAmJiBPYmplY3Qua2V5cyhuYXZDb25maWdGb3JDb250ZXh0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjb250ZXh0UGF0aDtcblx0fVxuXG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgJ3VuaXQnIGFuZCAndGV4dEFycmFuZ2VtZW50JyBwcm9wZXJ0aWVzIGluIGNvbHVtbnMgd2hlbiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcbiAqIEBwYXJhbSB0YWJsZUNvbHVtbnMgVGhlIGNvbHVtbnMgdG8gYmUgdXBkYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGlua2VkUHJvcGVydGllcyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHtcblx0ZnVuY3Rpb24gZmluZENvbHVtbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwYXRoO1xuXHRcdH0pO1xuXHR9XG5cblx0dGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2x1bW4pID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHkgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZCgob1Byb3A6IFByb3BlcnR5KSA9PiBvUHJvcC5uYW1lID09PSBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3Qgb1VuaXQgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0XHRcdFx0Y29uc3Qgb1RpbWV6b25lID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkob1Byb3BlcnR5KTtcblx0XHRcdFx0Y29uc3Qgc1RpbWV6b25lID0gb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblx0XHRcdFx0aWYgKG9Vbml0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1VuaXRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKG9Vbml0Lm5hbWUpO1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi51bml0ID0gb1VuaXRDb2x1bW4/Lm5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1VuaXQgPSBvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0XHRcdFx0aWYgKHNVbml0KSB7XG5cdFx0XHRcdFx0XHRvVGFibGVDb2x1bW4udW5pdFRleHQgPSBgJHtzVW5pdH1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1RpbWV6b25lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RpbWV6b25lQ29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChvVGltZXpvbmUubmFtZSk7XG5cdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRpbWV6b25lID0gb1RpbWV6b25lQ29sdW1uPy5uYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNUaW1lem9uZSkge1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50aW1lem9uZVRleHQgPSBzVGltZXpvbmUudG9TdHJpbmcoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0ZXh0QW5ub3RhdGlvbikgJiYgZGlzcGxheU1vZGUgIT09IFwiVmFsdWVcIikge1xuXHRcdFx0XHRcdGNvbnN0IG9UZXh0Q29sdW1uID0gZmluZENvbHVtbkJ5UGF0aCh0ZXh0QW5ub3RhdGlvbi5wYXRoKTtcblx0XHRcdFx0XHRpZiAob1RleHRDb2x1bW4gJiYgb1RleHRDb2x1bW4ubmFtZSAhPT0gb1RhYmxlQ29sdW1uLm5hbWUpIHtcblx0XHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50ZXh0QXJyYW5nZW1lbnQgPSB7XG5cdFx0XHRcdFx0XHRcdHRleHRQcm9wZXJ0eTogb1RleHRDb2x1bW4ubmFtZSxcblx0XHRcdFx0XHRcdFx0bW9kZTogZGlzcGxheU1vZGVcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0Y29uc3QgaGVhZGVySW5mb1RpdGxlUGF0aCA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZVxuXHRcdD8ucGF0aDtcblx0Y29uc3Qgc2VtYW50aWNLZXlBbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdGNvbnN0IGhlYWRlckluZm9UeXBlTmFtZSA9IGNvbnZlcnRlckNvbnRleHQ/LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWU7XG5cdGNvbnN0IHNlbWFudGljS2V5Q29sdW1uczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHNlbWFudGljS2V5QW5ub3RhdGlvbnMpIHtcblx0XHRzZW1hbnRpY0tleUFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW4pIHtcblx0XHRcdHNlbWFudGljS2V5Q29sdW1ucy5wdXNoKG9Db2x1bW4udmFsdWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHsgaGVhZGVySW5mb1RpdGxlUGF0aCwgc2VtYW50aWNLZXlDb2x1bW5zLCBoZWFkZXJJbmZvVHlwZU5hbWUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudD86IGJvb2xlYW4sXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRpc0luc2lnaHRzRW5hYmxlZD86IGJvb2xlYW5cbik6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50XG5cdCk7XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRUYWJsZUNvbHVtbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzLCBpc0luc2lnaHRzRW5hYmxlZCk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uU2V0dGluZ3MpO1xuXG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0XHRjb2x1bW5zLFxuXHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHRcdCksXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKHRhYmxlQWN0aW9ucy5hY3Rpb25zKSxcblx0XHRjb21tYW5kQWN0aW9uczogdGFibGVBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBKU09OLnN0cmluZ2lmeShvcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRoZWFkZXJJbmZvVGl0bGU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVGl0bGVQYXRoLFxuXHRcdHNlbWFudGljS2V5czogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLnNlbWFudGljS2V5Q29sdW1ucyxcblx0XHRoZWFkZXJJbmZvVHlwZU5hbWU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVHlwZU5hbWUsXG5cdFx0ZW5hYmxlJHNlbGVjdDogdHJ1ZSxcblx0XHRlbmFibGUkJGdldEtlZXBBbGl2ZUNvbnRleHQ6IHRydWVcblx0fTtcblxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvclR5cGUoXG5cdFx0b1Zpc3VhbGl6YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb25cblx0KTtcblxuXHRyZXR1cm4gb1Zpc3VhbGl6YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIGlzQmxhbmtUYWJsZT86IGJvb2xlYW4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoe30sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBbXSwgW10sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWcudHlwZSwgW10pO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXAgPSBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAodW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlID0gZ2V0U2VtYW50aWNLZXlzQW5kVGl0bGVJbmZvKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBvVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlnLCBpc0JsYW5rVGFibGUgPyBbXSA6IGNvbHVtbnMpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZSxcblx0XHRlbmFibGUkc2VsZWN0OiB0cnVlLFxuXHRcdGVuYWJsZSQkZ2V0S2VlcEFsaXZlQ29udGV4dDogdHJ1ZVxuXHR9O1xuXG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlKG9WaXN1YWxpemF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIG9WaXN1YWxpemF0aW9uO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG1hcCBvZiBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRocyBmb3IgYWxsIERhdGFGaWVsZEZvckFjdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGxpbmUgaXRlbVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHJlY29yZCBjb250YWluaW5nIGFsbCBhY3Rpb24gbmFtZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdHJldHVybiBBY3Rpb25IZWxwZXIuZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbiwgXCJ0YWJsZVwiLCBjb252ZXJ0ZXJDb250ZXh0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHVwZGF0YWJsZSBwcm9wZXJ0eVBhdGggZm9yIHRoZSBjdXJyZW50IGVudGl0eXNldCBpZiB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgdXBkYXRhYmxlIHByb3BlcnR5IGZvciB0aGUgcm93c1xuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50RW50aXR5U2V0VXBkYXRhYmxlUGF0aChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zID0gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCB1cGRhdGFibGUgPSByZXN0cmljdGlvbnMuaXNVcGRhdGFibGU7XG5cdGNvbnN0IGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPSAhaXNDb25zdGFudCh1cGRhdGFibGUuZXhwcmVzc2lvbikgJiYgdXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCB1cGRhdGFibGVFeHByZXNzaW9uID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlO1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1cGRhdGFibGVFeHByZXNzaW9uKSAmJiB1cGRhdGFibGVFeHByZXNzaW9uLnBhdGg7XG5cblx0cmV0dXJuIGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPyAodXBkYXRhYmxlUHJvcGVydHlQYXRoIGFzIHN0cmluZykgOiBcIlwiO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgcHJvcGVydHkgcGF0aHMgYXNzaWduZWQgdG8gdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCBUaGUgcmVjb3JkIGNvbnNpc3Rpbmcgb2YgYWN0aW9ucyBhbmQgdGhlaXIgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBDU1Ygc3RyaW5nIG9mIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NvY2lhdGVkIHdpdGggdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogc3RyaW5nIHtcblx0Y29uc3QgcHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gb3BlcmF0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwW2FjdGlvbk5hbWVdO1xuXHRcdGlmIChwcm9wZXJ0eU5hbWUgPT09IG51bGwpIHtcblx0XHRcdC8vIEFubm90YXRpb24gY29uZmlndXJlZCB3aXRoIGV4cGxpY2l0ICdudWxsJyAoYWN0aW9uIGFkdmVydGlzZW1lbnQgcmVsZXZhbnQpXG5cdFx0XHRwcm9wZXJ0aWVzLmFkZChhY3Rpb25OYW1lKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eU5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIEFkZCBwcm9wZXJ0eSBwYXRocyBhbmQgbm90IENvbnN0YW50IHZhbHVlcy5cblx0XHRcdHByb3BlcnRpZXMuYWRkKHByb3BlcnR5TmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHByb3BlcnRpZXMuc2l6ZSkge1xuXHRcdC8vIFNvbWUgYWN0aW9ucyBoYXZlIGFuIG9wZXJhdGlvbiBhdmFpbGFibGUgYmFzZWQgb24gcHJvcGVydHkgLS0+IHdlIG5lZWQgdG8gbG9hZCB0aGUgSGVhZGVySW5mby5UaXRsZSBwcm9wZXJ0eVxuXHRcdC8vIHNvIHRoYXQgdGhlIGRpYWxvZyBvbiBwYXJ0aWFsIGFjdGlvbnMgaXMgZGlzcGxheWVkIHByb3Blcmx5IChCQ1AgMjE4MDI3MTQyNSlcblx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0Y29uc3QgdGl0bGVQcm9wZXJ0eSA9IChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aDtcblx0XHRpZiAodGl0bGVQcm9wZXJ0eSkge1xuXHRcdFx0cHJvcGVydGllcy5hZGQodGl0bGVQcm9wZXJ0eSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIEFycmF5LmZyb20ocHJvcGVydGllcykuam9pbihcIixcIik7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiByZXR1cm5zIGFsbCB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZXhwcmVzc2lvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgZW50aXR5IHR5cGVcbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBPYmplY3QgcGF0aCBvZiB0aGUgZGF0YSBtb2RlbFxuICogQHBhcmFtIGlzRW50aXR5U2V0XG4gKiBAcmV0dXJucyBBbGwgdGhlIGBVSS5IaWRkZW5gIHBhdGggZXhwcmVzc2lvbnMgZm91bmQgaW4gdGhlIHJlbGV2YW50IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc0VudGl0eVNldDogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChkYXRhRmllbGQpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmXG5cdFx0XHRcdGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlKSB8fFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSlcblx0XHQpIHtcblx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0YVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zLnB1c2goXG5cdFx0XHRcdFx0ZXF1YWwoZ2V0SGlkZGVuRXhwcmVzc2lvbkF0VGFibGVMZXZlbChkYXRhRmllbGQsIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLCBpc0VudGl0eVNldCksIGZhbHNlKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgRGF0YUZpZWxkIHBhdGguXG4gKlxuICogQHBhcmFtIGV4cHJlc3Npb24gQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gZ2V0UGF0aEZyb21BY3Rpb25Bbm5vdGF0aW9uKGV4cHJlc3Npb246IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKSB7XG5cdGxldCBwYXRoOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGV4cHJlc3Npb24pKSB7XG5cdFx0cGF0aCA9IGV4cHJlc3Npb24ucGF0aDtcblx0fSBlbHNlIHtcblx0XHRwYXRoID0gZXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gcGF0aDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBpc0VudGl0eVNldFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXRIaWRkZW5FeHByZXNzaW9uQXRUYWJsZUxldmVsKFxuXHRzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc0VudGl0eVNldDogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0Y29uc3QgZXhwcmVzc2lvbiA9IHNvdXJjZS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiBhcyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0bGV0IHBhdGggPSBnZXRQYXRoRnJvbUFjdGlvbkFubm90YXRpb24oZXhwcmVzc2lvbik7XG5cdGlmICh0eXBlb2YgcGF0aCA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoXCJ2aXNpYmxlXCIgaW4gc291cmNlKSB7XG5cdFx0XHRwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSwgcGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIGNvcnJlY3Q6XG5cdFx0XHRjb25zdCBzcGxpdFBhdGhGb3JOYXZpZ2F0aW9uUHJvcGVydHkgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5WzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc05hdmlnYXRpb25Qcm9wZXJ0eShjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0KSAmJlxuXHRcdFx0XHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QucGFydG5lciA9PT0gbmF2aWdhdGlvblBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoc3BsaXRQYXRoRm9yTmF2aWdhdGlvblByb3BlcnR5LnNsaWNlKDEpLmpvaW4oXCIvXCIpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHRcdH1cblx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gbmF2aWdhdGlvbiBwcm9wZXJ0eSwgaWYgaXQncyBhbiBlbnRpdHlTZXQsIHRoZSBleHByZXNzaW9uIGJpbmRpbmcgaGFzIHRvIGJlIHJldHVybmVkOlxuXHRcdH0gZWxzZSBpZiAoaXNFbnRpdHlTZXQpIHtcblx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChwYXRoKTtcblx0XHRcdC8vIG90aGVyd2lzZSB0aGUgZXhwcmVzc2lvbiBiaW5kaW5nIGNhbm5vdCBiZSB0YWtlbiBpbnRvIGFjY291bnQgZm9yIHRoZSBzZWxlY3Rpb24gbW9kZSBldmFsdWF0aW9uOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG59XG5cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBtYW5pZmVzdCBhY3Rpb25zIGFuZCBjaGVjayB0aGUgZm9sbG93aW5nOlxuICpcbiAqIElmIHRoZSBkYXRhIGZpZWxkIGlzIGFsc28gcmVmZXJlbmNlZCBhcyBhIGN1c3RvbSBhY3Rpb24uXG4gKiBJZiB0aGUgdW5kZXJseWluZyBtYW5pZmVzdCBhY3Rpb24gaXMgZWl0aGVyIGEgYm91bmQgYWN0aW9uIG9yIGhhcyB0aGUgJ1JlcXVpcmVzQ29udGV4dCcgcHJvcGVydHkgc2V0IHRvIHRydWUuXG4gKlxuICogSWYgc28sIHRoZSAncmVxdWlyZXNTZWxlY3Rpb24nIHByb3BlcnR5IGlzIGZvcmNlZCB0byAndHJ1ZScgaW4gdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRJZCBJZCBvZiB0aGUgRGF0YUZpZWxkIGV2YWx1YXRlZFxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZXZhbHVhdGVkXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIERhdGFGaWVsZCBpcyBmb3VuZCBhbW9uZyB0aGUgbWFuaWZlc3QgYWN0aW9uc1xuICovXG5mdW5jdGlvbiB1cGRhdGVNYW5pZmVzdEFjdGlvbkFuZFRhZ0l0KFxuXHRkYXRhRmllbGRJZDogc3RyaW5nLFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+XG4pOiBib29sZWFuIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuc29tZSgoYWN0aW9uS2V5KSA9PiB7XG5cdFx0aWYgKGFjdGlvbktleSA9PT0gZGF0YUZpZWxkSWQpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgfHxcblx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pPy5SZXF1aXJlc0NvbnRleHRcblx0XHRcdCkge1xuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbnNbZGF0YUZpZWxkSWRdLnJlcXVpcmVzU2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiBjaGVjayB0aGUgZm9sbG93aW5nOlxuICogSWYgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIHRhYmxlIHRvb2xiYXIgYW5kIHJlcXVpcmVzIGEgY29udGV4dFxuICogSWYgYW4gYWN0aW9uIGlzIGFsc28gZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QsIGl0IGlzIHNldCBhc2lkZSBhbmQgd2lsbCBiZSBjb25zaWRlcmVkXG4gKiB3aGVuIGdvaW5nIHRocm91Z2ggdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBFbnRpdHkgVHlwZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IDEgYWN0aW9uIHRoYXQgbWVldHMgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPixcblx0Y3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbGluZUl0ZW1Bbm5vdGF0aW9uLnNvbWUoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikgJiZcblx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gZmFsc2UgfHwgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHVuZGVmaW5lZClcblx0XHQpIHtcblx0XHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0XHRjb25zdCBtYW5pZmVzdEFjdGlvbklkID0gZ2VuZXJhdGUoW1wiRGF0YUZpZWxkRm9yQWN0aW9uXCIsIGRhdGFGaWVsZC5BY3Rpb24gYXMgc3RyaW5nXSk7XG5cdFx0XHRcdC8vIGlmIHRoZSBEYXRhRmllbGRGb3JBY3RvbiBmcm9tIGFubm90YXRpb24gYWxzbyBleGlzdHMgaW4gdGhlIG1hbmlmZXN0LCBpdHMgdmlzaWJpbGl0eSB3aWxsIGJlIGV2YWx1YXRlZCBsYXRlciBvblxuXHRcdFx0XHRpZiAodXBkYXRlTWFuaWZlc3RBY3Rpb25BbmRUYWdJdChtYW5pZmVzdEFjdGlvbklkLCBkYXRhRmllbGQsIG1hbmlmZXN0QWN0aW9ucykpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiYgY3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGU7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdC8vIGlmIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBhbm5vdGF0aW9uIGFsc28gZXhpc3RzIGluIHRoZSBtYW5pZmVzdCwgaXRzIHZpc2liaWxpdHkgd2lsbCBiZSBldmFsdWF0ZWQgbGF0ZXIgb25cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHVwZGF0ZU1hbmlmZXN0QWN0aW9uQW5kVGFnSXQoXG5cdFx0XHRcdFx0XHRgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOjoke2RhdGFGaWVsZC5TZW1hbnRpY09iamVjdH06OiR7ZGF0YUZpZWxkLkFjdGlvbn1gLFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5zb21lKChhY3Rpb25LZXkpID0+IHtcblx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIGFjdGlvbi52aXNpYmxlPy50b1N0cmluZygpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgY3VzdG9tIGFjdGlvbnMgKHdpdGgga2V5IHJlcXVpcmVzU2VsZWN0aW9uKSBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHRoZSBjdXJyZW50IGxpbmUgaXRlbSBhbmQgcmV0dXJucyBhbGwgdGhlXG4gKiB2aXNpYmxlIGtleSB2YWx1ZXMgYXMgYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBBcnJheTxFeHByZXNzaW9uPGJvb2xlYW4+PiBBbGwgdGhlIHZpc2libGUgcGF0aCBleHByZXNzaW9ucyBvZiB0aGUgYWN0aW9ucyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dChtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAobWFuaWZlc3RBY3Rpb25zKSB7XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5mb3JFYWNoKChhY3Rpb25LZXkpID0+IHtcblx0XHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZSAmJiBhY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYWN0aW9uLnZpc2libGUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvKlRoZSBmaW5hbCBhaW0gd291bGQgYmUgdG8gY2hlY2sgaWYgdGhlIHBhdGggZXhwcmVzc2lvbiBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgY29udGV4dFxuXHRcdFx0XHRcdGFuZCBjb25zaWRlcnMgb25seSB0aG9zZSBleHByZXNzaW9ucyBmb3IgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbixcblx0XHRcdFx0XHRidXQgY3VycmVudGx5IG5vdCBwb3NzaWJsZSBmcm9tIHRoZSBtYW5pZmVzdCBhcyB0aGUgdmlzaWJsZSBrZXkgaXMgYm91bmQgb24gdGhlIHBhcmVudCBlbnRpdHkuXG5cdFx0XHRcdFx0VHJpY2t5IHRvIGRpZmZlcmVudGlhdGUgdGhlIHBhdGggYXMgaXQncyBkb25lIGZvciB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdFx0XHRcdFx0Rm9yIHRoZSB0aW1lIGJlaW5nIHdlIGNvbnNpZGVyIGFsbCB0aGUgcGF0aHMgb2YgdGhlIG1hbmlmZXN0Ki9cblxuXHRcdFx0XHRcdGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zLnB1c2gocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uPy52aXNpYmxlPy52YWx1ZU9mKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgcGF0aCBpcyBzdGF0aWNhbGx5IGRlbGV0YWJsZSBvciB1cGRhdGFibGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24ge1xuXHRjb25zdCBpc0RlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdGNvbnN0IGlzVXBkYXRhYmxlID0gaXNQYXRoVXBkYXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0cmV0dXJuIHtcblx0XHRpc0RlbGV0YWJsZTogIShpc0NvbnN0YW50KGlzRGVsZXRhYmxlKSAmJiBpc0RlbGV0YWJsZS52YWx1ZSA9PT0gZmFsc2UpLFxuXHRcdGlzVXBkYXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNVcGRhdGFibGUpICYmIGlzVXBkYXRhYmxlLnZhbHVlID09PSBmYWxzZSlcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuLFxuXHR0YXJnZXRDYXBhYmlsaXRpZXM6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uLFxuXHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdH1cblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblx0bGV0IGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW10sXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0W10sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdGZhbHNlXG5cdCk7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlRXhwcmVzc2lvbihpc1BhcmVudERlbGV0YWJsZSwgdHJ1ZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXG5cdGNvbnN0IGJNYXNzRWRpdEVuYWJsZWQ6IGJvb2xlYW4gPSAhaXNDb25zdGFudChtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSB8fCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLnZhbHVlICE9PSBmYWxzZTtcblx0aWYgKHNlbGVjdGlvbk1vZGUgJiYgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5Ob25lICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlICYmIGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIE1hc3MgRWRpdCBpbiBPUCBpcyBlbmFibGVkIG9ubHkgaW4gZWRpdCBtb2RlLlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKFVJLklzRWRpdGFibGUsIG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdGNvbnN0YW50KFwiTXVsdGlcIiksXG5cdFx0XHRcdFx0aWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpKTtcblx0fVxuXHRpZiAoIXNlbGVjdGlvbk1vZGUgfHwgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5BdXRvKSB7XG5cdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblx0aWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHQvLyBPdmVycmlkZSBkZWZhdWx0IHNlbGVjdGlvbiBtb2RlIHdoZW4gbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRzZWxlY3Rpb25Nb2RlID0gc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5TaW5nbGUgPyBTZWxlY3Rpb25Nb2RlLlNpbmdsZSA6IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblxuXHRpZiAoXG5cdFx0aGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb24sIG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSkgfHxcblx0XHRoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucylcblx0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdH1cblx0YUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucyA9IGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzRW50aXR5U2V0XG5cdCk7XG5cdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKTtcblxuXHQvLyBObyBhY3Rpb24gcmVxdWlyaW5nIGEgY29udGV4dDpcblx0aWYgKFxuXHRcdGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmXG5cdFx0KGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IGJNYXNzRWRpdEVuYWJsZWQpXG5cdCkge1xuXHRcdGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0XHQvLyBCdWlsZGluZyBleHByZXNzaW9uIGZvciBkZWxldGUgYW5kIG1hc3MgZWRpdFxuXHRcdFx0XHRjb25zdCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IG9yKFxuXHRcdFx0XHRcdGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIHx8IHRydWUsIC8vIGRlZmF1bHQgZGVsZXRlIHZpc2liaWxpdHkgYXMgdHJ1ZVxuXHRcdFx0XHRcdG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShhbmQoVUkuSXNFZGl0YWJsZSwgYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24pLCBjb25zdGFudChzZWxlY3Rpb25Nb2RlKSwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdFx0XHR9XG5cdFx0XHQvLyBFbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSBpZiAoYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdFx0Ly8gZXhhbXBsZTogTFIgc2NlbmFyaW9cblx0XHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChzZWxlY3Rpb25Nb2RlKSwgY29uc3RhbnQoXCJOb25lXCIpKSk7XG5cdFx0XHQvLyBFbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHR9XG5cdFx0Ly8gVGhlcmUgYXJlIGFjdGlvbnMgcmVxdWlyaW5nIGEgY29udGV4dDpcblx0fSBlbHNlIGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHQvLyBFeGFtcGxlOiBPUCBjYXNlXG5cdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIiB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHQvLyBVc2Ugc2VsZWN0aW9uTW9kZSBpbiBlZGl0IG1vZGUgaWYgZGVsZXRlIGlzIGVuYWJsZWQgb3IgbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRcdGNvbnN0IGVkaXRNb2RlYnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0XHRcdGJNYXNzRWRpdEVuYWJsZWQgJiYgIXRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSxcblx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSlcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRhbmQoVUkuSXNFZGl0YWJsZSwgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8vRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0fSBlbHNlIGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgYk1hc3NFZGl0RW5hYmxlZCkge1xuXHRcdC8vIEV4YW1wbGU6IExSIHNjZW5hcmlvXG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdFx0Ly9FbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSwgbWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbiksXG5cdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgdGFibGUgYWN0aW9ucyBmcm9tIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBhbm5vdGF0aW9uIGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IHRhYmxlQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cdGNvbnN0IGhpZGRlblRhYmxlQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cblx0Y29uc3QgY29weURhdGFGaWVsZCA9IGdldENvcHlBY3Rpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gZGF0YUZpZWxkSXNDb3B5QWN0aW9uKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyk7XG5cdFx0fSkgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXVxuXHQpO1xuXG5cdGNvbnN0IHNFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuZnVsbHlRdWFsaWZpZWROYW1lO1xuXG5cdGlmIChjb3B5RGF0YUZpZWxkKSB7XG5cdFx0dGFibGVBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5Db3B5LFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChjb3B5RGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoY29weURhdGFGaWVsZCksXG5cdFx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihlcXVhbChwYXRoSW5Nb2RlbChcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKSksXG5cdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRjb3B5RGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCksXG5cdFx0XHR0ZXh0OiBjb3B5RGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpID8/IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikuZ2V0VGV4dChcIkNfQ09NTU9OX0NPUFlcIiksXG5cdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHR9XG5cblx0bGluZUl0ZW1Bbm5vdGF0aW9uXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gIWRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKTtcblx0XHR9KVxuXHRcdC5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGlmIChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRoaWRkZW5UYWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdChkYXRhRmllbGQpICYmXG5cdFx0XHRcdGRhdGFGaWVsZC5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSAmJlxuXHRcdFx0XHRkYXRhRmllbGQuRGV0ZXJtaW5pbmc/LnZhbHVlT2YoKSAhPT0gdHJ1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRcdFx0XHQvLyBUaGVyZSBhcmUgdGhyZWUgY2FzZXMgd2hlbiBhIHRhYmxlIGFjdGlvbiBoYXMgYW4gT3BlcmF0aW9uQXZhaWxhYmxlIHRoYXQgbGVhZHMgdG8gYW4gZW5hYmxlbWVudCBleHByZXNzaW9uXG5cdFx0XHRcdFx0XHQvLyBhbmQgaXMgbm90IGRlcGVuZGVudCB1cG9uIHRoZSB0YWJsZSBlbnRyaWVzLlxuXHRcdFx0XHRcdFx0Ly8gMS4gQW4gYWN0aW9uIHdpdGggYW4gb3ZlcmxvYWQsIHRoYXQgaXMgZXhlY3V0ZWQgYWdhaW5zdCBhIHBhcmVudCBlbnRpdHkuXG5cdFx0XHRcdFx0XHQvLyAyLiBBbiB1bmJvdW5kIGFjdGlvblxuXHRcdFx0XHRcdFx0Ly8gMy4gQSBzdGF0aWMgYWN0aW9uICh0aGF0IGlzLCBib3VuZCB0byBhIGNvbGxlY3Rpb24pXG5cdFx0XHRcdFx0XHRsZXQgdXNlRW5hYmxlZEV4cHJlc3Npb24gPSBmYWxzZTtcblx0XHRcdFx0XHRcdGlmIChkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCFkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVW5ib3VuZCBhY3Rpb24uIElzIHJlY29nbmlzZWQsIGJ1dCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gY2hlY2tzIGZvciBpc0JvdW5kID0gdHJ1ZSwgc28gbm90IGdlbmVyYXRlZC5cblx0XHRcdFx0XHRcdFx0XHR1c2VFbmFibGVkRXhwcmVzc2lvbiA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJiBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5zb3VyY2VUeXBlICE9PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIE92ZXJsb2FkIGFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdHVzZUVuYWJsZWRFeHByZXNzaW9uID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzWzBdLmlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFN0YXRpYyBhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHR1c2VFbmFibGVkRXhwcmVzc2lvbiA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgdGFibGVBY3Rpb246IEJhc2VBY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRpZiAodXNlRW5hYmxlZEV4cHJlc3Npb24pIHtcblx0XHRcdFx0XHRcdFx0dGFibGVBY3Rpb24uZW5hYmxlZCA9IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0XHRcdHRhYmxlQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0XHRub3QoXG5cdFx0XHRcdFx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdHRhYmxlQWN0aW9ucyxcblx0XHRoaWRkZW5UYWJsZUFjdGlvbnNcblx0fTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYmluZGluZ0V4cHJlc3Npb24gZm9yIHRoZSBoaWdobGlnaHQgcm93U2V0dGluZyBwYXJhbWV0ZXIuXG4gKlxuICogQHBhcmFtIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiBQYXRoIG9yIHZhbHVlIG9mIHRoZSBjcml0aWNhbGl0eVxuICogQHBhcmFtIGlzRHJhZnRSb290T3JOb2RlICBJcyB0aGUgY3VycmVudCBlbnRpdHlTZXQgYW4gRHJhZnQgcm9vdCBvciBhIG5vZGVcbiAqIEBwYXJhbSB0YXJnZXRFbnRpdHlUeXBlIFRoZSB0YXJnZXRlZCBlbnRpdHlUeXBlXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uQmluZGluZ1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0Y3JpdGljYWxpdHlBbm5vdGF0aW9uOiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Q3JpdGljYWxpdHlUeXBlPiB8IEVudW1WYWx1ZTxDcml0aWNhbGl0eVR5cGU+IHwgdW5kZWZpbmVkLFxuXHRpc0RyYWZ0Um9vdE9yTm9kZTogYm9vbGVhbixcblx0dGFyZ2V0RW50aXR5VHlwZT86IEVudGl0eVR5cGVcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4ge1xuXHRsZXQgZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb246IE1lc3NhZ2VUeXBlIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPiA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGlmIChjcml0aWNhbGl0eUFubm90YXRpb24pIHtcblx0XHRpZiAodHlwZW9mIGNyaXRpY2FsaXR5QW5ub3RhdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY3JpdGljYWxpdHlBbm5vdGF0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBFbnVtIFZhbHVlIHNvIHdlIGdldCB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgcGFydFxuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24gPSBnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUoY3JpdGljYWxpdHlBbm5vdGF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBhTWlzc2luZ0tleXM6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxzdHJpbmc+W10gPSBbXTtcblx0dGFyZ2V0RW50aXR5VHlwZT8ua2V5cy5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5Lm5hbWUgIT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0YU1pc3NpbmdLZXlzLnB1c2gocGF0aEluTW9kZWwoa2V5Lm5hbWUsIHVuZGVmaW5lZCkpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbixcblx0XHRcdHBhdGhJbk1vZGVsKGBmaWx0ZXJlZE1lc3NhZ2VzYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdGlzRHJhZnRSb290T3JOb2RlICYmIEVudGl0eS5IYXNBY3RpdmUsXG5cdFx0XHRpc0RyYWZ0Um9vdE9yTm9kZSAmJiBFbnRpdHkuSXNBY3RpdmUsXG5cdFx0XHRgJHtpc0RyYWZ0Um9vdE9yTm9kZX1gLFxuXHRcdFx0Li4uYU1pc3NpbmdLZXlzXG5cdFx0XSxcblx0XHR0YWJsZUZvcm1hdHRlcnMucm93SGlnaGxpZ2h0aW5nLFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcbn1cblxuZnVuY3Rpb24gX2dldENyZWF0aW9uQmVoYXZpb3VyKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uW1wiY3JlYXRlXCJdIHtcblx0Y29uc3QgbmF2aWdhdGlvbiA9IG5hdmlnYXRpb25TZXR0aW5ncz8uY3JlYXRlIHx8IG5hdmlnYXRpb25TZXR0aW5ncz8uZGV0YWlsO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3Qgb3JpZ2luYWxUYWJsZVNldHRpbmdzID0gKHRhYmxlTWFuaWZlc3RTZXR0aW5ncyAmJiB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncykgfHwge307XG5cdC8vIGNyb3NzLWFwcFxuXHRpZiAobmF2aWdhdGlvbj8ub3V0Ym91bmQgJiYgbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCAmJiBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRtb2RlOiBcIkV4dGVybmFsXCIsXG5cdFx0XHRvdXRib3VuZDogbmF2aWdhdGlvbi5vdXRib3VuZCxcblx0XHRcdG91dGJvdW5kRGV0YWlsOiBuYXZpZ2F0aW9uLm91dGJvdW5kRGV0YWlsLFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzOiBuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0XHR9O1xuXHR9XG5cblx0bGV0IG5ld0FjdGlvbjtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIGluLWFwcFxuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbixcblx0XHRcdHRhcmdldEFubm90YXRpb25zU2Vzc2lvbiA9IHRhcmdldEFubm90YXRpb25zPy5TZXNzaW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX1Nlc3Npb247XG5cdFx0bmV3QWN0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbnNDb21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uIHx8IHRhcmdldEFubm90YXRpb25zU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uO1xuXG5cdFx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93ICYmIG5ld0FjdGlvbikge1xuXHRcdFx0Ly8gQSBjb21iaW5hdGlvbiBvZiAnQ3JlYXRpb25Sb3cnIGFuZCAnTmV3QWN0aW9uJyBkb2VzIG5vdCBtYWtlIHNlbnNlXG5cdFx0XHR0aHJvdyBFcnJvcihgQ3JlYXRpb24gbW9kZSAnJHtDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3d9JyBjYW4gbm90IGJlIHVzZWQgd2l0aCBhIGN1c3RvbSAnbmV3JyBhY3Rpb24gKCR7bmV3QWN0aW9ufSlgKTtcblx0XHR9XG5cdFx0aWYgKG5hdmlnYXRpb24/LnJvdXRlKSB7XG5cdFx0XHQvLyByb3V0ZSBzcGVjaWZpZWRcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRcdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRcdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb24/LnRvU3RyaW5nKCksXG5cdFx0XHRcdG5hdmlnYXRlVG9UYXJnZXQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UgPyBuYXZpZ2F0aW9uLnJvdXRlIDogdW5kZWZpbmVkIC8vIG5hdmlnYXRlIG9ubHkgaW4gTmV3UGFnZSBtb2RlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8vIG5vIG5hdmlnYXRpb24gb3Igbm8gcm91dGUgc3BlY2lmaWVkIC0gZmFsbGJhY2sgdG8gaW5saW5lIGNyZWF0ZSBpZiBvcmlnaW5hbCBjcmVhdGlvbiBtb2RlIHdhcyAnTmV3UGFnZSdcblx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UpIHtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHRcdC8vIEluIGNhc2UgdGhlcmUgd2FzIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjcmVhdGVBdEVuZCB3ZSBmb3JjZSBpdCB0byBmYWxzZVxuXHRcdGlmIChvcmlnaW5hbFRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bW9kZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlLFxuXHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb24/LnRvU3RyaW5nKClcblx0fTtcbn1cblxuY29uc3QgX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR0YXJnZXRQYXRoOiBzdHJpbmcsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlXG4pIHtcblx0bGV0IHByZXNzUHJvcGVydHksIG5hdmlnYXRpb25UYXJnZXQ7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+ID0gY29uc3RhbnQoTWVzc2FnZVR5cGUuTm9uZSk7XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0aWYgKG5hdmlnYXRpb25TZXR0aW5ncyAmJiBsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRpc3BsYXk/LnRhcmdldCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5vdXRib3VuZDtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHksXG5cdFx0XHQhIU1vZGVsSGVscGVyLmdldERyYWZ0Um9vdCh0YXJnZXRFbnRpdHlTZXQpIHx8ICEhTW9kZWxIZWxwZXIuZ2V0RHJhZnROb2RlKHRhcmdldEVudGl0eVNldCksXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdFx0KTtcblx0XHRpZiAobmF2aWdhdGlvblRhcmdldCkge1xuXHRcdFx0cHJlc3NQcm9wZXJ0eSA9XG5cdFx0XHRcdFwiLmhhbmRsZXJzLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCggJGNvbnRyb2xsZXIgLCdcIiArIG5hdmlnYXRpb25UYXJnZXQgKyBcIicsICR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9KVwiO1xuXHRcdH1cblx0XHRpZiAoIW5hdmlnYXRpb25UYXJnZXQgJiYgbmF2aWdhdGlvblNldHRpbmdzLmRldGFpbD8ucm91dGUpIHtcblx0XHRcdHByZXNzUHJvcGVydHkgPVxuXHRcdFx0XHRcIkFQSS5vblRhYmxlUm93UHJlc3MoJGV2ZW50LCAkY29udHJvbGxlciwgJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0sIHsgY2FsbEV4dGVuc2lvbjogdHJ1ZSwgdGFyZ2V0UGF0aDogJ1wiICtcblx0XHRcdFx0dGFyZ2V0UGF0aCArXG5cdFx0XHRcdFwiJywgZWRpdGFibGUgOiBcIiArXG5cdFx0XHRcdChNb2RlbEhlbHBlci5nZXREcmFmdFJvb3QodGFyZ2V0RW50aXR5U2V0KSB8fCBNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KVxuXHRcdFx0XHRcdD8gXCIhJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0uZ2V0UHJvcGVydHkoJ0lzQWN0aXZlRW50aXR5JylcIlxuXHRcdFx0XHRcdDogXCJ1bmRlZmluZWRcIikgK1xuXHRcdFx0XHQodGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiIHx8IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IFwiLCBiUmVjcmVhdGVDb250ZXh0OiB0cnVlXCIgOiBcIlwiKSArXG5cdFx0XHRcdFwifSlcIjsgLy9OZWVkIHRvIGFjY2VzcyB0byBEcmFmdFJvb3QgYW5kIERyYWZ0Tm9kZSAhISEhISEhXG5cdFx0fVxuXHR9XG5cdGNvbnN0IHJvd05hdmlnYXRlZEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGZvcm1hdFJlc3VsdChcblx0XHRbcGF0aEluTW9kZWwoXCIvZGVlcGVzdFBhdGhcIiwgXCJpbnRlcm5hbFwiKV0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLm5hdmlnYXRlZFJvdyxcblx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdCk7XG5cdHJldHVybiB7XG5cdFx0cHJlc3M6IHByZXNzUHJvcGVydHksXG5cdFx0YWN0aW9uOiBwcmVzc1Byb3BlcnR5ID8gXCJOYXZpZ2F0aW9uXCIgOiB1bmRlZmluZWQsXG5cdFx0cm93SGlnaGxpZ2h0aW5nOiBjb21waWxlRXhwcmVzc2lvbihjcml0aWNhbGl0eVByb3BlcnR5KSxcblx0XHRyb3dOYXZpZ2F0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKHJvd05hdmlnYXRlZEV4cHJlc3Npb24pLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChVSS5Jc0luYWN0aXZlKSlcblx0fTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbHVtbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIFRoZSBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQgYmFzZWQgb24gTGluZUl0ZW0gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBhbGwgbm9uIHNvcnRhYmxlIGNvbHVtbiBuYW1lcy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcGFyYW0gdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZyb20gYSBwcm9wZXJ0eSB1c2luZyBhIHRleHQgYW5ub3RhdGlvbiB3aXRoIHRleHRPbmx5IGFzIHRleHQgYXJyYW5nZW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgY29sdW1uIGZyb20gdGhlIGVudGl0eVR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uIChcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uOiBzdHJpbmdbXVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZUNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gYW5ub3RhdGlvbkNvbHVtbnM7XG5cdC8vIENhdGNoIGFscmVhZHkgZXhpc3RpbmcgY29sdW1ucyAtIHdoaWNoIHdlcmUgYWRkZWQgYmVmb3JlIGJ5IExpbmVJdGVtIEFubm90YXRpb25zXG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRcdGNvbnN0IGV4aXN0cyA9IGFubm90YXRpb25Db2x1bW5zLnNvbWUoKGNvbHVtbikgPT4ge1xuXHRcdFx0cmV0dXJuIGNvbHVtbi5uYW1lID09PSBwcm9wZXJ0eS5uYW1lO1xuXHRcdH0pO1xuXG5cdFx0Ly8gaWYgdGFyZ2V0IHR5cGUgZXhpc3RzLCBpdCBpcyBhIGNvbXBsZXggcHJvcGVydHkgYW5kIHNob3VsZCBiZSBpZ25vcmVkXG5cdFx0aWYgKCFwcm9wZXJ0eS50YXJnZXRUeXBlICYmICFleGlzdHMpIHtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbzogQ29tcGxleFByb3BlcnR5SW5mbyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRhYmxlVHlwZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllcyk7XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdC8vIEluY2x1ZGUgdGV4dCBwcm9wZXJ0aWVzIGZvdW5kIGR1cmluZyBhbmFseXNpcyBvbiBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zXG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5wdXNoKC4uLnJlbGF0ZWRQcm9wZXJ0aWVzSW5mby50ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHQuLi5jb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NXcmFwcGluZ1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnR5cGUgPSBfZ2V0RXhwb3J0RGF0YVR5cGUocHJvcGVydHkudHlwZSwgcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMSk7XG5cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0TmFtZSkge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudW5pdFByb3BlcnR5ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXROYW1lO1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiQ3VycmVuY3lcIjsgLy8gRm9yY2UgdG8gYSBjdXJyZW5jeSBiZWNhdXNlIHRoZXJlJ3MgYSB1bml0UHJvcGVydHkgKG90aGVyd2lzZSB0aGUgdmFsdWUgaXNuJ3QgcHJvcGVybHkgZm9ybWF0dGVkIHdoZW4gZXhwb3J0ZWQpXG5cdFx0XHRcdH0gZWxzZSBpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXRTdHJpbmcpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnVuaXQgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdFN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lTmFtZSkge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudGltZXpvbmVQcm9wZXJ0eSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZU5hbWU7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy51dGMgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVTdHJpbmcpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnRpbWV6b25lID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lU3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0RGF0YVBvaW50VGFyZ2V0VmFsdWUpIHtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gdXBkYXRlIFByb3BlcnR5IExhYmVsIHdoZW4gaXQncyByZWZlcmVuY2VkIG9ubHkgb25jZSBpbiBhIGNvbHVtbiwgbmV3IGxhYmVsIHdpbGwgYmUgdGhlIGxhYmVsIG9mIHRoZSBjb2x1bW5cblx0XHRcdHVwZGF0ZVByb3BlcnR5TGFiZWwoYW5ub3RhdGlvbkNvbHVtbnMsIGNvbHVtbnNUb0JlQ3JlYXRlZCwgY29sdW1uSW5mbyk7XG5cblx0XHRcdGlmIChhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRhYmxlQ29sdW1ucy5wdXNoKGNvbHVtbkluZm8pO1xuXHRcdH1cblx0XHQvLyBJbiBjYXNlIGEgcHJvcGVydHkgaGFzIGRlZmluZWQgYSAjVGV4dE9ubHkgdGV4dCBhcnJhbmdlbWVudCBkb24ndCBvbmx5IGNyZWF0ZSB0aGUgY29tcGxleCBwcm9wZXJ0eSB3aXRoIHRoZSB0ZXh0IHByb3BlcnR5IGFzIGEgY2hpbGQgcHJvcGVydHksXG5cdFx0Ly8gYnV0IGFsc28gdGhlIHByb3BlcnR5IGl0c2VsZiBhcyBpdCBjYW4gYmUgdXNlZCBhcyB3aXRoaW4gdGhlIHNvcnRDb25kaXRpb25zIG9yIG9uIGN1c3RvbSBjb2x1bW5zLlxuXHRcdC8vIFRoaXMgc3RlcCBtdXN0IGJlIHZhbGlkZSBhbHNvIGZyb20gdGhlIGNvbHVtbnMgYWRkZWQgdmlhIExpbmVJdGVtcyBvciBmcm9tIGEgY29sdW1uIGF2YWlsYWJsZSBvbiB0aGUgcDEzbi5cblx0XHRpZiAoZ2V0RGlzcGxheU1vZGUocHJvcGVydHkpID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyA9IG5vblNvcnRhYmxlQ29sdW1ucy5jb25jYXQocHJvcGVydHkubmFtZSk7XG5cdFx0XHR0YWJsZUNvbHVtbnMucHVzaChcblx0XHRcdFx0Z2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFtdXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBDcmVhdGUgYSBwcm9wZXJ0eUluZm8gZm9yIGVhY2ggcmVsYXRlZCBwcm9wZXJ0eS5cblx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBfY3JlYXRlUmVsYXRlZENvbHVtbnMoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdHRhYmxlQ29sdW1ucyxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHQpO1xuXG5cdHJldHVybiB0YWJsZUNvbHVtbnMuY29uY2F0KHJlbGF0ZWRDb2x1bW5zKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgY29sdW1uIGRlZmluaXRpb24gZnJvbSBhIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBFbnRpdHkgdHlwZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGNvbHVtbiBpcyBjcmVhdGVkXG4gKiBAcGFyYW0gZnVsbFByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEBwYXJhbSByZWxhdGl2ZVBhdGggVGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgY29udGV4dFxuICogQHBhcmFtIHVzZURhdGFGaWVsZFByZWZpeCBTaG91bGQgYmUgcHJlZml4ZWQgd2l0aCBcIkRhdGFGaWVsZDo6XCIsIGVsc2UgaXQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIFwiUHJvcGVydHk6OlwiXG4gKiBAcGFyYW0gYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiBEZWNpZGVzIHdoZXRoZXIgdGhlIGNvbHVtbiBzaG91bGQgYmUgYXZhaWxhYmxlIGZvciBhZGFwdGF0aW9uXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBhbGwgbm9uLXNvcnRhYmxlIGNvbHVtbiBuYW1lc1xuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbkhlbHBlciBmb3IgdGhlIGVudGl0eVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uIFRoZSBhcnJheSBvZiBjb2x1bW5zIGZyb20gYSBwcm9wZXJ0eSB1c2luZyBhIHRleHQgYW5ub3RhdGlvbiB3aXRoIHRleHRPbmx5IGFzIHRleHQgYXJyYW5nZW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvbiBjb2x1bW4gZGVmaW5pdGlvblxuICovXG5jb25zdCBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmcsXG5cdHVzZURhdGFGaWVsZFByZWZpeDogYm9vbGVhbixcblx0YXZhaWxhYmxlRm9yQWRhcHRhdGlvbjogYm9vbGVhbixcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0YWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb246IHN0cmluZ1tdXG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4ge1xuXHRjb25zdCBuYW1lID0gdXNlRGF0YUZpZWxkUHJlZml4ID8gcmVsYXRpdmVQYXRoIDogYFByb3BlcnR5Ojoke3JlbGF0aXZlUGF0aH1gO1xuXHRjb25zdCBrZXkgPSAodXNlRGF0YUZpZWxkUHJlZml4ID8gXCJEYXRhRmllbGQ6OlwiIDogXCJQcm9wZXJ0eTo6XCIpICsgcmVwbGFjZVNwZWNpYWxDaGFycyhyZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5KTtcblx0Y29uc3QgaXNIaWRkZW4gPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlO1xuXHRjb25zdCBncm91cFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHByb3BlcnR5Lm5hbWUgPyBfc2xpY2VBdFNsYXNoKHByb3BlcnR5Lm5hbWUsIHRydWUsIGZhbHNlKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSBwcm9wZXJ0eS5uYW1lO1xuXHRjb25zdCBsYWJlbCA9IGdldExhYmVsKHByb3BlcnR5LCBpc0dyb3VwKTtcblx0Y29uc3QgZXhwb3J0VHlwZTogc3RyaW5nID0gX2dldEV4cG9ydERhdGFUeXBlKHByb3BlcnR5LnR5cGUpO1xuXHRjb25zdCBzRGF0ZUlucHV0Rm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5EYXRlXCIgPyBcIllZWVktTU0tRERcIiA6IHVuZGVmaW5lZDtcblx0Y29uc3QgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldERhdGFGaWVsZERhdGFUeXBlKHByb3BlcnR5KTtcblx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSwgZGF0YVR5cGUpO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5ID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkNvbW1vblwiLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNLZXksIFtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRdKVswXTtcblx0Y29uc3QgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uID1cblx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24gJiYgdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uLmluZGV4T2YocmVsYXRpdmVQYXRoKSA+PSAwO1xuXHRjb25zdCBzb3J0YWJsZSA9ICghaXNIaWRkZW4gfHwgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uKSAmJiBub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihyZWxhdGl2ZVBhdGgpID09PSAtMTtcblx0Y29uc3QgdHlwZUNvbmZpZyA9IHtcblx0XHRjbGFzc05hbWU6IHByb3BlcnR5LnR5cGUgfHwgZGF0YVR5cGUsXG5cdFx0Zm9ybWF0T3B0aW9uczogcHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0Y29uc3RyYWludHM6IHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHR9O1xuXHRsZXQgZXhwb3J0U2V0dGluZ3M6IGNvbHVtbkV4cG9ydFNldHRpbmdzIHwgbnVsbCA9IG51bGw7XG5cdGlmIChfaXNFeHBvcnRhYmxlQ29sdW1uKHByb3BlcnR5KSkge1xuXHRcdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRjb25zdCB0aW1lem9uZVByb3BlcnR5ID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkocHJvcGVydHkpO1xuXHRcdGNvbnN0IHVuaXRUZXh0ID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0Y29uc3QgdGltZXpvbmVUZXh0ID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cblx0XHRleHBvcnRTZXR0aW5ncyA9IHtcblx0XHRcdHR5cGU6IGV4cG9ydFR5cGUsXG5cdFx0XHRpbnB1dEZvcm1hdDogc0RhdGVJbnB1dEZvcm1hdCxcblx0XHRcdHNjYWxlOiBwcm9wZXJ0eS5zY2FsZSxcblx0XHRcdGRlbGltaXRlcjogcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uSW50NjRcIlxuXHRcdH07XG5cblx0XHRpZiAodW5pdFByb3BlcnR5KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSB1bml0UHJvcGVydHkubmFtZTtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnR5cGUgPSBcIkN1cnJlbmN5XCI7IC8vIEZvcmNlIHRvIGEgY3VycmVuY3kgYmVjYXVzZSB0aGVyZSdzIGEgdW5pdFByb3BlcnR5IChvdGhlcndpc2UgdGhlIHZhbHVlIGlzbid0IHByb3Blcmx5IGZvcm1hdHRlZCB3aGVuIGV4cG9ydGVkKVxuXHRcdH0gZWxzZSBpZiAodW5pdFRleHQpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnVuaXQgPSBgJHt1bml0VGV4dH1gO1xuXHRcdH1cblx0XHRpZiAodGltZXpvbmVQcm9wZXJ0eSkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MudGltZXpvbmVQcm9wZXJ0eSA9IHRpbWV6b25lUHJvcGVydHkubmFtZTtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnV0YyA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGltZXpvbmVUZXh0KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy50aW1lem9uZSA9IHRpbWV6b25lVGV4dC50b1N0cmluZygpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzKHJlbGF0aXZlUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSB7XG5cdFx0a2V5OiBrZXksXG5cdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdGxhYmVsOiBsYWJlbCxcblx0XHRncm91cExhYmVsOiBpc0dyb3VwID8gZ2V0TGFiZWwocHJvcGVydHkpIDogdW5kZWZpbmVkLFxuXHRcdGdyb3VwOiBpc0dyb3VwID8gZ3JvdXBQYXRoIDogdW5kZWZpbmVkLFxuXHRcdGFubm90YXRpb25QYXRoOiBmdWxsUHJvcGVydHlQYXRoLFxuXHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRhdmFpbGFiaWxpdHk6ICFhdmFpbGFibGVGb3JBZGFwdGF0aW9uIHx8IGlzSGlkZGVuID8gXCJIaWRkZW5cIiA6IFwiQWRhcHRhdGlvblwiLFxuXHRcdG5hbWU6IG5hbWUsXG5cdFx0cmVsYXRpdmVQYXRoOiByZWxhdGl2ZVBhdGgsXG5cdFx0c29ydGFibGU6IHNvcnRhYmxlLFxuXHRcdGlzR3JvdXBhYmxlOiBhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpID8gISFhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5R3JvdXBhYmxlKHByb3BlcnR5KSA6IHNvcnRhYmxlLFxuXHRcdGlzS2V5OiBwcm9wZXJ0eS5pc0tleSxcblx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHR5cGVDb25maWc6IHR5cGVDb25maWcgYXMgUHJvcGVydHlUeXBlQ29uZmlnLFxuXHRcdGltcG9ydGFuY2U6IGdldEltcG9ydGFuY2UocHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0LCBzZW1hbnRpY0tleXMpLFxuXHRcdGFkZGl0aW9uYWxMYWJlbHM6IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsc1xuXHR9O1xuXHRjb25zdCBzVG9vbHRpcCA9IF9nZXRUb29sdGlwKHByb3BlcnR5KTtcblx0aWYgKHNUb29sdGlwKSB7XG5cdFx0Y29sdW1uLnRvb2x0aXAgPSBzVG9vbHRpcDtcblx0fVxuXHRjb25zdCB0YXJnZXRWYWx1ZWZyb21EUCA9IGdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQocHJvcGVydHkpO1xuXHRpZiAoaXNEYXRhUG9pbnRGcm9tRGF0YUZpZWxkRGVmYXVsdChwcm9wZXJ0eSkgJiYgdHlwZW9mIHRhcmdldFZhbHVlZnJvbURQID09PSBcInN0cmluZ1wiICYmIGNvbHVtbi5leHBvcnRTZXR0aW5ncykge1xuXHRcdGNvbHVtbi5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSA9IHRhcmdldFZhbHVlZnJvbURQO1xuXHRcdGNvbHVtbi5leHBvcnRTZXR0aW5ncy50ZW1wbGF0ZSA9IFwiezB9L1wiICsgdGFyZ2V0VmFsdWVmcm9tRFA7XG5cdH1cblx0cmV0dXJuIGNvbHVtbjtcbn07XG5cbi8qKlxuICogVXBkYXRlIHByb3BlcnR5IGxhYmVsIGluIGNhc2UgaXQncyBvbmx5IHJlZmVyZW5jZWQgaW4gb25lIGNvbHVtbi4gVGhlIGxhYmVsIG9mIHRoZSBjb2x1bW4gbXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHByb3BlcnR5IGxhYmVsLlxuICpcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkIGJhc2VkIG9uIExpbmVJdGVtIGFubm90YXRpb25zLlxuICogQHBhcmFtIGNvbHVtbnNUb0JlQ3JlYXRlZCBUaGUgY29sdW1ucyB0byBiZSBjcmVhdGVkXG4gKiBAcGFyYW0gY29sdW1uSW5mbyBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydHlMYWJlbChcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0Y29sdW1uSW5mbzogQW5ub3RhdGlvblRhYmxlQ29sdW1uXG4pOiB2b2lkIHtcblx0Y29uc3QgbGlua2VkQW5ub3RhdGlvbkNvbHVtbnMgPSBhbm5vdGF0aW9uQ29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLnByb3BlcnR5SW5mb3M/LmluY2x1ZGVzKGNvbHVtbkluZm8ucmVsYXRpdmVQYXRoKSk7XG5cdGlmIChcblx0XHRsaW5rZWRBbm5vdGF0aW9uQ29sdW1ucz8ubGVuZ3RoID09PSAxICYmXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkW2NvbHVtbkluZm8ucmVsYXRpdmVQYXRoXSAmJlxuXHRcdGxpbmtlZEFubm90YXRpb25Db2x1bW5zWzBdLnByb3BlcnR5SW5mb3M/Lmxlbmd0aCA9PT0gMVxuXHQpIHtcblx0XHRjb2x1bW5JbmZvLmxhYmVsID0gbGlua2VkQW5ub3RhdGlvbkNvbHVtbnNbMF0ubGFiZWw7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIEJvb2xlYW4gdHJ1ZSBmb3IgZXhwb3J0YWJsZSBjb2x1bW5zLCBmYWxzZSBmb3Igbm9uIGV4cG9ydGFibGUgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0gc291cmNlIFRoZSBkYXRhRmllbGQgb3IgcHJvcGVydHkgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyBUcnVlIGZvciBleHBvcnRhYmxlIGNvbHVtbiwgZmFsc2UgZm9yIG5vbiBleHBvcnRhYmxlIGNvbHVtblxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBfaXNFeHBvcnRhYmxlQ29sdW1uKHNvdXJjZTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdGxldCBwcm9wZXJ0eVR5cGUsIHByb3BlcnR5O1xuXHRjb25zdCBkYXRhRmllbGREZWZhdWx0UHJvcGVydHkgPSAoc291cmNlIGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucy5VST8uRGF0YUZpZWxkRGVmYXVsdDtcblx0aWYgKGlzUHJvcGVydHkoc291cmNlKSAmJiBkYXRhRmllbGREZWZhdWx0UHJvcGVydHk/LiRUeXBlKSB7XG5cdFx0aWYgKGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKGRhdGFGaWVsZERlZmF1bHRQcm9wZXJ0eSkgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cHJvcGVydHlUeXBlID0gZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5Py4kVHlwZTtcblx0fSBlbHNlIGlmIChpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihzb3VyY2UgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cHJvcGVydHkgPSBzb3VyY2UgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcztcblx0XHRwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eS4kVHlwZTtcblx0XHRpZiAocHJvcGVydHlUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmIChwcm9wZXJ0eSBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlKSB7XG5cdFx0XHQvL0ZvciBDaGFydFxuXHRcdFx0cHJvcGVydHlUeXBlID0gKHByb3BlcnR5IGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldD8uJFR5cGU7XG5cdFx0XHRyZXR1cm4gVUlBbm5vdGF0aW9uVHlwZXMuQ2hhcnREZWZpbml0aW9uVHlwZS5pbmRleE9mKHByb3BlcnR5VHlwZSkgPT09IC0xO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHQocHJvcGVydHkgYXMgRGF0YUZpZWxkKS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk1lZGlhVHlwZT8udGVybSA9PT0gXCJPcmcuT0RhdGEuQ29yZS5WMS5NZWRpYVR5cGVcIiAmJlxuXHRcdFx0KHByb3BlcnR5IGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5pc1VSTCAhPT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0Ly9Gb3IgU3RyZWFtXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVcblx0XHQ/IFtcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbkdyb3VwXG5cdFx0ICBdLmluZGV4T2YocHJvcGVydHlUeXBlKSA9PT0gLTFcblx0XHQ6IHRydWU7XG59XG5cbi8qKlxuICogUmV0dXJucyBCb29sZWFuIHRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBEaWZmZXJlbnQgRGF0YUZpZWxkIHR5cGVzIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyBUcnVlIGZvciB2YWxpZCBjb2x1bW5zLCBmYWxzZSBmb3IgaW52YWxpZCBjb2x1bW5zXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfaXNWYWxpZENvbHVtbiA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJldHVybiAhIWRhdGFGaWVsZC5JbmxpbmU7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0ZGVmYXVsdDpcblx0XHQvLyBUb2RvOiBSZXBsYWNlIHdpdGggcHJvcGVyIExvZyBzdGF0ZW1lbnQgb25jZSBhdmFpbGFibGVcblx0XHQvLyAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIERhdGFGaWVsZCBBYnN0cmFjdCB0eXBlOiBcIiArIGRhdGFGaWVsZC4kVHlwZSk7XG5cdH1cbn07XG4vKipcbiAqIFJldHVybnMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiBhIERhdGFGaWVsZCBvciBEYXRhUG9pbnQgYW5ub3RhdGlvbi5cbiAqXG4gKiBTQVAgRmlvcmkgZWxlbWVudHMgd2lsbCBldmFsdWF0ZSBlaXRoZXIgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGRlZmluZWQgb24gdGhlIGFubm90YXRpb24gaXRzZWxmIG9yIG9uIHRoZSB0YXJnZXQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgbWV0YXBhdGggcmVmZXJyaW5nIHRvIHRoZSBhbm5vdGF0aW9uIHRoYXQgaXMgZXZhbHVhdGVkIGJ5IFNBUCBGaW9yaSBlbGVtZW50cy5cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIGJpbmQgdG8gdGhlIFVJLlxuICovXG5leHBvcnQgY29uc3QgX2dldFZpc2libGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHRhcmdldE9iamVjdDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGVUeXBlcyA9IGRhdGFGaWVsZE1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdGxldCBwcm9wZXJ0eVZhbHVlO1xuXHRpZiAodGFyZ2V0T2JqZWN0KSB7XG5cdFx0c3dpdGNoICh0YXJnZXRPYmplY3QuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0YXJnZXRPYmplY3QuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRcdC8vIGlmIGl0IGlzIGEgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiBwb2ludGluZyB0byBhIERhdGFQb2ludCB3ZSBsb29rIGF0IHRoZSBkYXRhUG9pbnQncyB2YWx1ZVxuXHRcdFx0XHRpZiAodGFyZ2V0T2JqZWN0Py5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldD8uVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHQvLyBGSVhNRSBQcm92ZSBtZSB3cm9uZyB0aGF0IHRoaXMgaXMgdXNlbGVzc1xuXHRjb25zdCBpc0FuYWx5dGljYWxHcm91cEhlYWRlckV4cGFuZGVkID0gLypmb3JtYXRPcHRpb25zPy5pc0FuYWx5dGljcyA/IFVJLklzRXhwYW5kZWQgOiovIGNvbnN0YW50KGZhbHNlKTtcblx0Y29uc3QgaXNBbmFseXRpY2FsTGVhZiA9IC8qZm9ybWF0T3B0aW9ucz8uaXNBbmFseXRpY3MgPyBlcXVhbChVSS5Ob2RlTGV2ZWwsIDApIDoqLyBjb25zdGFudChmYWxzZSk7XG5cblx0Ly8gQSBkYXRhIGZpZWxkIGlzIHZpc2libGUgaWY6XG5cdC8vIC0gdGhlIFVJLkhpZGRlbiBleHByZXNzaW9uIGluIHRoZSBvcmlnaW5hbCBhbm5vdGF0aW9uIGRvZXMgbm90IGV2YWx1YXRlIHRvICd0cnVlJ1xuXHQvLyAtIHRoZSBVSS5IaWRkZW4gZXhwcmVzc2lvbiBpbiB0aGUgdGFyZ2V0IHByb3BlcnR5IGRvZXMgbm90IGV2YWx1YXRlIHRvICd0cnVlJ1xuXHQvLyAtIGluIGNhc2Ugb2YgQW5hbHl0aWNzIGl0J3Mgbm90IHZpc2libGUgZm9yIGFuIGV4cGFuZGVkIEdyb3VwSGVhZGVyXG5cdHJldHVybiBhbmQoXG5cdFx0Li4uW1xuXHRcdFx0bm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpLFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHQhIXByb3BlcnR5VmFsdWUsXG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgJiYgbm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwcm9wZXJ0eVZhbHVlLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpLFxuXHRcdFx0b3Iobm90KGlzQW5hbHl0aWNhbEdyb3VwSGVhZGVyRXhwYW5kZWQpLCBpc0FuYWx5dGljYWxMZWFmKVxuXHRcdF1cblx0KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBoaWRkZW4gYmluZGluZyBleHByZXNzaW9ucyBmb3IgYSBmaWVsZCBncm91cC5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkR3JvdXAgRGF0YUZpZWxkIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyBDb21waWxlIGJpbmRpbmcgb2YgZmllbGQgZ3JvdXAgZXhwcmVzc2lvbnMuXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zID0gZnVuY3Rpb24gKGRhdGFGaWVsZEdyb3VwOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGlmIChcblx0XHRkYXRhRmllbGRHcm91cC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlXG5cdCkge1xuXHRcdGlmIChkYXRhRmllbGRHcm91cD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZEdyb3VwLmFubm90YXRpb25zLlVJLkhpZGRlbiksIHRydWUpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldC4kdGFyZ2V0LkRhdGE/LmZvckVhY2goKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzKSA9PiB7XG5cdFx0XHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucy5wdXNoKF9nZXRWaXNpYmxlRXhwcmVzc2lvbih7IHRhcmdldE9iamVjdDogaW5uZXJEYXRhRmllbGQgfSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoKSk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2Uob3IoLi4uZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zKSwgY29uc3RhbnQodHJ1ZSksIGNvbnN0YW50KGZhbHNlKSkpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgcHJvcGVydHkgYW5kIGRhdGFGaWVsZC5cbiAqXG4gKiBAcGFyYW0gW3Byb3BlcnR5XSBQcm9wZXJ0eSwgRGF0YUZpZWxkIG9yIE5hdmlnYXRpb24gUHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSBpc0dyb3VwXG4gKiBAcmV0dXJucyBMYWJlbCBvZiB0aGUgcHJvcGVydHkgb3IgRGF0YUZpZWxkXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBnZXRMYWJlbCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5LCBpc0dyb3VwID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoaXNQcm9wZXJ0eShwcm9wZXJ0eSkgfHwgaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0Y29uc3QgZGF0YUZpZWxkRGVmYXVsdCA9IChwcm9wZXJ0eSBhcyBQcm9wZXJ0eSkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0O1xuXHRcdGlmIChkYXRhRmllbGREZWZhdWx0ICYmICFkYXRhRmllbGREZWZhdWx0LnF1YWxpZmllciAmJiBkYXRhRmllbGREZWZhdWx0LkxhYmVsPy52YWx1ZU9mKCkpIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkRGVmYXVsdC5MYWJlbD8udmFsdWVPZigpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKTtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHByb3BlcnR5KSkge1xuXHRcdGlmICghIWlzR3JvdXAgJiYgcHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/Lm5hbWVcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2UgaWYgKHByb3BlcnR5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKClcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHR9XG59O1xuXG5jb25zdCBfZ2V0VG9vbHRpcCA9IGZ1bmN0aW9uIChzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghc291cmNlKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkgfHwgc291cmNlLmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mbykge1xuXHRcdHJldHVybiBzb3VyY2UuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihzb3VyY2UuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mby52YWx1ZU9mKCkpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhzb3VyY2UpKSB7XG5cdFx0cmV0dXJuIHNvdXJjZS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihzb3VyY2UuVmFsdWUuJHRhcmdldC5hbm5vdGF0aW9ucy5Db21tb24uUXVpY2tJbmZvLnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChzb3VyY2UuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRjb25zdCBkYXRhcG9pbnRUYXJnZXQgPSBzb3VyY2UuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludDtcblx0XHRyZXR1cm4gZGF0YXBvaW50VGFyZ2V0Py5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhcG9pbnRUYXJnZXQuVmFsdWUuJHRhcmdldC5hbm5vdGF0aW9ucy5Db21tb24uUXVpY2tJbmZvLnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShjb2xOYW1lOiBzdHJpbmcsIGlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXA/OiBCb29sZWFuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRwYXRoSW5Nb2RlbChgc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcmAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRwYXRoSW5Nb2RlbChgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRjb2xOYW1lLFxuXHRcdFx0aXNTZW1hbnRpY0tleUluRmllbGRHcm91cFxuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLmdldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXJcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJvcGVydHlJbmZvIGZvciBlYWNoIGlkZW50aWZpZWQgcHJvcGVydHkgY29uc3VtZWQgYnkgYSBMaW5lSXRlbS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIElkZW50aWZpZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBleGlzdGluZ0NvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBMaW5lSXRlbXMgYW5kIFByb3BlcnRpZXMgb2YgZW50aXR5VHlwZS5cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbiBuYW1lcyB3aGljaCBjYW5ub3QgYmUgc29ydGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGZvciB0aGUgTGluZUl0ZW1cbiAqIEBwYXJhbSB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24gVGhlIGFycmF5IG9mIGNvbHVtbnMgZnJvbSBhIHByb3BlcnR5IHVzaW5nIGEgdGV4dCBhbm5vdGF0aW9uIHdpdGggdGV4dE9ubHkgYXMgdGV4dCBhcnJhbmdlbWVudC5cbiAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQuXG4gKi9cbmNvbnN0IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyA9IGZ1bmN0aW9uIChcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGV4aXN0aW5nQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbjogc3RyaW5nW11cbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgcmVsYXRlZENvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW107XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0T2JqZWN0LmtleXMoY29sdW1uc1RvQmVDcmVhdGVkKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0sXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChuYW1lKSxcblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgdGhlIHJlbGF0ZWQgY29sdW1uIGFscmVhZHkgZXhpc3RzLlxuXHRcdFx0cmVsYXRlZENvbHVtbiA9IGV4aXN0aW5nQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAocmVsYXRlZENvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBDYXNlIDE6IEtleSBjb250YWlucyBEYXRhRmllbGQgcHJlZml4IHRvIGVuc3VyZSBhbGwgcHJvcGVydHkgY29sdW1ucyBoYXZlIHRoZSBzYW1lIGtleSBmb3JtYXQuXG5cdFx0XHQvLyBOZXcgY3JlYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaXMgc2V0IHRvIGhpZGRlbi5cblx0XHRcdGNvbnN0IGNvbHVtbiA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHRcdFx0KTtcblx0XHRcdGNvbHVtbi5pc1BhcnRPZkxpbmVJdGVtID0gZXhpc3RpbmdDb2x1bW5zLnNvbWUoXG5cdFx0XHRcdChleGlzdGluZ0NvbHVtbikgPT4gZXhpc3RpbmdDb2x1bW4ucHJvcGVydHlJbmZvcz8uaW5jbHVkZXMobmFtZSkgJiYgZXhpc3RpbmdDb2x1bW4uaXNQYXJ0T2ZMaW5lSXRlbVxuXHRcdFx0KTtcblx0XHRcdHVwZGF0ZVByb3BlcnR5TGFiZWwoZXhpc3RpbmdDb2x1bW5zLCBjb2x1bW5zVG9CZUNyZWF0ZWQsIGNvbHVtbik7XG5cdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0fSBlbHNlIGlmIChyZWxhdGVkQ29sdW1uLmFubm90YXRpb25QYXRoICE9PSBhbm5vdGF0aW9uUGF0aCB8fCByZWxhdGVkQ29sdW1uLnByb3BlcnR5SW5mb3MpIHtcblx0XHRcdC8vIENhc2UgMjogVGhlIGV4aXN0aW5nIGNvbHVtbiBwb2ludHMgdG8gYSBMaW5lSXRlbSAob3IpXG5cdFx0XHQvLyBDYXNlIDM6IFRoaXMgaXMgYSBzZWxmIHJlZmVyZW5jZSBmcm9tIGFuIGV4aXN0aW5nIGNvbHVtblxuXG5cdFx0XHRjb25zdCBuZXdOYW1lID0gYFByb3BlcnR5Ojoke25hbWV9YDtcblxuXHRcdFx0Ly8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVsYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGluIGEgcHJldmlvdXMgaXRlcmF0aW9uLlxuXHRcdFx0aWYgKCFleGlzdGluZ0NvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmV3TmFtZSkpIHtcblx0XHRcdFx0Ly8gQ3JlYXRlIGEgbmV3IHByb3BlcnR5IGNvbHVtbiB3aXRoICdQcm9wZXJ0eTo6JyBwcmVmaXgsXG5cdFx0XHRcdC8vIFNldCBpdCB0byBoaWRkZW4gYXMgaXQgaXMgb25seSBjb25zdW1lZCBieSBDb21wbGV4IHByb3BlcnR5IGluZm9zLlxuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbHVtbi5pc1BhcnRPZkxpbmVJdGVtID0gcmVsYXRlZENvbHVtbi5pc1BhcnRPZkxpbmVJdGVtO1xuXHRcdFx0XHR1cGRhdGVQcm9wZXJ0eUxhYmVsKGV4aXN0aW5nQ29sdW1ucywgY29sdW1uc1RvQmVDcmVhdGVkLCBjb2x1bW4pO1xuXHRcdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbbmFtZV0gPSBuZXdOYW1lO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0ZXhpc3RpbmdDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpICYmXG5cdFx0XHRcdGV4aXN0aW5nQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5pbmNsdWRlcyhuYW1lKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRoZSBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHk6OicgZm9yIHVuaXF1ZW5lc3MuXG5cdC8vIFVwZGF0ZSB0aGUgc2FtZSBpbiBvdGhlciBwcm9wZXJ0eUluZm9zW10gcmVmZXJlbmNlcyB3aGljaCBwb2ludCB0byB0aGlzIHByb3BlcnR5LlxuXHRleGlzdGluZ0NvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8ubWFwKChwcm9wZXJ0eUluZm8pID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm8pO1xuXHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcz8ubWFwKFxuXHRcdFx0KHByb3BlcnR5SW5mbykgPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdCk7XG5cdH0pO1xuXG5cdHJldHVybiByZWxhdGVkQ29sdW1ucztcbn07XG5cbi8qKlxuICogR2V0dGluZyB0aGUgQ29sdW1uIE5hbWVcbiAqIElmIGl0IHBvaW50cyB0byBhIERhdGFGaWVsZCB3aXRoIG9uZSBwcm9wZXJ0eSBvciBEYXRhUG9pbnQgd2l0aCBvbmUgcHJvcGVydHksIGl0IHdpbGwgdXNlIHRoZSBwcm9wZXJ0eSBuYW1lXG4gKiBoZXJlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZXhpc3RpbmcgZmxleCBjaGFuZ2VzLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMgVGhlIG5hbWUgb2YgYW5ub3RhdGlvbiBjb2x1bW5zXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUgPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdC8vIFRoaXMgaXMgbmVlZGVkIGFzIHdlIGhhdmUgZmxleGliaWxpdHkgY2hhbmdlcyBhbHJlYWR5IHRoYXQgd2UgaGF2ZSB0byBjaGVjayBhZ2FpbnN0XG5cdGlmIChpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkgJiYgZGF0YUZpZWxkLlZhbHVlPy5wYXRoKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5WYWx1ZT8ucGF0aDtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LnBhdGgpIHtcblx0XHQvLyBUaGlzIGlzIGZvciByZW1vdmluZyBkdXBsaWNhdGUgcHJvcGVydGllcy4gRm9yIGV4YW1wbGUsICdQcm9ncmVzcycgUHJvcGVydHkgaXMgcmVtb3ZlZCBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBEYXRhUG9pbnRcblx0XHRyZXR1cm4gKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUucGF0aDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBQcm9wZXJ0eUluZm8gZm9yIHRoZSBpZGVudGlmaWVkIGFkZGl0aW9uYWwgcHJvcGVydHkgZm9yIHRoZSBBTFAgdGFibGUgdXNlLWNhc2UuXG4gKlxuICogRm9yIGUuZy4gSWYgVUkuSGlkZGVuIHBvaW50cyB0byBhIHByb3BlcnR5LCBpbmNsdWRlIHRoaXMgdGVjaG5pY2FsIHByb3BlcnR5IGluIHRoZSBhZGRpdGlvbmFsUHJvcGVydGllcyBvZiBDb21wbGV4UHJvcGVydHlJbmZvIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSBjb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmb3IgTGluZUl0ZW1zIGFuZCBQcm9wZXJ0aWVzIG9mIGVudGl0eVR5cGUgZnJvbSB0aGUgdGFibGUgdmlzdWFsaXphdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eUluZm8gb2YgdGhlIHRlY2huaWNhbCBwcm9wZXJ0eSB0byBiZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBjb2x1bW5zLlxuICogQHByaXZhdGVcbiAqL1xuXG5jb25zdCBjcmVhdGVUZWNobmljYWxQcm9wZXJ0eSA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sIHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG5cdGNvbnN0IGtleSA9IGBQcm9wZXJ0eV9UZWNobmljYWw6OiR7bmFtZX1gO1xuXHQvLyBWYWxpZGF0ZSBpZiB0aGUgdGVjaG5pY2FsIHByb3BlcnR5IGhhc24ndCB5ZXQgYmVlbiBjcmVhdGVkIG9uIHByZXZpb3VzIGl0ZXJhdGlvbnMuXG5cdGNvbnN0IGNvbHVtbkV4aXN0cyA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5ID09PSBrZXkpO1xuXHQvLyBSZXRyaWV2ZSB0aGUgc2ltcGxlIHByb3BlcnR5IHVzZWQgYnkgdGhlIGhpZGRlbiBhbm5vdGF0aW9uLCBpdCB3aWxsIGJlIHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgbWFuZGF0b3J5IGF0dHJpYnV0ZXMgb2YgbmV3bHkgY3JlYXRlZCB0ZWNobmljYWwgcHJvcGVydHkuIEZvciBlLmcuIHJlbGF0aXZlUGF0aFxuXHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPVxuXHRcdCFjb2x1bW5FeGlzdHMgJiYgKGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSAmJiAhY29sdW1uLnByb3BlcnR5SW5mb3MpIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikhO1xuXHRpZiAoYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgdGVjaG5pY2FsQ29sdW1uOiBUZWNobmljYWxDb2x1bW4gPSB7XG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGxhYmVsOiBhZGRpdGlvbmFsUHJvcGVydHkubGFiZWwsXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYWRkaXRpb25hbFByb3BlcnR5LmFubm90YXRpb25QYXRoLFxuXHRcdFx0YXZhaWxhYmlsaXR5OiBcIkhpZGRlblwiLFxuXHRcdFx0bmFtZToga2V5LFxuXHRcdFx0cmVsYXRpdmVQYXRoOiBhZGRpdGlvbmFsUHJvcGVydHkucmVsYXRpdmVQYXRoLFxuXHRcdFx0c29ydGFibGU6IGZhbHNlLFxuXHRcdFx0aXNHcm91cGFibGU6IGZhbHNlLFxuXHRcdFx0aXNLZXk6IGZhbHNlLFxuXHRcdFx0ZXhwb3J0U2V0dGluZ3M6IG51bGwsXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcblx0XHRcdGFnZ3JlZ2F0YWJsZTogZmFsc2UsXG5cdFx0XHRleHRlbnNpb246IHtcblx0XHRcdFx0dGVjaG5pY2FsbHlHcm91cGFibGU6IHRydWUsXG5cdFx0XHRcdHRlY2huaWNhbGx5QWdncmVnYXRhYmxlOiB0cnVlXG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb2x1bW5zLnB1c2godGVjaG5pY2FsQ29sdW1uKTtcblx0XHRyZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcFtuYW1lXSA9IHRlY2huaWNhbENvbHVtbi5uYW1lO1xuXHR9XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGRhdGEgZmllbGQgbGFiZWxzIGhhdmUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gZmllbGRHcm91cE5hbWUgVGhlIGBEYXRhRmllbGRgIG5hbWUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgYHNob3dEYXRhRmllbGRzTGFiZWxgIHZhbHVlIGZyb20gdGhlIG1hbmlmZXN0XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbCA9IGZ1bmN0aW9uIChmaWVsZEdyb3VwTmFtZTogc3RyaW5nLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Db2x1bW5zID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKT8uY29sdW1ucztcblx0Y29uc3QgYUNvbHVtbktleXMgPSBvQ29sdW1ucyAmJiBPYmplY3Qua2V5cyhvQ29sdW1ucyk7XG5cdHJldHVybiAoXG5cdFx0YUNvbHVtbktleXMgJiZcblx0XHQhIWFDb2x1bW5LZXlzLmZpbmQoZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4ga2V5ID09PSBmaWVsZEdyb3VwTmFtZSAmJiBvQ29sdW1uc1trZXldLnNob3dEYXRhRmllbGRzTGFiZWw7XG5cdFx0fSlcblx0KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgd2l0aCByZXNwZWN0IHRvIHRoZSByb290IGVudGl0eS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBgRGF0YUZpZWxkYCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aFxuICovXG5jb25zdCBfZ2V0UmVsYXRpdmVQYXRoID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB7XG5cdGxldCByZWxhdGl2ZVBhdGggPSBcIlwiO1xuXG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCk/LlZhbHVlPy5wYXRoO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSBkYXRhRmllbGQ/LlRhcmdldD8udmFsdWU7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXA6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uR3JvdXA6XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiByZWxhdGl2ZVBhdGg7XG59O1xuXG5jb25zdCBfc2xpY2VBdFNsYXNoID0gZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgaXNMYXN0U2xhc2g6IGJvb2xlYW4sIGlzTGFzdFBhcnQ6IGJvb2xlYW4pIHtcblx0Y29uc3QgaVNsYXNoSW5kZXggPSBpc0xhc3RTbGFzaCA/IHBhdGgubGFzdEluZGV4T2YoXCIvXCIpIDogcGF0aC5pbmRleE9mKFwiL1wiKTtcblxuXHRpZiAoaVNsYXNoSW5kZXggPT09IC0xKSB7XG5cdFx0cmV0dXJuIHBhdGg7XG5cdH1cblx0cmV0dXJuIGlzTGFzdFBhcnQgPyBwYXRoLnN1YnN0cmluZyhpU2xhc2hJbmRleCArIDEsIHBhdGgubGVuZ3RoKSA6IHBhdGguc3Vic3RyaW5nKDAsIGlTbGFzaEluZGV4KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgY29sdW1uIGNvbnRhaW5zIGEgbXVsdGktdmFsdWUgZmllbGQuXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgRGF0YUZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBEYXRhRmllbGQgY29ycmVzcG9uZHMgdG8gYSBtdWx0aS12YWx1ZSBmaWVsZC5cbiAqL1xuY29uc3QgX2lzQ29sdW1uTXVsdGlWYWx1ZWQgPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGlmIChpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlZhbHVlKSkge1xuXHRcdGNvbnN0IHByb3BlcnR5T2JqZWN0UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCk7XG5cdFx0cmV0dXJuIGlzTXVsdGlWYWx1ZUZpZWxkKHByb3BlcnR5T2JqZWN0UGF0aCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIGEgY29sdW1uIGlzIHNvcnRhYmxlLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIENvbGxlY3Rpb24gb2Ygbm9uLXNvcnRhYmxlIGNvbHVtbiBuYW1lcyBhcyBwZXIgYW5ub3RhdGlvblxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY29sdW1uIGlzIHNvcnRhYmxlXG4gKi9cbmNvbnN0IF9pc0NvbHVtblNvcnRhYmxlID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgcHJvcGVydHlQYXRoOiBzdHJpbmcsIG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihwcm9wZXJ0eVBhdGgpID09PSAtMSAmJiAvLyBDb2x1bW4gaXMgbm90IG1hcmtlZCBhcyBub24tc29ydGFibGUgdmlhIGFubm90YXRpb25cblx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uIHx8XG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb24pXG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBmaWx0ZXJpbmcgb24gdGhlIHRhYmxlIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFJldHVybnMgJ2ZhbHNlJyBpZiBGaWx0ZXJGdW5jdGlvbnMgYW5ub3RhdGlvbiBzdXBwb3J0cyAndG9sb3dlcicsIGVsc2UgJ3RydWUnXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGdW5jdGlvbnM6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGdW5jdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KGZpbHRlckZ1bmN0aW9ucykgPyAoZmlsdGVyRnVuY3Rpb25zIGFzIFN0cmluZ1tdKS5pbmRleE9mKFwidG9sb3dlclwiKSA9PT0gLTEgOiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2dldEZpbHRlckZ1bmN0aW9ucyhDb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogRmlsdGVyRnVuY3Rpb25zIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0aWYgKFR5cGVHdWFyZHMuaXNFbnRpdHlTZXQoZW50aXR5U2V0KSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnMgPz9cblx0XHRcdENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCkuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnNcblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIGZvciB0ZXh0IGZpZWxkcyBpbiBhIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoZm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGUgfCB1bmRlZmluZWQpOiBGb3JtYXRPcHRpb25zVHlwZSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBmb3JtYXRPcHRpb25zID09PSB1bmRlZmluZWRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDoge1xuXHRcdFx0XHR0ZXh0TGluZXNFZGl0OiA0LFxuXHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zXG5cdFx0ICB9O1xufVxuXG5mdW5jdGlvbiBfZmluZFNlbWFudGljS2V5VmFsdWVzKHNlbWFudGljS2V5czogU2VtYW50aWNLZXksIG5hbWU6IHN0cmluZykge1xuXHRjb25zdCBhU2VtYW50aWNLZXlWYWx1ZXM6IHN0cmluZ1tdID0gW107XG5cdGxldCBiU2VtYW50aWNLZXlGb3VuZCA9IGZhbHNlO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbWFudGljS2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdGFTZW1hbnRpY0tleVZhbHVlcy5wdXNoKHNlbWFudGljS2V5c1tpXS52YWx1ZSk7XG5cdFx0aWYgKHNlbWFudGljS2V5c1tpXS52YWx1ZSA9PT0gbmFtZSkge1xuXHRcdFx0YlNlbWFudGljS2V5Rm91bmQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4ge1xuXHRcdHZhbHVlczogYVNlbWFudGljS2V5VmFsdWVzLFxuXHRcdHNlbWFudGljS2V5Rm91bmQ6IGJTZW1hbnRpY0tleUZvdW5kXG5cdH07XG59XG5cbmZ1bmN0aW9uIF9maW5kUHJvcGVydGllcyhzZW1hbnRpY0tleVZhbHVlczogc3RyaW5nW10sIGZpZWxkR3JvdXBQcm9wZXJ0aWVzOiBzdHJpbmdbXSkge1xuXHRsZXQgc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCA9IGZhbHNlO1xuXHRsZXQgc1Byb3BlcnR5UGF0aDtcblx0aWYgKHNlbWFudGljS2V5VmFsdWVzICYmIHNlbWFudGljS2V5VmFsdWVzLmxlbmd0aCA+PSAxICYmIGZpZWxkR3JvdXBQcm9wZXJ0aWVzICYmIGZpZWxkR3JvdXBQcm9wZXJ0aWVzLmxlbmd0aCA+PSAxKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzZW1hbnRpY0tleVZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKFtzZW1hbnRpY0tleVZhbHVlc1tpXV0uc29tZSgodG1wKSA9PiBmaWVsZEdyb3VwUHJvcGVydGllcy5pbmRleE9mKHRtcCkgPj0gMCkpIHtcblx0XHRcdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCA9IHRydWU7XG5cdFx0XHRcdHNQcm9wZXJ0eVBhdGggPSBzZW1hbnRpY0tleVZhbHVlc1tpXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogc2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCxcblx0XHRmaWVsZEdyb3VwUHJvcGVydHlQYXRoOiBzUHJvcGVydHlQYXRoXG5cdH07XG59XG5cbi8qKlxuICogRmluZCB0aGUgZmlyc3QgcHJvcGVydHkgaW4gdGhlIGZpZWxkR3JvdXAgdGhhdCBpcyBwYXJ0IG9mIHRoZSBzZW1hbnRpYyBrZXlzLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cFxuICogQHBhcmFtIHNlbWFudGljS2V5VmFsdWVzXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBhIGZsYWcgdHJ1ZSBpZiBhIHByb3BlcnR5IGlzIGZvdW5kIGFuZCBhIHByb3BlcnR5UGF0aC5cbiAqL1xuZnVuY3Rpb24gX2ZpbmRTZW1hbnRpY0tleVZhbHVlc0luRmllbGRHcm91cChkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGwsIHNlbWFudGljS2V5VmFsdWVzOiBzdHJpbmdbXSkge1xuXHQvLyB0aGlzIGluZm8gaXMgdXNlZCBpbiBGaWVsZGxIZWxwZXIjaXNEcmFmdEluZGljYXRvclZpc2libGVJbkZpZWxkR3JvdXAgdG8gc2hvdyBhIGRyYWZ0IGluZGljYXRvciBhdCB0aGUgZW5kIG9mIGEgZmllbGQgZ3JvdXBcblx0Y29uc3QgYVByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGxldCBfcHJvcGVydGllc0ZvdW5kOiB7IHNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXA6IGJvb2xlYW47IGZpZWxkR3JvdXBQcm9wZXJ0eVBhdGg/OiBzdHJpbmcgfSA9IHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBmYWxzZSxcblx0XHRmaWVsZEdyb3VwUHJvcGVydHlQYXRoOiB1bmRlZmluZWRcblx0fTtcblx0aWYgKFxuXHRcdGRhdGFGaWVsZEdyb3VwICYmXG5cdFx0ZGF0YUZpZWxkR3JvdXAuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHQpIHtcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoaW5uZXJEYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fCBpbm5lckRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCkgJiZcblx0XHRcdFx0aW5uZXJEYXRhRmllbGQuVmFsdWVcblx0XHRcdCkge1xuXHRcdFx0XHRhUHJvcGVydGllcy5wdXNoKGlubmVyRGF0YUZpZWxkLlZhbHVlLnBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0X3Byb3BlcnRpZXNGb3VuZCA9IF9maW5kUHJvcGVydGllcyhzZW1hbnRpY0tleVZhbHVlcywgYVByb3BlcnRpZXMpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogX3Byb3BlcnRpZXNGb3VuZC5zZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwLFxuXHRcdHByb3BlcnR5UGF0aDogX3Byb3BlcnRpZXNGb3VuZC5maWVsZEdyb3VwUHJvcGVydHlQYXRoXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIHdpdGggZHJhZnRJbmRpY2F0b3IgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlzXG4gKiBAcGFyYW0gaXNGaWVsZEdyb3VwQ29sdW1uXG4gKiBAcGFyYW0gZGF0YUZpZWxkR3JvdXBcbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4oXG5cdG5hbWU6IHN0cmluZyxcblx0c2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSxcblx0aXNGaWVsZEdyb3VwQ29sdW1uOiBib29sZWFuLFxuXHRkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGxcbik6IFBhcnRpYWw8e1xuXHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IHN0cmluZztcblx0ZmllbGRHcm91cE5hbWU6IHN0cmluZztcblx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0aGFzRHJhZnRJbmRpY2F0b3I6IGJvb2xlYW47XG59PiB7XG5cdGlmICghc2VtYW50aWNLZXlzKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGNvbnN0IHNlbWFudGljS2V5ID0gX2ZpbmRTZW1hbnRpY0tleVZhbHVlcyhzZW1hbnRpY0tleXMsIG5hbWUpO1xuXHRjb25zdCBzZW1hbnRpY0tleUluRmllbGRHcm91cCA9IF9maW5kU2VtYW50aWNLZXlWYWx1ZXNJbkZpZWxkR3JvdXAoZGF0YUZpZWxkR3JvdXAsIHNlbWFudGljS2V5LnZhbHVlcyk7XG5cdGlmIChzZW1hbnRpY0tleUluRmllbGRHcm91cC5zZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwKSB7XG5cdFx0Ly8gU2VtYW50aWMgS2V5IGhhcyBhIHByb3BlcnR5IGluIGEgRmllbGRHcm91cFxuXHRcdHJldHVybiB7XG5cdFx0XHQvL1RPRE8gd2Ugc2hvdWxkIHJhdGhlciBzdG9yZSBoYXNTZW1hbnRpY0tleUluRmllbGRHcm91cFxuXHRcdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBzZW1hbnRpY0tleUluRmllbGRHcm91cC5wcm9wZXJ0eVBhdGgsXG5cdFx0XHRmaWVsZEdyb3VwTmFtZTogbmFtZSxcblx0XHRcdHNob3dFcnJvck9iamVjdFN0YXR1czogY29tcGlsZUV4cHJlc3Npb24oZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShuYW1lLCB0cnVlKSlcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHNlbWFudGljS2V5LnNlbWFudGljS2V5Rm91bmQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aGFzRHJhZnRJbmRpY2F0b3I6IHRydWUsXG5cdFx0XHRzaG93RXJyb3JPYmplY3RTdGF0dXM6IGNvbXBpbGVFeHByZXNzaW9uKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkobmFtZSwgZmFsc2UpKVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBfZ2V0SW1wTnVtYmVyKGRhdGFGaWVsZDogRGF0YUZpZWxkVHlwZXMpOiBudW1iZXIge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9IaWdoXCIpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL01lZGl1bVwiKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9Mb3dcIikpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXHRyZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkOiBEYXRhRmllbGRUeXBlcyk6IEltcG9ydGFuY2Uge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXHRyZXR1cm4gaW1wb3J0YW5jZSA/IChpbXBvcnRhbmNlLnNwbGl0KFwiL1wiKVsxXSBhcyBJbXBvcnRhbmNlKSA6IEltcG9ydGFuY2UuTm9uZTtcbn1cblxuZnVuY3Rpb24gX2dldE1heEltcG9ydGFuY2UoZmllbGRzOiBEYXRhRmllbGRUeXBlc1tdKTogSW1wb3J0YW5jZSB7XG5cdGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcblx0XHRsZXQgbWF4SW1wTnVtYmVyID0gLTE7XG5cdFx0bGV0IGltcE51bWJlciA9IC0xO1xuXHRcdGxldCBEYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZTtcblx0XHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuXHRcdFx0aW1wTnVtYmVyID0gX2dldEltcE51bWJlcihmaWVsZCk7XG5cdFx0XHRpZiAoaW1wTnVtYmVyID4gbWF4SW1wTnVtYmVyKSB7XG5cdFx0XHRcdG1heEltcE51bWJlciA9IGltcE51bWJlcjtcblx0XHRcdFx0RGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2UgPSBmaWVsZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKERhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlIGFzIERhdGFGaWVsZFR5cGVzKTtcblx0fVxuXHRyZXR1cm4gSW1wb3J0YW5jZS5Ob25lO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGltcG9ydGFuY2UgdmFsdWUgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEBwYXJhbSBzZW1hbnRpY0tleXNcbiAqIEByZXR1cm5zIFRoZSBpbXBvcnRhbmNlIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbXBvcnRhbmNlKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IHVuZGVmaW5lZCwgc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSk6IEltcG9ydGFuY2UgfCB1bmRlZmluZWQge1xuXHQvL0V2YWx1YXRlIGRlZmF1bHQgSW1wb3J0YW5jZSBpcyBub3Qgc2V0IGV4cGxpY2l0bHlcblx0bGV0IGZpZWxkc1dpdGhJbXBvcnRhbmNlLFxuXHRcdG1hcFNlbWFudGljS2V5czogc3RyaW5nW10gPSBbXTtcblx0Ly9DaGVjayBpZiBzZW1hbnRpY0tleXMgYXJlIGRlZmluZWQgYXQgdGhlIEVudGl0eVNldCBsZXZlbFxuXHRpZiAoc2VtYW50aWNLZXlzICYmIHNlbWFudGljS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0bWFwU2VtYW50aWNLZXlzID0gc2VtYW50aWNLZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRyZXR1cm4ga2V5LnZhbHVlO1xuXHRcdH0pO1xuXHR9XG5cdGlmICghZGF0YUZpZWxkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSkge1xuXHRcdGNvbnN0IGRhdGFGaWVsZFRhcmdldCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPEZpZWxkR3JvdXA+KGRhdGFGaWVsZFRhcmdldCwgVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpKSB7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YSA9IGRhdGFGaWVsZFRhcmdldC5EYXRhO1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cEhhc1NlbWFudGljS2V5ID1cblx0XHRcdFx0ZmllbGRHcm91cERhdGEgJiZcblx0XHRcdFx0ZmllbGRHcm91cERhdGEuc29tZShmdW5jdGlvbiAoZmllbGRHcm91cERhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZmllbGRHcm91cERhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGggJiZcblx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGQuJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0XHRcdG1hcFNlbWFudGljS2V5cy5pbmNsdWRlcygoZmllbGRHcm91cERhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGgpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHQvL0lmIGEgRmllbGRHcm91cCBjb250YWlucyBhIHNlbWFudGljS2V5LCBpbXBvcnRhbmNlIHNldCB0byBIaWdoXG5cdFx0XHRpZiAoZmllbGRHcm91cEhhc1NlbWFudGljS2V5KSB7XG5cdFx0XHRcdHJldHVybiBJbXBvcnRhbmNlLkhpZ2g7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL0lmIHRoZSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIGhhcyBhbiBJbXBvcnRhbmNlIHdlIHRha2UgaXRcblx0XHRcdFx0aWYgKGRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKGRhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBlbHNlIHRoZSBoaWdoZXN0IGltcG9ydGFuY2UgKGlmIGFueSkgaXMgcmV0dXJuZWRcblx0XHRcdFx0ZmllbGRzV2l0aEltcG9ydGFuY2UgPVxuXHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhICYmXG5cdFx0XHRcdFx0ZmllbGRHcm91cERhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaXRlbT8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gX2dldE1heEltcG9ydGFuY2UoZmllbGRzV2l0aEltcG9ydGFuY2UgYXMgRGF0YUZpZWxkVHlwZXNbXSk7XG5cdFx0XHR9XG5cdFx0XHQvL0lmIHRoZSBjdXJyZW50IGZpZWxkIGlzIGEgc2VtYW50aWNLZXksIGltcG9ydGFuY2Ugc2V0IHRvIEhpZ2hcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcykuVmFsdWUgJiZcblx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LnBhdGggJiZcblx0XHRtYXBTZW1hbnRpY0tleXMuaW5jbHVkZXMoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcykuVmFsdWUucGF0aClcblx0XHQ/IEltcG9ydGFuY2UuSGlnaFxuXHRcdDogX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBkaXNwbGF5aW5nIG9mIHRoZSBjb2x1bW4gaXMgc3VwcG9ydGVkIGZvciBhbiBpbnNpZ2h0cyBjYXJkLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEBwYXJhbSBzTGFiZWxcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gaXNNdWx0aVZhbHVlXG4gKiBAcmV0dXJucyBUcnVlIGlmIGRpc3BsYXlpbmcgb2YgdGhlIGNvbHVtbiBpcyBzdXBwb3J0ZWQgZm9yIGFuIGluc2lnaHRzIGNhcmQuXG4gKi9cbmNvbnN0IGNoZWNrSWZDb2x1bW5Jc1N1cHBvcnRlZEZvckluc2lnaHRzID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdHNMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc011bHRpVmFsdWU6IGJvb2xlYW5cbikge1xuXHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKTtcblxuXHRpZiAoc0xhYmVsICYmIHNMYWJlbCAhPT0gXCJcIiAmJiBhbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCIpICE9PSAtMSAmJiBpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkpIHtcblx0XHQvLyBpbmNsdWRlIG9ubHkgdGhvc2UgY29sdW1ucyB0aGF0IGFyZSBhbm5vdGF0ZWQgYXMgcGFydCBvZiB0aGUgdGFibGUgKHNraXAgZW50aXR5IHByb3BzKVxuXHRcdGNvbnN0IGlzSW1hZ2VDb2x1bW4gPSBkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQgPyBpc0ltYWdlVVJMKGRhdGFGaWVsZC5WYWx1ZS4kdGFyZ2V0KSA6IGZhbHNlO1xuXHRcdHJldHVybiAhaXNNdWx0aVZhbHVlICYmICFpc0ltYWdlQ29sdW1uO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGxpbmUgaXRlbXMgZnJvbSBtZXRhZGF0YSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgd2l0aCB0aGVpciBhbm5vdGF0aW9uc1xuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSB2aXN1YWxpemF0aW9uIHBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGlzSW5zaWdodHNFbmFibGVkXG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zID0gZnVuY3Rpb24gKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0luc2lnaHRzRW5hYmxlZD86IGJvb2xlYW5cbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXSxcblx0XHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5PiA9IHt9LFxuXHRcdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10gPSBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSksXG5cdFx0dGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0dGFibGVUeXBlOiBUYWJsZVR5cGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnR5cGUgfHwgXCJSZXNwb25zaXZlVGFibGVcIjtcblx0Y29uc3QgdGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBzZW1hbnRpY0tleXM6IFNlbWFudGljS2V5ID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkNvbW1vblwiLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNLZXksIFtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRdKVswXTtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdGNvbnN0IHRhYmxlQ29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpXG5cdFx0KTtcblxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChsaW5lSXRlbSkgPT4ge1xuXHRcdFx0Ly8gVE9ETzogdmFyaWFibGUgbmFtZSBzaG91bGQgYmUgZGF0YWZpZWxkIGFuZCBub3QgbGluZUl0ZW1cblx0XHRcdGlmICghX2lzVmFsaWRDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGxldCBleHBvcnRTZXR0aW5nczogY29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsID0gbnVsbDtcblx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0XHRpc0RhdGFGaWVsZFR5cGVzKGxpbmVJdGVtKSAmJiBsaW5lSXRlbS5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0PyBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgbGluZUl0ZW0pXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBfZ2V0UmVsYXRpdmVQYXRoKGxpbmVJdGVtKTtcblx0XHRcdC8vIERldGVybWluZSBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjb25zdW1lZCBieSB0aGlzIExpbmVJdGVtLlxuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvOiBDb21wbGV4UHJvcGVydHlJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkobGluZUl0ZW0sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlVHlwZSk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSByZWxhdGl2ZVBhdGggPyBfc2xpY2VBdFNsYXNoKHJlbGF0aXZlUGF0aCwgdHJ1ZSwgZmFsc2UpIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSByZWxhdGl2ZVBhdGg7XG5cdFx0XHRjb25zdCBzTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldExhYmVsKGxpbmVJdGVtLCBpc0dyb3VwKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3QgaXNGaWVsZEdyb3VwQ29sdW1uOiBib29sZWFuID0gZ3JvdXBQYXRoID8gZ3JvdXBQYXRoLmluZGV4T2YoYEAke1VJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXB9YCkgPiAtMSA6IGZhbHNlO1xuXHRcdFx0Y29uc3Qgc2hvd0RhdGFGaWVsZHNMYWJlbDogYm9vbGVhbiA9IGlzRmllbGRHcm91cENvbHVtblxuXHRcdFx0XHQ/IF9nZXRTaG93RGF0YUZpZWxkc0xhYmVsKG5hbWUsIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0Y29uc3QgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldERhdGFGaWVsZERhdGFUeXBlKGxpbmVJdGVtKTtcblx0XHRcdGNvbnN0IHNEYXRlSW5wdXRGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGRhdGFUeXBlID09PSBcIkVkbS5EYXRlXCIgPyBcIllZWVktTU0tRERcIiA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSBfZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZShcblx0XHRcdFx0Z2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uKG5hbWUsIHNlbWFudGljS2V5cywgaXNGaWVsZEdyb3VwQ29sdW1uLCBsaW5lSXRlbSlcblx0XHRcdCk7XG5cdFx0XHRsZXQgZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHRcdGlmIChcblx0XHRcdFx0bGluZUl0ZW0uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0bGluZUl0ZW0uVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGVcblx0XHRcdCkge1xuXHRcdFx0XHRmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMgPSBfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zKGxpbmVJdGVtKTtcblx0XHRcdH1cblx0XHRcdGlmIChfaXNFeHBvcnRhYmxlQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHQvL2V4Y2x1ZGUgdGhlIHR5cGVzIGxpc3RlZCBhYm92ZSBmb3IgdGhlIEV4cG9ydCAoZ2VuZXJhdGVzIGVycm9yIG9uIEV4cG9ydCBhcyBQREYpXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzID0ge1xuXHRcdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NXcmFwcGluZyxcblx0XHRcdFx0XHR0eXBlOiBkYXRhVHlwZSA/IF9nZXRFeHBvcnREYXRhVHlwZShkYXRhVHlwZSwgcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMSkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0aW5wdXRGb3JtYXQ6IHNEYXRlSW5wdXRGb3JtYXQsXG5cdFx0XHRcdFx0ZGVsaW1pdGVyOiBkYXRhVHlwZSA9PT0gXCJFZG0uSW50NjRcIlxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdE5hbWUpIHtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdE5hbWU7XG5cdFx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiQ3VycmVuY3lcIjsgLy8gRm9yY2UgdG8gYSBjdXJyZW5jeSBiZWNhdXNlIHRoZXJlJ3MgYSB1bml0UHJvcGVydHkgKG90aGVyd2lzZSB0aGUgdmFsdWUgaXNuJ3QgcHJvcGVybHkgZm9ybWF0dGVkIHdoZW4gZXhwb3J0ZWQpXG5cdFx0XHRcdH0gZWxzZSBpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXRTdHJpbmcpIHtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy51bml0ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXRTdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZU5hbWUpIHtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy50aW1lem9uZVByb3BlcnR5ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lTmFtZTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVTdHJpbmcpIHtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy50aW1lem9uZSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZVN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcHJvcGVydHlUeXBlQ29uZmlnOiBQcm9wZXJ0eVR5cGVDb25maWcgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoZGF0YVR5cGUpIHtcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhsaW5lSXRlbSwgZGF0YVR5cGUpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgdHlwZUNvbmZpZzogUHJvcGVydHlUeXBlQ29uZmlnID0ge1xuXHRcdFx0XHRjbGFzc05hbWU6IGRhdGFUeXBlIGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGUsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IHtcblx0XHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdC4uLnByb3BlcnR5VHlwZUNvbmZpZz8uZm9ybWF0T3B0aW9uc1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb25zdHJhaW50czogeyAuLi5wcm9wZXJ0eVR5cGVDb25maWc/LmNvbnN0cmFpbnRzIH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCB2aXN1YWxTZXR0aW5nczogVmlzdWFsU2V0dGluZ3MgPSB7fTtcblx0XHRcdGlmICghZGF0YVR5cGUgfHwgIXR5cGVDb25maWcpIHtcblx0XHRcdFx0Ly8gZm9yIGNoYXJ0c1xuXHRcdFx0XHR2aXN1YWxTZXR0aW5ncy53aWR0aENhbGN1bGF0aW9uID0gbnVsbDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGlzTXVsdGlWYWx1ZSA9IF9pc0NvbHVtbk11bHRpVmFsdWVkKGxpbmVJdGVtLCB0YWJsZUNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0Y29uc3Qgc29ydGFibGUgPSAhaXNNdWx0aVZhbHVlICYmIF9pc0NvbHVtblNvcnRhYmxlKGxpbmVJdGVtLCByZWxhdGl2ZVBhdGgsIG5vblNvcnRhYmxlQ29sdW1ucyk7XG5cdFx0XHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IGVuYWJsZUFkZENhcmRUb0luc2lnaHRzID0gdGFibGVNYW5pZmVzdENvbmZpZy50YWJsZVNldHRpbmdzPy5lbmFibGVBZGRDYXJkVG9JbnNpZ2h0cyA/PyB0cnVlO1xuXHRcdFx0Y29uc3QgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChsaW5lSXRlbSksXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0bGFiZWw6IHNMYWJlbCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IGdldExhYmVsKGxpbmVJdGVtKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0Z3JvdXA6IGlzR3JvdXAgPyBncm91cFBhdGggOiB1bmRlZmluZWQsXG5cdFx0XHRcdEZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9uczogZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGxpbmVJdGVtLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihsaW5lSXRlbSkgPyBcIkhpZGRlblwiIDogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdG5hbWU6IG5hbWUsXG5cdFx0XHRcdHNob3dEYXRhRmllbGRzTGFiZWw6IHNob3dEYXRhRmllbGRzTGFiZWwsXG5cdFx0XHRcdHJlbGF0aXZlUGF0aDogcmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRzb3J0YWJsZTogc29ydGFibGUsXG5cdFx0XHRcdHByb3BlcnR5SW5mb3M6IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmxlbmd0aCA/IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvczogYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdHdpZHRoOiAobGluZUl0ZW0uYW5ub3RhdGlvbnM/LkhUTUw1Py5Dc3NEZWZhdWx0cz8ud2lkdGg/LnZhbHVlT2YoKSBhcyBzdHJpbmcpIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0aW1wb3J0YW5jZTogZ2V0SW1wb3J0YW5jZShsaW5lSXRlbSBhcyBEYXRhRmllbGRUeXBlcywgc2VtYW50aWNLZXlzKSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWUsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IGZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0dHlwZUNvbmZpZzogdHlwZUNvbmZpZyxcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3M6IHZpc3VhbFNldHRpbmdzLFxuXHRcdFx0XHR0aW1lem9uZVRleHQ6IGV4cG9ydFNldHRpbmdzPy50aW1lem9uZSxcblx0XHRcdFx0aXNQYXJ0T2ZMaW5lSXRlbTogdHJ1ZVxuXHRcdFx0fTtcblx0XHRcdGNvbHVtbi5pc0luc2lnaHRzU3VwcG9ydGVkID1cblx0XHRcdFx0ZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHMgPT09IHRydWUgJiZcblx0XHRcdFx0aXNJbnNpZ2h0c0VuYWJsZWQgPT09IHRydWUgJiZcblx0XHRcdFx0Y2hlY2tJZkNvbHVtbklzU3VwcG9ydGVkRm9ySW5zaWdodHMobGluZUl0ZW0sIHNMYWJlbCwgY29udmVydGVyQ29udGV4dCwgaXNNdWx0aVZhbHVlKTtcblx0XHRcdGNvbnN0IHNUb29sdGlwID0gX2dldFRvb2x0aXAobGluZUl0ZW0pO1xuXHRcdFx0aWYgKHNUb29sdGlwKSB7XG5cdFx0XHRcdGNvbHVtbi50b29sdGlwID0gc1Rvb2x0aXA7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5wdXNoKC4uLnJlbGF0ZWRQcm9wZXJ0aWVzSW5mby50ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnREYXRhUG9pbnRUYXJnZXRWYWx1ZSAmJiBjb2x1bW4uZXhwb3J0U2V0dGluZ3MpIHtcblx0XHRcdFx0Y29sdW1uLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlO1xuXHRcdFx0XHRjb2x1bW4uZXhwb3J0U2V0dGluZ3MudHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0XHR9XG5cblx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2goY29sdW1uKTtcblxuXHRcdFx0Ly8gQ29sbGVjdCBpbmZvcm1hdGlvbiBvZiByZWxhdGVkIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2goKHJlbGF0ZWRQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW3JlbGF0ZWRQcm9wZXJ0eU5hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbcmVsYXRlZFByb3BlcnR5TmFtZV07XG5cblx0XHRcdFx0Ly8gSW4gY2FzZSBvZiBhIG11bHRpLXZhbHVlLCByZWxhdGVkIHByb3BlcnRpZXMgY2Fubm90IGJlIHNvcnRlZCBhcyB3ZSBnbyB0aHJvdWdoIGEgMS1uIHJlbGF0aW9uXG5cdFx0XHRcdGlmIChpc011bHRpVmFsdWUpIHtcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMucHVzaChyZWxhdGVkUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIENyZWF0ZSBjb2x1bW5zIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaWRlbnRpZmllZCBmb3IgQUxQIHVzZSBjYXNlLlxuXHRcdFx0YWRkaXRpb25hbFByb3BlcnR5TmFtZXMuZm9yRWFjaCgoYWRkaXRpb25hbFByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFthZGRpdGlvbmFsUHJvcGVydHlOYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1thZGRpdGlvbmFsUHJvcGVydHlOYW1lXTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gR2V0IGNvbHVtbnMgZnJvbSB0aGUgUHJvcGVydGllcyBvZiBFbnRpdHlUeXBlXG5cdHJldHVybiBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVUeXBlLFxuXHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHQpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgY2hlY2tzIGFnYWluc3QgZXhpc3RpbmcgcHJvcGVydGllcyBhbHJlYWR5IGFkZGVkIGJ5IGFubm90YXRpb25zLlxuICogSWYgYSBub3QgeWV0IHN0b3JlZCBwcm9wZXJ0eSBpcyBmb3VuZCBpdCBhZGRzIGl0IGZvciBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgb25seSB0byB0aGUgYW5ub3RhdGlvbkNvbHVtbnMuXG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBfZ2V0UHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRsZXQgbWF0Y2hlZFByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdG1hdGNoZWRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5UGF0aCkge1xuXHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGFubm90YXRpb25Db2x1bW5zLmZpbmQoZnVuY3Rpb24gKGFubm90YXRpb25Db2x1bW4pIHtcblx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwcm9wZXJ0eVBhdGggJiYgYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLm5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyhcblx0XHRcdFx0XHR7IFtwcm9wZXJ0eVBhdGhdOiBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCkgfSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0W11cblx0XHRcdFx0KTtcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaChyZWxhdGVkQ29sdW1uc1swXSk7XG5cdFx0XHRcdHJldHVybiByZWxhdGVkQ29sdW1uc1swXS5uYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuY29uc3QgX2FwcGVuZEN1c3RvbVRlbXBsYXRlID0gZnVuY3Rpb24gKHByb3BlcnRpZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0cmV0dXJuIHByb3BlcnRpZXNcblx0XHQubWFwKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpfX1gO1xuXHRcdH0pXG5cdFx0LmpvaW4oYCR7XCJcXG5cIn1gKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbnMgZnJvbSBtYW5pZmVzdC5cbiAqXG4gKiBUaGVzZSBtYXkgYmUgY3VzdG9tIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QsIHNsb3QgY29sdW1ucyBjb21pbmcgdGhyb3VnaFxuICogYSBidWlsZGluZyBibG9jaywgb3IgYW5ub3RhdGlvbiBjb2x1bW5zIHRvIG92ZXJ3cml0ZSBhbm5vdGF0aW9uLWJhc2VkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGNvbHVtbnNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgY29sdW1ucyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBnZXRDb2x1bW5zRnJvbU1hbmlmZXN0ID0gZnVuY3Rpb24gKFxuXHRjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZT4sXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RDb2x1bW4+IHtcblx0Y29uc3QgaW50ZXJuYWxDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdENvbHVtbj4gPSB7fTtcblxuXHRmdW5jdGlvbiBpc0Fubm90YXRpb25Db2x1bW4oXG5cdFx0Y29sdW1uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSxcblx0XHRrZXk6IHN0cmluZ1xuXHQpOiBjb2x1bW4gaXMgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUge1xuXHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKChhbm5vdGF0aW9uQ29sdW1uKSA9PiBhbm5vdGF0aW9uQ29sdW1uLmtleSA9PT0ga2V5KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzU2xvdENvbHVtbihtYW5pZmVzdENvbHVtbjogQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uKTogbWFuaWZlc3RDb2x1bW4gaXMgRnJhZ21lbnREZWZpbmVkU2xvdENvbHVtbiB7XG5cdFx0cmV0dXJuIG1hbmlmZXN0Q29sdW1uLnR5cGUgPT09IENvbHVtblR5cGUuU2xvdDtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzQ3VzdG9tQ29sdW1uKG1hbmlmZXN0Q29sdW1uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4pOiBtYW5pZmVzdENvbHVtbiBpcyBNYW5pZmVzdERlZmluZWRDdXN0b21Db2x1bW4ge1xuXHRcdHJldHVybiBtYW5pZmVzdENvbHVtbi50eXBlID09PSB1bmRlZmluZWQgJiYgISFtYW5pZmVzdENvbHVtbi50ZW1wbGF0ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIF91cGRhdGVMaW5rZWRQcm9wZXJ0aWVzT25DdXN0b21Db2x1bW5zKHByb3BlcnR5SW5mb3M6IHN0cmluZ1tdLCBhbm5vdGF0aW9uVGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSkge1xuXHRcdGNvbnN0IG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10gPSBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSk7XG5cdFx0cHJvcGVydHlJbmZvcy5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0YW5ub3RhdGlvblRhYmxlQ29sdW1ucy5mb3JFYWNoKChwcm9wKSA9PiB7XG5cdFx0XHRcdGlmIChwcm9wLm5hbWUgPT09IHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0cHJvcC5zb3J0YWJsZSA9IG5vblNvcnRhYmxlQ29sdW1ucy5pbmRleE9mKHByb3BlcnR5LnJlcGxhY2UoXCJQcm9wZXJ0eTo6XCIsIFwiXCIpKSA9PT0gLTE7XG5cdFx0XHRcdFx0cHJvcC5pc0dyb3VwYWJsZSA9IHByb3Auc29ydGFibGU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gY29sdW1ucykge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29sdW1uID0gY29sdW1uc1trZXldO1xuXHRcdEtleUhlbHBlci52YWxpZGF0ZUtleShrZXkpO1xuXG5cdFx0Ly8gQmFzZVRhYmxlQ29sdW1uXG5cdFx0Y29uc3QgYmFzZVRhYmxlQ29sdW1uID0ge1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHR3aWR0aDogbWFuaWZlc3RDb2x1bW4ud2lkdGggfHwgdW5kZWZpbmVkLFxuXHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0YW5jaG9yOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbj8uYW5jaG9yLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBQbGFjZW1lbnQuQWZ0ZXIgOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbi5wbGFjZW1lbnRcblx0XHRcdH0sXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dClcblx0XHR9O1xuXG5cdFx0aWYgKGlzQW5ub3RhdGlvbkNvbHVtbihtYW5pZmVzdENvbHVtbiwga2V5KSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydGllc1RvT3ZlcndyaXRlQW5ub3RhdGlvbkNvbHVtbjogQ3VzdG9tRWxlbWVudDxBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZT4gPSB7XG5cdFx0XHRcdC4uLmJhc2VUYWJsZUNvbHVtbixcblx0XHRcdFx0aW1wb3J0YW5jZTogbWFuaWZlc3RDb2x1bW4/LmltcG9ydGFuY2UsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogbWFuaWZlc3RDb2x1bW4/Lmhvcml6b250YWxBbGlnbixcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBtYW5pZmVzdENvbHVtbj8uYXZhaWxhYmlsaXR5LFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiBpc0Fubm90YXRpb25Db2x1bW4obWFuaWZlc3RDb2x1bW4sIGtleSlcblx0XHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHRcdDogaXNBY3Rpb25OYXZpZ2FibGUobWFuaWZlc3RDb2x1bW4sIG5hdmlnYXRpb25TZXR0aW5ncywgdHJ1ZSksXG5cdFx0XHRcdHNldHRpbmdzOiBtYW5pZmVzdENvbHVtbi5zZXR0aW5ncyxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUobWFuaWZlc3RDb2x1bW4uZm9ybWF0T3B0aW9ucylcblx0XHRcdH07XG5cdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IHByb3BlcnRpZXNUb092ZXJ3cml0ZUFubm90YXRpb25Db2x1bW47XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5SW5mb3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gX2dldFByb3BlcnR5TmFtZXMoXG5cdFx0XHRcdG1hbmlmZXN0Q29sdW1uLnByb3BlcnRpZXMsXG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRlbnRpdHlUeXBlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgYmFzZU1hbmlmZXN0Q29sdW1uID0ge1xuXHRcdFx0XHQuLi5iYXNlVGFibGVDb2x1bW4sXG5cdFx0XHRcdGhlYWRlcjogbWFuaWZlc3RDb2x1bW4uaGVhZGVyLFxuXHRcdFx0XHRpbXBvcnRhbmNlOiBtYW5pZmVzdENvbHVtbj8uaW1wb3J0YW5jZSB8fCBJbXBvcnRhbmNlLk5vbmUsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogbWFuaWZlc3RDb2x1bW4/Lmhvcml6b250YWxBbGlnbiB8fCBIb3Jpem9udGFsQWxpZ24uQmVnaW4sXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogbWFuaWZlc3RDb2x1bW4/LmF2YWlsYWJpbGl0eSB8fCBcIkRlZmF1bHRcIixcblx0XHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0Q29sdW1uLnRlbXBsYXRlLFxuXHRcdFx0XHRwcm9wZXJ0eUluZm9zOiBwcm9wZXJ0eUluZm9zLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogcHJvcGVydHlJbmZvc1xuXHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZTogX2FwcGVuZEN1c3RvbVRlbXBsYXRlKHByb3BlcnR5SW5mb3MpLFxuXHRcdFx0XHRcdFx0XHR3cmFwOiAhIShwcm9wZXJ0eUluZm9zLmxlbmd0aCA+IDEpXG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRpZDogYEN1c3RvbUNvbHVtbjo6JHtrZXl9YCxcblx0XHRcdFx0bmFtZTogYEN1c3RvbUNvbHVtbjo6JHtrZXl9YCxcblx0XHRcdFx0Ly9OZWVkZWQgZm9yIE1EQzpcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogeyB0ZXh0TGluZXNFZGl0OiA0IH0sXG5cdFx0XHRcdGlzR3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IGZhbHNlLFxuXHRcdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRcdHZpc3VhbFNldHRpbmdzOiB7IHdpZHRoQ2FsY3VsYXRpb246IG51bGwgfSxcblx0XHRcdFx0cHJvcGVydGllczogbWFuaWZlc3RDb2x1bW4ucHJvcGVydGllc1xuXHRcdFx0fTtcblx0XHRcdGlmIChwcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRcdF91cGRhdGVMaW5rZWRQcm9wZXJ0aWVzT25DdXN0b21Db2x1bW5zKHByb3BlcnR5SW5mb3MsIGFubm90YXRpb25Db2x1bW5zKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzU2xvdENvbHVtbihtYW5pZmVzdENvbHVtbikpIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tVGFibGVDb2x1bW46IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4gPSB7XG5cdFx0XHRcdFx0Li4uYmFzZU1hbmlmZXN0Q29sdW1uLFxuXHRcdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuU2xvdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IGN1c3RvbVRhYmxlQ29sdW1uO1xuXHRcdFx0fSBlbHNlIGlmIChpc0N1c3RvbUNvbHVtbihtYW5pZmVzdENvbHVtbikpIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tVGFibGVDb2x1bW46IEN1c3RvbUVsZW1lbnQ8Q3VzdG9tQmFzZWRUYWJsZUNvbHVtbj4gPSB7XG5cdFx0XHRcdFx0Li4uYmFzZU1hbmlmZXN0Q29sdW1uLFxuXHRcdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuRGVmYXVsdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IGN1c3RvbVRhYmxlQ29sdW1uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZSA9IGBUaGUgYW5ub3RhdGlvbiBjb2x1bW4gJyR7a2V5fScgcmVmZXJlbmNlZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IGZvdW5kYDtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0LmFkZElzc3VlKFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeS5NYW5pZmVzdCxcblx0XHRcdFx0XHRcdElzc3VlU2V2ZXJpdHkuTG93LFxuXHRcdFx0XHRcdFx0bWVzc2FnZSxcblx0XHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlLFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGU/LkFubm90YXRpb25Db2x1bW5zPy5JbnZhbGlkS2V5XG5cdFx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGludGVybmFsQ29sdW1ucztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQMTNuTW9kZShcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb25cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgYVBlcnNvbmFsaXphdGlvbjogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgaXNBbmFseXRpY2FsVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXHRjb25zdCBpc1Jlc3BvbnNpdmVUYWJsZSA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGlmICh0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gUGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0Y29uc3QgcGVyc29uYWxpemF0aW9uID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MucGVyc29uYWxpemF0aW9uO1xuXHRcdGlmIChwZXJzb25hbGl6YXRpb24gPT09IHRydWUpIHtcblx0XHRcdC8vIFRhYmxlIHBlcnNvbmFsaXphdGlvbiBmdWxseSBlbmFibGVkLlxuXHRcdFx0c3dpdGNoICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJBbmFseXRpY2FsVGFibGVcIjpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXAsQWdncmVnYXRlXCI7XG5cdFx0XHRcdGNhc2UgXCJSZXNwb25zaXZlVGFibGVcIjpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXBcIjtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gXCJTb3J0LENvbHVtbixGaWx0ZXJcIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwZXJzb25hbGl6YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdC8vIFNwZWNpZmljIHBlcnNvbmFsaXphdGlvbiBvcHRpb25zIGVuYWJsZWQgaW4gbWFuaWZlc3QuIFVzZSB0aGVtIGFzIGlzLlxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5zb3J0KSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmNvbHVtbikge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmZpbHRlcikge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmdyb3VwICYmIChpc0FuYWx5dGljYWxUYWJsZSB8fCBpc1Jlc3BvbnNpdmVUYWJsZSkpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLmFnZ3JlZ2F0ZSAmJiBpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5sZW5ndGggPiAwID8gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gTm8gcGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0XHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sIHx8IF9pc0ZpbHRlckJhckhpZGRlbihtYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQpKSB7XG5cdFx0XHRcdC8vIEZlYXR1cmUgcGFyaXR5IHdpdGggVjIuXG5cdFx0XHRcdC8vIEVuYWJsZSB0YWJsZSBmaWx0ZXJpbmcgYnkgZGVmYXVsdCBvbmx5IGluIGNhc2Ugb2YgQ29udHJvbCBsZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdFx0XHRcdC8vIE9yIHdoZW4gdGhlIExSIGZpbHRlciBiYXIgaXMgaGlkZGVuIHZpYSBtYW5pZmVzdCBzZXR0aW5nXG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblxuXHRcdGlmIChpc0FuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0fVxuXHRcdGlmIChpc1Jlc3BvbnNpdmVUYWJsZSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0fVxuXHRcdHJldHVybiBhUGVyc29uYWxpemF0aW9uLmpvaW4oXCIsXCIpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEJvb2xlYW4gdmFsdWUgc3VnZ2VzdGluZyBpZiBhIGZpbHRlciBiYXIgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcGFnZS5cbiAqXG4gKiBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuICogVW50aWwgdGhlbiwgaGlkaW5nIGZpbHRlciBiYXIgaXMgbm93IGFsbG93ZWQgaWYgYSBjaGFydCBpcyBiZWluZyB1c2VkIG9uIExSLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdFdyYXBwZXIgTWFuaWZlc3Qgc2V0dGluZ3MgZ2V0dGVyIGZvciB0aGUgcGFnZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgQm9vbGVhbiBzdWdnZXN0aW5nIGlmIGEgZmlsdGVyIGJhciBpcyBiZWluZyB1c2VkIG9uIHRoZSBwYWdlLlxuICovXG5mdW5jdGlvbiBfaXNGaWx0ZXJCYXJIaWRkZW4obWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHRtYW5pZmVzdFdyYXBwZXIuaXNGaWx0ZXJCYXJIaWRkZW4oKSAmJlxuXHRcdCFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSAmJlxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyB0aGUgc29ydCBjb25kaXRpb25zIGZvciB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIFRhYmxlIGNvbHVtbnMgcHJvY2Vzc2VkIGJ5IHRoZSBjb252ZXJ0ZXJcbiAqIEByZXR1cm5zIFNvcnQgY29uZGl0aW9ucyBmb3IgYSBwcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0U29ydENvbmRpdGlvbnMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Ly8gQ3VycmVudGx5IG5hdmlnYXRpb24gcHJvcGVydHkgaXMgbm90IHN1cHBvcnRlZCBhcyBzb3J0ZXJcblx0Y29uc3Qgbm9uU29ydGFibGVQcm9wZXJ0aWVzID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRsZXQgc29ydENvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Tb3J0T3JkZXIpIHtcblx0XHRjb25zdCBzb3J0ZXJzOiBTb3J0ZXJUeXBlW10gPSBbXTtcblx0XHRjb25zdCBjb25kaXRpb25zID0ge1xuXHRcdFx0c29ydGVyczogc29ydGVyc1xuXHRcdH07XG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uU29ydE9yZGVyLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgY29uZGl0aW9uUHJvcGVydHkgPSBjb25kaXRpb24uUHJvcGVydHk7XG5cdFx0XHRpZiAoY29uZGl0aW9uUHJvcGVydHkgJiYgbm9uU29ydGFibGVQcm9wZXJ0aWVzLmluZGV4T2YoY29uZGl0aW9uUHJvcGVydHkuJHRhcmdldD8ubmFtZSkgPT09IC0xKSB7XG5cdFx0XHRcdGNvbnN0IGluZm9OYW1lID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhbY29uZGl0aW9uUHJvcGVydHldLCBjb2x1bW5zKVswXTtcblx0XHRcdFx0aWYgKGluZm9OYW1lKSB7XG5cdFx0XHRcdFx0Y29uZGl0aW9ucy5zb3J0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0bmFtZTogaW5mb05hbWUsXG5cdFx0XHRcdFx0XHRkZXNjZW5kaW5nOiAhIWNvbmRpdGlvbi5EZXNjZW5kaW5nXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRzb3J0Q29uZGl0aW9ucyA9IGNvbmRpdGlvbnMuc29ydGVycy5sZW5ndGggPyBKU09OLnN0cmluZ2lmeShjb25kaXRpb25zKSA6IHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gc29ydENvbmRpdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGNvbnN0IGxldmVsID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uSW5pdGlhbEV4cGFuc2lvbkxldmVsPy52YWx1ZU9mKCk7XG5cblx0cmV0dXJuIHR5cGVvZiBsZXZlbCA9PT0gXCJudW1iZXJcIiA/IGxldmVsIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBwcm9wZXJ0eVBhdGggdG8gYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzLlxuICpcbiAqIEBwYXJhbSBwYXRocyB0aGUgYXJyYXkgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0gY29sdW1ucyB0aGUgYXJyYXkgb2YgcHJvcGVydHlJbmZvc1xuICogQHJldHVybnMgYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzXG4gKi9cblxuZnVuY3Rpb24gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhwYXRoczogUHJvcGVydHlQYXRoW10sIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IGluZm9OYW1lczogc3RyaW5nW10gPSBbXTtcblx0bGV0IHByb3BlcnR5SW5mbzogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIGFubm90YXRpb25Db2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0cGF0aHMuZm9yRWFjaCgoY3VycmVudFBhdGgpID0+IHtcblx0XHRpZiAoY3VycmVudFBhdGg/LnZhbHVlKSB7XG5cdFx0XHRwcm9wZXJ0eUluZm8gPSBjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdFx0cmV0dXJuICFhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgYW5ub3RhdGlvbkNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGN1cnJlbnRQYXRoPy52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpbmZvTmFtZXMucHVzaChwcm9wZXJ0eUluZm8ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gaW5mb05hbWVzO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGdyb3VwIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEdyb3VwQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHR0YWJsZVR5cGU6IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGdyb3VwQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lkdyb3VwQnkpIHtcblx0XHRsZXQgYUdyb3VwQnkgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Hcm91cEJ5O1xuXHRcdGlmICh0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRcdGFHcm91cEJ5ID0gYUdyb3VwQnkuc2xpY2UoMCwgMSk7XG5cdFx0fVxuXHRcdGNvbnN0IGFHcm91cExldmVscyA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoYUdyb3VwQnksIGNvbHVtbnMpLm1hcCgoaW5mb05hbWUpID0+IHtcblx0XHRcdHJldHVybiB7IG5hbWU6IGluZm9OYW1lIH07XG5cdFx0fSk7XG5cblx0XHRncm91cENvbmRpdGlvbnMgPSBhR3JvdXBMZXZlbHMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoeyBncm91cExldmVsczogYUdyb3VwTGV2ZWxzIH0pIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnM7XG59XG4vKipcbiAqIFVwZGF0ZXMgdGhlIGNvbHVtbidzIHByb3BlcnR5SW5mb3Mgb2YgYSBhbmFseXRpY2FsIHRhYmxlIGludGVncmF0aW5nIGFsbCBleHRlbnNpb25zIGFuZCBiaW5kaW5nLXJlbGV2YW50IHByb3BlcnR5IGluZm8gcGFydC5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqL1xuXG5mdW5jdGlvbiBfdXBkYXRlUHJvcGVydHlJbmZvc1dpdGhBZ2dyZWdhdGVzRGVmaW5pdGlvbnModGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24pIHtcblx0Y29uc3QgcmVsYXRlZEFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eU5hbWUgPSBPYmplY3Qua2V5cyh0YWJsZVZpc3VhbGl6YXRpb24uYWdncmVnYXRlcyEpLmZpbmQoKGFnZ3JlZ2F0ZSkgPT4gYWdncmVnYXRlID09PSBjb2x1bW4ubmFtZSk7XG5cdFx0aWYgKGFnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZSkge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uID0gdGFibGVWaXN1YWxpemF0aW9uLmFnZ3JlZ2F0ZXMhW2FnZ3JlZ2F0YWJsZVByb3BlcnR5TmFtZV07XG5cdFx0XHRjb2x1bW4uYWdncmVnYXRhYmxlID0gdHJ1ZTtcblx0XHRcdGNvbHVtbi5leHRlbnNpb24gPSB7XG5cdFx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZTogYWdncmVnYXRhYmxlUHJvcGVydHlEZWZpbml0aW9uLmRlZmF1bHRBZ2dyZWdhdGUgPz8ge31cblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmIChjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3M/Lmxlbmd0aCkge1xuXHRcdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zLmZvckVhY2goKGFkZGl0aW9uYWxQcm9wZXJ0eUluZm8pID0+IHtcblx0XHRcdFx0Ly8gQ3JlYXRlIHByb3BlcnR5SW5mbyBmb3IgZWFjaCBhZGRpdGlvbmFsIHByb3BlcnR5LlxuXHRcdFx0XHQvLyBUaGUgbmV3IHByb3BlcnR5ICduYW1lJyBoYXMgYmVlbiBwcmVmaXhlZCB3aXRoICdQcm9wZXJ0eV9UZWNobmljYWw6OicgZm9yIHVuaXF1ZW5lc3MgYW5kIGl0IGhhcyBiZWVuIG5hbWVkIHRlY2huaWNhbCBwcm9wZXJ0eSBhcyBpdCByZXF1aXJlcyBkZWRpY2F0ZWQgTURDIGF0dHJpYnV0ZXMgKHRlY2huaWNhbGx5R3JvdXBhYmxlIGFuZCB0ZWNobmljYWxseUFnZ3JlZ2F0YWJsZSkuXG5cdFx0XHRcdGNyZWF0ZVRlY2huaWNhbFByb3BlcnR5KGFkZGl0aW9uYWxQcm9wZXJ0eUluZm8sIHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zLCByZWxhdGVkQWRkaXRpb25hbFByb3BlcnR5TmFtZU1hcCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRjb2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmIChjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MpIHtcblx0XHRcdGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcyA9IGNvbHVtbi5hZGRpdGlvbmFsUHJvcGVydHlJbmZvcy5tYXAoXG5cdFx0XHRcdChwcm9wZXJ0eUluZm8pID0+IHJlbGF0ZWRBZGRpdGlvbmFsUHJvcGVydHlOYW1lTWFwW3Byb3BlcnR5SW5mb10gPz8gcHJvcGVydHlJbmZvXG5cdFx0XHQpO1xuXHRcdFx0Ly8gQWRkIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byB0aGUgY29tcGxleCBwcm9wZXJ0eSB1c2luZyB0aGUgaGlkZGVuIGFubm90YXRpb24uXG5cdFx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcyA9IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5jb25jYXQoY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGFnZ3JlZ2F0ZSBjb25kaXRpb25zLlxuICpcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGFnZ3JlZ2F0ZUNvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Ub3RhbCkge1xuXHRcdGNvbnN0IGFUb3RhbHMgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Ub3RhbDtcblx0XHRjb25zdCBhZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdFx0Y29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhVG90YWxzLCBjb2x1bW5zKS5mb3JFYWNoKChpbmZvTmFtZSkgPT4ge1xuXHRcdFx0YWdncmVnYXRlc1tpbmZvTmFtZV0gPSB7fTtcblx0XHR9KTtcblxuXHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBKU09OLnN0cmluZ2lmeShhZ2dyZWdhdGVzKTtcblx0fVxuXG5cdHJldHVybiBhZ2dyZWdhdGVDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUsXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIHtcblx0Ly8gTmVlZCB0byBnZXQgdGhlIHRhcmdldFxuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHR5cGVOYW1lUGx1cmFsID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lUGx1cmFsO1xuXHRjb25zdCB0aXRsZSA9IHR5cGVOYW1lUGx1cmFsICYmIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0eXBlTmFtZVBsdXJhbCkpO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhZ2VNYW5pZmVzdFNldHRpbmdzOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoYXNBYnNvbHV0ZVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMCxcblx0XHRwMTNuTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKSxcblx0XHRpZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBnZXRUYWJsZUlEKHZpc3VhbGl6YXRpb25QYXRoKSA6IGdldFRhYmxlSUQoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpLCBcIkxpbmVJdGVtXCIpO1xuXHRjb25zdCB0YXJnZXRDYXBhYmlsaXRpZXMgPSBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25UYXJnZXRQYXRoKTtcblx0Y29uc3QgY3JlYXRpb25CZWhhdmlvdXIgPSBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoXG5cdCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjcmVhdGlvbkJlaGF2aW91ci5tb2RlIGFzIENyZWF0aW9uTW9kZSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHQpO1xuXG5cdGNvbnN0IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgbWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgaXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQgPSBnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dCkpO1xuXG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGhhc0Fic29sdXRlUGF0aCxcblx0XHR0YXJnZXRDYXBhYmlsaXRpZXMsXG5cdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvblxuXHQpO1xuXHRsZXQgdGhyZXNob2xkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IDEwIDogMzA7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uTWF4SXRlbXMpIHtcblx0XHR0aHJlc2hvbGQgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5NYXhJdGVtcy52YWx1ZU9mKCkgYXMgbnVtYmVyO1xuXHR9XG5cblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGlzU2VhcmNoYWJsZSA9IGlzUGF0aFNlYXJjaGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnMgPSB7XG5cdFx0Y3JlYXRlOiBnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRkZWxldGU6IGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdHBhc3RlOiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkKSxcblx0XHRtYXNzRWRpdDogZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRpbnNpZ2h0czogZ2V0U3RhbmRhcmRBY3Rpb25JbnNpZ2h0cyhjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0Y3JlYXRpb25Sb3c6IGdldENyZWF0aW9uUm93KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpXG5cdH07XG5cblx0cmV0dXJuIHtcblx0XHRpZDogaWQsXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5U2V0ID8gZW50aXR5U2V0Lm5hbWUgOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdHJvdzogX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eShcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0UGF0aCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGVcblx0XHQpLFxuXHRcdHAxM25Nb2RlOiBwMTNuTW9kZSxcblx0XHRzdGFuZGFyZEFjdGlvbnM6IHtcblx0XHRcdGFjdGlvbnM6IHN0YW5kYXJkQWN0aW9ucyxcblx0XHRcdGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkOiBpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCxcblx0XHRcdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgoY29udmVydGVyQ29udGV4dClcblx0XHR9LFxuXHRcdGRpc3BsYXlNb2RlOiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3VyYXRpb24pLFxuXHRcdGNyZWF0ZTogY3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0c2VsZWN0aW9uTW9kZTogc2VsZWN0aW9uTW9kZSxcblx0XHRhdXRvQmluZE9uSW5pdDpcblx0XHRcdF9pc0ZpbHRlckJhckhpZGRlbihwYWdlTWFuaWZlc3RTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCkgfHxcblx0XHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlICYmXG5cdFx0XHRcdCEodmlld0NvbmZpZ3VyYXRpb24gJiYgcGFnZU1hbmlmZXN0U2V0dGluZ3MuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpKSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiICYmICFwMTNuTW9kZSA/IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lIDogdmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0dGhyZXNob2xkOiB0aHJlc2hvbGQsXG5cdFx0c29ydENvbmRpdGlvbnM6IGdldFNvcnRDb25kaXRpb25zKGNvbnZlcnRlckNvbnRleHQsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBjb2x1bW5zKSxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0c2VhcmNoYWJsZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSAhPT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhKGlzQ29uc3RhbnQoaXNTZWFyY2hhYmxlKSAmJiBpc1NlYXJjaGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpbml0aWFsRXhwYW5zaW9uTGV2ZWw6IGdldEluaXRpYWxFeHBhbnNpb25MZXZlbChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbilcblx0fTtcbn1cblxuZnVuY3Rpb24gX2dldEV4cG9ydERhdGFUeXBlKGRhdGFUeXBlOiBzdHJpbmcsIGlzQ29tcGxleFByb3BlcnR5ID0gZmFsc2UpOiBzdHJpbmcge1xuXHRsZXQgZXhwb3J0RGF0YVR5cGUgPSBcIlN0cmluZ1wiO1xuXHRpZiAoaXNDb21wbGV4UHJvcGVydHkpIHtcblx0XHRpZiAoZGF0YVR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlVGltZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gZXhwb3J0RGF0YVR5cGU7XG5cdH0gZWxzZSB7XG5cdFx0c3dpdGNoIChkYXRhVHlwZSkge1xuXHRcdFx0Y2FzZSBcIkVkbS5EZWNpbWFsXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkludDMyXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkludDY0XCI6XG5cdFx0XHRjYXNlIFwiRWRtLkRvdWJsZVwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJOdW1iZXJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVPZlRpbWVcIjpcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiRGF0ZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkRhdGVUaW1lXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIlRpbWVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkJvb2xlYW5cIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiU3RyaW5nXCI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBleHBvcnREYXRhVHlwZTtcbn1cblxuLyoqXG4gKiBTcGxpdCB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIGludG8gdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgcGF0aCBhbmQgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBzcGxpdCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGg6IHN0cmluZykge1xuXHRjb25zdCBbdGFyZ2V0TmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGhdID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXHRsZXQgbmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IHRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cigwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHJldHVybiB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oc2VsZWN0aW9uVmFyaWFudFBhdGgpO1xuXHRjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50VHlwZTtcblxuXHRpZiAoc2VsZWN0aW9uKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRzZWxlY3Rpb24uU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eU5hbWU/LnZhbHVlID8/IFwiXCI7XG5cdFx0XHRpZiAocHJvcGVydHlOYW1lcy5pbmRleE9mKHByb3BlcnR5UGF0aCkgPT09IC0xKSB7XG5cdFx0XHRcdHByb3BlcnR5TmFtZXMucHVzaChwcm9wZXJ0eVBhdGgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0ZXh0OiBzZWxlY3Rpb24/LlRleHQ/LnRvU3RyaW5nKCksXG5cdFx0XHRwcm9wZXJ0eU5hbWVzOiBwcm9wZXJ0eU5hbWVzXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzSXBob25lOiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0Ly8gSWYgZW5hYmxlRnVsbFNjcmVlbiBpcyBub3Qgc2V0LCB1c2UgYXMgZGVmYXVsdCB0cnVlIG9uIHBob25lIGFuZCBmYWxzZSBvdGhlcndpc2Vcblx0bGV0IGVuYWJsZUZ1bGxTY3JlZW4gPSB0YWJsZVNldHRpbmdzLmVuYWJsZUZ1bGxTY3JlZW4gPz8gaXNJcGhvbmU7XG5cdC8vIE1ha2Ugc3VyZSB0aGF0IGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCBvbiBMaXN0UmVwb3J0IGZvciBkZXNrdG9wIG9yIHRhYmxldFxuXHRpZiAoIWlzSXBob25lICYmIGVuYWJsZUZ1bGxTY3JlZW4gJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRlbmFibGVGdWxsU2NyZWVuID0gZmFsc2U7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuRlVMTFNDUkVFTk1PREVfTk9UX09OX0xJU1RSRVBPUlQpO1xuXHR9XG5cdHJldHVybiBlbmFibGVGdWxsU2NyZWVuO1xufVxuXG5mdW5jdGlvbiBfZ2V0TXVsdGlTZWxlY3RNb2RlKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IG11bHRpU2VsZWN0TW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAodGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRzd2l0Y2ggKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkpIHtcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0OlxuXHRcdGNhc2UgVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTpcblx0XHRcdG11bHRpU2VsZWN0TW9kZSA9ICF0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZTpcblx0XHRcdG11bHRpU2VsZWN0TW9kZSA9IHRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID09PSBmYWxzZSA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkudXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRcdG11bHRpU2VsZWN0TW9kZSA9ICF0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA/IFwiQ2xlYXJBbGxcIiA6IFwiRGVmYXVsdFwiO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXG5cdHJldHVybiBtdWx0aVNlbGVjdE1vZGU7XG59XG5cbmZ1bmN0aW9uIF9nZXRUYWJsZVR5cGUoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogVGFibGVUeXBlIHtcblx0bGV0IHRhYmxlVHlwZSA9IHRhYmxlU2V0dGluZ3M/LnR5cGUgfHwgXCJSZXNwb25zaXZlVGFibGVcIjtcblx0LyogIE5vdywgd2Uga2VlcCB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgbWFuaWZlc3QsIGV2ZW4gaWYgaXQgbGVhZHMgdG8gZXJyb3JzLlxuXHRcdFdlIG9ubHkgY2hhbmdlIGlmIHdlJ3JlIG5vdCBvbiBkZXNrdG9wIGZyb20gQW5hbHl0aWNhbC9UcmVlIHRvIFJlc3BvbnNpdmUuXG5cdCAqL1xuXHRpZiAoKHRhYmxlVHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIiB8fCB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpICYmICFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRGVza3RvcCgpKSB7XG5cdFx0dGFibGVUeXBlID0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0fVxuXHRyZXR1cm4gdGFibGVUeXBlO1xufVxuXG5mdW5jdGlvbiBfZ2V0VGFibGVNb2RlKFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0aXNUZW1wbGF0ZUxpc3RSZXBvcnQ6IGJvb2xlYW5cbik6IHsgcm93Q291bnRNb2RlPzogVGFibGVSb3dDb3VudE1vZGU7IHJvd0NvdW50PzogbnVtYmVyIH0ge1xuXHRpZiAodGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0aWYgKGlzVGVtcGxhdGVMaXN0UmVwb3J0KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyb3dDb3VudE1vZGU6IFwiQXV0b1wiLFxuXHRcdFx0XHRyb3dDb3VudDogM1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cm93Q291bnRNb2RlOiB0YWJsZVNldHRpbmdzLnJvd0NvdW50TW9kZSA/PyBcIkZpeGVkXCIsXG5cdFx0XHRcdHJvd0NvdW50OiB0YWJsZVNldHRpbmdzLnJvd0NvdW50ID8gdGFibGVTZXR0aW5ncy5yb3dDb3VudCA6IDVcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7fTtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXQoX3RhYmxlVHlwZTogVGFibGVUeXBlLCBfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3MuY29uZGVuc2VkVGFibGVMYXlvdXQgIT09IHVuZGVmaW5lZCAmJiBfdGFibGVUeXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiXG5cdFx0PyBfdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dFxuXHRcdDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIF9nZXRUYWJsZVNlbGVjdGlvbkxpbWl0KF90YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogbnVtYmVyIHtcblx0cmV0dXJuIF90YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA9PT0gdHJ1ZSB8fCBfdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCA9PT0gMCA/IDAgOiBfdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCB8fCAyMDA7XG59XG5cbmZ1bmN0aW9uIF9nZXRUYWJsZUlubGluZUNyZWF0aW9uUm93Q291bnQoX3RhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBudW1iZXIge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50ID8gX3RhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50IDogMjtcbn1cblxuZnVuY3Rpb24gX2dldEZpbHRlcnMoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHF1aWNrRmlsdGVyUGF0aHM6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9W10sXG5cdHF1aWNrU2VsZWN0aW9uVmFyaWFudDogdW5rbm93bixcblx0cGF0aDogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1cbikge1xuXHRpZiAocXVpY2tTZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0cXVpY2tGaWx0ZXJQYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGggfSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRxdWlja0ZpbHRlcnM6IHtcblx0XHRcdHNob3dDb3VudHM6IHRhYmxlU2V0dGluZ3M/LnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uc2hvd0NvdW50cyxcblx0XHRcdHBhdGhzOiBxdWlja0ZpbHRlclBhdGhzXG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZ2V0RW5hYmxlRXhwb3J0KFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbmFibGVQYXN0ZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdHJldHVybiB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydCAhPT0gdW5kZWZpbmVkXG5cdFx0PyB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydFxuXHRcdDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gXCJPYmplY3RQYWdlXCIgfHwgZW5hYmxlUGFzdGU7XG59XG5cbmZ1bmN0aW9uIF9nZXRGcm96ZW5Db2x1bW5Db3VudCh0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHRhYmxlU2V0dGluZ3MuZnJvemVuQ29sdW1uQ291bnQ7XG59XG5cbmZ1bmN0aW9uIF9nZXRGaWx0ZXJDb25maWd1cmF0aW9uKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pIHtcblx0aWYgKCFsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0Y29uc3QgcXVpY2tGaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSA9IFtdO1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pO1xuXHRsZXQgcXVpY2tTZWxlY3Rpb25WYXJpYW50O1xuXHRsZXQgZmlsdGVycztcblx0dGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5wYXRocz8uZm9yRWFjaCgocGF0aDogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0pID0+IHtcblx0XHRxdWlja1NlbGVjdGlvblZhcmlhbnQgPSB0YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdGZpbHRlcnMgPSBfZ2V0RmlsdGVycyh0YWJsZVNldHRpbmdzLCBxdWlja0ZpbHRlclBhdGhzLCBxdWlja1NlbGVjdGlvblZhcmlhbnQsIHBhdGgpO1xuXHR9KTtcblxuXHRsZXQgaGlkZVRhYmxlVGl0bGUgPSBmYWxzZTtcblx0aGlkZVRhYmxlVGl0bGUgPSAhIXRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5oaWRlVGFibGVUaXRsZTtcblx0cmV0dXJuIHtcblx0XHRmaWx0ZXJzOiBmaWx0ZXJzLFxuXHRcdGhlYWRlclZpc2libGU6ICEocXVpY2tTZWxlY3Rpb25WYXJpYW50ICYmIGhpZGVUYWJsZVRpdGxlKVxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHJlbGF0aXZlUGF0aCkubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChuYXZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzLnB1c2goZ2V0TGFiZWwobmF2UHJvcGVydHkpIHx8IG5hdlByb3BlcnR5Lm5hbWUpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHM7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjaGVja0NvbmRlbnNlZExheW91dCA9IGZhbHNlXG4pOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgX21hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0YWJsZVNldHRpbmdzID0gKHRhYmxlTWFuaWZlc3RTZXR0aW5ncyAmJiB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncykgfHwge307XG5cdGNvbnN0IGNyZWF0aW9uTW9kZSA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5uYW1lIHx8IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRjb25zdCBlbmFibGVBdXRvQ29sdW1uV2lkdGggPSAhX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCk7XG5cdGNvbnN0IGVuYWJsZVBhc3RlID1cblx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmVuYWJsZVBhc3RlIDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJPYmplY3RQYWdlXCI7IC8vIFBhc3RlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgZXhjZXB0ZWQgZm9yIE9QXG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCk7XG5cdGNvbnN0IGRhdGFTdGF0ZUluZGljYXRvckZpbHRlciA9IHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgPyBcIkFQSS5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJcIiA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCA9IGNoZWNrQ29uZGVuc2VkTGF5b3V0ICYmIF9tYW5pZmVzdFdyYXBwZXIuaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQoKTtcblx0Y29uc3Qgb0ZpbHRlckNvbmZpZ3VyYXRpb24gPSBfZ2V0RmlsdGVyQ29uZmlndXJhdGlvbih0YWJsZVNldHRpbmdzLCBsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCB0YWJsZVR5cGU6IFRhYmxlVHlwZSA9IF9nZXRUYWJsZVR5cGUodGFibGVTZXR0aW5ncywgYWdncmVnYXRpb25IZWxwZXIsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCB0YWJsZVJvd01vZGUgPSBfZ2V0VGFibGVNb2RlKHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncywgdGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCk7XG5cdGNvbnN0IGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0KHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncyk7XG5cdGNvbnN0IG9Db25maWd1cmF0aW9uID0ge1xuXHRcdC8vIElmIG5vIGNyZWF0ZUF0RW5kIGlzIHNwZWNpZmllZCBpdCB3aWxsIGJlIGZhbHNlIGZvciBJbmxpbmUgY3JlYXRlIGFuZCB0cnVlIG90aGVyd2lzZVxuXHRcdGNyZWF0ZUF0RW5kOlxuXHRcdFx0dGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmRcblx0XHRcdFx0OiBjcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmUsXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24sXG5cdFx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIsXG5cdFx0Ly8gaWYgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQsIGkuZS4gc2V0IHRvIGZhbHNlXG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogIWN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA/ICEhdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgOiBmYWxzZSxcblx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCxcblx0XHRlbmFibGVFeHBvcnQ6IF9nZXRFbmFibGVFeHBvcnQodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgZW5hYmxlUGFzdGUpLFxuXHRcdGZyb3plbkNvbHVtbkNvdW50OiBfZ2V0RnJvemVuQ29sdW1uQ291bnQodGFibGVTZXR0aW5ncyksXG5cdFx0ZW5hYmxlRnVsbFNjcmVlbjogX2dldEZ1bGxTY3JlZW5CYXNlZE9uRGV2aWNlKHRhYmxlU2V0dGluZ3MsIGNvbnZlcnRlckNvbnRleHQsIF9tYW5pZmVzdFdyYXBwZXIuaXNQaG9uZSgpKSxcblx0XHRlbmFibGVNYXNzRWRpdDogdGFibGVTZXR0aW5ncz8uZW5hYmxlTWFzc0VkaXQsXG5cdFx0ZW5hYmxlQWRkQ2FyZFRvSW5zaWdodHM6IHRhYmxlU2V0dGluZ3M/LmVuYWJsZUFkZENhcmRUb0luc2lnaHRzLFxuXHRcdGVuYWJsZVBhc3RlOiBlbmFibGVQYXN0ZSxcblx0XHRoZWFkZXJWaXNpYmxlOiB0cnVlLFxuXHRcdG11bHRpU2VsZWN0TW9kZTogX2dldE11bHRpU2VsZWN0TW9kZSh0YWJsZVNldHRpbmdzLCB0YWJsZVR5cGUsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHNlbGVjdGlvbkxpbWl0OiBfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdCh0YWJsZVNldHRpbmdzKSxcblx0XHRpbmxpbmVDcmVhdGlvblJvd0NvdW50OiBfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50KHRhYmxlU2V0dGluZ3MpLFxuXHRcdGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGU6IHRhYmxlU2V0dGluZ3M/LmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA/PyBmYWxzZSxcblx0XHRzaG93Um93Q291bnQ6ICF0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMgJiYgIV9tYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKT8uc2hvd0NvdW50cyxcblx0XHR0eXBlOiB0YWJsZVR5cGUsXG5cdFx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGNvbmRlbnNlZFRhYmxlTGF5b3V0ICYmIGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQsXG5cdFx0aXNDb21wYWN0VHlwZTogX21hbmlmZXN0V3JhcHBlci5pc0NvbXBhY3RUeXBlKClcblx0fTtcblxuXHRjb25zdCB0YWJsZUNvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7IC4uLm9Db25maWd1cmF0aW9uLCAuLi50YWJsZVJvd01vZGUsIC4uLm9GaWx0ZXJDb25maWd1cmF0aW9uIH07XG5cblx0aWYgKHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHRhYmxlQ29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIgPSB0YWJsZVNldHRpbmdzLmhpZXJhcmNoeVF1YWxpZmllcjtcblx0fVxuXG5cdHJldHVybiB0YWJsZUNvbmZpZ3VyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29uZmlnKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvcGVydHlUeXBlQ29uZmlnIHtcblx0bGV0IG9UYXJnZXRNYXBwaW5nO1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBpc1R5cGVEZWZpbml0aW9uKG9Qcm9wZXJ0eS50YXJnZXRUeXBlKVxuXHRcdFx0PyBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eS50YXJnZXRUeXBlLnVuZGVybHlpbmdUeXBlXVxuXHRcdFx0OiBFRE1fVFlQRV9NQVBQSU5HW29Qcm9wZXJ0eS50eXBlXTtcblx0fVxuXHRpZiAob1RhcmdldE1hcHBpbmcgPT09IHVuZGVmaW5lZCAmJiBkYXRhVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXTtcblx0fVxuXG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogUHJvcGVydHlUeXBlQ29uZmlnID0ge1xuXHRcdHR5cGU6IG9UYXJnZXRNYXBwaW5nPy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpICYmIG9UYXJnZXRNYXBwaW5nICE9PSB1bmRlZmluZWQpIHtcblx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMgPSB7XG5cdFx0XHRzY2FsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRTY2FsZSA/IG9Qcm9wZXJ0eS5zY2FsZSA6IHVuZGVmaW5lZCxcblx0XHRcdHByZWNpc2lvbjogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRQcmVjaXNpb24gPyBvUHJvcGVydHkucHJlY2lzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4TGVuZ3RoOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE1heExlbmd0aCA/IG9Qcm9wZXJ0eS5tYXhMZW5ndGggOiB1bmRlZmluZWQsXG5cdFx0XHRudWxsYWJsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiROdWxsYWJsZSA/IG9Qcm9wZXJ0eS5udWxsYWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1pbmltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdG1heGltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdGlzRGlnaXRTZXF1ZW5jZTpcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLklzRGlnaXRTZXF1ZW5jZX1gXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcblx0Z2V0VGFibGVBY3Rpb25zLFxuXHRnZXRUYWJsZUNvbHVtbnMsXG5cdGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSxcblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyxcblx0Y3JlYXRlVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uLFxuXHRnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24sXG5cdGdldFNlbGVjdGlvbk1vZGUsXG5cdGdldFJvd1N0YXR1c1Zpc2liaWxpdHksXG5cdGdldEltcG9ydGFuY2UsXG5cdGdldFAxM25Nb2RlLFxuXHRnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uLFxuXHRpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUsXG5cdHNwbGl0UGF0aCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24sXG5cdGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRnZXRUeXBlQ29uZmlnLFxuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JUeXBlXG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFpUUtBLFVBQVUsRUFNZjtFQUFBLFdBTktBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxVQUFVO0lBQVZBLFVBQVU7RUFBQSxHQUFWQSxVQUFVLEtBQVZBLFVBQVU7RUFrTWY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0MsZUFBZSxDQUM5QkMsa0JBQTRCLEVBQzVCQyxpQkFBeUIsRUFDekJDLGdCQUFrQyxFQUNsQ0Msa0JBQW9ELEVBQ25DO0lBQ2pCLE1BQU1DLGFBQWEsR0FBR0MseUJBQXlCLENBQUNMLGtCQUFrQixFQUFFQyxpQkFBaUIsRUFBRUMsZ0JBQWdCLENBQUM7SUFDeEcsTUFBTUksa0JBQWtCLEdBQUdGLGFBQWEsQ0FBQ0csWUFBWTtJQUNyRCxNQUFNQyxjQUFjLEdBQUdKLGFBQWEsQ0FBQ0ssa0JBQWtCO0lBQ3ZELE1BQU1DLGVBQWUsR0FBR0Msc0JBQXNCLENBQzdDVCxnQkFBZ0IsQ0FBQ1UsK0JBQStCLENBQUNYLGlCQUFpQixDQUFDLENBQUNZLE9BQU8sRUFDM0VYLGdCQUFnQixFQUNoQkksa0JBQWtCLEVBQ2xCSCxrQkFBa0IsRUFDbEIsSUFBSSxFQUNKSyxjQUFjLENBQ2Q7SUFDRCxNQUFNTSxxQkFBeUMsR0FBRztNQUNqREMsV0FBVyxFQUFFQyxZQUFZLENBQUNDLFNBQVM7TUFDbkNDLGNBQWMsRUFBRUYsWUFBWSxDQUFDQyxTQUFTO01BQ3RDRSxnQkFBZ0IsRUFBRUgsWUFBWSxD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
|