@myned-ai/gsplat-flame-avatar-renderer 1.0.2 → 1.0.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.
Files changed (66) hide show
  1. package/README.md +1 -21
  2. package/dist/gsplat-flame-avatar-renderer.cjs.js +12875 -0
  3. package/dist/{gsplat-flame-avatar-renderer.umd.js.map → gsplat-flame-avatar-renderer.cjs.js.map} +1 -1
  4. package/dist/gsplat-flame-avatar-renderer.esm.js +1 -1
  5. package/package.json +5 -3
  6. package/src/api/index.js +7 -0
  7. package/src/buffers/SplatBuffer.js +1394 -0
  8. package/src/buffers/SplatBufferGenerator.js +41 -0
  9. package/src/buffers/SplatPartitioner.js +110 -0
  10. package/src/buffers/UncompressedSplatArray.js +106 -0
  11. package/src/buffers/index.js +11 -0
  12. package/src/core/SplatGeometry.js +48 -0
  13. package/src/core/SplatMesh.js +2620 -0
  14. package/src/core/SplatScene.js +43 -0
  15. package/src/core/SplatTree.js +200 -0
  16. package/src/core/Viewer.js +2895 -0
  17. package/src/core/index.js +13 -0
  18. package/src/enums/EngineConstants.js +58 -0
  19. package/src/enums/LogLevel.js +13 -0
  20. package/src/enums/RenderMode.js +11 -0
  21. package/src/enums/SceneFormat.js +21 -0
  22. package/src/enums/SceneRevealMode.js +11 -0
  23. package/src/enums/SplatRenderMode.js +10 -0
  24. package/src/enums/index.js +13 -0
  25. package/src/flame/FlameAnimator.js +271 -0
  26. package/src/flame/FlameConstants.js +21 -0
  27. package/src/flame/FlameTextureManager.js +293 -0
  28. package/src/flame/index.js +22 -0
  29. package/src/flame/utils.js +50 -0
  30. package/src/index.js +39 -0
  31. package/src/loaders/DirectLoadError.js +14 -0
  32. package/src/loaders/INRIAV1PlyParser.js +223 -0
  33. package/src/loaders/PlyLoader.js +261 -0
  34. package/src/loaders/PlyParser.js +19 -0
  35. package/src/loaders/PlyParserUtils.js +311 -0
  36. package/src/loaders/index.js +13 -0
  37. package/src/materials/SplatMaterial.js +1065 -0
  38. package/src/materials/SplatMaterial2D.js +358 -0
  39. package/src/materials/SplatMaterial3D.js +278 -0
  40. package/src/materials/index.js +11 -0
  41. package/src/raycaster/Hit.js +37 -0
  42. package/src/raycaster/Ray.js +123 -0
  43. package/src/raycaster/Raycaster.js +175 -0
  44. package/src/raycaster/index.js +10 -0
  45. package/src/renderer/AnimationManager.js +574 -0
  46. package/src/renderer/AppConstants.js +101 -0
  47. package/src/renderer/GaussianSplatRenderer.js +695 -0
  48. package/src/renderer/index.js +24 -0
  49. package/src/utils/LoaderUtils.js +65 -0
  50. package/src/utils/Util.js +375 -0
  51. package/src/utils/index.js +9 -0
  52. package/src/worker/SortWorker.js +284 -0
  53. package/src/worker/index.js +8 -0
  54. package/dist/gsplat-flame-avatar-renderer.esm.min.js +0 -2
  55. package/dist/gsplat-flame-avatar-renderer.esm.min.js.map +0 -1
  56. package/dist/gsplat-flame-avatar-renderer.umd.js +0 -12876
  57. package/dist/gsplat-flame-avatar-renderer.umd.min.js +0 -2
  58. package/dist/gsplat-flame-avatar-renderer.umd.min.js.map +0 -1
  59. package/dist/gsplat-flame-avatar.esm.js +0 -12755
  60. package/dist/gsplat-flame-avatar.esm.js.map +0 -1
  61. package/dist/gsplat-flame-avatar.esm.min.js +0 -2
  62. package/dist/gsplat-flame-avatar.esm.min.js.map +0 -1
  63. package/dist/gsplat-flame-avatar.umd.js +0 -12876
  64. package/dist/gsplat-flame-avatar.umd.js.map +0 -1
  65. package/dist/gsplat-flame-avatar.umd.min.js +0 -2
  66. package/dist/gsplat-flame-avatar.umd.min.js.map +0 -1
@@ -12752,4 +12752,4 @@ class FlameAnimator {
12752
12752
  }
12753
12753
 
12754
12754
  export { ARKIT_BLENDSHAPES_COUNT, ARKitBlendshapes, AbortedPromiseError, AnimationManager, BASE_COMPONENT_COUNT$1 as BASE_COMPONENT_COUNT, CENTER_COLORS_ELEMENTS_PER_SPLAT$1 as CENTER_COLORS_ELEMENTS_PER_SPLAT, CENTER_COLORS_ELEMENTS_PER_TEXEL$1 as CENTER_COLORS_ELEMENTS_PER_TEXEL, CONSECUTIVE_RENDERED_FRAMES_FOR_FPS_CALCULATION, COVARIANCES_ELEMENTS_PER_SPLAT$1 as COVARIANCES_ELEMENTS_PER_SPLAT, COVARIANCES_ELEMENTS_PER_TEXEL_ALLOCATED$1 as COVARIANCES_ELEMENTS_PER_TEXEL_ALLOCATED, COVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_ALLOCATED$1 as COVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_ALLOCATED, COVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_STORED$1 as COVARIANCES_ELEMENTS_PER_TEXEL_COMPRESSED_STORED, COVARIANCES_ELEMENTS_PER_TEXEL_STORED$1 as COVARIANCES_ELEMENTS_PER_TEXEL_STORED, Constants$1 as Constants, DefaultSphericalHarmonics8BitCompressionHalfRange, DefaultSphericalHarmonics8BitCompressionRange, DirectLoadError, FLAME_BONES_COUNT, FOCUS_MARKER_FADE_IN_SPEED, FOCUS_MARKER_FADE_OUT_SPEED, FieldSize, FieldSizeStringMap, FlameAnimator, FlameBoneNames, Constants as FlameConstants, FlameTextureManager, GaussianSplatRenderer, Hello, Hit, INRIAV1PlyParser, Idle, InternalLoadType, Listen, LoaderStatus, LoaderUtils, LogLevel, MINIMUM_DISTANCE_TO_NEW_FOCAL_POINT, MIN_SPLAT_COUNT_TO_SHOW_SPLAT_TREE_LOADING_SPINNER, PlyFormat, PlyLoader, PlyParser, PlyParserUtils, Ray, Raycaster, RenderMode, SCALES_ROTATIONS_ELEMENTS_PER_TEXEL$1 as SCALES_ROTATIONS_ELEMENTS_PER_TEXEL, SCENE_FADEIN_RATE_FAST$1 as SCENE_FADEIN_RATE_FAST, SCENE_FADEIN_RATE_GRADUAL$1 as SCENE_FADEIN_RATE_GRADUAL, SCENE_INDEXES_ELEMENTS_PER_TEXEL$1 as SCENE_INDEXES_ELEMENTS_PER_TEXEL, SceneFormat, SceneRevealMode, Semver, Speak, SplatBuffer, SplatBufferGenerator, SplatGeometry, SplatMaterial, SplatMaterial2D, SplatMaterial3D, SplatMesh, SplatPartitioner, SplatRenderMode, SplatScene, SplatTree, State, THREE_CAMERA_FOV, TYVoiceChatState, TextureConstants, Think, UncompressedSplatArray, Viewer, abortablePromiseWithExtractedComponents, buildBoneMatrixTexture, buildBoneWeightTexture, buildModelTexture, clamp, convertBetweenCompressionLevels, copyBetweenBuffers$1 as copyBetweenBuffers, dataViewFloatForCompressionLevel$1 as dataViewFloatForCompressionLevel, delayedExecute, disposeAllMeshes, fetchWithProgress, floatToHalf, fromHalfFloat$1 as fromHalfFloat, fromHalfFloatToUint8$1 as fromHalfFloatToUint8, fromUint8$1 as fromUint8, fromUint8ToHalfFloat, getCurrentTime, getIOSSemever, getSphericalHarmonicsComponentCountForDegree, getUpdatedBoneMatrices, isIOS, nativePromiseWithExtractedComponents, rgbaArrayToInteger, rgbaToInteger, sceneFormatFromPath, toHalfFloat$1 as toHalfFloat, toUint8$1 as toUint8, toUncompressedFloat$1 as toUncompressedFloat, uintEncodedFloat$1 as uintEncodedFloat, updateBoneMatrixTexture };
12755
- //# sourceMappingURL=gsplat-flame-avatar-renderer.esm.js.map
12755
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3NwbGF0LWZsYW1lLWF2YXRhci1yZW5kZXJlci5lc20uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9lbnVtcy9Mb2dMZXZlbC5qcyIsIi4uL3NyYy9lbnVtcy9SZW5kZXJNb2RlLmpzIiwiLi4vc3JjL2VudW1zL1NjZW5lRm9ybWF0LmpzIiwiLi4vc3JjL2VudW1zL1NjZW5lUmV2ZWFsTW9kZS5qcyIsIi4uL3NyYy9lbnVtcy9TcGxhdFJlbmRlck1vZGUuanMiLCIuLi9zcmMvZW51bXMvRW5naW5lQ29uc3RhbnRzLmpzIiwiLi4vc3JjL3V0aWxzL0xvYWRlclV0aWxzLmpzIiwiLi4vc3JjL3V0aWxzL1V0aWwuanMiLCIuLi9zcmMvcmVuZGVyZXIvQXBwQ29uc3RhbnRzLmpzIiwiLi4vc3JjL3JlbmRlcmVyL0FuaW1hdGlvbk1hbmFnZXIuanMiLCIuLi9zcmMvY29yZS9TcGxhdFNjZW5lLmpzIiwiLi4vc3JjL2NvcmUvU3BsYXRHZW9tZXRyeS5qcyIsIi4uL3NyYy9jb3JlL1NwbGF0VHJlZS5qcyIsIi4uL3NyYy9tYXRlcmlhbHMvU3BsYXRNYXRlcmlhbC5qcyIsIi4uL3NyYy9tYXRlcmlhbHMvU3BsYXRNYXRlcmlhbDNELmpzIiwiLi4vc3JjL21hdGVyaWFscy9TcGxhdE1hdGVyaWFsMkQuanMiLCIuLi9zcmMvY29yZS9TcGxhdE1lc2guanMiLCIuLi9zcmMvbG9hZGVycy9EaXJlY3RMb2FkRXJyb3IuanMiLCIuLi9zcmMvYnVmZmVycy9VbmNvbXByZXNzZWRTcGxhdEFycmF5LmpzIiwiLi4vc3JjL2J1ZmZlcnMvU3BsYXRCdWZmZXIuanMiLCIuLi9zcmMvYnVmZmVycy9TcGxhdFBhcnRpdGlvbmVyLmpzIiwiLi4vc3JjL2J1ZmZlcnMvU3BsYXRCdWZmZXJHZW5lcmF0b3IuanMiLCIuLi9zcmMvbG9hZGVycy9QbHlQYXJzZXJVdGlscy5qcyIsIi4uL3NyYy9sb2FkZXJzL0lOUklBVjFQbHlQYXJzZXIuanMiLCIuLi9zcmMvbG9hZGVycy9QbHlQYXJzZXIuanMiLCIuLi9zcmMvbG9hZGVycy9QbHlMb2FkZXIuanMiLCIuLi9zcmMvcmF5Y2FzdGVyL1JheS5qcyIsIi4uL3NyYy9yYXljYXN0ZXIvSGl0LmpzIiwiLi4vc3JjL3JheWNhc3Rlci9SYXljYXN0ZXIuanMiLCIuLi9zcmMvd29ya2VyL1NvcnRXb3JrZXIuanMiLCIuLi9zcmMvY29yZS9WaWV3ZXIuanMiLCIuLi9zcmMvcmVuZGVyZXIvR2F1c3NpYW5TcGxhdFJlbmRlcmVyLmpzIiwiLi4vc3JjL2ZsYW1lL0ZsYW1lQ29uc3RhbnRzLmpzIiwiLi4vc3JjL2ZsYW1lL3V0aWxzLmpzIiwiLi4vc3JjL2ZsYW1lL0ZsYW1lVGV4dHVyZU1hbmFnZXIuanMiLCIuLi9zcmMvZmxhbWUvRmxhbWVBbmltYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogTG9nIGxldmVsIGVudW1lcmF0aW9uIGZvciBjb250cm9sbGluZyB2ZXJib3NpdHlcclxuICogXHJcbiAqIERlcml2ZWQgZnJvbSBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IExvZ0xldmVsID0ge1xyXG4gICAgTm9uZTogMCxcclxuICAgIEVycm9yOiAxLFxyXG4gICAgV2FybmluZzogMixcclxuICAgIEluZm86IDMsXHJcbiAgICBEZWJ1ZzogNFxyXG59O1xyXG4iLCIvKipcclxuICogUmVuZGVyIG1vZGUgZW51bWVyYXRpb25cclxuICogXHJcbiAqIERlcml2ZWQgZnJvbSBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFJlbmRlck1vZGUgPSB7XHJcbiAgICBBbHdheXM6IDAsXHJcbiAgICBPbkNoYW5nZTogMSxcclxuICAgIE5ldmVyOiAyXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBTY2VuZSBmb3JtYXQgZW51bWVyYXRpb24gZm9yIHN1cHBvcnRlZCBmaWxlIHR5cGVzXHJcbiAqIFxyXG4gKiBEZXJpdmVkIGZyb20gQG1ra2VsbG9nZy9nYXVzc2lhbi1zcGxhdHMtM2QgKE1JVCBMaWNlbnNlKVxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWtrZWxsb2dnL0dhdXNzaWFuU3BsYXRzM0RcclxuICogXHJcbiAqIFNpbXBsaWZpZWQgZm9yIEZMQU1FIGF2YXRhciB1c2FnZSAtIG9ubHkgUExZIGZvcm1hdCBpcyBzdXBwb3J0ZWQuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgU2NlbmVGb3JtYXQgPSB7XHJcbiAgICAnUGx5JzogMFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIERldGVybWluZSBzY2VuZSBmb3JtYXQgZnJvbSBmaWxlIHBhdGhcclxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBGaWxlIHBhdGhcclxuICogQHJldHVybnMge251bWJlcnxudWxsfSBTY2VuZSBmb3JtYXQgb3IgbnVsbCBpZiB1bmtub3duXHJcbiAqL1xyXG5leHBvcnQgY29uc3Qgc2NlbmVGb3JtYXRGcm9tUGF0aCA9IChwYXRoKSA9PiB7XHJcbiAgICBpZiAocGF0aC5lbmRzV2l0aCgnLnBseScpKSByZXR1cm4gU2NlbmVGb3JtYXQuUGx5O1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBTY2VuZSByZXZlYWwgbW9kZSBlbnVtZXJhdGlvblxyXG4gKiBcclxuICogRGVyaXZlZCBmcm9tIEBta2tlbGxvZ2cvZ2F1c3NpYW4tc3BsYXRzLTNkIChNSVQgTGljZW5zZSlcclxuICogaHR0cHM6Ly9naXRodWIuY29tL21ra2VsbG9nZy9HYXVzc2lhblNwbGF0czNEXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgU2NlbmVSZXZlYWxNb2RlID0ge1xyXG4gICAgRGVmYXVsdDogMCxcclxuICAgIEdyYWR1YWw6IDEsXHJcbiAgICBJbnN0YW50OiAyXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBTcGxhdCByZW5kZXIgbW9kZSBlbnVtZXJhdGlvblxyXG4gKiBcclxuICogRGVyaXZlZCBmcm9tIEBta2tlbGxvZ2cvZ2F1c3NpYW4tc3BsYXRzLTNkIChNSVQgTGljZW5zZSlcclxuICogaHR0cHM6Ly9naXRodWIuY29tL21ra2VsbG9nZy9HYXVzc2lhblNwbGF0czNEXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgU3BsYXRSZW5kZXJNb2RlID0ge1xyXG4gICAgVGhyZWVEOiAwLFxyXG4gICAgVHdvRDogMVxyXG59O1xyXG4iLCIvKipcclxuICogRW5naW5lQ29uc3RhbnRzXHJcbiAqIFxyXG4gKiBEZXJpdmVkIGZyb20gQG1ra2VsbG9nZy9nYXVzc2lhbi1zcGxhdHMtM2QgKE1JVCBMaWNlbnNlKVxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWtrZWxsb2dnL0dhdXNzaWFuU3BsYXRzM0RcclxuICogXHJcbiAqIENvcmUgY29uc3RhbnRzIGZvciBHYXVzc2lhbiBTcGxhdCByZW5kZXJpbmcuXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbnN0YW50cyB7XHJcbiAgICBzdGF0aWMgRGVmYXVsdFNwbGF0U29ydERpc3RhbmNlTWFwUHJlY2lzaW9uID0gMTY7XHJcbiAgICBzdGF0aWMgTWVtb3J5UGFnZVNpemUgPSA2NTUzNjtcclxuICAgIHN0YXRpYyBCeXRlc1BlckZsb2F0ID0gNDtcclxuICAgIHN0YXRpYyBCeXRlc1BlckludCA9IDQ7XHJcbiAgICBzdGF0aWMgTWF4U2NlbmVzID0gMzI7XHJcbiAgICBzdGF0aWMgUHJvZ3Jlc3NpdmVMb2FkU2VjdGlvblNpemUgPSAyNjIxNDQ7XHJcbiAgICBzdGF0aWMgUHJvZ3Jlc3NpdmVMb2FkU2VjdGlvbkRlbGF5RHVyYXRpb24gPSAxNTtcclxuICAgIHN0YXRpYyBTcGhlcmljYWxIYXJtb25pY3M4Qml0Q29tcHJlc3Npb25SYW5nZSA9IDM7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0U3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uUmFuZ2UgPSBDb25zdGFudHMuU3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uUmFuZ2U7XHJcblxyXG4vLyBTcGxhdE1lc2ggY29uc3RhbnRzXHJcbmV4cG9ydCBjb25zdCBDT1ZBUklBTkNFU19FTEVNRU5UU19QRVJfU1BMQVQgPSA2O1xyXG5leHBvcnQgY29uc3QgQ0VOVEVSX0NPTE9SU19FTEVNRU5UU19QRVJfU1BMQVQgPSA0O1xyXG5cclxuZXhwb3J0IGNvbnN0IENPVkFSSUFOQ0VTX0VMRU1FTlRTX1BFUl9URVhFTF9TVE9SRUQgPSA0O1xyXG5leHBvcnQgY29uc3QgQ09WQVJJQU5DRVNfRUxFTUVOVFNfUEVSX1RFWEVMX0FMTE9DQVRFRCA9IDQ7XHJcbmV4cG9ydCBjb25zdCBDT1ZBUklBTkNFU19FTEVNRU5UU19QRVJfVEVYRUxfQ09NUFJFU1NFRF9TVE9SRUQgPSA2O1xyXG5leHBvcnQgY29uc3QgQ09WQVJJQU5DRVNfRUxFTUVOVFNfUEVSX1RFWEVMX0NPTVBSRVNTRURfQUxMT0NBVEVEID0gODtcclxuZXhwb3J0IGNvbnN0IFNDQUxFU19ST1RBVElPTlNfRUxFTUVOVFNfUEVSX1RFWEVMID0gNDtcclxuZXhwb3J0IGNvbnN0IENFTlRFUl9DT0xPUlNfRUxFTUVOVFNfUEVSX1RFWEVMID0gNDtcclxuZXhwb3J0IGNvbnN0IFNDRU5FX0lOREVYRVNfRUxFTUVOVFNfUEVSX1RFWEVMID0gMTtcclxuXHJcbmV4cG9ydCBjb25zdCBTQ0VORV9GQURFSU5fUkFURV9GQVNUID0gMC4wMTI7XHJcbmV4cG9ydCBjb25zdCBTQ0VORV9GQURFSU5fUkFURV9HUkFEVUFMID0gMC4wMDM7XHJcblxyXG4vLyBWaWV3ZXIgY29uc3RhbnRzXHJcbmV4cG9ydCBjb25zdCBUSFJFRV9DQU1FUkFfRk9WID0gNTA7XHJcbmV4cG9ydCBjb25zdCBNSU5JTVVNX0RJU1RBTkNFX1RPX05FV19GT0NBTF9QT0lOVCA9IDAuNTtcclxuZXhwb3J0IGNvbnN0IENPTlNFQ1VUSVZFX1JFTkRFUkVEX0ZSQU1FU19GT1JfRlBTX0NBTENVTEFUSU9OID0gNjA7XHJcbmV4cG9ydCBjb25zdCBNSU5fU1BMQVRfQ09VTlRfVE9fU0hPV19TUExBVF9UUkVFX0xPQURJTkdfU1BJTk5FUiA9IDE1MDAwMDA7XHJcbmV4cG9ydCBjb25zdCBGT0NVU19NQVJLRVJfRkFERV9JTl9TUEVFRCA9IDAuNDtcclxuZXhwb3J0IGNvbnN0IEZPQ1VTX01BUktFUl9GQURFX09VVF9TUEVFRCA9IDAuMTI7XHJcblxyXG4vLyBJbnRlcm5hbCBsb2FkIHR5cGVzIGZvciBsb2FkZXJzXHJcbmV4cG9ydCBjb25zdCBJbnRlcm5hbExvYWRUeXBlID0ge1xyXG4gICAgRGlyZWN0VG9TcGxhdEJ1ZmZlcjogMCxcclxuICAgIERpcmVjdFRvU3BsYXRBcnJheTogMSxcclxuICAgIERvd25sb2FkQmVmb3JlUHJvY2Vzc2luZzogMlxyXG59O1xyXG5cclxuLy8gTG9hZGVyIHN0YXR1c1xyXG5leHBvcnQgY29uc3QgTG9hZGVyU3RhdHVzID0ge1xyXG4gICAgJ0Rvd25sb2FkaW5nJzogMCxcclxuICAgICdQcm9jZXNzaW5nJzogMSxcclxuICAgICdEb25lJzogMlxyXG59O1xyXG4iLCIvKipcclxuICogTG9hZGVyVXRpbHNcclxuICogXHJcbiAqIERlcml2ZWQgZnJvbSBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKiBcclxuICogTG9hZGVyIHV0aWxpdGllcyBmb3IgZGVjb2RpbmcgdGV4dCBhbmQgcmVzb2x2aW5nIFVSTHMuXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIExvYWRlclV0aWxzIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBUZXh0RGVjb2RlciBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBkZWNvZGVUZXh0KGFycmF5KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBUZXh0RGVjb2RlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShhcnJheSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYWxsYmFjayBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgVGV4dERlY29kZXJcclxuICAgICAgICBsZXQgcyA9ICcnO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWwgPSBhcnJheS5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIEltcGxpY2l0bHkgYXNzdW1lcyBsaXR0bGUtZW5kaWFuLlxyXG4gICAgICAgICAgICBzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYXJyYXlbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gbWVyZ2VzIG11bHRpLWJ5dGUgdXRmLTggY2hhcmFjdGVycy5cclxuICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUocykpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgLy8gc2VlICMxNjM1OFxyXG4gICAgICAgICAgICByZXR1cm4gcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGV4dHJhY3RVcmxCYXNlKHVybCkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiAnLi8nO1xyXG5cclxuICAgICAgICByZXR1cm4gdXJsLnNsaWNlKDAsIGluZGV4ICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJlc29sdmVVUkwodXJsLCBwYXRoKSB7XHJcbiAgICAgICAgLy8gSW52YWxpZCBVUkxcclxuICAgICAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycgfHwgdXJsID09PSAnJykgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICAvLyBIb3N0IFJlbGF0aXZlIFVSTFxyXG4gICAgICAgIGlmICgvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHBhdGgpICYmIC9eXFwvLy50ZXN0KHVybCkpIHtcclxuICAgICAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvKF5odHRwcz86XFwvXFwvW14vXSspLiovaSwgJyQxJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBYnNvbHV0ZSBVUkwgaHR0cDovLyxodHRwczovLywvL1xyXG4gICAgICAgIGlmICgvXihodHRwcz86KT9cXC9cXC8vaS50ZXN0KHVybCkpIHJldHVybiB1cmw7XHJcblxyXG4gICAgICAgIC8vIERhdGEgVVJJXHJcbiAgICAgICAgaWYgKC9eZGF0YTouKiwuKiQvaS50ZXN0KHVybCkpIHJldHVybiB1cmw7XHJcblxyXG4gICAgICAgIC8vIEJsb2IgVVJMXHJcbiAgICAgICAgaWYgKC9eYmxvYjouKiQvaS50ZXN0KHVybCkpIHJldHVybiB1cmw7XHJcblxyXG4gICAgICAgIC8vIFJlbGF0aXZlIFVSTFxyXG4gICAgICAgIHJldHVybiBwYXRoICsgdXJsO1xyXG4gICAgfVxyXG59XHJcbiIsIi8qKlxyXG4gKiBDb3JlIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBHYXVzc2lhbiBTcGxhdCByZW5kZXJpbmdcclxuICogXHJcbiAqIERlcml2ZWQgZnJvbSBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKiBcclxuICogSW1wb3J0IHBhdGhzIGFkanVzdGVkIGZvciBnc3BsYXQtZmxhbWUtYXZhdGFyIHBhY2thZ2Ugc3RydWN0dXJlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IERhdGFVdGlscyB9IGZyb20gJ3RocmVlJztcclxuXHJcbi8qKlxyXG4gKiBDdXN0b20gZXJyb3IgZm9yIGFib3J0ZWQgb3BlcmF0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFib3J0ZWRQcm9taXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihtc2cpIHtcclxuICAgICAgICBzdXBlcihtc2cpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICdBYm9ydGVkUHJvbWlzZUVycm9yJztcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEZldGNoIHdpdGggcHJvZ3Jlc3MgdHJhY2tpbmcgdXNpbmcgc3RhbmRhcmQgQWJvcnRDb250cm9sbGVyXHJcbiAqIFJldHVybnMgYSBQcm9taXNlIHdpdGggYW4gYXR0YWNoZWQgYGFib3J0KClgIG1ldGhvZCBhbmQgYGFib3J0Q29udHJvbGxlcmBcclxuICovXHJcbmV4cG9ydCBjb25zdCBmZXRjaFdpdGhQcm9ncmVzcyA9IGZ1bmN0aW9uKHBhdGgsIG9uUHJvZ3Jlc3MsIHNhdmVDaHVua3MgPSB0cnVlLCBoZWFkZXJzKSB7XHJcblxyXG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xyXG4gICAgY29uc3Qgc2lnbmFsID0gYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcclxuICAgIGxldCBhYm9ydGVkID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG9uUHJvZ3Jlc3NDYWxsZWRBdENvbXBsZXRlID0gZmFsc2U7XHJcbiAgICBjb25zdCBsb2NhbE9uUHJvZ3Jlc3MgPSAocGVyY2VudCwgcGVyY2VudExhYmVsLCBjaHVuaywgZmlsZVNpemUpID0+IHtcclxuICAgICAgICBpZiAob25Qcm9ncmVzcyAmJiAhb25Qcm9ncmVzc0NhbGxlZEF0Q29tcGxldGUpIHtcclxuICAgICAgICAgICAgb25Qcm9ncmVzcyhwZXJjZW50LCBwZXJjZW50TGFiZWwsIGNodW5rLCBmaWxlU2l6ZSk7XHJcbiAgICAgICAgICAgIGlmIChwZXJjZW50ID09PSAxMDApIHtcclxuICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3NDYWxsZWRBdENvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBmZXRjaE9wdGlvbnMgPSB7IHNpZ25hbCB9O1xyXG4gICAgICAgIGlmIChoZWFkZXJzKSBmZXRjaE9wdGlvbnMuaGVhZGVycyA9IGhlYWRlcnM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZmV0Y2gocGF0aCwgZmV0Y2hPcHRpb25zKVxyXG4gICAgICAgIC50aGVuKGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIEhhbmRsZSBlcnJvciBjb25kaXRpb25zIHdoZXJlIGRhdGEgaXMgc3RpbGwgcmV0dXJuZWRcclxuICAgICAgICAgICAgaWYgKCFkYXRhLm9rKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCBkYXRhLnRleHQoKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZldGNoIGZhaWxlZDogJHtkYXRhLnN0YXR1c30gJHtkYXRhLnN0YXR1c1RleHR9ICR7ZXJyb3JUZXh0fWApKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gZGF0YS5ib2R5LmdldFJlYWRlcigpO1xyXG4gICAgICAgICAgICBsZXQgYnl0ZXNEb3dubG9hZGVkID0gMDtcclxuICAgICAgICAgICAgbGV0IF9maWxlU2l6ZSA9IGRhdGEuaGVhZGVycy5nZXQoJ0NvbnRlbnQtTGVuZ3RoJyk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlU2l6ZSA9IF9maWxlU2l6ZSA/IHBhcnNlSW50KF9maWxlU2l6ZSkgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlICghYWJvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHZhbHVlOiBjaHVuaywgZG9uZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbE9uUHJvZ3Jlc3MoMTAwLCAnMTAwJScsIGNodW5rLCBmaWxlU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYXZlQ2h1bmtzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSBuZXcgQmxvYihjaHVua3MpLmFycmF5QnVmZmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJ5dGVzRG93bmxvYWRlZCArPSBjaHVuay5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBlcmNlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBlcmNlbnRMYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZVNpemUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50ID0gYnl0ZXNEb3dubG9hZGVkIC8gZmlsZVNpemUgKiAxMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRMYWJlbCA9IGAke3BlcmNlbnQudG9GaXhlZCgyKX0lYDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNhdmVDaHVua3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsb2NhbE9uUHJvZ3Jlc3MocGVyY2VudCwgcGVyY2VudExhYmVsLCBjaHVuaywgZmlsZVNpemUpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEFib3J0ZWRQcm9taXNlRXJyb3IoJ0ZldGNoIGFib3J0ZWQnKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEFib3J0ZWRQcm9taXNlRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBlcnJvcikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBdHRhY2ggYWJvcnQgZnVuY3Rpb25hbGl0eSB0byB0aGUgcHJvbWlzZVxyXG4gICAgcHJvbWlzZS5hYm9ydCA9IChyZWFzb24pID0+IHtcclxuICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcclxuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQocmVhc29uKTtcclxuICAgIH07XHJcbiAgICBwcm9taXNlLmFib3J0Q29udHJvbGxlciA9IGFib3J0Q29udHJvbGxlcjtcclxuXHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxufTtcclxuXHJcbi8vIENsYW1wIHZhbHVlIGJldHdlZW4gbWluIGFuZCBtYXhcclxuZXhwb3J0IGNvbnN0IGNsYW1wID0gZnVuY3Rpb24odmFsLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHZhbCwgbWF4KSwgbWluKTtcclxufTtcclxuXHJcbi8vIEdldCBjdXJyZW50IHRpbWUgaW4gc2Vjb25kc1xyXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFRpbWUgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKSAvIDEwMDA7XHJcbn07XHJcblxyXG4vLyBEaXNwb3NlIGFsbCBtZXNoZXMgaW4gYSBzY2VuZSBncmFwaFxyXG5leHBvcnQgY29uc3QgZGlzcG9zZUFsbE1lc2hlcyA9IChvYmplY3QzRCkgPT4ge1xyXG4gICAgaWYgKG9iamVjdDNELmdlb21ldHJ5KSB7XHJcbiAgICAgICAgb2JqZWN0M0QuZ2VvbWV0cnkuZGlzcG9zZSgpO1xyXG4gICAgICAgIG9iamVjdDNELmdlb21ldHJ5ID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChvYmplY3QzRC5tYXRlcmlhbCkge1xyXG4gICAgICAgIG9iamVjdDNELm1hdGVyaWFsLmRpc3Bvc2UoKTtcclxuICAgICAgICBvYmplY3QzRC5tYXRlcmlhbCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAob2JqZWN0M0QuY2hpbGRyZW4pIHtcclxuICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBvYmplY3QzRC5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICBkaXNwb3NlQWxsTWVzaGVzKGNoaWxkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vLyBEZWxheWVkIGV4ZWN1dGlvbiBoZWxwZXJcclxuZXhwb3J0IGNvbnN0IGRlbGF5ZWRFeGVjdXRlID0gKGZ1bmMsIGZhc3QpID0+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZShmdW5jKCkpO1xyXG4gICAgICAgIH0sIGZhc3QgPyAxIDogNTApO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vLyBHZXQgc3BoZXJpY2FsIGhhcm1vbmljcyBjb21wb25lbnQgY291bnQgZm9yIGRlZ3JlZVxyXG5leHBvcnQgY29uc3QgZ2V0U3BoZXJpY2FsSGFybW9uaWNzQ29tcG9uZW50Q291bnRGb3JEZWdyZWUgPSAoc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gMCkgPT4ge1xyXG4gICAgc3dpdGNoIChzcGhlcmljYWxIYXJtb25pY3NEZWdyZWUpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIHJldHVybiA5O1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgcmV0dXJuIDI0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDA7XHJcbn07XHJcblxyXG4vLyBDcmVhdGUgbmF0aXZlIHByb21pc2Ugd2l0aCBleHRyYWN0ZWQgY29tcG9uZW50c1xyXG5leHBvcnQgY29uc3QgbmF0aXZlUHJvbWlzZVdpdGhFeHRyYWN0ZWRDb21wb25lbnRzID0gKCkgPT4ge1xyXG4gICAgbGV0IHJlc29sdmVyO1xyXG4gICAgbGV0IHJlamVjdGVyO1xyXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICByZXNvbHZlciA9IHJlc29sdmU7XHJcbiAgICAgICAgcmVqZWN0ZXIgPSByZWplY3Q7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgJ3Byb21pc2UnOiBwcm9taXNlLFxyXG4gICAgICAgICdyZXNvbHZlJzogcmVzb2x2ZXIsXHJcbiAgICAgICAgJ3JlamVjdCc6IHJlamVjdGVyXHJcbiAgICB9O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHByb21pc2Ugd2l0aCBleHRyYWN0ZWQgcmVzb2x2ZS9yZWplY3QgZnVuY3Rpb25zIGFuZCBvcHRpb25hbCBhYm9ydCBjYXBhYmlsaXR5XHJcbiAqIFVzZXMgc3RhbmRhcmQgUHJvbWlzZSB3aXRoIGF0dGFjaGVkIGFib3J0IG1ldGhvZFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGFib3J0YWJsZVByb21pc2VXaXRoRXh0cmFjdGVkQ29tcG9uZW50cyA9IChhYm9ydEhhbmRsZXIpID0+IHtcclxuICAgIGxldCByZXNvbHZlcjtcclxuICAgIGxldCByZWplY3RlcjtcclxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZXIgPSByZXNvbHZlO1xyXG4gICAgICAgIHJlamVjdGVyID0gcmVqZWN0O1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIC8vIEF0dGFjaCBhYm9ydCBtZXRob2QgdG8gcHJvbWlzZVxyXG4gICAgcHJvbWlzZS5hYm9ydCA9IGFib3J0SGFuZGxlciB8fCAoKCkgPT4ge30pO1xyXG4gICAgXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgICdwcm9taXNlJzogcHJvbWlzZSxcclxuICAgICAgICAncmVzb2x2ZSc6IHJlc29sdmVyLFxyXG4gICAgICAgICdyZWplY3QnOiByZWplY3RlclxyXG4gICAgfTtcclxufTtcclxuXHJcbi8vIFNlbXZlciBjbGFzcyBmb3IgdmVyc2lvbiBoYW5kbGluZ1xyXG5leHBvcnQgY2xhc3MgU2VtdmVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG1ham9yLCBtaW5vciwgcGF0Y2gpIHtcclxuICAgICAgICB0aGlzLm1ham9yID0gbWFqb3I7XHJcbiAgICAgICAgdGhpcy5taW5vciA9IG1pbm9yO1xyXG4gICAgICAgIHRoaXMucGF0Y2ggPSBwYXRjaDtcclxuICAgIH1cclxuXHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5tYWpvcn1fJHt0aGlzLm1pbm9yfV8ke3RoaXMucGF0Y2h9YDtcclxuICAgIH1cclxufVxyXG5cclxuLy8gaU9TIGRldGVjdGlvblxyXG5leHBvcnQgZnVuY3Rpb24gaXNJT1MoKSB7XHJcbiAgICBjb25zdCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XHJcbiAgICByZXR1cm4gdWEuaW5kZXhPZignaVBob25lJykgPiAwIHx8IHVhLmluZGV4T2YoJ2lQYWQnKSA+IDA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRJT1NTZW1ldmVyKCkge1xyXG4gICAgaWYgKGlzSU9TKCkpIHtcclxuICAgICAgICBjb25zdCBleHRyYWN0ID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgKFxcZCspXyhcXGQrKV8/KFxcZCspPy8pO1xyXG4gICAgICAgIHJldHVybiBuZXcgU2VtdmVyKFxyXG4gICAgICAgICAgICBwYXJzZUludChleHRyYWN0WzFdIHx8IDAsIDEwKSxcclxuICAgICAgICAgICAgcGFyc2VJbnQoZXh0cmFjdFsyXSB8fCAwLCAxMCksXHJcbiAgICAgICAgICAgIHBhcnNlSW50KGV4dHJhY3RbM10gfHwgMCwgMTApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcblxyXG4vLyBIYWxmIGZsb2F0IGNvbnZlcnNpb24gdXRpbGl0aWVzXHJcbmV4cG9ydCBjb25zdCB0b0hhbGZGbG9hdCA9IERhdGFVdGlscy50b0hhbGZGbG9hdC5iaW5kKERhdGFVdGlscyk7XHJcbmV4cG9ydCBjb25zdCBmcm9tSGFsZkZsb2F0ID0gRGF0YVV0aWxzLmZyb21IYWxmRmxvYXQuYmluZChEYXRhVXRpbHMpO1xyXG5cclxuLy8gRGVmYXVsdCBzcGhlcmljYWwgaGFybW9uaWNzIGNvbXByZXNzaW9uIHJhbmdlIChpbXBvcnRlZCBmcm9tIGVudW1zKVxyXG5pbXBvcnQgeyBEZWZhdWx0U3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uUmFuZ2UgfSBmcm9tICcuLi9lbnVtcy9FbmdpbmVDb25zdGFudHMuanMnO1xyXG5leHBvcnQgeyBEZWZhdWx0U3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uUmFuZ2UgfTtcclxuZXhwb3J0IGNvbnN0IERlZmF1bHRTcGhlcmljYWxIYXJtb25pY3M4Qml0Q29tcHJlc3Npb25IYWxmUmFuZ2UgPSBEZWZhdWx0U3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uUmFuZ2UgLyAyLjA7XHJcblxyXG4vLyBVbmNvbXByZXNzIGZsb2F0IGJhc2VkIG9uIGNvbXByZXNzaW9uIGxldmVsXHJcbmV4cG9ydCBjb25zdCB0b1VuY29tcHJlc3NlZEZsb2F0ID0gKGYsIGNvbXByZXNzaW9uTGV2ZWwsIGlzU0ggPSBmYWxzZSwgcmFuZ2U4Qml0TWluLCByYW5nZThCaXRNYXgpID0+IHtcclxuICAgIGlmIChjb21wcmVzc2lvbkxldmVsID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGY7XHJcbiAgICB9IGVsc2UgaWYgKGNvbXByZXNzaW9uTGV2ZWwgPT09IDEgfHwgKGNvbXByZXNzaW9uTGV2ZWwgPT09IDIgJiYgIWlzU0gpKSB7XHJcbiAgICAgICAgcmV0dXJuIERhdGFVdGlscy5mcm9tSGFsZkZsb2F0KGYpO1xyXG4gICAgfSBlbHNlIGlmIChjb21wcmVzc2lvbkxldmVsID09PSAyKSB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21VaW50OChmLCByYW5nZThCaXRNaW4sIHJhbmdlOEJpdE1heCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vLyBDb252ZXJ0IHRvIHVpbnQ4XHJcbmV4cG9ydCBjb25zdCB0b1VpbnQ4ID0gKHYsIHJhbmdlTWluLCByYW5nZU1heCkgPT4ge1xyXG4gICAgdiA9IGNsYW1wKHYsIHJhbmdlTWluLCByYW5nZU1heCk7XHJcbiAgICBjb25zdCByYW5nZSA9IChyYW5nZU1heCAtIHJhbmdlTWluKTtcclxuICAgIHJldHVybiBjbGFtcChNYXRoLmZsb29yKCh2IC0gcmFuZ2VNaW4pIC8gcmFuZ2UgKiAyNTUpLCAwLCAyNTUpO1xyXG59O1xyXG5cclxuLy8gQ29udmVydCBmcm9tIHVpbnQ4XHJcbmV4cG9ydCBjb25zdCBmcm9tVWludDggPSAodiwgcmFuZ2VNaW4sIHJhbmdlTWF4KSA9PiB7XHJcbiAgICBjb25zdCByYW5nZSA9IChyYW5nZU1heCAtIHJhbmdlTWluKTtcclxuICAgIHJldHVybiAodiAvIDI1NSAqIHJhbmdlICsgcmFuZ2VNaW4pO1xyXG59O1xyXG5cclxuLy8gSGFsZiBmbG9hdCB0byB1aW50OFxyXG5leHBvcnQgY29uc3QgZnJvbUhhbGZGbG9hdFRvVWludDggPSAodiwgcmFuZ2VNaW4sIHJhbmdlTWF4KSA9PiB7XHJcbiAgICByZXR1cm4gdG9VaW50OChmcm9tSGFsZkZsb2F0KHYpLCByYW5nZU1pbiwgcmFuZ2VNYXgpO1xyXG59O1xyXG5cclxuLy8gVWludDggdG8gaGFsZiBmbG9hdFxyXG5leHBvcnQgY29uc3QgZnJvbVVpbnQ4VG9IYWxmRmxvYXQgPSAodiwgcmFuZ2VNaW4sIHJhbmdlTWF4KSA9PiB7XHJcbiAgICByZXR1cm4gdG9IYWxmRmxvYXQoZnJvbVVpbnQ4KHYsIHJhbmdlTWluLCByYW5nZU1heCkpO1xyXG59O1xyXG5cclxuLy8gUmVhZCBmbG9hdCBmcm9tIERhdGFWaWV3IGJhc2VkIG9uIGNvbXByZXNzaW9uIGxldmVsXHJcbmV4cG9ydCBjb25zdCBkYXRhVmlld0Zsb2F0Rm9yQ29tcHJlc3Npb25MZXZlbCA9IChkYXRhVmlldywgZmxvYXRJbmRleCwgY29tcHJlc3Npb25MZXZlbCwgaXNTSCA9IGZhbHNlKSA9PiB7XHJcbiAgICBpZiAoY29tcHJlc3Npb25MZXZlbCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBkYXRhVmlldy5nZXRGbG9hdDMyKGZsb2F0SW5kZXggKiA0LCB0cnVlKTtcclxuICAgIH0gZWxzZSBpZiAoY29tcHJlc3Npb25MZXZlbCA9PT0gMSB8fCAoY29tcHJlc3Npb25MZXZlbCA9PT0gMiAmJiAhaXNTSCkpIHtcclxuICAgICAgICByZXR1cm4gZGF0YVZpZXcuZ2V0VWludDE2KGZsb2F0SW5kZXggKiAyLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFWaWV3LmdldFVpbnQ4KGZsb2F0SW5kZXgsIHRydWUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gQ29udmVydCBiZXR3ZWVuIGNvbXByZXNzaW9uIGxldmVsc1xyXG5leHBvcnQgY29uc3QgY29udmVydEJldHdlZW5Db21wcmVzc2lvbkxldmVscyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3Qgbm9vcCA9ICh2KSA9PiB2O1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbih2YWwsIGZyb21MZXZlbCwgdG9MZXZlbCwgaXNTSCA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKGZyb21MZXZlbCA9PT0gdG9MZXZlbCkgcmV0dXJuIHZhbDtcclxuICAgICAgICBsZXQgb3V0cHV0Q29udmVyc2lvbkZ1bmMgPSBub29wO1xyXG5cclxuICAgICAgICBpZiAoZnJvbUxldmVsID09PSAyICYmIGlzU0gpIHtcclxuICAgICAgICAgICAgaWYgKHRvTGV2ZWwgPT09IDEpIG91dHB1dENvbnZlcnNpb25GdW5jID0gZnJvbVVpbnQ4VG9IYWxmRmxvYXQ7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRvTGV2ZWwgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dENvbnZlcnNpb25GdW5jID0gZnJvbVVpbnQ4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChmcm9tTGV2ZWwgPT09IDIgfHwgZnJvbUxldmVsID09PSAxKSB7XHJcbiAgICAgICAgICAgIGlmICh0b0xldmVsID09PSAwKSBvdXRwdXRDb252ZXJzaW9uRnVuYyA9IGZyb21IYWxmRmxvYXQ7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRvTGV2ZWwgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIGlmICghaXNTSCkgb3V0cHV0Q29udmVyc2lvbkZ1bmMgPSBub29wO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBvdXRwdXRDb252ZXJzaW9uRnVuYyA9IGZyb21IYWxmRmxvYXRUb1VpbnQ4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChmcm9tTGV2ZWwgPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRvTGV2ZWwgPT09IDEpIG91dHB1dENvbnZlcnNpb25GdW5jID0gdG9IYWxmRmxvYXQ7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRvTGV2ZWwgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIGlmICghaXNTSCkgb3V0cHV0Q29udmVyc2lvbkZ1bmMgPSB0b0hhbGZGbG9hdDtcclxuICAgICAgICAgICAgICAgIGVsc2Ugb3V0cHV0Q29udmVyc2lvbkZ1bmMgPSB0b1VpbnQ4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0Q29udmVyc2lvbkZ1bmModmFsKTtcclxuICAgIH07XHJcbn0oKTtcclxuXHJcbi8vIENvcHkgYmV0d2VlbiBidWZmZXJzXHJcbmV4cG9ydCBjb25zdCBjb3B5QmV0d2VlbkJ1ZmZlcnMgPSAoc3JjQnVmZmVyLCBzcmNPZmZzZXQsIGRlc3RCdWZmZXIsIGRlc3RPZmZzZXQsIGJ5dGVDb3VudCA9IDApID0+IHtcclxuICAgIGNvbnN0IHNyYyA9IG5ldyBVaW50OEFycmF5KHNyY0J1ZmZlciwgc3JjT2Zmc2V0KTtcclxuICAgIGNvbnN0IGRlc3QgPSBuZXcgVWludDhBcnJheShkZXN0QnVmZmVyLCBkZXN0T2Zmc2V0KTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNvdW50OyBpKyspIHtcclxuICAgICAgICBkZXN0W2ldID0gc3JjW2ldO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gRmxvYXQgdG8gaGFsZiBmbG9hdCBjb252ZXJzaW9uXHJcbmV4cG9ydCBjb25zdCBmbG9hdFRvSGFsZiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgZmxvYXRWaWV3ID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcclxuICAgIGNvbnN0IGludDMyVmlldyA9IG5ldyBJbnQzMkFycmF5KGZsb2F0Vmlldy5idWZmZXIpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbih2YWwpIHtcclxuICAgICAgICBmbG9hdFZpZXdbMF0gPSB2YWw7XHJcbiAgICAgICAgY29uc3QgeCA9IGludDMyVmlld1swXTtcclxuXHJcbiAgICAgICAgbGV0IGJpdHMgPSAoeCA+PiAxNikgJiAweDgwMDA7XHJcbiAgICAgICAgbGV0IG0gPSAoeCA+PiAxMikgJiAweDA3ZmY7XHJcbiAgICAgICAgY29uc3QgZSA9ICh4ID4+IDIzKSAmIDB4ZmY7XHJcblxyXG4gICAgICAgIGlmIChlIDwgMTAzKSByZXR1cm4gYml0cztcclxuXHJcbiAgICAgICAgaWYgKGUgPiAxNDIpIHtcclxuICAgICAgICAgICAgYml0cyB8PSAweDdjMDA7XHJcbiAgICAgICAgICAgIGJpdHMgfD0gKChlID09IDI1NSkgPyAwIDogMSkgJiYgKHggJiAweDAwN2ZmZmZmKTtcclxuICAgICAgICAgICAgcmV0dXJuIGJpdHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZSA8IDExMykge1xyXG4gICAgICAgICAgICBtIHw9IDB4MDgwMDtcclxuICAgICAgICAgICAgYml0cyB8PSAobSA+PiAoMTE0IC0gZSkpICsgKChtID4+ICgxMTMgLSBlKSkgJiAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIGJpdHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBiaXRzIHw9ICgoZSAtIDExMikgPDwgMTApIHwgKG0gPj4gMSk7XHJcbiAgICAgICAgYml0cyArPSBtICYgMTtcclxuICAgICAgICByZXR1cm4gYml0cztcclxuICAgIH07XHJcbn0oKTtcclxuXHJcbi8vIEVuY29kZSBmbG9hdCBhcyB1aW50XHJcbmV4cG9ydCBjb25zdCB1aW50RW5jb2RlZEZsb2F0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBmbG9hdFZpZXcgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xyXG4gICAgY29uc3QgaW50MzJWaWV3ID0gbmV3IEludDMyQXJyYXkoZmxvYXRWaWV3LmJ1ZmZlcik7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGYpIHtcclxuICAgICAgICBmbG9hdFZpZXdbMF0gPSBmO1xyXG4gICAgICAgIHJldHVybiBpbnQzMlZpZXdbMF07XHJcbiAgICB9O1xyXG59KCk7XHJcblxyXG4vLyBSR0JBIHRvIGludGVnZXJcclxuZXhwb3J0IGNvbnN0IHJnYmFUb0ludGVnZXIgPSBmdW5jdGlvbihyLCBnLCBiLCBhKSB7XHJcbiAgICByZXR1cm4gciArIChnIDw8IDgpICsgKGIgPDwgMTYpICsgKGEgPDwgMjQpO1xyXG59O1xyXG5cclxuLy8gUkdCQSBhcnJheSB0byBpbnRlZ2VyXHJcbmV4cG9ydCBjb25zdCByZ2JhQXJyYXlUb0ludGVnZXIgPSBmdW5jdGlvbihhcnIsIG9mZnNldCkge1xyXG4gICAgcmV0dXJuIGFycltvZmZzZXRdICsgKGFycltvZmZzZXQgKyAxXSA8PCA4KSArIChhcnJbb2Zmc2V0ICsgMl0gPDwgMTYpICsgKGFycltvZmZzZXQgKyAzXSA8PCAyNCk7XHJcbn07XHJcblxyXG4vLyBCQVNFX0NPTVBPTkVOVF9DT1VOVCBmb3IgVW5jb21wcmVzc2VkU3BsYXRBcnJheVxyXG5leHBvcnQgY29uc3QgQkFTRV9DT01QT05FTlRfQ09VTlQgPSAxNDtcclxuIiwiLyoqXHJcbiAqIEFwcENvbnN0YW50c1xyXG4gKiBcclxuICogRGVyaXZlZCBmcm9tIGdhdXNzaWFuLXNwbGF0LXJlbmRlcmVyLWZvci1sYW1cclxuICogQW5pbWF0aW9uIHN0YXRlIGNvbnN0YW50cyBhbmQgQVJLaXQgYmxlbmRzaGFwZSBtYXBwaW5ncy5cclxuICovXHJcblxyXG4vKipcclxuICogVm9pY2UgY2hhdCBzdGF0ZSBlbnVtZXJhdGlvblxyXG4gKiBDb250cm9scyB0aGUgcmVuZGVyaW5nIGFuZCBiZWhhdmlvciBtb2RlcyBvZiB0aGUgYXZhdGFyXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVFlWb2ljZUNoYXRTdGF0ZSA9IHtcclxuICAgIElkbGU6ICdJZGxlJywgICAgICAgICAgIC8vIElkbGUvd2FpdGluZyBzdGF0ZVxyXG4gICAgTGlzdGVuaW5nOiAnTGlzdGVuaW5nJywgLy8gTGlzdGVuaW5nIHRvIHVzZXIgaW5wdXRcclxuICAgIFJlc3BvbmRpbmc6ICdSZXNwb25kaW5nJywgLy8gU3BlYWtpbmcvcmVzcG9uZGluZyBhbmltYXRpb25cclxuICAgIFRoaW5raW5nOiAnVGhpbmtpbmcnICAgIC8vIFByb2Nlc3NpbmcvdGhpbmtpbmcgYW5pbWF0aW9uXHJcbn07XHJcblxyXG4vKipcclxuICogQVJLaXQgYmxlbmRzaGFwZSBuYW1lcyAoNTIgZXhwcmVzc2lvbnMpXHJcbiAqIFVzZWQgZm9yIGZhY2lhbCBleHByZXNzaW9uIG1hcHBpbmcgZnJvbSBBUktpdCBmYWNlIHRyYWNraW5nXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgQVJLaXRCbGVuZHNoYXBlcyA9IFtcclxuICAgICdicm93RG93bkxlZnQnLFxyXG4gICAgJ2Jyb3dEb3duUmlnaHQnLFxyXG4gICAgJ2Jyb3dJbm5lclVwJyxcclxuICAgICdicm93T3V0ZXJVcExlZnQnLFxyXG4gICAgJ2Jyb3dPdXRlclVwUmlnaHQnLFxyXG4gICAgJ2NoZWVrUHVmZicsXHJcbiAgICAnY2hlZWtTcXVpbnRMZWZ0JyxcclxuICAgICdjaGVla1NxdWludFJpZ2h0JyxcclxuICAgICdleWVCbGlua0xlZnQnLFxyXG4gICAgJ2V5ZUJsaW5rUmlnaHQnLFxyXG4gICAgJ2V5ZUxvb2tEb3duTGVmdCcsXHJcbiAgICAnZXllTG9va0Rvd25SaWdodCcsXHJcbiAgICAnZXllTG9va0luTGVmdCcsXHJcbiAgICAnZXllTG9va0luUmlnaHQnLFxyXG4gICAgJ2V5ZUxvb2tPdXRMZWZ0JyxcclxuICAgICdleWVMb29rT3V0UmlnaHQnLFxyXG4gICAgJ2V5ZUxvb2tVcExlZnQnLFxyXG4gICAgJ2V5ZUxvb2tVcFJpZ2h0JyxcclxuICAgICdleWVTcXVpbnRMZWZ0JyxcclxuICAgICdleWVTcXVpbnRSaWdodCcsXHJcbiAgICAnZXllV2lkZUxlZnQnLFxyXG4gICAgJ2V5ZVdpZGVSaWdodCcsXHJcbiAgICAnamF3Rm9yd2FyZCcsXHJcbiAgICAnamF3TGVmdCcsXHJcbiAgICAnamF3T3BlbicsXHJcbiAgICAnamF3UmlnaHQnLFxyXG4gICAgJ21vdXRoQ2xvc2UnLFxyXG4gICAgJ21vdXRoRGltcGxlTGVmdCcsXHJcbiAgICAnbW91dGhEaW1wbGVSaWdodCcsXHJcbiAgICAnbW91dGhGcm93bkxlZnQnLFxyXG4gICAgJ21vdXRoRnJvd25SaWdodCcsXHJcbiAgICAnbW91dGhGdW5uZWwnLFxyXG4gICAgJ21vdXRoTGVmdCcsXHJcbiAgICAnbW91dGhMb3dlckRvd25MZWZ0JyxcclxuICAgICdtb3V0aExvd2VyRG93blJpZ2h0JyxcclxuICAgICdtb3V0aFByZXNzTGVmdCcsXHJcbiAgICAnbW91dGhQcmVzc1JpZ2h0JyxcclxuICAgICdtb3V0aFB1Y2tlcicsXHJcbiAgICAnbW91dGhSaWdodCcsXHJcbiAgICAnbW91dGhSb2xsTG93ZXInLFxyXG4gICAgJ21vdXRoUm9sbFVwcGVyJyxcclxuICAgICdtb3V0aFNocnVnTG93ZXInLFxyXG4gICAgJ21vdXRoU2hydWdVcHBlcicsXHJcbiAgICAnbW91dGhTbWlsZUxlZnQnLFxyXG4gICAgJ21vdXRoU21pbGVSaWdodCcsXHJcbiAgICAnbW91dGhTdHJldGNoTGVmdCcsXHJcbiAgICAnbW91dGhTdHJldGNoUmlnaHQnLFxyXG4gICAgJ21vdXRoVXBwZXJVcExlZnQnLFxyXG4gICAgJ21vdXRoVXBwZXJVcFJpZ2h0JyxcclxuICAgICdub3NlU25lZXJMZWZ0JyxcclxuICAgICdub3NlU25lZXJSaWdodCcsXHJcbiAgICAndG9uZ3VlT3V0J1xyXG5dO1xyXG5cclxuLyoqXHJcbiAqIEZMQU1FIG1vZGVsIGJvbmUgbmFtZXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBGbGFtZUJvbmVOYW1lcyA9IFtcclxuICAgICdyb290JyxcclxuICAgICduZWNrJyxcclxuICAgICdqYXcnLFxyXG4gICAgJ2xlZnRFeWUnLFxyXG4gICAgJ3JpZ2h0RXllJ1xyXG5dO1xyXG5cclxuLyoqXHJcbiAqIENvbnN0YW50cyBkZXJpdmVkIGZyb20gdGhlIGFycmF5c1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEFSS0lUX0JMRU5EU0hBUEVTX0NPVU5UID0gQVJLaXRCbGVuZHNoYXBlcy5sZW5ndGg7XHJcbmV4cG9ydCBjb25zdCBGTEFNRV9CT05FU19DT1VOVCA9IEZsYW1lQm9uZU5hbWVzLmxlbmd0aDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIFRZVm9pY2VDaGF0U3RhdGUsXHJcbiAgICBBUktpdEJsZW5kc2hhcGVzLFxyXG4gICAgRmxhbWVCb25lTmFtZXMsXHJcbiAgICBBUktJVF9CTEVORFNIQVBFU19DT1VOVCxcclxuICAgIEZMQU1FX0JPTkVTX0NPVU5UXHJcbn07XHJcbiIsIi8qKlxyXG4gKiBBbmltYXRpb25NYW5hZ2VyXHJcbiAqIFxyXG4gKiBEZXJpdmVkIGZyb20gZ2F1c3NpYW4tc3BsYXQtcmVuZGVyZXItZm9yLWxhbVxyXG4gKiBNYW5hZ2VzIGFuaW1hdGlvbiBzdGF0ZSBtYWNoaW5lIHdpdGggVGhyZWUuanMgQW5pbWF0aW9uTWl4ZXIuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgTG9vcE9uY2UsIExvb3BSZXBlYXQgfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7IFRZVm9pY2VDaGF0U3RhdGUgfSBmcm9tICcuL0FwcENvbnN0YW50cy5qcyc7XHJcblxyXG4vKipcclxuICogQmFzZSBTdGF0ZSBjbGFzcyBmb3IgYW5pbWF0aW9uIHN0YXRlc1xyXG4gKi9cclxuY2xhc3MgU3RhdGUge1xyXG4gICAgY29uc3RydWN0b3IoYWN0aW9ucywgaXNHcm91cCkge1xyXG4gICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdGFnZSA9IDA7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gYWN0aW9ucyB8fCBbXTtcclxuICAgICAgICB0aGlzLmJsZW5kaW5nVGltZSA9IDAuNTtcclxuICAgICAgICB0aGlzLmlzR3JvdXAgPSBpc0dyb3VwIHx8IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHN0YXRlKSB7XHJcbiAgICAgICAgLy8gT3ZlcnJpZGUgaW4gc3ViY2xhc3Nlc1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogSGVsbG8gc3RhdGUgLSBpbml0aWFsIGdyZWV0aW5nIGFuaW1hdGlvblxyXG4gKi9cclxuY2xhc3MgSGVsbG8gZXh0ZW5kcyBTdGF0ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihhY3Rpb25zLCBpc0dyb3VwKSB7XHJcbiAgICAgICAgc3VwZXIoYWN0aW9ucywgaXNHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHN0YXRlKSB7XHJcbiAgICAgICAgLy8gU2FmZXR5IGNoZWNrOiByZXR1cm4gZWFybHkgaWYgbm8gYWN0aW9ucyBhdmFpbGFibGVcclxuICAgICAgICBpZiAoIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKEFuaW1hdGlvbk1hbmFnZXIuQ3VyUGxheWluZyA9PT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIHN0YXRlID09PSBUWVZvaWNlQ2hhdFN0YXRlLklkbGUgJiZcclxuICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2UgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0udGltZSA9IDA7XHJcbiAgICAgICAgICAgIEFuaW1hdGlvbk1hbmFnZXIuU2V0V2VpZ2h0KHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXSwgMS4wKTtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLmxvb3AgPSBMb29wUmVwZWF0O1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0uY2xhbXBXaGVuRmluaXNoZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLnBhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0ucGxheSgpO1xyXG4gICAgICAgICAgICBpZiAoQW5pbWF0aW9uTWFuYWdlci5MYXN0QWN0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIEFuaW1hdGlvbk1hbmFnZXIuUHJlcGFyZUNyb3NzRmFkZShBbmltYXRpb25NYW5hZ2VyLkxhc3RBY3Rpb24sIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXSwgdGhpcy5ibGVuZGluZ1RpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChBbmltYXRpb25NYW5hZ2VyLkN1clBsYXlpbmcgPT09IFRZVm9pY2VDaGF0U3RhdGUuSWRsZSAmJlxyXG4gICAgICAgICAgICBzdGF0ZSA9PT0gVFlWb2ljZUNoYXRTdGF0ZS5JZGxlICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0udGltZSA+XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0uZ2V0Q2xpcCgpLmR1cmF0aW9uIC0gdGhpcy5ibGVuZGluZ1RpbWUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBuZXh0U3RhZ2UgPSB0aGlzLnN0YWdlICsgMTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXh0U3RhZ2UgPj0gdGhpcy5hY3Rpb25zLmxlbmd0aCkgbmV4dFN0YWdlID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uc1tuZXh0U3RhZ2VdLnRpbWUgPSAwO1xyXG4gICAgICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5TZXRXZWlnaHQodGhpcy5hY3Rpb25zW25leHRTdGFnZV0sIDEuMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbnNbbmV4dFN0YWdlXS5sb29wID0gTG9vcFJlcGVhdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uc1tuZXh0U3RhZ2VdLnBsYXkoKTtcclxuICAgICAgICAgICAgICAgIEFuaW1hdGlvbk1hbmFnZXIuUHJlcGFyZUNyb3NzRmFkZSh0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0sIHRoaXMuYWN0aW9uc1tuZXh0U3RhZ2VdLCB0aGlzLmJsZW5kaW5nVGltZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlID0gbmV4dFN0YWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogSWRsZSBzdGF0ZSAtIHJlc3RpbmcgYW5pbWF0aW9uXHJcbiAqL1xyXG5jbGFzcyBJZGxlIGV4dGVuZHMgU3RhdGUge1xyXG4gICAgY29uc3RydWN0b3IoYWN0aW9ucywgaXNHcm91cCkge1xyXG4gICAgICAgIHN1cGVyKGFjdGlvbnMsIGlzR3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZShzdGF0ZSkge1xyXG4gICAgICAgIC8vIFNhZmV0eSBjaGVjazogcmV0dXJuIGVhcmx5IGlmIG5vIGFjdGlvbnMgYXZhaWxhYmxlXHJcbiAgICAgICAgaWYgKCF0aGlzLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChBbmltYXRpb25NYW5hZ2VyLkN1clBsYXlpbmcgPT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICBzdGF0ZSA9PT0gVFlWb2ljZUNoYXRTdGF0ZS5JZGxlICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YWdlID0gMDtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLnRpbWUgPSAwO1xyXG4gICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLlNldFdlaWdodCh0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0sIDEuMCk7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS5sb29wID0gTG9vcFJlcGVhdDtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLmNsYW1wV2hlbkZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS5wYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLnBsYXkoKTtcclxuICAgICAgICAgICAgaWYgKEFuaW1hdGlvbk1hbmFnZXIuTGFzdEFjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLlByZXBhcmVDcm9zc0ZhZGUoQW5pbWF0aW9uTWFuYWdlci5MYXN0QWN0aW9uLCB0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0sIHRoaXMuYmxlbmRpbmdUaW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQW5pbWF0aW9uTWFuYWdlci5DdXJQbGF5aW5nID09PSBUWVZvaWNlQ2hhdFN0YXRlLklkbGUgJiZcclxuICAgICAgICAgICAgc3RhdGUgIT09IFRZVm9pY2VDaGF0U3RhdGUuSWRsZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzUGxheWluZyA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLnN0YWdlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS5sb29wID0gTG9vcE9uY2U7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS5jbGFtcFdoZW5GaW5pc2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFuaW1hdGlvbk1hbmFnZXIuTGFzdEFjdGlvbiA9IHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMaXN0ZW4gc3RhdGUgLSBsaXN0ZW5pbmcgYW5pbWF0aW9uXHJcbiAqL1xyXG5jbGFzcyBMaXN0ZW4gZXh0ZW5kcyBTdGF0ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihhY3Rpb25zLCBpc0dyb3VwKSB7XHJcbiAgICAgICAgc3VwZXIoYWN0aW9ucywgaXNHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHN0YXRlKSB7XHJcbiAgICAgICAgLy8gU2FmZXR5IGNoZWNrOiByZXR1cm4gZWFybHkgaWYgbm8gYWN0aW9ucyBhdmFpbGFibGVcclxuICAgICAgICBpZiAoIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKEFuaW1hdGlvbk1hbmFnZXIuQ3VyUGxheWluZyA9PT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIHN0YXRlID09PSBUWVZvaWNlQ2hhdFN0YXRlLkxpc3RlbmluZyAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzUGxheWluZyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS50aW1lID0gMDtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLnBsYXkoKTtcclxuICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5TZXRXZWlnaHQodGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLCAxLjApO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0ubG9vcCA9IHRoaXMuaXNHcm91cCA/IExvb3BPbmNlIDogTG9vcFJlcGVhdDtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLmNsYW1wV2hlbkZpbmlzaGVkID0gdGhpcy5pc0dyb3VwID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoQW5pbWF0aW9uTWFuYWdlci5MYXN0QWN0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIEFuaW1hdGlvbk1hbmFnZXIuUHJlcGFyZUNyb3NzRmFkZShBbmltYXRpb25NYW5hZ2VyLkxhc3RBY3Rpb24sIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXSwgdGhpcy5ibGVuZGluZ1RpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKEFuaW1hdGlvbk1hbmFnZXIuQ3VyUGxheWluZyA9PT0gVFlWb2ljZUNoYXRTdGF0ZS5MaXN0ZW5pbmcgJiZcclxuICAgICAgICAgICAgICAgIHN0YXRlID09PSBUWVZvaWNlQ2hhdFN0YXRlLkxpc3RlbmluZyAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPT09IHRydWUgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2UgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0udGltZSA+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLmdldENsaXAoKS5kdXJhdGlvbiAtIHRoaXMuYmxlbmRpbmdUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2UgKyAxXS50aW1lID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLlNldFdlaWdodCh0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZSArIDFdLCAxLjApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlICsgMV0ubG9vcCA9IExvb3BSZXBlYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2UgKyAxXS5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5QcmVwYXJlQ3Jvc3NGYWRlKHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXSwgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2UgKyAxXSwgdGhpcy5ibGVuZGluZ1RpbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2UgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoQW5pbWF0aW9uTWFuYWdlci5DdXJQbGF5aW5nID09PSBUWVZvaWNlQ2hhdFN0YXRlLkxpc3RlbmluZyAmJlxyXG4gICAgICAgICAgICAgICAgc3RhdGUgIT09IFRZVm9pY2VDaGF0U3RhdGUuTGlzdGVuaW5nICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUGxheWluZyA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgICAgICAgKHRoaXMuc3RhZ2UgPT09IDAgfHwgdGhpcy5zdGFnZSA9PT0gMSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uc1syXS50aW1lID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uc1syXS5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLlNldFdlaWdodCh0aGlzLmFjdGlvbnNbMl0sIDEuMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbnNbMl0ubG9vcCA9IExvb3BPbmNlO1xyXG4gICAgICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5QcmVwYXJlQ3Jvc3NGYWRlKHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXSwgdGhpcy5hY3Rpb25zWzJdLCB0aGlzLmJsZW5kaW5nVGltZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlID0gMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFuaW1hdGlvbk1hbmFnZXIuQ3VyUGxheWluZyA9PT0gVFlWb2ljZUNoYXRTdGF0ZS5MaXN0ZW5pbmcgJiZcclxuICAgICAgICAgICAgc3RhdGUgIT09IFRZVm9pY2VDaGF0U3RhdGUuTGlzdGVuaW5nICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID09PSB0cnVlICYmXHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2UgPT09ICh0aGlzLmlzR3JvdXAgPyB0aGlzLmFjdGlvbnMubGVuZ3RoIC0gMSA6IDApKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS5sb29wID0gTG9vcE9uY2U7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS5jbGFtcFdoZW5GaW5pc2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFuaW1hdGlvbk1hbmFnZXIuTGFzdEFjdGlvbiA9IHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGluayBzdGF0ZSAtIHRoaW5raW5nIGFuaW1hdGlvblxyXG4gKi9cclxuY2xhc3MgVGhpbmsgZXh0ZW5kcyBTdGF0ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihhY3Rpb25zLCBpc0dyb3VwKSB7XHJcbiAgICAgICAgc3VwZXIoYWN0aW9ucywgaXNHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHN0YXRlKSB7XHJcbiAgICAgICAgLy8gU2FmZXR5IGNoZWNrOiByZXR1cm4gZWFybHkgaWYgbm8gYWN0aW9ucyBhdmFpbGFibGVcclxuICAgICAgICBpZiAoIXRoaXMuYWN0aW9ucyB8fCB0aGlzLmFjdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKEFuaW1hdGlvbk1hbmFnZXIuQ3VyUGxheWluZyA9PT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIHN0YXRlID09PSBUWVZvaWNlQ2hhdFN0YXRlLlRoaW5raW5nICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YWdlID0gMDtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLnRpbWUgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0ucGxheSgpO1xyXG4gICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLlNldFdlaWdodCh0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0sIDEuMCk7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS5sb29wID0gTG9vcE9uY2U7XHJcbiAgICAgICAgICAgIGlmIChBbmltYXRpb25NYW5hZ2VyLkxhc3RBY3Rpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5QcmVwYXJlQ3Jvc3NGYWRlKEFuaW1hdGlvbk1hbmFnZXIuTGFzdEFjdGlvbiwgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLCB0aGlzLmJsZW5kaW5nVGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNHcm91cCkge1xyXG4gICAgICAgICAgICBpZiAoQW5pbWF0aW9uTWFuYWdlci5DdXJQbGF5aW5nID09PSBUWVZvaWNlQ2hhdFN0YXRlLlRoaW5raW5nICYmXHJcbiAgICAgICAgICAgICAgICBzdGF0ZSA9PT0gVFlWb2ljZUNoYXRTdGF0ZS5UaGlua2luZyAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPT09IHRydWUgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2UgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0udGltZSA+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLmdldENsaXAoKS5kdXJhdGlvbiAtIHRoaXMuYmxlbmRpbmdUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2UgKyAxXS50aW1lID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLlNldFdlaWdodCh0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZSArIDFdLCAxLjApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlICsgMV0ubG9vcCA9IExvb3BSZXBlYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2UgKyAxXS5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5QcmVwYXJlQ3Jvc3NGYWRlKHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXSwgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2UgKyAxXSwgdGhpcy5ibGVuZGluZ1RpbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2UgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoQW5pbWF0aW9uTWFuYWdlci5DdXJQbGF5aW5nID09PSBUWVZvaWNlQ2hhdFN0YXRlLlRoaW5raW5nICYmXHJcbiAgICAgICAgICAgICAgICBzdGF0ZSAhPT0gVFlWb2ljZUNoYXRTdGF0ZS5UaGlua2luZyAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPT09IHRydWUgJiZcclxuICAgICAgICAgICAgICAgICh0aGlzLnN0YWdlID09PSAwIHx8IHRoaXMuc3RhZ2UgPT09IDEpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbnNbMl0udGltZSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbnNbMl0ucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5TZXRXZWlnaHQodGhpcy5hY3Rpb25zWzJdLCAxLjApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25zWzJdLmxvb3AgPSBMb29wT25jZTtcclxuICAgICAgICAgICAgICAgIEFuaW1hdGlvbk1hbmFnZXIuUHJlcGFyZUNyb3NzRmFkZSh0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0sIHRoaXMuYWN0aW9uc1syXSwgdGhpcy5ibGVuZGluZ1RpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZSA9IDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChBbmltYXRpb25NYW5hZ2VyLkN1clBsYXlpbmcgPT09IFRZVm9pY2VDaGF0U3RhdGUuVGhpbmtpbmcgJiZcclxuICAgICAgICAgICAgc3RhdGUgIT09IFRZVm9pY2VDaGF0U3RhdGUuVGhpbmtpbmcgJiZcclxuICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPT09IHRydWUgJiZcclxuICAgICAgICAgICAgdGhpcy5zdGFnZSA9PT0gKHRoaXMuaXNHcm91cCA/IHRoaXMuYWN0aW9ucy5sZW5ndGggLSAxIDogMCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLmxvb3AgPSBMb29wT25jZTtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLmNsYW1wV2hlbkZpbmlzaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5MYXN0QWN0aW9uID0gdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFNwZWFrIHN0YXRlIC0gc3BlYWtpbmcgYW5pbWF0aW9uIHdpdGggcmFuZG9tIG1vdmVtZW50IHNlbGVjdGlvblxyXG4gKi9cclxuY2xhc3MgU3BlYWsgZXh0ZW5kcyBTdGF0ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihhY3Rpb25zLCBpc0dyb3VwKSB7XHJcbiAgICAgICAgc3VwZXIoYWN0aW9ucywgaXNHcm91cCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1tTUEVBS10gSW5pdGlhbGl6ZWQgd2l0aCcsIGFjdGlvbnM/Lmxlbmd0aCB8fCAwLCAnYWN0aW9ucywgaXNHcm91cDonLCBpc0dyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhIHJhbmRvbSBudW1iZXIgaW4gcmFuZ2UgW21pbiwgbWF4XVxyXG4gICAgICovXHJcbiAgICBnZXRSYW5kb21OdW1iZXIobWF4LCBtaW4pIHtcclxuICAgICAgICBjb25zdCByYW5nZSA9IG1heCAtIG1pbjtcclxuICAgICAgICByZXR1cm4gbWluICsgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogcmFuZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZShzdGF0ZSkge1xyXG4gICAgICAgIC8vIFNhZmV0eSBjaGVjazogcmV0dXJuIGVhcmx5IGlmIG5vIGFjdGlvbnMgYXZhaWxhYmxlXHJcbiAgICAgICAgaWYgKCF0aGlzLmFjdGlvbnMgfHwgdGhpcy5hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dhcm5lZE5vQWN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdbU1BFQUtdIE5vIGFjdGlvbnMgYXZhaWxhYmxlIScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd2FybmVkTm9BY3Rpb25zID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFN0YXJ0IHNwZWFraW5nIC0gcGljayBhIHJhbmRvbSBhbmltYXRpb25cclxuICAgICAgICBpZiAoQW5pbWF0aW9uTWFuYWdlci5DdXJQbGF5aW5nID09PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgc3RhdGUgPT09IFRZVm9pY2VDaGF0U3RhdGUuUmVzcG9uZGluZyAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzUGxheWluZyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgLy8gUmFuZG9tbHkgc2VsZWN0IGluaXRpYWwgYW5pbWF0aW9uXHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2UgPSBNYXRoLmNlaWwodGhpcy5nZXRSYW5kb21OdW1iZXIoMCwgdGhpcy5hY3Rpb25zLmxlbmd0aCAtIDEpKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTUEVBS10gU3RhcnRpbmcgYW5pbWF0aW9uLCBzdGFnZTonLCB0aGlzLnN0YWdlLCAnb2YnLCB0aGlzLmFjdGlvbnMubGVuZ3RoKTtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLnRpbWUgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0ucGxheSgpO1xyXG4gICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLlNldFdlaWdodCh0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0sIDEuMCk7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS5sb29wID0gTG9vcE9uY2U7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS5jbGFtcFdoZW5GaW5pc2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChBbmltYXRpb25NYW5hZ2VyLkxhc3RBY3Rpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5QcmVwYXJlQ3Jvc3NGYWRlKEFuaW1hdGlvbk1hbmFnZXIuTGFzdEFjdGlvbiwgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLCB0aGlzLmJsZW5kaW5nVGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ29udGludWUgc3BlYWtpbmcgLSBjeWNsZSB0aHJvdWdoIHJhbmRvbSBhbmltYXRpb25zXHJcbiAgICAgICAgaWYgKEFuaW1hdGlvbk1hbmFnZXIuQ3VyUGxheWluZyA9PT0gVFlWb2ljZUNoYXRTdGF0ZS5SZXNwb25kaW5nICYmXHJcbiAgICAgICAgICAgIHN0YXRlID09PSBUWVZvaWNlQ2hhdFN0YXRlLlJlc3BvbmRpbmcgJiZcclxuICAgICAgICAgICAgdGhpcy5pc1BsYXlpbmcgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS50aW1lID49XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0uZ2V0Q2xpcCgpLmR1cmF0aW9uIC0gdGhpcy5ibGVuZGluZ1RpbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RBY3Rpb24gPSB0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV07XHJcbiAgICAgICAgICAgICAgICAvLyBQaWNrIGEgZGlmZmVyZW50IHJhbmRvbSBhbmltYXRpb25cclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2UgPSAodGhpcy5zdGFnZSArIE1hdGguY2VpbCh0aGlzLmdldFJhbmRvbU51bWJlcigxLCB0aGlzLmFjdGlvbnMubGVuZ3RoIC0gMSkpKSAlIHRoaXMuYWN0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NQRUFLXSBDeWNsaW5nIHRvIG5leHQgYW5pbWF0aW9uLCBzdGFnZTonLCB0aGlzLnN0YWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS50aW1lID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLlNldFdlaWdodCh0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0sIDEuMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0ubG9vcCA9IExvb3BPbmNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25zW3RoaXMuc3RhZ2VdLmNsYW1wV2hlbkZpbmlzaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIEFuaW1hdGlvbk1hbmFnZXIuUHJlcGFyZUNyb3NzRmFkZShsYXN0QWN0aW9uLCB0aGlzLmFjdGlvbnNbdGhpcy5zdGFnZV0sIHRoaXMuYmxlbmRpbmdUaW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU3RvcCBzcGVha2luZyAtIGZpbmlzaCBjdXJyZW50IGFuaW1hdGlvblxyXG4gICAgICAgIGlmIChBbmltYXRpb25NYW5hZ2VyLkN1clBsYXlpbmcgPT09IFRZVm9pY2VDaGF0U3RhdGUuUmVzcG9uZGluZyAmJlxyXG4gICAgICAgICAgICBzdGF0ZSAhPT0gVFlWb2ljZUNoYXRTdGF0ZS5SZXNwb25kaW5nICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS5sb29wID0gTG9vcE9uY2U7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXS5jbGFtcFdoZW5GaW5pc2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFuaW1hdGlvbk1hbmFnZXIuTGFzdEFjdGlvbiA9IHRoaXMuYWN0aW9uc1t0aGlzLnN0YWdlXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbmltYXRpb25NYW5hZ2VyIC0gTWFpbiBhbmltYXRpb24gY29udHJvbGxlclxyXG4gKiBNYW5hZ2VzIHN0YXRlIG1hY2hpbmUgd2l0aCBjcm9zc2ZhZGUgdHJhbnNpdGlvbnMgYmV0d2VlbiBhbmltYXRpb24gc3RhdGVzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uTWFuYWdlciB7XHJcbiAgICAvLyBTdGF0aWMgcHJvcGVydGllc1xyXG4gICAgc3RhdGljIElzQmxlbmRpbmcgPSBmYWxzZTtcclxuICAgIHN0YXRpYyBhY3Rpb25zID0gW107XHJcbiAgICBzdGF0aWMgTmVlZFJlc2V0ID0gZmFsc2U7XHJcbiAgICBzdGF0aWMgTmVlZEZ1bGxSZXNldCA9IGZhbHNlO1xyXG4gICAgc3RhdGljIExhc3RBY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgICBzdGF0aWMgQ3VyUGxheWluZyA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhbmltYXRpb24gYWN0aW9uIHdlaWdodFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgU2V0V2VpZ2h0KGFjdGlvbiwgd2VpZ2h0KSB7XHJcbiAgICAgICAgYWN0aW9uLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGFjdGlvbi5zZXRFZmZlY3RpdmVUaW1lU2NhbGUoMSk7XHJcbiAgICAgICAgYWN0aW9uLnNldEVmZmVjdGl2ZVdlaWdodCh3ZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlcGFyZSBjcm9zc2ZhZGUgYmV0d2VlbiB0d28gYWN0aW9uc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgUHJlcGFyZUNyb3NzRmFkZShzdGFydEFjdGlvbiwgZW5kQWN0aW9uLCBkZWZhdWx0RHVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGRlZmF1bHREdXJhdGlvbjtcclxuICAgICAgICBBbmltYXRpb25NYW5hZ2VyLlVuUGF1c2VBbGxBY3Rpb25zKCk7XHJcbiAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5FeGVjdXRlQ3Jvc3NGYWRlKHN0YXJ0QWN0aW9uLCBlbmRBY3Rpb24sIGR1cmF0aW9uKTtcclxuICAgICAgICBBbmltYXRpb25NYW5hZ2VyLklzQmxlbmRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLklzQmxlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCBkZWZhdWx0RHVyYXRpb24gKyAwLjEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2UgYWxsIGFuaW1hdGlvbiBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBQYXVzZUFsbEFjdGlvbnMoKSB7XHJcbiAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5hY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGFjdGlvbi5wYXVzZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5wYXVzZSBhbGwgYW5pbWF0aW9uIGFjdGlvbnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIFVuUGF1c2VBbGxBY3Rpb25zKCkge1xyXG4gICAgICAgIEFuaW1hdGlvbk1hbmFnZXIuYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGFjdGlvbikge1xyXG4gICAgICAgICAgICBhY3Rpb24ucGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFeGVjdXRlIGNyb3NzZmFkZSBiZXR3ZWVuIHR3byBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBFeGVjdXRlQ3Jvc3NGYWRlKHN0YXJ0QWN0aW9uLCBlbmRBY3Rpb24sIGR1cmF0aW9uKSB7XHJcbiAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5TZXRXZWlnaHQoZW5kQWN0aW9uLCAxKTtcclxuICAgICAgICBlbmRBY3Rpb24udGltZSA9IDA7XHJcbiAgICAgICAgc3RhcnRBY3Rpb24uY3Jvc3NGYWRlVG8oZW5kQWN0aW9uLCBkdXJhdGlvbiwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIHtUSFJFRS5BbmltYXRpb25NaXhlcn0gbWl4ZXIgLSBUaHJlZS5qcyBhbmltYXRpb24gbWl4ZXJcclxuICAgICAqIEBwYXJhbSB7VEhSRUUuQW5pbWF0aW9uQ2xpcFtdfSBhbmltYXRpb25zIC0gQW5pbWF0aW9uIGNsaXBzXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYW5pbWF0aW9uY2ZnIC0gQW5pbWF0aW9uIGNvbmZpZ3VyYXRpb25cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IobWl4ZXIsIGFuaW1hdGlvbnMsIGFuaW1hdGlvbmNmZykge1xyXG4gICAgICAgIGNvbnN0IGhlbGxvQWN0aW9ucyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGlkbGVBY3Rpb25zID0gW107XHJcbiAgICAgICAgY29uc3QgbGlzdGVuQWN0aW9ucyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNwZWFrQWN0aW9ucyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHRoaW5rQWN0aW9ucyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLm1peGVyID0gbWl4ZXI7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSBhY3Rpb24gaW5kaWNlcyBiYXNlZCBvbiBjb25maWdcclxuICAgICAgICBjb25zdCBoZWxsb0lkeCA9IGFuaW1hdGlvbmNmZz8uaGVsbG8/LnNpemUgfHwgMDtcclxuICAgICAgICBjb25zdCBpZGxlSWR4ID0gKGFuaW1hdGlvbmNmZz8uaWRsZT8uc2l6ZSB8fCAwKSArIGhlbGxvSWR4O1xyXG4gICAgICAgIGNvbnN0IGxpc3RlbklkeCA9IChhbmltYXRpb25jZmc/Lmxpc3Rlbj8uc2l6ZSB8fCAwKSArIGlkbGVJZHg7XHJcbiAgICAgICAgY29uc3Qgc3BlYWtJZHggPSAoYW5pbWF0aW9uY2ZnPy5zcGVhaz8uc2l6ZSB8fCAwKSArIGxpc3RlbklkeDtcclxuICAgICAgICBjb25zdCB0aGlua0lkeCA9IChhbmltYXRpb25jZmc/LnRoaW5rPy5zaXplIHx8IDApICsgc3BlYWtJZHg7XHJcblxyXG4gICAgICAgIC8vIERpc3RyaWJ1dGUgYW5pbWF0aW9uIGNsaXBzIHRvIHN0YXRlIGFjdGlvbiBhcnJheXNcclxuICAgICAgICBpZiAoYW5pbWF0aW9ucyAmJiBhbmltYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmltYXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbGlwID0gYW5pbWF0aW9uc1tpXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IG1peGVyLmNsaXBBY3Rpb24oY2xpcCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGkgPCBoZWxsb0lkeCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlbGxvQWN0aW9ucy5wdXNoKGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPCBpZGxlSWR4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWRsZUFjdGlvbnMucHVzaChhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIER1cGxpY2F0ZSBmb3Igc3RhdGVzIHRoYXQgc2hhcmUgaWRsZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5JZHggPT09IGlkbGVJZHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuQWN0aW9ucy5wdXNoKG1peGVyLmNsaXBBY3Rpb24oY2xpcC5jbG9uZSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcGVha0lkeCA9PT0gbGlzdGVuSWR4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWFrQWN0aW9ucy5wdXNoKG1peGVyLmNsaXBBY3Rpb24oY2xpcC5jbG9uZSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlua0lkeCA9PT0gc3BlYWtJZHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpbmtBY3Rpb25zLnB1c2gobWl4ZXIuY2xpcEFjdGlvbihjbGlwLmNsb25lKCkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPCBsaXN0ZW5JZHgpIHtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5BY3Rpb25zLnB1c2goYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IHNwZWFrSWR4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3BlYWtBY3Rpb25zLnB1c2goYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IHRoaW5rSWR4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpbmtBY3Rpb25zLnB1c2goYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLmFjdGlvbnMucHVzaChhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5TZXRXZWlnaHQoYWN0aW9uLCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHN0YXRlIGluc3RhbmNlc1xyXG4gICAgICAgIHRoaXMuaGVsbG8gPSBuZXcgSGVsbG8oaGVsbG9BY3Rpb25zLCBhbmltYXRpb25jZmc/LmhlbGxvPy5pc0dyb3VwIHx8IGZhbHNlKTtcclxuICAgICAgICB0aGlzLmlkbGUgPSBuZXcgSWRsZShpZGxlQWN0aW9ucywgYW5pbWF0aW9uY2ZnPy5pZGxlPy5pc0dyb3VwIHx8IGZhbHNlKTtcclxuICAgICAgICB0aGlzLmxpc3RlbiA9IG5ldyBMaXN0ZW4obGlzdGVuQWN0aW9ucywgYW5pbWF0aW9uY2ZnPy5saXN0ZW4/LmlzR3JvdXAgfHwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudGhpbmsgPSBuZXcgVGhpbmsodGhpbmtBY3Rpb25zLCBhbmltYXRpb25jZmc/LnRoaW5rPy5pc0dyb3VwIHx8IGZhbHNlKTtcclxuICAgICAgICB0aGlzLnNwZWFrID0gbmV3IFNwZWFrKHNwZWFrQWN0aW9ucywgYW5pbWF0aW9uY2ZnPy5zcGVhaz8uaXNHcm91cCB8fCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgY3VycmVudGx5IHBsYXlpbmcgc3RhdGVcclxuICAgICAqL1xyXG4gICAgY3VyUGxheWluZygpIHtcclxuICAgICAgICBpZiAodGhpcy5oZWxsby5pc1BsYXlpbmcpIHJldHVybiBUWVZvaWNlQ2hhdFN0YXRlLklkbGU7XHJcbiAgICAgICAgaWYgKHRoaXMuaWRsZS5pc1BsYXlpbmcpIHJldHVybiBUWVZvaWNlQ2hhdFN0YXRlLklkbGU7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuLmlzUGxheWluZykgcmV0dXJuIFRZVm9pY2VDaGF0U3RhdGUuTGlzdGVuaW5nO1xyXG4gICAgICAgIGlmICh0aGlzLnRoaW5rLmlzUGxheWluZykgcmV0dXJuIFRZVm9pY2VDaGF0U3RhdGUuVGhpbmtpbmc7XHJcbiAgICAgICAgaWYgKHRoaXMuc3BlYWsuaXNQbGF5aW5nKSByZXR1cm4gVFlWb2ljZUNoYXRTdGF0ZS5SZXNwb25kaW5nO1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGFuaW1hdGlvbiBtYW5hZ2VyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5oZWxsby5kaXNwb3NlKCk7XHJcbiAgICAgICAgdGhpcy5pZGxlLmRpc3Bvc2UoKTtcclxuICAgICAgICB0aGlzLmxpc3Rlbi5kaXNwb3NlKCk7XHJcbiAgICAgICAgdGhpcy50aGluay5kaXNwb3NlKCk7XHJcbiAgICAgICAgdGhpcy5zcGVhay5kaXNwb3NlKCk7XHJcbiAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5hY3Rpb25zID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldCBhbGwgYW5pbWF0aW9uIGFjdGlvbnNcclxuICAgICAqL1xyXG4gICAgcmVzZXRBbGxBY3Rpb25zKGlnbm9yZUJsZW5kaW5nID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCBjdXJQbGF5aW5nID0gdGhpcy5jdXJQbGF5aW5nKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3dpdGNoIChjdXJQbGF5aW5nKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVFlWb2ljZUNoYXRTdGF0ZS5JZGxlOlxyXG4gICAgICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5MYXN0QWN0aW9uID0gdGhpcy5oZWxsby5hY3Rpb25zW3RoaXMuaGVsbG8uc3RhZ2VdO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVFlWb2ljZUNoYXRTdGF0ZS5MaXN0ZW5pbmc6XHJcbiAgICAgICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLkxhc3RBY3Rpb24gPSB0aGlzLmxpc3Rlbi5hY3Rpb25zW3RoaXMubGlzdGVuLnN0YWdlXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFRZVm9pY2VDaGF0U3RhdGUuVGhpbmtpbmc6XHJcbiAgICAgICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLkxhc3RBY3Rpb24gPSB0aGlzLnRoaW5rLmFjdGlvbnNbdGhpcy50aGluay5zdGFnZV07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBUWVZvaWNlQ2hhdFN0YXRlLlJlc3BvbmRpbmc6XHJcbiAgICAgICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLkxhc3RBY3Rpb24gPSB0aGlzLnNwZWFrLmFjdGlvbnNbdGhpcy5zcGVhay5zdGFnZV07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIEFuaW1hdGlvbk1hbmFnZXIuTGFzdEFjdGlvbiA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFuaW1hdGlvbk1hbmFnZXIuTGFzdEFjdGlvbikge1xyXG4gICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLkxhc3RBY3Rpb24ubG9vcCA9IExvb3BPbmNlO1xyXG4gICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLkxhc3RBY3Rpb24uY2xhbXBXaGVuRmluaXNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLlNldFdlaWdodChBbmltYXRpb25NYW5hZ2VyLkxhc3RBY3Rpb24sIDEuMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWdub3JlQmxlbmRpbmcpIHtcclxuICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5QYXVzZUFsbEFjdGlvbnMoKTtcclxuICAgICAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5hY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhY3Rpb24udGltZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLlNldFdlaWdodChhY3Rpb24sIDAuMCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBBbmltYXRpb25NYW5hZ2VyLkxhc3RBY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmhlbGxvLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaWRsZS5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxpc3Rlbi5pc1BsYXlpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRoaW5rLmlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3BlYWsuaXNQbGF5aW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgYW5pbWF0aW9uIHN0YXRlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgLSBUYXJnZXQgc3RhdGUgKFRZVm9pY2VDaGF0U3RhdGUpXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZShzdGF0ZSkge1xyXG4gICAgICAgIGlmIChBbmltYXRpb25NYW5hZ2VyLklzQmxlbmRpbmcpIHJldHVybjtcclxuXHJcbiAgICAgICAgQW5pbWF0aW9uTWFuYWdlci5DdXJQbGF5aW5nID0gdGhpcy5jdXJQbGF5aW5nKCk7XHJcblxyXG4gICAgICAgIGlmIChBbmltYXRpb25NYW5hZ2VyLkN1clBsYXlpbmcgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFRZVm9pY2VDaGF0U3RhdGUuSWRsZTpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlkbGUudXBkYXRlKHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgVFlWb2ljZUNoYXRTdGF0ZS5MaXN0ZW5pbmc6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0ZW4udXBkYXRlKHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgVFlWb2ljZUNoYXRTdGF0ZS5UaGlua2luZzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRoaW5rLnVwZGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFRZVm9pY2VDaGF0U3RhdGUuUmVzcG9uZGluZzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwZWFrLnVwZGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaWRsZS51cGRhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3dpdGNoIChBbmltYXRpb25NYW5hZ2VyLkN1clBsYXlpbmcpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgVFlWb2ljZUNoYXRTdGF0ZS5JZGxlOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaWRsZS51cGRhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBUWVZvaWNlQ2hhdFN0YXRlLkxpc3RlbmluZzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3Rlbi51cGRhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBUWVZvaWNlQ2hhdFN0YXRlLlRoaW5raW5nOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGhpbmsudXBkYXRlKHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgVFlWb2ljZUNoYXRTdGF0ZS5SZXNwb25kaW5nOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BlYWsudXBkYXRlKHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pZGxlLnVwZGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7IFN0YXRlLCBIZWxsbywgSWRsZSwgTGlzdGVuLCBUaGluaywgU3BlYWsgfTtcclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uTWFuYWdlcjtcclxuIiwiLyoqXHJcbiAqIFNwbGF0U2NlbmVcclxuICogXHJcbiAqIERlcml2ZWQgZnJvbSBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKiBcclxuICogVGhpcyBmaWxlIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IE1hdHJpeDQsIE9iamVjdDNELCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNwbGF0U2NlbmUgZXh0ZW5kcyBPYmplY3QzRCB7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioc3BsYXRCdWZmZXIsIHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKSwgcXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCksXHJcbiAgICAgICAgICAgICAgICBzY2FsZSA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpLCBtaW5pbXVtQWxwaGEgPSAxLCBvcGFjaXR5ID0gMS4wLCB2aXNpYmxlID0gdHJ1ZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5zcGxhdEJ1ZmZlciA9IHNwbGF0QnVmZmVyO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24uY29weShwb3NpdGlvbik7XHJcbiAgICAgICAgdGhpcy5xdWF0ZXJuaW9uLmNvcHkocXVhdGVybmlvbik7XHJcbiAgICAgICAgdGhpcy5zY2FsZS5jb3B5KHNjYWxlKTtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdGhpcy5taW5pbXVtQWxwaGEgPSBtaW5pbXVtQWxwaGE7XHJcbiAgICAgICAgdGhpcy5vcGFjaXR5ID0gb3BhY2l0eTtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSB2aXNpYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlUcmFuc2Zvcm1EYXRhKG90aGVyU2NlbmUpIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkob3RoZXJTY2VuZS5wb3NpdGlvbik7XHJcbiAgICAgICAgdGhpcy5xdWF0ZXJuaW9uLmNvcHkob3RoZXJTY2VuZS5xdWF0ZXJuaW9uKTtcclxuICAgICAgICB0aGlzLnNjYWxlLmNvcHkob3RoZXJTY2VuZS5zY2FsZSk7XHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0uY29weShvdGhlclNjZW5lLnRyYW5zZm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVHJhbnNmb3JtKGR5bmFtaWNNb2RlKSB7XHJcbiAgICAgICAgaWYgKGR5bmFtaWNNb2RlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdHJpeFdvcmxkQXV0b1VwZGF0ZSkgdGhpcy51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmNvcHkodGhpcy5tYXRyaXhXb3JsZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWF0cml4QXV0b1VwZGF0ZSkgdGhpcy51cGRhdGVNYXRyaXgoKTtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uY29weSh0aGlzLm1hdHJpeCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiLyoqXHJcbiAqIFNwbGF0R2VvbWV0cnlcclxuICogXHJcbiAqIERlcml2ZWQgZnJvbSBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKiBcclxuICogVGhpcyBmaWxlIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEJ1ZmZlckF0dHJpYnV0ZSwgQnVmZmVyR2VvbWV0cnksIER5bmFtaWNEcmF3VXNhZ2UsIEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSwgSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgfSBmcm9tICd0aHJlZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgU3BsYXRHZW9tZXRyeSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCB0aGUgVGhyZWUuanMgZ2VvbWV0cnkgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBzcGxhdHMuIFRoZSBnZW9tZXRyeSBpcyBpbnN0YW5jZWQgYW5kIGlzIG1hZGUgdXAgb2ZcclxuICAgICAqIHZlcnRpY2VzIGZvciBhIHNpbmdsZSBxdWFkIGFzIHdlbGwgYXMgYW4gYXR0cmlidXRlIGJ1ZmZlciBmb3IgdGhlIHNwbGF0IGluZGV4ZXMuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4U3BsYXRDb3VudCBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3BsYXRzIHRoYXQgdGhlIGdlb21ldHJ5IHdpbGwgbmVlZCB0byBhY2NvbW9kYXRlXHJcbiAgICAgKiBAcmV0dXJuIHtUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGJ1aWxkKG1heFNwbGF0Q291bnQpIHtcclxuXHJcbiAgICAgICAgY29uc3QgYmFzZUdlb21ldHJ5ID0gbmV3IEJ1ZmZlckdlb21ldHJ5KCk7XHJcbiAgICAgICAgYmFzZUdlb21ldHJ5LnNldEluZGV4KFswLCAxLCAyLCAwLCAyLCAzXSk7XHJcblxyXG4gICAgICAgIC8vIFZlcnRpY2VzIGZvciB0aGUgaW5zdGFuY2VkIHF1YWRcclxuICAgICAgICBjb25zdCBwb3NpdGlvbnNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoNCAqIDMpO1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IG5ldyBCdWZmZXJBdHRyaWJ1dGUocG9zaXRpb25zQXJyYXksIDMpO1xyXG4gICAgICAgIGJhc2VHZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgcG9zaXRpb25zKTtcclxuICAgICAgICBwb3NpdGlvbnMuc2V0WFlaKDAsIC0xLjAsIC0xLjAsIDAuMCk7XHJcbiAgICAgICAgcG9zaXRpb25zLnNldFhZWigxLCAtMS4wLCAxLjAsIDAuMCk7XHJcbiAgICAgICAgcG9zaXRpb25zLnNldFhZWigyLCAxLjAsIDEuMCwgMC4wKTtcclxuICAgICAgICBwb3NpdGlvbnMuc2V0WFlaKDMsIDEuMCwgLTEuMCwgMC4wKTtcclxuICAgICAgICBwb3NpdGlvbnMubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSgpLmNvcHkoYmFzZUdlb21ldHJ5KTtcclxuXHJcbiAgICAgICAgLy8gU3BsYXQgaW5kZXggYnVmZmVyXHJcbiAgICAgICAgY29uc3Qgc3BsYXRJbmRleEFycmF5ID0gbmV3IFVpbnQzMkFycmF5KG1heFNwbGF0Q291bnQpO1xyXG5cclxuICAgICAgICBjb25zdCBzcGxhdEluZGV4ZXMgPSBuZXcgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKHNwbGF0SW5kZXhBcnJheSwgMSwgZmFsc2UpO1xyXG4gICAgICAgIHNwbGF0SW5kZXhlcy5zZXRVc2FnZShEeW5hbWljRHJhd1VzYWdlKTtcclxuICAgICAgICBnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoJ3NwbGF0SW5kZXgnLCBzcGxhdEluZGV4ZXMpO1xyXG5cclxuICAgICAgICBnZW9tZXRyeS5pbnN0YW5jZUNvdW50ID0gMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGdlb21ldHJ5O1xyXG4gICAgfVxyXG59IiwiLyoqXHJcbiAqIFNwbGF0VHJlZVxyXG4gKiBcclxuICogRGVyaXZlZCBmcm9tIEBta2tlbGxvZ2cvZ2F1c3NpYW4tc3BsYXRzLTNkIChNSVQgTGljZW5zZSlcclxuICogaHR0cHM6Ly9naXRodWIuY29tL21ra2VsbG9nZy9HYXVzc2lhblNwbGF0czNEXHJcbiAqIFxyXG4gKiBUaGlzIGZpbGUgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHsgZGVsYXllZEV4ZWN1dGUgfSBmcm9tICcuLi91dGlscy9VdGlsLmpzJztcclxuXHJcbi8vIFdvcmtlci1yZWxhdGVkIGZ1bmN0aW9ucyAoc2ltcGxpZmllZCBzdHVicyAtIHRoZSBhY3R1YWwgd29ya2VyIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkpXHJcbmNvbnN0IGNoZWNrQW5kQ3JlYXRlV29ya2VyID0gKCkgPT4ge1xyXG4gICAgLy8gV29ya2VyIGNyZWF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5jb25zdCB3b3JrZXJQcm9jZXNzQ2VudGVycyA9ICh3b3JrZXIsIGNlbnRlcnMsIGJ1ZmZlcnMsIG1heERlcHRoLCBtYXhDZW50ZXJzUGVyTm9kZSkgPT4ge1xyXG4gICAgLy8gV29ya2VyIG1lc3NhZ2UgcGFzc2luZ1xyXG4gICAgaWYgKHdvcmtlcikge1xyXG4gICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICdwcm9jZXNzJzoge1xyXG4gICAgICAgICAgICAgICAgJ2NlbnRlcnMnOiBjZW50ZXJzLFxyXG4gICAgICAgICAgICAgICAgJ21heERlcHRoJzogbWF4RGVwdGgsXHJcbiAgICAgICAgICAgICAgICAnbWF4Q2VudGVyc1Blck5vZGUnOiBtYXhDZW50ZXJzUGVyTm9kZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgYnVmZmVycyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vLyBTcGxhdFN1YlRyZWUgaGVscGVyIGNsYXNzXHJcbmNsYXNzIFNwbGF0U3ViVHJlZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnJvb3ROb2RlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNwbGF0TWVzaCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNvbnZlcnRXb3JrZXJTdWJUcmVlKHdvcmtlclN1YlRyZWUsIHNwbGF0TWVzaCkge1xyXG4gICAgICAgIGNvbnN0IHN1YlRyZWUgPSBuZXcgU3BsYXRTdWJUcmVlKCk7XHJcbiAgICAgICAgc3ViVHJlZS5yb290Tm9kZSA9IHdvcmtlclN1YlRyZWUucm9vdE5vZGU7XHJcbiAgICAgICAgc3ViVHJlZS5zcGxhdE1lc2ggPSBzcGxhdE1lc2g7XHJcbiAgICAgICAgcmV0dXJuIHN1YlRyZWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTcGxhdFRyZWUge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG1heERlcHRoLCBtYXhDZW50ZXJzUGVyTm9kZSkge1xyXG4gICAgICAgIHRoaXMubWF4RGVwdGggPSBtYXhEZXB0aDtcclxuICAgICAgICB0aGlzLm1heENlbnRlcnNQZXJOb2RlID0gbWF4Q2VudGVyc1Blck5vZGU7XHJcbiAgICAgICAgdGhpcy5zdWJUcmVlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3BsYXRNZXNoID0gbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZGlzcG9zZSgpIHtcclxuICAgICAgICB0aGlzLmRpcG9zZVNwbGF0VHJlZVdvcmtlcigpO1xyXG4gICAgICAgIHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGRpcG9zZVNwbGF0VHJlZVdvcmtlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zcGxhdFRyZWVXb3JrZXIpIHRoaXMuc3BsYXRUcmVlV29ya2VyLnRlcm1pbmF0ZSgpO1xyXG4gICAgICAgIHRoaXMuc3BsYXRUcmVlV29ya2VyID0gbnVsbDtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3QgdGhpcyBpbnN0YW5jZSBvZiBTcGxhdFRyZWUgZnJvbSBhbiBpbnN0YW5jZSBvZiBTcGxhdE1lc2guXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtTcGxhdE1lc2h9IHNwbGF0TWVzaCBUaGUgaW5zdGFuY2Ugb2YgU3BsYXRNZXNoIGZyb20gd2hpY2ggdG8gY29uc3RydWN0IHRoaXMgc3BsYXQgdHJlZS5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZpbHRlckZ1bmMgT3B0aW9uYWwgZnVuY3Rpb24gdG8gZmlsdGVyIG91dCB1bndhbnRlZCBzcGxhdHMuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbkluZGV4ZXNVcGxvYWQgRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHVwbG9hZCBvZiBzcGxhdCBjZW50ZXJzIHRvIHRoZSBzcGxhdCB0cmVlXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlciB3b3JrZXIgc3RhcnRzIGFuZCBmaW5pc2hlcy5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uU3BsYXRUcmVlQ29uc3RydWN0aW9uIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjb252ZXJzaW9uIG9mIHRoZSBsb2NhbCBzcGxhdCB0cmVlIGZyb21cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmb3JtYXQgcHJvZHVjZWQgYnkgdGhlIHNwbGF0IHRyZWUgYnVpbGRlciB3b3JrZXIgc3RhcnRzIGFuZCBlbmRzLlxyXG4gICAgICogQHJldHVybiB7dW5kZWZpbmVkfVxyXG4gICAgICovXHJcbiAgICBwcm9jZXNzU3BsYXRNZXNoID0gKHNwbGF0TWVzaCwgZmlsdGVyRnVuYyA9ICgpID0+IHRydWUsIG9uSW5kZXhlc1VwbG9hZCwgb25TcGxhdFRyZWVDb25zdHJ1Y3Rpb24pID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuc3BsYXRUcmVlV29ya2VyKSB0aGlzLnNwbGF0VHJlZVdvcmtlciA9IGNoZWNrQW5kQ3JlYXRlV29ya2VyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3BsYXRNZXNoID0gc3BsYXRNZXNoO1xyXG4gICAgICAgIHRoaXMuc3ViVHJlZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgICAgICBjb25zdCBhZGRDZW50ZXJzRm9yU2NlbmUgPSAoc3BsYXRPZmZzZXQsIHNwbGF0Q291bnQpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2NlbmVDZW50ZXJzID0gbmV3IEZsb2F0MzJBcnJheShzcGxhdENvdW50ICogNCk7XHJcbiAgICAgICAgICAgIGxldCBhZGRlZENvdW50ID0gMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxhdENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdsb2JhbFNwbGF0SW5kZXggPSBpICsgc3BsYXRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyRnVuYyhnbG9iYWxTcGxhdEluZGV4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNwbGF0TWVzaC5nZXRTcGxhdENlbnRlcihnbG9iYWxTcGxhdEluZGV4LCBjZW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZEJhc2UgPSBhZGRlZENvdW50ICogNDtcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZUNlbnRlcnNbYWRkQmFzZV0gPSBjZW50ZXIueDtcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZUNlbnRlcnNbYWRkQmFzZSArIDFdID0gY2VudGVyLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NlbmVDZW50ZXJzW2FkZEJhc2UgKyAyXSA9IGNlbnRlci56O1xyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lQ2VudGVyc1thZGRCYXNlICsgM10gPSBnbG9iYWxTcGxhdEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgIGFkZGVkQ291bnQrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2NlbmVDZW50ZXJzO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY2hlY2tGb3JFYXJseUV4aXQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlwb3NlU3BsYXRUcmVlV29ya2VyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKG9uSW5kZXhlc1VwbG9hZCkgb25JbmRleGVzVXBsb2FkKGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIGRlbGF5ZWRFeGVjdXRlKCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tGb3JFYXJseUV4aXQoKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGFsbENlbnRlcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmIChzcGxhdE1lc2guZHluYW1pY01vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BsYXRPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc3BsYXRNZXNoLnNjZW5lcy5sZW5ndGg7IHMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2VuZSA9IHNwbGF0TWVzaC5nZXRTY2VuZShzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BsYXRDb3VudCA9IHNjZW5lLnNwbGF0QnVmZmVyLmdldFNwbGF0Q291bnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NlbmVDZW50ZXJzID0gYWRkQ2VudGVyc0ZvclNjZW5lKHNwbGF0T2Zmc2V0LCBzcGxhdENvdW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ2VudGVycy5wdXNoKHNjZW5lQ2VudGVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwbGF0T2Zmc2V0ICs9IHNwbGF0Q291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2VuZUNlbnRlcnMgPSBhZGRDZW50ZXJzRm9yU2NlbmUoMCwgc3BsYXRNZXNoLmdldFNwbGF0Q291bnQoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsQ2VudGVycy5wdXNoKHNjZW5lQ2VudGVycyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxhdFRyZWVXb3JrZXIub25tZXNzYWdlID0gKGUpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrRm9yRWFybHlFeGl0KCkpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YS5zdWJUcmVlcykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9uU3BsYXRUcmVlQ29uc3RydWN0aW9uKSBvblNwbGF0VHJlZUNvbnN0cnVjdGlvbihmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheWVkRXhlY3V0ZSgoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrRm9yRWFybHlFeGl0KCkpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB3b3JrZXJTdWJUcmVlIG9mIGUuZGF0YS5zdWJUcmVlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZFN1YlRyZWUgPSBTcGxhdFN1YlRyZWUuY29udmVydFdvcmtlclN1YlRyZWUod29ya2VyU3ViVHJlZSwgc3BsYXRNZXNoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YlRyZWVzLnB1c2goY29udmVydGVkU3ViVHJlZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpcG9zZVNwbGF0VHJlZVdvcmtlcigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvblNwbGF0VHJlZUNvbnN0cnVjdGlvbikgb25TcGxhdFRyZWVDb25zdHJ1Y3Rpb24odHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXllZEV4ZWN1dGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBkZWxheWVkRXhlY3V0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrRm9yRWFybHlFeGl0KCkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob25JbmRleGVzVXBsb2FkKSBvbkluZGV4ZXNVcGxvYWQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmZXJCdWZmZXJzID0gYWxsQ2VudGVycy5tYXAoKGFycmF5KSA9PiBhcnJheS5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdvcmtlclByb2Nlc3NDZW50ZXJzKHRoaXMuc3BsYXRUcmVlV29ya2VyLCBhbGxDZW50ZXJzLCB0cmFuc2ZlckJ1ZmZlcnMsIHRoaXMubWF4RGVwdGgsIHRoaXMubWF4Q2VudGVyc1Blck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBjb3VudExlYXZlcygpIHtcclxuXHJcbiAgICAgICAgbGV0IGxlYWZDb3VudCA9IDA7XHJcbiAgICAgICAgdGhpcy52aXNpdExlYXZlcygoKSA9PiB7XHJcbiAgICAgICAgICAgIGxlYWZDb3VudCsrO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbGVhZkNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHZpc2l0TGVhdmVzKHZpc2l0RnVuYykge1xyXG5cclxuICAgICAgICBjb25zdCB2aXNpdExlYXZlc0Zyb21Ob2RlID0gKG5vZGUsIHZpc2l0RnVuYykgPT4ge1xyXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHZpc2l0RnVuYyhub2RlKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdmlzaXRMZWF2ZXNGcm9tTm9kZShjaGlsZCwgdmlzaXRGdW5jKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGZvciAobGV0IHN1YlRyZWUgb2YgdGhpcy5zdWJUcmVlcykge1xyXG4gICAgICAgICAgICB2aXNpdExlYXZlc0Zyb21Ob2RlKHN1YlRyZWUucm9vdE5vZGUsIHZpc2l0RnVuYyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSIsIi8qKlxyXG4gKiBTcGxhdE1hdGVyaWFsXHJcbiAqIFxyXG4gKiBCYXNlZCBvbiBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKiBcclxuICogSEVBVklMWSBNT0RJRklFRCBmb3IgRkxBTUUgYXZhdGFyIHN1cHBvcnQ6XHJcbiAqIC0gQWRkZWQgRkxBTUUgYm9uZS9wb3NlIHVuaWZvcm1zIGFuZCB0ZXh0dXJlc1xyXG4gKiAtIEFkZGVkIGV4cHJlc3Npb24gYmxlbmRzaGFwZSBzdXBwb3J0XHJcbiAqIC0gRXh0ZW5kZWQgdmVydGV4IHNoYWRlciB3aXRoIEdQVSBza2lubmluZ1xyXG4gKiAtIEFkZGl0aW9uYWwgfjUwMCBsaW5lcyBvZiBGTEFNRS1zcGVjaWZpYyBzaGFkZXIgY29kZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbG9yLCBEb3VibGVTaWRlLCBNYXRyaXg0LCBOb3JtYWxCbGVuZGluZywgU2hhZGVyTWF0ZXJpYWwsIFZlY3RvcjIsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL2VudW1zL0VuZ2luZUNvbnN0YW50cy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU3BsYXRNYXRlcmlhbCB7XHJcblxyXG4gICAgc3RhdGljIGJ1aWxkVmVydGV4U2hhZGVyQmFzZShkeW5hbWljTW9kZSA9IGZhbHNlLCBlbmFibGVPcHRpb25hbEVmZmVjdHMgPSBmYWxzZSwgbWF4U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gMCwgY3VzdG9tVmFycyA9ICcnLCB1c2VGbGFtZSA9IHRydWUpIHtcclxuICAgICAgICBsZXQgdmVydGV4U2hhZGVyU291cmNlID0gYGA7XHJcbiAgICAgICAgaWYgKHVzZUZsYW1lID09IHRydWUpIHtcclxuICAgICAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGAjZGVmaW5lIFVTRV9GTEFNRWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGAjZGVmaW5lIFVTRV9TS0lOTklOR2A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xyXG4gICAgICAgICNpbmNsdWRlIDxjb21tb24+XHJcblxyXG4gICAgICAgIGF0dHJpYnV0ZSB1aW50IHNwbGF0SW5kZXg7XHJcbiAgICAgICAgdW5pZm9ybSBoaWdocCB1c2FtcGxlcjJEIGZsYW1lTW9kZWxUZXh0dXJlO1xyXG4gICAgICAgIHVuaWZvcm0gaGlnaHAgdXNhbXBsZXIyRCBib25lVGV4dHVyZTtcclxuICAgICAgICB1bmlmb3JtIGhpZ2hwIHVzYW1wbGVyMkQgYm9uZVdlaWdodFRleHR1cmU7XHJcblxyXG5cclxuICAgICAgICB1bmlmb3JtIGhpZ2hwIHVzYW1wbGVyMkQgY2VudGVyc0NvbG9yc1RleHR1cmU7XHJcbiAgICAgICAgdW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZTtcclxuICAgICAgICB1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlUjtcclxuICAgICAgICB1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlRztcclxuICAgICAgICB1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlQjtcclxuXHJcbiAgICAgICAgdW5pZm9ybSBoaWdocCB1c2FtcGxlcjJEIHNjZW5lSW5kZXhlc1RleHR1cmU7XHJcbiAgICAgICAgdW5pZm9ybSB2ZWMyIHNjZW5lSW5kZXhlc1RleHR1cmVTaXplO1xyXG4gICAgICAgIHVuaWZvcm0gaW50IHNjZW5lQ291bnQ7XHJcbiAgICAgICAgdW5pZm9ybSBpbnQgZ2F1c3NpYW5TcGxhdENvdW50O1xyXG4gICAgICAgIHVuaWZvcm0gaW50IGJzQ291bnQ7XHJcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBoZWFkQm9uZUluZGV4O1xyXG4gICAgICAgICNpZmRlZiBVU0VfU0tJTk5JTkdcclxuICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgc2tpbkluZGV4O1xyXG4gICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgYDtcclxuXHJcbiAgICBpZiAoZW5hYmxlT3B0aW9uYWxFZmZlY3RzKSB7XHJcbiAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGBcclxuICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCBzY2VuZU9wYWNpdHlbJHtDb25zdGFudHMuTWF4U2NlbmVzfV07XHJcbiAgICAgICAgICAgIHVuaWZvcm0gaW50IHNjZW5lVmlzaWJpbGl0eVske0NvbnN0YW50cy5NYXhTY2VuZXN9XTtcclxuICAgICAgICBgO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkeW5hbWljTW9kZSkge1xyXG4gICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgICAgIHVuaWZvcm0gaGlnaHAgbWF0NCB0cmFuc2Zvcm1zWyR7Q29uc3RhbnRzLk1heFNjZW5lc31dO1xyXG4gICAgICAgIGA7XHJcbiAgICB9XHJcblxyXG4gICAgdmVydGV4U2hhZGVyU291cmNlICs9IGBcclxuICAgICAgICAke2N1c3RvbVZhcnN9XHJcbiAgICAgICAgdW5pZm9ybSB2ZWMyIGZvY2FsO1xyXG4gICAgICAgIHVuaWZvcm0gZmxvYXQgb3J0aG9ab29tO1xyXG4gICAgICAgIHVuaWZvcm0gaW50IG9ydGhvZ3JhcGhpY01vZGU7XHJcbiAgICAgICAgdW5pZm9ybSBpbnQgcG9pbnRDbG91ZE1vZGVFbmFibGVkO1xyXG4gICAgICAgIHVuaWZvcm0gZmxvYXQgaW52ZXJzZUZvY2FsQWRqdXN0bWVudDtcclxuICAgICAgICB1bmlmb3JtIHZlYzIgdmlld3BvcnQ7XHJcbiAgICAgICAgdW5pZm9ybSB2ZWMyIGJhc2lzVmlld3BvcnQ7XHJcbiAgICAgICAgdW5pZm9ybSB2ZWMyIGNlbnRlcnNDb2xvcnNUZXh0dXJlU2l6ZTtcclxuICAgICAgICB1bmlmb3JtIHZlYzIgZmxhbWVNb2RlbFRleHR1cmVTaXplO1xyXG4gICAgICAgIHVuaWZvcm0gdmVjMiBib25lV2VpZ2h0VGV4dHVyZVNpemU7XHJcbiAgICAgICAgdW5pZm9ybSB2ZWMyIGJvbmVUZXh0dXJlU2l6ZTtcclxuXHJcbiAgICAgICAgdW5pZm9ybSBpbnQgc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlO1xyXG4gICAgICAgIHVuaWZvcm0gdmVjMiBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZTtcclxuICAgICAgICB1bmlmb3JtIGludCBzcGhlcmljYWxIYXJtb25pY3M4Qml0TW9kZTtcclxuICAgICAgICB1bmlmb3JtIGludCBzcGhlcmljYWxIYXJtb25pY3NNdWx0aVRleHR1cmVNb2RlO1xyXG4gICAgICAgIHVuaWZvcm0gZmxvYXQgdmlzaWJsZVJlZ2lvblJhZGl1cztcclxuICAgICAgICB1bmlmb3JtIGZsb2F0IHZpc2libGVSZWdpb25GYWRlU3RhcnRSYWRpdXM7XHJcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBmaXJzdFJlbmRlclRpbWU7XHJcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBjdXJyZW50VGltZTtcclxuICAgICAgICB1bmlmb3JtIGludCBmYWRlSW5Db21wbGV0ZTtcclxuICAgICAgICB1bmlmb3JtIHZlYzMgc2NlbmVDZW50ZXI7XHJcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBzcGxhdFNjYWxlO1xyXG4gICAgICAgIHVuaWZvcm0gZmxvYXQgc3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uUmFuZ2VNaW5bJHtDb25zdGFudHMuTWF4U2NlbmVzfV07XHJcbiAgICAgICAgdW5pZm9ybSBmbG9hdCBzcGhlcmljYWxIYXJtb25pY3M4Qml0Q29tcHJlc3Npb25SYW5nZU1heFske0NvbnN0YW50cy5NYXhTY2VuZXN9XTtcclxuXHJcbiAgICAgICAgdmFyeWluZyB2ZWM0IHZDb2xvcjtcclxuICAgICAgICB2YXJ5aW5nIHZlYzIgdlV2O1xyXG4gICAgICAgIHZhcnlpbmcgdmVjMiB2UG9zaXRpb247XHJcbiAgICAgICAgdmFyeWluZyB2ZWMyIHZTcGxhdEluZGV4O1xyXG4gICAgICAgICNpZmRlZiBVU0VfU0tJTk5JTkdcclxuICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7XHJcbiAgICAgICAgICAgIHVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTtcclxuICAgICAgICAgICAgdW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmUwO1xyXG4gICAgICAgICAgICBtYXQ0IGdldEJvbmVNYXRyaXgwKCBjb25zdCBpbiBmbG9hdCBpICkge1xyXG4gICAgICAgICAgICAgICAgaW50IHNpemUgPSB0ZXh0dXJlU2l6ZSggYm9uZVRleHR1cmUwLCAwICkueDtcclxuICAgICAgICAgICAgICAgIGludCBqID0gaW50KCBpICkgKiA0O1xyXG4gICAgICAgICAgICAgICAgaW50IHggPSBqICUgc2l6ZTtcclxuICAgICAgICAgICAgICAgIGludCB5ID0gaiAvIHNpemU7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYxID0gdGV4ZWxGZXRjaCggYm9uZVRleHR1cmUwLCBpdmVjMiggeCwgeSApLCAwICk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHYyID0gdGV4ZWxGZXRjaCggYm9uZVRleHR1cmUwLCBpdmVjMiggeCArIDEsIHkgKSwgMCApO1xyXG4gICAgICAgICAgICAgICAgdmVjNCB2MyA9IHRleGVsRmV0Y2goIGJvbmVUZXh0dXJlMCwgaXZlYzIoIHggKyAyLCB5ICksIDAgKTtcclxuICAgICAgICAgICAgICAgIHZlYzQgdjQgPSB0ZXhlbEZldGNoKCBib25lVGV4dHVyZTAsIGl2ZWMyKCB4ICsgMywgeSApLCAwICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0NCggdjEsIHYyLCB2MywgdjQgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICBtYXQzIHF1YXRlcm5pb25Ub1JvdGF0aW9uTWF0cml4KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpIHtcclxuICAgICAgICAgICAgZmxvYXQgcyA9IDEuMCAvIHNxcnQodyAqIHcgKyB4ICogeCArIHkgKiB5ICsgeiAqIHopO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gbWF0MyhcclxuICAgICAgICAgICAgICAgIDEuIC0gMi4gKiAoeSAqIHkgKyB6ICogeiksXHJcbiAgICAgICAgICAgICAgICAyLiAqICh4ICogeSArIHcgKiB6KSxcclxuICAgICAgICAgICAgICAgIDIuICogKHggKiB6IC0gdyAqIHkpLFxyXG4gICAgICAgICAgICAgICAgMi4gKiAoeCAqIHkgLSB3ICogeiksXHJcbiAgICAgICAgICAgICAgICAxLiAtIDIuICogKHggKiB4ICsgeiAqIHopLFxyXG4gICAgICAgICAgICAgICAgMi4gKiAoeSAqIHogKyB3ICogeCksXHJcbiAgICAgICAgICAgICAgICAyLiAqICh4ICogeiArIHcgKiB5KSxcclxuICAgICAgICAgICAgICAgIDIuICogKHkgKiB6IC0gdyAqIHgpLFxyXG4gICAgICAgICAgICAgICAgMS4gLSAyLiAqICh4ICogeCArIHkgKiB5KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmxvYXQgc3FydDggPSBzcXJ0KDguMCk7XHJcbiAgICAgICAgY29uc3QgZmxvYXQgbWluQWxwaGEgPSAxLjAgLyAyNTUuMDtcclxuXHJcbiAgICAgICAgY29uc3QgdmVjNCBlbmNvZGVOb3JtNCA9IHZlYzQoMS4wIC8gMjU1LjAsIDEuMCAvIDI1NS4wLCAxLjAgLyAyNTUuMCwgMS4wIC8gMjU1LjApO1xyXG4gICAgICAgIGNvbnN0IHV2ZWM0IG1hc2s0ID0gdXZlYzQodWludCgweDAwMDAwMEZGKSwgdWludCgweDAwMDBGRjAwKSwgdWludCgweDAwRkYwMDAwKSwgdWludCgweEZGMDAwMDAwKSk7XHJcbiAgICAgICAgY29uc3QgdXZlYzQgc2hpZnQ0ID0gdXZlYzQoMCwgOCwgMTYsIDI0KTtcclxuICAgICAgICBpbnQgaW50ZXJuYWwgPSAxOy8vc2hvdyBhIGdhdXNzaWFuIHNwbGF0dGluZyBwb2ludCBldmVyeSBpbnRlcm5hbCBwb2ludHMuXHJcbiAgICAgICAgdmVjNCB1aW50VG9SR0JBVmVjICh1aW50IHUpIHtcclxuICAgICAgICAgICB1dmVjNCB1cmdiYSA9IG1hc2s0ICYgdTtcclxuICAgICAgICAgICB1cmdiYSA9IHVyZ2JhID4+IHNoaWZ0NDtcclxuICAgICAgICAgICB2ZWM0IHJnYmEgPSB2ZWM0KHVyZ2JhKSAqIGVuY29kZU5vcm00O1xyXG4gICAgICAgICAgIHJldHVybiByZ2JhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbG9hdCBnZXRSZWFsSW5kZXgoaW50IHNJbmRleCwgaW50IHJlZHVjZWRGYWN0b3IpIHtcclxuICAgICAgICAgICAgaW50IHJlbWFpbmRlciA9IHNJbmRleCAlIHJlZHVjZWRGYWN0b3I7XHJcblxyXG4gICAgICAgICAgICBpZihyZW1haW5kZXIgPT0gaW50KDApKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXQoc0luZGV4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmbG9hdChzSW5kZXggLSByZW1haW5kZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZWMyIGdldERhdGFVVihpbiBpbnQgc3RyaWRlLCBpbiBpbnQgb2Zmc2V0LCBpbiB2ZWMyIGRpbWVuc2lvbnMpIHtcclxuICAgICAgICAgICAgdmVjMiBzYW1wbGVyVVYgPSB2ZWMyKDAuMCwgMC4wKTtcclxuICAgICAgICAgICAgZmxvYXQgZCA9IGZsb2F0KHVpbnQoZ2V0UmVhbEluZGV4KGludChzcGxhdEluZGV4KSwgaW50ZXJuYWwpKSAqIHVpbnQoc3RyaWRlKSArIHVpbnQob2Zmc2V0KSkgLyBkaW1lbnNpb25zLng7XHJcbiAgICAgICAgICAgIHNhbXBsZXJVVi55ID0gZmxvYXQoZmxvb3IoZCkpIC8gZGltZW5zaW9ucy55O1xyXG4gICAgICAgICAgICBzYW1wbGVyVVYueCA9IGZyYWN0KGQpO1xyXG4gICAgICAgICAgICByZXR1cm4gc2FtcGxlclVWO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVjMiBnZXRGbGFtZURhdGFVVihpbiBpbnQgc3RyaWRlLCBpbiBpbnQgb2Zmc2V0LCBpbiB2ZWMyIGRpbWVuc2lvbnMpIHtcclxuICAgICAgICAgICAgdmVjMiBzYW1wbGVyVVYgPSB2ZWMyKDAuMCwgMC4wKTtcclxuICAgICAgICAgICAgZmxvYXQgZCA9IGZsb2F0KHVpbnQoaW50KHNwbGF0SW5kZXgpIC8gaW50ZXJuYWwpICogdWludChzdHJpZGUpICsgdWludChvZmZzZXQpICsgdWludChnYXVzc2lhblNwbGF0Q291bnQgKiBic0NvdW50KSkgLyBkaW1lbnNpb25zLng7XHJcbiAgICAgICAgICAgIHNhbXBsZXJVVi55ID0gZmxvYXQoZmxvb3IoZCkpIC8gZGltZW5zaW9ucy55O1xyXG4gICAgICAgICAgICBzYW1wbGVyVVYueCA9IGZyYWN0KGQpO1xyXG4gICAgICAgICAgICByZXR1cm4gc2FtcGxlclVWO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVjMiBnZXRCb25lV2VpZ2h0VVYoaW4gaW50IHN0cmlkZSwgaW4gaW50IG9mZnNldCwgaW4gdmVjMiBkaW1lbnNpb25zKSB7XHJcbiAgICAgICAgICAgIHZlYzIgc2FtcGxlclVWID0gdmVjMigwLjAsIDAuMCk7XHJcbiAgICAgICAgICAgIGZsb2F0IGQgPSBmbG9hdCh1aW50KGludChzcGxhdEluZGV4KSAvIGludGVybmFsKSAqIHVpbnQoc3RyaWRlKSArIHVpbnQob2Zmc2V0KSkgLyBkaW1lbnNpb25zLng7XHJcbiAgICAgICAgICAgIHNhbXBsZXJVVi55ID0gZmxvYXQoZmxvb3IoZCkpIC8gZGltZW5zaW9ucy55O1xyXG4gICAgICAgICAgICBzYW1wbGVyVVYueCA9IGZyYWN0KGQpO1xyXG4gICAgICAgICAgICByZXR1cm4gc2FtcGxlclVWO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVjMiBnZXRCU0ZsYW1lRGF0YVVWKGluIGludCBic0luZWRleCwgaW4gaW50IHN0cmlkZSwgaW4gaW50IG9mZnNldCwgaW4gdmVjMiBkaW1lbnNpb25zKSB7XHJcbiAgICAgICAgICAgIHZlYzIgc2FtcGxlclVWID0gdmVjMigwLjAsIDAuMCk7XHJcbiAgICAgICAgICAgIGZsb2F0IGQgPSBmbG9hdCh1aW50KGludChzcGxhdEluZGV4KSAvIGludGVybmFsKSAqIHVpbnQoc3RyaWRlKSArIHVpbnQob2Zmc2V0KSArIHVpbnQoZ2F1c3NpYW5TcGxhdENvdW50ICogYnNJbmVkZXgpKSAvIGRpbWVuc2lvbnMueDtcclxuICAgICAgICAgICAgc2FtcGxlclVWLnkgPSBmbG9hdChmbG9vcihkKSkgLyBkaW1lbnNpb25zLnk7XHJcbiAgICAgICAgICAgIHNhbXBsZXJVVi54ID0gZnJhY3QoZCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzYW1wbGVyVVY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZWMyIGdldERhdGFVVkYoaW4gdWludCBzSW5kZXgsIGluIGZsb2F0IHN0cmlkZSwgaW4gdWludCBvZmZzZXQsIGluIHZlYzIgZGltZW5zaW9ucykge1xyXG4gICAgICAgICAgICB2ZWMyIHNhbXBsZXJVViA9IHZlYzIoMC4wLCAwLjApO1xyXG4gICAgICAgICAgICBmbG9hdCBkID0gZmxvYXQodWludChmbG9hdChnZXRSZWFsSW5kZXgoaW50KHNJbmRleCksIGludGVybmFsKSkgKiBzdHJpZGUpICsgb2Zmc2V0KSAvIGRpbWVuc2lvbnMueDtcclxuICAgICAgICAgICAgc2FtcGxlclVWLnkgPSBmbG9hdChmbG9vcihkKSkgLyBkaW1lbnNpb25zLnk7XHJcbiAgICAgICAgICAgIHNhbXBsZXJVVi54ID0gZnJhY3QoZCk7XHJcbiAgICAgICAgICAgIHJldHVybiBzYW1wbGVyVVY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmbG9hdCBTSF9DMSA9IDAuNDg4NjAyNTExOTAyOTE5OWY7XHJcbiAgICAgICAgY29uc3QgZmxvYXRbNV0gU0hfQzIgPSBmbG9hdFtdKDEuMDkyNTQ4NCwgLTEuMDkyNTQ4NCwgMC4zMTUzOTE2LCAtMS4wOTI1NDg0LCAwLjU0NjI3NDIpO1xyXG5cclxuICAgICAgICBtYXQ0IGdldEJvbmVNYXRyaXgoIGZsb2F0IGkgKSB7XHJcbiAgICAgICAgICAgIGZsb2F0IHkgPSBpO1xyXG4gICAgICAgICAgICBmbG9hdCB4ID0gMC4wO1xyXG5cclxuICAgICAgICAgICAgdmVjMiBzYW1wbGVyVVYgPSB2ZWMyKDAuMCwgMC4wKTtcclxuICAgICAgICAgICAgZmxvYXQgZCA9IGZsb2F0KGkgKiA0LjApIC8gYm9uZVRleHR1cmVTaXplLng7Ly80XHJcbiAgICAgICAgICAgIHNhbXBsZXJVVi55ID0gZmxvYXQoZmxvb3IoZCkpIC8gYm9uZVRleHR1cmVTaXplLnk7Ly81XHJcbiAgICAgICAgICAgIHNhbXBsZXJVVi54ID0gZnJhY3QoZCk7XHJcblxyXG4gICAgICAgICAgICB2ZWM0IHYxID0gdWludEJpdHNUb0Zsb2F0KHRleHR1cmUoIGJvbmVUZXh0dXJlLCBzYW1wbGVyVVYgKSk7XHJcbiAgICAgICAgICAgIHZlYzQgdjIgPSB1aW50Qml0c1RvRmxvYXQodGV4dHVyZSggYm9uZVRleHR1cmUsIHZlYzIoc2FtcGxlclVWLnggKyAxLjAgLyBib25lVGV4dHVyZVNpemUueCwgc2FtcGxlclVWLnkpKSk7XHJcbiAgICAgICAgICAgIHZlYzQgdjMgPSB1aW50Qml0c1RvRmxvYXQodGV4dHVyZSggYm9uZVRleHR1cmUsIHZlYzIoc2FtcGxlclVWLnggKyAyLjAgLyBib25lVGV4dHVyZVNpemUueCwgc2FtcGxlclVWLnkpICkpO1xyXG4gICAgICAgICAgICB2ZWM0IHY0ID0gdWludEJpdHNUb0Zsb2F0KHRleHR1cmUoIGJvbmVUZXh0dXJlLCB2ZWMyKHNhbXBsZXJVVi54ICsgMy4wIC8gYm9uZVRleHR1cmVTaXplLngsIHNhbXBsZXJVVi55KSkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2b2lkIG1haW4gKCkge1xyXG5cclxuICAgICAgICAgICAgdWludCBvZGRPZmZzZXQgPSBzcGxhdEluZGV4ICYgdWludCgweDAwMDAwMDAxKTtcclxuICAgICAgICAgICAgdWludCBkb3VibGVPZGRPZmZzZXQgPSBvZGRPZmZzZXQgKiB1aW50KDIpO1xyXG4gICAgICAgICAgICBib29sIGlzRXZlbiA9IG9kZE9mZnNldCA9PSB1aW50KDApO1xyXG4gICAgICAgICAgICB1aW50IG5lYXJlc3RFdmVuSW5kZXggPSBzcGxhdEluZGV4IC0gb2RkT2Zmc2V0O1xyXG4gICAgICAgICAgICBmbG9hdCBmT2RkT2Zmc2V0ID0gZmxvYXQob2RkT2Zmc2V0KTtcclxuXHJcbiAgICAgICAgICAgIHV2ZWM0IHNhbXBsZWRDZW50ZXJDb2xvciA9IHRleHR1cmUoY2VudGVyc0NvbG9yc1RleHR1cmUsIGdldERhdGFVVigxLCAwLCBjZW50ZXJzQ29sb3JzVGV4dHVyZVNpemUpKTtcclxuICAgICAgICAgICAgLy8gdmVjMyBzcGxhdENlbnRlciA9IHVpbnRCaXRzVG9GbG9hdCh1dmVjMyhzYW1wbGVkQ2VudGVyQ29sb3IuZ2JhKSk7XHJcblxyXG4gICAgICAgICAgICB1dmVjMyBzYW1wbGVkQ2VudGVyID0gdGV4dHVyZShjZW50ZXJzQ29sb3JzVGV4dHVyZSwgZ2V0RGF0YVVWKDEsIDAsIGNlbnRlcnNDb2xvcnNUZXh0dXJlU2l6ZSkpLmdiYTtcclxuICAgICAgICAgICAgdmVjMyBzcGxhdENlbnRlciA9IHVpbnRCaXRzVG9GbG9hdCh1dmVjMyhzYW1wbGVkQ2VudGVyKSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMyIGZsYW1lVGV4dHVyZVVWID0gZ2V0QlNGbGFtZURhdGFVVihic0NvdW50LCAxLCAwLCBmbGFtZU1vZGVsVGV4dHVyZVNpemUpO1xyXG4gICAgICAgICAgICB1dmVjMyBzYW1wbGVkZmxhbWVQb3MgPSB0ZXh0dXJlKGZsYW1lTW9kZWxUZXh0dXJlLCBmbGFtZVRleHR1cmVVVikucmdiO1xyXG4gICAgICAgICAgICAvLyBzcGxhdENlbnRlciArPSB1aW50Qml0c1RvRmxvYXQodXZlYzMoc2FtcGxlZGZsYW1lUG9zLnJnYikpO1xyXG5cclxuICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGJzQ291bnQ7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgdmVjMiBmbGFtZUJTVGV4dHVyZVVWID0gZ2V0QlNGbGFtZURhdGFVVihpLCAxLCAwLCBmbGFtZU1vZGVsVGV4dHVyZVNpemUpO1xyXG4gICAgICAgICAgICAgICAgdXZlYzMgc2FtcGxlZEJTUG9zID0gdGV4dHVyZShmbGFtZU1vZGVsVGV4dHVyZSwgZmxhbWVCU1RleHR1cmVVVikucmdiO1xyXG5cclxuICAgICAgICAgICAgICAgIHZlYzIgc2FtcGxlclVWID0gdmVjMigwLjAsIDAuMCk7XHJcbiAgICAgICAgICAgICAgICBmbG9hdCBkID0gZmxvYXQoaSAvIDQgKyA1ICogNCkgLyBib25lVGV4dHVyZVNpemUueDsvLzRcclxuICAgICAgICAgICAgICAgIHNhbXBsZXJVVi55ID0gZmxvYXQoZmxvb3IoZCkpIC8gYm9uZVRleHR1cmVTaXplLnk7Ly8zMlxyXG4gICAgICAgICAgICAgICAgc2FtcGxlclVWLnggPSBmcmFjdChkKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2ZWM0IGJzV2VpZ2h0ID0gdWludEJpdHNUb0Zsb2F0KHRleHR1cmUoYm9uZVRleHR1cmUsIHNhbXBsZXJVVikpO1xyXG4gICAgICAgICAgICAgICAgZmxvYXQgd2VpZ2h0ID0gYnNXZWlnaHQucjtcclxuICAgICAgICAgICAgICAgIGlmKGkgJSA0ID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHQgPSBic1dlaWdodC5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoaSAlIDQgPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHdlaWdodCA9IGJzV2VpZ2h0LmI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihpICUgNCA9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ID0gYnNXZWlnaHQuYTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzcGxhdENlbnRlciA9IHNwbGF0Q2VudGVyICsgd2VpZ2h0ICogdWludEJpdHNUb0Zsb2F0KHNhbXBsZWRCU1Bvcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAjaWZkZWYgVVNFX1NLSU5OSU5HXHJcbiAgICAgICAgICAgICAgICBtYXQ0IGJvbmVNYXRYID0gZ2V0Qm9uZU1hdHJpeDAoIHNraW5JbmRleC54ICk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeDAoIHNraW5JbmRleC55ICk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeDAoIHNraW5JbmRleC56ICk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0IGJvbmVNYXRXID0gZ2V0Qm9uZU1hdHJpeDAoIHNraW5JbmRleC53ICk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWZkZWYgVVNFX1NLSU5OSU5HXHJcbiAgICAgICAgICAgICAgICBtYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTtcclxuICAgICAgICAgICAgICAgIHNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7XHJcbiAgICAgICAgICAgICAgICBza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xyXG4gICAgICAgICAgICAgICAgc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0WjtcclxuICAgICAgICAgICAgICAgIHNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7XHJcbiAgICAgICAgICAgICAgICAvLyBza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIHZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKHNwbGF0Q2VudGVyLnh5eik7XHJcbiAgICAgICAgICAgICNpZmRlZiBVU0VfU0tJTk5JTkdcclxuICAgICAgICAgICAgICAgIC8vIHZlYzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHNraW5WZXJ0ZXggPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7XHJcbiAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhbiBvZmZzZXQgYmV0d2VlbiB0aGUgR2F1c3NpYW4gcG9pbnQgYW5kIHRoZSBtZXNoIHZlcnRleCxcclxuICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdpbGwgY2F1c2UgZGVmZWN0cyBpbiB0aGUgc2tlbGV0YWwgYW5pbWF0aW9uIGRyaXZpbmcgdGhlIEdhdXNzaWFuIHBvaW50LiBcclxuICAgICAgICAgICAgICAgIC8vSW4gb3JkZXIgdG8gY2lyY3VtdmVudCB0aGlzIHByb2JsZW0sIG9ubHkgdGhlIGhlYWQgYm9uZShpbmRleCBpcyAxMTAgY3VycmVudGx5KSBpcyB1c2VkIHRvIGRyaXZlXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGhlYWRCb25lSW5kZXggPj0gMC4wKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQgYm9uZU1hdCA9IGdldEJvbmVNYXRyaXgwKCBoZWFkQm9uZUluZGV4ICk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2tpbm5lZCArPSBib25lTWF0ICogc2tpblZlcnRleCAqIDEuMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBza2lubmVkICs9IGJvbmVNYXRYICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueDtcclxuICAgICAgICAgICAgICAgIC8vIHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xyXG4gICAgICAgICAgICAgICAgLy8gc2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7XHJcbiAgICAgICAgICAgICAgICAvLyBza2lubmVkICs9IGJvbmVNYXRXICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQudztcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6O1xyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWQgPSBza2lubmVkLnh5ejtcclxuXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBzcGxhdENlbnRlciA9IHRyYW5zZm9ybWVkLnh5ejtcclxuXHJcbiAgICAgICAgICAgICNpZmRlZiBVU0VfRkxBTUVcclxuICAgICAgICAgICAgICAgIG1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCAwLjAgKTtcclxuICAgICAgICAgICAgICAgIG1hdDQgYm9uZU1hdFkgPSBnZXRCb25lTWF0cml4KCAxLjAgKTtcclxuICAgICAgICAgICAgICAgIG1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCAyLjAgKTtcclxuICAgICAgICAgICAgICAgIG1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCAzLjAgKTsgICBcclxuICAgICAgICAgICAgICAgIG1hdDQgYm9uZU1hdDAgPSBnZXRCb25lTWF0cml4KCA0LjAgKTsgICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmVjMiBib25lV2VpZ2h0VVYwID0gZ2V0Qm9uZVdlaWdodFVWKDIsIDAsIGJvbmVXZWlnaHRUZXh0dXJlU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICB2ZWMyIGJvbmVXZWlnaHRVVjEgPSBnZXRCb25lV2VpZ2h0VVYoMiwgMSwgYm9uZVdlaWdodFRleHR1cmVTaXplKTtcclxuXHJcbiAgICAgICAgICAgICAgICB1dmVjNCBzYW1wbGVkQm9uZU1hdHJpeFZhbHVlID0gdGV4dHVyZShib25lV2VpZ2h0VGV4dHVyZSwgYm9uZVdlaWdodFVWMCk7XHJcbiAgICAgICAgICAgICAgICB1dmVjNCBzYW1wbGVkQm9uZU1hdHJpeFZhbHVlMCA9IHRleHR1cmUoYm9uZVdlaWdodFRleHR1cmUsIGJvbmVXZWlnaHRVVjEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZlYzQgYm9uZU1hdHJpeFZhbHVlID0gdWludEJpdHNUb0Zsb2F0KHNhbXBsZWRCb25lTWF0cml4VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdmVjNCBib25lTWF0cml4VmFsdWUwID0gdWludEJpdHNUb0Zsb2F0KHNhbXBsZWRCb25lTWF0cml4VmFsdWUwKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2ZWM0IHNraW5WZXJ0ZXggPSB2ZWM0KCBzcGxhdENlbnRlciwgMS4wICk7XHJcbiAgICAgICAgICAgICAgICB2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTtcclxuICAgICAgICAgICAgICAgIGZsb2F0IG1pbldlaWdodCA9IG1pbihib25lTWF0cml4VmFsdWUueCxtaW4oYm9uZU1hdHJpeFZhbHVlLnksIG1pbihib25lTWF0cml4VmFsdWUueiwgbWluKGJvbmVNYXRyaXhWYWx1ZS53LCBib25lTWF0cml4VmFsdWUwLngpKSkpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZihib25lTWF0cml4VmFsdWUueCA+IDAuMCAmJiBib25lTWF0cml4VmFsdWUueCA+IG1pbldlaWdodClcclxuICAgICAgICAgICAgICAgICAgICBza2lubmVkICs9IGJvbmVNYXRYICogc2tpblZlcnRleCAqIGJvbmVNYXRyaXhWYWx1ZS54O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZihib25lTWF0cml4VmFsdWUueSA+IDAuMCAmJiBib25lTWF0cml4VmFsdWUueSA+IG1pbldlaWdodClcclxuICAgICAgICAgICAgICAgICAgICBza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIGJvbmVNYXRyaXhWYWx1ZS55O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZihib25lTWF0cml4VmFsdWUueiA+IDAuMCAmJiBib25lTWF0cml4VmFsdWUueiA+IG1pbldlaWdodClcclxuICAgICAgICAgICAgICAgICAgICBza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIGJvbmVNYXRyaXhWYWx1ZS56O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZihib25lTWF0cml4VmFsdWUudyA+IDAuMCAmJiBib25lTWF0cml4VmFsdWUudyA+IG1pbldlaWdodClcclxuICAgICAgICAgICAgICAgICAgICBza2lubmVkICs9IGJvbmVNYXRXICogc2tpblZlcnRleCAqIGJvbmVNYXRyaXhWYWx1ZS53O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZihib25lTWF0cml4VmFsdWUwLnggPiAwLjAgJiYgYm9uZU1hdHJpeFZhbHVlMC54ID4gbWluV2VpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgIHNraW5uZWQgKz0gYm9uZU1hdDAgKiBza2luVmVydGV4ICogYm9uZU1hdHJpeFZhbHVlMC54O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBzcGxhdENlbnRlciA9IHNraW5uZWQueHl6O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgIHVpbnQgc2NlbmVJbmRleCA9IHVpbnQoMCk7XHJcbiAgICAgICAgICAgIGlmIChzY2VuZUNvdW50ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgc2NlbmVJbmRleCA9IHRleHR1cmUoc2NlbmVJbmRleGVzVGV4dHVyZSwgZ2V0RGF0YVVWKDEsIDAsIHNjZW5lSW5kZXhlc1RleHR1cmVTaXplKSkucjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBgO1xyXG5cclxuICAgICAgICBpZiAoZW5hYmxlT3B0aW9uYWxFZmZlY3RzKSB7XHJcbiAgICAgICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgICAgICAgICBmbG9hdCBzcGxhdE9wYWNpdHlGcm9tU2NlbmUgPSBzY2VuZU9wYWNpdHlbc2NlbmVJbmRleF07XHJcbiAgICAgICAgICAgICAgICBpbnQgc2NlbmVWaXNpYmxlID0gc2NlbmVWaXNpYmlsaXR5W3NjZW5lSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNwbGF0T3BhY2l0eUZyb21TY2VuZSA8PSAwLjAxIHx8IHNjZW5lVmlzaWJsZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAuMCwgMC4wLCAyLjAsIDEuMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGR5bmFtaWNNb2RlKSB7XHJcbiAgICAgICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgICAgICAgICBtYXQ0IHRyYW5zZm9ybSA9IHRyYW5zZm9ybXNbc2NlbmVJbmRleF07XHJcbiAgICAgICAgICAgICAgICBtYXQ0IHRyYW5zZm9ybU1vZGVsVmlld01hdHJpeCA9IHZpZXdNYXRyaXggKiB0cmFuc2Zvcm07XHJcbiAgICAgICAgICAgICAgICAjaWZkZWYgVVNFX1NLSU5OSU5HXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtTW9kZWxWaWV3TWF0cml4ID0gdHJhbnNmb3JtTW9kZWxWaWV3TWF0cml4ICogc2tpbk1hdHJpeDtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgbWF0NCB0cmFuc2Zvcm1Nb2RlbFZpZXdNYXRyaXggPSBtb2RlbFZpZXdNYXRyaXg7YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgICAgIGZsb2F0IHNoOEJpdENvbXByZXNzaW9uUmFuZ2VNaW5Gb3JTY2VuZSA9IHNwaGVyaWNhbEhhcm1vbmljczhCaXRDb21wcmVzc2lvblJhbmdlTWluW3NjZW5lSW5kZXhdO1xyXG4gICAgICAgICAgICBmbG9hdCBzaDhCaXRDb21wcmVzc2lvblJhbmdlTWF4Rm9yU2NlbmUgPSBzcGhlcmljYWxIYXJtb25pY3M4Qml0Q29tcHJlc3Npb25SYW5nZU1heFtzY2VuZUluZGV4XTtcclxuICAgICAgICAgICAgZmxvYXQgc2g4Qml0Q29tcHJlc3Npb25SYW5nZUZvclNjZW5lID0gc2g4Qml0Q29tcHJlc3Npb25SYW5nZU1heEZvclNjZW5lIC0gc2g4Qml0Q29tcHJlc3Npb25SYW5nZU1pbkZvclNjZW5lO1xyXG4gICAgICAgICAgICBmbG9hdCBzaDhCaXRDb21wcmVzc2lvbkhhbGZSYW5nZUZvclNjZW5lID0gc2g4Qml0Q29tcHJlc3Npb25SYW5nZUZvclNjZW5lIC8gMi4wO1xyXG4gICAgICAgICAgICB2ZWMzIHZlYzhCaXRTSFNoaWZ0ID0gdmVjMyhzaDhCaXRDb21wcmVzc2lvblJhbmdlTWluRm9yU2NlbmUpO1xyXG5cclxuICAgICAgICAgICAgdmVjNCB2aWV3Q2VudGVyID0gdHJhbnNmb3JtTW9kZWxWaWV3TWF0cml4ICogdmVjNChzcGxhdENlbnRlciwgMS4wKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzQgY2xpcENlbnRlciA9IHByb2plY3Rpb25NYXRyaXggKiB2aWV3Q2VudGVyO1xyXG5cclxuICAgICAgICAgICAgZmxvYXQgY2xpcCA9IDEuMiAqIGNsaXBDZW50ZXIudztcclxuICAgICAgICAgICAgaWYgKGNsaXBDZW50ZXIueiA8IC1jbGlwIHx8IGNsaXBDZW50ZXIueCA8IC1jbGlwIHx8IGNsaXBDZW50ZXIueCA+IGNsaXAgfHwgY2xpcENlbnRlci55IDwgLWNsaXAgfHwgY2xpcENlbnRlci55ID4gY2xpcCkge1xyXG4gICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAuMCwgMC4wLCAyLjAsIDEuMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzMgbmRjQ2VudGVyID0gY2xpcENlbnRlci54eXogLyBjbGlwQ2VudGVyLnc7XHJcblxyXG4gICAgICAgICAgICB2UG9zaXRpb24gPSBwb3NpdGlvbi54eTtcclxuICAgICAgICAgICAgdlNwbGF0SW5kZXggPSB2ZWMyKHNwbGF0SW5kZXgsIHNwbGF0SW5kZXgpO1xyXG5cclxuICAgICAgICAgICAgdkNvbG9yID0gdWludFRvUkdCQVZlYyhzYW1wbGVkQ2VudGVyQ29sb3Iucik7XHJcbiAgICAgICAgYDtcclxuXHJcbiAgICAgICAgLy8gUHJvY2VlZCB0byBzYW1wbGluZyBhbmQgcmVuZGVyaW5nIDFzdCBkZWdyZWUgc3BoZXJpY2FsIGhhcm1vbmljc1xyXG4gICAgICAgIGlmIChtYXhTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPj0gMSkge1xyXG5cclxuICAgICAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGAgICBcclxuICAgICAgICAgICAgaWYgKHNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA+PSAxKSB7XHJcbiAgICAgICAgICAgIGA7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHluYW1pY01vZGUpIHtcclxuICAgICAgICAgICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMyB3b3JsZFZpZXdEaXIgPSBub3JtYWxpemUoc3BsYXRDZW50ZXIgLSB2ZWMzKGludmVyc2UodHJhbnNmb3JtKSAqIHZlYzQoY2FtZXJhUG9zaXRpb24sIDEuMCkpKTtcclxuICAgICAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXJTb3VyY2UgKz0gYFxyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMgd29ybGRWaWV3RGlyID0gbm9ybWFsaXplKHNwbGF0Q2VudGVyIC0gY2FtZXJhUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgYDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGBcclxuICAgICAgICAgICAgICAgIHZlYzMgc2gxO1xyXG4gICAgICAgICAgICAgICAgdmVjMyBzaDI7XHJcbiAgICAgICAgICAgICAgICB2ZWMzIHNoMztcclxuICAgICAgICAgICAgYDtcclxuXHJcbiAgICAgICAgICAgIGlmIChtYXhTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPj0gMikge1xyXG4gICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGBcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzIHNoNDtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzIHNoNTtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzIHNoNjtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzIHNoNztcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzIHNoODtcclxuICAgICAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIERldGVybWluaW5nIGhvdyB0byBzYW1wbGUgc3BoZXJpY2FsIGhhcm1vbmljcyB0ZXh0dXJlcyB0byBnZXQgdGhlIGNvZWZmaWNpZW50cyBmb3IgY2FsY3VsYXRpb25zIGZvciBhIGdpdmVuIGRlZ3JlZVxyXG4gICAgICAgICAgICAvLyBkZXBlbmRzIG9uIGhvdyBtYW55IHRvdGFsIGRlZ3JlZXMgKG1heFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSkgYXJlIHByZXNlbnQgaW4gdGhlIHRleHR1cmVzLiBUaGlzIGlzIGJlY2F1c2UgdGhhdFxyXG4gICAgICAgICAgICAvLyBudW1iZXIgYWZmZWN0cyBob3cgdGhleSBhcmUgcGFja2VkIGluIHRoZSB0ZXh0dXJlcywgYW5kIHRoZXJlZm9yZSB0aGUgb2Zmc2V0ICYgc3RyaWRlIHJlcXVpcmVkIHRvIGFjY2VzcyB0aGVtLlxyXG5cclxuICAgICAgICAgICAgLy8gU2FtcGxlIHNwaGVyaWNhbCBoYXJtb25pY3MgdGV4dHVyZXMgd2l0aCAxIGRlZ3JlZSB3b3J0aCBvZiBkYXRhIGZvciAxc3QgZGVncmVlIGNhbGN1bGF0aW9ucywgYW5kIHN0b3JlIGluIHNoMSwgc2gyLCBhbmQgc2gzXHJcbiAgICAgICAgICAgIGlmIChtYXhTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNwaGVyaWNhbEhhcm1vbmljc011bHRpVGV4dHVyZU1vZGUgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZWMyIHNoVVYgPSBnZXREYXRhVVZGKG5lYXJlc3RFdmVuSW5kZXgsIDIuNSwgZG91YmxlT2RkT2Zmc2V0LCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzQgc2FtcGxlZFNIMDEyMyA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZSwgc2hVVik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoVVYgPSBnZXREYXRhVVZGKG5lYXJlc3RFdmVuSW5kZXgsIDIuNSwgZG91YmxlT2RkT2Zmc2V0ICsgdWludCgxKSwgc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZVNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZWM0IHNhbXBsZWRTSDQ1NjcgPSB0ZXh0dXJlKHNwaGVyaWNhbEhhcm1vbmljc1RleHR1cmUsIHNoVVYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaFVWID0gZ2V0RGF0YVVWRihuZWFyZXN0RXZlbkluZGV4LCAyLjUsIGRvdWJsZU9kZE9mZnNldCArIHVpbnQoMiksIHNwaGVyaWNhbEhhcm1vbmljc1RleHR1cmVTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCBzYW1wbGVkU0g4OTEwMTEgPSB0ZXh0dXJlKHNwaGVyaWNhbEhhcm1vbmljc1RleHR1cmUsIHNoVVYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaDEgPSB2ZWMzKHNhbXBsZWRTSDAxMjMucmdiKSAqICgxLjAgLSBmT2RkT2Zmc2V0KSArIHZlYzMoc2FtcGxlZFNIMDEyMy5iYSwgc2FtcGxlZFNINDU2Ny5yKSAqIGZPZGRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoMiA9IHZlYzMoc2FtcGxlZFNIMDEyMy5hLCBzYW1wbGVkU0g0NTY3LnJnKSAqICgxLjAgLSBmT2RkT2Zmc2V0KSArIHZlYzMoc2FtcGxlZFNINDU2Ny5nYmEpICogZk9kZE9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2gzID0gdmVjMyhzYW1wbGVkU0g0NTY3LmJhLCBzYW1wbGVkU0g4OTEwMTEucikgKiAoMS4wIC0gZk9kZE9mZnNldCkgKyB2ZWMzKHNhbXBsZWRTSDg5MTAxMS5yZ2IpICogZk9kZE9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZWMyIHNhbXBsZWRTSDAxUiA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZVIsIGdldERhdGFVVigyLCAwLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpLnJnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZWMyIHNhbXBsZWRTSDIzUiA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZVIsIGdldERhdGFVVigyLCAxLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpLnJnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZWMyIHNhbXBsZWRTSDAxRyA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZUcsIGdldERhdGFVVigyLCAwLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpLnJnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZWMyIHNhbXBsZWRTSDIzRyA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZUcsIGdldERhdGFVVigyLCAxLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpLnJnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZWMyIHNhbXBsZWRTSDAxQiA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZUIsIGdldERhdGFVVigyLCAwLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpLnJnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZWMyIHNhbXBsZWRTSDIzQiA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZUIsIGdldERhdGFVVigyLCAxLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpLnJnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaDEgPSB2ZWMzKHNhbXBsZWRTSDAxUi5yZywgc2FtcGxlZFNIMjNSLnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaDIgPSB2ZWMzKHNhbXBsZWRTSDAxRy5yZywgc2FtcGxlZFNIMjNHLnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaDMgPSB2ZWMzKHNhbXBsZWRTSDAxQi5yZywgc2FtcGxlZFNIMjNCLnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIC8vIFNhbXBsZSBzcGhlcmljYWwgaGFybW9uaWNzIHRleHR1cmVzIHdpdGggMiBkZWdyZWVzIHdvcnRoIG9mIGRhdGEgZm9yIDFzdCBkZWdyZWUgY2FsY3VsYXRpb25zLCBhbmQgc3RvcmUgaW4gc2gxLCBzaDIsIGFuZCBzaDNcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXhTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgICAgICAgICAgICAgdmVjNCBzYW1wbGVkU0gwMTIzO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzQgc2FtcGxlZFNINDU2NztcclxuICAgICAgICAgICAgICAgICAgICB2ZWM0IHNhbXBsZWRTSDg5MTAxMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmVjNCBzYW1wbGVkU0gwMTIzUjtcclxuICAgICAgICAgICAgICAgICAgICB2ZWM0IHNhbXBsZWRTSDAxMjNHO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzQgc2FtcGxlZFNIMDEyM0I7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcGhlcmljYWxIYXJtb25pY3NNdWx0aVRleHR1cmVNb2RlID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlZFNIMDEyMyA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZSwgZ2V0RGF0YVVWKDYsIDAsIHNwaGVyaWNhbEhhcm1vbmljc1RleHR1cmVTaXplKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZWRTSDQ1NjcgPSB0ZXh0dXJlKHNwaGVyaWNhbEhhcm1vbmljc1RleHR1cmUsIGdldERhdGFVVig2LCAxLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVkU0g4OTEwMTEgPSB0ZXh0dXJlKHNwaGVyaWNhbEhhcm1vbmljc1RleHR1cmUsIGdldERhdGFVVig2LCAyLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaDEgPSBzYW1wbGVkU0gwMTIzLnJnYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2gyID0gdmVjMyhzYW1wbGVkU0gwMTIzLmEsIHNhbXBsZWRTSDQ1NjcucmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaDMgPSB2ZWMzKHNhbXBsZWRTSDQ1NjcuYmEsIHNhbXBsZWRTSDg5MTAxMS5yKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVkU0gwMTIzUiA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZVIsIGdldERhdGFVVigyLCAwLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVkU0gwMTIzRyA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZUcsIGdldERhdGFVVigyLCAwLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVkU0gwMTIzQiA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZUIsIGdldERhdGFVVigyLCAwLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaDEgPSB2ZWMzKHNhbXBsZWRTSDAxMjNSLnJnYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoMiA9IHZlYzMoc2FtcGxlZFNIMDEyM0cucmdiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2gzID0gdmVjMyhzYW1wbGVkU0gwMTIzQi5yZ2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFBlcmZvcm0gMXN0IGRlZ3JlZSBzcGhlcmljYWwgaGFybW9uaWNzIGNhbGN1bGF0aW9uc1xyXG4gICAgICAgICAgICB2ZXJ0ZXhTaGFkZXJTb3VyY2UgKz0gYFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcGhlcmljYWxIYXJtb25pY3M4Qml0TW9kZSA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoMSA9IHNoMSAqIHNoOEJpdENvbXByZXNzaW9uUmFuZ2VGb3JTY2VuZSArIHZlYzhCaXRTSFNoaWZ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaDIgPSBzaDIgKiBzaDhCaXRDb21wcmVzc2lvblJhbmdlRm9yU2NlbmUgKyB2ZWM4Qml0U0hTaGlmdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2gzID0gc2gzICogc2g4Qml0Q29tcHJlc3Npb25SYW5nZUZvclNjZW5lICsgdmVjOEJpdFNIU2hpZnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZsb2F0IHggPSB3b3JsZFZpZXdEaXIueDtcclxuICAgICAgICAgICAgICAgICAgICBmbG9hdCB5ID0gd29ybGRWaWV3RGlyLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmxvYXQgeiA9IHdvcmxkVmlld0Rpci56O1xyXG4gICAgICAgICAgICAgICAgICAgIHZDb2xvci5yZ2IgKz0gU0hfQzEgKiAoLXNoMSAqIHkgKyBzaDIgKiB6IC0gc2gzICogeCk7XHJcbiAgICAgICAgICAgIGA7XHJcblxyXG4gICAgICAgICAgICAvLyBQcm9jZWVkIHRvIHNhbXBsaW5nIGFuZCByZW5kZXJpbmcgMm5kIGRlZ3JlZSBzcGhlcmljYWwgaGFybW9uaWNzXHJcbiAgICAgICAgICAgIGlmIChtYXhTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPj0gMikge1xyXG5cclxuICAgICAgICAgICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA+PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHh4ID0geCAqIHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHl5ID0geSAqIHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHp6ID0geiAqIHo7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHh5ID0geCAqIHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHl6ID0geSAqIHo7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHh6ID0geCAqIHo7XHJcbiAgICAgICAgICAgICAgICBgO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNhbXBsZSBzcGhlcmljYWwgaGFybW9uaWNzIHRleHR1cmVzIHdpdGggMiBkZWdyZWVzIHdvcnRoIG9mIGRhdGEgZm9yIDJuZCBkZWdyZWUgY2FsY3VsYXRpb25zLFxyXG4gICAgICAgICAgICAgICAgLy8gYW5kIHN0b3JlIGluIHNoNCwgc2g1LCBzaDYsIHNoNywgYW5kIHNoOFxyXG4gICAgICAgICAgICAgICAgaWYgKG1heFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGhlcmljYWxIYXJtb25pY3NNdWx0aVRleHR1cmVNb2RlID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzQgc2FtcGxlZFNIMTIxMzE0MTUgPSB0ZXh0dXJlKHNwaGVyaWNhbEhhcm1vbmljc1RleHR1cmUsIGdldERhdGFVVig2LCAzLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCBzYW1wbGVkU0gxNjE3MTgxOSA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZSwgZ2V0RGF0YVVWKDYsIDQsIHNwaGVyaWNhbEhhcm1vbmljc1RleHR1cmVTaXplKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWM0IHNhbXBsZWRTSDIwMjEyMjIzID0gdGV4dHVyZShzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlLCBnZXREYXRhVVYoNiwgNSwgc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZVNpemUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoNCA9IHNhbXBsZWRTSDg5MTAxMS5nYmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaDUgPSBzYW1wbGVkU0gxMjEzMTQxNS5yZ2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaDYgPSB2ZWMzKHNhbXBsZWRTSDEyMTMxNDE1LmEsIHNhbXBsZWRTSDE2MTcxODE5LnJnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoNyA9IHZlYzMoc2FtcGxlZFNIMTYxNzE4MTkuYmEsIHNhbXBsZWRTSDIwMjEyMjIzLnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2g4ID0gc2FtcGxlZFNIMjAyMTIyMjMuZ2JhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCBzYW1wbGVkU0g0NTY3UiA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZVIsIGdldERhdGFVVigyLCAxLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCBzYW1wbGVkU0g0NTY3RyA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZUcsIGdldERhdGFVVigyLCAxLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCBzYW1wbGVkU0g0NTY3QiA9IHRleHR1cmUoc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZUIsIGdldERhdGFVVigyLCAxLCBzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlU2l6ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2g0ID0gdmVjMyhzYW1wbGVkU0gwMTIzUi5hLCBzYW1wbGVkU0g0NTY3Ui5yZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaDUgPSB2ZWMzKHNhbXBsZWRTSDQ1NjdSLmJhLCBzYW1wbGVkU0gwMTIzRy5hKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoNiA9IHZlYzMoc2FtcGxlZFNINDU2N0cucmdiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoNyA9IHZlYzMoc2FtcGxlZFNINDU2N0cuYSwgc2FtcGxlZFNIMDEyM0IuYSwgc2FtcGxlZFNINDU2N0Iucik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaDggPSB2ZWMzKHNhbXBsZWRTSDQ1NjdCLmdiYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBgO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gMm5kIGRlZ3JlZSBzcGhlcmljYWwgaGFybW9uaWNzIGNhbGN1bGF0aW9uc1xyXG4gICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwaGVyaWNhbEhhcm1vbmljczhCaXRNb2RlID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoNCA9IHNoNCAqIHNoOEJpdENvbXByZXNzaW9uUmFuZ2VGb3JTY2VuZSArIHZlYzhCaXRTSFNoaWZ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2g1ID0gc2g1ICogc2g4Qml0Q29tcHJlc3Npb25SYW5nZUZvclNjZW5lICsgdmVjOEJpdFNIU2hpZnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaDYgPSBzaDYgKiBzaDhCaXRDb21wcmVzc2lvblJhbmdlRm9yU2NlbmUgKyB2ZWM4Qml0U0hTaGlmdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoNyA9IHNoNyAqIHNoOEJpdENvbXByZXNzaW9uUmFuZ2VGb3JTY2VuZSArIHZlYzhCaXRTSFNoaWZ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2g4ID0gc2g4ICogc2g4Qml0Q29tcHJlc3Npb25SYW5nZUZvclNjZW5lICsgdmVjOEJpdFNIU2hpZnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZDb2xvci5yZ2IgKz1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTSF9DMlswXSAqIHh5KSAqIHNoNCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0hfQzJbMV0gKiB5eikgKiBzaDUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNIX0MyWzJdICogKDIuMCAqIHp6IC0geHggLSB5eSkpICogc2g2ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTSF9DMlszXSAqIHh6KSAqIHNoNyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0hfQzJbNF0gKiAoeHggLSB5eSkpICogc2g4O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcblxyXG4gICAgICAgICAgICAgICAgdkNvbG9yLnJnYiA9IGNsYW1wKHZDb2xvci5yZ2IsIHZlYzMoMC4pLCB2ZWMzKDEuKSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZlcnRleFNoYWRlclNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0VmVydGV4U2hhZGVyRmFkZUluKCkge1xyXG4gICAgICAgIHJldHVybiBgXHJcbiAgICAgICAgICAgIGlmIChmYWRlSW5Db21wbGV0ZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBmbG9hdCBvcGFjaXR5QWRqdXN0ID0gMS4wO1xyXG4gICAgICAgICAgICAgICAgZmxvYXQgY2VudGVyRGlzdCA9IGxlbmd0aChzcGxhdENlbnRlciAtIHNjZW5lQ2VudGVyKTtcclxuICAgICAgICAgICAgICAgIGZsb2F0IHJlbmRlclRpbWUgPSBtYXgoY3VycmVudFRpbWUgLSBmaXJzdFJlbmRlclRpbWUsIDAuMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZmxvYXQgZmFkZURpc3RhbmNlID0gMC43NTtcclxuICAgICAgICAgICAgICAgIGZsb2F0IGRpc3RhbmNlTG9hZEZhZGVJbkZhY3RvciA9IHN0ZXAodmlzaWJsZVJlZ2lvbkZhZGVTdGFydFJhZGl1cywgY2VudGVyRGlzdCk7XHJcbiAgICAgICAgICAgICAgICBkaXN0YW5jZUxvYWRGYWRlSW5GYWN0b3IgPSAoMS4wIC0gZGlzdGFuY2VMb2FkRmFkZUluRmFjdG9yKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMS4wIC0gY2xhbXAoKGNlbnRlckRpc3QgLSB2aXNpYmxlUmVnaW9uRmFkZVN0YXJ0UmFkaXVzKSAvIGZhZGVEaXN0YW5jZSwgMC4wLCAxLjApKSAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZUxvYWRGYWRlSW5GYWN0b3I7XHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5QWRqdXN0ICo9IGRpc3RhbmNlTG9hZEZhZGVJbkZhY3RvcjtcclxuICAgICAgICAgICAgICAgIHZDb2xvci5hICo9IG9wYWNpdHlBZGp1c3Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBgO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRVbmlmb3JtcyhkeW5hbWljTW9kZSA9IGZhbHNlLCBlbmFibGVPcHRpb25hbEVmZmVjdHMgPSBmYWxzZSwgbWF4U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICBzcGxhdFNjYWxlID0gMS4wLCBwb2ludENsb3VkTW9kZUVuYWJsZWQgPSBmYWxzZSkge1xyXG5cclxuICAgICAgICBjb25zdCB1bmlmb3JtcyA9IHtcclxuICAgICAgICAgICAgJ3NjZW5lQ2VudGVyJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAndjMnLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogbmV3IFZlY3RvcjMoKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnZmFkZUluQ29tcGxldGUnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdpJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ29ydGhvZ3JhcGhpY01vZGUnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdpJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ3Zpc2libGVSZWdpb25GYWRlU3RhcnRSYWRpdXMnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdmJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IDAuMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAndmlzaWJsZVJlZ2lvblJhZGl1cyc6IHtcclxuICAgICAgICAgICAgICAgICd0eXBlJzogJ2YnLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogMC4wXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdiaW5kTWF0cml4Jzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAnbTQnLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogbmV3IE1hdHJpeDQoKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnYmluZE1hdHJpeEludmVyc2UnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdtNCcsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiBuZXcgTWF0cml4NCgpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdjdXJyZW50VGltZSc6IHtcclxuICAgICAgICAgICAgICAgICd0eXBlJzogJ2YnLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogMC4wXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdmaXJzdFJlbmRlclRpbWUnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdmJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IDAuMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnY2VudGVyc0NvbG9yc1RleHR1cmUnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICd0JyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IG51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ2ZsYW1lTW9kZWxUZXh0dXJlJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAndCcsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdib25lVGV4dHVyZSc6IHtcclxuICAgICAgICAgICAgICAgICd0eXBlJzogJ3QnLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnYm9uZVRleHR1cmUwJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAndCcsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdib25lV2VpZ2h0VGV4dHVyZSc6IHtcclxuICAgICAgICAgICAgICAgICd0eXBlJzogJ3QnLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZSc6IHtcclxuICAgICAgICAgICAgICAgICd0eXBlJzogJ3QnLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZVInOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICd0JyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IG51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ3NwaGVyaWNhbEhhcm1vbmljc1RleHR1cmVHJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAndCcsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdzcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlQic6IHtcclxuICAgICAgICAgICAgICAgICd0eXBlJzogJ3QnLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnc3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uUmFuZ2VNaW4nOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdmJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IFtdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdzcGhlcmljYWxIYXJtb25pY3M4Qml0Q29tcHJlc3Npb25SYW5nZU1heCc6IHtcclxuICAgICAgICAgICAgICAgICd0eXBlJzogJ2YnLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogW11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ2ZvY2FsJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAndjInLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogbmV3IFZlY3RvcjIoKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnb3J0aG9ab29tJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAnZicsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiAxLjBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ2ludmVyc2VGb2NhbEFkanVzdG1lbnQnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdmJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IDEuMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAndmlld3BvcnQnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICd2MicsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiBuZXcgVmVjdG9yMigpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdiYXNpc1ZpZXdwb3J0Jzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAndjInLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogbmV3IFZlY3RvcjIoKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnZGVidWdDb2xvcic6IHtcclxuICAgICAgICAgICAgICAgICd0eXBlJzogJ3YzJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IG5ldyBDb2xvcigpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdjZW50ZXJzQ29sb3JzVGV4dHVyZVNpemUnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICd2MicsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiBuZXcgVmVjdG9yMigxMDI0LCAxMDI0KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnZmxhbWVNb2RlbFRleHR1cmVTaXplJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAndjInLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogbmV3IFZlY3RvcjIoNDA5NiwgMjA0OClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ2JvbmVUZXh0dXJlU2l6ZSc6IHtcclxuICAgICAgICAgICAgICAgICd0eXBlJzogJ3YyJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IG5ldyBWZWN0b3IyKDQsIDMyKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnYm9uZVdlaWdodFRleHR1cmVTaXplJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAndjInLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogbmV3IFZlY3RvcjIoNTEyLCA1MTIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAnc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAnaScsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiBtYXhTcGhlcmljYWxIYXJtb25pY3NEZWdyZWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ3NwaGVyaWNhbEhhcm1vbmljc1RleHR1cmVTaXplJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAndjInLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogbmV3IFZlY3RvcjIoMTAyNCwgMTAyNClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ3NwaGVyaWNhbEhhcm1vbmljczhCaXRNb2RlJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAnaScsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiAwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdzcGhlcmljYWxIYXJtb25pY3NNdWx0aVRleHR1cmVNb2RlJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAnaScsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiAwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdzcGxhdFNjYWxlJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAnZicsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiBzcGxhdFNjYWxlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdwb2ludENsb3VkTW9kZUVuYWJsZWQnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdpJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IHBvaW50Q2xvdWRNb2RlRW5hYmxlZCA/IDEgOiAwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdzY2VuZUluZGV4ZXNUZXh0dXJlJzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAndCcsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdzY2VuZUluZGV4ZXNUZXh0dXJlU2l6ZSc6IHtcclxuICAgICAgICAgICAgICAgICd0eXBlJzogJ3YyJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IG5ldyBWZWN0b3IyKDEwMjQsIDEwMjQpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdzY2VuZUNvdW50Jzoge1xyXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAnaScsXHJcbiAgICAgICAgICAgICAgICAndmFsdWUnOiAxXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdnYXVzc2lhblNwbGF0Q291bnQnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdpJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IDFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ2JzQ291bnQnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdpJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IDFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ2hlYWRCb25lSW5kZXgnOiB7XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdmJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IC0xLjBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBDb25zdGFudHMuTWF4U2NlbmVzOyBpKyspIHtcclxuICAgICAgICAgICAgdW5pZm9ybXMuc3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uUmFuZ2VNaW4udmFsdWUucHVzaCgtQ29uc3RhbnRzLlNwaGVyaWNhbEhhcm1vbmljczhCaXRDb21wcmVzc2lvblJhbmdlIC8gMi4wKTtcclxuICAgICAgICAgICAgdW5pZm9ybXMuc3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uUmFuZ2VNYXgudmFsdWUucHVzaChDb25zdGFudHMuU3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uUmFuZ2UgLyAyLjApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVuYWJsZU9wdGlvbmFsRWZmZWN0cykge1xyXG4gICAgICAgICAgICBjb25zdCBzY2VuZU9wYWNpdHkgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBDb25zdGFudHMuTWF4U2NlbmVzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHNjZW5lT3BhY2l0eS5wdXNoKDEuMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdW5pZm9ybXNbJ3NjZW5lT3BhY2l0eSddID17XHJcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdmJyxcclxuICAgICAgICAgICAgICAgICd2YWx1ZSc6IHNjZW5lT3BhY2l0eVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2NlbmVWaXNpYmlsaXR5ID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgQ29uc3RhbnRzLk1heFNjZW5lczsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBzY2VuZVZpc2liaWxpdHkucHVzaCgxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB1bmlmb3Jtc1snc2NlbmVWaXNpYmlsaXR5J10gPXtcclxuICAgICAgICAgICAgICAgICd0eXBlJzogJ2knLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogc2NlbmVWaXNpYmlsaXR5XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZHluYW1pY01vZGUpIHtcclxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtTWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBDb25zdGFudHMuTWF4U2NlbmVzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybU1hdHJpY2VzLnB1c2gobmV3IE1hdHJpeDQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdW5pZm9ybXNbJ3RyYW5zZm9ybXMnXSA9IHtcclxuICAgICAgICAgICAgICAgICd0eXBlJzogJ21hdDQnLFxyXG4gICAgICAgICAgICAgICAgJ3ZhbHVlJzogdHJhbnNmb3JtTWF0cmljZXNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1bmlmb3JtcztcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbmNsYXNzIFNwbGF0TWF0ZXJpYWwzRCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCB0aGUgVGhyZWUuanMgbWF0ZXJpYWwgdGhhdCBpcyB1c2VkIHRvIHJlbmRlciB0aGUgc3BsYXRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGR5bmFtaWNNb2RlIElmIHRydWUsIGl0IG1lYW5zIHRoZSBzY2VuZSBnZW9tZXRyeSByZXByZXNlbnRlZCBieSB0aGlzIHNwbGF0IG1lc2ggaXMgbm90IHN0YXRpb25hcnkgb3JcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBzcGxhdCBjb3VudCBtaWdodCBjaGFuZ2VcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlT3B0aW9uYWxFZmZlY3RzIFdoZW4gdHJ1ZSwgYWxsb3dzIGZvciB1c2FnZSBvZiBleHRyYSBwcm9wZXJ0aWVzIGFuZCBhdHRyaWJ1dGVzIGluIHRoZSBzaGFkZXIgZm9yIGVmZmVjdHNcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgb3BhY2l0eSBhZGp1c3RtZW50LiBEZWZhdWx0IGlzIGZhbHNlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBhbnRpYWxpYXNlZCBJZiB0cnVlLCBjYWxjdWxhdGUgY29tcGVuc2F0aW9uIGZhY3RvciB0byBkZWFsIHdpdGggZ2F1c3NpYW5zIGJlaW5nIHJlbmRlcmVkIGF0IGEgc2lnbmlmaWNhbnRseVxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgcmVzb2x1dGlvbiB0aGFuIHRoYXQgb2YgdGhlaXIgdHJhaW5pbmdcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhTY3JlZW5TcGFjZVNwbGF0U2l6ZSBUaGUgbWF4aW11bSBjbGlwIHNwYWNlIHNwbGF0IHNpemVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzcGxhdFNjYWxlIFZhbHVlIGJ5IHdoaWNoIGFsbCBzcGxhdHMgYXJlIHNjYWxlZCBpbiBzY3JlZW4tc3BhY2UgKGRlZmF1bHQgaXMgMS4wKVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBvaW50Q2xvdWRNb2RlRW5hYmxlZCBSZW5kZXIgYWxsIHNwbGF0cyBhcyBzY3JlZW4tc3BhY2UgY2lyY2xlc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSBEZWdyZWUgb2Ygc3BoZXJpY2FsIGhhcm1vbmljcyB0byB1dGlsaXplIGluIHJlbmRlcmluZyBzcGxhdHNcclxuICAgICAqIEByZXR1cm4ge1RIUkVFLlNoYWRlck1hdGVyaWFsfVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYnVpbGQoZHluYW1pY01vZGUgPSBmYWxzZSwgZW5hYmxlT3B0aW9uYWxFZmZlY3RzID0gZmFsc2UsIGFudGlhbGlhc2VkID0gZmFsc2UsIG1heFNjcmVlblNwYWNlU3BsYXRTaXplID0gMjA0OCxcclxuICAgICAgICAgICAgICAgICBzcGxhdFNjYWxlID0gMS4wLCBwb2ludENsb3VkTW9kZUVuYWJsZWQgPSBmYWxzZSwgbWF4U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gMCwga2VybmVsMkRTaXplID0gMC4zLCB1c2VGbGFtZSA9IHRydWUpIHtcclxuXHJcbiAgICAgICAgY29uc3QgY3VzdG9tVmVydGV4VmFycyA9IGBcclxuICAgICAgICAgICAgdW5pZm9ybSB2ZWMyIGNvdmFyaWFuY2VzVGV4dHVyZVNpemU7XHJcbiAgICAgICAgICAgIHVuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIGNvdmFyaWFuY2VzVGV4dHVyZTtcclxuICAgICAgICAgICAgdW5pZm9ybSBoaWdocCB1c2FtcGxlcjJEIGNvdmFyaWFuY2VzVGV4dHVyZUhhbGZGbG9hdDtcclxuICAgICAgICAgICAgdW5pZm9ybSBpbnQgY292YXJpYW5jZXNBcmVIYWxmRmxvYXQ7XHJcblxyXG4gICAgICAgICAgICB2b2lkIGZyb21Db3ZhcmlhbmNlSGFsZkZsb2F0VjQodXZlYzQgdmFsLCBvdXQgdmVjNCBmaXJzdCwgb3V0IHZlYzQgc2Vjb25kKSB7XHJcbiAgICAgICAgICAgICAgICB2ZWMyIHIgPSB1bnBhY2tIYWxmMngxNih2YWwucik7XHJcbiAgICAgICAgICAgICAgICB2ZWMyIGcgPSB1bnBhY2tIYWxmMngxNih2YWwuZyk7XHJcbiAgICAgICAgICAgICAgICB2ZWMyIGIgPSB1bnBhY2tIYWxmMngxNih2YWwuYik7XHJcblxyXG4gICAgICAgICAgICAgICAgZmlyc3QgPSB2ZWM0KHIueCwgci55LCBnLngsIGcueSk7XHJcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB2ZWM0KGIueCwgYi55LCAwLjAsIDAuMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBgO1xyXG5cclxuICAgICAgICBsZXQgdmVydGV4U2hhZGVyU291cmNlID0gU3BsYXRNYXRlcmlhbC5idWlsZFZlcnRleFNoYWRlckJhc2UoZHluYW1pY01vZGUsIGVuYWJsZU9wdGlvbmFsRWZmZWN0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlLCBjdXN0b21WZXJ0ZXhWYXJzLCB1c2VGbGFtZSk7XHJcbiAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IFNwbGF0TWF0ZXJpYWwzRC5idWlsZFZlcnRleFNoYWRlclByb2plY3Rpb24oYW50aWFsaWFzZWQsIGVuYWJsZU9wdGlvbmFsRWZmZWN0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTY3JlZW5TcGFjZVNwbGF0U2l6ZSwga2VybmVsMkRTaXplKTtcclxuICAgICAgICBjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNwbGF0TWF0ZXJpYWwzRC5idWlsZEZyYWdtZW50U2hhZGVyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVuaWZvcm1zID0gU3BsYXRNYXRlcmlhbC5nZXRVbmlmb3JtcyhkeW5hbWljTW9kZSwgZW5hYmxlT3B0aW9uYWxFZmZlY3RzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUsIHNwbGF0U2NhbGUsIHBvaW50Q2xvdWRNb2RlRW5hYmxlZCk7XHJcblxyXG4gICAgICAgIHVuaWZvcm1zWydjb3ZhcmlhbmNlc1RleHR1cmVTaXplJ10gPSB7XHJcbiAgICAgICAgICAgICd0eXBlJzogJ3YyJyxcclxuICAgICAgICAgICAgJ3ZhbHVlJzogbmV3IFZlY3RvcjIoMTAyNCwgMTAyNClcclxuICAgICAgICB9O1xyXG4gICAgICAgIHVuaWZvcm1zWydjb3ZhcmlhbmNlc1RleHR1cmUnXSA9IHtcclxuICAgICAgICAgICAgJ3R5cGUnOiAndCcsXHJcbiAgICAgICAgICAgICd2YWx1ZSc6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHVuaWZvcm1zWydjb3ZhcmlhbmNlc1RleHR1cmVIYWxmRmxvYXQnXSA9IHtcclxuICAgICAgICAgICAgJ3R5cGUnOiAndCcsXHJcbiAgICAgICAgICAgICd2YWx1ZSc6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHVuaWZvcm1zWydjb3ZhcmlhbmNlc0FyZUhhbGZGbG9hdCddID0ge1xyXG4gICAgICAgICAgICAndHlwZSc6ICdpJyxcclxuICAgICAgICAgICAgJ3ZhbHVlJzogMFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuICAgICAgICAgICAgdW5pZm9ybXM6IHVuaWZvcm1zLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhTaGFkZXI6IHZlcnRleFNoYWRlclNvdXJjZSxcclxuICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXI6IGZyYWdtZW50U2hhZGVyU291cmNlLFxyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgYWxwaGFUZXN0OiAxLjAsXHJcbiAgICAgICAgICAgIGJsZW5kaW5nOiBOb3JtYWxCbGVuZGluZyxcclxuICAgICAgICAgICAgZGVwdGhUZXN0OiB0cnVlLFxyXG4gICAgICAgICAgICBkZXB0aFdyaXRlOiBmYWxzZSxcclxuICAgICAgICAgICAgc2lkZTogRG91YmxlU2lkZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGJ1aWxkVmVydGV4U2hhZGVyUHJvamVjdGlvbihhbnRpYWxpYXNlZCwgZW5hYmxlT3B0aW9uYWxFZmZlY3RzLCBtYXhTY3JlZW5TcGFjZVNwbGF0U2l6ZSwga2VybmVsMkRTaXplKSB7XHJcbiAgICAgICAgbGV0IHZlcnRleFNoYWRlclNvdXJjZSA9IGBcclxuXHJcbiAgICAgICAgICAgIHZlYzQgc2FtcGxlZENvdmFyaWFuY2VBO1xyXG4gICAgICAgICAgICB2ZWM0IHNhbXBsZWRDb3ZhcmlhbmNlQjtcclxuICAgICAgICAgICAgdmVjMyBjb3YzRF9NMTFfTTEyX00xMztcclxuICAgICAgICAgICAgdmVjMyBjb3YzRF9NMjJfTTIzX00zMztcclxuICAgICAgICAgICAgaWYgKGNvdmFyaWFuY2VzQXJlSGFsZkZsb2F0ID09IDApIHtcclxuICAgICAgICAgICAgICAgIHNhbXBsZWRDb3ZhcmlhbmNlQSA9IHRleHR1cmUoY292YXJpYW5jZXNUZXh0dXJlLCBnZXREYXRhVVZGKG5lYXJlc3RFdmVuSW5kZXgsIDEuNSwgb2RkT2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY292YXJpYW5jZXNUZXh0dXJlU2l6ZSkpO1xyXG4gICAgICAgICAgICAgICAgc2FtcGxlZENvdmFyaWFuY2VCID0gdGV4dHVyZShjb3ZhcmlhbmNlc1RleHR1cmUsIGdldERhdGFVVkYobmVhcmVzdEV2ZW5JbmRleCwgMS41LCBvZGRPZmZzZXQgKyB1aW50KDEpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY292YXJpYW5jZXNUZXh0dXJlU2l6ZSkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvdjNEX00xMV9NMTJfTTEzID0gdmVjMyhzYW1wbGVkQ292YXJpYW5jZUEucmdiKSAqICgxLjAgLSBmT2RkT2Zmc2V0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMoc2FtcGxlZENvdmFyaWFuY2VBLmJhLCBzYW1wbGVkQ292YXJpYW5jZUIucikgKiBmT2RkT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgY292M0RfTTIyX00yM19NMzMgPSB2ZWMzKHNhbXBsZWRDb3ZhcmlhbmNlQS5hLCBzYW1wbGVkQ292YXJpYW5jZUIucmcpICogKDEuMCAtIGZPZGRPZmZzZXQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyhzYW1wbGVkQ292YXJpYW5jZUIuZ2JhKSAqIGZPZGRPZmZzZXQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1dmVjNCBzYW1wbGVkQ292YXJpYW5jZVUgPSB0ZXh0dXJlKGNvdmFyaWFuY2VzVGV4dHVyZUhhbGZGbG9hdCwgZ2V0RGF0YVVWKDEsIDAsIGNvdmFyaWFuY2VzVGV4dHVyZVNpemUpKTtcclxuICAgICAgICAgICAgICAgIGZyb21Db3ZhcmlhbmNlSGFsZkZsb2F0VjQoc2FtcGxlZENvdmFyaWFuY2VVLCBzYW1wbGVkQ292YXJpYW5jZUEsIHNhbXBsZWRDb3ZhcmlhbmNlQik7XHJcbiAgICAgICAgICAgICAgICBjb3YzRF9NMTFfTTEyX00xMyA9IHNhbXBsZWRDb3ZhcmlhbmNlQS5yZ2I7XHJcbiAgICAgICAgICAgICAgICBjb3YzRF9NMjJfTTIzX00zMyA9IHZlYzMoc2FtcGxlZENvdmFyaWFuY2VBLmEsIHNhbXBsZWRDb3ZhcmlhbmNlQi5yZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgLy8gQ29uc3RydWN0IHRoZSAzRCBjb3ZhcmlhbmNlIG1hdHJpeFxyXG4gICAgICAgICAgICBtYXQzIFZyayA9IG1hdDMoXHJcbiAgICAgICAgICAgICAgICBjb3YzRF9NMTFfTTEyX00xMy54LCBjb3YzRF9NMTFfTTEyX00xMy55LCBjb3YzRF9NMTFfTTEyX00xMy56LFxyXG4gICAgICAgICAgICAgICAgY292M0RfTTExX00xMl9NMTMueSwgY292M0RfTTIyX00yM19NMzMueCwgY292M0RfTTIyX00yM19NMzMueSxcclxuICAgICAgICAgICAgICAgIGNvdjNEX00xMV9NMTJfTTEzLnosIGNvdjNEX00yMl9NMjNfTTMzLnksIGNvdjNEX00yMl9NMjNfTTMzLnpcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIG1hdDMgSjtcclxuICAgICAgICAgICAgaWYgKG9ydGhvZ3JhcGhpY01vZGUgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIHByb2plY3Rpb24gaXMgbGluZWFyLCB3ZSBkb24ndCBuZWVkIGFuIGFwcHJveGltYXRpb25cclxuICAgICAgICAgICAgICAgIEogPSB0cmFuc3Bvc2UobWF0MyhvcnRob1pvb20sIDAuMCwgMC4wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwgb3J0aG9ab29tLCAwLjAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wLCAwLjAsIDAuMCkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBKYWNvYmlhbiBvZiB0aGUgYWZmaW5lIGFwcHJveGltYXRpb24gb2YgdGhlIHByb2plY3Rpb24gbWF0cml4LiBJdCB3aWxsIGJlIHVzZWQgdG8gdHJhbnNmb3JtIHRoZVxyXG4gICAgICAgICAgICAgICAgLy8gM0QgY292YXJpYW5jZSBtYXRyaXggaW5zdGVhZCBvZiB1c2luZyB0aGUgYWN0dWFsIHByb2plY3Rpb24gbWF0cml4IGJlY2F1c2UgdGhhdCB0cmFuc2Zvcm1hdGlvbiB3b3VsZFxyXG4gICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBhIG5vbi1saW5lYXIgY29tcG9uZW50IChwZXJzcGVjdGl2ZSBkaXZpc2lvbikgd2hpY2ggd291bGQgeWllbGQgYSBub24tZ2F1c3NpYW4gcmVzdWx0LlxyXG4gICAgICAgICAgICAgICAgZmxvYXQgcyA9IDEuMCAvICh2aWV3Q2VudGVyLnogKiB2aWV3Q2VudGVyLnopO1xyXG4gICAgICAgICAgICAgICAgSiA9IG1hdDMoXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jYWwueCAvIHZpZXdDZW50ZXIueiwgMC4sIC0oZm9jYWwueCAqIHZpZXdDZW50ZXIueCkgKiBzLFxyXG4gICAgICAgICAgICAgICAgICAgIDAuLCBmb2NhbC55IC8gdmlld0NlbnRlci56LCAtKGZvY2FsLnkgKiB2aWV3Q2VudGVyLnkpICogcyxcclxuICAgICAgICAgICAgICAgICAgICAwLiwgMC4sIDAuXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBDb25jYXRlbmF0ZSB0aGUgcHJvamVjdGlvbiBhcHByb3hpbWF0aW9uIHdpdGggdGhlIG1vZGVsLXZpZXcgdHJhbnNmb3JtYXRpb25cclxuICAgICAgICAgICAgbWF0MyBXID0gdHJhbnNwb3NlKG1hdDModHJhbnNmb3JtTW9kZWxWaWV3TWF0cml4KSk7XHJcbiAgICAgICAgICAgIG1hdDMgVCA9IFcgKiBKO1xyXG5cclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSAzRCBjb3ZhcmlhbmNlIG1hdHJpeCAoVnJrKSB0byBjb21wdXRlIHRoZSAyRCBjb3ZhcmlhbmNlIG1hdHJpeFxyXG4gICAgICAgICAgICBtYXQzIGNvdjJEbSA9IHRyYW5zcG9zZShUKSAqIFZyayAqIFQ7XHJcbiAgICAgICAgICAgIGA7XHJcblxyXG4gICAgICAgIGlmIChhbnRpYWxpYXNlZCkge1xyXG4gICAgICAgICAgICB2ZXJ0ZXhTaGFkZXJTb3VyY2UgKz0gYFxyXG4gICAgICAgICAgICAgICAgZmxvYXQgZGV0T3JpZyA9IGNvdjJEbVswXVswXSAqIGNvdjJEbVsxXVsxXSAtIGNvdjJEbVswXVsxXSAqIGNvdjJEbVswXVsxXTtcclxuICAgICAgICAgICAgICAgIGNvdjJEbVswXVswXSArPSAke2tlcm5lbDJEU2l6ZX07XHJcbiAgICAgICAgICAgICAgICBjb3YyRG1bMV1bMV0gKz0gJHtrZXJuZWwyRFNpemV9O1xyXG4gICAgICAgICAgICAgICAgZmxvYXQgZGV0Qmx1ciA9IGNvdjJEbVswXVswXSAqIGNvdjJEbVsxXVsxXSAtIGNvdjJEbVswXVsxXSAqIGNvdjJEbVswXVsxXTtcclxuICAgICAgICAgICAgICAgIHZDb2xvci5hICo9IHNxcnQobWF4KGRldE9yaWcgLyBkZXRCbHVyLCAwLjApKTtcclxuICAgICAgICAgICAgICAgIGlmICh2Q29sb3IuYSA8IG1pbkFscGhhKSByZXR1cm47XHJcbiAgICAgICAgICAgIGA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGBcclxuICAgICAgICAgICAgICAgIGNvdjJEbVswXVswXSArPSAke2tlcm5lbDJEU2l6ZX07XHJcbiAgICAgICAgICAgICAgICBjb3YyRG1bMV1bMV0gKz0gJHtrZXJuZWwyRFNpemV9O1xyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGBcclxuXHJcbiAgICAgICAgICAgIC8vIFdlIGFyZSBpbnRlcmVzdGVkIGluIHRoZSB1cHBlci1sZWZ0IDJ4MiBwb3J0aW9uIG9mIHRoZSBwcm9qZWN0ZWQgM0QgY292YXJpYW5jZSBtYXRyaXggYmVjYXVzZVxyXG4gICAgICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIFggYW5kIFkgdmFsdWVzLiBXZSB3YW50IHRoZSBYLWRpYWdvbmFsLCBjb3YyRG1bMF1bMF0sXHJcbiAgICAgICAgICAgIC8vIHRoZSBZLWRpYWdvbmFsLCBjb3YyRG1bMV1bMV0sIGFuZCB0aGUgY29ycmVsYXRpb24gYmV0d2VlbiB0aGUgdHdvIGNvdjJEbVswXVsxXS4gV2UgZG9uJ3RcclxuICAgICAgICAgICAgLy8gbmVlZCBjb3YyRG1bMV1bMF0gYmVjYXVzZSBpdCBpcyBhIHN5bWV0cmljIG1hdHJpeC5cclxuICAgICAgICAgICAgdmVjMyBjb3YyRHYgPSB2ZWMzKGNvdjJEbVswXVswXSwgY292MkRtWzBdWzFdLCBjb3YyRG1bMV1bMV0pO1xyXG5cclxuICAgICAgICAgICAgLy8gV2Ugbm93IG5lZWQgdG8gc29sdmUgZm9yIHRoZSBlaWdlbi12YWx1ZXMgYW5kIGVpZ2VuIHZlY3RvcnMgb2YgdGhlIDJEIGNvdmFyaWFuY2UgbWF0cml4XHJcbiAgICAgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGRldGVybWluZSB0aGUgMkQgYmFzaXMgZm9yIHRoZSBzcGxhdC4gVGhpcyBpcyBkb25lIHVzaW5nIHRoZSBtZXRob2QgZGVzY3JpYmVkXHJcbiAgICAgICAgICAgIC8vIGhlcmU6IGh0dHBzOi8vcGVvcGxlLm1hdGguaGFydmFyZC5lZHUvfmtuaWxsL3RlYWNoaW5nL21hdGgyMWIyMDA0L2V4aGliaXRzLzJkbWF0cmljZXMvaW5kZXguaHRtbFxyXG4gICAgICAgICAgICAvLyBBZnRlciBjYWxjdWxhdGluZyB0aGUgZWlnZW4tdmFsdWVzIGFuZCBlaWdlbi12ZWN0b3JzLCB3ZSBjYWxjdWxhdGUgdGhlIGJhc2lzIGZvciByZW5kZXJpbmcgdGhlIHNwbGF0XHJcbiAgICAgICAgICAgIC8vIGJ5IG5vcm1hbGl6aW5nIHRoZSBlaWdlbi12ZWN0b3JzIGFuZCB0aGVuIG11bHRpcGx5aW5nIHRoZW0gYnkgKHNxcnQoOCkgKiBzcXJ0KGVpZ2VuLXZhbHVlKSksIHdoaWNoIGlzXHJcbiAgICAgICAgICAgIC8vIGVxdWFsIHRvIHNjYWxpbmcgdGhlbSBieSBzcXJ0KDgpIHN0YW5kYXJkIGRldmlhdGlvbnMuXHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBkaWZmZXJlbnQgYXBwcm9hY2ggdGhhbiBpbiB0aGUgb3JpZ2luYWwgd29yayBhdCBJTlJJQS4gSW4gdGhhdCB3b3JrIHRoZXkgY29tcHV0ZSB0aGVcclxuICAgICAgICAgICAgLy8gbWF4IGV4dGVudHMgb2YgdGhlIHByb2plY3RlZCBzcGxhdCBpbiBzY3JlZW4gc3BhY2UgdG8gZm9ybSBhIHNjcmVlbi1zcGFjZSBhbGlnbmVkIGJvdW5kaW5nIHJlY3RhbmdsZVxyXG4gICAgICAgICAgICAvLyB3aGljaCBmb3JtcyB0aGUgZ2VvbWV0cnkgdGhhdCBpcyBhY3R1YWxseSByYXN0ZXJpemVkLiBUaGUgZGltZW5zaW9ucyBvZiB0aGF0IGJvdW5kaW5nIGJveCBhcmUgMy4wXHJcbiAgICAgICAgICAgIC8vIHRpbWVzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgbWF4aW11bSBlaWdlbi12YWx1ZSwgb3IgMyBzdGFuZGFyZCBkZXZpYXRpb25zLiBUaGV5IHRoZW4gdXNlIHRoZSBpbnZlcnNlXHJcbiAgICAgICAgICAgIC8vIDJEIGNvdmFyaWFuY2UgbWF0cml4IChjYWxsZWQgJ2NvbmljJykgaW4gdGhlIENVREEgcmVuZGVyaW5nIHRocmVhZCB0byBkZXRlcm1pbmUgZnJhZ21lbnQgb3BhY2l0eSBieVxyXG4gICAgICAgICAgICAvLyBjYWxjdWxhdGluZyB0aGUgZnVsbCBnYXVzc2lhbjogZXhwKC0wLjUgKiAoWCAtIG1lYW4pICogY29uaWMgKiAoWCAtIG1lYW4pKSAqIHNwbGF0IG9wYWNpdHlcclxuICAgICAgICAgICAgZmxvYXQgYSA9IGNvdjJEdi54O1xyXG4gICAgICAgICAgICBmbG9hdCBkID0gY292MkR2Lno7XHJcbiAgICAgICAgICAgIGZsb2F0IGIgPSBjb3YyRHYueTtcclxuICAgICAgICAgICAgZmxvYXQgRCA9IGEgKiBkIC0gYiAqIGI7XHJcbiAgICAgICAgICAgIGZsb2F0IHRyYWNlID0gYSArIGQ7XHJcbiAgICAgICAgICAgIGZsb2F0IHRyYWNlT3ZlcjIgPSAwLjUgKiB0cmFjZTtcclxuICAgICAgICAgICAgZmxvYXQgdGVybTIgPSBzcXJ0KG1heCgwLjFmLCB0cmFjZU92ZXIyICogdHJhY2VPdmVyMiAtIEQpKTtcclxuICAgICAgICAgICAgZmxvYXQgZWlnZW5WYWx1ZTEgPSB0cmFjZU92ZXIyICsgdGVybTI7XHJcbiAgICAgICAgICAgIGZsb2F0IGVpZ2VuVmFsdWUyID0gdHJhY2VPdmVyMiAtIHRlcm0yO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBvaW50Q2xvdWRNb2RlRW5hYmxlZCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBlaWdlblZhbHVlMSA9IGVpZ2VuVmFsdWUyID0gMC4yO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZWlnZW5WYWx1ZTIgPD0gMC4wKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB2ZWMyIGVpZ2VuVmVjdG9yMSA9IG5vcm1hbGl6ZSh2ZWMyKGIsIGVpZ2VuVmFsdWUxIC0gYSkpO1xyXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGUgZWlnZW4gdmVjdG9ycyBhcmUgb3J0aG9nb25hbCwgd2UgZGVyaXZlIHRoZSBzZWNvbmQgb25lIGZyb20gdGhlIGZpcnN0XHJcbiAgICAgICAgICAgIHZlYzIgZWlnZW5WZWN0b3IyID0gdmVjMihlaWdlblZlY3RvcjEueSwgLWVpZ2VuVmVjdG9yMS54KTtcclxuXHJcbiAgICAgICAgICAgIC8vIFdlIHVzZSBzcXJ0KDgpIHN0YW5kYXJkIGRldmlhdGlvbnMgaW5zdGVhZCBvZiAzIHRvIGVsaW1pbmF0ZSBtb3JlIG9mIHRoZSBzcGxhdCB3aXRoIGEgdmVyeSBsb3cgb3BhY2l0eS5cclxuICAgICAgICAgICAgdmVjMiBiYXNpc1ZlY3RvcjEgPSBlaWdlblZlY3RvcjEgKiBzcGxhdFNjYWxlICogbWluKHNxcnQ4ICogc3FydChlaWdlblZhbHVlMSksICR7cGFyc2VJbnQobWF4U2NyZWVuU3BhY2VTcGxhdFNpemUpfS4wKTtcclxuICAgICAgICAgICAgdmVjMiBiYXNpc1ZlY3RvcjIgPSBlaWdlblZlY3RvcjIgKiBzcGxhdFNjYWxlICogbWluKHNxcnQ4ICogc3FydChlaWdlblZhbHVlMiksICR7cGFyc2VJbnQobWF4U2NyZWVuU3BhY2VTcGxhdFNpemUpfS4wKTtcclxuICAgICAgICAgICAgYDtcclxuXHJcbiAgICAgICAgaWYgKGVuYWJsZU9wdGlvbmFsRWZmZWN0cykge1xyXG4gICAgICAgICAgICB2ZXJ0ZXhTaGFkZXJTb3VyY2UgKz0gYFxyXG4gICAgICAgICAgICAgICAgdkNvbG9yLmEgKj0gc3BsYXRPcGFjaXR5RnJvbVNjZW5lO1xyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGBcclxuICAgICAgICAgICAgdmVjMiBuZGNPZmZzZXQgPSB2ZWMyKHZQb3NpdGlvbi54ICogYmFzaXNWZWN0b3IxICsgdlBvc2l0aW9uLnkgKiBiYXNpc1ZlY3RvcjIpICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpc1ZpZXdwb3J0ICogMi4wICogaW52ZXJzZUZvY2FsQWRqdXN0bWVudDtcclxuXHJcbiAgICAgICAgICAgIHZlYzQgcXVhZFBvcyA9IHZlYzQobmRjQ2VudGVyLnh5ICsgbmRjT2Zmc2V0LCBuZGNDZW50ZXIueiwgMS4wKTtcclxuICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSBxdWFkUG9zO1xyXG5cclxuICAgICAgICAgICAgLy8gU2NhbGUgdGhlIHBvc2l0aW9uIGRhdGEgd2Ugc2VuZCB0byB0aGUgZnJhZ21lbnQgc2hhZGVyXHJcbiAgICAgICAgICAgIHZQb3NpdGlvbiAqPSBzcXJ0ODtcclxuICAgICAgICBgO1xyXG5cclxuICAgICAgICB2ZXJ0ZXhTaGFkZXJTb3VyY2UgKz0gU3BsYXRNYXRlcmlhbC5nZXRWZXJ0ZXhTaGFkZXJGYWRlSW4oKTtcclxuICAgICAgICB2ZXJ0ZXhTaGFkZXJTb3VyY2UgKz0gYH1gO1xyXG5cclxuICAgICAgICByZXR1cm4gdmVydGV4U2hhZGVyU291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBidWlsZEZyYWdtZW50U2hhZGVyKCkge1xyXG4gICAgICAgIGxldCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGBcclxuICAgICAgICAgICAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xyXG4gICAgICAgICAgICAjaW5jbHVkZSA8Y29tbW9uPlxyXG4gXHJcbiAgICAgICAgICAgIHVuaWZvcm0gdmVjMyBkZWJ1Z0NvbG9yO1xyXG5cclxuICAgICAgICAgICAgdmFyeWluZyB2ZWM0IHZDb2xvcjtcclxuICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjtcclxuICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZQb3NpdGlvbjtcclxuICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZTcGxhdEluZGV4O1xyXG5cclxuICAgICAgICBgO1xyXG5cclxuICAgICAgICBmcmFnbWVudFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgICAgIHZvaWQgbWFpbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBwb3NpdGlvbmFsIHNxdWFyZWQgZGlzdGFuY2UgZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBzcGxhdCB0byB0aGUgY3VycmVudCBmcmFnbWVudC5cclxuICAgICAgICAgICAgICAgIGZsb2F0IEEgPSBkb3QodlBvc2l0aW9uLCB2UG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIHBvc2l0aW9uYWwgZGF0YSBpbiB2UG9zaXRpb24gaGFzIGJlZW4gc2NhbGVkIGJ5IHNxcnQoOCksIHRoZSBzcXVhcmVkIHJlc3VsdCB3aWxsIGJlXHJcbiAgICAgICAgICAgICAgICAvLyBzY2FsZWQgYnkgYSBmYWN0b3Igb2YgOC4gSWYgdGhlIHNxdWFyZWQgcmVzdWx0IGlzIGxhcmdlciB0aGFuIDgsIGl0IG1lYW5zIGl0IGlzIG91dHNpZGUgdGhlIGVsbGlwc2VcclxuICAgICAgICAgICAgICAgIC8vIGRlZmluZWQgYnkgdGhlIHJlY3RhbmdsZSBmb3JtZWQgYnkgdlBvc2l0aW9uLiBJdCBhbHNvIG1lYW5zIGl0J3MgZmFydGhlclxyXG4gICAgICAgICAgICAgICAgLy8gYXdheSB0aGFuIHNxcnQoOCkgc3RhbmRhcmQgZGV2aWF0aW9ucyBmcm9tIHRoZSBtZWFuLlxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmKHZTcGxhdEluZGV4LnggPiAyMDAwMC4wKSBkaXNjYXJkO1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgKEEgPiA4LjApIGRpc2NhcmQ7XHJcbiAgICAgICAgICAgICAgICB2ZWMzIGNvbG9yID0gdkNvbG9yLnJnYjtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgcmVuZGVyZWQgc3BsYXQgaXMgc2NhbGVkIGJ5IHNxcnQoOCksIHRoZSBpbnZlcnNlIGNvdmFyaWFuY2UgbWF0cml4IHRoYXQgaXMgcGFydCBvZlxyXG4gICAgICAgICAgICAgICAgLy8gdGhlIGdhdXNzaWFuIGZvcm11bGEgYmVjb21lcyB0aGUgaWRlbnRpdHkgbWF0cml4LiBXZSdyZSB0aGVuIGxlZnQgd2l0aCAoWCAtIG1lYW4pICogKFggLSBtZWFuKSxcclxuICAgICAgICAgICAgICAgIC8vIGFuZCBzaW5jZSAnbWVhbicgaXMgemVybywgd2UgaGF2ZSBYICogWCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgQTpcclxuICAgICAgICAgICAgICAgIGZsb2F0IG9wYWNpdHkgPSBleHAoIC0wLjUqQSkgKiB2Q29sb3IuYTtcclxuICAgICAgICAgICAgICAgIGlmKG9wYWNpdHkgPCAxLjAgLyAyNTUuMClcclxuICAgICAgICAgICAgICAgICAgICBkaXNjYXJkO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHVpbnQgYSA9IHVpbnQoMjU1KTtcclxuICAgICAgICAgICAgICAgIC8vIHZlYzMgYyA9IHZlYzModlNwbGF0SW5kZXgueCAvIDI1Ni4wIC8gMjU2LjAsIGZsb2F0KHVpbnQodlNwbGF0SW5kZXgueCAvIDI1Ni4wICklIGEpIC8gMjU2LjAsIGZsb2F0KHVpbnQodlNwbGF0SW5kZXgueCklIGEpIC8gMjU2LjApO1xyXG4gICAgICAgICAgICAgICAgLy8gZ2xfRnJhZ0NvbG9yID0gdmVjNChjLCAxLjApO1xyXG4gICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgb3BhY2l0eSk7XHJcblxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIGA7XHJcblxyXG4gICAgICAgIHJldHVybiBmcmFnbWVudFNoYWRlclNvdXJjZTtcclxuICAgIH1cclxuXHJcbn0iLCIvKipcclxuICogU3BsYXRNYXRlcmlhbDNEXHJcbiAqIFxyXG4gKiBCYXNlZCBvbiBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKiBcclxuICogTW9kaWZpZWQgZm9yIEZMQU1FIGF2YXRhciBzdXBwb3J0OlxyXG4gKiAtIEV4dGVuZGVkIHZlcnRleCBzaGFkZXIgZm9yIEZMQU1FIGludGVncmF0aW9uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgRG91YmxlU2lkZSwgTm9ybWFsQmxlbmRpbmcsIFNoYWRlck1hdGVyaWFsLCBWZWN0b3IyIH0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQgeyBTcGxhdE1hdGVyaWFsIH0gZnJvbSAnLi9TcGxhdE1hdGVyaWFsLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTcGxhdE1hdGVyaWFsM0Qge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgdGhlIFRocmVlLmpzIG1hdGVyaWFsIHRoYXQgaXMgdXNlZCB0byByZW5kZXIgdGhlIHNwbGF0cy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkeW5hbWljTW9kZSBJZiB0cnVlLCBpdCBtZWFucyB0aGUgc2NlbmUgZ2VvbWV0cnkgcmVwcmVzZW50ZWQgYnkgdGhpcyBzcGxhdCBtZXNoIGlzIG5vdCBzdGF0aW9uYXJ5IG9yXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgc3BsYXQgY291bnQgbWlnaHQgY2hhbmdlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZU9wdGlvbmFsRWZmZWN0cyBXaGVuIHRydWUsIGFsbG93cyBmb3IgdXNhZ2Ugb2YgZXh0cmEgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcyBpbiB0aGUgc2hhZGVyIGZvciBlZmZlY3RzXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNoIGFzIG9wYWNpdHkgYWRqdXN0bWVudC4gRGVmYXVsdCBpcyBmYWxzZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYW50aWFsaWFzZWQgSWYgdHJ1ZSwgY2FsY3VsYXRlIGNvbXBlbnNhdGlvbiBmYWN0b3IgdG8gZGVhbCB3aXRoIGdhdXNzaWFucyBiZWluZyByZW5kZXJlZCBhdCBhIHNpZ25pZmljYW50bHlcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IHJlc29sdXRpb24gdGhhbiB0aGF0IG9mIHRoZWlyIHRyYWluaW5nXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4U2NyZWVuU3BhY2VTcGxhdFNpemUgVGhlIG1heGltdW0gY2xpcCBzcGFjZSBzcGxhdCBzaXplXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3BsYXRTY2FsZSBWYWx1ZSBieSB3aGljaCBhbGwgc3BsYXRzIGFyZSBzY2FsZWQgaW4gc2NyZWVuLXNwYWNlIChkZWZhdWx0IGlzIDEuMClcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwb2ludENsb3VkTW9kZUVuYWJsZWQgUmVuZGVyIGFsbCBzcGxhdHMgYXMgc2NyZWVuLXNwYWNlIGNpcmNsZXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgRGVncmVlIG9mIHNwaGVyaWNhbCBoYXJtb25pY3MgdG8gdXRpbGl6ZSBpbiByZW5kZXJpbmcgc3BsYXRzXHJcbiAgICAgKiBAcmV0dXJuIHtUSFJFRS5TaGFkZXJNYXRlcmlhbH1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGJ1aWxkKGR5bmFtaWNNb2RlID0gZmFsc2UsIGVuYWJsZU9wdGlvbmFsRWZmZWN0cyA9IGZhbHNlLCBhbnRpYWxpYXNlZCA9IGZhbHNlLCBtYXhTY3JlZW5TcGFjZVNwbGF0U2l6ZSA9IDIwNDgsXHJcbiAgICAgICAgICAgICAgICAgc3BsYXRTY2FsZSA9IDEuMCwgcG9pbnRDbG91ZE1vZGVFbmFibGVkID0gZmFsc2UsIG1heFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA9IDAsIGtlcm5lbDJEU2l6ZSA9IDAuMywgdXNlRmxhbWUgPSB0cnVlKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1c3RvbVZlcnRleFZhcnMgPSBgXHJcbiAgICAgICAgICAgIHVuaWZvcm0gdmVjMiBjb3ZhcmlhbmNlc1RleHR1cmVTaXplO1xyXG4gICAgICAgICAgICB1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBjb3ZhcmlhbmNlc1RleHR1cmU7XHJcbiAgICAgICAgICAgIHVuaWZvcm0gaGlnaHAgdXNhbXBsZXIyRCBjb3ZhcmlhbmNlc1RleHR1cmVIYWxmRmxvYXQ7XHJcbiAgICAgICAgICAgIHVuaWZvcm0gaW50IGNvdmFyaWFuY2VzQXJlSGFsZkZsb2F0O1xyXG5cclxuICAgICAgICAgICAgdm9pZCBmcm9tQ292YXJpYW5jZUhhbGZGbG9hdFY0KHV2ZWM0IHZhbCwgb3V0IHZlYzQgZmlyc3QsIG91dCB2ZWM0IHNlY29uZCkge1xyXG4gICAgICAgICAgICAgICAgdmVjMiByID0gdW5wYWNrSGFsZjJ4MTYodmFsLnIpO1xyXG4gICAgICAgICAgICAgICAgdmVjMiBnID0gdW5wYWNrSGFsZjJ4MTYodmFsLmcpO1xyXG4gICAgICAgICAgICAgICAgdmVjMiBiID0gdW5wYWNrSGFsZjJ4MTYodmFsLmIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZpcnN0ID0gdmVjNChyLngsIHIueSwgZy54LCBnLnkpO1xyXG4gICAgICAgICAgICAgICAgc2Vjb25kID0gdmVjNChiLngsIGIueSwgMC4wLCAwLjApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgYDtcclxuXHJcbiAgICAgICAgbGV0IHZlcnRleFNoYWRlclNvdXJjZSA9IFNwbGF0TWF0ZXJpYWwuYnVpbGRWZXJ0ZXhTaGFkZXJCYXNlKGR5bmFtaWNNb2RlLCBlbmFibGVPcHRpb25hbEVmZmVjdHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSwgY3VzdG9tVmVydGV4VmFycywgdXNlRmxhbWUpO1xyXG4gICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBTcGxhdE1hdGVyaWFsM0QuYnVpbGRWZXJ0ZXhTaGFkZXJQcm9qZWN0aW9uKGFudGlhbGlhc2VkLCBlbmFibGVPcHRpb25hbEVmZmVjdHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2NyZWVuU3BhY2VTcGxhdFNpemUsIGtlcm5lbDJEU2l6ZSk7XHJcbiAgICAgICAgY29uc3QgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBTcGxhdE1hdGVyaWFsM0QuYnVpbGRGcmFnbWVudFNoYWRlcigpO1xyXG5cclxuICAgICAgICBjb25zdCB1bmlmb3JtcyA9IFNwbGF0TWF0ZXJpYWwuZ2V0VW5pZm9ybXMoZHluYW1pY01vZGUsIGVuYWJsZU9wdGlvbmFsRWZmZWN0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlLCBzcGxhdFNjYWxlLCBwb2ludENsb3VkTW9kZUVuYWJsZWQpO1xyXG5cclxuICAgICAgICB1bmlmb3Jtc1snY292YXJpYW5jZXNUZXh0dXJlU2l6ZSddID0ge1xyXG4gICAgICAgICAgICAndHlwZSc6ICd2MicsXHJcbiAgICAgICAgICAgICd2YWx1ZSc6IG5ldyBWZWN0b3IyKDEwMjQsIDEwMjQpXHJcbiAgICAgICAgfTtcclxuICAgICAgICB1bmlmb3Jtc1snY292YXJpYW5jZXNUZXh0dXJlJ10gPSB7XHJcbiAgICAgICAgICAgICd0eXBlJzogJ3QnLFxyXG4gICAgICAgICAgICAndmFsdWUnOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB1bmlmb3Jtc1snY292YXJpYW5jZXNUZXh0dXJlSGFsZkZsb2F0J10gPSB7XHJcbiAgICAgICAgICAgICd0eXBlJzogJ3QnLFxyXG4gICAgICAgICAgICAndmFsdWUnOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB1bmlmb3Jtc1snY292YXJpYW5jZXNBcmVIYWxmRmxvYXQnXSA9IHtcclxuICAgICAgICAgICAgJ3R5cGUnOiAnaScsXHJcbiAgICAgICAgICAgICd2YWx1ZSc6IDBcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHVuaWZvcm1zOiB1bmlmb3JtcyxcclxuICAgICAgICAgICAgdmVydGV4U2hhZGVyOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsXHJcbiAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBmcmFnbWVudFNoYWRlclNvdXJjZSxcclxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIGFscGhhVGVzdDogMS4wLFxyXG4gICAgICAgICAgICBibGVuZGluZzogTm9ybWFsQmxlbmRpbmcsXHJcbiAgICAgICAgICAgIGRlcHRoVGVzdDogdHJ1ZSxcclxuICAgICAgICAgICAgZGVwdGhXcml0ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHNpZGU6IERvdWJsZVNpZGVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBidWlsZFZlcnRleFNoYWRlclByb2plY3Rpb24oYW50aWFsaWFzZWQsIGVuYWJsZU9wdGlvbmFsRWZmZWN0cywgbWF4U2NyZWVuU3BhY2VTcGxhdFNpemUsIGtlcm5lbDJEU2l6ZSkge1xyXG4gICAgICAgIGxldCB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSBgXHJcblxyXG4gICAgICAgICAgICB2ZWM0IHNhbXBsZWRDb3ZhcmlhbmNlQTtcclxuICAgICAgICAgICAgdmVjNCBzYW1wbGVkQ292YXJpYW5jZUI7XHJcbiAgICAgICAgICAgIHZlYzMgY292M0RfTTExX00xMl9NMTM7XHJcbiAgICAgICAgICAgIHZlYzMgY292M0RfTTIyX00yM19NMzM7XHJcbiAgICAgICAgICAgIGlmIChjb3ZhcmlhbmNlc0FyZUhhbGZGbG9hdCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBzYW1wbGVkQ292YXJpYW5jZUEgPSB0ZXh0dXJlKGNvdmFyaWFuY2VzVGV4dHVyZSwgZ2V0RGF0YVVWRihuZWFyZXN0RXZlbkluZGV4LCAxLjUsIG9kZE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdmFyaWFuY2VzVGV4dHVyZVNpemUpKTtcclxuICAgICAgICAgICAgICAgIHNhbXBsZWRDb3ZhcmlhbmNlQiA9IHRleHR1cmUoY292YXJpYW5jZXNUZXh0dXJlLCBnZXREYXRhVVZGKG5lYXJlc3RFdmVuSW5kZXgsIDEuNSwgb2RkT2Zmc2V0ICsgdWludCgxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdmFyaWFuY2VzVGV4dHVyZVNpemUpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb3YzRF9NMTFfTTEyX00xMyA9IHZlYzMoc2FtcGxlZENvdmFyaWFuY2VBLnJnYikgKiAoMS4wIC0gZk9kZE9mZnNldCkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMzKHNhbXBsZWRDb3ZhcmlhbmNlQS5iYSwgc2FtcGxlZENvdmFyaWFuY2VCLnIpICogZk9kZE9mZnNldDtcclxuICAgICAgICAgICAgICAgIGNvdjNEX00yMl9NMjNfTTMzID0gdmVjMyhzYW1wbGVkQ292YXJpYW5jZUEuYSwgc2FtcGxlZENvdmFyaWFuY2VCLnJnKSAqICgxLjAgLSBmT2RkT2Zmc2V0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMoc2FtcGxlZENvdmFyaWFuY2VCLmdiYSkgKiBmT2RkT2Zmc2V0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXZlYzQgc2FtcGxlZENvdmFyaWFuY2VVID0gdGV4dHVyZShjb3ZhcmlhbmNlc1RleHR1cmVIYWxmRmxvYXQsIGdldERhdGFVVigxLCAwLCBjb3ZhcmlhbmNlc1RleHR1cmVTaXplKSk7XHJcbiAgICAgICAgICAgICAgICBmcm9tQ292YXJpYW5jZUhhbGZGbG9hdFY0KHNhbXBsZWRDb3ZhcmlhbmNlVSwgc2FtcGxlZENvdmFyaWFuY2VBLCBzYW1wbGVkQ292YXJpYW5jZUIpO1xyXG4gICAgICAgICAgICAgICAgY292M0RfTTExX00xMl9NMTMgPSBzYW1wbGVkQ292YXJpYW5jZUEucmdiO1xyXG4gICAgICAgICAgICAgICAgY292M0RfTTIyX00yM19NMzMgPSB2ZWMzKHNhbXBsZWRDb3ZhcmlhbmNlQS5hLCBzYW1wbGVkQ292YXJpYW5jZUIucmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgM0QgY292YXJpYW5jZSBtYXRyaXhcclxuICAgICAgICAgICAgbWF0MyBWcmsgPSBtYXQzKFxyXG4gICAgICAgICAgICAgICAgY292M0RfTTExX00xMl9NMTMueCwgY292M0RfTTExX00xMl9NMTMueSwgY292M0RfTTExX00xMl9NMTMueixcclxuICAgICAgICAgICAgICAgIGNvdjNEX00xMV9NMTJfTTEzLnksIGNvdjNEX00yMl9NMjNfTTMzLngsIGNvdjNEX00yMl9NMjNfTTMzLnksXHJcbiAgICAgICAgICAgICAgICBjb3YzRF9NMTFfTTEyX00xMy56LCBjb3YzRF9NMjJfTTIzX00zMy55LCBjb3YzRF9NMjJfTTIzX00zMy56XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBtYXQzIEo7XHJcbiAgICAgICAgICAgIGlmIChvcnRob2dyYXBoaWNNb2RlID09IDEpIHtcclxuICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBwcm9qZWN0aW9uIGlzIGxpbmVhciwgd2UgZG9uJ3QgbmVlZCBhbiBhcHByb3hpbWF0aW9uXHJcbiAgICAgICAgICAgICAgICBKID0gdHJhbnNwb3NlKG1hdDMob3J0aG9ab29tLCAwLjAsIDAuMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsIG9ydGhvWm9vbSwgMC4wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwgMC4wLCAwLjApKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgSmFjb2JpYW4gb2YgdGhlIGFmZmluZSBhcHByb3hpbWF0aW9uIG9mIHRoZSBwcm9qZWN0aW9uIG1hdHJpeC4gSXQgd2lsbCBiZSB1c2VkIHRvIHRyYW5zZm9ybSB0aGVcclxuICAgICAgICAgICAgICAgIC8vIDNEIGNvdmFyaWFuY2UgbWF0cml4IGluc3RlYWQgb2YgdXNpbmcgdGhlIGFjdHVhbCBwcm9qZWN0aW9uIG1hdHJpeCBiZWNhdXNlIHRoYXQgdHJhbnNmb3JtYXRpb24gd291bGRcclxuICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgYSBub24tbGluZWFyIGNvbXBvbmVudCAocGVyc3BlY3RpdmUgZGl2aXNpb24pIHdoaWNoIHdvdWxkIHlpZWxkIGEgbm9uLWdhdXNzaWFuIHJlc3VsdC5cclxuICAgICAgICAgICAgICAgIGZsb2F0IHMgPSAxLjAgLyAodmlld0NlbnRlci56ICogdmlld0NlbnRlci56KTtcclxuICAgICAgICAgICAgICAgIEogPSBtYXQzKFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY2FsLnggLyB2aWV3Q2VudGVyLnosIDAuLCAtKGZvY2FsLnggKiB2aWV3Q2VudGVyLngpICogcyxcclxuICAgICAgICAgICAgICAgICAgICAwLiwgZm9jYWwueSAvIHZpZXdDZW50ZXIueiwgLShmb2NhbC55ICogdmlld0NlbnRlci55KSAqIHMsXHJcbiAgICAgICAgICAgICAgICAgICAgMC4sIDAuLCAwLlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQ29uY2F0ZW5hdGUgdGhlIHByb2plY3Rpb24gYXBwcm94aW1hdGlvbiB3aXRoIHRoZSBtb2RlbC12aWV3IHRyYW5zZm9ybWF0aW9uXHJcbiAgICAgICAgICAgIG1hdDMgVyA9IHRyYW5zcG9zZShtYXQzKHRyYW5zZm9ybU1vZGVsVmlld01hdHJpeCkpO1xyXG4gICAgICAgICAgICBtYXQzIFQgPSBXICogSjtcclxuXHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgM0QgY292YXJpYW5jZSBtYXRyaXggKFZyaykgdG8gY29tcHV0ZSB0aGUgMkQgY292YXJpYW5jZSBtYXRyaXhcclxuICAgICAgICAgICAgbWF0MyBjb3YyRG0gPSB0cmFuc3Bvc2UoVCkgKiBWcmsgKiBUO1xyXG4gICAgICAgICAgICBgO1xyXG5cclxuICAgICAgICBpZiAoYW50aWFsaWFzZWQpIHtcclxuICAgICAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGBcclxuICAgICAgICAgICAgICAgIGZsb2F0IGRldE9yaWcgPSBjb3YyRG1bMF1bMF0gKiBjb3YyRG1bMV1bMV0gLSBjb3YyRG1bMF1bMV0gKiBjb3YyRG1bMF1bMV07XHJcbiAgICAgICAgICAgICAgICBjb3YyRG1bMF1bMF0gKz0gJHtrZXJuZWwyRFNpemV9O1xyXG4gICAgICAgICAgICAgICAgY292MkRtWzFdWzFdICs9ICR7a2VybmVsMkRTaXplfTtcclxuICAgICAgICAgICAgICAgIGZsb2F0IGRldEJsdXIgPSBjb3YyRG1bMF1bMF0gKiBjb3YyRG1bMV1bMV0gLSBjb3YyRG1bMF1bMV0gKiBjb3YyRG1bMF1bMV07XHJcbiAgICAgICAgICAgICAgICB2Q29sb3IuYSAqPSBzcXJ0KG1heChkZXRPcmlnIC8gZGV0Qmx1ciwgMC4wKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodkNvbG9yLmEgPCBtaW5BbHBoYSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgICAgICAgICBjb3YyRG1bMF1bMF0gKz0gJHtrZXJuZWwyRFNpemV9O1xyXG4gICAgICAgICAgICAgICAgY292MkRtWzFdWzFdICs9ICR7a2VybmVsMkRTaXplfTtcclxuICAgICAgICAgICAgYDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcblxyXG4gICAgICAgICAgICAvLyBXZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgdXBwZXItbGVmdCAyeDIgcG9ydGlvbiBvZiB0aGUgcHJvamVjdGVkIDNEIGNvdmFyaWFuY2UgbWF0cml4IGJlY2F1c2VcclxuICAgICAgICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IHRoZSBYIGFuZCBZIHZhbHVlcy4gV2Ugd2FudCB0aGUgWC1kaWFnb25hbCwgY292MkRtWzBdWzBdLFxyXG4gICAgICAgICAgICAvLyB0aGUgWS1kaWFnb25hbCwgY292MkRtWzFdWzFdLCBhbmQgdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gdGhlIHR3byBjb3YyRG1bMF1bMV0uIFdlIGRvbid0XHJcbiAgICAgICAgICAgIC8vIG5lZWQgY292MkRtWzFdWzBdIGJlY2F1c2UgaXQgaXMgYSBzeW1ldHJpYyBtYXRyaXguXHJcbiAgICAgICAgICAgIHZlYzMgY292MkR2ID0gdmVjMyhjb3YyRG1bMF1bMF0sIGNvdjJEbVswXVsxXSwgY292MkRtWzFdWzFdKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFdlIG5vdyBuZWVkIHRvIHNvbHZlIGZvciB0aGUgZWlnZW4tdmFsdWVzIGFuZCBlaWdlbiB2ZWN0b3JzIG9mIHRoZSAyRCBjb3ZhcmlhbmNlIG1hdHJpeFxyXG4gICAgICAgICAgICAvLyBzbyB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgdGhlIDJEIGJhc2lzIGZvciB0aGUgc3BsYXQuIFRoaXMgaXMgZG9uZSB1c2luZyB0aGUgbWV0aG9kIGRlc2NyaWJlZFxyXG4gICAgICAgICAgICAvLyBoZXJlOiBodHRwczovL3Blb3BsZS5tYXRoLmhhcnZhcmQuZWR1L35rbmlsbC90ZWFjaGluZy9tYXRoMjFiMjAwNC9leGhpYml0cy8yZG1hdHJpY2VzL2luZGV4Lmh0bWxcclxuICAgICAgICAgICAgLy8gQWZ0ZXIgY2FsY3VsYXRpbmcgdGhlIGVpZ2VuLXZhbHVlcyBhbmQgZWlnZW4tdmVjdG9ycywgd2UgY2FsY3VsYXRlIHRoZSBiYXNpcyBmb3IgcmVuZGVyaW5nIHRoZSBzcGxhdFxyXG4gICAgICAgICAgICAvLyBieSBub3JtYWxpemluZyB0aGUgZWlnZW4tdmVjdG9ycyBhbmQgdGhlbiBtdWx0aXBseWluZyB0aGVtIGJ5IChzcXJ0KDgpICogc3FydChlaWdlbi12YWx1ZSkpLCB3aGljaCBpc1xyXG4gICAgICAgICAgICAvLyBlcXVhbCB0byBzY2FsaW5nIHRoZW0gYnkgc3FydCg4KSBzdGFuZGFyZCBkZXZpYXRpb25zLlxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRoYW4gaW4gdGhlIG9yaWdpbmFsIHdvcmsgYXQgSU5SSUEuIEluIHRoYXQgd29yayB0aGV5IGNvbXB1dGUgdGhlXHJcbiAgICAgICAgICAgIC8vIG1heCBleHRlbnRzIG9mIHRoZSBwcm9qZWN0ZWQgc3BsYXQgaW4gc2NyZWVuIHNwYWNlIHRvIGZvcm0gYSBzY3JlZW4tc3BhY2UgYWxpZ25lZCBib3VuZGluZyByZWN0YW5nbGVcclxuICAgICAgICAgICAgLy8gd2hpY2ggZm9ybXMgdGhlIGdlb21ldHJ5IHRoYXQgaXMgYWN0dWFsbHkgcmFzdGVyaXplZC4gVGhlIGRpbWVuc2lvbnMgb2YgdGhhdCBib3VuZGluZyBib3ggYXJlIDMuMFxyXG4gICAgICAgICAgICAvLyB0aW1lcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIG1heGltdW0gZWlnZW4tdmFsdWUsIG9yIDMgc3RhbmRhcmQgZGV2aWF0aW9ucy4gVGhleSB0aGVuIHVzZSB0aGUgaW52ZXJzZVxyXG4gICAgICAgICAgICAvLyAyRCBjb3ZhcmlhbmNlIG1hdHJpeCAoY2FsbGVkICdjb25pYycpIGluIHRoZSBDVURBIHJlbmRlcmluZyB0aHJlYWQgdG8gZGV0ZXJtaW5lIGZyYWdtZW50IG9wYWNpdHkgYnlcclxuICAgICAgICAgICAgLy8gY2FsY3VsYXRpbmcgdGhlIGZ1bGwgZ2F1c3NpYW46IGV4cCgtMC41ICogKFggLSBtZWFuKSAqIGNvbmljICogKFggLSBtZWFuKSkgKiBzcGxhdCBvcGFjaXR5XHJcbiAgICAgICAgICAgIGZsb2F0IGEgPSBjb3YyRHYueDtcclxuICAgICAgICAgICAgZmxvYXQgZCA9IGNvdjJEdi56O1xyXG4gICAgICAgICAgICBmbG9hdCBiID0gY292MkR2Lnk7XHJcbiAgICAgICAgICAgIGZsb2F0IEQgPSBhICogZCAtIGIgKiBiO1xyXG4gICAgICAgICAgICBmbG9hdCB0cmFjZSA9IGEgKyBkO1xyXG4gICAgICAgICAgICBmbG9hdCB0cmFjZU92ZXIyID0gMC41ICogdHJhY2U7XHJcbiAgICAgICAgICAgIGZsb2F0IHRlcm0yID0gc3FydChtYXgoMC4xZiwgdHJhY2VPdmVyMiAqIHRyYWNlT3ZlcjIgLSBEKSk7XHJcbiAgICAgICAgICAgIGZsb2F0IGVpZ2VuVmFsdWUxID0gdHJhY2VPdmVyMiArIHRlcm0yO1xyXG4gICAgICAgICAgICBmbG9hdCBlaWdlblZhbHVlMiA9IHRyYWNlT3ZlcjIgLSB0ZXJtMjtcclxuXHJcbiAgICAgICAgICAgIGlmIChwb2ludENsb3VkTW9kZUVuYWJsZWQgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgZWlnZW5WYWx1ZTEgPSBlaWdlblZhbHVlMiA9IDAuMjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGVpZ2VuVmFsdWUyIDw9IDAuMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdmVjMiBlaWdlblZlY3RvcjEgPSBub3JtYWxpemUodmVjMihiLCBlaWdlblZhbHVlMSAtIGEpKTtcclxuICAgICAgICAgICAgLy8gc2luY2UgdGhlIGVpZ2VuIHZlY3RvcnMgYXJlIG9ydGhvZ29uYWwsIHdlIGRlcml2ZSB0aGUgc2Vjb25kIG9uZSBmcm9tIHRoZSBmaXJzdFxyXG4gICAgICAgICAgICB2ZWMyIGVpZ2VuVmVjdG9yMiA9IHZlYzIoZWlnZW5WZWN0b3IxLnksIC1laWdlblZlY3RvcjEueCk7XHJcblxyXG4gICAgICAgICAgICAvLyBXZSB1c2Ugc3FydCg4KSBzdGFuZGFyZCBkZXZpYXRpb25zIGluc3RlYWQgb2YgMyB0byBlbGltaW5hdGUgbW9yZSBvZiB0aGUgc3BsYXQgd2l0aCBhIHZlcnkgbG93IG9wYWNpdHkuXHJcbiAgICAgICAgICAgIHZlYzIgYmFzaXNWZWN0b3IxID0gZWlnZW5WZWN0b3IxICogc3BsYXRTY2FsZSAqIG1pbihzcXJ0OCAqIHNxcnQoZWlnZW5WYWx1ZTEpLCAke3BhcnNlSW50KG1heFNjcmVlblNwYWNlU3BsYXRTaXplKX0uMCk7XHJcbiAgICAgICAgICAgIHZlYzIgYmFzaXNWZWN0b3IyID0gZWlnZW5WZWN0b3IyICogc3BsYXRTY2FsZSAqIG1pbihzcXJ0OCAqIHNxcnQoZWlnZW5WYWx1ZTIpLCAke3BhcnNlSW50KG1heFNjcmVlblNwYWNlU3BsYXRTaXplKX0uMCk7XHJcbiAgICAgICAgICAgIGA7XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVPcHRpb25hbEVmZmVjdHMpIHtcclxuICAgICAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGBcclxuICAgICAgICAgICAgICAgIHZDb2xvci5hICo9IHNwbGF0T3BhY2l0eUZyb21TY2VuZTtcclxuICAgICAgICAgICAgYDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlcnRleFNoYWRlclNvdXJjZSArPSBgXHJcbiAgICAgICAgICAgIHZlYzIgbmRjT2Zmc2V0ID0gdmVjMih2UG9zaXRpb24ueCAqIGJhc2lzVmVjdG9yMSArIHZQb3NpdGlvbi55ICogYmFzaXNWZWN0b3IyKSAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaXNWaWV3cG9ydCAqIDIuMCAqIGludmVyc2VGb2NhbEFkanVzdG1lbnQ7XHJcblxyXG4gICAgICAgICAgICB2ZWM0IHF1YWRQb3MgPSB2ZWM0KG5kY0NlbnRlci54eSArIG5kY09mZnNldCwgbmRjQ2VudGVyLnosIDEuMCk7XHJcbiAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gcXVhZFBvcztcclxuXHJcbiAgICAgICAgICAgIC8vIFNjYWxlIHRoZSBwb3NpdGlvbiBkYXRhIHdlIHNlbmQgdG8gdGhlIGZyYWdtZW50IHNoYWRlclxyXG4gICAgICAgICAgICB2UG9zaXRpb24gKj0gc3FydDg7XHJcbiAgICAgICAgYDtcclxuXHJcbiAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IFNwbGF0TWF0ZXJpYWwuZ2V0VmVydGV4U2hhZGVyRmFkZUluKCk7XHJcbiAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IGB9YDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHZlcnRleFNoYWRlclNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYnVpbGRGcmFnbWVudFNoYWRlcigpIHtcclxuICAgICAgICBsZXQgZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBgXHJcbiAgICAgICAgICAgIHByZWNpc2lvbiBoaWdocCBmbG9hdDtcclxuICAgICAgICAgICAgI2luY2x1ZGUgPGNvbW1vbj5cclxuIFxyXG4gICAgICAgICAgICB1bmlmb3JtIHZlYzMgZGVidWdDb2xvcjtcclxuXHJcbiAgICAgICAgICAgIHZhcnlpbmcgdmVjNCB2Q29sb3I7XHJcbiAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2VXY7XHJcbiAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2UG9zaXRpb247XHJcbiAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2U3BsYXRJbmRleDtcclxuXHJcbiAgICAgICAgYDtcclxuXHJcbiAgICAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UgKz0gYFxyXG4gICAgICAgICAgICB2b2lkIG1haW4gKCkge1xyXG4gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcG9zaXRpb25hbCBzcXVhcmVkIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgc3BsYXQgdG8gdGhlIGN1cnJlbnQgZnJhZ21lbnQuXHJcbiAgICAgICAgICAgICAgICBmbG9hdCBBID0gZG90KHZQb3NpdGlvbiwgdlBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBwb3NpdGlvbmFsIGRhdGEgaW4gdlBvc2l0aW9uIGhhcyBiZWVuIHNjYWxlZCBieSBzcXJ0KDgpLCB0aGUgc3F1YXJlZCByZXN1bHQgd2lsbCBiZVxyXG4gICAgICAgICAgICAgICAgLy8gc2NhbGVkIGJ5IGEgZmFjdG9yIG9mIDguIElmIHRoZSBzcXVhcmVkIHJlc3VsdCBpcyBsYXJnZXIgdGhhbiA4LCBpdCBtZWFucyBpdCBpcyBvdXRzaWRlIHRoZSBlbGxpcHNlXHJcbiAgICAgICAgICAgICAgICAvLyBkZWZpbmVkIGJ5IHRoZSByZWN0YW5nbGUgZm9ybWVkIGJ5IHZQb3NpdGlvbi4gSXQgYWxzbyBtZWFucyBpdCdzIGZhcnRoZXJcclxuICAgICAgICAgICAgICAgIC8vIGF3YXkgdGhhbiBzcXJ0KDgpIHN0YW5kYXJkIGRldmlhdGlvbnMgZnJvbSB0aGUgbWVhbi5cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZih2U3BsYXRJbmRleC54ID4gMjAwMDAuMCkgZGlzY2FyZDtcclxuICAgICAgICAgICAgICAgIC8vIGlmIChBID4gOC4wKSBkaXNjYXJkO1xyXG4gICAgICAgICAgICAgICAgdmVjMyBjb2xvciA9IHZDb2xvci5yZ2I7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIHJlbmRlcmVkIHNwbGF0IGlzIHNjYWxlZCBieSBzcXJ0KDgpLCB0aGUgaW52ZXJzZSBjb3ZhcmlhbmNlIG1hdHJpeCB0aGF0IGlzIHBhcnQgb2ZcclxuICAgICAgICAgICAgICAgIC8vIHRoZSBnYXVzc2lhbiBmb3JtdWxhIGJlY29tZXMgdGhlIGlkZW50aXR5IG1hdHJpeC4gV2UncmUgdGhlbiBsZWZ0IHdpdGggKFggLSBtZWFuKSAqIChYIC0gbWVhbiksXHJcbiAgICAgICAgICAgICAgICAvLyBhbmQgc2luY2UgJ21lYW4nIGlzIHplcm8sIHdlIGhhdmUgWCAqIFgsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIEE6XHJcbiAgICAgICAgICAgICAgICBmbG9hdCBvcGFjaXR5ID0gZXhwKCAtMC41KkEpICogdkNvbG9yLmE7XHJcbiAgICAgICAgICAgICAgICBpZihvcGFjaXR5IDwgMS4wIC8gMjU1LjApXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzY2FyZDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB1aW50IGEgPSB1aW50KDI1NSk7XHJcbiAgICAgICAgICAgICAgICAvLyB2ZWMzIGMgPSB2ZWMzKHZTcGxhdEluZGV4LnggLyAyNTYuMCAvIDI1Ni4wLCBmbG9hdCh1aW50KHZTcGxhdEluZGV4LnggLyAyNTYuMCApJSBhKSAvIDI1Ni4wLCBmbG9hdCh1aW50KHZTcGxhdEluZGV4LngpJSBhKSAvIDI1Ni4wKTtcclxuICAgICAgICAgICAgICAgIC8vIGdsX0ZyYWdDb2xvciA9IHZlYzQoYywgMS4wKTtcclxuICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIG9wYWNpdHkpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBgO1xyXG5cclxuICAgICAgICByZXR1cm4gZnJhZ21lbnRTaGFkZXJTb3VyY2U7XHJcbiAgICB9XHJcblxyXG59XHJcbiIsIi8qKlxyXG4gKiBTcGxhdE1hdGVyaWFsMkRcclxuICogXHJcbiAqIEJhc2VkIG9uIEBta2tlbGxvZ2cvZ2F1c3NpYW4tc3BsYXRzLTNkIChNSVQgTGljZW5zZSlcclxuICogaHR0cHM6Ly9naXRodWIuY29tL21ra2VsbG9nZy9HYXVzc2lhblNwbGF0czNEXHJcbiAqIFxyXG4gKiBNb2RpZmllZCBmb3IgRkxBTUUgYXZhdGFyIHN1cHBvcnQ6XHJcbiAqIC0gRXh0ZW5kZWQgdmVydGV4IHNoYWRlciBmb3IgRkxBTUUgaW50ZWdyYXRpb25cclxuICovXHJcblxyXG5pbXBvcnQgeyBEb3VibGVTaWRlLCBOb3JtYWxCbGVuZGluZywgU2hhZGVyTWF0ZXJpYWwsIFZlY3RvcjIgfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7IFNwbGF0TWF0ZXJpYWwgfSBmcm9tICcuL1NwbGF0TWF0ZXJpYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNwbGF0TWF0ZXJpYWwyRCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCB0aGUgVGhyZWUuanMgbWF0ZXJpYWwgdGhhdCBpcyB1c2VkIHRvIHJlbmRlciB0aGUgc3BsYXRzLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGR5bmFtaWNNb2RlIElmIHRydWUsIGl0IG1lYW5zIHRoZSBzY2VuZSBnZW9tZXRyeSByZXByZXNlbnRlZCBieSB0aGlzIHNwbGF0IG1lc2ggaXMgbm90IHN0YXRpb25hcnkgb3JcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBzcGxhdCBjb3VudCBtaWdodCBjaGFuZ2VcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5hYmxlT3B0aW9uYWxFZmZlY3RzIFdoZW4gdHJ1ZSwgYWxsb3dzIGZvciB1c2FnZSBvZiBleHRyYSBwcm9wZXJ0aWVzIGFuZCBhdHRyaWJ1dGVzIGluIHRoZSBzaGFkZXIgZm9yIGVmZmVjdHNcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgb3BhY2l0eSBhZGp1c3RtZW50LiBEZWZhdWx0IGlzIGZhbHNlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNwbGF0U2NhbGUgVmFsdWUgYnkgd2hpY2ggYWxsIHNwbGF0cyBhcmUgc2NhbGVkIGluIHNjcmVlbi1zcGFjZSAoZGVmYXVsdCBpcyAxLjApXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcG9pbnRDbG91ZE1vZGVFbmFibGVkIFJlbmRlciBhbGwgc3BsYXRzIGFzIHNjcmVlbi1zcGFjZSBjaXJjbGVzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlIERlZ3JlZSBvZiBzcGhlcmljYWwgaGFybW9uaWNzIHRvIHV0aWxpemUgaW4gcmVuZGVyaW5nIHNwbGF0c1xyXG4gICAgICogQHJldHVybiB7VEhSRUUuU2hhZGVyTWF0ZXJpYWx9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBidWlsZChkeW5hbWljTW9kZSA9IGZhbHNlLCBlbmFibGVPcHRpb25hbEVmZmVjdHMgPSBmYWxzZSwgc3BsYXRTY2FsZSA9IDEuMCxcclxuICAgICAgICAgICAgICAgICBwb2ludENsb3VkTW9kZUVuYWJsZWQgPSBmYWxzZSwgbWF4U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gMCkge1xyXG5cclxuICAgICAgICBjb25zdCBjdXN0b21WZXJ0ZXhWYXJzID0gYFxyXG4gICAgICAgICAgICB1bmlmb3JtIHZlYzIgc2NhbGVSb3RhdGlvbnNUZXh0dXJlU2l6ZTtcclxuICAgICAgICAgICAgdW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgc2NhbGVSb3RhdGlvbnNUZXh0dXJlO1xyXG4gICAgICAgICAgICB2YXJ5aW5nIG1hdDMgdlQ7XHJcbiAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2UXVhZENlbnRlcjtcclxuICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZGcmFnQ29vcmQ7XHJcbiAgICAgICAgYDtcclxuXHJcbiAgICAgICAgbGV0IHZlcnRleFNoYWRlclNvdXJjZSA9IFNwbGF0TWF0ZXJpYWwuYnVpbGRWZXJ0ZXhTaGFkZXJCYXNlKGR5bmFtaWNNb2RlLCBlbmFibGVPcHRpb25hbEVmZmVjdHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSwgY3VzdG9tVmVydGV4VmFycyk7XHJcbiAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IFNwbGF0TWF0ZXJpYWwyRC5idWlsZFZlcnRleFNoYWRlclByb2plY3Rpb24oKTtcclxuICAgICAgICBjb25zdCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IFNwbGF0TWF0ZXJpYWwyRC5idWlsZEZyYWdtZW50U2hhZGVyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVuaWZvcm1zID0gU3BsYXRNYXRlcmlhbC5nZXRVbmlmb3JtcyhkeW5hbWljTW9kZSwgZW5hYmxlT3B0aW9uYWxFZmZlY3RzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUsIHNwbGF0U2NhbGUsIHBvaW50Q2xvdWRNb2RlRW5hYmxlZCk7XHJcblxyXG4gICAgICAgIHVuaWZvcm1zWydzY2FsZVJvdGF0aW9uc1RleHR1cmUnXSA9IHtcclxuICAgICAgICAgICAgJ3R5cGUnOiAndCcsXHJcbiAgICAgICAgICAgICd2YWx1ZSc6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHVuaWZvcm1zWydzY2FsZVJvdGF0aW9uc1RleHR1cmVTaXplJ10gPSB7XHJcbiAgICAgICAgICAgICd0eXBlJzogJ3YyJyxcclxuICAgICAgICAgICAgJ3ZhbHVlJzogbmV3IFZlY3RvcjIoMTAyNCwgMTAyNClcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHVuaWZvcm1zOiB1bmlmb3JtcyxcclxuICAgICAgICAgICAgdmVydGV4U2hhZGVyOiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsXHJcbiAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyOiBmcmFnbWVudFNoYWRlclNvdXJjZSxcclxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIGFscGhhVGVzdDogMS4wLFxyXG4gICAgICAgICAgICBibGVuZGluZzogTm9ybWFsQmxlbmRpbmcsXHJcbiAgICAgICAgICAgIGRlcHRoVGVzdDogdHJ1ZSxcclxuICAgICAgICAgICAgZGVwdGhXcml0ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHNpZGU6IERvdWJsZVNpZGVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBidWlsZFZlcnRleFNoYWRlclByb2plY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIC8vIE9yaWdpbmFsIENVREEgY29kZSBmb3IgY2FsY3VsYXRpbmcgc3BsYXQtdG8tc2NyZWVuIHRyYW5zZm9ybWF0aW9uLCBmb3IgcmVmZXJlbmNlXHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAgZ2xtOjptYXQzIFIgPSBxdWF0X3RvX3JvdG1hdChyb3QpO1xyXG4gICAgICAgICAgICBnbG06Om1hdDMgUyA9IHNjYWxlX3RvX21hdChzY2FsZSwgbW9kKTtcclxuICAgICAgICAgICAgZ2xtOjptYXQzIEwgPSBSICogUztcclxuXHJcbiAgICAgICAgICAgIC8vIGNlbnRlciBvZiBHYXVzc2lhbnMgaW4gdGhlIGNhbWVyYSBjb29yZGluYXRlXHJcbiAgICAgICAgICAgIGdsbTo6bWF0M3g0IHNwbGF0MndvcmxkID0gZ2xtOjptYXQzeDQoXHJcbiAgICAgICAgICAgICAgICBnbG06OnZlYzQoTFswXSwgMC4wKSxcclxuICAgICAgICAgICAgICAgIGdsbTo6dmVjNChMWzFdLCAwLjApLFxyXG4gICAgICAgICAgICAgICAgZ2xtOjp2ZWM0KHBfb3JpZy54LCBwX29yaWcueSwgcF9vcmlnLnosIDEpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBnbG06Om1hdDQgd29ybGQybmRjID0gZ2xtOjptYXQ0KFxyXG4gICAgICAgICAgICAgICAgcHJvam1hdHJpeFswXSwgcHJvam1hdHJpeFs0XSwgcHJvam1hdHJpeFs4XSwgcHJvam1hdHJpeFsxMl0sXHJcbiAgICAgICAgICAgICAgICBwcm9qbWF0cml4WzFdLCBwcm9qbWF0cml4WzVdLCBwcm9qbWF0cml4WzldLCBwcm9qbWF0cml4WzEzXSxcclxuICAgICAgICAgICAgICAgIHByb2ptYXRyaXhbMl0sIHByb2ptYXRyaXhbNl0sIHByb2ptYXRyaXhbMTBdLCBwcm9qbWF0cml4WzE0XSxcclxuICAgICAgICAgICAgICAgIHByb2ptYXRyaXhbM10sIHByb2ptYXRyaXhbN10sIHByb2ptYXRyaXhbMTFdLCBwcm9qbWF0cml4WzE1XVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgZ2xtOjptYXQzeDQgbmRjMnBpeCA9IGdsbTo6bWF0M3g0KFxyXG4gICAgICAgICAgICAgICAgZ2xtOjp2ZWM0KGZsb2F0KFcpIC8gMi4wLCAwLjAsIDAuMCwgZmxvYXQoVy0xKSAvIDIuMCksXHJcbiAgICAgICAgICAgICAgICBnbG06OnZlYzQoMC4wLCBmbG9hdChIKSAvIDIuMCwgMC4wLCBmbG9hdChILTEpIC8gMi4wKSxcclxuICAgICAgICAgICAgICAgIGdsbTo6dmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBUID0gZ2xtOjp0cmFuc3Bvc2Uoc3BsYXQyd29ybGQpICogd29ybGQybmRjICogbmRjMnBpeDtcclxuICAgICAgICAgICAgbm9ybWFsID0gdHJhbnNmb3JtVmVjNHgzKHtMWzJdLngsIExbMl0ueSwgTFsyXS56fSwgdmlld21hdHJpeCk7XHJcbiAgICAgICAgKi9cclxuXHJcbiAgICAgICAgLy8gQ29tcHV0ZSBhIDJELXRvLTJEIG1hcHBpbmcgbWF0cml4IGZyb20gYSB0YW5nZW50IHBsYW5lIGludG8gYSBpbWFnZSBwbGFuZVxyXG4gICAgICAgIC8vIGdpdmVuIGEgMkQgZ2F1c3NpYW4gcGFyYW1ldGVycy4gVCA9IFdIIChmcm9tIHRoZSBwYXBlcjogaHR0cHM6Ly9hcnhpdi5vcmcvcGRmLzI0MDMuMTc4ODgpXHJcbiAgICAgICAgbGV0IHZlcnRleFNoYWRlclNvdXJjZSA9IGBcclxuXHJcbiAgICAgICAgICAgIHZlYzQgc2NhbGVSb3RhdGlvbkEgPSB0ZXh0dXJlKHNjYWxlUm90YXRpb25zVGV4dHVyZSwgZ2V0RGF0YVVWRihuZWFyZXN0RXZlbkluZGV4LCAxLjUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZGRPZmZzZXQsIHNjYWxlUm90YXRpb25zVGV4dHVyZVNpemUpKTtcclxuICAgICAgICAgICAgdmVjNCBzY2FsZVJvdGF0aW9uQiA9IHRleHR1cmUoc2NhbGVSb3RhdGlvbnNUZXh0dXJlLCBnZXREYXRhVVZGKG5lYXJlc3RFdmVuSW5kZXgsIDEuNSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9kZE9mZnNldCArIHVpbnQoMSksIHNjYWxlUm90YXRpb25zVGV4dHVyZVNpemUpKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMgc2NhbGVSb3RhdGlvbjEyMyA9IHZlYzMoc2NhbGVSb3RhdGlvbkEucmdiKSAqICgxLjAgLSBmT2RkT2Zmc2V0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMoc2NhbGVSb3RhdGlvbkEuYmEsIHNjYWxlUm90YXRpb25CLnIpICogZk9kZE9mZnNldDtcclxuICAgICAgICAgICAgdmVjMyBzY2FsZVJvdGF0aW9uNDU2ID0gdmVjMyhzY2FsZVJvdGF0aW9uQS5hLCBzY2FsZVJvdGF0aW9uQi5yZykgKiAoMS4wIC0gZk9kZE9mZnNldCkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMzKHNjYWxlUm90YXRpb25CLmdiYSkgKiBmT2RkT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgZmxvYXQgbWlzc2luZ1cgPSBzcXJ0KDEuMCAtIHNjYWxlUm90YXRpb240NTYueCAqIHNjYWxlUm90YXRpb240NTYueCAtIHNjYWxlUm90YXRpb240NTYueSAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlUm90YXRpb240NTYueSAtIHNjYWxlUm90YXRpb240NTYueiAqIHNjYWxlUm90YXRpb240NTYueik7XHJcbiAgICAgICAgICAgIG1hdDMgUiA9IHF1YXRlcm5pb25Ub1JvdGF0aW9uTWF0cml4KHNjYWxlUm90YXRpb240NTYuciwgc2NhbGVSb3RhdGlvbjQ1Ni5nLCBzY2FsZVJvdGF0aW9uNDU2LmIsIG1pc3NpbmdXKTtcclxuICAgICAgICAgICAgbWF0MyBTID0gbWF0MyhzY2FsZVJvdGF0aW9uMTIzLnIsIDAuMCwgMC4wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wLCBzY2FsZVJvdGF0aW9uMTIzLmcsIDAuMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwgMC4wLCBzY2FsZVJvdGF0aW9uMTIzLmIpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbWF0MyBMID0gUiAqIFM7XHJcblxyXG4gICAgICAgICAgICBtYXQzeDQgc3BsYXQyV29ybGQgPSBtYXQzeDQodmVjNChMWzBdLCAwLjApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNChMWzFdLCAwLjApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNChzcGxhdENlbnRlci54LCBzcGxhdENlbnRlci55LCBzcGxhdENlbnRlci56LCAxLjApKTtcclxuXHJcbiAgICAgICAgICAgIG1hdDQgd29ybGQybmRjID0gdHJhbnNwb3NlKHByb2plY3Rpb25NYXRyaXggKiB0cmFuc2Zvcm1Nb2RlbFZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgbWF0M3g0IG5kYzJwaXggPSBtYXQzeDQodmVjNCh2aWV3cG9ydC54IC8gMi4wLCAwLjAsIDAuMCwgKHZpZXdwb3J0LnggLSAxLjApIC8gMi4wKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCgwLjAsIHZpZXdwb3J0LnkgLyAyLjAsIDAuMCwgKHZpZXdwb3J0LnkgLSAxLjApIC8gMi4wKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApKTtcclxuXHJcbiAgICAgICAgICAgIG1hdDMgVCA9IHRyYW5zcG9zZShzcGxhdDJXb3JsZCkgKiB3b3JsZDJuZGMgKiBuZGMycGl4O1xyXG4gICAgICAgICAgICB2ZWMzIG5vcm1hbCA9IHZlYzModmlld01hdHJpeCAqIHZlYzQoTFswXVsyXSwgTFsxXVsyXSwgTFsyXVsyXSwgMC4wKSk7XHJcbiAgICAgICAgYDtcclxuXHJcbiAgICAgICAgLy8gT3JpZ2luYWwgQ1VEQSBjb2RlIGZvciBwcm9qZWN0aW9uIHRvIDJELCBmb3IgcmVmZXJlbmNlXHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAgZmxvYXQzIFQwID0ge1RbMF1bMF0sIFRbMF1bMV0sIFRbMF1bMl19O1xyXG4gICAgICAgICAgICBmbG9hdDMgVDEgPSB7VFsxXVswXSwgVFsxXVsxXSwgVFsxXVsyXX07XHJcbiAgICAgICAgICAgIGZsb2F0MyBUMyA9IHtUWzJdWzBdLCBUWzJdWzFdLCBUWzJdWzJdfTtcclxuXHJcbiAgICAgICAgICAgIC8vIENvbXB1dGUgQUFCQlxyXG4gICAgICAgICAgICBmbG9hdDMgdGVtcF9wb2ludCA9IHsxLjBmLCAxLjBmLCAtMS4wZn07XHJcbiAgICAgICAgICAgIGZsb2F0IGRpc3RhbmNlID0gc3VtZjMoVDMgKiBUMyAqIHRlbXBfcG9pbnQpO1xyXG4gICAgICAgICAgICBmbG9hdDMgZiA9ICgxIC8gZGlzdGFuY2UpICogdGVtcF9wb2ludDtcclxuICAgICAgICAgICAgaWYgKGRpc3RhbmNlID09IDAuMCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgcG9pbnRfaW1hZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICBzdW1mMyhmICogVDAgKiBUMyksXHJcbiAgICAgICAgICAgICAgICBzdW1mMyhmICogVDEgKiBUMylcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGZsb2F0MiB0ZW1wID0ge1xyXG4gICAgICAgICAgICAgICAgc3VtZjMoZiAqIFQwICogVDApLFxyXG4gICAgICAgICAgICAgICAgc3VtZjMoZiAqIFQxICogVDEpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGZsb2F0MiBoYWxmX2V4dGVuZCA9IHBvaW50X2ltYWdlICogcG9pbnRfaW1hZ2UgLSB0ZW1wO1xyXG4gICAgICAgICAgICBleHRlbnQgPSBzcXJ0ZjIobWF4ZjIoMWUtNCwgaGFsZl9leHRlbmQpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgKi9cclxuXHJcbiAgICAgICAgLy8gQ29tcHV0aW5nIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIDJEIEdhdXNzaWFuIGFuZCBpdHMgY2VudGVyXHJcbiAgICAgICAgLy8gVGhlIGNlbnRlciBvZiB0aGUgYm91bmRpbmcgYm94IGlzIHVzZWQgdG8gY3JlYXRlIGEgbG93IHBhc3MgZmlsdGVyLlxyXG4gICAgICAgIC8vIFRoaXMgY29kZSBpcyBiYXNlZCBvZmYgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBhbmQgY3JlYXRlcyBhbiBBQUJCIGFsaWduZWRcclxuICAgICAgICAvLyB3aXRoIHRoZSBzY3JlZW4gZm9yIHRoZSBxdWFkIHRvIGJlIHJlbmRlcmVkLlxyXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZVF1YWRHZW5lcmF0aW9uID0gYFxyXG4gICAgICAgICAgICB2ZWMzIFQwID0gdmVjMyhUWzBdWzBdLCBUWzBdWzFdLCBUWzBdWzJdKTtcclxuICAgICAgICAgICAgdmVjMyBUMSA9IHZlYzMoVFsxXVswXSwgVFsxXVsxXSwgVFsxXVsyXSk7XHJcbiAgICAgICAgICAgIHZlYzMgVDMgPSB2ZWMzKFRbMl1bMF0sIFRbMl1bMV0sIFRbMl1bMl0pO1xyXG5cclxuICAgICAgICAgICAgdmVjMyB0ZW1wUG9pbnQgPSB2ZWMzKDEuMCwgMS4wLCAtMS4wKTtcclxuICAgICAgICAgICAgZmxvYXQgZGlzdGFuY2UgPSAoVDMueCAqIFQzLnggKiB0ZW1wUG9pbnQueCkgKyAoVDMueSAqIFQzLnkgKiB0ZW1wUG9pbnQueSkgKyAoVDMueiAqIFQzLnogKiB0ZW1wUG9pbnQueik7XHJcbiAgICAgICAgICAgIHZlYzMgZiA9ICgxLjAgLyBkaXN0YW5jZSkgKiB0ZW1wUG9pbnQ7XHJcbiAgICAgICAgICAgIGlmIChhYnMoZGlzdGFuY2UpIDwgMC4wMDAwMSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgZmxvYXQgcG9pbnRJbWFnZVggPSAoVDAueCAqIFQzLnggKiBmLngpICsgKFQwLnkgKiBUMy55ICogZi55KSArIChUMC56ICogVDMueiAqIGYueik7XHJcbiAgICAgICAgICAgIGZsb2F0IHBvaW50SW1hZ2VZID0gKFQxLnggKiBUMy54ICogZi54KSArIChUMS55ICogVDMueSAqIGYueSkgKyAoVDEueiAqIFQzLnogKiBmLnopO1xyXG4gICAgICAgICAgICB2ZWMyIHBvaW50SW1hZ2UgPSB2ZWMyKHBvaW50SW1hZ2VYLCBwb2ludEltYWdlWSk7XHJcblxyXG4gICAgICAgICAgICBmbG9hdCB0ZW1wWCA9IChUMC54ICogVDAueCAqIGYueCkgKyAoVDAueSAqIFQwLnkgKiBmLnkpICsgKFQwLnogKiBUMC56ICogZi56KTtcclxuICAgICAgICAgICAgZmxvYXQgdGVtcFkgPSAoVDEueCAqIFQxLnggKiBmLngpICsgKFQxLnkgKiBUMS55ICogZi55KSArIChUMS56ICogVDEueiAqIGYueik7XHJcbiAgICAgICAgICAgIHZlYzIgdGVtcCA9IHZlYzIodGVtcFgsIHRlbXBZKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzIgaGFsZkV4dGVuZCA9IHBvaW50SW1hZ2UgKiBwb2ludEltYWdlIC0gdGVtcDtcclxuICAgICAgICAgICAgdmVjMiBleHRlbnQgPSBzcXJ0KG1heCh2ZWMyKDAuMDAwMSksIGhhbGZFeHRlbmQpKTtcclxuICAgICAgICAgICAgZmxvYXQgcmFkaXVzID0gbWF4KGV4dGVudC54LCBleHRlbnQueSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMyIG5kY09mZnNldCA9ICgocG9zaXRpb24ueHkgKiByYWRpdXMgKiAzLjApICogYmFzaXNWaWV3cG9ydCAqIDIuMCk7XHJcblxyXG4gICAgICAgICAgICB2ZWM0IHF1YWRQb3MgPSB2ZWM0KG5kY0NlbnRlci54eSArIG5kY09mZnNldCwgbmRjQ2VudGVyLnosIDEuMCk7XHJcbiAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gcXVhZFBvcztcclxuXHJcbiAgICAgICAgICAgIHZUID0gVDtcclxuICAgICAgICAgICAgdlF1YWRDZW50ZXIgPSBwb2ludEltYWdlO1xyXG4gICAgICAgICAgICB2RnJhZ0Nvb3JkID0gKHF1YWRQb3MueHkgKiAwLjUgKyAwLjUpICogdmlld3BvcnQ7XHJcbiAgICAgICAgYDtcclxuXHJcbiAgICAgICAgY29uc3QgdXNlUmVmSW1wbGVtZW50YXRpb24gPSBmYWxzZTtcclxuICAgICAgICBpZiAodXNlUmVmSW1wbGVtZW50YXRpb24pIHtcclxuICAgICAgICAgICAgdmVydGV4U2hhZGVyU291cmNlICs9IHJlZmVyZW5jZVF1YWRHZW5lcmF0aW9uO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHF1YWQgdGhhdCBpcyBhbGlnbmVkIHdpdGggdGhlIGVpZ2VuIHZlY3RvcnMgb2YgdGhlIHByb2plY3RlZCBnYXVzc2lhbiBmb3IgcmVuZGVyaW5nLlxyXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRoYW4gdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiwgc2ltaWxhciB0byBob3cgdGhlIHJlbmRlcmluZyBvZlxyXG4gICAgICAgICAgICAvLyAzRCBnYXVzc2lhbnMgaW4gdGhpcyB2aWV3ZXIgZGlmZmVycyBmcm9tIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIElmIHRoZSBxdWFkIGlzIHRvbyBzbWFsbFxyXG4gICAgICAgICAgICAvLyAoc21hbGxlciB0aGFuIGEgcGl4ZWwpLCB0aGVuIHJldmVydCB0byB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLlxyXG4gICAgICAgICAgICB2ZXJ0ZXhTaGFkZXJTb3VyY2UgKz0gYFxyXG5cclxuICAgICAgICAgICAgICAgIG1hdDQgc3BsYXQyV29ybGQ0ID0gbWF0NCh2ZWM0KExbMF0sIDAuMCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWM0KExbMV0sIDAuMCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWM0KExbMl0sIDAuMCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWM0KHNwbGF0Q2VudGVyLngsIHNwbGF0Q2VudGVyLnksIHNwbGF0Q2VudGVyLnosIDEuMCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIG1hdDQgVHQgPSB0cmFuc3Bvc2UodHJhbnNwb3NlKHNwbGF0MldvcmxkNCkgKiB3b3JsZDJuZGMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZlYzQgdGVtcFBvaW50MSA9IFR0ICogdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApO1xyXG4gICAgICAgICAgICAgICAgdGVtcFBvaW50MSAvPSB0ZW1wUG9pbnQxLnc7XHJcblxyXG4gICAgICAgICAgICAgICAgdmVjNCB0ZW1wUG9pbnQyID0gVHQgKiB2ZWM0KDAuMCwgMS4wLCAwLjAsIDEuMCk7XHJcbiAgICAgICAgICAgICAgICB0ZW1wUG9pbnQyIC89IHRlbXBQb2ludDIudztcclxuXHJcbiAgICAgICAgICAgICAgICB2ZWM0IGNlbnRlciA9IFR0ICogdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xyXG4gICAgICAgICAgICAgICAgY2VudGVyIC89IGNlbnRlci53O1xyXG5cclxuICAgICAgICAgICAgICAgIHZlYzIgYmFzaXNWZWN0b3IxID0gdGVtcFBvaW50MS54eSAtIGNlbnRlci54eTtcclxuICAgICAgICAgICAgICAgIHZlYzIgYmFzaXNWZWN0b3IyID0gdGVtcFBvaW50Mi54eSAtIGNlbnRlci54eTtcclxuXHJcbiAgICAgICAgICAgICAgICB2ZWMyIGJhc2lzVmVjdG9yMVNjcmVlbiA9IGJhc2lzVmVjdG9yMSAqIDAuNSAqIHZpZXdwb3J0O1xyXG4gICAgICAgICAgICAgICAgdmVjMiBiYXNpc1ZlY3RvcjJTY3JlZW4gPSBiYXNpc1ZlY3RvcjIgKiAwLjUgKiB2aWV3cG9ydDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBtaW5QaXggPSAxLjtcclxuICAgICAgICAgICAgICAgIGlmIChsZW5ndGgoYmFzaXNWZWN0b3IxU2NyZWVuKSA8IG1pblBpeCB8fCBsZW5ndGgoYmFzaXNWZWN0b3IyU2NyZWVuKSA8IG1pblBpeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICR7cmVmZXJlbmNlUXVhZEdlbmVyYXRpb259XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzIgbmRjT2Zmc2V0ID0gdmVjMihwb3NpdGlvbi54ICogYmFzaXNWZWN0b3IxICsgcG9zaXRpb24ueSAqIGJhc2lzVmVjdG9yMikgKiAzLjAgKiBpbnZlcnNlRm9jYWxBZGp1c3RtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzQgcXVhZFBvcyA9IHZlYzQobmRjQ2VudGVyLnh5ICsgbmRjT2Zmc2V0LCBuZGNDZW50ZXIueiwgMS4wKTtcclxuICAgICAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHF1YWRQb3M7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZUID0gVDtcclxuICAgICAgICAgICAgICAgICAgICB2UXVhZENlbnRlciA9IGNlbnRlci54eTtcclxuICAgICAgICAgICAgICAgICAgICB2RnJhZ0Nvb3JkID0gKHF1YWRQb3MueHkgKiAwLjUgKyAwLjUpICogdmlld3BvcnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZXJ0ZXhTaGFkZXJTb3VyY2UgKz0gU3BsYXRNYXRlcmlhbC5nZXRWZXJ0ZXhTaGFkZXJGYWRlSW4oKTtcclxuICAgICAgICB2ZXJ0ZXhTaGFkZXJTb3VyY2UgKz0gYH1gO1xyXG5cclxuICAgICAgICByZXR1cm4gdmVydGV4U2hhZGVyU291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBidWlsZEZyYWdtZW50U2hhZGVyKCkge1xyXG5cclxuICAgICAgICAvLyBPcmlnaW5hbCBDVURBIGNvZGUgZm9yIHNwbGF0IGludGVyc2VjdGlvbiwgZm9yIHJlZmVyZW5jZVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgIGNvbnN0IGZsb2F0MiB4eSA9IGNvbGxlY3RlZF94eVtqXTtcclxuICAgICAgICAgICAgY29uc3QgZmxvYXQzIFR1ID0gY29sbGVjdGVkX1R1W2pdO1xyXG4gICAgICAgICAgICBjb25zdCBmbG9hdDMgVHYgPSBjb2xsZWN0ZWRfVHZbal07XHJcbiAgICAgICAgICAgIGNvbnN0IGZsb2F0MyBUdyA9IGNvbGxlY3RlZF9Ud1tqXTtcclxuICAgICAgICAgICAgZmxvYXQzIGsgPSBwaXgueCAqIFR3IC0gVHU7XHJcbiAgICAgICAgICAgIGZsb2F0MyBsID0gcGl4LnkgKiBUdyAtIFR2O1xyXG4gICAgICAgICAgICBmbG9hdDMgcCA9IGNyb3NzKGssIGwpO1xyXG4gICAgICAgICAgICBpZiAocC56ID09IDAuMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGZsb2F0MiBzID0ge3AueCAvIHAueiwgcC55IC8gcC56fTtcclxuICAgICAgICAgICAgZmxvYXQgcmhvM2QgPSAocy54ICogcy54ICsgcy55ICogcy55KTtcclxuICAgICAgICAgICAgZmxvYXQyIGQgPSB7eHkueCAtIHBpeGYueCwgeHkueSAtIHBpeGYueX07XHJcbiAgICAgICAgICAgIGZsb2F0IHJobzJkID0gRmlsdGVySW52U3F1YXJlICogKGQueCAqIGQueCArIGQueSAqIGQueSk7XHJcblxyXG4gICAgICAgICAgICAvLyBjb21wdXRlIGludGVyc2VjdGlvbiBhbmQgZGVwdGhcclxuICAgICAgICAgICAgZmxvYXQgcmhvID0gbWluKHJobzNkLCByaG8yZCk7XHJcbiAgICAgICAgICAgIGZsb2F0IGRlcHRoID0gKHJobzNkIDw9IHJobzJkKSA/IChzLnggKiBUdy54ICsgcy55ICogVHcueSkgKyBUdy56IDogVHcuejtcclxuICAgICAgICAgICAgaWYgKGRlcHRoIDwgbmVhcl9uKSBjb250aW51ZTtcclxuICAgICAgICAgICAgZmxvYXQ0IG5vcl9vID0gY29sbGVjdGVkX25vcm1hbF9vcGFjaXR5W2pdO1xyXG4gICAgICAgICAgICBmbG9hdCBub3JtYWxbM10gPSB7bm9yX28ueCwgbm9yX28ueSwgbm9yX28uen07XHJcbiAgICAgICAgICAgIGZsb2F0IG9wYSA9IG5vcl9vLnc7XHJcblxyXG4gICAgICAgICAgICBmbG9hdCBwb3dlciA9IC0wLjVmICogcmhvO1xyXG4gICAgICAgICAgICBpZiAocG93ZXIgPiAwLjBmKVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAvLyBFcS4gKDIpIGZyb20gM0QgR2F1c3NpYW4gc3BsYXR0aW5nIHBhcGVyLlxyXG4gICAgICAgICAgICAvLyBPYnRhaW4gYWxwaGEgYnkgbXVsdGlwbHlpbmcgd2l0aCBHYXVzc2lhbiBvcGFjaXR5XHJcbiAgICAgICAgICAgIC8vIGFuZCBpdHMgZXhwb25lbnRpYWwgZmFsbG9mZiBmcm9tIG1lYW4uXHJcbiAgICAgICAgICAgIC8vIEF2b2lkIG51bWVyaWNhbCBpbnN0YWJpbGl0aWVzIChzZWUgcGFwZXIgYXBwZW5kaXgpLlxyXG4gICAgICAgICAgICBmbG9hdCBhbHBoYSA9IG1pbigwLjk5Ziwgb3BhICogZXhwKHBvd2VyKSk7XHJcbiAgICAgICAgICAgIGlmIChhbHBoYSA8IDEuMGYgLyAyNTUuMGYpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgZmxvYXQgdGVzdF9UID0gVCAqICgxIC0gYWxwaGEpO1xyXG4gICAgICAgICAgICBpZiAodGVzdF9UIDwgMC4wMDAxZilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZmxvYXQgdyA9IGFscGhhICogVDtcclxuICAgICAgICAqL1xyXG4gICAgICAgIGxldCBmcmFnbWVudFNoYWRlclNvdXJjZSA9IGBcclxuICAgICAgICAgICAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xyXG4gICAgICAgICAgICAjaW5jbHVkZSA8Y29tbW9uPlxyXG5cclxuICAgICAgICAgICAgdW5pZm9ybSB2ZWMzIGRlYnVnQ29sb3I7XHJcblxyXG4gICAgICAgICAgICB2YXJ5aW5nIHZlYzQgdkNvbG9yO1xyXG4gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdlV2O1xyXG4gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdlBvc2l0aW9uO1xyXG4gICAgICAgICAgICB2YXJ5aW5nIG1hdDMgdlQ7XHJcbiAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2UXVhZENlbnRlcjtcclxuICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZGcmFnQ29vcmQ7XHJcblxyXG4gICAgICAgICAgICB2b2lkIG1haW4gKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IEZpbHRlckludlNxdWFyZSA9IDIuMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IG5lYXJfbiA9IDAuMjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IFQgPSAxLjA7XHJcblxyXG4gICAgICAgICAgICAgICAgdmVjMiB4eSA9IHZRdWFkQ2VudGVyO1xyXG4gICAgICAgICAgICAgICAgdmVjMyBUdSA9IHZUWzBdO1xyXG4gICAgICAgICAgICAgICAgdmVjMyBUdiA9IHZUWzFdO1xyXG4gICAgICAgICAgICAgICAgdmVjMyBUdyA9IHZUWzJdO1xyXG4gICAgICAgICAgICAgICAgdmVjMyBrID0gdkZyYWdDb29yZC54ICogVHcgLSBUdTtcclxuICAgICAgICAgICAgICAgIHZlYzMgbCA9IHZGcmFnQ29vcmQueSAqIFR3IC0gVHY7XHJcbiAgICAgICAgICAgICAgICB2ZWMzIHAgPSBjcm9zcyhrLCBsKTtcclxuICAgICAgICAgICAgICAgIGlmIChwLnogPT0gMC4wKSBkaXNjYXJkO1xyXG4gICAgICAgICAgICAgICAgdmVjMiBzID0gdmVjMihwLnggLyBwLnosIHAueSAvIHAueik7XHJcbiAgICAgICAgICAgICAgICBmbG9hdCByaG8zZCA9IChzLnggKiBzLnggKyBzLnkgKiBzLnkpOyBcclxuICAgICAgICAgICAgICAgIHZlYzIgZCA9IHZlYzIoeHkueCAtIHZGcmFnQ29vcmQueCwgeHkueSAtIHZGcmFnQ29vcmQueSk7XHJcbiAgICAgICAgICAgICAgICBmbG9hdCByaG8yZCA9IEZpbHRlckludlNxdWFyZSAqIChkLnggKiBkLnggKyBkLnkgKiBkLnkpOyBcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGludGVyc2VjdGlvbiBhbmQgZGVwdGhcclxuICAgICAgICAgICAgICAgIGZsb2F0IHJobyA9IG1pbihyaG8zZCwgcmhvMmQpO1xyXG4gICAgICAgICAgICAgICAgZmxvYXQgZGVwdGggPSAocmhvM2QgPD0gcmhvMmQpID8gKHMueCAqIFR3LnggKyBzLnkgKiBUdy55KSArIFR3LnogOiBUdy56OyBcclxuICAgICAgICAgICAgICAgIGlmIChkZXB0aCA8IG5lYXJfbikgZGlzY2FyZDtcclxuICAgICAgICAgICAgICAgIC8vICB2ZWM0IG5vcl9vID0gY29sbGVjdGVkX25vcm1hbF9vcGFjaXR5W2pdO1xyXG4gICAgICAgICAgICAgICAgLy8gIGZsb2F0IG5vcm1hbFszXSA9IHtub3Jfby54LCBub3Jfby55LCBub3Jfby56fTtcclxuICAgICAgICAgICAgICAgIGZsb2F0IG9wYSA9IHZDb2xvci5hO1xyXG5cclxuICAgICAgICAgICAgICAgIGZsb2F0IHBvd2VyID0gLTAuNWYgKiByaG87XHJcbiAgICAgICAgICAgICAgICBpZiAocG93ZXIgPiAwLjBmKSBkaXNjYXJkO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEVxLiAoMikgZnJvbSAzRCBHYXVzc2lhbiBzcGxhdHRpbmcgcGFwZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBPYnRhaW4gYWxwaGEgYnkgbXVsdGlwbHlpbmcgd2l0aCBHYXVzc2lhbiBvcGFjaXR5XHJcbiAgICAgICAgICAgICAgICAvLyBhbmQgaXRzIGV4cG9uZW50aWFsIGZhbGxvZmYgZnJvbSBtZWFuLlxyXG4gICAgICAgICAgICAgICAgLy8gQXZvaWQgbnVtZXJpY2FsIGluc3RhYmlsaXRpZXMgKHNlZSBwYXBlciBhcHBlbmRpeCkuIFxyXG4gICAgICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBtaW4oMC45OWYsIG9wYSAqIGV4cChwb3dlcikpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFscGhhIDwgMS4wZiAvIDI1NS4wZikgZGlzY2FyZDtcclxuICAgICAgICAgICAgICAgIGZsb2F0IHRlc3RfVCA9IFQgKiAoMS4wIC0gYWxwaGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlc3RfVCA8IDAuMDAwMSlkaXNjYXJkO1xyXG5cclxuICAgICAgICAgICAgICAgIGZsb2F0IHcgPSBhbHBoYSAqIFQ7XHJcbiAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZDb2xvci5yZ2IsIHcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgYDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZyYWdtZW50U2hhZGVyU291cmNlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8qKlxyXG4gKiBTcGxhdE1lc2hcclxuICogXHJcbiAqIEJhc2VkIG9uIEBta2tlbGxvZ2cvZ2F1c3NpYW4tc3BsYXRzLTNkIChNSVQgTGljZW5zZSlcclxuICogaHR0cHM6Ly9naXRodWIuY29tL21ra2VsbG9nZy9HYXVzc2lhblNwbGF0czNEXHJcbiAqIFxyXG4gKiBIRUFWSUxZIE1PRElGSUVEIGZvciBGTEFNRSBhdmF0YXIgc3VwcG9ydDpcclxuICogLSBBZGRlZCBGTEFNRSBib25lIHRleHR1cmUgaGFuZGxpbmdcclxuICogLSBBZGRlZCBleHByZXNzaW9uIGJsZW5kc2hhcGUgc3VwcG9ydFxyXG4gKiAtIEV4dGVuZGVkIHdpdGggc2tpbm5pbmcgZGF0YSBtYW5hZ2VtZW50XHJcbiAqIC0gQWRkaXRpb25hbCB+ODAwIGxpbmVzIG9mIEZMQU1FLXNwZWNpZmljIGNvZGVcclxuICovXHJcblxyXG5pbXBvcnQgeyBCb3gzLCBCdWZmZXJHZW9tZXRyeSwgRGF0YVRleHR1cmUsIEZsb2F0VHlwZSwgSGFsZkZsb2F0VHlwZSwgTWF0cml4NCwgTWVzaCwgTWVzaEJhc2ljTWF0ZXJpYWwsIFF1YXRlcm5pb24sIFJHQkFGb3JtYXQsIFJHQkFJbnRlZ2VyRm9ybWF0LCBSR0Zvcm1hdCwgUkdJbnRlZ2VyRm9ybWF0LCBSZWRGb3JtYXQsIFJlZEludGVnZXJGb3JtYXQsIFJHQkludGVnZXJGb3JtYXQsIFNjZW5lLCBVbnNpZ25lZEJ5dGVUeXBlLCBVbnNpZ25lZEludFR5cGUsIFZlY3RvcjIsIFZlY3RvcjMsIFZlY3RvcjQsIFdlYkdMUmVuZGVyZXIgfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7IFNwbGF0UmVuZGVyTW9kZSB9IGZyb20gJy4uL2VudW1zL1NwbGF0UmVuZGVyTW9kZS5qcyc7XHJcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSAnLi4vZW51bXMvTG9nTGV2ZWwuanMnO1xyXG5pbXBvcnQgeyBTY2VuZVJldmVhbE1vZGUgfSBmcm9tICcuLi9lbnVtcy9TY2VuZVJldmVhbE1vZGUuanMnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi9lbnVtcy9FbmdpbmVDb25zdGFudHMuanMnO1xyXG5pbXBvcnQgeyBTcGxhdFNjZW5lIH0gZnJvbSAnLi9TcGxhdFNjZW5lLmpzJztcclxuaW1wb3J0IHsgU3BsYXRHZW9tZXRyeSB9IGZyb20gJy4vU3BsYXRHZW9tZXRyeS5qcyc7XHJcbmltcG9ydCB7IFNwbGF0VHJlZSB9IGZyb20gJy4vU3BsYXRUcmVlLmpzJztcclxuaW1wb3J0IHsgU3BsYXRNYXRlcmlhbDNEIH0gZnJvbSAnLi4vbWF0ZXJpYWxzL1NwbGF0TWF0ZXJpYWwzRC5qcyc7XHJcbmltcG9ydCB7IFNwbGF0TWF0ZXJpYWwyRCB9IGZyb20gJy4uL21hdGVyaWFscy9TcGxhdE1hdGVyaWFsMkQuanMnO1xyXG5pbXBvcnQgeyBnZXRTcGhlcmljYWxIYXJtb25pY3NDb21wb25lbnRDb3VudEZvckRlZ3JlZSwgdWludEVuY29kZWRGbG9hdCwgcmdiYUFycmF5VG9JbnRlZ2VyLCBjbGFtcCB9IGZyb20gJy4uL3V0aWxzL1V0aWwuanMnO1xyXG5cclxuLy8gRHVtbXkgZ2VvbWV0cnkgYW5kIG1hdGVyaWFsIGZvciBpbml0aWFsIE1lc2ggY29uc3RydWN0aW9uXHJcbmNvbnN0IGR1bW15R2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTtcclxuY29uc3QgZHVtbXlNYXRlcmlhbCA9IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCgpO1xyXG5cclxuLyoqXHJcbiAqIFdlYkdMIEV4dGVuc2lvbnMgaGVscGVyIChmcm9tIFRocmVlLmpzIGludGVybmFscylcclxuICovXHJcbmZ1bmN0aW9uIFdlYkdMRXh0ZW5zaW9ucyQxKGdsKSB7XHJcbiAgICBjb25zdCBleHRlbnNpb25zID0ge307XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoZXh0ZW5zaW9uc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleHRlbnNpb25zW25hbWVdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGV4dGVuc2lvbjtcclxuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAnV0VCR0xfZGVwdGhfdGV4dHVyZSc6XHJcbiAgICAgICAgICAgICAgICBleHRlbnNpb24gPSBnbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2RlcHRoX3RleHR1cmUnKSB8fCBnbC5nZXRFeHRlbnNpb24oJ01PWl9XRUJHTF9kZXB0aF90ZXh0dXJlJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnOlxyXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJykgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmdldEV4dGVuc2lvbignV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJzpcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGdsLmdldEV4dGVuc2lvbignV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnOlxyXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uID0gZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGdsLmdldEV4dGVuc2lvbihuYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4dGVuc2lvbnNbbmFtZV0gPSBleHRlbnNpb247XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGhhczogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0RXh0ZW5zaW9uKG5hbWUpICE9PSBudWxsO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXBhYmlsaXRpZXMuaXNXZWJHTDIpIHtcclxuICAgICAgICAgICAgICAgIGdldEV4dGVuc2lvbignRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCcpO1xyXG4gICAgICAgICAgICAgICAgZ2V0RXh0ZW5zaW9uKCdXRUJHTF9jbGlwX2N1bGxfZGlzdGFuY2UnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGdldEV4dGVuc2lvbignV0VCR0xfZGVwdGhfdGV4dHVyZScpO1xyXG4gICAgICAgICAgICAgICAgZ2V0RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9mbG9hdCcpO1xyXG4gICAgICAgICAgICAgICAgZ2V0RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XHJcbiAgICAgICAgICAgICAgICBnZXRFeHRlbnNpb24oJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyk7XHJcbiAgICAgICAgICAgICAgICBnZXRFeHRlbnNpb24oJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycpO1xyXG4gICAgICAgICAgICAgICAgZ2V0RXh0ZW5zaW9uKCdPRVNfZWxlbWVudF9pbmRleF91aW50Jyk7XHJcbiAgICAgICAgICAgICAgICBnZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Jyk7XHJcbiAgICAgICAgICAgICAgICBnZXRFeHRlbnNpb24oJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBnZXRFeHRlbnNpb24oJ09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhcicpO1xyXG4gICAgICAgICAgICBnZXRFeHRlbnNpb24oJ0VYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCcpO1xyXG4gICAgICAgICAgICBnZXRFeHRlbnNpb24oJ1dFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZScpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGdldEV4dGVuc2lvbihuYW1lKTtcclxuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbiA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdUSFJFRS5XZWJHTFJlbmRlcmVyOiAnICsgbmFtZSArICcgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogV2ViR0wgQ2FwYWJpbGl0aWVzIGhlbHBlciAoZnJvbSBUaHJlZS5qcyBpbnRlcm5hbHMpXHJcbiAqL1xyXG5mdW5jdGlvbiBXZWJHTENhcGFiaWxpdGllcyQxKGdsLCBleHRlbnNpb25zLCBwYXJhbWV0ZXJzKSB7XHJcbiAgICBsZXQgbWF4QW5pc290cm9weTtcclxuXHJcbiAgICBmdW5jdGlvbiBnZXRNYXhBbmlzb3Ryb3B5KCkge1xyXG4gICAgICAgIGlmIChtYXhBbmlzb3Ryb3B5ICE9PSB1bmRlZmluZWQpIHJldHVybiBtYXhBbmlzb3Ryb3B5O1xyXG4gICAgICAgIGlmIChleHRlbnNpb25zLmhhcygnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJykgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpO1xyXG4gICAgICAgICAgICBtYXhBbmlzb3Ryb3B5ID0gZ2wuZ2V0UGFyYW1ldGVyKGV4dGVuc2lvbi5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1heEFuaXNvdHJvcHkgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF4QW5pc290cm9weTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRNYXhQcmVjaXNpb24ocHJlY2lzaW9uKSB7XHJcbiAgICAgICAgaWYgKHByZWNpc2lvbiA9PT0gJ2hpZ2hwJykge1xyXG4gICAgICAgICAgICBpZiAoZ2wuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KGdsLlZFUlRFWF9TSEFERVIsIGdsLkhJR0hfRkxPQVQpLnByZWNpc2lvbiA+IDAgJiZcclxuICAgICAgICAgICAgICAgIGdsLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChnbC5GUkFHTUVOVF9TSEFERVIsIGdsLkhJR0hfRkxPQVQpLnByZWNpc2lvbiA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlnaHAnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZWNpc2lvbiA9ICdtZWRpdW1wJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHByZWNpc2lvbiA9PT0gJ21lZGl1bXAnKSB7XHJcbiAgICAgICAgICAgIGlmIChnbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoZ2wuVkVSVEVYX1NIQURFUiwgZ2wuTUVESVVNX0ZMT0FUKS5wcmVjaXNpb24gPiAwICYmXHJcbiAgICAgICAgICAgICAgICBnbC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoZ2wuRlJBR01FTlRfU0hBREVSLCBnbC5NRURJVU1fRkxPQVQpLnByZWNpc2lvbiA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnbWVkaXVtcCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdsb3dwJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpc1dlYkdMMiA9IHR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0ICE9PSAndW5kZWZpbmVkJyAmJiBnbC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnV2ViR0wyUmVuZGVyaW5nQ29udGV4dCc7XHJcblxyXG4gICAgbGV0IHByZWNpc2lvbiA9IHBhcmFtZXRlcnMucHJlY2lzaW9uICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzLnByZWNpc2lvbiA6ICdoaWdocCc7XHJcbiAgICBjb25zdCBtYXhQcmVjaXNpb24gPSBnZXRNYXhQcmVjaXNpb24ocHJlY2lzaW9uKTtcclxuXHJcbiAgICBpZiAobWF4UHJlY2lzaW9uICE9PSBwcmVjaXNpb24pIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1RIUkVFLldlYkdMUmVuZGVyZXI6JywgcHJlY2lzaW9uLCAnbm90IHN1cHBvcnRlZCwgdXNpbmcnLCBtYXhQcmVjaXNpb24sICdpbnN0ZWFkLicpO1xyXG4gICAgICAgIHByZWNpc2lvbiA9IG1heFByZWNpc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkcmF3QnVmZmVycyA9IGlzV2ViR0wyIHx8IGV4dGVuc2lvbnMuaGFzKCdXRUJHTF9kcmF3X2J1ZmZlcnMnKTtcclxuICAgIGNvbnN0IGxvZ2FyaXRobWljRGVwdGhCdWZmZXIgPSBwYXJhbWV0ZXJzLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIgPT09IHRydWU7XHJcblxyXG4gICAgY29uc3QgbWF4VGV4dHVyZXMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpO1xyXG4gICAgY29uc3QgbWF4VmVydGV4VGV4dHVyZXMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTKTtcclxuICAgIGNvbnN0IG1heFRleHR1cmVTaXplID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9URVhUVVJFX1NJWkUpO1xyXG4gICAgY29uc3QgbWF4Q3ViZW1hcFNpemUgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSk7XHJcblxyXG4gICAgY29uc3QgbWF4QXR0cmlidXRlcyA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpO1xyXG4gICAgY29uc3QgbWF4VmVydGV4VW5pZm9ybXMgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMpO1xyXG4gICAgY29uc3QgbWF4VmFyeWluZ3MgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZBUllJTkdfVkVDVE9SUyk7XHJcbiAgICBjb25zdCBtYXhGcmFnbWVudFVuaWZvcm1zID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLk1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMpO1xyXG5cclxuICAgIGNvbnN0IHZlcnRleFRleHR1cmVzID0gbWF4VmVydGV4VGV4dHVyZXMgPiAwO1xyXG4gICAgY29uc3QgZmxvYXRGcmFnbWVudFRleHR1cmVzID0gaXNXZWJHTDIgfHwgZXh0ZW5zaW9ucy5oYXMoJ09FU190ZXh0dXJlX2Zsb2F0Jyk7XHJcbiAgICBjb25zdCBmbG9hdFZlcnRleFRleHR1cmVzID0gdmVydGV4VGV4dHVyZXMgJiYgZmxvYXRGcmFnbWVudFRleHR1cmVzO1xyXG5cclxuICAgIGNvbnN0IG1heFNhbXBsZXMgPSBpc1dlYkdMMiA/IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfU0FNUExFUykgOiAwO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNXZWJHTDI6IGlzV2ViR0wyLFxyXG4gICAgICAgIGRyYXdCdWZmZXJzOiBkcmF3QnVmZmVycyxcclxuICAgICAgICBnZXRNYXhBbmlzb3Ryb3B5OiBnZXRNYXhBbmlzb3Ryb3B5LFxyXG4gICAgICAgIGdldE1heFByZWNpc2lvbjogZ2V0TWF4UHJlY2lzaW9uLFxyXG4gICAgICAgIHByZWNpc2lvbjogcHJlY2lzaW9uLFxyXG4gICAgICAgIGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6IGxvZ2FyaXRobWljRGVwdGhCdWZmZXIsXHJcbiAgICAgICAgbWF4VGV4dHVyZXM6IG1heFRleHR1cmVzLFxyXG4gICAgICAgIG1heFZlcnRleFRleHR1cmVzOiBtYXhWZXJ0ZXhUZXh0dXJlcyxcclxuICAgICAgICBtYXhUZXh0dXJlU2l6ZTogbWF4VGV4dHVyZVNpemUsXHJcbiAgICAgICAgbWF4Q3ViZW1hcFNpemU6IG1heEN1YmVtYXBTaXplLFxyXG4gICAgICAgIG1heEF0dHJpYnV0ZXM6IG1heEF0dHJpYnV0ZXMsXHJcbiAgICAgICAgbWF4VmVydGV4VW5pZm9ybXM6IG1heFZlcnRleFVuaWZvcm1zLFxyXG4gICAgICAgIG1heFZhcnlpbmdzOiBtYXhWYXJ5aW5ncyxcclxuICAgICAgICBtYXhGcmFnbWVudFVuaWZvcm1zOiBtYXhGcmFnbWVudFVuaWZvcm1zLFxyXG4gICAgICAgIHZlcnRleFRleHR1cmVzOiB2ZXJ0ZXhUZXh0dXJlcyxcclxuICAgICAgICBmbG9hdEZyYWdtZW50VGV4dHVyZXM6IGZsb2F0RnJhZ21lbnRUZXh0dXJlcyxcclxuICAgICAgICBmbG9hdFZlcnRleFRleHR1cmVzOiBmbG9hdFZlcnRleFRleHR1cmVzLFxyXG4gICAgICAgIG1heFNhbXBsZXM6IG1heFNhbXBsZXNcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBXZWJHTCBVdGlscyBoZWxwZXIgKGZyb20gVGhyZWUuanMgaW50ZXJuYWxzKVxyXG4gKi9cclxuZnVuY3Rpb24gV2ViR0xVdGlscyQxKGdsLCBleHRlbnNpb25zLCBjYXBhYmlsaXRpZXMpIHtcclxuICAgIGNvbnN0IGlzV2ViR0wyID0gY2FwYWJpbGl0aWVzLmlzV2ViR0wyO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNvbnZlcnQocCwgY29sb3JTcGFjZSkge1xyXG4gICAgICAgIGxldCBleHRlbnNpb247XHJcblxyXG4gICAgICAgIGlmIChwID09PSBVbnNpZ25lZEJ5dGVUeXBlKSByZXR1cm4gZ2wuVU5TSUdORURfQllURTtcclxuICAgICAgICBpZiAocCA9PT0gMTAxNykgcmV0dXJuIGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ7XHJcbiAgICAgICAgaWYgKHAgPT09IDEwMTgpIHJldHVybiBnbC5VTlNJR05FRF9TSE9SVF81XzVfNV8xO1xyXG4gICAgICAgIGlmIChwID09PSAxMDEwKSByZXR1cm4gZ2wuQllURTtcclxuICAgICAgICBpZiAocCA9PT0gMTAxMSkgcmV0dXJuIGdsLlNIT1JUO1xyXG4gICAgICAgIGlmIChwID09PSAxMDEyKSByZXR1cm4gZ2wuVU5TSUdORURfU0hPUlQ7XHJcbiAgICAgICAgaWYgKHAgPT09IDEwMTMpIHJldHVybiBnbC5JTlQ7XHJcbiAgICAgICAgaWYgKHAgPT09IDEwMTQpIHJldHVybiBnbC5VTlNJR05FRF9JTlQ7XHJcbiAgICAgICAgaWYgKHAgPT09IEZsb2F0VHlwZSkgcmV0dXJuIGdsLkZMT0FUO1xyXG5cclxuICAgICAgICBpZiAocCA9PT0gSGFsZkZsb2F0VHlwZSkge1xyXG4gICAgICAgICAgICBpZiAoaXNXZWJHTDIpIHJldHVybiBnbC5IQUxGX0ZMT0FUO1xyXG4gICAgICAgICAgICBleHRlbnNpb24gPSBleHRlbnNpb25zLmdldCgnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xyXG4gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXh0ZW5zaW9uLkhBTEZfRkxPQVRfT0VTO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwID09PSAxMDIxKSByZXR1cm4gZ2wuQUxQSEE7XHJcbiAgICAgICAgaWYgKHAgPT09IDEwMjIpIHJldHVybiBnbC5SR0I7XHJcbiAgICAgICAgaWYgKHAgPT09IFJHQkFGb3JtYXQpIHJldHVybiBnbC5SR0JBO1xyXG4gICAgICAgIGlmIChwID09PSAxMDI0KSByZXR1cm4gZ2wuTFVNSU5BTkNFO1xyXG4gICAgICAgIGlmIChwID09PSAxMDI1KSByZXR1cm4gZ2wuTFVNSU5BTkNFX0FMUEhBO1xyXG4gICAgICAgIGlmIChwID09PSAxMDI2KSByZXR1cm4gZ2wuREVQVEhfQ09NUE9ORU5UO1xyXG4gICAgICAgIGlmIChwID09PSAxMDI3KSByZXR1cm4gZ2wuREVQVEhfU1RFTkNJTDtcclxuXHJcbiAgICAgICAgLy8gV2ViR0wyIGZvcm1hdHNcclxuICAgICAgICBpZiAocCA9PT0gUmVkRm9ybWF0KSByZXR1cm4gZ2wuUkVEO1xyXG4gICAgICAgIGlmIChwID09PSBSZWRJbnRlZ2VyRm9ybWF0KSByZXR1cm4gZ2wuUkVEX0lOVEVHRVI7XHJcbiAgICAgICAgaWYgKHAgPT09IFJHRm9ybWF0KSByZXR1cm4gZ2wuUkc7XHJcbiAgICAgICAgaWYgKHAgPT09IFJHSW50ZWdlckZvcm1hdCkgcmV0dXJuIGdsLlJHX0lOVEVHRVI7XHJcbiAgICAgICAgaWYgKHAgPT09IFJHQkludGVnZXJGb3JtYXQpIHJldHVybiBnbC5SR0JfSU5URUdFUjtcclxuICAgICAgICBpZiAocCA9PT0gUkdCQUludGVnZXJGb3JtYXQpIHJldHVybiBnbC5SR0JBX0lOVEVHRVI7XHJcblxyXG4gICAgICAgIC8vIFMzVENcclxuICAgICAgICBpZiAocCA9PT0gMzM3NzYgfHwgcCA9PT0gMzM3NzcgfHwgcCA9PT0gMzM3NzggfHwgcCA9PT0gMzM3NzkpIHtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyk7XHJcbiAgICAgICAgICAgIGlmIChleHRlbnNpb24gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwID09PSAzMzc3NikgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO1xyXG4gICAgICAgICAgICAgICAgaWYgKHAgPT09IDMzNzc3KSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO1xyXG4gICAgICAgICAgICAgICAgaWYgKHAgPT09IDMzNzc4KSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO1xyXG4gICAgICAgICAgICAgICAgaWYgKHAgPT09IDMzNzc5KSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBWUlRDXHJcbiAgICAgICAgaWYgKHAgPT09IDM1ODQwIHx8IHAgPT09IDM1ODQxIHx8IHAgPT09IDM1ODQyIHx8IHAgPT09IDM1ODQzKSB7XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnMuZ2V0KCdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnKTtcclxuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHAgPT09IDM1ODQwKSByZXR1cm4gZXh0ZW5zaW9uLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7XHJcbiAgICAgICAgICAgICAgICBpZiAocCA9PT0gMzU4NDEpIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztcclxuICAgICAgICAgICAgICAgIGlmIChwID09PSAzNTg0MikgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRztcclxuICAgICAgICAgICAgICAgIGlmIChwID09PSAzNTg0MykgcmV0dXJuIGV4dGVuc2lvbi5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBFVENcclxuICAgICAgICBpZiAocCA9PT0gMzYxOTYpIHtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxJyk7XHJcbiAgICAgICAgICAgIGlmIChleHRlbnNpb24gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBleHRlbnNpb24uQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBU1RDXHJcbiAgICAgICAgaWYgKHAgPj0gMzc4MDggJiYgcCA8PSAzNzgxNCB8fCBwID49IDM3ODQwICYmIHAgPD0gMzc4NDYpIHtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjJyk7XHJcbiAgICAgICAgICAgIGlmIChleHRlbnNpb24gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJQVENcclxuICAgICAgICBpZiAocCA9PT0gMzY0OTIgfHwgcCA9PT0gMzY0OTQgfHwgcCA9PT0gMzY0OTUpIHtcclxuICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9ucy5nZXQoJ0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMnKTtcclxuICAgICAgICAgICAgaWYgKGV4dGVuc2lvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHAgPT09IDM0MDQyKSByZXR1cm4gZ2wuVU5TSUdORURfSU5UXzI0Xzg7XHJcblxyXG4gICAgICAgIC8vIEludGVybmFsIGZvcm1hdHMgZm9yIGZsb2F0L2hhbGYtZmxvYXQgdGV4dHVyZXNcclxuICAgICAgICBpZiAoaXNXZWJHTDIpIHtcclxuICAgICAgICAgICAgaWYgKHAgPT09IDY0MDcpIHJldHVybiBnbC5SR0I7XHJcbiAgICAgICAgICAgIGlmIChwID09PSA2NDA4KSByZXR1cm4gZ2wuUkdCQTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAoZ2xbcF0gIT09IHVuZGVmaW5lZCkgPyBnbFtwXSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBjb252ZXJ0OiBjb252ZXJ0XHJcbiAgICB9O1xyXG59XHJcblxyXG4vLyBDb25zdGFudHMgZm9yIHRleHR1cmUgZWxlbWVudCBjb3VudHNcclxuY29uc3QgQ09WQVJJQU5DRVNfRUxFTUVOVFNfUEVSX1NQTEFUID0gNjtcclxuY29uc3QgQ0VOVEVSX0NPTE9SU19FTEVNRU5UU19QRVJfU1BMQVQgPSA0O1xyXG5cclxuY29uc3QgQ09WQVJJQU5DRVNfRUxFTUVOVFNfUEVSX1RFWEVMX1NUT1JFRCA9IDQ7XHJcbmNvbnN0IENPVkFSSUFOQ0VTX0VMRU1FTlRTX1BFUl9URVhFTF9BTExPQ0FURUQgPSA0O1xyXG5jb25zdCBDT1ZBUklBTkNFU19FTEVNRU5UU19QRVJfVEVYRUxfQ09NUFJFU1NFRF9TVE9SRUQgPSA2O1xyXG5jb25zdCBDT1ZBUklBTkNFU19FTEVNRU5UU19QRVJfVEVYRUxfQ09NUFJFU1NFRF9BTExPQ0FURUQgPSA4O1xyXG5jb25zdCBTQ0FMRVNfUk9UQVRJT05TX0VMRU1FTlRTX1BFUl9URVhFTCA9IDQ7XHJcbmNvbnN0IENFTlRFUl9DT0xPUlNfRUxFTUVOVFNfUEVSX1RFWEVMID0gNDtcclxuY29uc3QgU0NFTkVfSU5ERVhFU19FTEVNRU5UU19QRVJfVEVYRUwgPSAxO1xyXG5cclxuY29uc3QgU0NFTkVfRkFERUlOX1JBVEVfRkFTVCA9IDAuMDEyO1xyXG5jb25zdCBTQ0VORV9GQURFSU5fUkFURV9HUkFEVUFMID0gMC4wMDM7XHJcblxyXG5jb25zdCBWSVNJQkxFX1JFR0lPTl9FWFBBTlNJT05fREVMVEEgPSAxO1xyXG5cclxuY29uc3QgTUFYX1RFWFRVUkVfVEVYRUxTID0gMTY3NzcyMTY7XHJcblxyXG5leHBvcnQgY2xhc3MgU3BsYXRNZXNoIGV4dGVuZHMgTWVzaCB7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioc3BsYXRSZW5kZXJNb2RlID0gU3BsYXRSZW5kZXJNb2RlLlRocmVlRCwgZHluYW1pY01vZGUgPSBmYWxzZSwgZW5hYmxlT3B0aW9uYWxFZmZlY3RzID0gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBoYWxmUHJlY2lzaW9uQ292YXJpYW5jZXNPbkdQVSA9IGZhbHNlLCBkZXZpY2VQaXhlbFJhdGlvID0gMSwgZW5hYmxlRGlzdGFuY2VzQ29tcHV0YXRpb25PbkdQVSA9IHRydWUsXHJcbiAgICAgICAgICAgICAgICBpbnRlZ2VyQmFzZWREaXN0YW5jZXNDb21wdXRhdGlvbiA9IGZhbHNlLCBhbnRpYWxpYXNlZCA9IGZhbHNlLCBtYXhTY3JlZW5TcGFjZVNwbGF0U2l6ZSA9IDEwMjQsIGxvZ0xldmVsID0gTG9nTGV2ZWwuTm9uZSxcclxuICAgICAgICAgICAgICAgIHNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA9IDAsIHNjZW5lRmFkZUluUmF0ZU11bHRpcGxpZXIgPSAxLjAsIGtlcm5lbDJEU2l6ZSA9IDAuMykge1xyXG4gICAgICAgIHN1cGVyKGR1bW15R2VvbWV0cnksIGR1bW15TWF0ZXJpYWwpO1xyXG5cclxuICAgICAgICAvLyBSZWZlcmVuY2UgdG8gYSBUaHJlZS5qcyByZW5kZXJlclxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIC8vIERldGVybWluZSBob3cgdGhlIHNwbGF0cyBhcmUgcmVuZGVyZWRcclxuICAgICAgICB0aGlzLnNwbGF0UmVuZGVyTW9kZSA9IHNwbGF0UmVuZGVyTW9kZTtcclxuXHJcbiAgICAgICAgLy8gV2hlbiAnZHluYW1pY01vZGUnIGlzIHRydWUsIHNjZW5lcyBhcmUgYXNzdW1lZCB0byBiZSBub24tc3RhdGljLiBEeW5hbWljIHNjZW5lcyBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseVxyXG4gICAgICAgIC8vIGFuZCBjZXJ0YWluIG9wdGltaXphdGlvbnMgY2Fubm90IGJlIG1hZGUgZm9yIHRoZW0uIEFkZGl0aW9uYWxseSwgYnkgZGVmYXVsdCwgYWxsIHNwbGF0IGRhdGEgcmV0cmlldmVkIGZyb21cclxuICAgICAgICAvLyB0aGlzIHNwbGF0IG1lc2ggd2lsbCBub3QgaGF2ZSB0aGVpciBzY2VuZSB0cmFuc2Zvcm0gYXBwbGllZCB0byB0aGVtIGlmIHRoZSBzcGxhdCBtZXNoIGlzIGR5bmFtaWMuIFRoYXRcclxuICAgICAgICAvLyBjYW4gYmUgb3ZlcnJpZGVuIHZpYSBwYXJhbWV0ZXJzIHRvIHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIHRvIHJldHJpZXZlIHNwbGF0IGRhdGEuXHJcbiAgICAgICAgdGhpcy5keW5hbWljTW9kZSA9IGR5bmFtaWNNb2RlO1xyXG5cclxuICAgICAgICAvLyBXaGVuIHRydWUsIGFsbG93cyBmb3IgdXNhZ2Ugb2YgZXh0cmEgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcyBkdXJpbmcgcmVuZGVyaW5nIGZvciBlZmZlY3RzIHN1Y2ggYXMgb3BhY2l0eSBhZGp1c3RtZW50LlxyXG4gICAgICAgIC8vIERlZmF1bHQgaXMgZmFsc2UgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIFRoZXNlIHByb3BlcnRpZXMgYXJlIHNlcGFyYXRlIGZyb20gdHJhbnNmb3JtIHByb3BlcnRpZXMgKHNjYWxlLCByb3RhdGlvbiwgcG9zaXRpb24pXHJcbiAgICAgICAgLy8gdGhhdCBhcmUgZW5hYmxlZCBieSB0aGUgJ2R5bmFtaWNTY2VuZScgcGFyYW1ldGVyLlxyXG4gICAgICAgIHRoaXMuZW5hYmxlT3B0aW9uYWxFZmZlY3RzID0gZW5hYmxlT3B0aW9uYWxFZmZlY3RzO1xyXG5cclxuICAgICAgICAvLyBVc2UgMTYtYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlcyB3aGVuIHN0b3Jpbmcgc3BsYXQgY292YXJpYW5jZSBkYXRhIGluIHRleHR1cmVzLCBpbnN0ZWFkIG9mIDMyLWJpdFxyXG4gICAgICAgIHRoaXMuaGFsZlByZWNpc2lvbkNvdmFyaWFuY2VzT25HUFUgPSBoYWxmUHJlY2lzaW9uQ292YXJpYW5jZXNPbkdQVTtcclxuXHJcbiAgICAgICAgLy8gUmF0aW8gb2YgdGhlIHJlc29sdXRpb24gaW4gcGh5c2ljYWwgcGl4ZWxzIHRvIHRoZSByZXNvbHV0aW9uIGluIENTUyBwaXhlbHMgZm9yIHRoZSBjdXJyZW50IGRpc3BsYXkgZGV2aWNlXHJcbiAgICAgICAgdGhpcy5kZXZpY2VQaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbztcclxuXHJcbiAgICAgICAgLy8gVXNlIGEgdHJhbnNmb3JtIGZlZWRiYWNrIHRvIGNhbGN1bGF0ZSBzcGxhdCBkaXN0YW5jZXMgZnJvbSB0aGUgY2FtZXJhXHJcbiAgICAgICAgdGhpcy5lbmFibGVEaXN0YW5jZXNDb21wdXRhdGlvbk9uR1BVID0gZW5hYmxlRGlzdGFuY2VzQ29tcHV0YXRpb25PbkdQVTtcclxuXHJcbiAgICAgICAgLy8gVXNlIGEgZmFzdGVyIGludGVnZXItYmFzZWQgYXBwcm9hY2ggZm9yIGNhbGN1bGF0aW5nIHNwbGF0IGRpc3RhbmNlcyBmcm9tIHRoZSBjYW1lcmFcclxuICAgICAgICB0aGlzLmludGVnZXJCYXNlZERpc3RhbmNlc0NvbXB1dGF0aW9uID0gaW50ZWdlckJhc2VkRGlzdGFuY2VzQ29tcHV0YXRpb247XHJcblxyXG4gICAgICAgIC8vIFdoZW4gdHJ1ZSwgd2lsbCBwZXJmb3JtIGFkZGl0aW9uYWwgc3RlcHMgZHVyaW5nIHJlbmRlcmluZyB0byBhZGRyZXNzIGFydGlmYWN0cyBjYXVzZWQgYnkgdGhlIHJlbmRlcmluZyBvZiBnYXVzc2lhbnMgYXQgYVxyXG4gICAgICAgIC8vIHN1YnN0YW50aWFsbHkgZGlmZmVyZW50IHJlc29sdXRpb24gdGhhbiB0aGF0IGF0IHdoaWNoIHRoZXkgd2VyZSByZW5kZXJlZCBkdXJpbmcgdHJhaW5pbmcuIFRoaXMgd2lsbCBvbmx5IHdvcmsgY29ycmVjdGx5XHJcbiAgICAgICAgLy8gZm9yIG1vZGVscyB0aGF0IHdlcmUgdHJhaW5lZCB1c2luZyBhIHByb2Nlc3MgdGhhdCB1dGlsaXplcyB0aGlzIGNvbXBlbnNhdGlvbiBjYWxjdWxhdGlvbi4gRm9yIG1vcmUgZGV0YWlsczpcclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbmVyZnN0dWRpby1wcm9qZWN0L2dzcGxhdC9wdWxsLzExN1xyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaGRlY28taW5yaWEvZ2F1c3NpYW4tc3BsYXR0aW5nL2lzc3Vlcy8yOTQjaXNzdWVjb21tZW50LTE3NzI2ODgwOTNcclxuICAgICAgICB0aGlzLmFudGlhbGlhc2VkID0gYW50aWFsaWFzZWQ7XHJcblxyXG4gICAgICAgIC8vIFRoZSBzaXplIG9mIHRoZSAyRCBrZXJuZWwgdXNlZCBmb3Igc3BsYXQgcmVuZGVyaW5nXHJcbiAgICAgICAgLy8gVGhpcyB3aWxsIGFkanVzdCB0aGUgMkQga2VybmVsIHNpemUgYWZ0ZXIgdGhlIHByb2plY3Rpb25cclxuICAgICAgICB0aGlzLmtlcm5lbDJEU2l6ZSA9IGtlcm5lbDJEU2l6ZTtcclxuXHJcbiAgICAgICAgLy8gU3BlY2lmeSB0aGUgbWF4aW11bSBjbGlwIHNwYWNlIHNwbGF0IHNpemUsIGNhbiBoZWxwIGRlYWwgd2l0aCBsYXJnZSBzcGxhdHMgdGhhdCBnZXQgdG9vIHVud2llbGR5XHJcbiAgICAgICAgdGhpcy5tYXhTY3JlZW5TcGFjZVNwbGF0U2l6ZSA9IG1heFNjcmVlblNwYWNlU3BsYXRTaXplO1xyXG5cclxuICAgICAgICAvLyBUaGUgdmVyYm9zaXR5IG9mIGNvbnNvbGUgbG9nZ2luZ1xyXG4gICAgICAgIHRoaXMubG9nTGV2ZWwgPSBsb2dMZXZlbDtcclxuXHJcbiAgICAgICAgLy8gRGVncmVlIDAgbWVhbnMgbm8gc3BoZXJpY2FsIGhhcm1vbmljc1xyXG4gICAgICAgIHRoaXMuc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlO1xyXG4gICAgICAgIHRoaXMubWluU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZUZhZGVJblJhdGVNdWx0aXBsaWVyID0gc2NlbmVGYWRlSW5SYXRlTXVsdGlwbGllcjtcclxuXHJcbiAgICAgICAgLy8gVGhlIGluZGl2aWR1YWwgc3BsYXQgc2NlbmVzIHN0b3JlZCBpbiB0aGlzIHNwbGF0IG1lc2gsIGVhY2ggY29udGFpbmluZyB0aGVpciBvd24gdHJhbnNmb3JtXHJcbiAgICAgICAgdGhpcy5zY2VuZXMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gU3BlY2lhbCBvY3RyZWUgdGFpbG9yZWQgdG8gU3BsYXRNZXNoIGluc3RhbmNlc1xyXG4gICAgICAgIHRoaXMuc3BsYXRUcmVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmJhc2VTcGxhdFRyZWUgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBDYWNoZSB0ZXh0dXJlcyBhbmQgdGhlIGludGVybWVkaWF0ZSBkYXRhIHVzZWQgdG8gcG9wdWxhdGUgdGhlbVxyXG4gICAgICAgIHRoaXMuc3BsYXREYXRhVGV4dHVyZXMgPSB7fTtcclxuICAgICAgICB0aGlzLmZsYW1lTW9kZWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbkJTTnVtID0gMDtcclxuICAgICAgICB0aGlzLmJzV2VpZ2h0ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuYm9uZXNNYXRyaXggPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYm9uZXNOdW0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYm9uZXNXZWlnaHQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZ2F1c3NpYW5TcGxhdENvdW50ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVzZUZsYW1lTW9kZWwgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjayA9IHtcclxuICAgICAgICAgICAgJ2lkJzogbnVsbCxcclxuICAgICAgICAgICAgJ3ZlcnRleFNoYWRlcic6IG51bGwsXHJcbiAgICAgICAgICAgICdmcmFnbWVudFNoYWRlcic6IG51bGwsXHJcbiAgICAgICAgICAgICdwcm9ncmFtJzogbnVsbCxcclxuICAgICAgICAgICAgJ2NlbnRlcnNCdWZmZXInOiBudWxsLFxyXG4gICAgICAgICAgICAnc2NlbmVJbmRleGVzQnVmZmVyJzogbnVsbCxcclxuICAgICAgICAgICAgJ291dERpc3RhbmNlc0J1ZmZlcic6IG51bGwsXHJcbiAgICAgICAgICAgICdjZW50ZXJzTG9jJzogLTEsXHJcbiAgICAgICAgICAgICdtb2RlbFZpZXdQcm9qTG9jJzogLTEsXHJcbiAgICAgICAgICAgICdzY2VuZUluZGV4ZXNMb2MnOiAtMSxcclxuICAgICAgICAgICAgJ3RyYW5zZm9ybXNMb2NzJzogW11cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmdsb2JhbFNwbGF0SW5kZXhUb0xvY2FsU3BsYXRJbmRleE1hcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsU3BsYXRJbmRleFRvU2NlbmVJbmRleE1hcCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmxhc3RCdWlsZFNwbGF0Q291bnQgPSAwO1xyXG4gICAgICAgIHRoaXMubGFzdEJ1aWxkU2NlbmVzID0gW107XHJcbiAgICAgICAgdGhpcy5sYXN0QnVpbGRNYXhTcGxhdENvdW50ID0gMDtcclxuICAgICAgICB0aGlzLmxhc3RCdWlsZFNjZW5lQ291bnQgPSAwO1xyXG4gICAgICAgIHRoaXMuZmlyc3RSZW5kZXJUaW1lID0gLTE7XHJcbiAgICAgICAgdGhpcy5maW5hbEJ1aWxkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMud2ViR0xVdGlscyA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm94MygpO1xyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlZFNjZW5lQ2VudGVyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB0aGlzLm1heFNwbGF0RGlzdGFuY2VGcm9tU2NlbmVDZW50ZXIgPSAwO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVJlZ2lvbkJ1ZmZlclJhZGl1cyA9IDA7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlUmVnaW9uUmFkaXVzID0gMDtcclxuICAgICAgICB0aGlzLnZpc2libGVSZWdpb25GYWRlU3RhcnRSYWRpdXMgPSAwO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVJlZ2lvbkNoYW5naW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc3BsYXRTY2FsZSA9IDEuMDtcclxuICAgICAgICB0aGlzLnBvaW50Q2xvdWRNb2RlRW5hYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmRpc3Bvc2VkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sYXN0UmVuZGVyZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgYSBjb250YWluZXIgZm9yIGVhY2ggc2NlbmUgbWFuYWdlZCBieSB0aGlzIHNwbGF0IG1lc2ggYmFzZWQgb24gYW4gaW5zdGFuY2Ugb2YgU3BsYXRCdWZmZXIsIGFsb25nIHdpdGggb3B0aW9uYWxcclxuICAgICAqIHRyYW5zZm9ybSBkYXRhIChwb3NpdGlvbiwgc2NhbGUsIHJvdGF0aW9uKSBwYXNzZWQgdG8gdGhlIHNwbGF0IG1lc2ggZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLlxyXG4gICAgICogQHBhcmFtIHtBcnJheTxUSFJFRS5NYXRyaXg0Pn0gc3BsYXRCdWZmZXJzIFNwbGF0QnVmZmVyIGluc3RhbmNlcyBjb250YWluaW5nIHNwbGF0cyBmb3IgZWFjaCBzY2VuZVxyXG4gICAgICogQHBhcmFtIHtBcnJheTxvYmplY3Q+fSBzY2VuZU9wdGlvbnMgQXJyYXkgb2Ygb3B0aW9ucyBvYmplY3RzOiB7XHJcbiAgICAgKlxyXG4gICAgICogICAgICAgICBwb3NpdGlvbiAoQXJyYXk8bnVtYmVyPik6ICAgUG9zaXRpb24gb2YgdGhlIHNjZW5lLCBhY3RzIGFzIGFuIG9mZnNldCBmcm9tIGl0cyBkZWZhdWx0IHBvc2l0aW9uLCBkZWZhdWx0cyB0byBbMCwgMCwgMF1cclxuICAgICAqXHJcbiAgICAgKiAgICAgICAgIHJvdGF0aW9uIChBcnJheTxudW1iZXI+KTogICBSb3RhdGlvbiBvZiB0aGUgc2NlbmUgcmVwcmVzZW50ZWQgYXMgYSBxdWF0ZXJuaW9uLCBkZWZhdWx0cyB0byBbMCwgMCwgMCwgMV1cclxuICAgICAqXHJcbiAgICAgKiAgICAgICAgIHNjYWxlIChBcnJheTxudW1iZXI+KTogICAgICBTY2VuZSdzIHNjYWxlLCBkZWZhdWx0cyB0byBbMSwgMSwgMV1cclxuICAgICAqIH1cclxuICAgICAqIEByZXR1cm4ge0FycmF5PFRIUkVFLk1hdHJpeDQ+fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYnVpbGRTY2VuZXMocGFyZW50T2JqZWN0LCBzcGxhdEJ1ZmZlcnMsIHNjZW5lT3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHNjZW5lcyA9IFtdO1xyXG4gICAgICAgIHNjZW5lcy5sZW5ndGggPSBzcGxhdEJ1ZmZlcnMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsYXRCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGF0QnVmZmVyID0gc3BsYXRCdWZmZXJzW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gc2NlbmVPcHRpb25zW2ldIHx8IHt9O1xyXG4gICAgICAgICAgICBsZXQgcG9zaXRpb25BcnJheSA9IG9wdGlvbnNbJ3Bvc2l0aW9uJ10gfHwgWzAsIDAsIDBdO1xyXG4gICAgICAgICAgICBsZXQgcm90YXRpb25BcnJheSA9IG9wdGlvbnNbJ3JvdGF0aW9uJ10gfHwgWzAsIDAsIDAsIDFdO1xyXG4gICAgICAgICAgICBsZXQgc2NhbGVBcnJheSA9IG9wdGlvbnNbJ3NjYWxlJ10gfHwgWzEsIDEsIDFdO1xyXG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCkuZnJvbUFycmF5KHBvc2l0aW9uQXJyYXkpO1xyXG4gICAgICAgICAgICBjb25zdCByb3RhdGlvbiA9IG5ldyBRdWF0ZXJuaW9uKCkuZnJvbUFycmF5KHJvdGF0aW9uQXJyYXkpO1xyXG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IG5ldyBWZWN0b3IzKCkuZnJvbUFycmF5KHNjYWxlQXJyYXkpO1xyXG4gICAgICAgICAgICBjb25zdCBzY2VuZSA9IFNwbGF0TWVzaC5jcmVhdGVTY2VuZShzcGxhdEJ1ZmZlciwgcG9zaXRpb24sIHJvdGF0aW9uLCBzY2FsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zcGxhdEFscGhhUmVtb3ZhbFRocmVzaG9sZCB8fCAxLCBvcHRpb25zLm9wYWNpdHksIG9wdGlvbnMudmlzaWJsZSk7XHJcbiAgICAgICAgICAgIHBhcmVudE9iamVjdC5hZGQoc2NlbmUpO1xyXG4gICAgICAgICAgICBzY2VuZXNbaV0gPSBzY2VuZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNjZW5lcztcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHN0YXRpYyBjcmVhdGVTY2VuZShzcGxhdEJ1ZmZlciwgcG9zaXRpb24sIHJvdGF0aW9uLCBzY2FsZSwgbWluaW11bUFscGhhLCBvcGFjaXR5ID0gMS4wLCB2aXNpYmxlID0gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU3BsYXRTY2VuZShzcGxhdEJ1ZmZlciwgcG9zaXRpb24sIHJvdGF0aW9uLCBzY2FsZSwgbWluaW11bUFscGhhLCBvcGFjaXR5LCB2aXNpYmxlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGRhdGEgc3RydWN0dXJlcyB0aGF0IG1hcCBnbG9iYWwgc3BsYXQgaW5kZXhlcyAoYmFzZWQgb24gYSB1bmlmaWVkIGluZGV4IGFjcm9zcyBhbGwgc3BsYXQgYnVmZmVycykgdG9cclxuICAgICAqIGxvY2FsIGRhdGEgd2l0aGluIGEgc2luZ2xlIHNjZW5lLlxyXG4gICAgICogQHBhcmFtIHtBcnJheTxTcGxhdEJ1ZmZlcj59IHNwbGF0QnVmZmVycyBJbnN0YW5jZXMgb2YgU3BsYXRCdWZmZXIgb2ZmIHdoaWNoIHRvIGJ1aWxkIHRoZSBtYXBzXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBidWlsZFNwbGF0SW5kZXhNYXBzKHNwbGF0QnVmZmVycykge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsU3BsYXRJbmRleE1hcCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNjZW5lSW5kZXhNYXAgPSBbXTtcclxuICAgICAgICBsZXQgdG90YWxTcGxhdENvdW50ID0gMDtcclxuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNwbGF0QnVmZmVycy5sZW5ndGg7IHMrKykge1xyXG4gICAgICAgICAgICBjb25zdCBzcGxhdEJ1ZmZlciA9IHNwbGF0QnVmZmVyc1tzXTtcclxuICAgICAgICAgICAgY29uc3QgbWF4U3BsYXRDb3VudCA9IHNwbGF0QnVmZmVyLmdldE1heFNwbGF0Q291bnQoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTcGxhdENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3BsYXRJbmRleE1hcFt0b3RhbFNwbGF0Q291bnRdID0gaTtcclxuICAgICAgICAgICAgICAgIHNjZW5lSW5kZXhNYXBbdG90YWxTcGxhdENvdW50XSA9IHM7XHJcbiAgICAgICAgICAgICAgICB0b3RhbFNwbGF0Q291bnQrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsb2NhbFNwbGF0SW5kZXhNYXAsXHJcbiAgICAgICAgICAgIHNjZW5lSW5kZXhNYXBcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgYW4gaW5zdGFuY2Ugb2YgU3BsYXRUcmVlIChhIHNwZWNpYWxpemVkIG9jdHJlZSkgZm9yIHRoZSBnaXZlbiBzcGxhdCBtZXNoLlxyXG4gICAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBtaW5BbHBoYXMgQXJyYXkgb2YgbWluaW11bSBzcGxhdCBzbHBoYXMgZm9yIGVhY2ggc2NlbmVcclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uU3BsYXRUcmVlSW5kZXhlc1VwbG9hZCBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgdXBsb2FkIG9mIHNwbGF0IGNlbnRlcnMgdG8gdGhlIHNwbGF0IHRyZWVcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyIHdvcmtlciBzdGFydHMgYW5kIGZpbmlzaGVzLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gb25TcGxhdFRyZWVDb25zdHJ1Y3Rpb24gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGNvbnZlcnNpb24gb2YgdGhlIGxvY2FsIHNwbGF0IHRyZWUgZnJvbVxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvcm1hdCBwcm9kdWNlZCBieSB0aGUgc3BsYXQgdHJlZSBidWlsZGVyIHdvcmtlciBzdGFydHMgYW5kIGVuZHMuXHJcbiAgICAgKiBAcmV0dXJuIHtTcGxhdFRyZWV9XHJcbiAgICAgKi9cclxuICAgICBidWlsZFNwbGF0VHJlZSA9IChtaW5BbHBoYXMgPSBbXSwgb25TcGxhdFRyZWVJbmRleGVzVXBsb2FkLCBvblNwbGF0VHJlZUNvbnN0cnVjdGlvbikgPT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VTcGxhdFRyZWUoKTtcclxuICAgICAgICAgICAgLy8gVE9ETzogZXhwb3NlIFNwbGF0VHJlZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIChtYXhpbXVtRGVwdGggYW5kIG1heENlbnRlcnNQZXJOb2RlKSBzbyB0aGF0IHRoZXkgY2FuXHJcbiAgICAgICAgICAgIC8vIGJlIGNvbmZpZ3VyZWQgb24gYSBwZXItc2NlbmUgYmFzaXNcclxuICAgICAgICAgICAgdGhpcy5iYXNlU3BsYXRUcmVlID0gbmV3IFNwbGF0VHJlZSg4LCAxMDAwKTtcclxuICAgICAgICAgICAgY29uc3QgYnVpbGRTdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgICAgICAgICAgY29uc3Qgc3BsYXRDb2xvciA9IG5ldyBWZWN0b3I0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZVNwbGF0VHJlZS5wcm9jZXNzU3BsYXRNZXNoKHRoaXMsIChzcGxhdEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNwbGF0Q29sb3Ioc3BsYXRJbmRleCwgc3BsYXRDb2xvcik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY2VuZUluZGV4ID0gdGhpcy5nZXRTY2VuZUluZGV4Rm9yU3BsYXQoc3BsYXRJbmRleCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5BbHBoYSA9IG1pbkFscGhhc1tzY2VuZUluZGV4XSB8fCAxO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwbGF0Q29sb3IudyA+PSBtaW5BbHBoYTtcclxuICAgICAgICAgICAgfSwgb25TcGxhdFRyZWVJbmRleGVzVXBsb2FkLCBvblNwbGF0VHJlZUNvbnN0cnVjdGlvbilcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnVpbGRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCkgLSBidWlsZFN0YXJ0VGltZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZ0xldmVsID49IExvZ0xldmVsLkluZm8pIGNvbnNvbGUubG9nKCdTcGxhdFRyZWUgYnVpbGQ6ICcgKyBidWlsZFRpbWUgKyAnIG1zJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BsYXRUcmVlID0gdGhpcy5iYXNlU3BsYXRUcmVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFzZVNwbGF0VHJlZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBsZWF2ZXNXaXRoVmVydGljZXMgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhdmdTcGxhdENvdW50ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF4U3BsYXRDb3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVDb3VudCA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BsYXRUcmVlLnZpc2l0TGVhdmVzKChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVTcGxhdENvdW50ID0gbm9kZS5kYXRhLmluZGV4ZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZVNwbGF0Q291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmdTcGxhdENvdW50ICs9IG5vZGVTcGxhdENvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3BsYXRDb3VudCA9IE1hdGgubWF4KG1heFNwbGF0Q291bnQsIG5vZGVTcGxhdENvdW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhdmVzV2l0aFZlcnRpY2VzKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2dMZXZlbCA+PSBMb2dMZXZlbC5JbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTcGxhdFRyZWUgbGVhdmVzOiAke3RoaXMuc3BsYXRUcmVlLmNvdW50TGVhdmVzKCl9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTcGxhdFRyZWUgbGVhdmVzIHdpdGggc3BsYXRzOiR7bGVhdmVzV2l0aFZlcnRpY2VzfWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmdTcGxhdENvdW50ID0gYXZnU3BsYXRDb3VudCAvIG5vZGVDb3VudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEF2ZyBzcGxhdCBjb3VudCBwZXIgbm9kZTogJHthdmdTcGxhdENvdW50fWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVG90YWwgc3BsYXQgY291bnQ6ICR7dGhpcy5nZXRTcGxhdENvdW50KCl9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0IHRoaXMgaW5zdGFuY2Ugb2YgU3BsYXRNZXNoLlxyXG4gICAgICogQHBhcmFtIHtBcnJheTxTcGxhdEJ1ZmZlcj59IHNwbGF0QnVmZmVycyBUaGUgYmFzZSBzcGxhdCBkYXRhLCBpbnN0YW5jZXMgb2YgU3BsYXRCdWZmZXJcclxuICAgICAqIEBwYXJhbSB7QXJyYXk8b2JqZWN0Pn0gc2NlbmVPcHRpb25zIER5bmFtaWMgb3B0aW9ucyBmb3IgZWFjaCBzY2VuZSB7XHJcbiAgICAgKlxyXG4gICAgICogICAgICAgICBzcGxhdEFscGhhUmVtb3ZhbFRocmVzaG9sZDogSWdub3JlIGFueSBzcGxhdHMgd2l0aCBhbiBhbHBoYSBsZXNzIHRoYW4gdGhlIHNwZWNpZmllZFxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKHZhbGlkIHJhbmdlOiAwIC0gMjU1KSwgZGVmYXVsdHMgdG8gMVxyXG4gICAgICpcclxuICAgICAqICAgICAgICAgcG9zaXRpb24gKEFycmF5PG51bWJlcj4pOiAgIFBvc2l0aW9uIG9mIHRoZSBzY2VuZSwgYWN0cyBhcyBhbiBvZmZzZXQgZnJvbSBpdHMgZGVmYXVsdCBwb3NpdGlvbiwgZGVmYXVsdHMgdG8gWzAsIDAsIDBdXHJcbiAgICAgKlxyXG4gICAgICogICAgICAgICByb3RhdGlvbiAoQXJyYXk8bnVtYmVyPik6ICAgUm90YXRpb24gb2YgdGhlIHNjZW5lIHJlcHJlc2VudGVkIGFzIGEgcXVhdGVybmlvbiwgZGVmYXVsdHMgdG8gWzAsIDAsIDAsIDFdXHJcbiAgICAgKlxyXG4gICAgICogICAgICAgICBzY2FsZSAoQXJyYXk8bnVtYmVyPik6ICAgICAgU2NlbmUncyBzY2FsZSwgZGVmYXVsdHMgdG8gWzEsIDEsIDFdXHJcbiAgICAgKlxyXG4gICAgICogfVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBrZWVwU2NlbmVUcmFuc2Zvcm1zIEZvciBhIHNjZW5lIHRoYXQgYWxyZWFkeSBleGlzdHMgYW5kIGlzIGJlaW5nIG92ZXJ3cml0dGVuLCB0aGlzIGZsYWdcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXlzIHRvIGtlZXAgdGhlIHRyYW5zZm9ybSBmcm9tIHRoZSBleGlzdGluZyBzY2VuZS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluYWxCdWlsZCBXaWxsIHRoZSBzcGxhdCBtZXNoIGJlIGluIGl0cyBmaW5hbCBzdGF0ZSBhZnRlciB0aGlzIGJ1aWxkP1xyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gb25TcGxhdFRyZWVJbmRleGVzVXBsb2FkIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB1cGxvYWQgb2Ygc3BsYXQgY2VudGVycyB0byB0aGUgc3BsYXQgdHJlZVxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIgd29ya2VyIHN0YXJ0cyBhbmQgZmluaXNoZXMuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvblNwbGF0VHJlZUNvbnN0cnVjdGlvbiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgY29udmVyc2lvbiBvZiB0aGUgbG9jYWwgc3BsYXQgdHJlZSBmcm9tXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9ybWF0IHByb2R1Y2VkIGJ5IHRoZSBzcGxhdCB0cmVlIGJ1aWxkZXIgd29ya2VyIHN0YXJ0cyBhbmQgZW5kcy5cclxuICAgICAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgaW5mbyBhYm91dCB0aGUgc3BsYXRzIHRoYXQgYXJlIHVwZGF0ZWRcclxuICAgICAqL1xyXG4gICAgYnVpbGQoc3BsYXRCdWZmZXJzLCBzY2VuZU9wdGlvbnMsIGtlZXBTY2VuZVRyYW5zZm9ybXMgPSB0cnVlLCBmaW5hbEJ1aWxkID0gZmFsc2UsXHJcbiAgICAgICAgICBvblNwbGF0VHJlZUluZGV4ZXNVcGxvYWQsIG9uU3BsYXRUcmVlQ29uc3RydWN0aW9uLCBwcmVzZXJ2ZVZpc2libGVSZWdpb24gPSB0cnVlKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmVPcHRpb25zID0gc2NlbmVPcHRpb25zO1xyXG4gICAgICAgIHRoaXMuZmluYWxCdWlsZCA9IGZpbmFsQnVpbGQ7XHJcblxyXG4gICAgICAgIGNvbnN0IG1heFNwbGF0Q291bnQgPSBTcGxhdE1lc2guZ2V0VG90YWxNYXhTcGxhdENvdW50Rm9yU3BsYXRCdWZmZXJzKHNwbGF0QnVmZmVycyk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld1NjZW5lcyA9IFNwbGF0TWVzaC5idWlsZFNjZW5lcyh0aGlzLCBzcGxhdEJ1ZmZlcnMsIHNjZW5lT3B0aW9ucyk7XHJcbiAgICAgICAgaWYgKGtlZXBTY2VuZVRyYW5zZm9ybXMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNjZW5lcy5sZW5ndGggJiYgaSA8IG5ld1NjZW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U2NlbmUgPSBuZXdTY2VuZXNbaV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1NjZW5lID0gdGhpcy5nZXRTY2VuZShpKTtcclxuICAgICAgICAgICAgICAgIG5ld1NjZW5lLmNvcHlUcmFuc2Zvcm1EYXRhKGV4aXN0aW5nU2NlbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2NlbmVzID0gbmV3U2NlbmVzO1xyXG5cclxuICAgICAgICBsZXQgbWluU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gMztcclxuICAgICAgICBmb3IgKGxldCBzcGxhdEJ1ZmZlciBvZiBzcGxhdEJ1ZmZlcnMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3BsYXRCdWZmZXJTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPSBzcGxhdEJ1ZmZlci5nZXRNaW5TcGhlcmljYWxIYXJtb25pY3NEZWdyZWUoKTtcclxuICAgICAgICAgICAgaWYgKHNwbGF0QnVmZmVyU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlIDwgbWluU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKSB7XHJcbiAgICAgICAgICAgICAgICBtaW5TcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPSBzcGxhdEJ1ZmZlclNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1pblNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA9IE1hdGgubWluKG1pblNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSwgdGhpcy5zcGhlcmljYWxIYXJtb25pY3NEZWdyZWUpO1xyXG5cclxuICAgICAgICBsZXQgc3BsYXRCdWZmZXJzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChzcGxhdEJ1ZmZlcnMubGVuZ3RoICE9PSB0aGlzLmxhc3RCdWlsZFNjZW5lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgc3BsYXRCdWZmZXJzQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxhdEJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGF0QnVmZmVyID0gc3BsYXRCdWZmZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNwbGF0QnVmZmVyICE9PSB0aGlzLmxhc3RCdWlsZFNjZW5lc1tpXS5zcGxhdEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNwbGF0QnVmZmVyc0NoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaXNVcGRhdGVCdWlsZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmVzLmxlbmd0aCAhPT0gMSB8fFxyXG4gICAgICAgICAgICB0aGlzLmxhc3RCdWlsZFNjZW5lQ291bnQgIT09IHRoaXMuc2NlbmVzLmxlbmd0aCB8fFxyXG4gICAgICAgICAgICB0aGlzLmxhc3RCdWlsZE1heFNwbGF0Q291bnQgIT09IG1heFNwbGF0Q291bnQgfHxcclxuICAgICAgICAgICAgc3BsYXRCdWZmZXJzQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgaXNVcGRhdGVCdWlsZCA9IGZhbHNlO1xyXG4gICAgICAgfVxyXG5cclxuICAgICAgIGlmICghaXNVcGRhdGVCdWlsZCkge1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJveDMoKTtcclxuICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZVZpc2libGVSZWdpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF4U3BsYXREaXN0YW5jZUZyb21TY2VuZUNlbnRlciA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVSZWdpb25CdWZmZXJSYWRpdXMgPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlUmVnaW9uUmFkaXVzID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZVJlZ2lvbkZhZGVTdGFydFJhZGl1cyA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0UmVuZGVyVGltZSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubGFzdEJ1aWxkU2NlbmVzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMubGFzdEJ1aWxkU3BsYXRDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdEJ1aWxkTWF4U3BsYXRDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZU1lc2hEYXRhKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VvbWV0cnkgPSBTcGxhdEdlb21ldHJ5LmJ1aWxkKG1heFNwbGF0Q291bnQpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zcGxhdFJlbmRlck1vZGUgPT09IFNwbGF0UmVuZGVyTW9kZS5UaHJlZUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwgPSBTcGxhdE1hdGVyaWFsM0QuYnVpbGQodGhpcy5keW5hbWljTW9kZSwgdGhpcy5lbmFibGVPcHRpb25hbEVmZmVjdHMsIHRoaXMuYW50aWFsaWFzZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF4U2NyZWVuU3BhY2VTcGxhdFNpemUsIHRoaXMuc3BsYXRTY2FsZSwgdGhpcy5wb2ludENsb3VkTW9kZUVuYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlLCB0aGlzLmtlcm5lbDJEU2l6ZSwgdGhpcy51c2VGbGFtZU1vZGVsKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwgPSBTcGxhdE1hdGVyaWFsMkQuYnVpbGQodGhpcy5keW5hbWljTW9kZSwgdGhpcy5lbmFibGVPcHRpb25hbEVmZmVjdHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BsYXRTY2FsZSwgdGhpcy5wb2ludENsb3VkTW9kZUVuYWJsZWQsIHRoaXMubWluU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5kZXhNYXBzID0gU3BsYXRNZXNoLmJ1aWxkU3BsYXRJbmRleE1hcHMoc3BsYXRCdWZmZXJzKTtcclxuICAgICAgICAgICAgdGhpcy5nbG9iYWxTcGxhdEluZGV4VG9Mb2NhbFNwbGF0SW5kZXhNYXAgPSBpbmRleE1hcHMubG9jYWxTcGxhdEluZGV4TWFwO1xyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbFNwbGF0SW5kZXhUb1NjZW5lSW5kZXhNYXAgPSBpbmRleE1hcHMuc2NlbmVJbmRleE1hcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHNwbGF0QnVmZmVyU3BsYXRDb3VudCA9IHRoaXMuZ2V0U3BsYXRDb3VudCh0cnVlKTtcclxuICAgICAgICBpZiAodGhpcy5lbmFibGVEaXN0YW5jZXNDb21wdXRhdGlvbk9uR1BVKSB0aGlzLnNldHVwRGlzdGFuY2VzQ29tcHV0YXRpb25UcmFuc2Zvcm1GZWVkYmFjaygpO1xyXG4gICAgICAgIGNvbnN0IGRhdGFVcGRhdGVSZXN1bHRzID0gdGhpcy5yZWZyZXNoR1BVRGF0YUZyb21TcGxhdEJ1ZmZlcnMoaXNVcGRhdGVCdWlsZCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zY2VuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5sYXN0QnVpbGRTY2VuZXNbaV0gPSB0aGlzLnNjZW5lc1tpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sYXN0QnVpbGRTcGxhdENvdW50ID0gc3BsYXRCdWZmZXJTcGxhdENvdW50O1xyXG4gICAgICAgIHRoaXMubGFzdEJ1aWxkTWF4U3BsYXRDb3VudCA9IHRoaXMuZ2V0TWF4U3BsYXRDb3VudCgpO1xyXG4gICAgICAgIHRoaXMubGFzdEJ1aWxkU2NlbmVDb3VudCA9IHRoaXMuc2NlbmVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gaWYgKGZpbmFsQnVpbGQgJiYgdGhpcy5zY2VuZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLmJ1aWxkU3BsYXRUcmVlKHNjZW5lT3B0aW9ucy5tYXAob3B0aW9ucyA9PiBvcHRpb25zLnNwbGF0QWxwaGFSZW1vdmFsVGhyZXNob2xkIHx8IDEpLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIG9uU3BsYXRUcmVlSW5kZXhlc1VwbG9hZCwgb25TcGxhdFRyZWVDb25zdHJ1Y3Rpb24pXHJcbiAgICAgICAgLy8gICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLm9uU3BsYXRUcmVlUmVhZHlDYWxsYmFjaykgdGhpcy5vblNwbGF0VHJlZVJlYWR5Q2FsbGJhY2sodGhpcy5zcGxhdFRyZWUpO1xyXG4gICAgICAgIC8vICAgICAgICAgdGhpcy5vblNwbGF0VHJlZVJlYWR5Q2FsbGJhY2sgPSBudWxsO1xyXG4gICAgICAgIC8vICAgICB9KTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9ICh0aGlzLnNjZW5lcy5sZW5ndGggPiAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGFVcGRhdGVSZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIGZyZWVJbnRlcm1lZGlhdGVTcGxhdERhdGEoKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGRlbGV0ZVRleHR1cmVEYXRhID0gKHRleHR1cmUpID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIHRleHR1cmUuc291cmNlLmRhdGE7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0ZXh0dXJlLmltYWdlO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLm9uVXBkYXRlID0gbnVsbDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBkZWxldGUgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YS5jb3ZhcmlhbmNlcztcclxuICAgICAgICBkZWxldGUgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YS5jZW50ZXJzO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmJhc2VEYXRhLmNvbG9ycztcclxuICAgICAgICBkZWxldGUgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YS5zcGhlcmljYWxIYXJtb25pY3M7XHJcblxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmNlbnRlckNvbG9ycy5kYXRhO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmNvdmFyaWFuY2VzLmRhdGE7XHJcbiAgICAgICAgaWYgKHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuc3BoZXJpY2FsSGFybW9uaWNzKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLnNwaGVyaWNhbEhhcm1vbmljcy5kYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zcGxhdERhdGFUZXh0dXJlcy5zY2VuZUluZGV4ZXMpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuc2NlbmVJbmRleGVzLmRhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmNlbnRlckNvbG9ycy50ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmNlbnRlckNvbG9ycy50ZXh0dXJlLm9uVXBkYXRlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBkZWxldGVUZXh0dXJlRGF0YSh0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmNlbnRlckNvbG9ycy50ZXh0dXJlKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmZsYW1lTW9kZWxQb3NUZXh0dXJlLnRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuZmxhbWVNb2RlbFBvc1RleHR1cmUudGV4dHVyZS5vblVwZGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlVGV4dHVyZURhdGEodGhpcy5zcGxhdERhdGFUZXh0dXJlcy5mbGFtZU1vZGVsUG9zVGV4dHVyZS50ZXh0dXJlKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmNvdmFyaWFuY2VzLnRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuY292YXJpYW5jZXMudGV4dHVyZS5vblVwZGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlVGV4dHVyZURhdGEodGhpcy5zcGxhdERhdGFUZXh0dXJlcy5jb3ZhcmlhbmNlcy50ZXh0dXJlKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zcGxhdERhdGFUZXh0dXJlcy5zcGhlcmljYWxIYXJtb25pY3MpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuc3BoZXJpY2FsSGFybW9uaWNzLnRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuc3BoZXJpY2FsSGFybW9uaWNzLnRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5zcGhlcmljYWxIYXJtb25pY3MudGV4dHVyZS5vblVwZGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVUZXh0dXJlRGF0YSh0aGlzLnNwbGF0RGF0YVRleHR1cmVzLnNwaGVyaWNhbEhhcm1vbmljcy50ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLnNwaGVyaWNhbEhhcm1vbmljcy50ZXh0dXJlcy5mb3JFYWNoKCh0ZXh0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5vblVwZGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlVGV4dHVyZURhdGEodGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNwbGF0RGF0YVRleHR1cmVzLnNjZW5lSW5kZXhlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLnNjZW5lSW5kZXhlcy50ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5zY2VuZUluZGV4ZXMudGV4dHVyZS5vblVwZGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZVRleHR1cmVEYXRhKHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuc2NlbmVJbmRleGVzLnRleHR1cmUpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgdGhlIHNwbGF0IG1lc2hcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZSgpIHtcclxuICAgICAgICB0aGlzLmRpc3Bvc2VNZXNoRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuZGlzcG9zZVRleHR1cmVzKCk7XHJcbiAgICAgICAgdGhpcy5kaXNwb3NlU3BsYXRUcmVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlRGlzdGFuY2VzQ29tcHV0YXRpb25PbkdQVSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb21wdXRlRGlzdGFuY2VzT25HUFVTeW5jVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY29tcHV0ZURpc3RhbmNlc09uR1BVU3luY1RpbWVvdXQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlRGlzdGFuY2VzT25HUFVTeW5jVGltZW91dCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlRGlzdGFuY2VzQ29tcHV0YXRpb25HUFVSZXNvdXJjZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zY2VuZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrID0ge1xyXG4gICAgICAgICAgICAnaWQnOiBudWxsLFxyXG4gICAgICAgICAgICAndmVydGV4U2hhZGVyJzogbnVsbCxcclxuICAgICAgICAgICAgJ2ZyYWdtZW50U2hhZGVyJzogbnVsbCxcclxuICAgICAgICAgICAgJ3Byb2dyYW0nOiBudWxsLFxyXG4gICAgICAgICAgICAnY2VudGVyc0J1ZmZlcic6IG51bGwsXHJcbiAgICAgICAgICAgICdzY2VuZUluZGV4ZXNCdWZmZXInOiBudWxsLFxyXG4gICAgICAgICAgICAnb3V0RGlzdGFuY2VzQnVmZmVyJzogbnVsbCxcclxuICAgICAgICAgICAgJ2NlbnRlcnNMb2MnOiAtMSxcclxuICAgICAgICAgICAgJ21vZGVsVmlld1Byb2pMb2MnOiAtMSxcclxuICAgICAgICAgICAgJ3NjZW5lSW5kZXhlc0xvYyc6IC0xLFxyXG4gICAgICAgICAgICAndHJhbnNmb3Jtc0xvY3MnOiBbXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuZ2xvYmFsU3BsYXRJbmRleFRvTG9jYWxTcGxhdEluZGV4TWFwID0gW107XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTcGxhdEluZGV4VG9TY2VuZUluZGV4TWFwID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubGFzdEJ1aWxkU3BsYXRDb3VudCA9IDA7XHJcbiAgICAgICAgdGhpcy5sYXN0QnVpbGRTY2VuZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmxhc3RCdWlsZE1heFNwbGF0Q291bnQgPSAwO1xyXG4gICAgICAgIHRoaXMubGFzdEJ1aWxkU2NlbmVDb3VudCA9IDA7XHJcbiAgICAgICAgdGhpcy5maXJzdFJlbmRlclRpbWUgPSAtMTtcclxuICAgICAgICB0aGlzLmZpbmFsQnVpbGQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy53ZWJHTFV0aWxzID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3gzKCk7XHJcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVkU2NlbmVDZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIHRoaXMubWF4U3BsYXREaXN0YW5jZUZyb21TY2VuZUNlbnRlciA9IDA7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlUmVnaW9uQnVmZmVyUmFkaXVzID0gMDtcclxuICAgICAgICB0aGlzLnZpc2libGVSZWdpb25SYWRpdXMgPSAwO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVJlZ2lvbkZhZGVTdGFydFJhZGl1cyA9IDA7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlUmVnaW9uQ2hhbmdpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zcGxhdFNjYWxlID0gMS4wO1xyXG4gICAgICAgIHRoaXMucG9pbnRDbG91ZE1vZGVFbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubGFzdFJlbmRlcmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2Ugb2Ygb25seSB0aGUgVGhyZWUuanMgbWVzaCByZXNvdXJjZXMgKGdlb21ldHJ5LCBtYXRlcmlhbCwgYW5kIHRleHR1cmUpXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VNZXNoRGF0YSgpIHtcclxuICAgICAgICBpZiAodGhpcy5nZW9tZXRyeSAmJiB0aGlzLmdlb21ldHJ5ICE9PSBkdW1teUdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdlb21ldHJ5ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkaXNwb3NlVGV4dHVyZXMoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgdGV4dHVyZUtleSBpbiB0aGlzLnNwbGF0RGF0YVRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duKHRoaXMuc3BsYXREYXRhVGV4dHVyZXMsIHRleHR1cmVLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0dXJlQ29udGFpbmVyID0gdGhpcy5zcGxhdERhdGFUZXh0dXJlc1t0ZXh0dXJlS2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlQ29udGFpbmVyLnRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlQ29udGFpbmVyLnRleHR1cmUuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmVDb250YWluZXIudGV4dHVyZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcG9zZVNwbGF0VHJlZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zcGxhdFRyZWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zcGxhdFRyZWUuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnNwbGF0VHJlZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmJhc2VTcGxhdFRyZWUpIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlU3BsYXRUcmVlLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5iYXNlU3BsYXRUcmVlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3BsYXRUcmVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNwbGF0VHJlZTtcclxuICAgIH1cclxuXHJcbiAgICBvblNwbGF0VHJlZVJlYWR5KGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5vblNwbGF0VHJlZVJlYWR5Q2FsbGJhY2sgPSBjYWxsYmFjaztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjb3BpZXMgb2YgZGF0YSB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIHNwbGF0IGRpc3RhbmNlIGNvbXB1dGF0aW9uOiBzcGxhdCBjZW50ZXIgcG9zaXRpb25zIGFuZCBzcGxhdFxyXG4gICAgICogc2NlbmUgaW5kZXhlcyAobmVjZXNzYXJ5IGZvciBhcHBseWluZyBkeW5hbWljIHNjZW5lIHRyYW5zZm9ybWF0aW9ucyBkdXJpbmcgZGlzdGFuY2UgY29tcHV0YXRpb24pXHJcbiAgICAgKiBAcGFyYW0geyp9IHN0YXJ0IFRoZSBpbmRleCBhdCB3aGljaCB0byBzdGFydCBjb3B5aW5nIGRhdGFcclxuICAgICAqIEBwYXJhbSB7Kn0gZW5kICBUaGUgaW5kZXggYXQgd2hpY2ggdG8gc3RvcCBjb3B5aW5nIGRhdGFcclxuICAgICAqIEByZXR1cm4ge29iamVjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0RGF0YUZvckRpc3RhbmNlc0NvbXB1dGF0aW9uKHN0YXJ0LCBlbmQpIHtcclxuICAgICAgICBjb25zdCBjZW50ZXJzID0gdGhpcy5pbnRlZ2VyQmFzZWREaXN0YW5jZXNDb21wdXRhdGlvbiA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0SW50ZWdlckNlbnRlcnMoc3RhcnQsIGVuZCwgdHJ1ZSkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZsb2F0Q2VudGVycyhzdGFydCwgZW5kLCB0cnVlKTtcclxuICAgICAgICBjb25zdCBzY2VuZUluZGV4ZXMgPSB0aGlzLmdldFNjZW5lSW5kZXhlcyhzdGFydCwgZW5kKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjZW50ZXJzLFxyXG4gICAgICAgICAgICBzY2VuZUluZGV4ZXNcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVmcmVzaCBkYXRhIHRleHR1cmVzIGFuZCBHUFUgYnVmZmVycyB3aXRoIHNwbGF0IGRhdGEgZnJvbSB0aGUgc3BsYXQgYnVmZmVycyBiZWxvbmdpbmcgdG8gdGhpcyBtZXNoLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzaW5jZUxhc3RCdWlsZE9ubHkgU3BlY2lmeSB3aGV0aGVyIG9yIG5vdCB0byBvbmx5IHVwZGF0ZSBmb3Igc3BsYXRzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGJ1aWxkLlxyXG4gICAgICogQHJldHVybiB7b2JqZWN0fVxyXG4gICAgICovXHJcbiAgICByZWZyZXNoR1BVRGF0YUZyb21TcGxhdEJ1ZmZlcnMoc2luY2VMYXN0QnVpbGRPbmx5KSB7XHJcbiAgICAgICAgY29uc3Qgc3BsYXRDb3VudCA9IHRoaXMuZ2V0U3BsYXRDb3VudCh0cnVlKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hEYXRhVGV4dHVyZXNGcm9tU3BsYXRCdWZmZXJzKHNpbmNlTGFzdEJ1aWxkT25seSk7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlU3RhcnQgPSBzaW5jZUxhc3RCdWlsZE9ubHkgPyB0aGlzLmxhc3RCdWlsZFNwbGF0Q291bnQgOiAwO1xyXG4gICAgICAgIGNvbnN0IHsgY2VudGVycywgc2NlbmVJbmRleGVzIH0gPSB0aGlzLmdldERhdGFGb3JEaXN0YW5jZXNDb21wdXRhdGlvbih1cGRhdGVTdGFydCwgc3BsYXRDb3VudCAtIDEpO1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZURpc3RhbmNlc0NvbXB1dGF0aW9uT25HUFUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoR1BVQnVmZmVyc0ZvckRpc3RhbmNlc0NvbXB1dGF0aW9uKGNlbnRlcnMsIHNjZW5lSW5kZXhlcywgc2luY2VMYXN0QnVpbGRPbmx5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ2Zyb20nOiB1cGRhdGVTdGFydCxcclxuICAgICAgICAgICAgJ3RvJzogc3BsYXRDb3VudCAtIDEsXHJcbiAgICAgICAgICAgICdjb3VudCc6IHNwbGF0Q291bnQgLSB1cGRhdGVTdGFydCxcclxuICAgICAgICAgICAgJ2NlbnRlcnMnOiBjZW50ZXJzLFxyXG4gICAgICAgICAgICAnc2NlbmVJbmRleGVzJzogc2NlbmVJbmRleGVzXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgR1BVIGJ1ZmZlcnMgdGhhdCBhcmUgdXNlZCBmb3IgY29tcHV0aW5nIHNwbGF0IGRpc3RhbmNlcyBvbiB0aGUgR1BVLlxyXG4gICAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjZW50ZXJzIFNwbGF0IGNlbnRlciBwb3NpdGlvbnNcclxuICAgICAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gc2NlbmVJbmRleGVzIEluZGV4ZXMgb2YgdGhlIHNjZW5lIHRvIHdoaWNoIGVhY2ggc3BsYXQgYmVsb25nc1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzaW5jZUxhc3RCdWlsZE9ubHkgU3BlY2lmeSB3aGV0aGVyIG9yIG5vdCB0byBvbmx5IHVwZGF0ZSBmb3Igc3BsYXRzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGJ1aWxkLlxyXG4gICAgICovXHJcbiAgICByZWZyZXNoR1BVQnVmZmVyc0ZvckRpc3RhbmNlc0NvbXB1dGF0aW9uKGNlbnRlcnMsIHNjZW5lSW5kZXhlcywgc2luY2VMYXN0QnVpbGRPbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSBzaW5jZUxhc3RCdWlsZE9ubHkgPyB0aGlzLmxhc3RCdWlsZFNwbGF0Q291bnQgOiAwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlR1BVQ2VudGVyc0J1ZmZlckZvckRpc3RhbmNlc0NvbXB1dGF0aW9uKHNpbmNlTGFzdEJ1aWxkT25seSwgY2VudGVycywgb2Zmc2V0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUdQVVRyYW5zZm9ybUluZGV4ZXNCdWZmZXJGb3JEaXN0YW5jZXNDb21wdXRhdGlvbihzaW5jZUxhc3RCdWlsZE9ubHksIHNjZW5lSW5kZXhlcywgb2Zmc2V0KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZnJlc2ggZGF0YSB0ZXh0dXJlcyB3aXRoIGRhdGEgZnJvbSB0aGUgc3BsYXQgYnVmZmVycyBmb3IgdGhpcyBtZXNoLlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzaW5jZUxhc3RCdWlsZE9ubHkgU3BlY2lmeSB3aGV0aGVyIG9yIG5vdCB0byBvbmx5IHVwZGF0ZSBmb3Igc3BsYXRzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZSBsYXN0IGJ1aWxkLlxyXG4gICAgICovXHJcbiAgICByZWZyZXNoRGF0YVRleHR1cmVzRnJvbVNwbGF0QnVmZmVycyhzaW5jZUxhc3RCdWlsZE9ubHkpIHtcclxuICAgICAgICBjb25zdCBzcGxhdENvdW50ID0gdGhpcy5nZXRTcGxhdENvdW50KHRydWUpO1xyXG4gICAgICAgIGNvbnN0IGZyb21TcGxhdCA9IHRoaXMubGFzdEJ1aWxkU3BsYXRDb3VudDtcclxuICAgICAgICBjb25zdCB0b1NwbGF0ID0gc3BsYXRDb3VudCAtIDE7XHJcblxyXG4gICAgICAgIGlmICghc2luY2VMYXN0QnVpbGRPbmx5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBEYXRhVGV4dHVyZXMoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVCYXNlRGF0YUZyb21TcGxhdEJ1ZmZlcnMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJhc2VEYXRhRnJvbVNwbGF0QnVmZmVycyhmcm9tU3BsYXQsIHRvU3BsYXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhVGV4dHVyZXNGcm9tQmFzZURhdGEoZnJvbVNwbGF0LCB0b1NwbGF0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVSZWdpb24oc2luY2VMYXN0QnVpbGRPbmx5KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXR1cERhdGFUZXh0dXJlcygpIHtcclxuICAgICAgICBjb25zdCBtYXhTcGxhdENvdW50ID0gdGhpcy5nZXRNYXhTcGxhdENvdW50KCk7XHJcbiAgICAgICAgY29uc3Qgc3BsYXRDb3VudCA9IHRoaXMuZ2V0U3BsYXRDb3VudCh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNwb3NlVGV4dHVyZXMoKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29tcHV0ZURhdGFUZXh0dXJlU2l6ZSA9IChlbGVtZW50c1BlclRleGVsLCBlbGVtZW50c1BlclNwbGF0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRleFNpemUgPSBuZXcgVmVjdG9yMig0MDk2LCAxMDI0KTtcclxuICAgICAgICAgICAgd2hpbGUgKHRleFNpemUueCAqIHRleFNpemUueSAqIGVsZW1lbnRzUGVyVGV4ZWwgPCBtYXhTcGxhdENvdW50ICogZWxlbWVudHNQZXJTcGxhdCkgdGV4U2l6ZS55ICo9IDI7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXhTaXplO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGdldENvdmFyaWFuY2VzRWxlbWVudHNQZXJ0ZXhlbFN0b3JlZCA9IChjb21wcmVzc2lvbkxldmVsKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb21wcmVzc2lvbkxldmVsID49IDEgPyBDT1ZBUklBTkNFU19FTEVNRU5UU19QRVJfVEVYRUxfQ09NUFJFU1NFRF9TVE9SRUQgOiBDT1ZBUklBTkNFU19FTEVNRU5UU19QRVJfVEVYRUxfU1RPUkVEO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGdldENvdmFyaWFuY2VzSW5pdGlhbFRleHR1cmVTcGVjcyA9IChjb21wcmVzc2lvbkxldmVsKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzUGVyVGV4ZWxTdG9yZWQgPSBnZXRDb3ZhcmlhbmNlc0VsZW1lbnRzUGVydGV4ZWxTdG9yZWQoY29tcHJlc3Npb25MZXZlbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRleFNpemUgPSBjb21wdXRlRGF0YVRleHR1cmVTaXplKGVsZW1lbnRzUGVyVGV4ZWxTdG9yZWQsIDYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge2VsZW1lbnRzUGVyVGV4ZWxTdG9yZWQsIHRleFNpemV9O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBjb3ZhcmlhbmNlQ29tcHJlc3Npb25MZXZlbCA9IHRoaXMuZ2V0VGFyZ2V0Q292YXJpYW5jZUNvbXByZXNzaW9uTGV2ZWwoKTtcclxuICAgICAgICBjb25zdCBzY2FsZVJvdGF0aW9uQ29tcHJlc3Npb25MZXZlbCA9IDA7XHJcbiAgICAgICAgY29uc3Qgc2hDb21wcmVzc2lvbkxldmVsID0gdGhpcy5nZXRUYXJnZXRTcGhlcmljYWxIYXJtb25pY3NDb21wcmVzc2lvbkxldmVsKCk7XHJcblxyXG4gICAgICAgIGxldCBjb3ZhcmlhbmNlcztcclxuICAgICAgICBsZXQgc2NhbGVzO1xyXG4gICAgICAgIGxldCByb3RhdGlvbnM7XHJcbiAgICAgICAgaWYgKHRoaXMuc3BsYXRSZW5kZXJNb2RlID09PSBTcGxhdFJlbmRlck1vZGUuVGhyZWVEKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxDb3ZUZXhTcGVjcyA9IGdldENvdmFyaWFuY2VzSW5pdGlhbFRleHR1cmVTcGVjcyhjb3ZhcmlhbmNlQ29tcHJlc3Npb25MZXZlbCk7XHJcbiAgICAgICAgICAgIGlmIChpbml0aWFsQ292VGV4U3BlY3MudGV4U2l6ZS54ICogaW5pdGlhbENvdlRleFNwZWNzLnRleFNpemUueSA+IE1BWF9URVhUVVJFX1RFWEVMUyAmJiBjb3ZhcmlhbmNlQ29tcHJlc3Npb25MZXZlbCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgY292YXJpYW5jZUNvbXByZXNzaW9uTGV2ZWwgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvdmFyaWFuY2VzID0gbmV3IEZsb2F0MzJBcnJheShtYXhTcGxhdENvdW50ICogQ09WQVJJQU5DRVNfRUxFTUVOVFNfUEVSX1NQTEFUKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzY2FsZXMgPSBuZXcgRmxvYXQzMkFycmF5KG1heFNwbGF0Q291bnQgKiAzKTtcclxuICAgICAgICAgICAgcm90YXRpb25zID0gbmV3IEZsb2F0MzJBcnJheShtYXhTcGxhdENvdW50ICogNCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjZW50ZXJzID0gbmV3IEZsb2F0MzJBcnJheShtYXhTcGxhdENvdW50ICogMyk7XHJcbiAgICAgICAgY29uc3QgY29sb3JzID0gbmV3IFVpbnQ4QXJyYXkobWF4U3BsYXRDb3VudCAqIDQpO1xyXG5cclxuICAgICAgICBsZXQgU3BoZXJpY2FsSGFybW9uaWNzQXJyYXlUeXBlID0gRmxvYXQzMkFycmF5O1xyXG4gICAgICAgIGlmIChzaENvbXByZXNzaW9uTGV2ZWwgPT09IDEpIFNwaGVyaWNhbEhhcm1vbmljc0FycmF5VHlwZSA9IFVpbnQxNkFycmF5O1xyXG4gICAgICAgIGVsc2UgaWYgKHNoQ29tcHJlc3Npb25MZXZlbCA9PT0gMikgU3BoZXJpY2FsSGFybW9uaWNzQXJyYXlUeXBlID0gVWludDhBcnJheTtcclxuICAgICAgICBjb25zdCBzaENvbXBvbmVudENvdW50ID0gZ2V0U3BoZXJpY2FsSGFybW9uaWNzQ29tcG9uZW50Q291bnRGb3JEZWdyZWUodGhpcy5taW5TcGhlcmljYWxIYXJtb25pY3NEZWdyZWUpO1xyXG4gICAgICAgIGNvbnN0IHNoRGF0YSA9IHRoaXMubWluU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID8gbmV3IFNwaGVyaWNhbEhhcm1vbmljc0FycmF5VHlwZShtYXhTcGxhdENvdW50ICogc2hDb21wb25lbnRDb3VudCkgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIC8vIHNldCB1cCBjZW50ZXJzL2NvbG9ycyBkYXRhIHRleHR1cmVcclxuICAgICAgICBjb25zdCBjZW50ZXJzQ29sc1RleFNpemUgPSBjb21wdXRlRGF0YVRleHR1cmVTaXplKENFTlRFUl9DT0xPUlNfRUxFTUVOVFNfUEVSX1RFWEVMLCA0KTtcclxuICAgICAgICBjb25zdCBwYWRkZWRDZW50ZXJzQ29scyA9IG5ldyBVaW50MzJBcnJheShjZW50ZXJzQ29sc1RleFNpemUueCAqIGNlbnRlcnNDb2xzVGV4U2l6ZS55ICogQ0VOVEVSX0NPTE9SU19FTEVNRU5UU19QRVJfVEVYRUwpO1xyXG4gICAgICAgIFNwbGF0TWVzaC51cGRhdGVDZW50ZXJDb2xvcnNQYWRkZWREYXRhKDAsIHNwbGF0Q291bnQgLSAxLCBjZW50ZXJzLCBjb2xvcnMsIHBhZGRlZENlbnRlcnNDb2xzKTtcclxuXHJcbiAgICAgICAgY29uc3QgY2VudGVyc0NvbHNUZXggPSBuZXcgRGF0YVRleHR1cmUocGFkZGVkQ2VudGVyc0NvbHMsIGNlbnRlcnNDb2xzVGV4U2l6ZS54LCBjZW50ZXJzQ29sc1RleFNpemUueSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSR0JBSW50ZWdlckZvcm1hdCwgVW5zaWduZWRJbnRUeXBlKTtcclxuICAgICAgICBjZW50ZXJzQ29sc1RleC5pbnRlcm5hbEZvcm1hdCA9ICdSR0JBMzJVSSc7XHJcbiAgICAgICAgY2VudGVyc0NvbHNUZXgubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuY2VudGVyc0NvbG9yc1RleHR1cmUudmFsdWUgPSBjZW50ZXJzQ29sc1RleDtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmNlbnRlcnNDb2xvcnNUZXh0dXJlU2l6ZS52YWx1ZS5jb3B5KGNlbnRlcnNDb2xzVGV4U2l6ZSk7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnNwbGF0RGF0YVRleHR1cmVzID0ge1xyXG4gICAgICAgICAgICAnYmFzZURhdGEnOiB7XHJcbiAgICAgICAgICAgICAgICAnY292YXJpYW5jZXMnOiBjb3ZhcmlhbmNlcyxcclxuICAgICAgICAgICAgICAgICdzY2FsZXMnOiBzY2FsZXMsXHJcbiAgICAgICAgICAgICAgICAncm90YXRpb25zJzogcm90YXRpb25zLFxyXG4gICAgICAgICAgICAgICAgJ2NlbnRlcnMnOiBjZW50ZXJzLFxyXG4gICAgICAgICAgICAgICAgJ2NvbG9ycyc6IGNvbG9ycyxcclxuICAgICAgICAgICAgICAgICdzcGhlcmljYWxIYXJtb25pY3MnOiBzaERhdGFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgJ2NlbnRlckNvbG9ycyc6IHtcclxuICAgICAgICAgICAgICAgICdkYXRhJzogcGFkZGVkQ2VudGVyc0NvbHMsXHJcbiAgICAgICAgICAgICAgICAndGV4dHVyZSc6IGNlbnRlcnNDb2xzVGV4LFxyXG4gICAgICAgICAgICAgICAgJ3NpemUnOiBjZW50ZXJzQ29sc1RleFNpemVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNwbGF0UmVuZGVyTW9kZSA9PT0gU3BsYXRSZW5kZXJNb2RlLlRocmVlRCkge1xyXG4gICAgICAgICAgICAvLyBzZXQgdXAgY292YXJpYW5jZXMgZGF0YSB0ZXh0dXJlXHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb3ZUZXhTcGVjcyA9IGdldENvdmFyaWFuY2VzSW5pdGlhbFRleHR1cmVTcGVjcyhjb3ZhcmlhbmNlQ29tcHJlc3Npb25MZXZlbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdmFyaWFuY2VzRWxlbWVudHNQZXJUZXhlbFN0b3JlZCA9IGNvdlRleFNwZWNzLmVsZW1lbnRzUGVyVGV4ZWxTdG9yZWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdlRleFNpemUgPSBjb3ZUZXhTcGVjcy50ZXhTaXplO1xyXG5cclxuICAgICAgICAgICAgbGV0IENvdmFyaWFuY2VzRGF0YVR5cGUgPSBjb3ZhcmlhbmNlQ29tcHJlc3Npb25MZXZlbCA+PSAxID8gVWludDMyQXJyYXkgOiBGbG9hdDMyQXJyYXk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdmFyaWFuY2VzRWxlbWVudHNQZXJUZXhlbEFsbG9jYXRlZCA9IGNvdmFyaWFuY2VDb21wcmVzc2lvbkxldmVsID49IDEgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1ZBUklBTkNFU19FTEVNRU5UU19QRVJfVEVYRUxfQ09NUFJFU1NFRF9BTExPQ0FURUQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1ZBUklBTkNFU19FTEVNRU5UU19QRVJfVEVYRUxfQUxMT0NBVEVEO1xyXG4gICAgICAgICAgICBjb25zdCBjb3ZhcmlhbmNlc1RleHR1cmVEYXRhID0gbmV3IENvdmFyaWFuY2VzRGF0YVR5cGUoY292VGV4U2l6ZS54ICogY292VGV4U2l6ZS55ICogY292YXJpYW5jZXNFbGVtZW50c1BlclRleGVsQWxsb2NhdGVkKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3ZhcmlhbmNlQ29tcHJlc3Npb25MZXZlbCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgY292YXJpYW5jZXNUZXh0dXJlRGF0YS5zZXQoY292YXJpYW5jZXMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgU3BsYXRNZXNoLnVwZGF0ZVBhZGRlZENvbXByZXNzZWRDb3ZhcmlhbmNlc1RleHR1cmVEYXRhKGNvdmFyaWFuY2VzLCBjb3ZhcmlhbmNlc1RleHR1cmVEYXRhLCAwLCAwLCBjb3ZhcmlhbmNlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgY292VGV4O1xyXG4gICAgICAgICAgICBpZiAoY292YXJpYW5jZUNvbXByZXNzaW9uTGV2ZWwgPj0gMSkge1xyXG4gICAgICAgICAgICAgICAgY292VGV4ID0gbmV3IERhdGFUZXh0dXJlKGNvdmFyaWFuY2VzVGV4dHVyZURhdGEsIGNvdlRleFNpemUueCwgY292VGV4U2l6ZS55LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJHQkFJbnRlZ2VyRm9ybWF0LCBVbnNpZ25lZEludFR5cGUpO1xyXG4gICAgICAgICAgICAgICAgY292VGV4LmludGVybmFsRm9ybWF0ID0gJ1JHQkEzMlVJJztcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuY292YXJpYW5jZXNUZXh0dXJlSGFsZkZsb2F0LnZhbHVlID0gY292VGV4O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY292VGV4ID0gbmV3IERhdGFUZXh0dXJlKGNvdmFyaWFuY2VzVGV4dHVyZURhdGEsIGNvdlRleFNpemUueCwgY292VGV4U2l6ZS55LCBSR0JBRm9ybWF0LCBGbG9hdFR5cGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5jb3ZhcmlhbmNlc1RleHR1cmUudmFsdWUgPSBjb3ZUZXg7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIGEgdXNhbXBsZXIyRCBuZWVkcyB0byBoYXZlIGEgdmFsaWQgdGV4dHVyZSBhdHRhY2hlZCBvciBXZWJHTCBjb21wbGFpbnNcclxuICAgICAgICAgICAgICAgIGNvbnN0IGR1bW15VGV4ID0gbmV3IERhdGFUZXh0dXJlKG5ldyBVaW50MzJBcnJheSgzMiksIDIsIDIsIFJHQkFJbnRlZ2VyRm9ybWF0LCBVbnNpZ25lZEludFR5cGUpO1xyXG4gICAgICAgICAgICAgICAgZHVtbXlUZXguaW50ZXJuYWxGb3JtYXQgPSAnUkdCQTMyVUknO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5jb3ZhcmlhbmNlc1RleHR1cmVIYWxmRmxvYXQudmFsdWUgPSBkdW1teVRleDtcclxuICAgICAgICAgICAgICAgIGR1bW15VGV4Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb3ZUZXgubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5jb3ZhcmlhbmNlc0FyZUhhbGZGbG9hdC52YWx1ZSA9IChjb3ZhcmlhbmNlQ29tcHJlc3Npb25MZXZlbCA+PSAxKSA/IDEgOiAwO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmNvdmFyaWFuY2VzVGV4dHVyZVNpemUudmFsdWUuY29weShjb3ZUZXhTaXplKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3BsYXREYXRhVGV4dHVyZXNbJ2NvdmFyaWFuY2VzJ10gPSB7XHJcbiAgICAgICAgICAgICAgICAnZGF0YSc6IGNvdmFyaWFuY2VzVGV4dHVyZURhdGEsXHJcbiAgICAgICAgICAgICAgICAndGV4dHVyZSc6IGNvdlRleCxcclxuICAgICAgICAgICAgICAgICdzaXplJzogY292VGV4U2l6ZSxcclxuICAgICAgICAgICAgICAgICdjb21wcmVzc2lvbkxldmVsJzogY292YXJpYW5jZUNvbXByZXNzaW9uTGV2ZWwsXHJcbiAgICAgICAgICAgICAgICAnZWxlbWVudHNQZXJUZXhlbFN0b3JlZCc6IGNvdmFyaWFuY2VzRWxlbWVudHNQZXJUZXhlbFN0b3JlZCxcclxuICAgICAgICAgICAgICAgICdlbGVtZW50c1BlclRleGVsQWxsb2NhdGVkJzogY292YXJpYW5jZXNFbGVtZW50c1BlclRleGVsQWxsb2NhdGVkXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc2V0IHVwIHNjYWxlICYgcm90YXRpb25zIGRhdGEgdGV4dHVyZVxyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c1BlclNwbGF0ID0gNjtcclxuICAgICAgICAgICAgY29uc3Qgc2NhbGVSb3RhdGlvbnNUZXhTaXplID0gY29tcHV0ZURhdGFUZXh0dXJlU2l6ZShTQ0FMRVNfUk9UQVRJT05TX0VMRU1FTlRTX1BFUl9URVhFTCwgZWxlbWVudHNQZXJTcGxhdCk7XHJcbiAgICAgICAgICAgIGxldCBTY2FsZVJvdGF0aW9uc0RhdGFUeXBlID0gc2NhbGVSb3RhdGlvbkNvbXByZXNzaW9uTGV2ZWwgPj0gMSA/IFVpbnQxNkFycmF5IDogRmxvYXQzMkFycmF5O1xyXG4gICAgICAgICAgICBsZXQgc2NhbGVSb3RhdGlvbnNUZXh0dXJlVHlwZSA9IHNjYWxlUm90YXRpb25Db21wcmVzc2lvbkxldmVsID49IDEgPyBIYWxmRmxvYXRUeXBlIDogRmxvYXRUeXBlO1xyXG4gICAgICAgICAgICBjb25zdCBwYWRkZWRTY2FsZVJvdGF0aW9ucyA9IG5ldyBTY2FsZVJvdGF0aW9uc0RhdGFUeXBlKHNjYWxlUm90YXRpb25zVGV4U2l6ZS54ICogc2NhbGVSb3RhdGlvbnNUZXhTaXplLnkgKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQUxFU19ST1RBVElPTlNfRUxFTUVOVFNfUEVSX1RFWEVMKTtcclxuXHJcbiAgICAgICAgICAgIFNwbGF0TWVzaC51cGRhdGVTY2FsZVJvdGF0aW9uc1BhZGRlZERhdGEoMCwgc3BsYXRDb3VudCAtIDEsIHNjYWxlcywgcm90YXRpb25zLCBwYWRkZWRTY2FsZVJvdGF0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzY2FsZVJvdGF0aW9uc1RleCA9IG5ldyBEYXRhVGV4dHVyZShwYWRkZWRTY2FsZVJvdGF0aW9ucywgc2NhbGVSb3RhdGlvbnNUZXhTaXplLngsIHNjYWxlUm90YXRpb25zVGV4U2l6ZS55LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSR0JBRm9ybWF0LCBzY2FsZVJvdGF0aW9uc1RleHR1cmVUeXBlKTtcclxuICAgICAgICAgICAgc2NhbGVSb3RhdGlvbnNUZXgubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLnNjYWxlUm90YXRpb25zVGV4dHVyZS52YWx1ZSA9IHNjYWxlUm90YXRpb25zVGV4O1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLnNjYWxlUm90YXRpb25zVGV4dHVyZVNpemUudmFsdWUuY29weShzY2FsZVJvdGF0aW9uc1RleFNpemUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlc1snc2NhbGVSb3RhdGlvbnMnXSA9IHtcclxuICAgICAgICAgICAgICAgICdkYXRhJzogcGFkZGVkU2NhbGVSb3RhdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAndGV4dHVyZSc6IHNjYWxlUm90YXRpb25zVGV4LFxyXG4gICAgICAgICAgICAgICAgJ3NpemUnOiBzY2FsZVJvdGF0aW9uc1RleFNpemUsXHJcbiAgICAgICAgICAgICAgICAnY29tcHJlc3Npb25MZXZlbCc6IHNjYWxlUm90YXRpb25Db21wcmVzc2lvbkxldmVsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2hEYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNoVGV4dHVyZVR5cGUgPSBzaENvbXByZXNzaW9uTGV2ZWwgPT09IDIgPyBVbnNpZ25lZEJ5dGVUeXBlIDogSGFsZkZsb2F0VHlwZTtcclxuXHJcbiAgICAgICAgICAgIGxldCBwYWRkZWRTSENvbXBvbmVudENvdW50ID0gc2hDb21wb25lbnRDb3VudDtcclxuICAgICAgICAgICAgaWYgKHBhZGRlZFNIQ29tcG9uZW50Q291bnQgJSAyICE9PSAwKSBwYWRkZWRTSENvbXBvbmVudENvdW50Kys7XHJcbiAgICAgICAgICAgIGNvbnN0IHNoRWxlbWVudHNQZXJUZXhlbCA9IHRoaXMubWluU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID09PSAyID8gNCA6IDI7XHJcbiAgICAgICAgICAgIGNvbnN0IHRleGVsRm9ybWF0ID0gc2hFbGVtZW50c1BlclRleGVsID09PSA0ID8gUkdCQUZvcm1hdCA6IFJHRm9ybWF0O1xyXG4gICAgICAgICAgICBsZXQgc2hUZXhTaXplID0gY29tcHV0ZURhdGFUZXh0dXJlU2l6ZShzaEVsZW1lbnRzUGVyVGV4ZWwsIHBhZGRlZFNIQ29tcG9uZW50Q291bnQpO1xyXG5cclxuICAgICAgICAgICAgLy8gVXNlIG9uZSB0ZXh0dXJlIGZvciBhbGwgc3BoZXJpY2FsIGhhcm1vbmljcyBkYXRhXHJcbiAgICAgICAgICAgIGlmIChzaFRleFNpemUueCAqIHNoVGV4U2l6ZS55IDw9IE1BWF9URVhUVVJFX1RFWEVMUykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFkZGVkU0hBcnJheVNpemUgPSBzaFRleFNpemUueCAqIHNoVGV4U2l6ZS55ICogc2hFbGVtZW50c1BlclRleGVsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFkZGVkU0hBcnJheSA9IG5ldyBTcGhlcmljYWxIYXJtb25pY3NBcnJheVR5cGUocGFkZGVkU0hBcnJheVNpemUpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBzcGxhdENvdW50OyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcmNCYXNlID0gc2hDb21wb25lbnRDb3VudCAqIGM7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzdEJhc2UgPSBwYWRkZWRTSENvbXBvbmVudENvdW50ICogYztcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoQ29tcG9uZW50Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRTSEFycmF5W2Rlc3RCYXNlICsgaV0gPSBzaERhdGFbc3JjQmFzZSArIGldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzaFRleHR1cmUgPSBuZXcgRGF0YVRleHR1cmUocGFkZGVkU0hBcnJheSwgc2hUZXhTaXplLngsIHNoVGV4U2l6ZS55LCB0ZXhlbEZvcm1hdCwgc2hUZXh0dXJlVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzaFRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5zcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlLnZhbHVlID0gc2hUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlc1snc3BoZXJpY2FsSGFybW9uaWNzJ10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXBvbmVudENvdW50Jzogc2hDb21wb25lbnRDb3VudCxcclxuICAgICAgICAgICAgICAgICAgICAncGFkZGVkQ29tcG9uZW50Q291bnQnOiBwYWRkZWRTSENvbXBvbmVudENvdW50LFxyXG4gICAgICAgICAgICAgICAgICAgICdkYXRhJzogcGFkZGVkU0hBcnJheSxcclxuICAgICAgICAgICAgICAgICAgICAndGV4dHVyZUNvdW50JzogMSxcclxuICAgICAgICAgICAgICAgICAgICAndGV4dHVyZSc6IHNoVGV4dHVyZSxcclxuICAgICAgICAgICAgICAgICAgICAnc2l6ZSc6IHNoVGV4U2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAnY29tcHJlc3Npb25MZXZlbCc6IHNoQ29tcHJlc3Npb25MZXZlbCxcclxuICAgICAgICAgICAgICAgICAgICAnZWxlbWVudHNQZXJUZXhlbCc6IHNoRWxlbWVudHNQZXJUZXhlbFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gVXNlIHRocmVlIHRleHR1cmVzIGZvciBzcGhlcmljYWwgaGFybW9uaWNzIGRhdGEsIG9uZSBwZXIgY29sb3IgY2hhbm5lbFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hDb21wb25lbnRDb3VudFBlckNoYW5uZWwgPSBzaENvbXBvbmVudENvdW50IC8gMztcclxuICAgICAgICAgICAgICAgIHBhZGRlZFNIQ29tcG9uZW50Q291bnQgPSBzaENvbXBvbmVudENvdW50UGVyQ2hhbm5lbDtcclxuICAgICAgICAgICAgICAgIGlmIChwYWRkZWRTSENvbXBvbmVudENvdW50ICUgMiAhPT0gMCkgcGFkZGVkU0hDb21wb25lbnRDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgc2hUZXhTaXplID0gY29tcHV0ZURhdGFUZXh0dXJlU2l6ZShzaEVsZW1lbnRzUGVyVGV4ZWwsIHBhZGRlZFNIQ29tcG9uZW50Q291bnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRlZFNIQXJyYXlTaXplID0gc2hUZXhTaXplLnggKiBzaFRleFNpemUueSAqIHNoRWxlbWVudHNQZXJUZXhlbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHR1cmVVbmlmb3JtcyA9IFt0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLnNwaGVyaWNhbEhhcm1vbmljc1RleHR1cmVSLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZUcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5zcGhlcmljYWxIYXJtb25pY3NUZXh0dXJlQl07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYWRkZWRTSEFycmF5cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hUZXh0dXJlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCAzOyB0KyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWRkZWRTSEFycmF5ID0gbmV3IFNwaGVyaWNhbEhhcm1vbmljc0FycmF5VHlwZShwYWRkZWRTSEFycmF5U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGVkU0hBcnJheXMucHVzaChwYWRkZWRTSEFycmF5KTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHNwbGF0Q291bnQ7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcmNCYXNlID0gc2hDb21wb25lbnRDb3VudCAqIGM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc3RCYXNlID0gcGFkZGVkU0hDb21wb25lbnRDb3VudCAqIGM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaENvbXBvbmVudENvdW50UGVyQ2hhbm5lbCA+PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykgcGFkZGVkU0hBcnJheVtkZXN0QmFzZSArIGldID0gc2hEYXRhW3NyY0Jhc2UgKyB0ICogMyArIGldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoQ29tcG9uZW50Q291bnRQZXJDaGFubmVsID49IDgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykgcGFkZGVkU0hBcnJheVtkZXN0QmFzZSArIDMgKyBpXSA9IHNoRGF0YVtzcmNCYXNlICsgOSArIHQgKiA1ICsgaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoVGV4dHVyZSA9IG5ldyBEYXRhVGV4dHVyZShwYWRkZWRTSEFycmF5LCBzaFRleFNpemUueCwgc2hUZXhTaXplLnksIHRleGVsRm9ybWF0LCBzaFRleHR1cmVUeXBlKTtcclxuICAgICAgICAgICAgICAgICAgICBzaFRleHR1cmVzLnB1c2goc2hUZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICBzaFRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmVVbmlmb3Jtc1t0XS52YWx1ZSA9IHNoVGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLnNwaGVyaWNhbEhhcm1vbmljc011bHRpVGV4dHVyZU1vZGUudmFsdWUgPSAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlc1snc3BoZXJpY2FsSGFybW9uaWNzJ10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXBvbmVudENvdW50Jzogc2hDb21wb25lbnRDb3VudCxcclxuICAgICAgICAgICAgICAgICAgICAnY29tcG9uZW50Q291bnRQZXJDaGFubmVsJzogc2hDb21wb25lbnRDb3VudFBlckNoYW5uZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3BhZGRlZENvbXBvbmVudENvdW50JzogcGFkZGVkU0hDb21wb25lbnRDb3VudCxcclxuICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IHBhZGRlZFNIQXJyYXlzLFxyXG4gICAgICAgICAgICAgICAgICAgICd0ZXh0dXJlQ291bnQnOiAzLFxyXG4gICAgICAgICAgICAgICAgICAgICd0ZXh0dXJlcyc6IHNoVGV4dHVyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NpemUnOiBzaFRleFNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzaW9uTGV2ZWwnOiBzaENvbXByZXNzaW9uTGV2ZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2VsZW1lbnRzUGVyVGV4ZWwnOiBzaEVsZW1lbnRzUGVyVGV4ZWxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuc3BoZXJpY2FsSGFybW9uaWNzVGV4dHVyZVNpemUudmFsdWUuY29weShzaFRleFNpemUpO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLnNwaGVyaWNhbEhhcm1vbmljczhCaXRNb2RlLnZhbHVlID0gc2hDb21wcmVzc2lvbkxldmVsID09PSAyID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgdGhpcy5zY2VuZXMubGVuZ3RoOyBzKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGF0QnVmZmVyID0gdGhpcy5zY2VuZXNbc10uc3BsYXRCdWZmZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLnNwaGVyaWNhbEhhcm1vbmljczhCaXRDb21wcmVzc2lvblJhbmdlTWluLnZhbHVlW3NdID1cclxuICAgICAgICAgICAgICAgICAgICBzcGxhdEJ1ZmZlci5taW5TcGhlcmljYWxIYXJtb25pY3NDb2VmZjtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuc3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uUmFuZ2VNYXgudmFsdWVbc10gPVxyXG4gICAgICAgICAgICAgICAgICAgIHNwbGF0QnVmZmVyLm1heFNwaGVyaWNhbEhhcm1vbmljc0NvZWZmO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXNOZWVkVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHNjZW5lSW5kZXhlc1RleFNpemUgPSBjb21wdXRlRGF0YVRleHR1cmVTaXplKFNDRU5FX0lOREVYRVNfRUxFTUVOVFNfUEVSX1RFWEVMLCA0KTtcclxuICAgICAgICBjb25zdCBwYWRkZWRUcmFuc2Zvcm1JbmRleGVzID0gbmV3IFVpbnQzMkFycmF5KHNjZW5lSW5kZXhlc1RleFNpemUueCAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2VuZUluZGV4ZXNUZXhTaXplLnkgKiBTQ0VORV9JTkRFWEVTX0VMRU1FTlRTX1BFUl9URVhFTCk7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBzcGxhdENvdW50OyBjKyspIHBhZGRlZFRyYW5zZm9ybUluZGV4ZXNbY10gPSB0aGlzLmdsb2JhbFNwbGF0SW5kZXhUb1NjZW5lSW5kZXhNYXBbY107XHJcbiAgICAgICAgY29uc3Qgc2NlbmVJbmRleGVzVGV4dHVyZSA9IG5ldyBEYXRhVGV4dHVyZShwYWRkZWRUcmFuc2Zvcm1JbmRleGVzLCBzY2VuZUluZGV4ZXNUZXhTaXplLngsIHNjZW5lSW5kZXhlc1RleFNpemUueSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZEludGVnZXJGb3JtYXQsIFVuc2lnbmVkSW50VHlwZSk7XHJcbiAgICAgICAgc2NlbmVJbmRleGVzVGV4dHVyZS5pbnRlcm5hbEZvcm1hdCA9ICdSMzJVSSc7XHJcbiAgICAgICAgc2NlbmVJbmRleGVzVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5zY2VuZUluZGV4ZXNUZXh0dXJlLnZhbHVlID0gc2NlbmVJbmRleGVzVGV4dHVyZTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLnNjZW5lSW5kZXhlc1RleHR1cmVTaXplLnZhbHVlLmNvcHkoc2NlbmVJbmRleGVzVGV4U2l6ZSk7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3BsYXREYXRhVGV4dHVyZXNbJ3NjZW5lSW5kZXhlcyddID0ge1xyXG4gICAgICAgICAgICAnZGF0YSc6IHBhZGRlZFRyYW5zZm9ybUluZGV4ZXMsXHJcbiAgICAgICAgICAgICd0ZXh0dXJlJzogc2NlbmVJbmRleGVzVGV4dHVyZSxcclxuICAgICAgICAgICAgJ3NpemUnOiBzY2VuZUluZGV4ZXNUZXhTaXplXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLnNjZW5lQ291bnQudmFsdWUgPSB0aGlzLnNjZW5lcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbkJTTnVtID0gdGhpcy5mbGFtZU1vZGVsLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5ic0NvdW50LnZhbHVlID0gdGhpcy5leHByZXNzaW9uQlNOdW07XHJcblxyXG4gICAgICAgIHRoaXMuZmxhbWVNb2RlbC5za2VsZXRvbi5ib25lcy5mb3JFYWNoKChib25lLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYm9uZS5uYW1lID09ICdoZWFkJylcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuaGVhZEJvbmVJbmRleC52YWx1ZSA9IGluZGV4O1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYnVpbGRNb2RlbFRleHR1cmUodGhpcy5mbGFtZU1vZGVsKTtcclxuICAgICAgICB0aGlzLmJ1aWxkQm9uZU1hdHJpeFRleHR1cmUoKTtcclxuICAgICAgICBpZih0aGlzLnVzZUZsYW1lTW9kZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5idWlsZEJvbmVXZWlnaHRUZXh0dXJlKHRoaXMuZmxhbWVNb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkQm9uZU1hdHJpeFRleHR1cmUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJzV2VpZ2h0KVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAvL3RoaXMuYm9uZXNOdW0gKyB0aGlzLmV4cHJlc3Npb25CU051bSAvIDQgPSAzMCwgc28gMzJcclxuICAgICAgICBjb25zdCBib25lVGV4dHVyZVNpemUgPSBuZXcgVmVjdG9yMig0LCAzMik7XHJcbiAgICAgICAgbGV0IGJvbmVNYXRyaXhUZXh0dXJlRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5ib25lc01hdHJpeCk7XHJcbiAgICAgICAgbGV0IGJvbmVNYXRyaXhUZXh0dXJlRGF0YUludCA9IG5ldyBVaW50MzJBcnJheShib25lVGV4dHVyZVNpemUueCAqIGJvbmVUZXh0dXJlU2l6ZS55ICogNCk7XHJcbiAgICAgICAgdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnkgPSB0aGlzLmZsYW1lTW9kZWwubW9ycGhUYXJnZXREaWN0aW9uYXJ5O1xyXG5cclxuICAgICAgICBpZih0aGlzLnVzZUZsYW1lTW9kZWwpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmJvbmVzTnVtICogMTY7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgYm9uZU1hdHJpeFRleHR1cmVEYXRhSW50W2NdID0gdWludEVuY29kZWRGbG9hdChib25lTWF0cml4VGV4dHVyZURhdGFbY10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZsYW1lTW9kZWwgJiYgdGhpcy5mbGFtZU1vZGVsLnNrZWxldG9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmJvbmVUZXh0dXJlMC52YWx1ZSA9IHRoaXMuZmxhbWVNb2RlbC5za2VsZXRvbi5ib25lVGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuYmluZE1hdHJpeC52YWx1ZSA9IHRoaXMuZmxhbWVNb2RlbC5iaW5kTWF0cml4O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5iaW5kTWF0cml4SW52ZXJzZS52YWx1ZSA9IHRoaXMuZmxhbWVNb2RlbC5iaW5kTWF0cml4SW52ZXJzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmJzV2VpZ2h0KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duKHRoaXMuYnNXZWlnaHQsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5ic1dlaWdodFtrZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlba2V5XTtcclxuICAgICAgICAgICAgICAgIGJvbmVNYXRyaXhUZXh0dXJlRGF0YUludFtpZHggKyB0aGlzLmJvbmVzTnVtICogMTZdID0gdWludEVuY29kZWRGbG9hdCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5ic1dlaWdodC5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgIC8vICAgICB0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVxyXG4gICAgICAgIC8vICAgICBib25lTWF0cml4VGV4dHVyZURhdGFJbnRbYyArIHRoaXMuYm9uZXNOdW0gKiAxNl0gPSB1aW50RW5jb2RlZEZsb2F0KHRoaXMuYnNXZWlnaHRbY10pO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgY29uc3QgYm9uZU1hdHJpeFRleCA9IG5ldyBEYXRhVGV4dHVyZShib25lTWF0cml4VGV4dHVyZURhdGFJbnQsIGJvbmVUZXh0dXJlU2l6ZS54LCBib25lVGV4dHVyZVNpemUueSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSR0JBSW50ZWdlckZvcm1hdCwgVW5zaWduZWRJbnRUeXBlKTtcclxuICAgICAgICBib25lTWF0cml4VGV4LmludGVybmFsRm9ybWF0ID0gJ1JHQkEzMlVJJztcclxuICAgICAgICBib25lTWF0cml4VGV4Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmJvbmVUZXh0dXJlLnZhbHVlID0gYm9uZU1hdHJpeFRleDtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmJvbmVUZXh0dXJlU2l6ZS52YWx1ZS5jb3B5KGJvbmVUZXh0dXJlU2l6ZSk7XHJcblxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXNOZWVkVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlc1snYm9uZU1hdHJpeCddID0ge1xyXG4gICAgICAgICAgICAnZGF0YSc6IGJvbmVNYXRyaXhUZXh0dXJlRGF0YUludCxcclxuICAgICAgICAgICAgJ3RleHR1cmUnOiBib25lTWF0cml4VGV4LFxyXG4gICAgICAgICAgICAnc2l6ZSc6IGJvbmVUZXh0dXJlU2l6ZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuYmFzZURhdGFbJ2JvbmVNYXRyaXgnXSA9IGJvbmVNYXRyaXhUZXh0dXJlRGF0YUludDtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVCb25lTWF0cml4VGV4dHVyZSh1cGRhdGVGbGFtZUJvbmVNYXRyaXggPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5ic1dlaWdodCB8fCAhdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnkpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG5cclxuICAgICAgICBpZih1cGRhdGVGbGFtZUJvbmVNYXRyaXggPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBsZXQgYm9uZU1hdHJpeFRleHR1cmVEYXRhID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmJvbmVzTWF0cml4KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmJvbmVzTnVtICogMTY7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YVsnYm9uZU1hdHJpeCddW2NdID0gdWludEVuY29kZWRGbG9hdChib25lTWF0cml4VGV4dHVyZURhdGFbY10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmJzV2VpZ2h0KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duKHRoaXMuYnNXZWlnaHQsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5ic1dlaWdodFtrZXldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlba2V5XTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuYmFzZURhdGFbJ2JvbmVNYXRyaXgnXVtpZHggKyB0aGlzLmJvbmVzTnVtICogMTZdID0gdWludEVuY29kZWRGbG9hdCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5ic1dlaWdodC5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmJhc2VEYXRhWydib25lTWF0cml4J11bYyArIHRoaXMuYm9uZXNOdW0gKiAxNl0gPSB1aW50RW5jb2RlZEZsb2F0KHRoaXMuYnNXZWlnaHRbY10pO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB0aGlzLnNwbGF0RGF0YVRleHR1cmVzWydib25lTWF0cml4J11bJ3RleHR1cmUnXS5kYXRhID0gdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YVsnYm9uZU1hdHJpeCddO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3BsYXREYXRhVGV4dHVyZXNbJ2JvbmVNYXRyaXgnXVsndGV4dHVyZSddLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmJvbmVUZXh0dXJlLnZhbHVlID0gdGhpcy5zcGxhdERhdGFUZXh0dXJlc1snYm9uZU1hdHJpeCddWyd0ZXh0dXJlJ107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZsYW1lTW9kZWwuc2tlbGV0b24pIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5ib25lVGV4dHVyZTAudmFsdWUgPSB0aGlzLmZsYW1lTW9kZWwuc2tlbGV0b24uYm9uZVRleHR1cmU7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuYmluZE1hdHJpeC52YWx1ZSA9IHRoaXMuZmxhbWVNb2RlbC5iaW5kTWF0cml4O1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmJpbmRNYXRyaXhJbnZlcnNlLnZhbHVlID0gdGhpcy5mbGFtZU1vZGVsLmJpbmRNYXRyaXhJbnZlcnNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zTmVlZFVwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRCb25lV2VpZ2h0VGV4dHVyZShmbGFtZU1vZGVsKSB7XHJcbiAgICAgICAgbGV0IHNoYXBlZE1lc2ggPSBmbGFtZU1vZGVsLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXk7XHJcblxyXG4gICAgICAgIGxldCBwb2ludE51bSA9IHNoYXBlZE1lc2gubGVuZ3RoIC8gMztcclxuICAgICAgICBjb25zdCBib25lV2VpZ2h0VGV4dHVyZVNpemUgPSBuZXcgVmVjdG9yMig1MTIsIDUxMik7XHJcbiAgICAgICAgbGV0IGJvbmVXZWlnaHRUZXh0dXJlRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoYm9uZVdlaWdodFRleHR1cmVTaXplLnggKiBib25lV2VpZ2h0VGV4dHVyZVNpemUueSAqIDQpO1xyXG4gICAgICAgIGxldCBib25lV2VpZ2h0VGV4dHVyZURhdGFJbnQgPSBuZXcgVWludDMyQXJyYXkoYm9uZVdlaWdodFRleHR1cmVTaXplLnggKiBib25lV2VpZ2h0VGV4dHVyZVNpemUueSAqIDQpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnROdW07IGkrKykge1xyXG4gICAgICAgICAgICBib25lV2VpZ2h0VGV4dHVyZURhdGFbaSAqIDggKyAwXSA9IHRoaXMuYm9uZXNXZWlnaHRbaV1bMF07XHJcbiAgICAgICAgICAgIGJvbmVXZWlnaHRUZXh0dXJlRGF0YVtpICogOCArIDFdID0gdGhpcy5ib25lc1dlaWdodFtpXVsxXTtcclxuICAgICAgICAgICAgYm9uZVdlaWdodFRleHR1cmVEYXRhW2kgKiA4ICsgMl0gPSB0aGlzLmJvbmVzV2VpZ2h0W2ldWzJdO1xyXG4gICAgICAgICAgICBib25lV2VpZ2h0VGV4dHVyZURhdGFbaSAqIDggKyAzXSA9IHRoaXMuYm9uZXNXZWlnaHRbaV1bM107XHJcbiAgICAgICAgICAgIGJvbmVXZWlnaHRUZXh0dXJlRGF0YVtpICogOCArIDRdID0gdGhpcy5ib25lc1dlaWdodFtpXVs0XTtcclxuXHJcbiAgICAgICAgICAgIGJvbmVXZWlnaHRUZXh0dXJlRGF0YUludFtpICogOCArIDBdID0gdWludEVuY29kZWRGbG9hdCh0aGlzLmJvbmVzV2VpZ2h0W2ldWzBdKTtcclxuICAgICAgICAgICAgYm9uZVdlaWdodFRleHR1cmVEYXRhSW50W2kgKiA4ICsgMV0gPSB1aW50RW5jb2RlZEZsb2F0KHRoaXMuYm9uZXNXZWlnaHRbaV1bMV0pO1xyXG4gICAgICAgICAgICBib25lV2VpZ2h0VGV4dHVyZURhdGFJbnRbaSAqIDggKyAyXSA9IHVpbnRFbmNvZGVkRmxvYXQodGhpcy5ib25lc1dlaWdodFtpXVsyXSk7XHJcbiAgICAgICAgICAgIGJvbmVXZWlnaHRUZXh0dXJlRGF0YUludFtpICogOCArIDNdID0gdWludEVuY29kZWRGbG9hdCh0aGlzLmJvbmVzV2VpZ2h0W2ldWzNdKTtcclxuICAgICAgICAgICAgYm9uZVdlaWdodFRleHR1cmVEYXRhSW50W2kgKiA4ICsgNF0gPSB1aW50RW5jb2RlZEZsb2F0KHRoaXMuYm9uZXNXZWlnaHRbaV1bNF0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYm9uZVdlaWdodFRleCA9IG5ldyBEYXRhVGV4dHVyZShib25lV2VpZ2h0VGV4dHVyZURhdGFJbnQsIGJvbmVXZWlnaHRUZXh0dXJlU2l6ZS54LCBib25lV2VpZ2h0VGV4dHVyZVNpemUueSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSR0JBSW50ZWdlckZvcm1hdCwgVW5zaWduZWRJbnRUeXBlKTtcclxuICAgICAgICBcclxuICAgICAgICBib25lV2VpZ2h0VGV4LmludGVybmFsRm9ybWF0ID0gJ1JHQkEzMlVJJztcclxuICAgICAgICBib25lV2VpZ2h0VGV4Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmJvbmVXZWlnaHRUZXh0dXJlLnZhbHVlID0gYm9uZVdlaWdodFRleDtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmJvbmVXZWlnaHRUZXh0dXJlU2l6ZS52YWx1ZS5jb3B5KGJvbmVXZWlnaHRUZXh0dXJlU2l6ZSk7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnNwbGF0RGF0YVRleHR1cmVzWydib25lV2VpZ2h0J10gPSB7XHJcbiAgICAgICAgICAgICdkYXRhJzogYm9uZVdlaWdodFRleHR1cmVEYXRhSW50LFxyXG4gICAgICAgICAgICAndGV4dHVyZSc6IGJvbmVXZWlnaHRUZXgsXHJcbiAgICAgICAgICAgICdzaXplJzogYm9uZVdlaWdodFRleHR1cmVTaXplLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YVsnYm9uZVdlaWdodCddID0gYm9uZVdlaWdodFRleHR1cmVEYXRhSW50O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBidWlsZE1vZGVsVGV4dHVyZShmbGFtZU1vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgZmxhbWVNb2RlbFRleFNpemUgPSBuZXcgVmVjdG9yMig0MDk2LCAyMDQ4KTtcclxuXHJcbiAgICAgICAgdmFyIHNoYXBlZE1lc2ggPSBmbGFtZU1vZGVsLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXk7XHJcbiAgICAgICAgdmFyIHNoYXBlZE1lc2hBcnJheSA9IFtdOy8vQXJyYXkuZnJvbShzaGFwZWRNZXNoKTtcclxuICAgICAgICBsZXQgcG9pbnROdW0gPSBzaGFwZWRNZXNoLmxlbmd0aCAvIDM7XHJcblxyXG4gICAgICAgIGxldCBic0xlbmd0aCA9IGZsYW1lTW9kZWwuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDtcclxuXHJcbiAgICAgICAgY29uc3QgbW9ycGhUYXJnZXROYW1lcyA9IE9iamVjdC5rZXlzKGZsYW1lTW9kZWwubW9ycGhUYXJnZXREaWN0aW9uYXJ5KTtcclxuICAgICAgICAvLyBpZiAodGhpcy51c2VGbGFtZU1vZGVsID09IGZhbHNlKSB7XHJcbiAgICAgICAgLy8gICAgIG1vcnBoVGFyZ2V0TmFtZXMuc29ydCgpOyBcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgbW9ycGhUYXJnZXROYW1lcy5mb3JFYWNoKChuYW1lLCBuZXdJbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEluZGV4ID0gZmxhbWVNb2RlbC5tb3JwaFRhcmdldERpY3Rpb25hcnlbbmFtZV07XHJcbiAgICAgICAgICAgIHZhciBic01lc2ggPSBmbGFtZU1vZGVsLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbltvcmlnaW5hbEluZGV4XTtcclxuICAgICAgICAgICAgc2hhcGVkTWVzaEFycmF5ID0gc2hhcGVkTWVzaEFycmF5LmNvbmNhdChBcnJheS5mcm9tKGJzTWVzaC5hcnJheSkpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNoYXBlZE1lc2hBcnJheSA9IHNoYXBlZE1lc2hBcnJheS5jb25jYXQoQXJyYXkuZnJvbShzaGFwZWRNZXNoKSk7XHJcblxyXG4gICAgICAgIGxldCBmbGFtZU1vZGVsRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoZmxhbWVNb2RlbFRleFNpemUueCAqIGZsYW1lTW9kZWxUZXhTaXplLnkgKiA0KTtcclxuICAgICAgICBsZXQgZmxhbWVNb2RlbERhdGFJbnQgPSBuZXcgVWludDMyQXJyYXkoZmxhbWVNb2RlbFRleFNpemUueCAqIGZsYW1lTW9kZWxUZXhTaXplLnkgKiA0KTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHBvaW50TnVtICogKGJzTGVuZ3RoICsgMSk7IGMrKykge1xyXG4gICAgICAgICAgICBmbGFtZU1vZGVsRGF0YVtjICogNCArIDBdID0gc2hhcGVkTWVzaEFycmF5W2MgKiAzICsgMF07XHJcbiAgICAgICAgICAgIGZsYW1lTW9kZWxEYXRhW2MgKiA0ICsgMV0gPSBzaGFwZWRNZXNoQXJyYXlbYyAqIDMgKyAxXTtcclxuICAgICAgICAgICAgZmxhbWVNb2RlbERhdGFbYyAqIDQgKyAyXSA9IHNoYXBlZE1lc2hBcnJheVtjICogMyArIDJdO1xyXG5cclxuICAgICAgICAgICAgZmxhbWVNb2RlbERhdGFJbnRbYyAqIDQgKyAwXSA9IHVpbnRFbmNvZGVkRmxvYXQoZmxhbWVNb2RlbERhdGFbYyAqIDQgKyAwXSk7XHJcbiAgICAgICAgICAgIGZsYW1lTW9kZWxEYXRhSW50W2MgKiA0ICsgMV0gPSB1aW50RW5jb2RlZEZsb2F0KGZsYW1lTW9kZWxEYXRhW2MgKiA0ICsgMV0pO1xyXG4gICAgICAgICAgICBmbGFtZU1vZGVsRGF0YUludFtjICogNCArIDJdID0gdWludEVuY29kZWRGbG9hdChmbGFtZU1vZGVsRGF0YVtjICogNCArIDJdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZsYW1lTW9kZWxUZXggPSBuZXcgRGF0YVRleHR1cmUoZmxhbWVNb2RlbERhdGFJbnQsIGZsYW1lTW9kZWxUZXhTaXplLngsIGZsYW1lTW9kZWxUZXhTaXplLnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkdCQUludGVnZXJGb3JtYXQsIFVuc2lnbmVkSW50VHlwZSk7XHJcbiAgICAgICAgZmxhbWVNb2RlbFRleC5pbnRlcm5hbEZvcm1hdCA9ICdSR0JBMzJVSSc7XHJcbiAgICAgICAgZmxhbWVNb2RlbFRleC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5mbGFtZU1vZGVsVGV4dHVyZS52YWx1ZSA9IGZsYW1lTW9kZWxUZXg7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5mbGFtZU1vZGVsVGV4dHVyZVNpemUudmFsdWUuY29weShmbGFtZU1vZGVsVGV4U2l6ZSk7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuZ2F1c3NpYW5TcGxhdENvdW50LnZhbHVlID0gdGhpcy5nYXVzc2lhblNwbGF0Q291bnQ7XHJcblxyXG4gICAgICAgIHRoaXMuc3BsYXREYXRhVGV4dHVyZXNbJ2ZsYW1lTW9kZWwnXSA9IHtcclxuICAgICAgICAgICAgJ2RhdGEnOiBmbGFtZU1vZGVsRGF0YUludCxcclxuICAgICAgICAgICAgJ3RleHR1cmUnOiBmbGFtZU1vZGVsVGV4LFxyXG4gICAgICAgICAgICAnc2l6ZSc6IGZsYW1lTW9kZWxUZXhTaXplLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YVsnZmxhbWVNb2RlbFBvcyddID0gZmxhbWVNb2RlbERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVGV0dXJlQWZ0ZXJCU0FuZFNrZWxldG9uKGZyb21TcGxhdCwgdG9TcGxhdCwgdXNlRmxhbWVNb2RlbCA9IHRydWUpIHtcclxuICAgICAgICBjb25zdCBzY2VuZVRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0U2NlbmVUcmFuc2Zvcm0oMCwgc2NlbmVUcmFuc2Zvcm0pO1xyXG4gICAgICAgIHRoaXMuZ2V0U2NlbmUoMCkuc3BsYXRCdWZmZXIuZmlsbFNwbGF0Q2VudGVyQXJyYXkodGhpcy5tb3JwaGVkTWVzaCwgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YS5jZW50ZXJzLCBzY2VuZVRyYW5zZm9ybSwgZnJvbVNwbGF0LCB0b1NwbGF0LCAwKTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIGNlbnRlciAmIGNvbG9yIGRhdGEgdGV4dHVyZVxyXG4gICAgICAgIGNvbnN0IGNlbnRlckNvbG9yc1RleHR1cmVEZXNjcmlwdG9yID0gdGhpcy5zcGxhdERhdGFUZXh0dXJlc1snY2VudGVyQ29sb3JzJ107XHJcbiAgICAgICAgY29uc3QgcGFkZGVkQ2VudGVyQ29sb3JzID0gY2VudGVyQ29sb3JzVGV4dHVyZURlc2NyaXB0b3IuZGF0YTtcclxuICAgICAgICBjb25zdCBjZW50ZXJDb2xvcnNUZXh0dXJlID0gY2VudGVyQ29sb3JzVGV4dHVyZURlc2NyaXB0b3IudGV4dHVyZTtcclxuICAgICAgICBTcGxhdE1lc2gudXBkYXRlQ2VudGVyQ29sb3JzUGFkZGVkRGF0YShmcm9tU3BsYXQsIHRvU3BsYXQsIHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuYmFzZURhdGEuY2VudGVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YS5jb2xvcnMsIHBhZGRlZENlbnRlckNvbG9ycyk7XHJcbiAgICAgICAgY29uc3QgY2VudGVyQ29sb3JzVGV4dHVyZVByb3BzID0gdGhpcy5yZW5kZXJlciA/IHRoaXMucmVuZGVyZXIucHJvcGVydGllcy5nZXQoY2VudGVyQ29sb3JzVGV4dHVyZSkgOiBudWxsO1xyXG4gICAgICAgIGlmICghY2VudGVyQ29sb3JzVGV4dHVyZVByb3BzIHx8ICFjZW50ZXJDb2xvcnNUZXh0dXJlUHJvcHMuX193ZWJnbFRleHR1cmUpIHtcclxuICAgICAgICAgICAgY2VudGVyQ29sb3JzVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhVGV4dHVyZShwYWRkZWRDZW50ZXJDb2xvcnMsIGNlbnRlckNvbG9yc1RleHR1cmVEZXNjcmlwdG9yLnRleHR1cmUsIGNlbnRlckNvbG9yc1RleHR1cmVEZXNjcmlwdG9yLnNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlckNvbG9yc1RleHR1cmVQcm9wcywgQ0VOVEVSX0NPTE9SU19FTEVNRU5UU19QRVJfVEVYRUwsIENFTlRFUl9DT0xPUlNfRUxFTUVOVFNfUEVSX1NQTEFULCA0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tU3BsYXQsIHRvU3BsYXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVCb25lTWF0cml4VGV4dHVyZSh1c2VGbGFtZU1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVCYXNlRGF0YUZyb21TcGxhdEJ1ZmZlcnMoZnJvbVNwbGF0LCB0b1NwbGF0KSB7XHJcbiAgICAgICAgY29uc3QgY292YXJhbmNlc1RleHR1cmVEZXNjID0gdGhpcy5zcGxhdERhdGFUZXh0dXJlc1snY292YXJpYW5jZXMnXTtcclxuICAgICAgICBjb25zdCBjb3ZhcmlhbmNlQ29tcHJlc3Npb25MZXZlbCA9IGNvdmFyYW5jZXNUZXh0dXJlRGVzYyA/IGNvdmFyYW5jZXNUZXh0dXJlRGVzYy5jb21wcmVzc2lvbkxldmVsIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IHNjYWxlUm90YXRpb25zVGV4dHVyZURlc2MgPSB0aGlzLnNwbGF0RGF0YVRleHR1cmVzWydzY2FsZVJvdGF0aW9ucyddO1xyXG4gICAgICAgIGNvbnN0IHNjYWxlUm90YXRpb25Db21wcmVzc2lvbkxldmVsID0gc2NhbGVSb3RhdGlvbnNUZXh0dXJlRGVzYyA/IHNjYWxlUm90YXRpb25zVGV4dHVyZURlc2MuY29tcHJlc3Npb25MZXZlbCA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBzaElUZXh0dXJlRGVzYyA9IHRoaXMuc3BsYXREYXRhVGV4dHVyZXNbJ3NwaGVyaWNhbEhhcm1vbmljcyddO1xyXG4gICAgICAgIGNvbnN0IHNoQ29tcHJlc3Npb25MZXZlbCA9IHNoSVRleHR1cmVEZXNjID8gc2hJVGV4dHVyZURlc2MuY29tcHJlc3Npb25MZXZlbCA6IDA7XHJcblxyXG4gICAgICAgIHRoaXMuZmlsbFNwbGF0RGF0YUFycmF5cyh0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmJhc2VEYXRhLmNvdmFyaWFuY2VzLCB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmJhc2VEYXRhLnNjYWxlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YS5yb3RhdGlvbnMsIHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuYmFzZURhdGEuY2VudGVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YS5jb2xvcnMsIHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuYmFzZURhdGEuc3BoZXJpY2FsSGFybW9uaWNzLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YS5mbGFtZU1vZGVsUG9zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdmFyaWFuY2VDb21wcmVzc2lvbkxldmVsLCBzY2FsZVJvdGF0aW9uQ29tcHJlc3Npb25MZXZlbCwgc2hDb21wcmVzc2lvbkxldmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tU3BsYXQsIHRvU3BsYXQsIGZyb21TcGxhdCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlRGF0YVRleHR1cmVzRnJvbUJhc2VEYXRhKGZyb21TcGxhdCwgdG9TcGxhdCkge1xyXG4gICAgICAgIGNvbnN0IGNvdmFyYW5jZXNUZXh0dXJlRGVzYyA9IHRoaXMuc3BsYXREYXRhVGV4dHVyZXNbJ2NvdmFyaWFuY2VzJ107XHJcbiAgICAgICAgY29uc3QgY292YXJpYW5jZUNvbXByZXNzaW9uTGV2ZWwgPSBjb3ZhcmFuY2VzVGV4dHVyZURlc2MgPyBjb3ZhcmFuY2VzVGV4dHVyZURlc2MuY29tcHJlc3Npb25MZXZlbCA6IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBzY2FsZVJvdGF0aW9uc1RleHR1cmVEZXNjID0gdGhpcy5zcGxhdERhdGFUZXh0dXJlc1snc2NhbGVSb3RhdGlvbnMnXTtcclxuICAgICAgICBjb25zdCBzY2FsZVJvdGF0aW9uQ29tcHJlc3Npb25MZXZlbCA9IHNjYWxlUm90YXRpb25zVGV4dHVyZURlc2MgPyBzY2FsZVJvdGF0aW9uc1RleHR1cmVEZXNjLmNvbXByZXNzaW9uTGV2ZWwgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgY29uc3Qgc2hUZXh0dXJlRGVzYyA9IHRoaXMuc3BsYXREYXRhVGV4dHVyZXNbJ3NwaGVyaWNhbEhhcm1vbmljcyddO1xyXG4gICAgICAgIGNvbnN0IHNoQ29tcHJlc3Npb25MZXZlbCA9IHNoVGV4dHVyZURlc2MgPyBzaFRleHR1cmVEZXNjLmNvbXByZXNzaW9uTGV2ZWwgOiAwO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgZmxhbWUgZGF0YSB0ZXh0dXJlXHJcbiAgICAgICAgY29uc3QgZmxhbWVNb2RlbFRleHR1cmVEZXNjcmlwdG9yID0gdGhpcy5zcGxhdERhdGFUZXh0dXJlc1snZmxhbWVNb2RlbCddO1xyXG4gICAgICAgIGNvbnN0IGZsYW1lTW9kZWxQb3MgPSBmbGFtZU1vZGVsVGV4dHVyZURlc2NyaXB0b3IuZGF0YTtcclxuICAgICAgICBjb25zdCBmbGFtZU1vZGVsUG9zVGV4dHVyZSA9IGZsYW1lTW9kZWxUZXh0dXJlRGVzY3JpcHRvci50ZXh0dXJlO1xyXG5cclxuICAgICAgICBjb25zdCBmbGFtZU1vZGVsUG9zVGV4dHVyZVByb3BzID0gdGhpcy5yZW5kZXJlciA/IHRoaXMucmVuZGVyZXIucHJvcGVydGllcy5nZXQoZmxhbWVNb2RlbFBvc1RleHR1cmUpIDogbnVsbDtcclxuICAgICAgICBpZiAoIWZsYW1lTW9kZWxQb3NUZXh0dXJlUHJvcHMgfHwgIWZsYW1lTW9kZWxQb3NUZXh0dXJlUHJvcHMuX193ZWJnbFRleHR1cmUpIHtcclxuICAgICAgICAgICAgZmxhbWVNb2RlbFBvc1RleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YVRleHR1cmUoZmxhbWVNb2RlbFBvcywgZmxhbWVNb2RlbFRleHR1cmVEZXNjcmlwdG9yLnRleHR1cmUsIGZsYW1lTW9kZWxUZXh0dXJlRGVzY3JpcHRvci5zaXplLFxyXG4gICAgICAgICAgICAgICAgZmxhbWVNb2RlbFBvc1RleHR1cmVQcm9wcywgQ0VOVEVSX0NPTE9SU19FTEVNRU5UU19QRVJfVEVYRUwsIENFTlRFUl9DT0xPUlNfRUxFTUVOVFNfUEVSX1NQTEFULCAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21TcGxhdCwgdG9TcGxhdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVcGRhdGUgY2VudGVyICYgY29sb3IgZGF0YSB0ZXh0dXJlXHJcbiAgICAgICAgY29uc3QgY2VudGVyQ29sb3JzVGV4dHVyZURlc2NyaXB0b3IgPSB0aGlzLnNwbGF0RGF0YVRleHR1cmVzWydjZW50ZXJDb2xvcnMnXTtcclxuICAgICAgICBjb25zdCBwYWRkZWRDZW50ZXJDb2xvcnMgPSBjZW50ZXJDb2xvcnNUZXh0dXJlRGVzY3JpcHRvci5kYXRhO1xyXG4gICAgICAgIGNvbnN0IGNlbnRlckNvbG9yc1RleHR1cmUgPSBjZW50ZXJDb2xvcnNUZXh0dXJlRGVzY3JpcHRvci50ZXh0dXJlO1xyXG4gICAgICAgIFNwbGF0TWVzaC51cGRhdGVDZW50ZXJDb2xvcnNQYWRkZWREYXRhKGZyb21TcGxhdCwgdG9TcGxhdCwgdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YS5jZW50ZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BsYXREYXRhVGV4dHVyZXMuYmFzZURhdGEuY29sb3JzLCBwYWRkZWRDZW50ZXJDb2xvcnMpO1xyXG4gICAgICAgIGNvbnN0IGNlbnRlckNvbG9yc1RleHR1cmVQcm9wcyA9IHRoaXMucmVuZGVyZXIgPyB0aGlzLnJlbmRlcmVyLnByb3BlcnRpZXMuZ2V0KGNlbnRlckNvbG9yc1RleHR1cmUpIDogbnVsbDtcclxuICAgICAgICBpZiAoIWNlbnRlckNvbG9yc1RleHR1cmVQcm9wcyB8fCAhY2VudGVyQ29sb3JzVGV4dHVyZVByb3BzLl9fd2ViZ2xUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGNlbnRlckNvbG9yc1RleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YVRleHR1cmUocGFkZGVkQ2VudGVyQ29sb3JzLCBjZW50ZXJDb2xvcnNUZXh0dXJlRGVzY3JpcHRvci50ZXh0dXJlLCBjZW50ZXJDb2xvcnNUZXh0dXJlRGVzY3JpcHRvci5zaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlckNvbG9yc1RleHR1cmVQcm9wcywgQ0VOVEVSX0NPTE9SU19FTEVNRU5UU19QRVJfVEVYRUwsIENFTlRFUl9DT0xPUlNfRUxFTUVOVFNfUEVSX1NQTEFULCA0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21TcGxhdCwgdG9TcGxhdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB1cGRhdGUgY292YXJpYW5jZSBkYXRhIHRleHR1cmVcclxuICAgICAgICBpZiAoY292YXJhbmNlc1RleHR1cmVEZXNjKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdmFyaWFuY2VzVGV4dHVyZSA9IGNvdmFyYW5jZXNUZXh0dXJlRGVzYy50ZXh0dXJlO1xyXG4gICAgICAgICAgICBjb25zdCBjb3ZhcmFuY2VzU3RhcnRFbGVtZW50ID0gZnJvbVNwbGF0ICogQ09WQVJJQU5DRVNfRUxFTUVOVFNfUEVSX1NQTEFUO1xyXG4gICAgICAgICAgICBjb25zdCBjb3ZhcmlhbmNlc0VuZEVsZW1lbnQgPSB0b1NwbGF0ICogQ09WQVJJQU5DRVNfRUxFTUVOVFNfUEVSX1NQTEFUO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvdmFyaWFuY2VDb21wcmVzc2lvbkxldmVsID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gY292YXJhbmNlc1N0YXJ0RWxlbWVudDsgaSA8PSBjb3ZhcmlhbmNlc0VuZEVsZW1lbnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdmFyaWFuY2UgPSB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmJhc2VEYXRhLmNvdmFyaWFuY2VzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvdmFyYW5jZXNUZXh0dXJlRGVzYy5kYXRhW2ldID0gY292YXJpYW5jZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIFNwbGF0TWVzaC51cGRhdGVQYWRkZWRDb21wcmVzc2VkQ292YXJpYW5jZXNUZXh0dXJlRGF0YSh0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmJhc2VEYXRhLmNvdmFyaWFuY2VzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdmFyYW5jZXNUZXh0dXJlRGVzYy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21TcGxhdCAqIGNvdmFyYW5jZXNUZXh0dXJlRGVzYy5lbGVtZW50c1BlclRleGVsQWxsb2NhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdmFyYW5jZXNTdGFydEVsZW1lbnQsIGNvdmFyaWFuY2VzRW5kRWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvdmFyaWFuY2VzVGV4dHVyZVByb3BzID0gdGhpcy5yZW5kZXJlciA/IHRoaXMucmVuZGVyZXIucHJvcGVydGllcy5nZXQoY292YXJpYW5jZXNUZXh0dXJlKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGlmICghY292YXJpYW5jZXNUZXh0dXJlUHJvcHMgfHwgIWNvdmFyaWFuY2VzVGV4dHVyZVByb3BzLl9fd2ViZ2xUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICBjb3ZhcmlhbmNlc1RleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvdmFyaWFuY2VDb21wcmVzc2lvbkxldmVsID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhVGV4dHVyZShjb3ZhcmFuY2VzVGV4dHVyZURlc2MuZGF0YSwgY292YXJhbmNlc1RleHR1cmVEZXNjLnRleHR1cmUsIGNvdmFyYW5jZXNUZXh0dXJlRGVzYy5zaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY292YXJpYW5jZXNUZXh0dXJlUHJvcHMsIGNvdmFyYW5jZXNUZXh0dXJlRGVzYy5lbGVtZW50c1BlclRleGVsU3RvcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09WQVJJQU5DRVNfRUxFTUVOVFNfUEVSX1NQTEFULCA0LCBmcm9tU3BsYXQsIHRvU3BsYXQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGFUZXh0dXJlKGNvdmFyYW5jZXNUZXh0dXJlRGVzYy5kYXRhLCBjb3ZhcmFuY2VzVGV4dHVyZURlc2MudGV4dHVyZSwgY292YXJhbmNlc1RleHR1cmVEZXNjLnNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3ZhcmlhbmNlc1RleHR1cmVQcm9wcywgY292YXJhbmNlc1RleHR1cmVEZXNjLmVsZW1lbnRzUGVyVGV4ZWxBbGxvY2F0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3ZhcmFuY2VzVGV4dHVyZURlc2MuZWxlbWVudHNQZXJUZXhlbEFsbG9jYXRlZCwgMiwgZnJvbVNwbGF0LCB0b1NwbGF0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIHNjYWxlIGFuZCByb3RhdGlvbiBkYXRhIHRleHR1cmVcclxuICAgICAgICBpZiAoc2NhbGVSb3RhdGlvbnNUZXh0dXJlRGVzYykge1xyXG4gICAgICAgICAgICBjb25zdCBwYWRkZWRTY2FsZVJvdGF0aW9ucyA9IHNjYWxlUm90YXRpb25zVGV4dHVyZURlc2MuZGF0YTtcclxuICAgICAgICAgICAgY29uc3Qgc2NhbGVSb3RhdGlvbnNUZXh0dXJlID0gc2NhbGVSb3RhdGlvbnNUZXh0dXJlRGVzYy50ZXh0dXJlO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c1BlclNwbGF0ID0gNjtcclxuICAgICAgICAgICAgY29uc3QgYnl0ZXNQZXJFbGVtZW50ID0gc2NhbGVSb3RhdGlvbkNvbXByZXNzaW9uTGV2ZWwgPT09IDAgPyA0IDogMjtcclxuXHJcbiAgICAgICAgICAgIFNwbGF0TWVzaC51cGRhdGVTY2FsZVJvdGF0aW9uc1BhZGRlZERhdGEoZnJvbVNwbGF0LCB0b1NwbGF0LCB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmJhc2VEYXRhLnNjYWxlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwbGF0RGF0YVRleHR1cmVzLmJhc2VEYXRhLnJvdGF0aW9ucywgcGFkZGVkU2NhbGVSb3RhdGlvbnMpO1xyXG4gICAgICAgICAgICBjb25zdCBzY2FsZVJvdGF0aW9uc1RleHR1cmVQcm9wcyA9IHRoaXMucmVuZGVyZXIgPyB0aGlzLnJlbmRlcmVyLnByb3BlcnRpZXMuZ2V0KHNjYWxlUm90YXRpb25zVGV4dHVyZSkgOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAoIXNjYWxlUm90YXRpb25zVGV4dHVyZVByb3BzIHx8ICFzY2FsZVJvdGF0aW9uc1RleHR1cmVQcm9wcy5fX3dlYmdsVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgc2NhbGVSb3RhdGlvbnNUZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YVRleHR1cmUocGFkZGVkU2NhbGVSb3RhdGlvbnMsIHNjYWxlUm90YXRpb25zVGV4dHVyZURlc2MudGV4dHVyZSwgc2NhbGVSb3RhdGlvbnNUZXh0dXJlRGVzYy5zaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVJvdGF0aW9uc1RleHR1cmVQcm9wcywgU0NBTEVTX1JPVEFUSU9OU19FTEVNRU5UU19QRVJfVEVYRUwsIGVsZW1lbnRzUGVyU3BsYXQsIGJ5dGVzUGVyRWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbVNwbGF0LCB0b1NwbGF0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIHNwaGVyaWNhbCBoYXJtb25pY3MgZGF0YSB0ZXh0dXJlXHJcbiAgICAgICAgY29uc3Qgc2hEYXRhID0gdGhpcy5zcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YS5zcGhlcmljYWxIYXJtb25pY3M7XHJcbiAgICAgICAgaWYgKHNoRGF0YSkge1xyXG4gICAgICAgICAgICBsZXQgc2hCeXRlc1BlckVsZW1lbnQgPSA0O1xyXG4gICAgICAgICAgICBpZiAoc2hDb21wcmVzc2lvbkxldmVsID09PSAxKSBzaEJ5dGVzUGVyRWxlbWVudCA9IDI7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHNoQ29tcHJlc3Npb25MZXZlbCA9PT0gMikgc2hCeXRlc1BlckVsZW1lbnQgPSAxO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlVGV4dHVyZSA9IChzaFRleHR1cmUsIHNoVGV4dHVyZVNpemUsIGVsZW1lbnRzUGVyVGV4ZWwsIHBhZGRlZFNIQXJyYXksIHBhZGRlZFNIQ29tcG9uZW50Q291bnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNoVGV4dHVyZVByb3BzID0gdGhpcy5yZW5kZXJlciA/IHRoaXMucmVuZGVyZXIucHJvcGVydGllcy5nZXQoc2hUZXh0dXJlKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNoVGV4dHVyZVByb3BzIHx8ICFzaFRleHR1cmVQcm9wcy5fX3dlYmdsVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNoVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YVRleHR1cmUocGFkZGVkU0hBcnJheSwgc2hUZXh0dXJlLCBzaFRleHR1cmVTaXplLCBzaFRleHR1cmVQcm9wcywgZWxlbWVudHNQZXJUZXhlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFNIQ29tcG9uZW50Q291bnQsIHNoQnl0ZXNQZXJFbGVtZW50LCBmcm9tU3BsYXQsIHRvU3BsYXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2hDb21wb25lbnRDb3VudCA9IHNoVGV4dHVyZURlc2MuY29tcG9uZW50Q291bnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhZGRlZFNIQ29tcG9uZW50Q291bnQgPSBzaFRleHR1cmVEZXNjLnBhZGRlZENvbXBvbmVudENvdW50O1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIGZvciB0aGUgY2FzZSBvZiBhIHNpbmdsZSB0ZXh0dXJlIGZvciBhbGwgc3BoZXJpY2FsIGhhcm1vbmljcyBkYXRhXHJcbiAgICAgICAgICAgIGlmIChzaFRleHR1cmVEZXNjLnRleHR1cmVDb3VudCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFkZGVkU0hBcnJheSA9IHNoVGV4dHVyZURlc2MuZGF0YTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSBmcm9tU3BsYXQ7IGMgPD0gdG9TcGxhdDsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3JjQmFzZSA9IHNoQ29tcG9uZW50Q291bnQgKiBjO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc3RCYXNlID0gcGFkZGVkU0hDb21wb25lbnRDb3VudCAqIGM7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaENvbXBvbmVudENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkU0hBcnJheVtkZXN0QmFzZSArIGldID0gc2hEYXRhW3NyY0Jhc2UgKyBpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVUZXh0dXJlKHNoVGV4dHVyZURlc2MudGV4dHVyZSwgc2hUZXh0dXJlRGVzYy5zaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaFRleHR1cmVEZXNjLmVsZW1lbnRzUGVyVGV4ZWwsIHBhZGRlZFNIQXJyYXksIHBhZGRlZFNIQ29tcG9uZW50Q291bnQpO1xyXG4gICAgICAgICAgICAvLyBVcGRhdGUgZm9yIHRoZSBjYXNlIG9mIHNwaGVyaWNhbCBoYXJtb25pY3MgZGF0YSBzcGxpdCBhbW9uZyB0aHJlZSB0ZXh0dXJlcywgb25lIGZvciBlYWNoIGNvbG9yIGNoYW5uZWxcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNoQ29tcG9uZW50Q291bnRQZXJDaGFubmVsID0gc2hUZXh0dXJlRGVzYy5jb21wb25lbnRDb3VudFBlckNoYW5uZWw7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDM7IHQrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRlZFNIQXJyYXkgPSBzaFRleHR1cmVEZXNjLmRhdGFbdF07XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IGZyb21TcGxhdDsgYyA8PSB0b1NwbGF0OyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3JjQmFzZSA9IHNoQ29tcG9uZW50Q291bnQgKiBjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXN0QmFzZSA9IHBhZGRlZFNIQ29tcG9uZW50Q291bnQgKiBjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hDb21wb25lbnRDb3VudFBlckNoYW5uZWwgPj0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHBhZGRlZFNIQXJyYXlbZGVzdEJhc2UgKyBpXSA9IHNoRGF0YVtzcmNCYXNlICsgdCAqIDMgKyBpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaENvbXBvbmVudENvdW50UGVyQ2hhbm5lbCA+PSA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHBhZGRlZFNIQXJyYXlbZGVzdEJhc2UgKyAzICsgaV0gPSBzaERhdGFbc3JjQmFzZSArIDkgKyB0ICogNSArIGldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRleHR1cmUoc2hUZXh0dXJlRGVzYy50ZXh0dXJlc1t0XSwgc2hUZXh0dXJlRGVzYy5zaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hUZXh0dXJlRGVzYy5lbGVtZW50c1BlclRleGVsLCBwYWRkZWRTSEFycmF5LCBwYWRkZWRTSENvbXBvbmVudENvdW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIHNjZW5lIGluZGV4ICYgdHJhbnNmb3JtIGRhdGFcclxuICAgICAgICBjb25zdCBzY2VuZUluZGV4ZXNUZXhEZXNjID0gdGhpcy5zcGxhdERhdGFUZXh0dXJlc1snc2NlbmVJbmRleGVzJ107XHJcbiAgICAgICAgY29uc3QgcGFkZGVkU2NlbmVJbmRleGVzID0gc2NlbmVJbmRleGVzVGV4RGVzYy5kYXRhO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSB0aGlzLmxhc3RCdWlsZFNwbGF0Q291bnQ7IGMgPD0gdG9TcGxhdDsgYysrKSB7XHJcbiAgICAgICAgICAgIHBhZGRlZFNjZW5lSW5kZXhlc1tjXSA9IHRoaXMuZ2xvYmFsU3BsYXRJbmRleFRvU2NlbmVJbmRleE1hcFtjXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NlbmVJbmRleGVzVGV4dHVyZSA9IHNjZW5lSW5kZXhlc1RleERlc2MudGV4dHVyZTtcclxuICAgICAgICBjb25zdCBzY2VuZUluZGV4ZXNUZXh0dXJlUHJvcHMgPSB0aGlzLnJlbmRlcmVyID8gdGhpcy5yZW5kZXJlci5wcm9wZXJ0aWVzLmdldChzY2VuZUluZGV4ZXNUZXh0dXJlKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFzY2VuZUluZGV4ZXNUZXh0dXJlUHJvcHMgfHwgIXNjZW5lSW5kZXhlc1RleHR1cmVQcm9wcy5fX3dlYmdsVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBzY2VuZUluZGV4ZXNUZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGFUZXh0dXJlKHBhZGRlZFNjZW5lSW5kZXhlcywgc2NlbmVJbmRleGVzVGV4RGVzYy50ZXh0dXJlLCBzY2VuZUluZGV4ZXNUZXhEZXNjLnNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVJbmRleGVzVGV4dHVyZVByb3BzLCAxLCAxLCAxLCB0aGlzLmxhc3RCdWlsZFNwbGF0Q291bnQsIHRvU3BsYXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRUYXJnZXRDb3ZhcmlhbmNlQ29tcHJlc3Npb25MZXZlbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYWxmUHJlY2lzaW9uQ292YXJpYW5jZXNPbkdQVSA/IDEgOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRhcmdldFNwaGVyaWNhbEhhcm1vbmljc0NvbXByZXNzaW9uTGV2ZWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDEsIHRoaXMuZ2V0TWF4aW11bVNwbGF0QnVmZmVyQ29tcHJlc3Npb25MZXZlbCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNYXhpbXVtU3BsYXRCdWZmZXJDb21wcmVzc2lvbkxldmVsKCkge1xyXG4gICAgICAgIGxldCBtYXhDb21wcmVzc2lvbkxldmVsO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zY2VuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc2NlbmUgPSB0aGlzLmdldFNjZW5lKGkpO1xyXG4gICAgICAgICAgICBjb25zdCBzcGxhdEJ1ZmZlciA9IHNjZW5lLnNwbGF0QnVmZmVyO1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCBzcGxhdEJ1ZmZlci5jb21wcmVzc2lvbkxldmVsID4gbWF4Q29tcHJlc3Npb25MZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgbWF4Q29tcHJlc3Npb25MZXZlbCA9IHNwbGF0QnVmZmVyLmNvbXByZXNzaW9uTGV2ZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1heENvbXByZXNzaW9uTGV2ZWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWluaW11bVNwbGF0QnVmZmVyQ29tcHJlc3Npb25MZXZlbCgpIHtcclxuICAgICAgICBsZXQgbWluQ29tcHJlc3Npb25MZXZlbDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2NlbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjZW5lID0gdGhpcy5nZXRTY2VuZShpKTtcclxuICAgICAgICAgICAgY29uc3Qgc3BsYXRCdWZmZXIgPSBzY2VuZS5zcGxhdEJ1ZmZlcjtcclxuICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgc3BsYXRCdWZmZXIuY29tcHJlc3Npb25MZXZlbCA8IG1pbkNvbXByZXNzaW9uTGV2ZWwpIHtcclxuICAgICAgICAgICAgICAgIG1pbkNvbXByZXNzaW9uTGV2ZWwgPSBzcGxhdEJ1ZmZlci5jb21wcmVzc2lvbkxldmVsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtaW5Db21wcmVzc2lvbkxldmVsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjb21wdXRlVGV4dHVyZVVwZGF0ZVJlZ2lvbihzdGFydFNwbGF0LCBlbmRTcGxhdCwgdGV4dHVyZVdpZHRoLCBlbGVtZW50c1BlclRleGVsLCBlbGVtZW50c1BlclNwbGF0KSB7XHJcbiAgICAgICAgY29uc3QgdGV4ZWxzUGVyU3BsYXQgPSBlbGVtZW50c1BlclNwbGF0IC8gZWxlbWVudHNQZXJUZXhlbDtcclxuXHJcbiAgICAgICAgY29uc3Qgc3RhcnRTcGxhdFRleGVscyA9IHN0YXJ0U3BsYXQgKiB0ZXhlbHNQZXJTcGxhdDtcclxuICAgICAgICBjb25zdCBzdGFydFJvdyA9IE1hdGguZmxvb3Ioc3RhcnRTcGxhdFRleGVscyAvIHRleHR1cmVXaWR0aCk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRSb3dFbGVtZW50ID0gc3RhcnRSb3cgKiB0ZXh0dXJlV2lkdGggKiBlbGVtZW50c1BlclRleGVsO1xyXG5cclxuICAgICAgICBjb25zdCBlbmRTcGxhdFRleGVscyA9IGVuZFNwbGF0ICogdGV4ZWxzUGVyU3BsYXQ7XHJcbiAgICAgICAgY29uc3QgZW5kUm93ID0gTWF0aC5mbG9vcihlbmRTcGxhdFRleGVscyAvIHRleHR1cmVXaWR0aCk7XHJcbiAgICAgICAgY29uc3QgZW5kUm93RW5kRWxlbWVudCA9IGVuZFJvdyAqIHRleHR1cmVXaWR0aCAqIGVsZW1lbnRzUGVyVGV4ZWwgKyAodGV4dHVyZVdpZHRoICogZWxlbWVudHNQZXJUZXhlbCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdkYXRhU3RhcnQnOiBzdGFydFJvd0VsZW1lbnQsXHJcbiAgICAgICAgICAgICdkYXRhRW5kJzogZW5kUm93RW5kRWxlbWVudCxcclxuICAgICAgICAgICAgJ3N0YXJ0Um93Jzogc3RhcnRSb3csXHJcbiAgICAgICAgICAgICdlbmRSb3cnOiBlbmRSb3dcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZURhdGFUZXh0dXJlKHBhZGRlZERhdGEsIHRleHR1cmUsIHRleHR1cmVTaXplLCB0ZXh0dXJlUHJvcHMsIGVsZW1lbnRzUGVyVGV4ZWwsIGVsZW1lbnRzUGVyU3BsYXQsIGJ5dGVzUGVyRWxlbWVudCwgZnJvbSwgdG8pIHtcclxuICAgICAgICBjb25zdCBnbCA9IHRoaXMucmVuZGVyZXIuZ2V0Q29udGV4dCgpO1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZVJlZ2lvbiA9IFNwbGF0TWVzaC5jb21wdXRlVGV4dHVyZVVwZGF0ZVJlZ2lvbihmcm9tLCB0bywgdGV4dHVyZVNpemUueCwgZWxlbWVudHNQZXJUZXhlbCwgZWxlbWVudHNQZXJTcGxhdCk7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlRWxlbWVudENvdW50ID0gdXBkYXRlUmVnaW9uLmRhdGFFbmQgLSB1cGRhdGVSZWdpb24uZGF0YVN0YXJ0O1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZURhdGFWaWV3ID0gbmV3IHBhZGRlZERhdGEuY29uc3RydWN0b3IocGFkZGVkRGF0YS5idWZmZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWdpb24uZGF0YVN0YXJ0ICogYnl0ZXNQZXJFbGVtZW50LCB1cGRhdGVFbGVtZW50Q291bnQpO1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZUhlaWdodCA9IHVwZGF0ZVJlZ2lvbi5lbmRSb3cgLSB1cGRhdGVSZWdpb24uc3RhcnRSb3cgKyAxO1xyXG4gICAgICAgIGNvbnN0IGdsVHlwZSA9IHRoaXMud2ViR0xVdGlscy5jb252ZXJ0KHRleHR1cmUudHlwZSk7XHJcbiAgICAgICAgY29uc3QgZ2xGb3JtYXQgPSB0aGlzLndlYkdMVXRpbHMuY29udmVydCh0ZXh0dXJlLmZvcm1hdCwgdGV4dHVyZS5jb2xvclNwYWNlKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50VGV4dHVyZSA9IGdsLmdldFBhcmFtZXRlcihnbC5URVhUVVJFX0JJTkRJTkdfMkQpO1xyXG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmVQcm9wcy5fX3dlYmdsVGV4dHVyZSk7XHJcbiAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCB1cGRhdGVSZWdpb24uc3RhcnRSb3csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlU2l6ZS54LCB1cGRhdGVIZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIHVwZGF0ZURhdGFWaWV3KTtcclxuICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBjdXJyZW50VGV4dHVyZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHVwZGF0ZVBhZGRlZENvbXByZXNzZWRDb3ZhcmlhbmNlc1RleHR1cmVEYXRhKHNvdXJjZURhdGEsIHRleHR1cmVEYXRhLCB0ZXh0dXJlRGF0YVN0YXJ0SW5kZXgsIGZyb21FbGVtZW50LCB0b0VsZW1lbnQpIHtcclxuICAgICAgICBsZXQgdGV4dHVyZURhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHRleHR1cmVEYXRhLmJ1ZmZlcik7XHJcbiAgICAgICAgbGV0IHRleHR1cmVEYXRhSW5kZXggPSB0ZXh0dXJlRGF0YVN0YXJ0SW5kZXg7XHJcbiAgICAgICAgbGV0IHNlcXVlbnRpYWxDb3VudCA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGZyb21FbGVtZW50OyBpIDw9IHRvRWxlbWVudDsgaSs9Mikge1xyXG4gICAgICAgICAgICB0ZXh0dXJlRGF0YVZpZXcuc2V0VWludDE2KHRleHR1cmVEYXRhSW5kZXggKiAyLCBzb3VyY2VEYXRhW2ldLCB0cnVlKTtcclxuICAgICAgICAgICAgdGV4dHVyZURhdGFWaWV3LnNldFVpbnQxNih0ZXh0dXJlRGF0YUluZGV4ICogMiArIDIsIHNvdXJjZURhdGFbaSArIDFdLCB0cnVlKTtcclxuICAgICAgICAgICAgdGV4dHVyZURhdGFJbmRleCArPSAyO1xyXG4gICAgICAgICAgICBzZXF1ZW50aWFsQ291bnQrKztcclxuICAgICAgICAgICAgaWYgKHNlcXVlbnRpYWxDb3VudCA+PSAzKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlRGF0YUluZGV4ICs9IDI7XHJcbiAgICAgICAgICAgICAgICBzZXF1ZW50aWFsQ291bnQgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB1cGRhdGVDZW50ZXJDb2xvcnNQYWRkZWREYXRhKGZyb20sIHRvLCBjZW50ZXJzLCBjb2xvcnMsIHBhZGRlZENlbnRlckNvbG9ycykge1xyXG4gICAgICAgIGZvciAobGV0IGMgPSBmcm9tOyBjIDw9IHRvOyBjKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3JzQmFzZSA9IGMgKiA0O1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXJzQmFzZSA9IGMgKiAzO1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXJDb2xvcnNCYXNlID0gYyAqIDQ7XHJcbiAgICAgICAgICAgIHBhZGRlZENlbnRlckNvbG9yc1tjZW50ZXJDb2xvcnNCYXNlXSA9IHJnYmFBcnJheVRvSW50ZWdlcihjb2xvcnMsIGNvbG9yc0Jhc2UpO1xyXG4gICAgICAgICAgICBwYWRkZWRDZW50ZXJDb2xvcnNbY2VudGVyQ29sb3JzQmFzZSArIDFdID0gdWludEVuY29kZWRGbG9hdChjZW50ZXJzW2NlbnRlcnNCYXNlXSk7XHJcbiAgICAgICAgICAgIHBhZGRlZENlbnRlckNvbG9yc1tjZW50ZXJDb2xvcnNCYXNlICsgMl0gPSB1aW50RW5jb2RlZEZsb2F0KGNlbnRlcnNbY2VudGVyc0Jhc2UgKyAxXSk7XHJcbiAgICAgICAgICAgIHBhZGRlZENlbnRlckNvbG9yc1tjZW50ZXJDb2xvcnNCYXNlICsgM10gPSB1aW50RW5jb2RlZEZsb2F0KGNlbnRlcnNbY2VudGVyc0Jhc2UgKyAyXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB1cGRhdGVTY2FsZVJvdGF0aW9uc1BhZGRlZERhdGEoZnJvbSwgdG8sIHNjYWxlcywgcm90YXRpb25zLCBwYWRkZWRTY2FsZVJvdGF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGNvbWJpbmVkU2l6ZSA9IDY7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IGZyb207IGMgPD0gdG87IGMrKykge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FsZUJhc2UgPSBjICogMztcclxuICAgICAgICAgICAgY29uc3Qgcm90YXRpb25CYXNlID0gYyAqIDQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlUm90YXRpb25zQmFzZSA9IGMgKiBjb21iaW5lZFNpemU7XHJcblxyXG4gICAgICAgICAgICBwYWRkZWRTY2FsZVJvdGF0aW9uc1tzY2FsZVJvdGF0aW9uc0Jhc2VdID0gc2NhbGVzW3NjYWxlQmFzZV07XHJcbiAgICAgICAgICAgIHBhZGRlZFNjYWxlUm90YXRpb25zW3NjYWxlUm90YXRpb25zQmFzZSArIDFdID0gc2NhbGVzW3NjYWxlQmFzZSArIDFdO1xyXG4gICAgICAgICAgICBwYWRkZWRTY2FsZVJvdGF0aW9uc1tzY2FsZVJvdGF0aW9uc0Jhc2UgKyAyXSA9IHNjYWxlc1tzY2FsZUJhc2UgKyAyXTtcclxuXHJcbiAgICAgICAgICAgIHBhZGRlZFNjYWxlUm90YXRpb25zW3NjYWxlUm90YXRpb25zQmFzZSArIDNdID0gcm90YXRpb25zW3JvdGF0aW9uQmFzZV07XHJcbiAgICAgICAgICAgIHBhZGRlZFNjYWxlUm90YXRpb25zW3NjYWxlUm90YXRpb25zQmFzZSArIDRdID0gcm90YXRpb25zW3JvdGF0aW9uQmFzZSArIDFdO1xyXG4gICAgICAgICAgICBwYWRkZWRTY2FsZVJvdGF0aW9uc1tzY2FsZVJvdGF0aW9uc0Jhc2UgKyA1XSA9IHJvdGF0aW9uc1tyb3RhdGlvbkJhc2UgKyAyXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVmlzaWJsZVJlZ2lvbihzaW5jZUxhc3RCdWlsZE9ubHkpIHtcclxuICAgICAgICBjb25zdCBzcGxhdENvdW50ID0gdGhpcy5nZXRTcGxhdENvdW50KHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHRlbXBDZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIGlmICghc2luY2VMYXN0QnVpbGRPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF2Z0NlbnRlciA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmVzLmZvckVhY2goKHNjZW5lKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhdmdDZW50ZXIuYWRkKHNjZW5lLnNwbGF0QnVmZmVyLnNjZW5lQ2VudGVyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGF2Z0NlbnRlci5tdWx0aXBseVNjYWxhcigxLjAgLyB0aGlzLnNjZW5lcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZWRTY2VuZUNlbnRlci5jb3B5KGF2Z0NlbnRlcik7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuc2NlbmVDZW50ZXIudmFsdWUuY29weSh0aGlzLmNhbGN1bGF0ZWRTY2VuZUNlbnRlcik7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXNOZWVkVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHN0YXJ0U3BsYXRGb3JtTWF4RGlzdGFuY2VDYWxjID0gc2luY2VMYXN0QnVpbGRPbmx5ID8gdGhpcy5sYXN0QnVpbGRTcGxhdENvdW50IDogMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRTcGxhdEZvcm1NYXhEaXN0YW5jZUNhbGM7IGkgPCBzcGxhdENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRTcGxhdENlbnRlcih0aGlzLm1vcnBoZWRNZXNoLCBpLCB0ZW1wQ2VudGVyLCB0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgZGlzdEZyb21DU2NlbmVDZW50ZXIgPSB0ZW1wQ2VudGVyLnN1Yih0aGlzLmNhbGN1bGF0ZWRTY2VuZUNlbnRlcikubGVuZ3RoKCk7XHJcbiAgICAgICAgICAgIGlmIChkaXN0RnJvbUNTY2VuZUNlbnRlciA+IHRoaXMubWF4U3BsYXREaXN0YW5jZUZyb21TY2VuZUNlbnRlcikgdGhpcy5tYXhTcGxhdERpc3RhbmNlRnJvbVNjZW5lQ2VudGVyID0gZGlzdEZyb21DU2NlbmVDZW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5tYXhTcGxhdERpc3RhbmNlRnJvbVNjZW5lQ2VudGVyIC0gdGhpcy52aXNpYmxlUmVnaW9uQnVmZmVyUmFkaXVzID4gVklTSUJMRV9SRUdJT05fRVhQQU5TSU9OX0RFTFRBKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZVJlZ2lvbkJ1ZmZlclJhZGl1cyA9IHRoaXMubWF4U3BsYXREaXN0YW5jZUZyb21TY2VuZUNlbnRlcjtcclxuICAgICAgICAgICAgdGhpcy52aXNpYmxlUmVnaW9uUmFkaXVzID0gTWF0aC5tYXgodGhpcy52aXNpYmxlUmVnaW9uQnVmZmVyUmFkaXVzIC0gVklTSUJMRV9SRUdJT05fRVhQQU5TSU9OX0RFTFRBLCAwLjApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5maW5hbEJ1aWxkKSB0aGlzLnZpc2libGVSZWdpb25SYWRpdXMgPSB0aGlzLnZpc2libGVSZWdpb25CdWZmZXJSYWRpdXMgPSB0aGlzLm1heFNwbGF0RGlzdGFuY2VGcm9tU2NlbmVDZW50ZXI7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUmVnaW9uRmFkZURpc3RhbmNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVmlzaWJsZVJlZ2lvbkZhZGVEaXN0YW5jZShzY2VuZVJldmVhbE1vZGUgPSBTY2VuZVJldmVhbE1vZGUuRGVmYXVsdCkge1xyXG4gICAgICAgIGNvbnN0IGZhc3RGYWRlUmF0ZSA9IFNDRU5FX0ZBREVJTl9SQVRFX0ZBU1QgKiB0aGlzLnNjZW5lRmFkZUluUmF0ZU11bHRpcGxpZXI7XHJcbiAgICAgICAgY29uc3QgZ3JhZHVhbEZhZGVSYXRlID0gU0NFTkVfRkFERUlOX1JBVEVfR1JBRFVBTCAqIHRoaXMuc2NlbmVGYWRlSW5SYXRlTXVsdGlwbGllcjtcclxuICAgICAgICBjb25zdCBkZWZhdWx0RmFkZUluUmF0ZSA9IHRoaXMuZmluYWxCdWlsZCA/IGZhc3RGYWRlUmF0ZSA6IGdyYWR1YWxGYWRlUmF0ZTtcclxuICAgICAgICBjb25zdCBmYWRlSW5SYXRlID0gc2NlbmVSZXZlYWxNb2RlID09PSBTY2VuZVJldmVhbE1vZGUuRGVmYXVsdCA/IGRlZmF1bHRGYWRlSW5SYXRlIDogZ3JhZHVhbEZhZGVSYXRlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVJlZ2lvbkZhZGVTdGFydFJhZGl1cyA9ICh0aGlzLnZpc2libGVSZWdpb25SYWRpdXMgLSB0aGlzLnZpc2libGVSZWdpb25GYWRlU3RhcnRSYWRpdXMpICpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluUmF0ZSArIHRoaXMudmlzaWJsZVJlZ2lvbkZhZGVTdGFydFJhZGl1cztcclxuICAgICAgICBjb25zdCBmYWRlSW5QZXJjZW50YWdlID0gKHRoaXMudmlzaWJsZVJlZ2lvbkJ1ZmZlclJhZGl1cyA+IDApID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMudmlzaWJsZVJlZ2lvbkZhZGVTdGFydFJhZGl1cyAvIHRoaXMudmlzaWJsZVJlZ2lvbkJ1ZmZlclJhZGl1cykgOiAwO1xyXG4gICAgICAgIGNvbnN0IGZhZGVJbkNvbXBsZXRlID0gZmFkZUluUGVyY2VudGFnZSA+IDAuOTk7XHJcbiAgICAgICAgY29uc3Qgc2hhZGVyRmFkZUluQ29tcGxldGUgPSAoZmFkZUluQ29tcGxldGUgfHwgc2NlbmVSZXZlYWxNb2RlID09PSBTY2VuZVJldmVhbE1vZGUuSW5zdGFudCkgPyAxIDogMDtcclxuXHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy52aXNpYmxlUmVnaW9uRmFkZVN0YXJ0UmFkaXVzLnZhbHVlID0gdGhpcy52aXNpYmxlUmVnaW9uRmFkZVN0YXJ0UmFkaXVzO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMudmlzaWJsZVJlZ2lvblJhZGl1cy52YWx1ZSA9IHRoaXMudmlzaWJsZVJlZ2lvblJhZGl1cztcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmZpcnN0UmVuZGVyVGltZS52YWx1ZSA9IHRoaXMuZmlyc3RSZW5kZXJUaW1lO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuY3VycmVudFRpbWUudmFsdWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmZhZGVJbkNvbXBsZXRlLnZhbHVlID0gc2hhZGVyRmFkZUluQ29tcGxldGU7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVJlZ2lvbkNoYW5naW5nID0gIWZhZGVJbkNvbXBsZXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBpbmRleGVzIG9mIHNwbGF0cyB0aGF0IHNob3VsZCBiZSByZW5kZXJlZDsgc2hvdWxkIGJlIHNvcnRlZCBpbiBkZXNpcmVkIHJlbmRlciBvcmRlci5cclxuICAgICAqIEBwYXJhbSB7VWludDMyQXJyYXl9IGdsb2JhbEluZGV4ZXMgU29ydGVkIGluZGV4IGxpc3Qgb2Ygc3BsYXRzIHRvIGJlIHJlbmRlcmVkXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVuZGVyU3BsYXRDb3VudCBUb3RhbCBudW1iZXIgb2Ygc3BsYXRzIHRvIGJlIHJlbmRlcmVkLiBOZWNlc3NhcnkgYmVjYXVzZSB3ZSBtYXkgbm90IHdhbnQgdG8gcmVuZGVyXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVyeSBzcGxhdC5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlUmVuZGVySW5kZXhlcyhnbG9iYWxJbmRleGVzLCByZW5kZXJTcGxhdENvdW50KSB7XHJcbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xyXG4gICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMuc3BsYXRJbmRleC5zZXQoZ2xvYmFsSW5kZXhlcyk7XHJcbiAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5zcGxhdEluZGV4Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICBpZiAocmVuZGVyU3BsYXRDb3VudCA+IDAgJiYgdGhpcy5maXJzdFJlbmRlclRpbWUgPT09IC0xKSB0aGlzLmZpcnN0UmVuZGVyVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG4gICAgICAgIGdlb21ldHJ5Lmluc3RhbmNlQ291bnQgPSByZW5kZXJTcGxhdENvdW50O1xyXG4gICAgICAgIGdlb21ldHJ5LnNldERyYXdSYW5nZSgwLCByZW5kZXJTcGxhdENvdW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgdHJhbnNmb3JtcyBmb3IgZWFjaCBzY2VuZSBpbiB0aGlzIHNwbGF0IG1lc2ggZnJvbSB0aGVpciBpbmRpdmlkdWFsIGNvbXBvbmVudHMgKHBvc2l0aW9uLFxyXG4gICAgICogcXVhdGVybmlvbiwgYW5kIHNjYWxlKVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVUcmFuc2Zvcm1zKCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zY2VuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc2NlbmUgPSB0aGlzLmdldFNjZW5lKGkpO1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGVUcmFuc2Zvcm0odGhpcy5keW5hbWljTW9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVVuaWZvcm1zID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHJlbmRlckRpbWVuc2lvbnMsIGNhbWVyYUZvY2FsTGVuZ3RoWCwgY2FtZXJhRm9jYWxMZW5ndGhZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcnRob2dyYXBoaWNNb2RlLCBvcnRob2dyYXBoaWNab29tLCBpbnZlcnNlRm9jYWxBZGp1c3RtZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGF0Q291bnQgPSB0aGlzLmdldFNwbGF0Q291bnQoKTtcclxuICAgICAgICAgICAgaWYgKHNwbGF0Q291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3cG9ydC5zZXQocmVuZGVyRGltZW5zaW9ucy54ICogdGhpcy5kZXZpY2VQaXhlbFJhdGlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckRpbWVuc2lvbnMueSAqIHRoaXMuZGV2aWNlUGl4ZWxSYXRpbyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLnZpZXdwb3J0LnZhbHVlLmNvcHkodmlld3BvcnQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5iYXNpc1ZpZXdwb3J0LnZhbHVlLnNldCgxLjAgLyB2aWV3cG9ydC54LCAxLjAgLyB2aWV3cG9ydC55KTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuZm9jYWwudmFsdWUuc2V0KGNhbWVyYUZvY2FsTGVuZ3RoWCwgY2FtZXJhRm9jYWxMZW5ndGhZKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMub3J0aG9ncmFwaGljTW9kZS52YWx1ZSA9IG9ydGhvZ3JhcGhpY01vZGUgPyAxIDogMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMub3J0aG9ab29tLnZhbHVlID0gb3J0aG9ncmFwaGljWm9vbTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuaW52ZXJzZUZvY2FsQWRqdXN0bWVudC52YWx1ZSA9IGludmVyc2VGb2NhbEFkanVzdG1lbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5keW5hbWljTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zY2VuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy50cmFuc2Zvcm1zLnZhbHVlW2ldLmNvcHkodGhpcy5nZXRTY2VuZShpKS50cmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZU9wdGlvbmFsRWZmZWN0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zY2VuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5zY2VuZU9wYWNpdHkudmFsdWVbaV0gPSBjbGFtcCh0aGlzLmdldFNjZW5lKGkpLm9wYWNpdHksIDAuMCwgMS4wKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtcy5zY2VuZVZpc2liaWxpdHkudmFsdWVbaV0gPSB0aGlzLmdldFNjZW5lKGkpLnZpc2libGUgPyAxIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXNOZWVkVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgfSgpO1xyXG5cclxuICAgIHNldFNwbGF0U2NhbGUoc3BsYXRTY2FsZSA9IDEpIHtcclxuICAgICAgICB0aGlzLnNwbGF0U2NhbGUgPSBzcGxhdFNjYWxlO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuc3BsYXRTY2FsZS52YWx1ZSA9IHNwbGF0U2NhbGU7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNwbGF0U2NhbGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3BsYXRTY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRQb2ludENsb3VkTW9kZUVuYWJsZWQoZW5hYmxlZCkge1xyXG4gICAgICAgIHRoaXMucG9pbnRDbG91ZE1vZGVFbmFibGVkID0gZW5hYmxlZDtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLnBvaW50Q2xvdWRNb2RlRW5hYmxlZC52YWx1ZSA9IGVuYWJsZWQgPyAxIDogMDtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zTmVlZFVwZGF0ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UG9pbnRDbG91ZE1vZGVFbmFibGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvaW50Q2xvdWRNb2RlRW5hYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTcGxhdERhdGFUZXh0dXJlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zcGxhdERhdGFUZXh0dXJlcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRTcGxhdENvdW50KGluY2x1ZGVTaW5jZUxhc3RCdWlsZCA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCFpbmNsdWRlU2luY2VMYXN0QnVpbGQpIHJldHVybiB0aGlzLmxhc3RCdWlsZFNwbGF0Q291bnQ7XHJcbiAgICAgICAgZWxzZSByZXR1cm4gU3BsYXRNZXNoLmdldFRvdGFsU3BsYXRDb3VudEZvclNjZW5lcyh0aGlzLnNjZW5lcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldFRvdGFsU3BsYXRDb3VudEZvclNjZW5lcyhzY2VuZXMpIHtcclxuICAgICAgICBsZXQgdG90YWxTcGxhdENvdW50ID0gMDtcclxuICAgICAgICBmb3IgKGxldCBzY2VuZSBvZiBzY2VuZXMpIHtcclxuICAgICAgICAgICAgaWYgKHNjZW5lICYmIHNjZW5lLnNwbGF0QnVmZmVyKSB0b3RhbFNwbGF0Q291bnQgKz0gc2NlbmUuc3BsYXRCdWZmZXIuZ2V0U3BsYXRDb3VudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG90YWxTcGxhdENvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRUb3RhbFNwbGF0Q291bnRGb3JTcGxhdEJ1ZmZlcnMoc3BsYXRCdWZmZXJzKSB7XHJcbiAgICAgICAgbGV0IHRvdGFsU3BsYXRDb3VudCA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgc3BsYXRCdWZmZXIgb2Ygc3BsYXRCdWZmZXJzKSB0b3RhbFNwbGF0Q291bnQgKz0gc3BsYXRCdWZmZXIuZ2V0U3BsYXRDb3VudCgpO1xyXG4gICAgICAgIHJldHVybiB0b3RhbFNwbGF0Q291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWF4U3BsYXRDb3VudCgpIHtcclxuICAgICAgICByZXR1cm4gU3BsYXRNZXNoLmdldFRvdGFsTWF4U3BsYXRDb3VudEZvclNjZW5lcyh0aGlzLnNjZW5lcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldFRvdGFsTWF4U3BsYXRDb3VudEZvclNjZW5lcyhzY2VuZXMpIHtcclxuICAgICAgICBsZXQgdG90YWxTcGxhdENvdW50ID0gMDtcclxuICAgICAgICBmb3IgKGxldCBzY2VuZSBvZiBzY2VuZXMpIHtcclxuICAgICAgICAgICAgaWYgKHNjZW5lICYmIHNjZW5lLnNwbGF0QnVmZmVyKSB0b3RhbFNwbGF0Q291bnQgKz0gc2NlbmUuc3BsYXRCdWZmZXIuZ2V0TWF4U3BsYXRDb3VudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG90YWxTcGxhdENvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRUb3RhbE1heFNwbGF0Q291bnRGb3JTcGxhdEJ1ZmZlcnMoc3BsYXRCdWZmZXJzKSB7XHJcbiAgICAgICAgbGV0IHRvdGFsU3BsYXRDb3VudCA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgc3BsYXRCdWZmZXIgb2Ygc3BsYXRCdWZmZXJzKSB0b3RhbFNwbGF0Q291bnQgKz0gc3BsYXRCdWZmZXIuZ2V0TWF4U3BsYXRDb3VudCgpO1xyXG4gICAgICAgIHJldHVybiB0b3RhbFNwbGF0Q291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcG9zZURpc3RhbmNlc0NvbXB1dGF0aW9uR1BVUmVzb3VyY2VzKCkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyZXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLnJlbmRlcmVyLmdldENvbnRleHQoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sudmFvKSB7XHJcbiAgICAgICAgICAgIGdsLmRlbGV0ZVZlcnRleEFycmF5KHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sudmFvKTtcclxuICAgICAgICAgICAgdGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay52YW8gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5wcm9ncmFtKSB7XHJcbiAgICAgICAgICAgIGdsLmRlbGV0ZVByb2dyYW0odGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5wcm9ncmFtKTtcclxuICAgICAgICAgICAgZ2wuZGVsZXRlU2hhZGVyKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sudmVydGV4U2hhZGVyKTtcclxuICAgICAgICAgICAgZ2wuZGVsZXRlU2hhZGVyKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2suZnJhZ21lbnRTaGFkZXIpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnByb2dyYW0gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnZlcnRleFNoYWRlciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2suZnJhZ21lbnRTaGFkZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpc3Bvc2VEaXN0YW5jZXNDb21wdXRhdGlvbkdQVUJ1ZmZlclJlc291cmNlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLmlkKSB7XHJcbiAgICAgICAgICAgIGdsLmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2suaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLmlkID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcG9zZURpc3RhbmNlc0NvbXB1dGF0aW9uR1BVQnVmZmVyUmVzb3VyY2VzKCkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyZXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLnJlbmRlcmVyLmdldENvbnRleHQoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2suY2VudGVyc0J1ZmZlcikge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLmNlbnRlcnNCdWZmZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5jZW50ZXJzQnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sub3V0RGlzdGFuY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIGdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLm91dERpc3RhbmNlc0J1ZmZlcik7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sub3V0RGlzdGFuY2VzQnVmZmVyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIFRocmVlLmpzIHJlbmRlcmVyIHVzZWQgYnkgdGhpcyBzcGxhdCBtZXNoXHJcbiAgICAgKiBAcGFyYW0ge1RIUkVFLldlYkdMUmVuZGVyZXJ9IHJlbmRlcmVyIEluc3RhbmNlIG9mIFRIUkVFLldlYkdMUmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgc2V0UmVuZGVyZXIocmVuZGVyZXIpIHtcclxuICAgICAgICBpZiAocmVuZGVyZXIgIT09IHRoaXMucmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgICAgICAgICBjb25zdCBnbCA9IHRoaXMucmVuZGVyZXIuZ2V0Q29udGV4dCgpO1xyXG4gICAgICAgICAgICBjb25zdCBleHRlbnNpb25zID0gbmV3IFdlYkdMRXh0ZW5zaW9ucyQxKGdsKTtcclxuICAgICAgICAgICAgY29uc3QgY2FwYWJpbGl0aWVzID0gbmV3IFdlYkdMQ2FwYWJpbGl0aWVzJDEoZ2wsIGV4dGVuc2lvbnMsIHt9KTtcclxuICAgICAgICAgICAgZXh0ZW5zaW9ucy5pbml0KGNhcGFiaWxpdGllcyk7XHJcbiAgICAgICAgICAgIHRoaXMud2ViR0xVdGlscyA9IG5ldyBXZWJHTFV0aWxzJDEoZ2wsIGV4dGVuc2lvbnMsIGNhcGFiaWxpdGllcyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZURpc3RhbmNlc0NvbXB1dGF0aW9uT25HUFUgJiYgdGhpcy5nZXRTcGxhdENvdW50KCkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwRGlzdGFuY2VzQ29tcHV0YXRpb25UcmFuc2Zvcm1GZWVkYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjZW50ZXJzLCBzY2VuZUluZGV4ZXMgfSA9IHRoaXMuZ2V0RGF0YUZvckRpc3RhbmNlc0NvbXB1dGF0aW9uKDAsIHRoaXMuZ2V0U3BsYXRDb3VudCgpIC0gMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hHUFVCdWZmZXJzRm9yRGlzdGFuY2VzQ29tcHV0YXRpb24oY2VudGVycywgc2NlbmVJbmRleGVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXR1cERpc3RhbmNlc0NvbXB1dGF0aW9uVHJhbnNmb3JtRmVlZGJhY2sgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgbGV0IGN1cnJlbnRNYXhTcGxhdENvdW50O1xyXG5cclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtYXhTcGxhdENvdW50ID0gdGhpcy5nZXRNYXhTcGxhdENvdW50KCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMucmVuZGVyZXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlYnVpbGRHUFVPYmplY3RzID0gKHRoaXMubGFzdFJlbmRlcmVyICE9PSB0aGlzLnJlbmRlcmVyKTtcclxuICAgICAgICAgICAgY29uc3QgcmVidWlsZEJ1ZmZlcnMgPSBjdXJyZW50TWF4U3BsYXRDb3VudCAhPT0gbWF4U3BsYXRDb3VudDtcclxuXHJcbiAgICAgICAgICAgIGlmICghcmVidWlsZEdQVU9iamVjdHMgJiYgIXJlYnVpbGRCdWZmZXJzKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZiAocmVidWlsZEdQVU9iamVjdHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcG9zZURpc3RhbmNlc0NvbXB1dGF0aW9uR1BVUmVzb3VyY2VzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVidWlsZEJ1ZmZlcnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcG9zZURpc3RhbmNlc0NvbXB1dGF0aW9uR1BVQnVmZmVyUmVzb3VyY2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdsID0gdGhpcy5yZW5kZXJlci5nZXRDb250ZXh0KCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVTaGFkZXIgPSAoZ2wsIHR5cGUsIHNvdXJjZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKHR5cGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzaGFkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYXRhbCBlcnJvcjogZ2wgY291bGQgbm90IGNyZWF0ZSBhIHNoYWRlciBvYmplY3QuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc291cmNlKTtcclxuICAgICAgICAgICAgICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb21waWxlZCA9IGdsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKTtcclxuICAgICAgICAgICAgICAgIGlmICghY29tcGlsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdHlwZU5hbWUgPSAndW5rbm93bic7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IGdsLlZFUlRFWF9TSEFERVIpIHR5cGVOYW1lID0gJ3ZlcnRleCBzaGFkZXInO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IGdsLkZSQUdNRU5UX1NIQURFUikgdHlwZU5hbWUgPSAnZnJhZ2VtZW50IHNoYWRlcic7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gZ2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjb21waWxlICcgKyB0eXBlTmFtZSArICcgd2l0aCB0aGVzZSBlcnJvcnM6JyArIGVycm9ycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2wuZGVsZXRlU2hhZGVyKHNoYWRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRlcjtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxldCB2c1NvdXJjZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW50ZWdlckJhc2VkRGlzdGFuY2VzQ29tcHV0YXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHZzU291cmNlID1cclxuICAgICAgICAgICAgICAgIGAjdmVyc2lvbiAzMDAgZXNcclxuICAgICAgICAgICAgICAgIGluIGl2ZWM0IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgIGZsYXQgb3V0IGludCBkaXN0YW5jZTtgO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHluYW1pY01vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2c1NvdXJjZSArPSBgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluIHVpbnQgc2NlbmVJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybSBpdmVjNCB0cmFuc2Zvcm1zWyR7Q29uc3RhbnRzLk1heFNjZW5lc31dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZlYzQgdHJhbnNmb3JtID0gdHJhbnNmb3Jtc1tzY2VuZUluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gY2VudGVyLnggKiB0cmFuc2Zvcm0ueCArIGNlbnRlci55ICogdHJhbnNmb3JtLnkgKyBjZW50ZXIueiAqIHRyYW5zZm9ybS56ICsgdHJhbnNmb3JtLncgKiBjZW50ZXIudztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZzU291cmNlICs9IGBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybSBpdmVjMyBtb2RlbFZpZXdQcm9qO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UgPSBjZW50ZXIueCAqIG1vZGVsVmlld1Byb2oueCArIGNlbnRlci55ICogbW9kZWxWaWV3UHJvai55ICsgY2VudGVyLnogKiBtb2RlbFZpZXdQcm9qLno7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBgO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdnNTb3VyY2UgPVxyXG4gICAgICAgICAgICAgICAgYCN2ZXJzaW9uIDMwMCBlc1xyXG4gICAgICAgICAgICAgICAgaW4gdmVjNCBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICBmbGF0IG91dCBmbG9hdCBkaXN0YW5jZTtgO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHluYW1pY01vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2c1NvdXJjZSArPSBgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluIHVpbnQgc2NlbmVJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IHRyYW5zZm9ybXNbJHtDb25zdGFudHMuTWF4U2NlbmVzfV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWM0IHRyYW5zZm9ybWVkQ2VudGVyID0gdHJhbnNmb3Jtc1tzY2VuZUluZGV4XSAqIHZlYzQoY2VudGVyLnh5eiwgMS4wKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gdHJhbnNmb3JtZWRDZW50ZXIuejtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZzU291cmNlICs9IGBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybSB2ZWMzIG1vZGVsVmlld1Byb2o7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IGNlbnRlci54ICogbW9kZWxWaWV3UHJvai54ICsgY2VudGVyLnkgKiBtb2RlbFZpZXdQcm9qLnkgKyBjZW50ZXIueiAqIG1vZGVsVmlld1Byb2ouejtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZzU291cmNlID1cclxuICAgICAgICAgICAgYCN2ZXJzaW9uIDMwMCBlc1xyXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uIGxvd3AgZmxvYXQ7XHJcbiAgICAgICAgICAgICAgICBvdXQgdmVjNCBmcmFnQ29sb3I7XHJcbiAgICAgICAgICAgICAgICB2b2lkIG1haW4oKXt9XHJcbiAgICAgICAgICAgIGA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFvID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLlZFUlRFWF9BUlJBWV9CSU5ESU5HKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFByb2dyYW0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuQ1VSUkVOVF9QUk9HUkFNKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFByb2dyYW1EZWxldGVkID0gY3VycmVudFByb2dyYW0gPyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKGN1cnJlbnRQcm9ncmFtLCBnbC5ERUxFVEVfU1RBVFVTKSA6IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlYnVpbGRHUFVPYmplY3RzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnZhbyA9IGdsLmNyZWF0ZVZlcnRleEFycmF5KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdsLmJpbmRWZXJ0ZXhBcnJheSh0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnZhbyk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVidWlsZEdQVU9iamVjdHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0ZXhTaGFkZXIgPSBjcmVhdGVTaGFkZXIoZ2wsIGdsLlZFUlRFWF9TSEFERVIsIHZzU291cmNlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyID0gY3JlYXRlU2hhZGVyKGdsLCBnbC5GUkFHTUVOVF9TSEFERVIsIGZzU291cmNlKTtcclxuICAgICAgICAgICAgICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGNvbXBpbGUgc2hhZGVycyBmb3IgZGlzdGFuY2VzIGNvbXB1dGF0aW9uIG9uIEdQVS4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpO1xyXG4gICAgICAgICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcclxuICAgICAgICAgICAgICAgIGdsLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MocHJvZ3JhbSwgWydkaXN0YW5jZSddLCBnbC5TRVBBUkFURV9BVFRSSUJTKTtcclxuICAgICAgICAgICAgICAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmtlZCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFsaW5rZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhdGFsIGVycm9yOiBGYWlsZWQgdG8gbGluayBwcm9ncmFtOiAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2wuZGVsZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBnbC5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBsaW5rIHNoYWRlcnMgZm9yIGRpc3RhbmNlcyBjb21wdXRhdGlvbiBvbiBHUFUuJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5wcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sudmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay52ZXJ0ZXhTaGFkZXIgPSBmcmFnbWVudFNoYWRlcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2wudXNlUHJvZ3JhbSh0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnByb2dyYW0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5jZW50ZXJzTG9jID1cclxuICAgICAgICAgICAgICAgIGdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sucHJvZ3JhbSwgJ2NlbnRlcicpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5keW5hbWljTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5zY2VuZUluZGV4ZXNMb2MgPVxyXG4gICAgICAgICAgICAgICAgICAgIGdsLmdldEF0dHJpYkxvY2F0aW9uKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sucHJvZ3JhbSwgJ3NjZW5lSW5kZXgnKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zY2VuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnRyYW5zZm9ybXNMb2NzW2ldID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sucHJvZ3JhbSwgYHRyYW5zZm9ybXNbJHtpfV1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2subW9kZWxWaWV3UHJvakxvYyA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sucHJvZ3JhbSwgJ21vZGVsVmlld1Byb2onKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlYnVpbGRHUFVPYmplY3RzIHx8IHJlYnVpbGRCdWZmZXJzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLmNlbnRlcnNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcclxuICAgICAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLmNlbnRlcnNCdWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5jZW50ZXJzTG9jKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmludGVnZXJCYXNlZERpc3RhbmNlc0NvbXB1dGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliSVBvaW50ZXIodGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5jZW50ZXJzTG9jLCA0LCBnbC5JTlQsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2suY2VudGVyc0xvYywgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5keW5hbWljTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2suc2NlbmVJbmRleGVzQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2suc2NlbmVJbmRleGVzQnVmZmVyKTtcclxuICAgICAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnNjZW5lSW5kZXhlc0xvYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliSVBvaW50ZXIodGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5zY2VuZUluZGV4ZXNMb2MsIDEsIGdsLlVOU0lHTkVEX0lOVCwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyZWJ1aWxkR1BVT2JqZWN0cyB8fCByZWJ1aWxkQnVmZmVycykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5vdXREaXN0YW5jZXNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5vdXREaXN0YW5jZXNCdWZmZXIpO1xyXG4gICAgICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWF4U3BsYXRDb3VudCAqIDQsIGdsLlNUQVRJQ19SRUFEKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZWJ1aWxkR1BVT2JqZWN0cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5pZCA9IGdsLmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2wuYmluZFRyYW5zZm9ybUZlZWRiYWNrKGdsLlRSQU5TRk9STV9GRUVEQkFDSywgdGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5pZCk7XHJcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXJCYXNlKGdsLlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVIsIDAsIHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sub3V0RGlzdGFuY2VzQnVmZmVyKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50UHJvZ3JhbSAmJiBjdXJyZW50UHJvZ3JhbURlbGV0ZWQgIT09IHRydWUpIGdsLnVzZVByb2dyYW0oY3VycmVudFByb2dyYW0pO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFZhbykgZ2wuYmluZFZlcnRleEFycmF5KGN1cnJlbnRWYW8pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sYXN0UmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgICAgICAgICBjdXJyZW50TWF4U3BsYXRDb3VudCA9IG1heFNwbGF0Q291bnQ7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB9KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWZyZXNoIEdQVSBidWZmZXJzIHVzZWQgZm9yIGNvbXB1dGluZyBzcGxhdCBkaXN0YW5jZXMgd2l0aCBjZW50ZXJzIGRhdGEgZnJvbSB0aGUgc2NlbmVzIGZvciB0aGlzIG1lc2guXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzVXBkYXRlIFNwZWNpZnkgd2hldGhlciBvciBub3QgdG8gdXBkYXRlIHRoZSBHUFUgYnVmZmVyIG9yIHRvIGluaXRpYWxpemUgJiBmaWxsXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGNlbnRlcnMgVGhlIHNwbGF0IGNlbnRlcnMgZGF0YVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFNwbGF0cyBPZmZzZXQgaW4gdGhlIEdQVSBidWZmZXIgYXQgd2hpY2ggdG8gc3RhcnQgdXBkYXRpbmcgZGF0YSwgc3BlY2lmaWVkIGluIHNwbGF0c1xyXG4gICAgICovXHJcbiAgICB1cGRhdGVHUFVDZW50ZXJzQnVmZmVyRm9yRGlzdGFuY2VzQ29tcHV0YXRpb24oaXNVcGRhdGUsIGNlbnRlcnMsIG9mZnNldFNwbGF0cykge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVuZGVyZXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLnJlbmRlcmVyLmdldENvbnRleHQoKTtcclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudFZhbyA9IGdsLmdldFBhcmFtZXRlcihnbC5WRVJURVhfQVJSQVlfQklORElORyk7XHJcbiAgICAgICAgZ2wuYmluZFZlcnRleEFycmF5KHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sudmFvKTtcclxuXHJcbiAgICAgICAgY29uc3QgQXJyYXlUeXBlID0gdGhpcy5pbnRlZ2VyQmFzZWREaXN0YW5jZXNDb21wdXRhdGlvbiA/IFVpbnQzMkFycmF5IDogRmxvYXQzMkFycmF5O1xyXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZUJ5dGVzUGVyQ2VudGVyID0gMTY7XHJcbiAgICAgICAgY29uc3Qgc3ViQnVmZmVyT2Zmc2V0ID0gb2Zmc2V0U3BsYXRzICogYXR0cmlidXRlQnl0ZXNQZXJDZW50ZXI7XHJcblxyXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLmNlbnRlcnNCdWZmZXIpO1xyXG5cclxuICAgICAgICBpZiAoaXNVcGRhdGUpIHtcclxuICAgICAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIHN1YkJ1ZmZlck9mZnNldCwgY2VudGVycyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbWF4QXJyYXkgPSBuZXcgQXJyYXlUeXBlKHRoaXMuZ2V0TWF4U3BsYXRDb3VudCgpICogYXR0cmlidXRlQnl0ZXNQZXJDZW50ZXIpO1xyXG4gICAgICAgICAgICBtYXhBcnJheS5zZXQoY2VudGVycyk7XHJcbiAgICAgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBtYXhBcnJheSwgZ2wuU1RBVElDX0RSQVcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG51bGwpO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudFZhbykgZ2wuYmluZFZlcnRleEFycmF5KGN1cnJlbnRWYW8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVmcmVzaCBHUFUgYnVmZmVycyB1c2VkIGZvciBwcmUtY29tcHV0aW5nIHNwbGF0IGRpc3RhbmNlcyB3aXRoIGNlbnRlcnMgZGF0YSBmcm9tIHRoZSBzY2VuZXMgZm9yIHRoaXMgbWVzaC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNVcGRhdGUgU3BlY2lmeSB3aGV0aGVyIG9yIG5vdCB0byB1cGRhdGUgdGhlIEdQVSBidWZmZXIgb3IgdG8gaW5pdGlhbGl6ZSAmIGZpbGxcclxuICAgICAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gc2NlbmVJbmRleGVzIFRoZSBzcGxhdCBzY2VuZSBpbmRleGVzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0U3BsYXRzIE9mZnNldCBpbiB0aGUgR1BVIGJ1ZmZlciBhdCB3aGljaCB0byBzdGFydCB1cGRhdGluZyBkYXRhLCBzcGVjaWZpZWQgaW4gc3BsYXRzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUdQVVRyYW5zZm9ybUluZGV4ZXNCdWZmZXJGb3JEaXN0YW5jZXNDb21wdXRhdGlvbihpc1VwZGF0ZSwgc2NlbmVJbmRleGVzLCBvZmZzZXRTcGxhdHMpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmVyIHx8ICF0aGlzLmR5bmFtaWNNb2RlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5yZW5kZXJlci5nZXRDb250ZXh0KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYW8gPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuVkVSVEVYX0FSUkFZX0JJTkRJTkcpO1xyXG4gICAgICAgIGdsLmJpbmRWZXJ0ZXhBcnJheSh0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnZhbyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHN1YkJ1ZmZlck9mZnNldCA9IG9mZnNldFNwbGF0cyAqIDQ7XHJcblxyXG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnNjZW5lSW5kZXhlc0J1ZmZlcik7XHJcblxyXG4gICAgICAgIGlmIChpc1VwZGF0ZSkge1xyXG4gICAgICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgc3ViQnVmZmVyT2Zmc2V0LCBzY2VuZUluZGV4ZXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1heEFycmF5ID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuZ2V0TWF4U3BsYXRDb3VudCgpICogNCk7XHJcbiAgICAgICAgICAgIG1heEFycmF5LnNldChzY2VuZUluZGV4ZXMpO1xyXG4gICAgICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbWF4QXJyYXksIGdsLlNUQVRJQ19EUkFXKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG51bGwpO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudFZhbykgZ2wuYmluZFZlcnRleEFycmF5KGN1cnJlbnRWYW8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGEgdHlwZWQgYXJyYXkgY29udGFpbmluZyBhIG1hcHBpbmcgZnJvbSBnbG9iYWwgc3BsYXQgaW5kZXhlcyB0byB0aGVpciBzY2VuZSBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBTdGFydGluZyBzcGxhdCBpbmRleCB0byBzdG9yZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBFbmRpbmcgc3BsYXQgaW5kZXggdG8gc3RvcmVcclxuICAgICAqIEByZXR1cm4ge1VpbnQzMkFycmF5fVxyXG4gICAgICovXHJcbiAgICBnZXRTY2VuZUluZGV4ZXMoc3RhcnQsIGVuZCkge1xyXG5cclxuICAgICAgICBsZXQgc2NlbmVJbmRleGVzO1xyXG4gICAgICAgIGNvbnN0IGZpbGxDb3VudCA9IGVuZCAtIHN0YXJ0ICsgMTtcclxuICAgICAgICBzY2VuZUluZGV4ZXMgPSBuZXcgVWludDMyQXJyYXkoZmlsbENvdW50KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcclxuICAgICAgICAgICAgc2NlbmVJbmRleGVzW2ldID0gdGhpcy5nbG9iYWxTcGxhdEluZGV4VG9TY2VuZUluZGV4TWFwW2ldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNjZW5lSW5kZXhlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbGwgJ2FycmF5JyB3aXRoIHRoZSB0cmFuc2Zvcm1zIGZvciBlYWNoIHNjZW5lIGluIHRoaXMgc3BsYXQgbWVzaC5cclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IEVtcHR5IGFycmF5IHRvIGJlIGZpbGxlZCB3aXRoIHNjZW5lIHRyYW5zZm9ybXMuIElmIG5vdCBlbXB0eSwgY29udGVudHMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cclxuICAgICAqL1xyXG4gICAgZmlsbFRyYW5zZm9ybXNBcnJheSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICBjb25zdCB0ZW1wQXJyYXkgPSBbXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5KSB7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wQXJyYXkubGVuZ3RoICE9PSBhcnJheS5sZW5ndGgpIHRlbXBBcnJheS5sZW5ndGggPSBhcnJheS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zY2VuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjZW5lVHJhbnNmb3JtID0gdGhpcy5nZXRTY2VuZShpKS50cmFuc2Zvcm07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY2VuZVRyYW5zZm9ybUVsZW1lbnRzID0gc2NlbmVUcmFuc2Zvcm0uZWxlbWVudHM7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wQXJyYXlbaSAqIDE2ICsgal0gPSBzY2VuZVRyYW5zZm9ybUVsZW1lbnRzW2pdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFycmF5LnNldCh0ZW1wQXJyYXkpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgfSgpO1xyXG5cclxuICAgIGNvbXB1dGVEaXN0YW5jZXNPbkdQVSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICBjb25zdCB0ZW1wTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChtb2RlbFZpZXdQcm9qTWF0cml4LCBvdXRDb21wdXRlZERpc3RhbmNlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucmVuZGVyZXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUudGltZShcImdwdV9jb21wdXRlX2Rpc3RhbmNlc1wiKTtcclxuICAgICAgICAgICAgY29uc3QgZ2wgPSB0aGlzLnJlbmRlcmVyLmdldENvbnRleHQoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYW8gPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuVkVSVEVYX0FSUkFZX0JJTkRJTkcpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UHJvZ3JhbSA9IGdsLmdldFBhcmFtZXRlcihnbC5DVVJSRU5UX1BST0dSQU0pO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UHJvZ3JhbURlbGV0ZWQgPSBjdXJyZW50UHJvZ3JhbSA/IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoY3VycmVudFByb2dyYW0sIGdsLkRFTEVURV9TVEFUVVMpIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBnbC5iaW5kVmVydGV4QXJyYXkodGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay52YW8pO1xyXG4gICAgICAgICAgICBnbC51c2VQcm9ncmFtKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sucHJvZ3JhbSk7XHJcblxyXG4gICAgICAgICAgICBnbC5lbmFibGUoZ2wuUkFTVEVSSVpFUl9ESVNDQVJEKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmR5bmFtaWNNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2NlbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcE1hdHJpeC5jb3B5KHRoaXMuZ2V0U2NlbmUoaSkudHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wTWF0cml4LnByZW11bHRpcGx5KG1vZGVsVmlld1Byb2pNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnRlZ2VyQmFzZWREaXN0YW5jZXNDb21wdXRhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpVGVtcE1hdHJpeCA9IFNwbGF0TWVzaC5nZXRJbnRlZ2VyTWF0cml4QXJyYXkodGVtcE1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlUcmFuc2Zvcm0gPSBbaVRlbXBNYXRyaXhbMl0sIGlUZW1wTWF0cml4WzZdLCBpVGVtcE1hdHJpeFsxMF0sIGlUZW1wTWF0cml4WzE0XV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm00aSh0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnRyYW5zZm9ybXNMb2NzW2ldLCBpVHJhbnNmb3JtWzBdLCBpVHJhbnNmb3JtWzFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaVRyYW5zZm9ybVsyXSwgaVRyYW5zZm9ybVszXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdih0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnRyYW5zZm9ybXNMb2NzW2ldLCBmYWxzZSwgdGVtcE1hdHJpeC5lbGVtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW50ZWdlckJhc2VkRGlzdGFuY2VzQ29tcHV0YXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpVmlld1Byb2pNYXRyaXggPSBTcGxhdE1lc2guZ2V0SW50ZWdlck1hdHJpeEFycmF5KG1vZGVsVmlld1Byb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlWaWV3UHJvaiA9IFtpVmlld1Byb2pNYXRyaXhbMl0sIGlWaWV3UHJvak1hdHJpeFs2XSwgaVZpZXdQcm9qTWF0cml4WzEwXV07XHJcbiAgICAgICAgICAgICAgICAgICAgZ2wudW5pZm9ybTNpKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2subW9kZWxWaWV3UHJvakxvYywgaVZpZXdQcm9qWzBdLCBpVmlld1Byb2pbMV0sIGlWaWV3UHJvalsyXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdQcm9qID0gW21vZGVsVmlld1Byb2pNYXRyaXguZWxlbWVudHNbMl0sIG1vZGVsVmlld1Byb2pNYXRyaXguZWxlbWVudHNbNl0sIG1vZGVsVmlld1Byb2pNYXRyaXguZWxlbWVudHNbMTBdXTtcclxuICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtM2YodGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5tb2RlbFZpZXdQcm9qTG9jLCB2aWV3UHJvalswXSwgdmlld1Byb2pbMV0sIHZpZXdQcm9qWzJdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2suY2VudGVyc0J1ZmZlcik7XHJcbiAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2suY2VudGVyc0xvYyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVnZXJCYXNlZERpc3RhbmNlc0NvbXB1dGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJJUG9pbnRlcih0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLmNlbnRlcnNMb2MsIDQsIGdsLklOVCwgMCwgMCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2suY2VudGVyc0xvYywgNCwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZHluYW1pY01vZGUpIHtcclxuICAgICAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnNjZW5lSW5kZXhlc0J1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnNjZW5lSW5kZXhlc0xvYyk7XHJcbiAgICAgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJJUG9pbnRlcih0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLnNjZW5lSW5kZXhlc0xvYywgMSwgZ2wuVU5TSUdORURfSU5ULCAwLCAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2wuYmluZFRyYW5zZm9ybUZlZWRiYWNrKGdsLlRSQU5TRk9STV9GRUVEQkFDSywgdGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay5pZCk7XHJcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXJCYXNlKGdsLlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVIsIDAsIHRoaXMuZGlzdGFuY2VzVHJhbnNmb3JtRmVlZGJhY2sub3V0RGlzdGFuY2VzQnVmZmVyKTtcclxuXHJcbiAgICAgICAgICAgIGdsLmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soZ2wuUE9JTlRTKTtcclxuICAgICAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMsIDAsIHRoaXMuZ2V0U3BsYXRDb3VudCgpKTtcclxuICAgICAgICAgICAgZ2wuZW5kVHJhbnNmb3JtRmVlZGJhY2soKTtcclxuXHJcbiAgICAgICAgICAgIGdsLmJpbmRCdWZmZXJCYXNlKGdsLlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVIsIDAsIG51bGwpO1xyXG4gICAgICAgICAgICBnbC5iaW5kVHJhbnNmb3JtRmVlZGJhY2soZ2wuVFJBTlNGT1JNX0ZFRURCQUNLLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuUkFTVEVSSVpFUl9ESVNDQVJEKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN5bmMgPSBnbC5mZW5jZVN5bmMoZ2wuU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEUsIDApO1xyXG4gICAgICAgICAgICBnbC5mbHVzaCgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja1N5bmMgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiaXRmbGFncyA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IGdsLmNsaWVudFdhaXRTeW5jKHN5bmMsIGJpdGZsYWdzLCB0aW1lb3V0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgZ2wuVElNRU9VVF9FWFBJUkVEOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZURpc3RhbmNlc09uR1BVU3luY1RpbWVvdXQgPSBzZXRUaW1lb3V0KGNoZWNrU3luYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZURpc3RhbmNlc09uR1BVU3luY1RpbWVvdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGdsLldBSVRfRkFJTEVEOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2hvdWxkIG5ldmVyIGdldCBoZXJlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlRGlzdGFuY2VzT25HUFVTeW5jVGltZW91dCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZGVsZXRlU3luYyhzeW5jKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFvID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLlZFUlRFWF9BUlJBWV9CSU5ESU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5iaW5kVmVydGV4QXJyYXkodGhpcy5kaXN0YW5jZXNUcmFuc2Zvcm1GZWVkYmFjay52YW8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB0aGlzLmRpc3RhbmNlc1RyYW5zZm9ybUZlZWRiYWNrLm91dERpc3RhbmNlc0J1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZ2V0QnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIDAsIG91dENvbXB1dGVkRGlzdGFuY2VzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFvKSBnbC5iaW5kVmVydGV4QXJyYXkoY3VycmVudFZhbyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUudGltZUVuZChcImdwdV9jb21wdXRlX2Rpc3RhbmNlc1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZURpc3RhbmNlc09uR1BVU3luY1RpbWVvdXQgPSBzZXRUaW1lb3V0KGNoZWNrU3luYyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRQcm9ncmFtICYmIGN1cnJlbnRQcm9ncmFtRGVsZXRlZCAhPT0gdHJ1ZSkgZ2wudXNlUHJvZ3JhbShjdXJyZW50UHJvZ3JhbSk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFvKSBnbC5iaW5kVmVydGV4QXJyYXkoY3VycmVudFZhbyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgIH0oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgZ2xvYmFsIHNwbGF0IGluZGV4LCByZXR1cm4gY29ycmVzcG9uZGluZyBsb2NhbCBkYXRhIChzcGxhdCBidWZmZXIsIGluZGV4IG9mIHNwbGF0IGluIHRoYXQgc3BsYXRcclxuICAgICAqIGJ1ZmZlciwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHRyYW5zZm9ybSlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBnbG9iYWxJbmRleCBHbG9iYWwgc3BsYXQgaW5kZXhcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbXNPYmogT2JqZWN0IGluIHdoaWNoIHRvIHN0b3JlIGxvY2FsIGRhdGFcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV0dXJuU2NlbmVUcmFuc2Zvcm0gQnkgZGVmYXVsdCwgdGhlIHRyYW5zZm9ybSBvZiB0aGUgc2NlbmUgdG8gd2hpY2ggdGhlIHNwbGF0IGF0ICdnbG9iYWxJbmRleCcgYmVsb25ncyB3aWxsIGJlXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIHZpYSB0aGUgJ3NjZW5lVHJhbnNmb3JtJyBwcm9wZXJ0eSBvZiAncGFyYW1zT2JqJyBvbmx5IGlmIHRoZSBzcGxhdCBtZXNoIGlzIHN0YXRpYy5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgJ3JldHVyblNjZW5lVHJhbnNmb3JtJyBpcyB0cnVlLCB0aGUgJ3NjZW5lVHJhbnNmb3JtJyBwcm9wZXJ0eSB3aWxsIGFsd2F5cyBjb250YWluIHRoZSBzY2VuZVxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0sIGFuZCBpZiAncmV0dXJuU2NlbmVUcmFuc2Zvcm0nIGlzIGZhbHNlLCB0aGUgJ3NjZW5lVHJhbnNmb3JtJyBwcm9wZXJ0eSB3aWxsIGFsd2F5c1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBudWxsLlxyXG4gICAgICovXHJcbiAgICBnZXRMb2NhbFNwbGF0UGFyYW1ldGVycyhnbG9iYWxJbmRleCwgcGFyYW1zT2JqLCByZXR1cm5TY2VuZVRyYW5zZm9ybSkge1xyXG4gICAgICAgIGlmIChyZXR1cm5TY2VuZVRyYW5zZm9ybSA9PT0gdW5kZWZpbmVkIHx8IHJldHVyblNjZW5lVHJhbnNmb3JtID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVyblNjZW5lVHJhbnNmb3JtID0gdGhpcy5keW5hbWljTW9kZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1zT2JqLnNwbGF0QnVmZmVyID0gdGhpcy5nZXRTcGxhdEJ1ZmZlckZvclNwbGF0KGdsb2JhbEluZGV4KTtcclxuICAgICAgICBwYXJhbXNPYmoubG9jYWxJbmRleCA9IHRoaXMuZ2V0U3BsYXRMb2NhbEluZGV4KGdsb2JhbEluZGV4KTtcclxuICAgICAgICBwYXJhbXNPYmouc2NlbmVUcmFuc2Zvcm0gPSByZXR1cm5TY2VuZVRyYW5zZm9ybSA/IHRoaXMuZ2V0U2NlbmVUcmFuc2Zvcm1Gb3JTcGxhdChnbG9iYWxJbmRleCkgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsbCBhcnJheXMgd2l0aCBzcGxhdCBkYXRhIGFuZCBhcHBseSB0cmFuc2Zvcm1zIGlmIGFwcHJvcHJpYXRlLiBFYWNoIGFycmF5IGlzIG9wdGlvbmFsLlxyXG4gICAgICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IGNvdmFyaWFuY2VzIFRhcmdldCBzdG9yYWdlIGZvciBzcGxhdCBjb3ZhcmlhbmNlc1xyXG4gICAgICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IHNjYWxlcyBUYXJnZXQgc3RvcmFnZSBmb3Igc3BsYXQgc2NhbGVzXHJcbiAgICAgKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gcm90YXRpb25zIFRhcmdldCBzdG9yYWdlIGZvciBzcGxhdCByb3RhdGlvbnNcclxuICAgICAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBjZW50ZXJzIFRhcmdldCBzdG9yYWdlIGZvciBzcGxhdCBjZW50ZXJzXHJcbiAgICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGNvbG9ycyBUYXJnZXQgc3RvcmFnZSBmb3Igc3BsYXQgY29sb3JzXHJcbiAgICAgKiBAcGFyYW0ge0Zsb2F0MzJBcnJheX0gc3BoZXJpY2FsSGFybW9uaWNzIFRhcmdldCBzdG9yYWdlIGZvciBzcGhlcmljYWwgaGFybW9uaWNzXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFwcGx5U2NlbmVUcmFuc2Zvcm0gQnkgZGVmYXVsdCwgc2NlbmUgdHJhbnNmb3JtcyBhcmUgYXBwbGllZCB0byByZWxldmFudCBzcGxhdCBkYXRhIG9ubHkgaWYgdGhlIHNwbGF0IG1lc2ggaXNcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMuIElmICdhcHBseVNjZW5lVHJhbnNmb3JtJyBpcyB0cnVlLCBzY2VuZSB0cmFuc2Zvcm1zIHdpbGwgYWx3YXlzIGJlIGFwcGxpZWQgYW5kIGlmXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgaXMgZmFsc2UsIHRoZXkgd2lsbCBuZXZlciBiZSBhcHBsaWVkLiBJZiB1bmRlZmluZWQsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdpbGwgYXBwbHkuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY292YXJpYW5jZUNvbXByZXNzaW9uTGV2ZWwgVGhlIGNvbXByZXNzaW9uIGxldmVsIGZvciBjb3ZhcmlhbmNlcyBpbiB0aGUgZGVzdGluYXRpb24gYXJyYXlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzcGhlcmljYWxIYXJtb25pY3NDb21wcmVzc2lvbkxldmVsIFRoZSBjb21wcmVzc2lvbiBsZXZlbCBmb3Igc3BoZXJpY2FsIGhhcm1vbmljcyBpbiB0aGUgZGVzdGluYXRpb24gYXJyYXlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzcmNTdGFydCBUaGUgc3RhcnQgbG9jYXRpb24gZnJvbSB3aGljaCB0byBwdWxsIHNvdXJjZSBkYXRhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3JjRW5kIFRoZSBlbmQgbG9jYXRpb24gZnJvbSB3aGljaCB0byBwdWxsIHNvdXJjZSBkYXRhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVzdFN0YXJ0IFRoZSBzdGFydCBsb2NhdGlvbiBmcm9tIHdoaWNoIHRvIHdyaXRlIGRhdGFcclxuICAgICAqL1xyXG4gICAgZmlsbFNwbGF0RGF0YUFycmF5cyhjb3ZhcmlhbmNlcywgc2NhbGVzLCByb3RhdGlvbnMsIGNlbnRlcnMsIGNvbG9ycywgc3BoZXJpY2FsSGFybW9uaWNzLCBmbGFtZU1vZGVsUG9zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlTY2VuZVRyYW5zZm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY292YXJpYW5jZUNvbXByZXNzaW9uTGV2ZWwgPSAwLCBzY2FsZVJvdGF0aW9uQ29tcHJlc3Npb25MZXZlbCA9IDAsIHNwaGVyaWNhbEhhcm1vbmljc0NvbXByZXNzaW9uTGV2ZWwgPSAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNTdGFydCwgc3JjRW5kLCBkZXN0U3RhcnQgPSAwLCBzY2VuZUluZGV4KSB7XHJcbiAgICAgICAgY29uc3Qgc2NhbGVPdmVycmlkZSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgc2NhbGVPdmVycmlkZS54ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHNjYWxlT3ZlcnJpZGUueSA9IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAodGhpcy5zcGxhdFJlbmRlck1vZGUgPT09IFNwbGF0UmVuZGVyTW9kZS5UaHJlZUQpIHtcclxuICAgICAgICAgICAgc2NhbGVPdmVycmlkZS56ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNjYWxlT3ZlcnJpZGUueiA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlbXBUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgICAgICBsZXQgc3RhcnRTY2VuZUluZGV4ID0gMDtcclxuICAgICAgICBsZXQgZW5kU2NlbmVJbmRleCA9IHRoaXMuc2NlbmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgaWYgKHNjZW5lSW5kZXggIT09IHVuZGVmaW5lZCAmJiBzY2VuZUluZGV4ICE9PSBudWxsICYmIHNjZW5lSW5kZXggPj0gMCAmJiBzY2VuZUluZGV4IDw9IHRoaXMuc2NlbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBzdGFydFNjZW5lSW5kZXggPSBzY2VuZUluZGV4O1xyXG4gICAgICAgICAgICBlbmRTY2VuZUluZGV4ID0gc2NlbmVJbmRleDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0U2NlbmVJbmRleDsgaSA8PSBlbmRTY2VuZUluZGV4OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFwcGx5U2NlbmVUcmFuc2Zvcm0gPT09IHVuZGVmaW5lZCB8fCBhcHBseVNjZW5lVHJhbnNmb3JtID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBhcHBseVNjZW5lVHJhbnNmb3JtID0gdGhpcy5keW5hbWljTW9kZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2NlbmUgPSB0aGlzLmdldFNjZW5lKGkpO1xyXG4gICAgICAgICAgICBjb25zdCBzcGxhdEJ1ZmZlciA9IHNjZW5lLnNwbGF0QnVmZmVyO1xyXG4gICAgICAgICAgICBsZXQgc2NlbmVUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIGlmIChhcHBseVNjZW5lVHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNjZW5lVHJhbnNmb3JtKGksIHRlbXBUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgc2NlbmVUcmFuc2Zvcm0gPSB0ZW1wVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb3ZhcmlhbmNlcykge1xyXG4gICAgICAgICAgICAgICAgc3BsYXRCdWZmZXIuZmlsbFNwbGF0Q292YXJpYW5jZUFycmF5KGNvdmFyaWFuY2VzLCBzY2VuZVRyYW5zZm9ybSwgc3JjU3RhcnQsIHNyY0VuZCwgZGVzdFN0YXJ0LCBjb3ZhcmlhbmNlQ29tcHJlc3Npb25MZXZlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNjYWxlcyB8fCByb3RhdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghc2NhbGVzIHx8ICFyb3RhdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NwbGF0TWVzaDo6ZmlsbFNwbGF0RGF0YUFycmF5cygpIC0+IFwic2NhbGVzXCIgYW5kIFwicm90YXRpb25zXCIgbXVzdCBib3RoIGJlIHZhbGlkLicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc3BsYXRCdWZmZXIuZmlsbFNwbGF0U2NhbGVSb3RhdGlvbkFycmF5KHNjYWxlcywgcm90YXRpb25zLCBzY2VuZVRyYW5zZm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNTdGFydCwgc3JjRW5kLCBkZXN0U3RhcnQsIHNjYWxlUm90YXRpb25Db21wcmVzc2lvbkxldmVsLCBzY2FsZU92ZXJyaWRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2VudGVycykgc3BsYXRCdWZmZXIuZmlsbFNwbGF0Q2VudGVyQXJyYXkodGhpcy5tb3JwaGVkTWVzaCwgY2VudGVycywgc2NlbmVUcmFuc2Zvcm0sIHNyY1N0YXJ0LCBzcmNFbmQsIGRlc3RTdGFydCk7XHJcbiAgICAgICAgICAgIGlmIChjb2xvcnMpIHNwbGF0QnVmZmVyLmZpbGxTcGxhdENvbG9yQXJyYXkoY29sb3JzLCBzY2VuZS5taW5pbXVtQWxwaGEsIHNyY1N0YXJ0LCBzcmNFbmQsIGRlc3RTdGFydCk7XHJcbiAgICAgICAgICAgIGlmIChzcGhlcmljYWxIYXJtb25pY3MpIHtcclxuICAgICAgICAgICAgICAgIHNwbGF0QnVmZmVyLmZpbGxTcGhlcmljYWxIYXJtb25pY3NBcnJheShzcGhlcmljYWxIYXJtb25pY3MsIHRoaXMubWluU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjZW5lVHJhbnNmb3JtLCBzcmNTdGFydCwgc3JjRW5kLCBkZXN0U3RhcnQsIHNwaGVyaWNhbEhhcm1vbmljc0NvbXByZXNzaW9uTGV2ZWwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkZXN0U3RhcnQgKz0gc3BsYXRCdWZmZXIuZ2V0U3BsYXRDb3VudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtb3JwaGVkTWVzaDtcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBzcGxhdCBjZW50ZXJzLCB3aGljaCBhcmUgZmxvYXRpbmcgcG9pbnQgdmFsdWVzLCB0byBhbiBhcnJheSBvZiBpbnRlZ2VycyBhbmQgbXVsdGlwbHlcclxuICAgICAqIGVhY2ggYnkgMTAwMC4gQ2VudGVycyB3aWxsIGdldCB0cmFuc2Zvcm1lZCBhcyBhcHByb3ByaWF0ZSBiZWZvcmUgY29udmVyc2lvbiB0byBpbnRlZ2VyLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBpbmRleCBhdCB3aGljaCB0byBzdGFydCByZXRyaWV2aW5nIGRhdGFcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGluZGV4IGF0IHdoaWNoIHRvIHN0b3AgcmV0cmlldmluZyBkYXRhXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhZEZvdXIgRW5mb3JjZSBhbGlnbm1lbnQgb2YgNCBieSBpbnNlcnRpbmcgYSAxIGFmdGVyIGV2ZXJ5IDMgdmFsdWVzXHJcbiAgICAgKiBAcmV0dXJuIHtJbnQzMkFycmF5fVxyXG4gICAgICovXHJcbiAgICBnZXRJbnRlZ2VyQ2VudGVycyhzdGFydCwgZW5kLCBwYWRGb3VyID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCBzcGxhdENvdW50ID0gZW5kIC0gc3RhcnQgKyAxO1xyXG4gICAgICAgIGNvbnN0IGZsb2F0Q2VudGVycyA9IG5ldyBGbG9hdDMyQXJyYXkoc3BsYXRDb3VudCAqIDMpO1xyXG4gICAgICAgIHRoaXMuZmlsbFNwbGF0RGF0YUFycmF5cyhudWxsLCBudWxsLCBudWxsLCBmbG9hdENlbnRlcnMsIG51bGwsIG51bGwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgc3RhcnQpO1xyXG4gICAgICAgIGxldCBpbnRDZW50ZXJzO1xyXG4gICAgICAgIGxldCBjb21wb25lbnRDb3VudCA9IHBhZEZvdXIgPyA0IDogMztcclxuICAgICAgICBpbnRDZW50ZXJzID0gbmV3IEludDMyQXJyYXkoc3BsYXRDb3VudCAqIGNvbXBvbmVudENvdW50KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGF0Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDM7IHQrKykge1xyXG4gICAgICAgICAgICAgICAgaW50Q2VudGVyc1tpICogY29tcG9uZW50Q291bnQgKyB0XSA9IE1hdGgucm91bmQoZmxvYXRDZW50ZXJzW2kgKiAzICsgdF0gKiAxMDAwLjApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYWRGb3VyKSBpbnRDZW50ZXJzW2kgKiBjb21wb25lbnRDb3VudCArIDNdID0gMTAwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGludENlbnRlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHNwbGF0IGNlbnRlcnMsIHRyYW5zZm9ybWVkIGFzIGFwcHJvcHJpYXRlLCBvcHRpb25hbGx5IHBhZGRlZC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgaW5kZXggYXQgd2hpY2ggdG8gc3RhcnQgcmV0cmlldmluZyBkYXRhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBpbmRleCBhdCB3aGljaCB0byBzdG9wIHJldHJpZXZpbmcgZGF0YVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBwYWRGb3VyIEVuZm9yY2UgYWxpZ25tZW50IG9mIDQgYnkgaW5zZXJ0aW5nIGEgMSBhZnRlciBldmVyeSAzIHZhbHVlc1xyXG4gICAgICogQHJldHVybiB7RmxvYXQzMkFycmF5fVxyXG4gICAgICovXHJcbiAgICBnZXRGbG9hdENlbnRlcnMoc3RhcnQsIGVuZCwgcGFkRm91ciA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3Qgc3BsYXRDb3VudCA9IGVuZCAtIHN0YXJ0ICsgMTtcclxuICAgICAgICBjb25zdCBmbG9hdENlbnRlcnMgPSBuZXcgRmxvYXQzMkFycmF5KHNwbGF0Q291bnQgKiAzKTtcclxuICAgICAgICB0aGlzLmZpbGxTcGxhdERhdGFBcnJheXMobnVsbCwgbnVsbCwgbnVsbCwgZmxvYXRDZW50ZXJzLCBudWxsLCBudWxsLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHN0YXJ0KTtcclxuICAgICAgICBpZiAoIXBhZEZvdXIpIHJldHVybiBmbG9hdENlbnRlcnM7XHJcbiAgICAgICAgbGV0IHBhZGRlZEZsb2F0Q2VudGVycyA9IG5ldyBGbG9hdDMyQXJyYXkoc3BsYXRDb3VudCAqIDQpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsYXRDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgMzsgdCsrKSB7XHJcbiAgICAgICAgICAgICAgICBwYWRkZWRGbG9hdENlbnRlcnNbaSAqIDQgKyB0XSA9IGZsb2F0Q2VudGVyc1tpICogMyArIHRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhZGRlZEZsb2F0Q2VudGVyc1tpICogNCArIDNdID0gMS4wO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFkZGVkRmxvYXRDZW50ZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBjZW50ZXIgZm9yIGEgc3BsYXQsIHRyYW5zZm9ybWVkIGFzIGFwcHJvcHJpYXRlLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGdsb2JhbEluZGV4IEdsb2JhbCBpbmRleCBvZiBzcGxhdFxyXG4gICAgICogQHBhcmFtIHtUSFJFRS5WZWN0b3IzfSBvdXRDZW50ZXIgVEhSRUUuVmVjdG9yMyBpbnN0YW5jZSBpbiB3aGljaCB0byBzdG9yZSBzcGxhdCBjZW50ZXJcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXBwbHlTY2VuZVRyYW5zZm9ybSBCeSBkZWZhdWx0LCBpZiB0aGUgc3BsYXQgbWVzaCBpcyBzdGF0aWMsIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIHNjZW5lIHRvIHdoaWNoIHRoZSBzcGxhdCBhdFxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWxJbmRleCcgYmVsb25ncyB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHNwbGF0IGNlbnRlci4gSWYgJ2FwcGx5U2NlbmVUcmFuc2Zvcm0nIGlzIHRydWUsXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNjZW5lIHRyYW5zZm9ybSB3aWxsIGFsd2F5cyBiZSBhcHBsaWVkIGFuZCBpZiAnYXBwbHlTY2VuZVRyYW5zZm9ybScgaXMgZmFsc2UsIHRoZVxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjZW5lIHRyYW5zZm9ybSB3aWxsIG5ldmVyIGJlIGFwcGxpZWQuIElmIHVuZGVmaW5lZCwgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2lsbCBhcHBseS5cclxuICAgICAqL1xyXG4gICAgZ2V0U3BsYXRDZW50ZXIgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1zT2JqID0ge307XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtb3JwaGVkTWVzaCwgZ2xvYmFsSW5kZXgsIG91dENlbnRlciwgYXBwbHlTY2VuZVRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldExvY2FsU3BsYXRQYXJhbWV0ZXJzKGdsb2JhbEluZGV4LCBwYXJhbXNPYmosIGFwcGx5U2NlbmVUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICBwYXJhbXNPYmouc3BsYXRCdWZmZXIuZ2V0U3BsYXRDZW50ZXIobW9ycGhlZE1lc2gsIHBhcmFtc09iai5sb2NhbEluZGV4LCBvdXRDZW50ZXIsIHBhcmFtc09iai5zY2VuZVRyYW5zZm9ybSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB9KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIHNjYWxlIGFuZCByb3RhdGlvbiBmb3IgYSBzcGxhdCwgdHJhbnNmb3JtZWQgYXMgYXBwcm9wcmlhdGUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZ2xvYmFsSW5kZXggR2xvYmFsIGluZGV4IG9mIHNwbGF0XHJcbiAgICAgKiBAcGFyYW0ge1RIUkVFLlZlY3RvcjN9IG91dFNjYWxlIFRIUkVFLlZlY3RvcjMgaW5zdGFuY2UgaW4gd2hpY2ggdG8gc3RvcmUgc3BsYXQgc2NhbGVcclxuICAgICAqIEBwYXJhbSB7VEhSRUUuUXVhdGVybmlvbn0gb3V0Um90YXRpb24gVEhSRUUuUXVhdGVybmlvbiBpbnN0YW5jZSBpbiB3aGljaCB0byBzdG9yZSBzcGxhdCByb3RhdGlvblxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBhcHBseVNjZW5lVHJhbnNmb3JtIEJ5IGRlZmF1bHQsIGlmIHRoZSBzcGxhdCBtZXNoIGlzIHN0YXRpYywgdGhlIHRyYW5zZm9ybSBvZiB0aGUgc2NlbmUgdG8gd2hpY2ggdGhlIHNwbGF0IGF0XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsb2JhbEluZGV4JyBiZWxvbmdzIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgc3BsYXQgc2NhbGUgYW5kIHJvdGF0aW9uLiBJZlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBseVNjZW5lVHJhbnNmb3JtJyBpcyB0cnVlLCB0aGUgc2NlbmUgdHJhbnNmb3JtIHdpbGwgYWx3YXlzIGJlIGFwcGxpZWQgYW5kIGlmXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGx5U2NlbmVUcmFuc2Zvcm0nIGlzIGZhbHNlLCB0aGUgc2NlbmUgdHJhbnNmb3JtIHdpbGwgbmV2ZXIgYmUgYXBwbGllZC4gSWYgdW5kZWZpbmVkLFxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdpbGwgYXBwbHkuXHJcbiAgICAgKi9cclxuICAgIGdldFNwbGF0U2NhbGVBbmRSb3RhdGlvbiA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICBjb25zdCBwYXJhbXNPYmogPSB7fTtcclxuICAgICAgICBjb25zdCBzY2FsZU92ZXJyaWRlID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGdsb2JhbEluZGV4LCBvdXRTY2FsZSwgb3V0Um90YXRpb24sIGFwcGx5U2NlbmVUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb2NhbFNwbGF0UGFyYW1ldGVycyhnbG9iYWxJbmRleCwgcGFyYW1zT2JqLCBhcHBseVNjZW5lVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgc2NhbGVPdmVycmlkZS54ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBzY2FsZU92ZXJyaWRlLnkgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHNjYWxlT3ZlcnJpZGUueiA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3BsYXRSZW5kZXJNb2RlID09PSBTcGxhdFJlbmRlck1vZGUuVHdvRCkgc2NhbGVPdmVycmlkZS56ID0gMDtcclxuICAgICAgICAgICAgcGFyYW1zT2JqLnNwbGF0QnVmZmVyLmdldFNwbGF0U2NhbGVBbmRSb3RhdGlvbihwYXJhbXNPYmoubG9jYWxJbmRleCwgb3V0U2NhbGUsIG91dFJvdGF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc09iai5zY2VuZVRyYW5zZm9ybSwgc2NhbGVPdmVycmlkZSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB9KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIGNvbG9yIGZvciBhIHNwbGF0LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGdsb2JhbEluZGV4IEdsb2JhbCBpbmRleCBvZiBzcGxhdFxyXG4gICAgICogQHBhcmFtIHtUSFJFRS5WZWN0b3I0fSBvdXRDb2xvciBUSFJFRS5WZWN0b3I0IGluc3RhbmNlIGluIHdoaWNoIHRvIHN0b3JlIHNwbGF0IGNvbG9yXHJcbiAgICAgKi9cclxuICAgIGdldFNwbGF0Q29sb3IgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1zT2JqID0ge307XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihnbG9iYWxJbmRleCwgb3V0Q29sb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb2NhbFNwbGF0UGFyYW1ldGVycyhnbG9iYWxJbmRleCwgcGFyYW1zT2JqKTtcclxuICAgICAgICAgICAgcGFyYW1zT2JqLnNwbGF0QnVmZmVyLmdldFNwbGF0Q29sb3IocGFyYW1zT2JqLmxvY2FsSW5kZXgsIG91dENvbG9yKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgIH0oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JlIHRoZSB0cmFuc2Zvcm0gb2YgdGhlIHNjZW5lIGF0ICdzY2VuZUluZGV4JyBpbiAnb3V0VHJhbnNmb3JtJy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzY2VuZUluZGV4IEluZGV4IG9mIHRoZSBkZXNpcmVkIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0ge1RIUkVFLk1hdHJpeDR9IG91dFRyYW5zZm9ybSBJbnN0YW5jZSBvZiBUSFJFRS5NYXRyaXg0IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBzY2VuZSdzIHRyYW5zZm9ybVxyXG4gICAgICovXHJcbiAgICBnZXRTY2VuZVRyYW5zZm9ybShzY2VuZUluZGV4LCBvdXRUcmFuc2Zvcm0pIHtcclxuICAgICAgICBjb25zdCBzY2VuZSA9IHRoaXMuZ2V0U2NlbmUoc2NlbmVJbmRleCk7XHJcbiAgICAgICAgc2NlbmUudXBkYXRlVHJhbnNmb3JtKHRoaXMuZHluYW1pY01vZGUpO1xyXG4gICAgICAgIG91dFRyYW5zZm9ybS5jb3B5KHNjZW5lLnRyYW5zZm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIHNjZW5lIGF0ICdzY2VuZUluZGV4Jy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzY2VuZUluZGV4IEluZGV4IG9mIHRoZSBkZXNpcmVkIHNjZW5lXHJcbiAgICAgKiBAcmV0dXJuIHtTcGxhdFNjZW5lfVxyXG4gICAgICovXHJcbiAgICBnZXRTY2VuZShzY2VuZUluZGV4KSB7XHJcbiAgICAgICAgaWYgKHNjZW5lSW5kZXggPCAwIHx8IHNjZW5lSW5kZXggPj0gdGhpcy5zY2VuZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3BsYXRNZXNoOjpnZXRTY2VuZSgpIC0+IEludmFsaWQgc2NlbmUgaW5kZXguJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnNjZW5lc1tzY2VuZUluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTY2VuZUNvdW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNjZW5lcy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3BsYXRCdWZmZXJGb3JTcGxhdChnbG9iYWxJbmRleCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjZW5lKHRoaXMuZ2xvYmFsU3BsYXRJbmRleFRvU2NlbmVJbmRleE1hcFtnbG9iYWxJbmRleF0pLnNwbGF0QnVmZmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNjZW5lSW5kZXhGb3JTcGxhdChnbG9iYWxJbmRleCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdsb2JhbFNwbGF0SW5kZXhUb1NjZW5lSW5kZXhNYXBbZ2xvYmFsSW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNjZW5lVHJhbnNmb3JtRm9yU3BsYXQoZ2xvYmFsSW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTY2VuZSh0aGlzLmdsb2JhbFNwbGF0SW5kZXhUb1NjZW5lSW5kZXhNYXBbZ2xvYmFsSW5kZXhdKS50cmFuc2Zvcm07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3BsYXRMb2NhbEluZGV4KGdsb2JhbEluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsU3BsYXRJbmRleFRvTG9jYWxTcGxhdEluZGV4TWFwW2dsb2JhbEluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0SW50ZWdlck1hdHJpeEFycmF5KG1hdHJpeCkge1xyXG4gICAgICAgIGNvbnN0IG1hdHJpeEVsZW1lbnRzID0gbWF0cml4LmVsZW1lbnRzO1xyXG4gICAgICAgIGNvbnN0IGludE1hdHJpeEFycmF5ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGludE1hdHJpeEFycmF5W2ldID0gTWF0aC5yb3VuZChtYXRyaXhFbGVtZW50c1tpXSAqIDEwMDAuMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnRNYXRyaXhBcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wdXRlQm91bmRpbmdCb3goYXBwbHlTY2VuZVRyYW5zZm9ybXMgPSBmYWxzZSwgc2NlbmVJbmRleCkge1xyXG4gICAgICAgIGxldCBzcGxhdENvdW50ID0gdGhpcy5nZXRTcGxhdENvdW50KCk7XHJcbiAgICAgICAgaWYgKHNjZW5lSW5kZXggIT09IHVuZGVmaW5lZCAmJiBzY2VuZUluZGV4ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChzY2VuZUluZGV4IDwgMCB8fCBzY2VuZUluZGV4ID49IHRoaXMuc2NlbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTcGxhdE1lc2g6OmNvbXB1dGVCb3VuZGluZ0JveCgpIC0+IEludmFsaWQgc2NlbmUgaW5kZXguJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3BsYXRDb3VudCA9IHRoaXMuc2NlbmVzW3NjZW5lSW5kZXhdLnNwbGF0QnVmZmVyLmdldFNwbGF0Q291bnQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZsb2F0Q2VudGVycyA9IG5ldyBGbG9hdDMyQXJyYXkoc3BsYXRDb3VudCAqIDMpO1xyXG4gICAgICAgIHRoaXMuZmlsbFNwbGF0RGF0YUFycmF5cyhudWxsLCBudWxsLCBudWxsLCBmbG9hdENlbnRlcnMsIG51bGwsIG51bGwsIGFwcGx5U2NlbmVUcmFuc2Zvcm1zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHNjZW5lSW5kZXgpO1xyXG5cclxuICAgICAgICBjb25zdCBtaW4gPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIGNvbnN0IG1heCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxhdENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gaSAqIDM7XHJcbiAgICAgICAgICAgIGNvbnN0IHggPSBmbG9hdENlbnRlcnNbb2Zmc2V0XTtcclxuICAgICAgICAgICAgY29uc3QgeSA9IGZsb2F0Q2VudGVyc1tvZmZzZXQgKyAxXTtcclxuICAgICAgICAgICAgY29uc3QgeiA9IGZsb2F0Q2VudGVyc1tvZmZzZXQgKyAyXTtcclxuICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgeCA8IG1pbi54KSBtaW4ueCA9IHg7XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwIHx8IHkgPCBtaW4ueSkgbWluLnkgPSB5O1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCB6IDwgbWluLnopIG1pbi56ID0gejtcclxuICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgeCA+IG1heC54KSBtYXgueCA9IHg7XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwIHx8IHkgPiBtYXgueSkgbWF4LnkgPSB5O1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCB6ID4gbWF4LnopIG1heC56ID0gejtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgQm94MyhtaW4sIG1heCk7XHJcbiAgICB9XHJcbn0iLCIvKipcclxuICogRGlyZWN0TG9hZEVycm9yXHJcbiAqIFxyXG4gKiBEZXJpdmVkIGZyb20gQG1ra2VsbG9nZy9nYXVzc2lhbi1zcGxhdHMtM2QgKE1JVCBMaWNlbnNlKVxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWtrZWxsb2dnL0dhdXNzaWFuU3BsYXRzM0RcclxuICogXHJcbiAqIE1pbm9yIGVuaGFuY2VtZW50OiBBZGRlZCB0aGlzLm5hbWUgcHJvcGVydHkgZm9yIGJldHRlciBlcnJvciBpZGVudGlmaWNhdGlvbi5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEaXJlY3RMb2FkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihtc2cpIHtcclxuICAgICAgICBzdXBlcihtc2cpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICdEaXJlY3RMb2FkRXJyb3InO1xyXG4gICAgfVxyXG59XHJcbiIsIi8qKlxyXG4gKiBVbmNvbXByZXNzZWRTcGxhdEFycmF5XHJcbiAqIFxyXG4gKiBEZXJpdmVkIGZyb20gQG1ra2VsbG9nZy9nYXVzc2lhbi1zcGxhdHMtM2QgKE1JVCBMaWNlbnNlKVxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWtrZWxsb2dnL0dhdXNzaWFuU3BsYXRzM0RcclxuICogXHJcbiAqIFRoaXMgZmlsZSBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbC5cclxuICogSW1wb3J0IHBhdGhzIGFkanVzdGVkIGZvciBnc3BsYXQtZmxhbWUtYXZhdGFyIHBhY2thZ2Ugc3RydWN0dXJlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IGdldFNwaGVyaWNhbEhhcm1vbmljc0NvbXBvbmVudENvdW50Rm9yRGVncmVlIH0gZnJvbSAnLi4vdXRpbHMvVXRpbC5qcyc7XHJcblxyXG5jb25zdCBCQVNFX0NPTVBPTkVOVF9DT1VOVCA9IDE0O1xyXG5cclxuZXhwb3J0IGNsYXNzIFVuY29tcHJlc3NlZFNwbGF0QXJyYXkge1xyXG5cclxuICAgIHN0YXRpYyBPRkZTRVQgPSB7XHJcbiAgICAgICAgWDogMCxcclxuICAgICAgICBZOiAxLFxyXG4gICAgICAgIFo6IDIsXHJcbiAgICAgICAgU0NBTEUwOiAzLFxyXG4gICAgICAgIFNDQUxFMTogNCxcclxuICAgICAgICBTQ0FMRTI6IDUsXHJcbiAgICAgICAgUk9UQVRJT04wOiA2LFxyXG4gICAgICAgIFJPVEFUSU9OMTogNyxcclxuICAgICAgICBST1RBVElPTjI6IDgsXHJcbiAgICAgICAgUk9UQVRJT04zOiA5LFxyXG4gICAgICAgIEZEQzA6IDEwLFxyXG4gICAgICAgIEZEQzE6IDExLFxyXG4gICAgICAgIEZEQzI6IDEyLFxyXG4gICAgICAgIE9QQUNJVFk6IDEzLFxyXG4gICAgICAgIEZSQzA6IDE0LFxyXG4gICAgICAgIEZSQzE6IDE1LFxyXG4gICAgICAgIEZSQzI6IDE2LFxyXG4gICAgICAgIEZSQzM6IDE3LFxyXG4gICAgICAgIEZSQzQ6IDE4LFxyXG4gICAgICAgIEZSQzU6IDE5LFxyXG4gICAgICAgIEZSQzY6IDIwLFxyXG4gICAgICAgIEZSQzc6IDIxLFxyXG4gICAgICAgIEZSQzg6IDIyLFxyXG4gICAgICAgIEZSQzk6IDIzLFxyXG4gICAgICAgIEZSQzEwOiAyNCxcclxuICAgICAgICBGUkMxMTogMjUsXHJcbiAgICAgICAgRlJDMTI6IDI2LFxyXG4gICAgICAgIEZSQzEzOiAyNyxcclxuICAgICAgICBGUkMxNDogMjgsXHJcbiAgICAgICAgRlJDMTU6IDI5LFxyXG4gICAgICAgIEZSQzE2OiAzMCxcclxuICAgICAgICBGUkMxNzogMzEsXHJcbiAgICAgICAgRlJDMTg6IDMyLFxyXG4gICAgICAgIEZSQzE5OiAzMyxcclxuICAgICAgICBGUkMyMDogMzQsXHJcbiAgICAgICAgRlJDMjE6IDM1LFxyXG4gICAgICAgIEZSQzIyOiAzNixcclxuICAgICAgICBGUkMyMzogMzdcclxuICAgIH07XHJcblxyXG4gICAgY29uc3RydWN0b3Ioc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gMCkge1xyXG4gICAgICAgIHRoaXMuc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlO1xyXG4gICAgICAgIHRoaXMuc3BoZXJpY2FsSGFybW9uaWNzQ291bnQgPSBnZXRTcGhlcmljYWxIYXJtb25pY3NDb21wb25lbnRDb3VudEZvckRlZ3JlZSh0aGlzLnNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRDb3VudCA9IHRoaXMuc3BoZXJpY2FsSGFybW9uaWNzQ291bnQgKyBCQVNFX0NPTVBPTkVOVF9DT1VOVDtcclxuICAgICAgICB0aGlzLmRlZmF1bHRTcGhlcmljYWxIYXJtb25pY3MgPSBuZXcgQXJyYXkodGhpcy5zcGhlcmljYWxIYXJtb25pY3NDb3VudCkuZmlsbCgwKTtcclxuICAgICAgICB0aGlzLnNwbGF0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3BsYXRDb3VudCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNyZWF0ZVNwbGF0KHNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA9IDApIHtcclxuICAgICAgICBjb25zdCBiYXNlU3BsYXQgPSBbMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XHJcbiAgICAgICAgbGV0IHNoRW50cmllcyA9IGdldFNwaGVyaWNhbEhhcm1vbmljc0NvbXBvbmVudENvdW50Rm9yRGVncmVlKHNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaEVudHJpZXM7IGkrKykgYmFzZVNwbGF0LnB1c2goMCk7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VTcGxhdDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRTcGxhdChzcGxhdCkge1xyXG4gICAgICAgIHRoaXMuc3BsYXRzLnB1c2goc3BsYXQpO1xyXG4gICAgICAgIHRoaXMuc3BsYXRDb3VudCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNwbGF0KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3BsYXRzW2luZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICBhZGREZWZhdWx0U3BsYXQoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3U3BsYXQgPSBVbmNvbXByZXNzZWRTcGxhdEFycmF5LmNyZWF0ZVNwbGF0KHRoaXMuc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKTtcclxuICAgICAgICB0aGlzLmFkZFNwbGF0KG5ld1NwbGF0KTtcclxuICAgICAgICByZXR1cm4gbmV3U3BsYXQ7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU3BsYXRGcm9tQ29tb25lbnRzKHgsIHksIHosIHNjYWxlMCwgc2NhbGUxLCBzY2FsZTIsIHJvdDAsIHJvdDEsIHJvdDIsIHJvdDMsIHIsIGcsIGIsIG9wYWNpdHksIC4uLnJlc3QpIHtcclxuICAgICAgICBjb25zdCBuZXdTcGxhdCA9IFt4LCB5LCB6LCBzY2FsZTAsIHNjYWxlMSwgc2NhbGUyLCByb3QwLCByb3QxLCByb3QyLCByb3QzLCByLCBnLCBiLCBvcGFjaXR5LCAuLi50aGlzLmRlZmF1bHRTcGhlcmljYWxIYXJtb25pY3NdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdC5sZW5ndGggJiYgaSA8IHRoaXMuc3BoZXJpY2FsSGFybW9uaWNzQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBuZXdTcGxhdFtpXSA9IHJlc3RbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkU3BsYXQobmV3U3BsYXQpO1xyXG4gICAgICAgIHJldHVybiBuZXdTcGxhdDtcclxuICAgIH1cclxuXHJcbiAgICBhZGRTcGxhdEZyb21BcnJheShzcmMsIHNyY0luZGV4KSB7XHJcbiAgICAgICAgY29uc3Qgc3JjU3BsYXQgPSBzcmMuc3BsYXRzW3NyY0luZGV4XTtcclxuICAgICAgICBjb25zdCBuZXdTcGxhdCA9IFVuY29tcHJlc3NlZFNwbGF0QXJyYXkuY3JlYXRlU3BsYXQodGhpcy5zcGhlcmljYWxIYXJtb25pY3NEZWdyZWUpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb21wb25lbnRDb3VudCAmJiBpIDwgc3JjU3BsYXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbmV3U3BsYXRbaV0gPSBzcmNTcGxhdFtpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZGRTcGxhdChuZXdTcGxhdCk7XHJcbiAgICB9XHJcbn0iLCIvKipcclxuICogU3BsYXRCdWZmZXJcclxuICogXHJcbiAqIERlcml2ZWQgZnJvbSBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKiBcclxuICogVGhpcyBmaWxlIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsLlxyXG4gKiBJbXBvcnQgcGF0aHMgYWRqdXN0ZWQgZm9yIGdzcGxhdC1mbGFtZS1hdmF0YXIgcGFja2FnZSBzdHJ1Y3R1cmUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgRGF0YVV0aWxzLCBNYXRyaXgzLCBNYXRyaXg0LCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQgeyBVbmNvbXByZXNzZWRTcGxhdEFycmF5IH0gZnJvbSAnLi9VbmNvbXByZXNzZWRTcGxhdEFycmF5LmpzJztcclxuaW1wb3J0IHsgY2xhbXAsIGdldFNwaGVyaWNhbEhhcm1vbmljc0NvbXBvbmVudENvdW50Rm9yRGVncmVlLCBEZWZhdWx0U3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uSGFsZlJhbmdlLCBjb252ZXJ0QmV0d2VlbkNvbXByZXNzaW9uTGV2ZWxzIH0gZnJvbSAnLi4vdXRpbHMvVXRpbC5qcyc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL2VudW1zL0VuZ2luZUNvbnN0YW50cy5qcyc7XHJcblxyXG4vKipcclxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNvcHkgYnl0ZXMgYmV0d2VlbiBidWZmZXJzXHJcbiAqL1xyXG5jb25zdCBjb3B5QmV0d2VlbkJ1ZmZlcnMgPSAoc3JjQnVmZmVyLCBzcmNPZmZzZXQsIGRlc3RCdWZmZXIsIGRlc3RPZmZzZXQsIGJ5dGVDb3VudCA9IDApID0+IHtcclxuICAgIGNvbnN0IHNyYyA9IG5ldyBVaW50OEFycmF5KHNyY0J1ZmZlciwgc3JjT2Zmc2V0KTtcclxuICAgIGNvbnN0IGRlc3QgPSBuZXcgVWludDhBcnJheShkZXN0QnVmZmVyLCBkZXN0T2Zmc2V0KTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNvdW50OyBpKyspIHtcclxuICAgICAgICBkZXN0W2ldID0gc3JjW2ldO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gQ29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBoZWxwZXIgZnVuY3Rpb25zXHJcbmNvbnN0IERlZmF1bHRTcGhlcmljYWxIYXJtb25pY3M4Qml0Q29tcHJlc3Npb25SYW5nZSA9IENvbnN0YW50cy5TcGhlcmljYWxIYXJtb25pY3M4Qml0Q29tcHJlc3Npb25SYW5nZTtcclxuXHJcbmNvbnN0IHRvSGFsZkZsb2F0ID0gRGF0YVV0aWxzLnRvSGFsZkZsb2F0LmJpbmQoRGF0YVV0aWxzKTtcclxuY29uc3QgZnJvbUhhbGZGbG9hdCA9IERhdGFVdGlscy5mcm9tSGFsZkZsb2F0LmJpbmQoRGF0YVV0aWxzKTtcclxuXHJcbmNvbnN0IHRvVW5jb21wcmVzc2VkRmxvYXQgPSAoZiwgY29tcHJlc3Npb25MZXZlbCwgaXNTSCA9IGZhbHNlLCByYW5nZThCaXRNaW4sIHJhbmdlOEJpdE1heCkgPT4ge1xyXG4gICAgaWYgKGNvbXByZXNzaW9uTGV2ZWwgPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZjtcclxuICAgIH0gZWxzZSBpZiAoY29tcHJlc3Npb25MZXZlbCA9PT0gMSB8fCBjb21wcmVzc2lvbkxldmVsID09PSAyICYmICFpc1NIKSB7XHJcbiAgICAgICAgcmV0dXJuIERhdGFVdGlscy5mcm9tSGFsZkZsb2F0KGYpO1xyXG4gICAgfSBlbHNlIGlmIChjb21wcmVzc2lvbkxldmVsID09PSAyKSB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21VaW50OChmLCByYW5nZThCaXRNaW4sIHJhbmdlOEJpdE1heCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5jb25zdCB0b1VpbnQ4ID0gKHYsIHJhbmdlTWluLCByYW5nZU1heCkgPT4ge1xyXG4gICAgdiA9IGNsYW1wKHYsIHJhbmdlTWluLCByYW5nZU1heCk7XHJcbiAgICBjb25zdCByYW5nZSA9IChyYW5nZU1heCAtIHJhbmdlTWluKTtcclxuICAgIHJldHVybiBjbGFtcChNYXRoLmZsb29yKCh2IC0gcmFuZ2VNaW4pIC8gcmFuZ2UgKiAyNTUpLCAwLCAyNTUpO1xyXG59O1xyXG5cclxuY29uc3QgZnJvbVVpbnQ4ID0gKHYsIHJhbmdlTWluLCByYW5nZU1heCkgPT4ge1xyXG4gICAgY29uc3QgcmFuZ2UgPSAocmFuZ2VNYXggLSByYW5nZU1pbik7XHJcbiAgICByZXR1cm4gKHYgLyAyNTUgKiByYW5nZSArIHJhbmdlTWluKTtcclxufTtcclxuXHJcbmNvbnN0IGZyb21IYWxmRmxvYXRUb1VpbnQ4ID0gKHYsIHJhbmdlTWluLCByYW5nZU1heCkgPT4ge1xyXG4gICAgcmV0dXJuIHRvVWludDgoZnJvbUhhbGZGbG9hdCh2KSwgcmFuZ2VNaW4sIHJhbmdlTWF4KTtcclxufTtcclxuXHJcbmNvbnN0IGZyb21VaW50OFRvSGFsZkZsb2F0ID0gKHYsIHJhbmdlTWluLCByYW5nZU1heCkgPT4ge1xyXG4gICAgcmV0dXJuIHRvSGFsZkZsb2F0KGZyb21VaW50OCh2LCByYW5nZU1pbiwgcmFuZ2VNYXgpKTtcclxufTtcclxuXHJcbmNvbnN0IGRhdGFWaWV3RmxvYXRGb3JDb21wcmVzc2lvbkxldmVsID0gKGRhdGFWaWV3LCBmbG9hdEluZGV4LCBjb21wcmVzc2lvbkxldmVsLCBpc1NIID0gZmFsc2UpID0+IHtcclxuICAgIGlmIChjb21wcmVzc2lvbkxldmVsID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFWaWV3LmdldEZsb2F0MzIoZmxvYXRJbmRleCAqIDQsIHRydWUpO1xyXG4gICAgfSBlbHNlIGlmIChjb21wcmVzc2lvbkxldmVsID09PSAxIHx8IGNvbXByZXNzaW9uTGV2ZWwgPT09IDIgJiYgIWlzU0gpIHtcclxuICAgICAgICByZXR1cm4gZGF0YVZpZXcuZ2V0VWludDE2KGZsb2F0SW5kZXggKiAyLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFWaWV3LmdldFVpbnQ4KGZsb2F0SW5kZXgsIHRydWUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIFNwbGF0QnVmZmVyIHtcclxuXHJcbiAgICBzdGF0aWMgQ3VycmVudE1ham9yVmVyc2lvbiA9IDA7XHJcbiAgICBzdGF0aWMgQ3VycmVudE1pbm9yVmVyc2lvbiA9IDE7XHJcblxyXG4gICAgc3RhdGljIENlbnRlckNvbXBvbmVudENvdW50ID0gMztcclxuICAgIHN0YXRpYyBTY2FsZUNvbXBvbmVudENvdW50ID0gMztcclxuICAgIHN0YXRpYyBSb3RhdGlvbkNvbXBvbmVudENvdW50ID0gNDtcclxuICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudENvdW50ID0gNDtcclxuICAgIHN0YXRpYyBDb3ZhcmlhbmNlQ29tcG9uZW50Q291bnQgPSA2O1xyXG5cclxuICAgIHN0YXRpYyBTcGxhdFNjYWxlT2Zmc2V0RmxvYXQgPSAzO1xyXG4gICAgc3RhdGljIFNwbGF0Um90YXRpb25PZmZzZXRGbG9hdCA9IDY7XHJcblxyXG4gICAgc3RhdGljIENvbXByZXNzaW9uTGV2ZWxzID0ge1xyXG4gICAgICAgIDA6IHtcclxuICAgICAgICAgICAgQnl0ZXNQZXJDZW50ZXI6IDEyLFxyXG4gICAgICAgICAgICBCeXRlc1BlclNjYWxlOiAxMixcclxuICAgICAgICAgICAgQnl0ZXNQZXJSb3RhdGlvbjogMTYsXHJcbiAgICAgICAgICAgIEJ5dGVzUGVyQ29sb3I6IDQsXHJcbiAgICAgICAgICAgIFNjYWxlT2Zmc2V0Qnl0ZXM6IDEyLFxyXG4gICAgICAgICAgICBSb3RhdGlvbmZmc2V0Qnl0ZXM6IDI0LFxyXG4gICAgICAgICAgICBDb2xvck9mZnNldEJ5dGVzOiA0MCxcclxuICAgICAgICAgICAgU3BoZXJpY2FsSGFybW9uaWNzT2Zmc2V0Qnl0ZXM6IDQ0LFxyXG4gICAgICAgICAgICBTY2FsZVJhbmdlOiAxLFxyXG4gICAgICAgICAgICBCeXRlc1BlclNwaGVyaWNhbEhhcm1vbmljc0NvbXBvbmVudDogNCxcclxuICAgICAgICAgICAgU3BoZXJpY2FsSGFybW9uaWNzT2Zmc2V0RmxvYXQ6IDExLFxyXG4gICAgICAgICAgICBTcGhlcmljYWxIYXJtb25pY3NEZWdyZWVzOiB7XHJcbiAgICAgICAgICAgICAgICAwOiB7IEJ5dGVzUGVyU3BsYXQ6IDQ0IH0sXHJcbiAgICAgICAgICAgICAgICAxOiB7IEJ5dGVzUGVyU3BsYXQ6IDgwIH0sXHJcbiAgICAgICAgICAgICAgICAyOiB7IEJ5dGVzUGVyU3BsYXQ6IDE0MCB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAxOiB7XHJcbiAgICAgICAgICAgIEJ5dGVzUGVyQ2VudGVyOiA2LFxyXG4gICAgICAgICAgICBCeXRlc1BlclNjYWxlOiA2LFxyXG4gICAgICAgICAgICBCeXRlc1BlclJvdGF0aW9uOiA4LFxyXG4gICAgICAgICAgICBCeXRlc1BlckNvbG9yOiA0LFxyXG4gICAgICAgICAgICBTY2FsZU9mZnNldEJ5dGVzOiA2LFxyXG4gICAgICAgICAgICBSb3RhdGlvbmZmc2V0Qnl0ZXM6IDEyLFxyXG4gICAgICAgICAgICBDb2xvck9mZnNldEJ5dGVzOiAyMCxcclxuICAgICAgICAgICAgU3BoZXJpY2FsSGFybW9uaWNzT2Zmc2V0Qnl0ZXM6IDI0LFxyXG4gICAgICAgICAgICBTY2FsZVJhbmdlOiAzMjc2NyxcclxuICAgICAgICAgICAgQnl0ZXNQZXJTcGhlcmljYWxIYXJtb25pY3NDb21wb25lbnQ6IDIsXHJcbiAgICAgICAgICAgIFNwaGVyaWNhbEhhcm1vbmljc09mZnNldEZsb2F0OiAxMixcclxuICAgICAgICAgICAgU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlczoge1xyXG4gICAgICAgICAgICAgICAgMDogeyBCeXRlc1BlclNwbGF0OiAyNCB9LFxyXG4gICAgICAgICAgICAgICAgMTogeyBCeXRlc1BlclNwbGF0OiA0MiB9LFxyXG4gICAgICAgICAgICAgICAgMjogeyBCeXRlc1BlclNwbGF0OiA3MiB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAyOiB7XHJcbiAgICAgICAgICAgIEJ5dGVzUGVyQ2VudGVyOiA2LFxyXG4gICAgICAgICAgICBCeXRlc1BlclNjYWxlOiA2LFxyXG4gICAgICAgICAgICBCeXRlc1BlclJvdGF0aW9uOiA4LFxyXG4gICAgICAgICAgICBCeXRlc1BlckNvbG9yOiA0LFxyXG4gICAgICAgICAgICBTY2FsZU9mZnNldEJ5dGVzOiA2LFxyXG4gICAgICAgICAgICBSb3RhdGlvbmZmc2V0Qnl0ZXM6IDEyLFxyXG4gICAgICAgICAgICBDb2xvck9mZnNldEJ5dGVzOiAyMCxcclxuICAgICAgICAgICAgU3BoZXJpY2FsSGFybW9uaWNzT2Zmc2V0Qnl0ZXM6IDI0LFxyXG4gICAgICAgICAgICBTY2FsZVJhbmdlOiAzMjc2NyxcclxuICAgICAgICAgICAgQnl0ZXNQZXJTcGhlcmljYWxIYXJtb25pY3NDb21wb25lbnQ6IDEsXHJcbiAgICAgICAgICAgIFNwaGVyaWNhbEhhcm1vbmljc09mZnNldEZsb2F0OiAxMixcclxuICAgICAgICAgICAgU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlczoge1xyXG4gICAgICAgICAgICAgICAgMDogeyBCeXRlc1BlclNwbGF0OiAyNCB9LFxyXG4gICAgICAgICAgICAgICAgMTogeyBCeXRlc1BlclNwbGF0OiAzMyB9LFxyXG4gICAgICAgICAgICAgICAgMjogeyBCeXRlc1BlclNwbGF0OiA0OCB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBzdGF0aWMgQ292YXJpYW5jZVNpemVGbG9hdHMgPSA2O1xyXG5cclxuICAgIHN0YXRpYyBIZWFkZXJTaXplQnl0ZXMgPSA0MDk2O1xyXG4gICAgc3RhdGljIFNlY3Rpb25IZWFkZXJTaXplQnl0ZXMgPSAxMDI0O1xyXG5cclxuICAgIHN0YXRpYyBCdWNrZXRTdG9yYWdlU2l6ZUJ5dGVzID0gMTI7XHJcbiAgICBzdGF0aWMgQnVja2V0U3RvcmFnZVNpemVGbG9hdHMgPSAzO1xyXG5cclxuICAgIHN0YXRpYyBCdWNrZXRCbG9ja1NpemUgPSA1LjA7XHJcbiAgICBzdGF0aWMgQnVja2V0U2l6ZSA9IDI1NjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihidWZmZXJEYXRhLCBzZWNMb2FkZWRDb3VudHNUb01heCA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdEZyb21CdWZmZXIoYnVmZmVyRGF0YSwgc2VjTG9hZGVkQ291bnRzVG9NYXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNwbGF0Q291bnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3BsYXRDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNYXhTcGxhdENvdW50KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1heFNwbGF0Q291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWluU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKCkge1xyXG4gICAgICAgIGxldCBtaW5TcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgc2VjdGlvbi5zcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPCBtaW5TcGhlcmljYWxIYXJtb25pY3NEZWdyZWUpIHtcclxuICAgICAgICAgICAgICAgIG1pblNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA9IHNlY3Rpb24uc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtaW5TcGhlcmljYWxIYXJtb25pY3NEZWdyZWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QnVja2V0SW5kZXgoc2VjdGlvbiwgbG9jYWxTcGxhdEluZGV4KSB7XHJcbiAgICAgICAgbGV0IGJ1Y2tldEluZGV4O1xyXG4gICAgICAgIGNvbnN0IG1heFNwbGF0SW5kZXhJbkZ1bGxCdWNrZXRzID0gc2VjdGlvbi5mdWxsQnVja2V0Q291bnQgKiBzZWN0aW9uLmJ1Y2tldFNpemU7XHJcbiAgICAgICAgaWYgKGxvY2FsU3BsYXRJbmRleCA8IG1heFNwbGF0SW5kZXhJbkZ1bGxCdWNrZXRzKSB7XHJcbiAgICAgICAgICAgIGJ1Y2tldEluZGV4ID0gTWF0aC5mbG9vcihsb2NhbFNwbGF0SW5kZXggLyBzZWN0aW9uLmJ1Y2tldFNpemUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBidWNrZXRTcGxhdEluZGV4ID0gbWF4U3BsYXRJbmRleEluRnVsbEJ1Y2tldHM7XHJcbiAgICAgICAgICAgIGJ1Y2tldEluZGV4ID0gc2VjdGlvbi5mdWxsQnVja2V0Q291bnQ7XHJcbiAgICAgICAgICAgIGxldCBwYXJ0aWFsbHlGdWxsQnVja2V0SW5kZXggPSAwO1xyXG4gICAgICAgICAgICB3aGlsZSAoYnVja2V0U3BsYXRJbmRleCA8IHNlY3Rpb24uc3BsYXRDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRQYXJ0aWFsbHlGaWxsZWRCdWNrZXRTaXplID0gc2VjdGlvbi5wYXJ0aWFsbHlGaWxsZWRCdWNrZXRMZW5ndGhzW3BhcnRpYWxseUZ1bGxCdWNrZXRJbmRleF07XHJcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxTcGxhdEluZGV4ID49IGJ1Y2tldFNwbGF0SW5kZXggJiYgbG9jYWxTcGxhdEluZGV4IDwgYnVja2V0U3BsYXRJbmRleCArIGN1cnJlbnRQYXJ0aWFsbHlGaWxsZWRCdWNrZXRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBidWNrZXRTcGxhdEluZGV4ICs9IGN1cnJlbnRQYXJ0aWFsbHlGaWxsZWRCdWNrZXRTaXplO1xyXG4gICAgICAgICAgICAgICAgYnVja2V0SW5kZXgrKztcclxuICAgICAgICAgICAgICAgIHBhcnRpYWxseUZ1bGxCdWNrZXRJbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBidWNrZXRJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTcGxhdENlbnRlcihtb3JwaGVkTWVzaCwgZ2xvYmFsU3BsYXRJbmRleCwgb3V0Q2VudGVyLCB0cmFuc2Zvcm0pIHtcclxuICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSB0aGlzLmdsb2JhbFNwbGF0SW5kZXhUb1NlY3Rpb25NYXBbZ2xvYmFsU3BsYXRJbmRleF07XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcclxuICAgICAgICBjb25zdCBsb2NhbFNwbGF0SW5kZXggPSBnbG9iYWxTcGxhdEluZGV4IC0gc2VjdGlvbi5zcGxhdENvdW50T2Zmc2V0O1xyXG5cclxuICAgICAgICBjb25zdCBzcmNTcGxhdENlbnRlcnNCYXNlID0gc2VjdGlvbi5ieXRlc1BlclNwbGF0ICogbG9jYWxTcGxhdEluZGV4O1xyXG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuYnVmZmVyRGF0YSwgc2VjdGlvbi5kYXRhQmFzZSArIHNyY1NwbGF0Q2VudGVyc0Jhc2UpO1xyXG5cclxuICAgICAgICBjb25zdCB4ID0gZGF0YVZpZXdGbG9hdEZvckNvbXByZXNzaW9uTGV2ZWwoZGF0YVZpZXcsIDAsIHRoaXMuY29tcHJlc3Npb25MZXZlbCk7XHJcbiAgICAgICAgY29uc3QgeSA9IGRhdGFWaWV3RmxvYXRGb3JDb21wcmVzc2lvbkxldmVsKGRhdGFWaWV3LCAxLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpO1xyXG4gICAgICAgIGNvbnN0IHogPSBkYXRhVmlld0Zsb2F0Rm9yQ29tcHJlc3Npb25MZXZlbChkYXRhVmlldywgMiwgdGhpcy5jb21wcmVzc2lvbkxldmVsKTtcclxuICAgICAgICBpZiAodGhpcy5jb21wcmVzc2lvbkxldmVsID49IDEpIHtcclxuICAgICAgICAgICAgY29uc3QgYnVja2V0SW5kZXggPSB0aGlzLmdldEJ1Y2tldEluZGV4KHNlY3Rpb24sIGxvY2FsU3BsYXRJbmRleCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldEJhc2UgPSBidWNrZXRJbmRleCAqIFNwbGF0QnVmZmVyLkJ1Y2tldFN0b3JhZ2VTaXplRmxvYXRzO1xyXG4gICAgICAgICAgICBjb25zdCBzZiA9IHNlY3Rpb24uY29tcHJlc3Npb25TY2FsZUZhY3RvcjtcclxuICAgICAgICAgICAgY29uc3Qgc3IgPSBzZWN0aW9uLmNvbXByZXNzaW9uU2NhbGVSYW5nZTtcclxuICAgICAgICAgICAgb3V0Q2VudGVyLnggPSAoeCAtIHNyKSAqIHNmICsgc2VjdGlvbi5idWNrZXRBcnJheVtidWNrZXRCYXNlXTtcclxuICAgICAgICAgICAgb3V0Q2VudGVyLnkgPSAoeSAtIHNyKSAqIHNmICsgc2VjdGlvbi5idWNrZXRBcnJheVtidWNrZXRCYXNlICsgMV07XHJcbiAgICAgICAgICAgIG91dENlbnRlci56ID0gKHogLSBzcikgKiBzZiArIHNlY3Rpb24uYnVja2V0QXJyYXlbYnVja2V0QmFzZSArIDJdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG91dENlbnRlci54ID0geDtcclxuICAgICAgICAgICAgb3V0Q2VudGVyLnkgPSB5O1xyXG4gICAgICAgICAgICBvdXRDZW50ZXIueiA9IHo7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvdXRDZW50ZXIueCArPSBtb3JwaGVkTWVzaFtnbG9iYWxTcGxhdEluZGV4ICogMyArIDBdO1xyXG4gICAgICAgIG91dENlbnRlci55ICs9IG1vcnBoZWRNZXNoW2dsb2JhbFNwbGF0SW5kZXggKiAzICsgMV07XHJcbiAgICAgICAgb3V0Q2VudGVyLnogKz0gbW9ycGhlZE1lc2hbZ2xvYmFsU3BsYXRJbmRleCAqIDMgKyAyXTtcclxuXHJcblxyXG4gICAgICAgIGlmICh0cmFuc2Zvcm0pIG91dENlbnRlci5hcHBseU1hdHJpeDQodHJhbnNmb3JtKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTcGxhdFNjYWxlQW5kUm90YXRpb24gPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgY29uc3Qgc2NhbGVNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIGNvbnN0IHJvdGF0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBjb25zdCB0ZW1wTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBjb25zdCB0ZW1wUG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIGNvbnN0IHNjYWxlID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICBjb25zdCByb3RhdGlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihpbmRleCwgb3V0U2NhbGUsIG91dFJvdGF0aW9uLCB0cmFuc2Zvcm0sIHNjYWxlT3ZlcnJpZGUpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkluZGV4ID0gdGhpcy5nbG9iYWxTcGxhdEluZGV4VG9TZWN0aW9uTWFwW2luZGV4XTtcclxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcclxuICAgICAgICAgICAgY29uc3QgbG9jYWxTcGxhdEluZGV4ID0gaW5kZXggLSBzZWN0aW9uLnNwbGF0Q291bnRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzcmNTcGxhdFNjYWxlc0Jhc2UgPSBzZWN0aW9uLmJ5dGVzUGVyU3BsYXQgKiBsb2NhbFNwbGF0SW5kZXggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGxhdEJ1ZmZlci5Db21wcmVzc2lvbkxldmVsc1t0aGlzLmNvbXByZXNzaW9uTGV2ZWxdLlNjYWxlT2Zmc2V0Qnl0ZXM7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyh0aGlzLmJ1ZmZlckRhdGEsIHNlY3Rpb24uZGF0YUJhc2UgKyBzcmNTcGxhdFNjYWxlc0Jhc2UpO1xyXG5cclxuICAgICAgICAgICAgc2NhbGUuc2V0KHRvVW5jb21wcmVzc2VkRmxvYXQoZGF0YVZpZXdGbG9hdEZvckNvbXByZXNzaW9uTGV2ZWwoZGF0YVZpZXcsIDAsIHRoaXMuY29tcHJlc3Npb25MZXZlbCksIHRoaXMuY29tcHJlc3Npb25MZXZlbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICB0b1VuY29tcHJlc3NlZEZsb2F0KGRhdGFWaWV3RmxvYXRGb3JDb21wcmVzc2lvbkxldmVsKGRhdGFWaWV3LCAxLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdG9VbmNvbXByZXNzZWRGbG9hdChkYXRhVmlld0Zsb2F0Rm9yQ29tcHJlc3Npb25MZXZlbChkYXRhVmlldywgMiwgdGhpcy5jb21wcmVzc2lvbkxldmVsKSwgdGhpcy5jb21wcmVzc2lvbkxldmVsKSk7XHJcbiAgICAgICAgICAgIGlmIChzY2FsZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2NhbGVPdmVycmlkZS54ICE9PSB1bmRlZmluZWQpIHNjYWxlLnggPSBzY2FsZU92ZXJyaWRlLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2NhbGVPdmVycmlkZS55ICE9PSB1bmRlZmluZWQpIHNjYWxlLnkgPSBzY2FsZU92ZXJyaWRlLnk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2NhbGVPdmVycmlkZS56ICE9PSB1bmRlZmluZWQpIHNjYWxlLnogPSBzY2FsZU92ZXJyaWRlLno7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJvdGF0aW9uLnNldCh0b1VuY29tcHJlc3NlZEZsb2F0KGRhdGFWaWV3RmxvYXRGb3JDb21wcmVzc2lvbkxldmVsKGRhdGFWaWV3LCA0LCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG9VbmNvbXByZXNzZWRGbG9hdChkYXRhVmlld0Zsb2F0Rm9yQ29tcHJlc3Npb25MZXZlbChkYXRhVmlldywgNSwgdGhpcy5jb21wcmVzc2lvbkxldmVsKSwgdGhpcy5jb21wcmVzc2lvbkxldmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvVW5jb21wcmVzc2VkRmxvYXQoZGF0YVZpZXdGbG9hdEZvckNvbXByZXNzaW9uTGV2ZWwoZGF0YVZpZXcsIDYsIHRoaXMuY29tcHJlc3Npb25MZXZlbCksIHRoaXMuY29tcHJlc3Npb25MZXZlbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuY29tcHJlc3NlZEZsb2F0KGRhdGFWaWV3RmxvYXRGb3JDb21wcmVzc2lvbkxldmVsKGRhdGFWaWV3LCAzLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIHNjYWxlTWF0cml4Lm1ha2VTY2FsZShzY2FsZS54LCBzY2FsZS55LCBzY2FsZS56KTtcclxuICAgICAgICAgICAgICAgIHJvdGF0aW9uTWF0cml4Lm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRlbXBNYXRyaXguY29weShzY2FsZU1hdHJpeCkubXVsdGlwbHkocm90YXRpb25NYXRyaXgpLm11bHRpcGx5KHRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgICB0ZW1wTWF0cml4LmRlY29tcG9zZSh0ZW1wUG9zaXRpb24sIG91dFJvdGF0aW9uLCBvdXRTY2FsZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvdXRTY2FsZS5jb3B5KHNjYWxlKTtcclxuICAgICAgICAgICAgICAgIG91dFJvdGF0aW9uLmNvcHkocm90YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB9KCk7XHJcblxyXG4gICAgZ2V0U3BsYXRDb2xvcihnbG9iYWxTcGxhdEluZGV4LCBvdXRDb2xvcikge1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25JbmRleCA9IHRoaXMuZ2xvYmFsU3BsYXRJbmRleFRvU2VjdGlvbk1hcFtnbG9iYWxTcGxhdEluZGV4XTtcclxuICAgICAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IGxvY2FsU3BsYXRJbmRleCA9IGdsb2JhbFNwbGF0SW5kZXggLSBzZWN0aW9uLnNwbGF0Q291bnRPZmZzZXQ7XHJcblxyXG4gICAgICAgIGNvbnN0IHNyY1NwbGF0Q29sb3JzQmFzZSA9IHNlY3Rpb24uYnl0ZXNQZXJTcGxhdCAqIGxvY2FsU3BsYXRJbmRleCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BsYXRCdWZmZXIuQ29tcHJlc3Npb25MZXZlbHNbdGhpcy5jb21wcmVzc2lvbkxldmVsXS5Db2xvck9mZnNldEJ5dGVzO1xyXG4gICAgICAgIGNvbnN0IHNwbGF0Q29sb3JzQXJyYXkgPSBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlckRhdGEsIHNlY3Rpb24uZGF0YUJhc2UgKyBzcmNTcGxhdENvbG9yc0Jhc2UsIDQpO1xyXG5cclxuICAgICAgICBvdXRDb2xvci5zZXQoc3BsYXRDb2xvcnNBcnJheVswXSwgc3BsYXRDb2xvcnNBcnJheVsxXSxcclxuICAgICAgICAgICAgICAgICAgICAgc3BsYXRDb2xvcnNBcnJheVsyXSwgc3BsYXRDb2xvcnNBcnJheVszXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsbFNwbGF0Q2VudGVyQXJyYXkobW9ycGhlZE1lc2gsIG91dENlbnRlckFycmF5LCB0cmFuc2Zvcm0sIHNyY0Zyb20sIHNyY1RvLCBkZXN0RnJvbSkge1xyXG4gICAgICAgIGNvbnN0IHNwbGF0Q291bnQgPSB0aGlzLnNwbGF0Q291bnQ7XHJcblxyXG4gICAgICAgIHNyY0Zyb20gPSBzcmNGcm9tIHx8IDA7XHJcbiAgICAgICAgc3JjVG8gPSBzcmNUbyB8fCBzcGxhdENvdW50IC0gMTtcclxuICAgICAgICBpZiAoZGVzdEZyb20gPT09IHVuZGVmaW5lZCkgZGVzdEZyb20gPSBzcmNGcm9tO1xyXG5cclxuICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBzcmNGcm9tOyBpIDw9IHNyY1RvOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkluZGV4ID0gdGhpcy5nbG9iYWxTcGxhdEluZGV4VG9TZWN0aW9uTWFwW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xyXG4gICAgICAgICAgICBjb25zdCBsb2NhbFNwbGF0SW5kZXggPSBpIC0gc2VjdGlvbi5zcGxhdENvdW50T2Zmc2V0O1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXJEZXN0QmFzZSA9IChpIC0gc3JjRnJvbSArIGRlc3RGcm9tKSAqIFNwbGF0QnVmZmVyLkNlbnRlckNvbXBvbmVudENvdW50O1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3JjU3BsYXRDZW50ZXJzQmFzZSA9IHNlY3Rpb24uYnl0ZXNQZXJTcGxhdCAqIGxvY2FsU3BsYXRJbmRleDtcclxuICAgICAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5idWZmZXJEYXRhLCBzZWN0aW9uLmRhdGFCYXNlICsgc3JjU3BsYXRDZW50ZXJzQmFzZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB4ID0gZGF0YVZpZXdGbG9hdEZvckNvbXByZXNzaW9uTGV2ZWwoZGF0YVZpZXcsIDAsIHRoaXMuY29tcHJlc3Npb25MZXZlbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHkgPSBkYXRhVmlld0Zsb2F0Rm9yQ29tcHJlc3Npb25MZXZlbChkYXRhVmlldywgMSwgdGhpcy5jb21wcmVzc2lvbkxldmVsKTtcclxuICAgICAgICAgICAgY29uc3QgeiA9IGRhdGFWaWV3RmxvYXRGb3JDb21wcmVzc2lvbkxldmVsKGRhdGFWaWV3LCAyLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb21wcmVzc2lvbkxldmVsID49IDEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1Y2tldEluZGV4ID0gdGhpcy5nZXRCdWNrZXRJbmRleChzZWN0aW9uLCBsb2NhbFNwbGF0SW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnVja2V0QmFzZSA9IGJ1Y2tldEluZGV4ICogU3BsYXRCdWZmZXIuQnVja2V0U3RvcmFnZVNpemVGbG9hdHM7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZiA9IHNlY3Rpb24uY29tcHJlc3Npb25TY2FsZUZhY3RvcjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNyID0gc2VjdGlvbi5jb21wcmVzc2lvblNjYWxlUmFuZ2U7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXIueCA9ICh4IC0gc3IpICogc2YgKyBzZWN0aW9uLmJ1Y2tldEFycmF5W2J1Y2tldEJhc2VdO1xyXG4gICAgICAgICAgICAgICAgY2VudGVyLnkgPSAoeSAtIHNyKSAqIHNmICsgc2VjdGlvbi5idWNrZXRBcnJheVtidWNrZXRCYXNlICsgMV07XHJcbiAgICAgICAgICAgICAgICBjZW50ZXIueiA9ICh6IC0gc3IpICogc2YgKyBzZWN0aW9uLmJ1Y2tldEFycmF5W2J1Y2tldEJhc2UgKyAyXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNlbnRlci54ID0geDtcclxuICAgICAgICAgICAgICAgIGNlbnRlci55ID0geTtcclxuICAgICAgICAgICAgICAgIGNlbnRlci56ID0gejtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXIuYXBwbHlNYXRyaXg0KHRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG91dENlbnRlckFycmF5W2NlbnRlckRlc3RCYXNlXSA9IGNlbnRlci54ICsgbW9ycGhlZE1lc2hbaSAqIDMgKyAwXTtcclxuICAgICAgICAgICAgb3V0Q2VudGVyQXJyYXlbY2VudGVyRGVzdEJhc2UgKyAxXSA9IGNlbnRlci55ICsgbW9ycGhlZE1lc2hbaSAqIDMgKyAxXTtcclxuICAgICAgICAgICAgb3V0Q2VudGVyQXJyYXlbY2VudGVyRGVzdEJhc2UgKyAyXSA9IGNlbnRlci56ICsgbW9ycGhlZE1lc2hbaSAqIDMgKyAyXTtcclxuXHJcbiAgICAgICAgICAgIC8vIG91dENlbnRlckFycmF5W2NlbnRlckRlc3RCYXNlXSA9IG1vcnBoZWRNZXNoW2NlbnRlckRlc3RCYXNlXTtcclxuICAgICAgICAgICAgLy8gb3V0Q2VudGVyQXJyYXlbY2VudGVyRGVzdEJhc2UgKyAxXSA9IG1vcnBoZWRNZXNoW2NlbnRlckRlc3RCYXNlICsgMV07XHJcbiAgICAgICAgICAgIC8vIG91dENlbnRlckFycmF5W2NlbnRlckRlc3RCYXNlICsgMl0gPSBtb3JwaGVkTWVzaFtjZW50ZXJEZXN0QmFzZSArIDJdO1xyXG5cclxuICAgICAgICAgICAgLy8gb3V0Q2VudGVyQXJyYXlbY2VudGVyRGVzdEJhc2VdID0gY2VudGVyLng7XHJcbiAgICAgICAgICAgIC8vIG91dENlbnRlckFycmF5W2NlbnRlckRlc3RCYXNlICsgMV0gPSBjZW50ZXIueTtcclxuICAgICAgICAgICAgLy8gb3V0Q2VudGVyQXJyYXlbY2VudGVyRGVzdEJhc2UgKyAyXSA9IGNlbnRlci56O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmaWxsU3BsYXRTY2FsZVJvdGF0aW9uQXJyYXkgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgY29uc3Qgc2NhbGVNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIGNvbnN0IHJvdGF0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBjb25zdCB0ZW1wTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBjb25zdCBzY2FsZSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgY29uc3Qgcm90YXRpb24gPSBuZXcgUXVhdGVybmlvbigpO1xyXG4gICAgICAgIGNvbnN0IHRlbXBQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGVuc3VyZVBvc2l0aXZlVyA9IChxdWF0ZXJuaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZsaXAgPSBxdWF0ZXJuaW9uLncgPCAwID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggKj0gZmxpcDtcclxuICAgICAgICAgICAgcXVhdGVybmlvbi55ICo9IGZsaXA7XHJcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueiAqPSBmbGlwO1xyXG4gICAgICAgICAgICBxdWF0ZXJuaW9uLncgKj0gZmxpcDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24ob3V0U2NhbGVBcnJheSwgb3V0Um90YXRpb25BcnJheSwgdHJhbnNmb3JtLCBzcmNGcm9tLCBzcmNUbywgZGVzdEZyb20sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRPdXRwdXRDb21wcmVzc2lvbkxldmVsLCBzY2FsZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGF0Q291bnQgPSB0aGlzLnNwbGF0Q291bnQ7XHJcblxyXG4gICAgICAgICAgICBzcmNGcm9tID0gc3JjRnJvbSB8fCAwO1xyXG4gICAgICAgICAgICBzcmNUbyA9IHNyY1RvIHx8IHNwbGF0Q291bnQgLSAxO1xyXG4gICAgICAgICAgICBpZiAoZGVzdEZyb20gPT09IHVuZGVmaW5lZCkgZGVzdEZyb20gPSBzcmNGcm9tO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0Q29udmVyc2lvbiA9ICh2YWx1ZSwgc3JjQ29tcHJlc3Npb25MZXZlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNyY0NvbXByZXNzaW9uTGV2ZWwgPT09IHVuZGVmaW5lZCkgc3JjQ29tcHJlc3Npb25MZXZlbCA9IHRoaXMuY29tcHJlc3Npb25MZXZlbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0QmV0d2VlbkNvbXByZXNzaW9uTGV2ZWxzKHZhbHVlLCBzcmNDb21wcmVzc2lvbkxldmVsLCBkZXNpcmVkT3V0cHV0Q29tcHJlc3Npb25MZXZlbCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3JjRnJvbTsgaSA8PSBzcmNUbzsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSB0aGlzLmdsb2JhbFNwbGF0SW5kZXhUb1NlY3Rpb25NYXBbaV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxTcGxhdEluZGV4ID0gaSAtIHNlY3Rpb24uc3BsYXRDb3VudE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzcmNTcGxhdFNjYWxlc0Jhc2UgPSBzZWN0aW9uLmJ5dGVzUGVyU3BsYXQgKiBsb2NhbFNwbGF0SW5kZXggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BsYXRCdWZmZXIuQ29tcHJlc3Npb25MZXZlbHNbdGhpcy5jb21wcmVzc2lvbkxldmVsXS5TY2FsZU9mZnNldEJ5dGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlRGVzdEJhc2UgPSAoaSAtIHNyY0Zyb20gKyBkZXN0RnJvbSkgKiBTcGxhdEJ1ZmZlci5TY2FsZUNvbXBvbmVudENvdW50O1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm90YXRpb25EZXN0QmFzZSA9IChpIC0gc3JjRnJvbSArIGRlc3RGcm9tKSAqIFNwbGF0QnVmZmVyLlJvdGF0aW9uQ29tcG9uZW50Q291bnQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyh0aGlzLmJ1ZmZlckRhdGEsIHNlY3Rpb24uZGF0YUJhc2UgKyBzcmNTcGxhdFNjYWxlc0Jhc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNyY1NjYWxlWCA9IChzY2FsZU92ZXJyaWRlICYmIHNjYWxlT3ZlcnJpZGUueCAhPT0gdW5kZWZpbmVkKSA/IHNjYWxlT3ZlcnJpZGUueCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVZpZXdGbG9hdEZvckNvbXByZXNzaW9uTGV2ZWwoZGF0YVZpZXcsIDAsIHRoaXMuY29tcHJlc3Npb25MZXZlbCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzcmNTY2FsZVkgPSAoc2NhbGVPdmVycmlkZSAmJiBzY2FsZU92ZXJyaWRlLnkgIT09IHVuZGVmaW5lZCkgPyBzY2FsZU92ZXJyaWRlLnkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFWaWV3RmxvYXRGb3JDb21wcmVzc2lvbkxldmVsKGRhdGFWaWV3LCAxLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3JjU2NhbGVaID0gKHNjYWxlT3ZlcnJpZGUgJiYgc2NhbGVPdmVycmlkZS56ICE9PSB1bmRlZmluZWQpID8gc2NhbGVPdmVycmlkZS56IDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVmlld0Zsb2F0Rm9yQ29tcHJlc3Npb25MZXZlbChkYXRhVmlldywgMiwgdGhpcy5jb21wcmVzc2lvbkxldmVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzcmNSb3RhdGlvblcgPSBkYXRhVmlld0Zsb2F0Rm9yQ29tcHJlc3Npb25MZXZlbChkYXRhVmlldywgMywgdGhpcy5jb21wcmVzc2lvbkxldmVsKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNyY1JvdGF0aW9uWCA9IGRhdGFWaWV3RmxvYXRGb3JDb21wcmVzc2lvbkxldmVsKGRhdGFWaWV3LCA0LCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3JjUm90YXRpb25ZID0gZGF0YVZpZXdGbG9hdEZvckNvbXByZXNzaW9uTGV2ZWwoZGF0YVZpZXcsIDUsIHRoaXMuY29tcHJlc3Npb25MZXZlbCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzcmNSb3RhdGlvblogPSBkYXRhVmlld0Zsb2F0Rm9yQ29tcHJlc3Npb25MZXZlbChkYXRhVmlldywgNiwgdGhpcy5jb21wcmVzc2lvbkxldmVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzY2FsZS5zZXQodG9VbmNvbXByZXNzZWRGbG9hdChzcmNTY2FsZVgsIHRoaXMuY29tcHJlc3Npb25MZXZlbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG9VbmNvbXByZXNzZWRGbG9hdChzcmNTY2FsZVksIHRoaXMuY29tcHJlc3Npb25MZXZlbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG9VbmNvbXByZXNzZWRGbG9hdChzcmNTY2FsZVosIHRoaXMuY29tcHJlc3Npb25MZXZlbCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJvdGF0aW9uLnNldCh0b1VuY29tcHJlc3NlZEZsb2F0KHNyY1JvdGF0aW9uWCwgdGhpcy5jb21wcmVzc2lvbkxldmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuY29tcHJlc3NlZEZsb2F0KHNyY1JvdGF0aW9uWSwgdGhpcy5jb21wcmVzc2lvbkxldmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuY29tcHJlc3NlZEZsb2F0KHNyY1JvdGF0aW9uWiwgdGhpcy5jb21wcmVzc2lvbkxldmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuY29tcHJlc3NlZEZsb2F0KHNyY1JvdGF0aW9uVywgdGhpcy5jb21wcmVzc2lvbkxldmVsKSkubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBQb3NpdGlvbi5zZXQoMCwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVNYXRyaXgubWFrZVNjYWxlKHNjYWxlLngsIHNjYWxlLnksIHNjYWxlLnopO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uTWF0cml4Lm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wTWF0cml4LmlkZW50aXR5KCkucHJlbXVsdGlwbHkoc2NhbGVNYXRyaXgpLnByZW11bHRpcGx5KHJvdGF0aW9uTWF0cml4KTtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wTWF0cml4LnByZW11bHRpcGx5KHRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcE1hdHJpeC5kZWNvbXBvc2UodGVtcFBvc2l0aW9uLCByb3RhdGlvbiwgc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGVuc3VyZVBvc2l0aXZlVyhyb3RhdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG91dFNjYWxlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRTY2FsZUFycmF5W3NjYWxlRGVzdEJhc2VdID0gb3V0cHV0Q29udmVyc2lvbihzY2FsZS54LCAwKTtcclxuICAgICAgICAgICAgICAgICAgICBvdXRTY2FsZUFycmF5W3NjYWxlRGVzdEJhc2UgKyAxXSA9IG91dHB1dENvbnZlcnNpb24oc2NhbGUueSwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0U2NhbGVBcnJheVtzY2FsZURlc3RCYXNlICsgMl0gPSBvdXRwdXRDb252ZXJzaW9uKHNjYWxlLnosIDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvdXRSb3RhdGlvbkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0Um90YXRpb25BcnJheVtyb3RhdGlvbkRlc3RCYXNlXSA9IG91dHB1dENvbnZlcnNpb24ocm90YXRpb24ueCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0Um90YXRpb25BcnJheVtyb3RhdGlvbkRlc3RCYXNlICsgMV0gPSBvdXRwdXRDb252ZXJzaW9uKHJvdGF0aW9uLnksIDApO1xyXG4gICAgICAgICAgICAgICAgICAgIG91dFJvdGF0aW9uQXJyYXlbcm90YXRpb25EZXN0QmFzZSArIDJdID0gb3V0cHV0Q29udmVyc2lvbihyb3RhdGlvbi56LCAwKTtcclxuICAgICAgICAgICAgICAgICAgICBvdXRSb3RhdGlvbkFycmF5W3JvdGF0aW9uRGVzdEJhc2UgKyAzXSA9IG91dHB1dENvbnZlcnNpb24ocm90YXRpb24udywgMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSgpO1xyXG5cclxuICAgIHN0YXRpYyBjb21wdXRlQ292YXJpYW5jZSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICBjb25zdCB0ZW1wTWF0cml4NCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgY29uc3Qgc2NhbGVNYXRyaXggPSBuZXcgTWF0cml4MygpO1xyXG4gICAgICAgIGNvbnN0IHJvdGF0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDMoKTtcclxuICAgICAgICBjb25zdCBjb3ZhcmlhbmNlTWF0cml4ID0gbmV3IE1hdHJpeDMoKTtcclxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZENvdmFyaWFuY2UgPSBuZXcgTWF0cml4MygpO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybTN4MyA9IG5ldyBNYXRyaXgzKCk7XHJcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtM3gzVHJhbnNwb3NlID0gbmV3IE1hdHJpeDMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjYWxlLCByb3RhdGlvbiwgdHJhbnNmb3JtLCBvdXRDb3ZhcmlhbmNlLCBvdXRPZmZzZXQgPSAwLCBkZXNpcmVkT3V0cHV0Q29tcHJlc3Npb25MZXZlbCkge1xyXG5cclxuICAgICAgICAgICAgdGVtcE1hdHJpeDQubWFrZVNjYWxlKHNjYWxlLngsIHNjYWxlLnksIHNjYWxlLnopO1xyXG4gICAgICAgICAgICBzY2FsZU1hdHJpeC5zZXRGcm9tTWF0cml4NCh0ZW1wTWF0cml4NCk7XHJcblxyXG4gICAgICAgICAgICB0ZW1wTWF0cml4NC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihyb3RhdGlvbik7XHJcbiAgICAgICAgICAgIHJvdGF0aW9uTWF0cml4LnNldEZyb21NYXRyaXg0KHRlbXBNYXRyaXg0KTtcclxuXHJcbiAgICAgICAgICAgIGNvdmFyaWFuY2VNYXRyaXguY29weShyb3RhdGlvbk1hdHJpeCkubXVsdGlwbHkoc2NhbGVNYXRyaXgpO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZENvdmFyaWFuY2UuY29weShjb3ZhcmlhbmNlTWF0cml4KS50cmFuc3Bvc2UoKS5wcmVtdWx0aXBseShjb3ZhcmlhbmNlTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTN4My5zZXRGcm9tTWF0cml4NCh0cmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtM3gzVHJhbnNwb3NlLmNvcHkodHJhbnNmb3JtM3gzKS50cmFuc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQ292YXJpYW5jZS5tdWx0aXBseSh0cmFuc2Zvcm0zeDNUcmFuc3Bvc2UpO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRDb3ZhcmlhbmNlLnByZW11bHRpcGx5KHRyYW5zZm9ybTN4Myk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChkZXNpcmVkT3V0cHV0Q29tcHJlc3Npb25MZXZlbCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRDb3ZhcmlhbmNlW291dE9mZnNldF0gPSB0b0hhbGZGbG9hdCh0cmFuc2Zvcm1lZENvdmFyaWFuY2UuZWxlbWVudHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgb3V0Q292YXJpYW5jZVtvdXRPZmZzZXQgKyAxXSA9IHRvSGFsZkZsb2F0KHRyYW5zZm9ybWVkQ292YXJpYW5jZS5lbGVtZW50c1szXSk7XHJcbiAgICAgICAgICAgICAgICBvdXRDb3ZhcmlhbmNlW291dE9mZnNldCArIDJdID0gdG9IYWxmRmxvYXQodHJhbnNmb3JtZWRDb3ZhcmlhbmNlLmVsZW1lbnRzWzZdKTtcclxuICAgICAgICAgICAgICAgIG91dENvdmFyaWFuY2Vbb3V0T2Zmc2V0ICsgM10gPSB0b0hhbGZGbG9hdCh0cmFuc2Zvcm1lZENvdmFyaWFuY2UuZWxlbWVudHNbNF0pO1xyXG4gICAgICAgICAgICAgICAgb3V0Q292YXJpYW5jZVtvdXRPZmZzZXQgKyA0XSA9IHRvSGFsZkZsb2F0KHRyYW5zZm9ybWVkQ292YXJpYW5jZS5lbGVtZW50c1s3XSk7XHJcbiAgICAgICAgICAgICAgICBvdXRDb3ZhcmlhbmNlW291dE9mZnNldCArIDVdID0gdG9IYWxmRmxvYXQodHJhbnNmb3JtZWRDb3ZhcmlhbmNlLmVsZW1lbnRzWzhdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG91dENvdmFyaWFuY2Vbb3V0T2Zmc2V0XSA9IHRyYW5zZm9ybWVkQ292YXJpYW5jZS5lbGVtZW50c1swXTtcclxuICAgICAgICAgICAgICAgIG91dENvdmFyaWFuY2Vbb3V0T2Zmc2V0ICsgMV0gPSB0cmFuc2Zvcm1lZENvdmFyaWFuY2UuZWxlbWVudHNbM107XHJcbiAgICAgICAgICAgICAgICBvdXRDb3ZhcmlhbmNlW291dE9mZnNldCArIDJdID0gdHJhbnNmb3JtZWRDb3ZhcmlhbmNlLmVsZW1lbnRzWzZdO1xyXG4gICAgICAgICAgICAgICAgb3V0Q292YXJpYW5jZVtvdXRPZmZzZXQgKyAzXSA9IHRyYW5zZm9ybWVkQ292YXJpYW5jZS5lbGVtZW50c1s0XTtcclxuICAgICAgICAgICAgICAgIG91dENvdmFyaWFuY2Vbb3V0T2Zmc2V0ICsgNF0gPSB0cmFuc2Zvcm1lZENvdmFyaWFuY2UuZWxlbWVudHNbN107XHJcbiAgICAgICAgICAgICAgICBvdXRDb3ZhcmlhbmNlW291dE9mZnNldCArIDVdID0gdHJhbnNmb3JtZWRDb3ZhcmlhbmNlLmVsZW1lbnRzWzhdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH07XHJcblxyXG4gICAgfSgpO1xyXG5cclxuICAgIGZpbGxTcGxhdENvdmFyaWFuY2VBcnJheShjb3ZhcmlhbmNlQXJyYXksIHRyYW5zZm9ybSwgc3JjRnJvbSwgc3JjVG8sIGRlc3RGcm9tLCBkZXNpcmVkT3V0cHV0Q29tcHJlc3Npb25MZXZlbCkge1xyXG4gICAgICAgIGNvbnN0IHNwbGF0Q291bnQgPSB0aGlzLnNwbGF0Q291bnQ7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjYWxlID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICBjb25zdCByb3RhdGlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblxyXG4gICAgICAgIHNyY0Zyb20gPSBzcmNGcm9tIHx8IDA7XHJcbiAgICAgICAgc3JjVG8gPSBzcmNUbyB8fCBzcGxhdENvdW50IC0gMTtcclxuICAgICAgICBpZiAoZGVzdEZyb20gPT09IHVuZGVmaW5lZCkgZGVzdEZyb20gPSBzcmNGcm9tO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gc3JjRnJvbTsgaSA8PSBzcmNUbzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25JbmRleCA9IHRoaXMuZ2xvYmFsU3BsYXRJbmRleFRvU2VjdGlvbk1hcFtpXTtcclxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcclxuICAgICAgICAgICAgY29uc3QgbG9jYWxTcGxhdEluZGV4ID0gaSAtIHNlY3Rpb24uc3BsYXRDb3VudE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvdmFyaWFuY2VEZXN0QmFzZSA9IChpIC0gc3JjRnJvbSArIGRlc3RGcm9tKSAqIFNwbGF0QnVmZmVyLkNvdmFyaWFuY2VDb21wb25lbnRDb3VudDtcclxuICAgICAgICAgICAgY29uc3Qgc3JjU3BsYXRTY2FsZXNCYXNlID0gc2VjdGlvbi5ieXRlc1BlclNwbGF0ICogbG9jYWxTcGxhdEluZGV4ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BsYXRCdWZmZXIuQ29tcHJlc3Npb25MZXZlbHNbdGhpcy5jb21wcmVzc2lvbkxldmVsXS5TY2FsZU9mZnNldEJ5dGVzO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5idWZmZXJEYXRhLCBzZWN0aW9uLmRhdGFCYXNlICsgc3JjU3BsYXRTY2FsZXNCYXNlKTtcclxuXHJcbiAgICAgICAgICAgIHNjYWxlLnNldCh0b1VuY29tcHJlc3NlZEZsb2F0KGRhdGFWaWV3RmxvYXRGb3JDb21wcmVzc2lvbkxldmVsKGRhdGFWaWV3LCAwLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdG9VbmNvbXByZXNzZWRGbG9hdChkYXRhVmlld0Zsb2F0Rm9yQ29tcHJlc3Npb25MZXZlbChkYXRhVmlldywgMSwgdGhpcy5jb21wcmVzc2lvbkxldmVsKSwgdGhpcy5jb21wcmVzc2lvbkxldmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgIHRvVW5jb21wcmVzc2VkRmxvYXQoZGF0YVZpZXdGbG9hdEZvckNvbXByZXNzaW9uTGV2ZWwoZGF0YVZpZXcsIDIsIHRoaXMuY29tcHJlc3Npb25MZXZlbCksIHRoaXMuY29tcHJlc3Npb25MZXZlbCkpO1xyXG5cclxuICAgICAgICAgICAgcm90YXRpb24uc2V0KHRvVW5jb21wcmVzc2VkRmxvYXQoZGF0YVZpZXdGbG9hdEZvckNvbXByZXNzaW9uTGV2ZWwoZGF0YVZpZXcsIDQsIHRoaXMuY29tcHJlc3Npb25MZXZlbCksIHRoaXMuY29tcHJlc3Npb25MZXZlbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuY29tcHJlc3NlZEZsb2F0KGRhdGFWaWV3RmxvYXRGb3JDb21wcmVzc2lvbkxldmVsKGRhdGFWaWV3LCA1LCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG9VbmNvbXByZXNzZWRGbG9hdChkYXRhVmlld0Zsb2F0Rm9yQ29tcHJlc3Npb25MZXZlbChkYXRhVmlldywgNiwgdGhpcy5jb21wcmVzc2lvbkxldmVsKSwgdGhpcy5jb21wcmVzc2lvbkxldmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvVW5jb21wcmVzc2VkRmxvYXQoZGF0YVZpZXdGbG9hdEZvckNvbXByZXNzaW9uTGV2ZWwoZGF0YVZpZXcsIDMsIHRoaXMuY29tcHJlc3Npb25MZXZlbCksIHRoaXMuY29tcHJlc3Npb25MZXZlbCkpO1xyXG5cclxuICAgICAgICAgICAgU3BsYXRCdWZmZXIuY29tcHV0ZUNvdmFyaWFuY2Uoc2NhbGUsIHJvdGF0aW9uLCB0cmFuc2Zvcm0sIGNvdmFyaWFuY2VBcnJheSwgY292YXJpYW5jZURlc3RCYXNlLCBkZXNpcmVkT3V0cHV0Q29tcHJlc3Npb25MZXZlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpbGxTcGxhdENvbG9yQXJyYXkob3V0Q29sb3JBcnJheSwgbWluaW11bUFscGhhLCBzcmNGcm9tLCBzcmNUbywgZGVzdEZyb20pIHtcclxuICAgICAgICBjb25zdCBzcGxhdENvdW50ID0gdGhpcy5zcGxhdENvdW50O1xyXG5cclxuICAgICAgICBzcmNGcm9tID0gc3JjRnJvbSB8fCAwO1xyXG4gICAgICAgIHNyY1RvID0gc3JjVG8gfHwgc3BsYXRDb3VudCAtIDE7XHJcbiAgICAgICAgaWYgKGRlc3RGcm9tID09PSB1bmRlZmluZWQpIGRlc3RGcm9tID0gc3JjRnJvbTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHNyY0Zyb207IGkgPD0gc3JjVG87IGkrKykge1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkluZGV4ID0gdGhpcy5nbG9iYWxTcGxhdEluZGV4VG9TZWN0aW9uTWFwW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xyXG4gICAgICAgICAgICBjb25zdCBsb2NhbFNwbGF0SW5kZXggPSBpIC0gc2VjdGlvbi5zcGxhdENvdW50T2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY29sb3JEZXN0QmFzZSA9IChpIC0gc3JjRnJvbSArIGRlc3RGcm9tKSAqIFNwbGF0QnVmZmVyLkNvbG9yQ29tcG9uZW50Q291bnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHNyY1NwbGF0Q29sb3JzQmFzZSA9IHNlY3Rpb24uYnl0ZXNQZXJTcGxhdCAqIGxvY2FsU3BsYXRJbmRleCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwbGF0QnVmZmVyLkNvbXByZXNzaW9uTGV2ZWxzW3RoaXMuY29tcHJlc3Npb25MZXZlbF0uQ29sb3JPZmZzZXRCeXRlcztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXJEYXRhLCBzZWN0aW9uLmRhdGFCYXNlICsgc3JjU3BsYXRDb2xvcnNCYXNlKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBhbHBoYSA9IGRhdGFWaWV3WzNdO1xyXG4gICAgICAgICAgICBhbHBoYSA9IChhbHBoYSA+PSBtaW5pbXVtQWxwaGEpID8gYWxwaGEgOiAwO1xyXG5cclxuICAgICAgICAgICAgb3V0Q29sb3JBcnJheVtjb2xvckRlc3RCYXNlXSA9IGRhdGFWaWV3WzBdO1xyXG4gICAgICAgICAgICBvdXRDb2xvckFycmF5W2NvbG9yRGVzdEJhc2UgKyAxXSA9IGRhdGFWaWV3WzFdO1xyXG4gICAgICAgICAgICBvdXRDb2xvckFycmF5W2NvbG9yRGVzdEJhc2UgKyAyXSA9IGRhdGFWaWV3WzJdO1xyXG4gICAgICAgICAgICBvdXRDb2xvckFycmF5W2NvbG9yRGVzdEJhc2UgKyAzXSA9IGFscGhhO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmaWxsU3BoZXJpY2FsSGFybW9uaWNzQXJyYXkgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgY29uc3Qgc3BoZXJpY2FsSGFybW9uaWNWZWN0b3JzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNTsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNwaGVyaWNhbEhhcm1vbmljVmVjdG9yc1tpXSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZW1wTWF0cml4MyA9IG5ldyBNYXRyaXgzKCk7XHJcbiAgICAgICAgY29uc3QgdGVtcE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgICAgICBjb25zdCB0ZW1wVHJhbnNsYXRpb24gPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIGNvbnN0IHRlbXBTY2FsZSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgY29uc3QgdGVtcFJvdGF0aW9uID0gbmV3IFF1YXRlcm5pb24oKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2gxMSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNoMTIgPSBbXTtcclxuICAgICAgICBjb25zdCBzaDEzID0gW107XHJcblxyXG4gICAgICAgIGNvbnN0IHNoMjEgPSBbXTtcclxuICAgICAgICBjb25zdCBzaDIyID0gW107XHJcbiAgICAgICAgY29uc3Qgc2gyMyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNoMjQgPSBbXTtcclxuICAgICAgICBjb25zdCBzaDI1ID0gW107XHJcblxyXG4gICAgICAgIGNvbnN0IHNoSW4xID0gW107XHJcbiAgICAgICAgY29uc3Qgc2hJbjIgPSBbXTtcclxuICAgICAgICBjb25zdCBzaEluMyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNoSW40ID0gW107XHJcbiAgICAgICAgY29uc3Qgc2hJbjUgPSBbXTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hPdXQxID0gW107XHJcbiAgICAgICAgY29uc3Qgc2hPdXQyID0gW107XHJcbiAgICAgICAgY29uc3Qgc2hPdXQzID0gW107XHJcbiAgICAgICAgY29uc3Qgc2hPdXQ0ID0gW107XHJcbiAgICAgICAgY29uc3Qgc2hPdXQ1ID0gW107XHJcblxyXG4gICAgICAgIGNvbnN0IG5vb3AgPSAodikgPT4gdjtcclxuXHJcbiAgICAgICAgY29uc3Qgc2V0MyA9IChhcnJheSwgdmFsMSwgdmFsMiwgdmFsMykgPT4ge1xyXG4gICAgICAgICAgICBhcnJheVswXSA9IHZhbDE7XHJcbiAgICAgICAgICAgIGFycmF5WzFdID0gdmFsMjtcclxuICAgICAgICAgICAgYXJyYXlbMl0gPSB2YWwzO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHNldDNGcm9tQXJyYXkgPSAoYXJyYXksIHNyY0Rlc3RWaWV3LCBzdHJpZGUsIHNyY0Jhc2UsIGNvbXByZXNzaW9uTGV2ZWwpID0+IHtcclxuICAgICAgICAgICAgYXJyYXlbMF0gPSBkYXRhVmlld0Zsb2F0Rm9yQ29tcHJlc3Npb25MZXZlbChzcmNEZXN0Vmlldywgc3JjQmFzZSwgY29tcHJlc3Npb25MZXZlbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGFycmF5WzFdID0gZGF0YVZpZXdGbG9hdEZvckNvbXByZXNzaW9uTGV2ZWwoc3JjRGVzdFZpZXcsIHNyY0Jhc2UgKyBzdHJpZGUsIGNvbXByZXNzaW9uTGV2ZWwsIHRydWUpO1xyXG4gICAgICAgICAgICBhcnJheVsyXSA9IGRhdGFWaWV3RmxvYXRGb3JDb21wcmVzc2lvbkxldmVsKHNyY0Rlc3RWaWV3LCBzcmNCYXNlICsgc3RyaWRlICsgc3RyaWRlLCBjb21wcmVzc2lvbkxldmVsLCB0cnVlKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBjb3B5MyA9IChzcmNBcnJheSwgZGVzdEFycmF5KSA9PiB7XHJcbiAgICAgICAgICAgIGRlc3RBcnJheVswXSA9IHNyY0FycmF5WzBdO1xyXG4gICAgICAgICAgICBkZXN0QXJyYXlbMV0gPSBzcmNBcnJheVsxXTtcclxuICAgICAgICAgICAgZGVzdEFycmF5WzJdID0gc3JjQXJyYXlbMl07XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2V0T3V0cHV0MyA9IChzcmNBcnJheSwgZGVzdEFycmF5LCBkZXN0QmFzZSwgY29udmVyc2lvbkZ1bmMpID0+IHtcclxuICAgICAgICAgICAgZGVzdEFycmF5W2Rlc3RCYXNlXSA9IGNvbnZlcnNpb25GdW5jKHNyY0FycmF5WzBdKTtcclxuICAgICAgICAgICAgZGVzdEFycmF5W2Rlc3RCYXNlICsgMV0gPSBjb252ZXJzaW9uRnVuYyhzcmNBcnJheVsxXSk7XHJcbiAgICAgICAgICAgIGRlc3RBcnJheVtkZXN0QmFzZSArIDJdID0gY29udmVyc2lvbkZ1bmMoc3JjQXJyYXlbMl0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHRvVW5jb21wcmVzc2VkRmxvYXRBcnJheTMgPSAoc3JjLCBkZXN0LCBjb21wcmVzc2lvbkxldmVsLCByYW5nZThCaXRNaW4sIHJhbmdlOEJpdE1heCkgPT4ge1xyXG4gICAgICAgICAgICBkZXN0WzBdID0gdG9VbmNvbXByZXNzZWRGbG9hdChzcmNbMF0sIGNvbXByZXNzaW9uTGV2ZWwsIHRydWUsIHJhbmdlOEJpdE1pbiwgcmFuZ2U4Qml0TWF4KTtcclxuICAgICAgICAgICAgZGVzdFsxXSA9IHRvVW5jb21wcmVzc2VkRmxvYXQoc3JjWzFdLCBjb21wcmVzc2lvbkxldmVsLCB0cnVlLCByYW5nZThCaXRNaW4sIHJhbmdlOEJpdE1heCk7XHJcbiAgICAgICAgICAgIGRlc3RbMl0gPSB0b1VuY29tcHJlc3NlZEZsb2F0KHNyY1syXSwgY29tcHJlc3Npb25MZXZlbCwgdHJ1ZSwgcmFuZ2U4Qml0TWluLCByYW5nZThCaXRNYXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24ob3V0U3BoZXJpY2FsSGFybW9uaWNzQXJyYXksIG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSwgdHJhbnNmb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNGcm9tLCBzcmNUbywgZGVzdEZyb20sIGRlc2lyZWRPdXRwdXRDb21wcmVzc2lvbkxldmVsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGF0Q291bnQgPSB0aGlzLnNwbGF0Q291bnQ7XHJcblxyXG4gICAgICAgICAgICBzcmNGcm9tID0gc3JjRnJvbSB8fCAwO1xyXG4gICAgICAgICAgICBzcmNUbyA9IHNyY1RvIHx8IHNwbGF0Q291bnQgLSAxO1xyXG4gICAgICAgICAgICBpZiAoZGVzdEZyb20gPT09IHVuZGVmaW5lZCkgZGVzdEZyb20gPSBzcmNGcm9tO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSAmJiBvdXRTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPj0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGVtcE1hdHJpeDQuY29weSh0cmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgdGVtcE1hdHJpeDQuZGVjb21wb3NlKHRlbXBUcmFuc2xhdGlvbiwgdGVtcFJvdGF0aW9uLCB0ZW1wU2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgdGVtcFJvdGF0aW9uLm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgICAgICAgICAgdGVtcE1hdHJpeDQubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odGVtcFJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRlbXBNYXRyaXgzLnNldEZyb21NYXRyaXg0KHRlbXBNYXRyaXg0KTtcclxuICAgICAgICAgICAgICAgIHNldDMoc2gxMSwgdGVtcE1hdHJpeDMuZWxlbWVudHNbNF0sIC10ZW1wTWF0cml4My5lbGVtZW50c1s3XSwgdGVtcE1hdHJpeDMuZWxlbWVudHNbMV0pO1xyXG4gICAgICAgICAgICAgICAgc2V0MyhzaDEyLCAtdGVtcE1hdHJpeDMuZWxlbWVudHNbNV0sIHRlbXBNYXRyaXgzLmVsZW1lbnRzWzhdLCAtdGVtcE1hdHJpeDMuZWxlbWVudHNbMl0pO1xyXG4gICAgICAgICAgICAgICAgc2V0MyhzaDEzLCB0ZW1wTWF0cml4My5lbGVtZW50c1szXSwgLXRlbXBNYXRyaXgzLmVsZW1lbnRzWzZdLCB0ZW1wTWF0cml4My5lbGVtZW50c1swXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsRnJvbUhhbGZGbG9hdFRvVWludDggPSAodikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZyb21IYWxmRmxvYXRUb1VpbnQ4KHYsIHRoaXMubWluU3BoZXJpY2FsSGFybW9uaWNzQ29lZmYsIHRoaXMubWF4U3BoZXJpY2FsSGFybW9uaWNzQ29lZmYpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbG9jYWxUb1VpbnQ4ID0gKHYpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0b1VpbnQ4KHYsIHRoaXMubWluU3BoZXJpY2FsSGFybW9uaWNzQ29lZmYsIHRoaXMubWF4U3BoZXJpY2FsSGFybW9uaWNzQ29lZmYpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNyY0Zyb207IGkgPD0gc3JjVG87IGkrKykge1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25JbmRleCA9IHRoaXMuZ2xvYmFsU3BsYXRJbmRleFRvU2VjdGlvbk1hcFtpXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLnNlY3Rpb25zW3NlY3Rpb25JbmRleF07XHJcbiAgICAgICAgICAgICAgICBvdXRTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPSBNYXRoLm1pbihvdXRTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUsIHNlY3Rpb24uc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG91dFNwaGVyaWNhbEhhcm1vbmljc0NvbXBvbmVudHNDb3VudCA9IGdldFNwaGVyaWNhbEhhcm1vbmljc0NvbXBvbmVudENvdW50Rm9yRGVncmVlKG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxTcGxhdEluZGV4ID0gaSAtIHNlY3Rpb24uc3BsYXRDb3VudE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzcmNTcGxhdFNIQmFzZSA9IHNlY3Rpb24uYnl0ZXNQZXJTcGxhdCAqIGxvY2FsU3BsYXRJbmRleCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwbGF0QnVmZmVyLkNvbXByZXNzaW9uTGV2ZWxzW3RoaXMuY29tcHJlc3Npb25MZXZlbF0uU3BoZXJpY2FsSGFybW9uaWNzT2Zmc2V0Qnl0ZXM7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5idWZmZXJEYXRhLCBzZWN0aW9uLmRhdGFCYXNlICsgc3JjU3BsYXRTSEJhc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNoRGVzdEJhc2UgPSAoaSAtIHNyY0Zyb20gKyBkZXN0RnJvbSkgKiBvdXRTcGhlcmljYWxIYXJtb25pY3NDb21wb25lbnRzQ291bnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbXByZXNzaW9uTGV2ZWxGb3JPdXRwdXRDb252ZXJzaW9uID0gdHJhbnNmb3JtID8gMCA6IHRoaXMuY29tcHJlc3Npb25MZXZlbDtcclxuICAgICAgICAgICAgICAgIGxldCBvdXRwdXRDb252ZXJzaW9uRnVuYyA9IG5vb3A7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcHJlc3Npb25MZXZlbEZvck91dHB1dENvbnZlcnNpb24gIT09IGRlc2lyZWRPdXRwdXRDb21wcmVzc2lvbkxldmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzaW9uTGV2ZWxGb3JPdXRwdXRDb252ZXJzaW9uID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXNpcmVkT3V0cHV0Q29tcHJlc3Npb25MZXZlbCA9PT0gMCkgb3V0cHV0Q29udmVyc2lvbkZ1bmMgPSBmcm9tSGFsZkZsb2F0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZXNpcmVkT3V0cHV0Q29tcHJlc3Npb25MZXZlbCA9PSAyKSBvdXRwdXRDb252ZXJzaW9uRnVuYyA9IGxvY2FsRnJvbUhhbGZGbG9hdFRvVWludDg7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wcmVzc2lvbkxldmVsRm9yT3V0cHV0Q29udmVyc2lvbiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzaXJlZE91dHB1dENvbXByZXNzaW9uTGV2ZWwgPT09IDEpIG91dHB1dENvbnZlcnNpb25GdW5jID0gdG9IYWxmRmxvYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlc2lyZWRPdXRwdXRDb21wcmVzc2lvbkxldmVsID09IDIpIG91dHB1dENvbnZlcnNpb25GdW5jID0gbG9jYWxUb1VpbnQ4O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5TaENvZWZmID0gdGhpcy5taW5TcGhlcmljYWxIYXJtb25pY3NDb2VmZjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1heFNoQ29lZmYgPSB0aGlzLm1heFNwaGVyaWNhbEhhcm1vbmljc0NvZWZmO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvdXRTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPj0gMSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZXQzRnJvbUFycmF5KHNoSW4xLCBkYXRhVmlldywgMywgMCwgdGhpcy5jb21wcmVzc2lvbkxldmVsKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXQzRnJvbUFycmF5KHNoSW4yLCBkYXRhVmlldywgMywgMSwgdGhpcy5jb21wcmVzc2lvbkxldmVsKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXQzRnJvbUFycmF5KHNoSW4zLCBkYXRhVmlldywgMywgMiwgdGhpcy5jb21wcmVzc2lvbkxldmVsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b1VuY29tcHJlc3NlZEZsb2F0QXJyYXkzKHNoSW4xLCBzaEluMSwgdGhpcy5jb21wcmVzc2lvbkxldmVsLCBtaW5TaENvZWZmLCBtYXhTaENvZWZmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9VbmNvbXByZXNzZWRGbG9hdEFycmF5MyhzaEluMiwgc2hJbjIsIHRoaXMuY29tcHJlc3Npb25MZXZlbCwgbWluU2hDb2VmZiwgbWF4U2hDb2VmZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvVW5jb21wcmVzc2VkRmxvYXRBcnJheTMoc2hJbjMsIHNoSW4zLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwsIG1pblNoQ29lZmYsIG1heFNoQ29lZmYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBTcGxhdEJ1ZmZlci5yb3RhdGVTcGhlcmljYWxIYXJtb25pY3MzKHNoSW4xLCBzaEluMiwgc2hJbjMsIHNoMTEsIHNoMTIsIHNoMTMsIHNoT3V0MSwgc2hPdXQyLCBzaE91dDMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkzKHNoSW4xLCBzaE91dDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5MyhzaEluMiwgc2hPdXQyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29weTMoc2hJbjMsIHNoT3V0Myk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZXRPdXRwdXQzKHNoT3V0MSwgb3V0U3BoZXJpY2FsSGFybW9uaWNzQXJyYXksIHNoRGVzdEJhc2UsIG91dHB1dENvbnZlcnNpb25GdW5jKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRPdXRwdXQzKHNoT3V0Miwgb3V0U3BoZXJpY2FsSGFybW9uaWNzQXJyYXksIHNoRGVzdEJhc2UgKyAzLCBvdXRwdXRDb252ZXJzaW9uRnVuYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0T3V0cHV0MyhzaE91dDMsIG91dFNwaGVyaWNhbEhhcm1vbmljc0FycmF5LCBzaERlc3RCYXNlICsgNiwgb3V0cHV0Q29udmVyc2lvbkZ1bmMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID49IDIpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDNGcm9tQXJyYXkoc2hJbjEsIGRhdGFWaWV3LCA1LCA5LCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQzRnJvbUFycmF5KHNoSW4yLCBkYXRhVmlldywgNSwgMTAsIHRoaXMuY29tcHJlc3Npb25MZXZlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDNGcm9tQXJyYXkoc2hJbjMsIGRhdGFWaWV3LCA1LCAxMSwgdGhpcy5jb21wcmVzc2lvbkxldmVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0M0Zyb21BcnJheShzaEluNCwgZGF0YVZpZXcsIDUsIDEyLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQzRnJvbUFycmF5KHNoSW41LCBkYXRhVmlldywgNSwgMTMsIHRoaXMuY29tcHJlc3Npb25MZXZlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuY29tcHJlc3NlZEZsb2F0QXJyYXkzKHNoSW4xLCBzaEluMSwgdGhpcy5jb21wcmVzc2lvbkxldmVsLCBtaW5TaENvZWZmLCBtYXhTaENvZWZmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvVW5jb21wcmVzc2VkRmxvYXRBcnJheTMoc2hJbjIsIHNoSW4yLCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwsIG1pblNoQ29lZmYsIG1heFNoQ29lZmYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9VbmNvbXByZXNzZWRGbG9hdEFycmF5MyhzaEluMywgc2hJbjMsIHRoaXMuY29tcHJlc3Npb25MZXZlbCwgbWluU2hDb2VmZiwgbWF4U2hDb2VmZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuY29tcHJlc3NlZEZsb2F0QXJyYXkzKHNoSW40LCBzaEluNCwgdGhpcy5jb21wcmVzc2lvbkxldmVsLCBtaW5TaENvZWZmLCBtYXhTaENvZWZmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvVW5jb21wcmVzc2VkRmxvYXRBcnJheTMoc2hJbjUsIHNoSW41LCB0aGlzLmNvbXByZXNzaW9uTGV2ZWwsIG1pblNoQ29lZmYsIG1heFNoQ29lZmYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BsYXRCdWZmZXIucm90YXRlU3BoZXJpY2FsSGFybW9uaWNzNShzaEluMSwgc2hJbjIsIHNoSW4zLCBzaEluNCwgc2hJbjUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoMTEsIHNoMTIsIHNoMTMsIHNoMjEsIHNoMjIsIHNoMjMsIHNoMjQsIHNoMjUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoT3V0MSwgc2hPdXQyLCBzaE91dDMsIHNoT3V0NCwgc2hPdXQ1KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkzKHNoSW4xLCBzaE91dDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weTMoc2hJbjIsIHNoT3V0Mik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5MyhzaEluMywgc2hPdXQzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkzKHNoSW40LCBzaE91dDQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weTMoc2hJbjUsIHNoT3V0NSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE91dHB1dDMoc2hPdXQxLCBvdXRTcGhlcmljYWxIYXJtb25pY3NBcnJheSwgc2hEZXN0QmFzZSArIDksIG91dHB1dENvbnZlcnNpb25GdW5jKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0T3V0cHV0MyhzaE91dDIsIG91dFNwaGVyaWNhbEhhcm1vbmljc0FycmF5LCBzaERlc3RCYXNlICsgMTIsIG91dHB1dENvbnZlcnNpb25GdW5jKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0T3V0cHV0MyhzaE91dDMsIG91dFNwaGVyaWNhbEhhcm1vbmljc0FycmF5LCBzaERlc3RCYXNlICsgMTUsIG91dHB1dENvbnZlcnNpb25GdW5jKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0T3V0cHV0MyhzaE91dDQsIG91dFNwaGVyaWNhbEhhcm1vbmljc0FycmF5LCBzaERlc3RCYXNlICsgMTgsIG91dHB1dENvbnZlcnNpb25GdW5jKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0T3V0cHV0MyhzaE91dDUsIG91dFNwaGVyaWNhbEhhcm1vbmljc0FycmF5LCBzaERlc3RCYXNlICsgMjEsIG91dHB1dENvbnZlcnNpb25GdW5jKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgIH0oKTtcclxuXHJcbiAgICBzdGF0aWMgZG90MyA9ICh2MSwgdjIsIHYzLCB0cmFuc2Zvcm1Sb3csIG91dEFycmF5KSA9PiB7XHJcbiAgICAgICAgb3V0QXJyYXlbMF0gPSBvdXRBcnJheVsxXSA9IG91dEFycmF5WzJdID0gMDtcclxuICAgICAgICBjb25zdCB0MCA9IHRyYW5zZm9ybVJvd1swXTtcclxuICAgICAgICBjb25zdCB0MSA9IHRyYW5zZm9ybVJvd1sxXTtcclxuICAgICAgICBjb25zdCB0MiA9IHRyYW5zZm9ybVJvd1syXTtcclxuICAgICAgICBTcGxhdEJ1ZmZlci5hZGRJbnRvMyh2MVswXSAqIHQwLCB2MVsxXSAqIHQwLCB2MVsyXSAqIHQwLCBvdXRBcnJheSk7XHJcbiAgICAgICAgU3BsYXRCdWZmZXIuYWRkSW50bzModjJbMF0gKiB0MSwgdjJbMV0gKiB0MSwgdjJbMl0gKiB0MSwgb3V0QXJyYXkpO1xyXG4gICAgICAgIFNwbGF0QnVmZmVyLmFkZEludG8zKHYzWzBdICogdDIsIHYzWzFdICogdDIsIHYzWzJdICogdDIsIG91dEFycmF5KTtcclxuICAgIH07XHJcblxyXG4gICAgc3RhdGljIGFkZEludG8zID0gKHZhbDEsIHZhbDIsIHZhbDMsIGRlc3RBcnJheSkgPT4ge1xyXG4gICAgICAgIGRlc3RBcnJheVswXSA9IGRlc3RBcnJheVswXSArIHZhbDE7XHJcbiAgICAgICAgZGVzdEFycmF5WzFdID0gZGVzdEFycmF5WzFdICsgdmFsMjtcclxuICAgICAgICBkZXN0QXJyYXlbMl0gPSBkZXN0QXJyYXlbMl0gKyB2YWwzO1xyXG4gICAgfTtcclxuXHJcbiAgICBzdGF0aWMgZG90NSA9ICh2MSwgdjIsIHYzLCB2NCwgdjUsIHRyYW5zZm9ybVJvdywgb3V0QXJyYXkpID0+IHtcclxuICAgICAgICBvdXRBcnJheVswXSA9IG91dEFycmF5WzFdID0gb3V0QXJyYXlbMl0gPSAwO1xyXG4gICAgICAgIGNvbnN0IHQwID0gdHJhbnNmb3JtUm93WzBdO1xyXG4gICAgICAgIGNvbnN0IHQxID0gdHJhbnNmb3JtUm93WzFdO1xyXG4gICAgICAgIGNvbnN0IHQyID0gdHJhbnNmb3JtUm93WzJdO1xyXG4gICAgICAgIGNvbnN0IHQzID0gdHJhbnNmb3JtUm93WzNdO1xyXG4gICAgICAgIGNvbnN0IHQ0ID0gdHJhbnNmb3JtUm93WzRdO1xyXG4gICAgICAgIFNwbGF0QnVmZmVyLmFkZEludG8zKHYxWzBdICogdDAsIHYxWzFdICogdDAsIHYxWzJdICogdDAsIG91dEFycmF5KTtcclxuICAgICAgICBTcGxhdEJ1ZmZlci5hZGRJbnRvMyh2MlswXSAqIHQxLCB2MlsxXSAqIHQxLCB2MlsyXSAqIHQxLCBvdXRBcnJheSk7XHJcbiAgICAgICAgU3BsYXRCdWZmZXIuYWRkSW50bzModjNbMF0gKiB0MiwgdjNbMV0gKiB0MiwgdjNbMl0gKiB0Miwgb3V0QXJyYXkpO1xyXG4gICAgICAgIFNwbGF0QnVmZmVyLmFkZEludG8zKHY0WzBdICogdDMsIHY0WzFdICogdDMsIHY0WzJdICogdDMsIG91dEFycmF5KTtcclxuICAgICAgICBTcGxhdEJ1ZmZlci5hZGRJbnRvMyh2NVswXSAqIHQ0LCB2NVsxXSAqIHQ0LCB2NVsyXSAqIHQ0LCBvdXRBcnJheSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHN0YXRpYyByb3RhdGVTcGhlcmljYWxIYXJtb25pY3MzID0gKGluMSwgaW4yLCBpbjMsIHRzaDExLCB0c2gxMiwgdHNoMTMsIG91dDEsIG91dDIsIG91dDMpID0+IHtcclxuICAgICAgICBTcGxhdEJ1ZmZlci5kb3QzKGluMSwgaW4yLCBpbjMsIHRzaDExLCBvdXQxKTtcclxuICAgICAgICBTcGxhdEJ1ZmZlci5kb3QzKGluMSwgaW4yLCBpbjMsIHRzaDEyLCBvdXQyKTtcclxuICAgICAgICBTcGxhdEJ1ZmZlci5kb3QzKGluMSwgaW4yLCBpbjMsIHRzaDEzLCBvdXQzKTtcclxuICAgIH07XHJcblxyXG4gICAgc3RhdGljIHJvdGF0ZVNwaGVyaWNhbEhhcm1vbmljczUgPSAoaW4xLCBpbjIsIGluMywgaW40LCBpbjUsIHRzaDExLCB0c2gxMiwgdHNoMTMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2gyMSwgdHNoMjIsIHRzaDIzLCB0c2gyNCwgdHNoMjUsIG91dDEsIG91dDIsIG91dDMsIG91dDQsIG91dDUpID0+IHtcclxuXHJcbiAgICAgICAgY29uc3Qga1NxcnQwMTA0ID0gTWF0aC5zcXJ0KDEuMCAvIDQuMCk7XHJcbiAgICAgICAgY29uc3Qga1NxcnQwMzA0ID0gTWF0aC5zcXJ0KDMuMCAvIDQuMCk7XHJcbiAgICAgICAgY29uc3Qga1NxcnQwMTAzID0gTWF0aC5zcXJ0KDEuMCAvIDMuMCk7XHJcbiAgICAgICAgY29uc3Qga1NxcnQwNDAzID0gTWF0aC5zcXJ0KDQuMCAvIDMuMCk7XHJcbiAgICAgICAgY29uc3Qga1NxcnQwMTEyID0gTWF0aC5zcXJ0KDEuMCAvIDEyLjApO1xyXG5cclxuICAgICAgICB0c2gyMVswXSA9IGtTcXJ0MDEwNCAqICgodHNoMTNbMl0gKiB0c2gxMVswXSArIHRzaDEzWzBdICogdHNoMTFbMl0pICsgKHRzaDExWzJdICogdHNoMTNbMF0gKyB0c2gxMVswXSAqIHRzaDEzWzJdKSk7XHJcbiAgICAgICAgdHNoMjFbMV0gPSAodHNoMTNbMV0gKiB0c2gxMVswXSArIHRzaDExWzFdICogdHNoMTNbMF0pO1xyXG4gICAgICAgIHRzaDIxWzJdID0ga1NxcnQwMzA0ICogKHRzaDEzWzFdICogdHNoMTFbMV0gKyB0c2gxMVsxXSAqIHRzaDEzWzFdKTtcclxuICAgICAgICB0c2gyMVszXSA9ICh0c2gxM1sxXSAqIHRzaDExWzJdICsgdHNoMTFbMV0gKiB0c2gxM1syXSk7XHJcbiAgICAgICAgdHNoMjFbNF0gPSBrU3FydDAxMDQgKiAoKHRzaDEzWzJdICogdHNoMTFbMl0gLSB0c2gxM1swXSAqIHRzaDExWzBdKSArICh0c2gxMVsyXSAqIHRzaDEzWzJdIC0gdHNoMTFbMF0gKiB0c2gxM1swXSkpO1xyXG4gICAgICAgIFNwbGF0QnVmZmVyLmRvdDUoaW4xLCBpbjIsIGluMywgaW40LCBpbjUsIHRzaDIxLCBvdXQxKTtcclxuXHJcbiAgICAgICAgdHNoMjJbMF0gPSBrU3FydDAxMDQgKiAoKHRzaDEyWzJdICogdHNoMTFbMF0gKyB0c2gxMlswXSAqIHRzaDExWzJdKSArICh0c2gxMVsyXSAqIHRzaDEyWzBdICsgdHNoMTFbMF0gKiB0c2gxMlsyXSkpO1xyXG4gICAgICAgIHRzaDIyWzFdID0gdHNoMTJbMV0gKiB0c2gxMVswXSArIHRzaDExWzFdICogdHNoMTJbMF07XHJcbiAgICAgICAgdHNoMjJbMl0gPSBrU3FydDAzMDQgKiAodHNoMTJbMV0gKiB0c2gxMVsxXSArIHRzaDExWzFdICogdHNoMTJbMV0pO1xyXG4gICAgICAgIHRzaDIyWzNdID0gdHNoMTJbMV0gKiB0c2gxMVsyXSArIHRzaDExWzFdICogdHNoMTJbMl07XHJcbiAgICAgICAgdHNoMjJbNF0gPSBrU3FydDAxMDQgKiAoKHRzaDEyWzJdICogdHNoMTFbMl0gLSB0c2gxMlswXSAqIHRzaDExWzBdKSArICh0c2gxMVsyXSAqIHRzaDEyWzJdIC0gdHNoMTFbMF0gKiB0c2gxMlswXSkpO1xyXG4gICAgICAgIFNwbGF0QnVmZmVyLmRvdDUoaW4xLCBpbjIsIGluMywgaW40LCBpbjUsIHRzaDIyLCBvdXQyKTtcclxuXHJcbiAgICAgICAgdHNoMjNbMF0gPSBrU3FydDAxMDMgKiAodHNoMTJbMl0gKiB0c2gxMlswXSArIHRzaDEyWzBdICogdHNoMTJbMl0pICsgLWtTcXJ0MDExMiAqXHJcbiAgICAgICAgICAgICAgICAgICAoKHRzaDEzWzJdICogdHNoMTNbMF0gKyB0c2gxM1swXSAqIHRzaDEzWzJdKSArICh0c2gxMVsyXSAqIHRzaDExWzBdICsgdHNoMTFbMF0gKiB0c2gxMVsyXSkpO1xyXG4gICAgICAgIHRzaDIzWzFdID0ga1NxcnQwNDAzICogdHNoMTJbMV0gKiB0c2gxMlswXSArIC1rU3FydDAxMDMgKiAodHNoMTNbMV0gKiB0c2gxM1swXSArIHRzaDExWzFdICogdHNoMTFbMF0pO1xyXG4gICAgICAgIHRzaDIzWzJdID0gdHNoMTJbMV0gKiB0c2gxMlsxXSArIC1rU3FydDAxMDQgKiAodHNoMTNbMV0gKiB0c2gxM1sxXSArIHRzaDExWzFdICogdHNoMTFbMV0pO1xyXG4gICAgICAgIHRzaDIzWzNdID0ga1NxcnQwNDAzICogdHNoMTJbMV0gKiB0c2gxMlsyXSArIC1rU3FydDAxMDMgKiAodHNoMTNbMV0gKiB0c2gxM1syXSArIHRzaDExWzFdICogdHNoMTFbMl0pO1xyXG4gICAgICAgIHRzaDIzWzRdID0ga1NxcnQwMTAzICogKHRzaDEyWzJdICogdHNoMTJbMl0gLSB0c2gxMlswXSAqIHRzaDEyWzBdKSArIC1rU3FydDAxMTIgKlxyXG4gICAgICAgICAgICAgICAgICAgKCh0c2gxM1syXSAqIHRzaDEzWzJdIC0gdHNoMTNbMF0gKiB0c2gxM1swXSkgKyAodHNoMTFbMl0gKiB0c2gxMVsyXSAtIHRzaDExWzBdICogdHNoMTFbMF0pKTtcclxuICAgICAgICBTcGxhdEJ1ZmZlci5kb3Q1KGluMSwgaW4yLCBpbjMsIGluNCwgaW41LCB0c2gyMywgb3V0Myk7XHJcblxyXG4gICAgICAgIHRzaDI0WzBdID0ga1NxcnQwMTA0ICogKCh0c2gxMlsyXSAqIHRzaDEzWzBdICsgdHNoMTJbMF0gKiB0c2gxM1syXSkgKyAodHNoMTNbMl0gKiB0c2gxMlswXSArIHRzaDEzWzBdICogdHNoMTJbMl0pKTtcclxuICAgICAgICB0c2gyNFsxXSA9IHRzaDEyWzFdICogdHNoMTNbMF0gKyB0c2gxM1sxXSAqIHRzaDEyWzBdO1xyXG4gICAgICAgIHRzaDI0WzJdID0ga1NxcnQwMzA0ICogKHRzaDEyWzFdICogdHNoMTNbMV0gKyB0c2gxM1sxXSAqIHRzaDEyWzFdKTtcclxuICAgICAgICB0c2gyNFszXSA9IHRzaDEyWzFdICogdHNoMTNbMl0gKyB0c2gxM1sxXSAqIHRzaDEyWzJdO1xyXG4gICAgICAgIHRzaDI0WzRdID0ga1NxcnQwMTA0ICogKCh0c2gxMlsyXSAqIHRzaDEzWzJdIC0gdHNoMTJbMF0gKiB0c2gxM1swXSkgKyAodHNoMTNbMl0gKiB0c2gxMlsyXSAtIHRzaDEzWzBdICogdHNoMTJbMF0pKTtcclxuICAgICAgICBTcGxhdEJ1ZmZlci5kb3Q1KGluMSwgaW4yLCBpbjMsIGluNCwgaW41LCB0c2gyNCwgb3V0NCk7XHJcblxyXG4gICAgICAgIHRzaDI1WzBdID0ga1NxcnQwMTA0ICogKCh0c2gxM1syXSAqIHRzaDEzWzBdICsgdHNoMTNbMF0gKiB0c2gxM1syXSkgLSAodHNoMTFbMl0gKiB0c2gxMVswXSArIHRzaDExWzBdICogdHNoMTFbMl0pKTtcclxuICAgICAgICB0c2gyNVsxXSA9ICh0c2gxM1sxXSAqIHRzaDEzWzBdIC0gdHNoMTFbMV0gKiB0c2gxMVswXSk7XHJcbiAgICAgICAgdHNoMjVbMl0gPSBrU3FydDAzMDQgKiAodHNoMTNbMV0gKiB0c2gxM1sxXSAtIHRzaDExWzFdICogdHNoMTFbMV0pO1xyXG4gICAgICAgIHRzaDI1WzNdID0gKHRzaDEzWzFdICogdHNoMTNbMl0gLSB0c2gxMVsxXSAqIHRzaDExWzJdKTtcclxuICAgICAgICB0c2gyNVs0XSA9IGtTcXJ0MDEwNCAqICgodHNoMTNbMl0gKiB0c2gxM1syXSAtIHRzaDEzWzBdICogdHNoMTNbMF0pIC0gKHRzaDExWzJdICogdHNoMTFbMl0gLSB0c2gxMVswXSAqIHRzaDExWzBdKSk7XHJcbiAgICAgICAgU3BsYXRCdWZmZXIuZG90NShpbjEsIGluMiwgaW4zLCBpbjQsIGluNSwgdHNoMjUsIG91dDUpO1xyXG4gICAgfTtcclxuXHJcbiAgICBzdGF0aWMgcGFyc2VIZWFkZXIoYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyQXJyYXlVaW50OCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgMCwgU3BsYXRCdWZmZXIuSGVhZGVyU2l6ZUJ5dGVzKTtcclxuICAgICAgICBjb25zdCBoZWFkZXJBcnJheVVpbnQxNiA9IG5ldyBVaW50MTZBcnJheShidWZmZXIsIDAsIFNwbGF0QnVmZmVyLkhlYWRlclNpemVCeXRlcyAvIDIpO1xyXG4gICAgICAgIGNvbnN0IGhlYWRlckFycmF5VWludDMyID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlciwgMCwgU3BsYXRCdWZmZXIuSGVhZGVyU2l6ZUJ5dGVzIC8gNCk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyQXJyYXlGbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIDAsIFNwbGF0QnVmZmVyLkhlYWRlclNpemVCeXRlcyAvIDQpO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb25NYWpvciA9IGhlYWRlckFycmF5VWludDhbMF07XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbk1pbm9yID0gaGVhZGVyQXJyYXlVaW50OFsxXTtcclxuICAgICAgICBjb25zdCBtYXhTZWN0aW9uQ291bnQgPSBoZWFkZXJBcnJheVVpbnQzMlsxXTtcclxuICAgICAgICBjb25zdCBzZWN0aW9uQ291bnQgPSBoZWFkZXJBcnJheVVpbnQzMlsyXTtcclxuICAgICAgICBjb25zdCBtYXhTcGxhdENvdW50ID0gaGVhZGVyQXJyYXlVaW50MzJbM107XHJcbiAgICAgICAgY29uc3Qgc3BsYXRDb3VudCA9IGhlYWRlckFycmF5VWludDMyWzRdO1xyXG4gICAgICAgIGNvbnN0IGNvbXByZXNzaW9uTGV2ZWwgPSBoZWFkZXJBcnJheVVpbnQxNlsxMF07XHJcbiAgICAgICAgY29uc3Qgc2NlbmVDZW50ZXIgPSBuZXcgVmVjdG9yMyhoZWFkZXJBcnJheUZsb2F0MzJbNl0sIGhlYWRlckFycmF5RmxvYXQzMls3XSwgaGVhZGVyQXJyYXlGbG9hdDMyWzhdKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWluU3BoZXJpY2FsSGFybW9uaWNzQ29lZmYgPSBoZWFkZXJBcnJheUZsb2F0MzJbOV0gfHwgLURlZmF1bHRTcGhlcmljYWxIYXJtb25pY3M4Qml0Q29tcHJlc3Npb25IYWxmUmFuZ2U7XHJcbiAgICAgICAgY29uc3QgbWF4U3BoZXJpY2FsSGFybW9uaWNzQ29lZmYgPSBoZWFkZXJBcnJheUZsb2F0MzJbMTBdIHx8IERlZmF1bHRTcGhlcmljYWxIYXJtb25pY3M4Qml0Q29tcHJlc3Npb25IYWxmUmFuZ2U7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcnNpb25NYWpvcixcclxuICAgICAgICAgICAgdmVyc2lvbk1pbm9yLFxyXG4gICAgICAgICAgICBtYXhTZWN0aW9uQ291bnQsXHJcbiAgICAgICAgICAgIHNlY3Rpb25Db3VudCxcclxuICAgICAgICAgICAgbWF4U3BsYXRDb3VudCxcclxuICAgICAgICAgICAgc3BsYXRDb3VudCxcclxuICAgICAgICAgICAgY29tcHJlc3Npb25MZXZlbCxcclxuICAgICAgICAgICAgc2NlbmVDZW50ZXIsXHJcbiAgICAgICAgICAgIG1pblNwaGVyaWNhbEhhcm1vbmljc0NvZWZmLFxyXG4gICAgICAgICAgICBtYXhTcGhlcmljYWxIYXJtb25pY3NDb2VmZlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHdyaXRlSGVhZGVyQ291bnRzVG9CdWZmZXIoc2VjdGlvbkNvdW50LCBzcGxhdENvdW50LCBidWZmZXIpIHtcclxuICAgICAgICBjb25zdCBoZWFkZXJBcnJheVVpbnQzMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXIsIDAsIFNwbGF0QnVmZmVyLkhlYWRlclNpemVCeXRlcyAvIDQpO1xyXG4gICAgICAgIGhlYWRlckFycmF5VWludDMyWzJdID0gc2VjdGlvbkNvdW50O1xyXG4gICAgICAgIGhlYWRlckFycmF5VWludDMyWzRdID0gc3BsYXRDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgd3JpdGVIZWFkZXJUb0J1ZmZlcihoZWFkZXIsIGJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlckFycmF5VWludDggPSBuZXcgVWludDhBcnJheShidWZmZXIsIDAsIFNwbGF0QnVmZmVyLkhlYWRlclNpemVCeXRlcyk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyQXJyYXlVaW50MTYgPSBuZXcgVWludDE2QXJyYXkoYnVmZmVyLCAwLCBTcGxhdEJ1ZmZlci5IZWFkZXJTaXplQnl0ZXMgLyAyKTtcclxuICAgICAgICBjb25zdCBoZWFkZXJBcnJheVVpbnQzMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXIsIDAsIFNwbGF0QnVmZmVyLkhlYWRlclNpemVCeXRlcyAvIDQpO1xyXG4gICAgICAgIGNvbnN0IGhlYWRlckFycmF5RmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCAwLCBTcGxhdEJ1ZmZlci5IZWFkZXJTaXplQnl0ZXMgLyA0KTtcclxuICAgICAgICBoZWFkZXJBcnJheVVpbnQ4WzBdID0gaGVhZGVyLnZlcnNpb25NYWpvcjtcclxuICAgICAgICBoZWFkZXJBcnJheVVpbnQ4WzFdID0gaGVhZGVyLnZlcnNpb25NaW5vcjtcclxuICAgICAgICBoZWFkZXJBcnJheVVpbnQ4WzJdID0gMDsgLy8gdW51c2VkIGZvciBub3dcclxuICAgICAgICBoZWFkZXJBcnJheVVpbnQ4WzNdID0gMDsgLy8gdW51c2VkIGZvciBub3dcclxuICAgICAgICBoZWFkZXJBcnJheVVpbnQzMlsxXSA9IGhlYWRlci5tYXhTZWN0aW9uQ291bnQ7XHJcbiAgICAgICAgaGVhZGVyQXJyYXlVaW50MzJbMl0gPSBoZWFkZXIuc2VjdGlvbkNvdW50O1xyXG4gICAgICAgIGhlYWRlckFycmF5VWludDMyWzNdID0gaGVhZGVyLm1heFNwbGF0Q291bnQ7XHJcbiAgICAgICAgaGVhZGVyQXJyYXlVaW50MzJbNF0gPSBoZWFkZXIuc3BsYXRDb3VudDtcclxuICAgICAgICBoZWFkZXJBcnJheVVpbnQxNlsxMF0gPSBoZWFkZXIuY29tcHJlc3Npb25MZXZlbDtcclxuICAgICAgICBoZWFkZXJBcnJheUZsb2F0MzJbNl0gPSBoZWFkZXIuc2NlbmVDZW50ZXIueDtcclxuICAgICAgICBoZWFkZXJBcnJheUZsb2F0MzJbN10gPSBoZWFkZXIuc2NlbmVDZW50ZXIueTtcclxuICAgICAgICBoZWFkZXJBcnJheUZsb2F0MzJbOF0gPSBoZWFkZXIuc2NlbmVDZW50ZXIuejtcclxuICAgICAgICBoZWFkZXJBcnJheUZsb2F0MzJbOV0gPSBoZWFkZXIubWluU3BoZXJpY2FsSGFybW9uaWNzQ29lZmYgfHwgLURlZmF1bHRTcGhlcmljYWxIYXJtb25pY3M4Qml0Q29tcHJlc3Npb25IYWxmUmFuZ2U7XHJcbiAgICAgICAgaGVhZGVyQXJyYXlGbG9hdDMyWzEwXSA9IGhlYWRlci5tYXhTcGhlcmljYWxIYXJtb25pY3NDb2VmZiB8fCBEZWZhdWx0U3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uSGFsZlJhbmdlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBwYXJzZVNlY3Rpb25IZWFkZXJzKGhlYWRlciwgYnVmZmVyLCBvZmZzZXQgPSAwLCBzZWNMb2FkZWRDb3VudHNUb01heCkge1xyXG4gICAgICAgIGNvbnN0IGNvbXByZXNzaW9uTGV2ZWwgPSBoZWFkZXIuY29tcHJlc3Npb25MZXZlbDtcclxuXHJcbiAgICAgICAgY29uc3QgbWF4U2VjdGlvbkNvdW50ID0gaGVhZGVyLm1heFNlY3Rpb25Db3VudDtcclxuICAgICAgICBjb25zdCBzZWN0aW9uSGVhZGVyQXJyYXlVaW50MTYgPSBuZXcgVWludDE2QXJyYXkoYnVmZmVyLCBvZmZzZXQsIG1heFNlY3Rpb25Db3VudCAqIFNwbGF0QnVmZmVyLlNlY3Rpb25IZWFkZXJTaXplQnl0ZXMgLyAyKTtcclxuICAgICAgICBjb25zdCBzZWN0aW9uSGVhZGVyQXJyYXlVaW50MzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIG1heFNlY3Rpb25Db3VudCAqIFNwbGF0QnVmZmVyLlNlY3Rpb25IZWFkZXJTaXplQnl0ZXMgLyA0KTtcclxuICAgICAgICBjb25zdCBzZWN0aW9uSGVhZGVyQXJyYXlGbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgbWF4U2VjdGlvbkNvdW50ICogU3BsYXRCdWZmZXIuU2VjdGlvbkhlYWRlclNpemVCeXRlcyAvIDQpO1xyXG5cclxuICAgICAgICBjb25zdCBzZWN0aW9uSGVhZGVycyA9IFtdO1xyXG4gICAgICAgIGxldCBzZWN0aW9uSGVhZGVyQmFzZSA9IDA7XHJcbiAgICAgICAgbGV0IHNlY3Rpb25IZWFkZXJCYXNlVWludDE2ID0gc2VjdGlvbkhlYWRlckJhc2UgLyAyO1xyXG4gICAgICAgIGxldCBzZWN0aW9uSGVhZGVyQmFzZVVpbnQzMiA9IHNlY3Rpb25IZWFkZXJCYXNlIC8gNDtcclxuICAgICAgICBsZXQgc2VjdGlvbkJhc2UgPSBTcGxhdEJ1ZmZlci5IZWFkZXJTaXplQnl0ZXMgKyBoZWFkZXIubWF4U2VjdGlvbkNvdW50ICogU3BsYXRCdWZmZXIuU2VjdGlvbkhlYWRlclNpemVCeXRlcztcclxuICAgICAgICBsZXQgc3BsYXRDb3VudE9mZnNldCA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhTZWN0aW9uQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBtYXhTcGxhdENvdW50ID0gc2VjdGlvbkhlYWRlckFycmF5VWludDMyW3NlY3Rpb25IZWFkZXJCYXNlVWludDMyICsgMV07XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldFNpemUgPSBzZWN0aW9uSGVhZGVyQXJyYXlVaW50MzJbc2VjdGlvbkhlYWRlckJhc2VVaW50MzIgKyAyXTtcclxuICAgICAgICAgICAgY29uc3QgYnVja2V0Q291bnQgPSBzZWN0aW9uSGVhZGVyQXJyYXlVaW50MzJbc2VjdGlvbkhlYWRlckJhc2VVaW50MzIgKyAzXTtcclxuICAgICAgICAgICAgY29uc3QgYnVja2V0QmxvY2tTaXplID0gc2VjdGlvbkhlYWRlckFycmF5RmxvYXQzMltzZWN0aW9uSGVhZGVyQmFzZVVpbnQzMiArIDRdO1xyXG4gICAgICAgICAgICBjb25zdCBoYWxmQnVja2V0QmxvY2tTaXplID0gYnVja2V0QmxvY2tTaXplIC8gMi4wO1xyXG4gICAgICAgICAgICBjb25zdCBidWNrZXRTdG9yYWdlU2l6ZUJ5dGVzID0gc2VjdGlvbkhlYWRlckFycmF5VWludDE2W3NlY3Rpb25IZWFkZXJCYXNlVWludDE2ICsgMTBdO1xyXG4gICAgICAgICAgICBjb25zdCBjb21wcmVzc2lvblNjYWxlUmFuZ2UgPSBzZWN0aW9uSGVhZGVyQXJyYXlVaW50MzJbc2VjdGlvbkhlYWRlckJhc2VVaW50MzIgKyA2XSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGxhdEJ1ZmZlci5Db21wcmVzc2lvbkxldmVsc1tjb21wcmVzc2lvbkxldmVsXS5TY2FsZVJhbmdlO1xyXG4gICAgICAgICAgICBjb25zdCBmdWxsQnVja2V0Q291bnQgPSBzZWN0aW9uSGVhZGVyQXJyYXlVaW50MzJbc2VjdGlvbkhlYWRlckJhc2VVaW50MzIgKyA4XTtcclxuICAgICAgICAgICAgY29uc3QgcGFydGlhbGx5RmlsbGVkQnVja2V0Q291bnQgPSBzZWN0aW9uSGVhZGVyQXJyYXlVaW50MzJbc2VjdGlvbkhlYWRlckJhc2VVaW50MzIgKyA5XTtcclxuICAgICAgICAgICAgY29uc3QgYnVja2V0c01ldGFEYXRhU2l6ZUJ5dGVzID0gcGFydGlhbGx5RmlsbGVkQnVja2V0Q291bnQgKiA0O1xyXG4gICAgICAgICAgICBjb25zdCBidWNrZXRzU3RvcmFnZVNpemVCeXRlcyA9IGJ1Y2tldFN0b3JhZ2VTaXplQnl0ZXMgKiBidWNrZXRDb3VudCArIGJ1Y2tldHNNZXRhRGF0YVNpemVCeXRlcztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA9IHNlY3Rpb25IZWFkZXJBcnJheVVpbnQxNltzZWN0aW9uSGVhZGVyQmFzZVVpbnQxNiArIDIwXTtcclxuICAgICAgICAgICAgY29uc3QgeyBieXRlc1BlclNwbGF0IH0gPSBTcGxhdEJ1ZmZlci5jYWxjdWxhdGVDb21wb25lbnRTdG9yYWdlKGNvbXByZXNzaW9uTGV2ZWwsIHNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzcGxhdERhdGFTdG9yYWdlU2l6ZUJ5dGVzID0gYnl0ZXNQZXJTcGxhdCAqIG1heFNwbGF0Q291bnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VTaXplQnl0ZXMgPSBzcGxhdERhdGFTdG9yYWdlU2l6ZUJ5dGVzICsgYnVja2V0c1N0b3JhZ2VTaXplQnl0ZXM7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25IZWFkZXIgPSB7XHJcbiAgICAgICAgICAgICAgICBieXRlc1BlclNwbGF0OiBieXRlc1BlclNwbGF0LFxyXG4gICAgICAgICAgICAgICAgc3BsYXRDb3VudE9mZnNldDogc3BsYXRDb3VudE9mZnNldCxcclxuICAgICAgICAgICAgICAgIHNwbGF0Q291bnQ6IHNlY0xvYWRlZENvdW50c1RvTWF4ID8gbWF4U3BsYXRDb3VudCA6IDAsXHJcbiAgICAgICAgICAgICAgICBtYXhTcGxhdENvdW50OiBtYXhTcGxhdENvdW50LFxyXG4gICAgICAgICAgICAgICAgYnVja2V0U2l6ZTogYnVja2V0U2l6ZSxcclxuICAgICAgICAgICAgICAgIGJ1Y2tldENvdW50OiBidWNrZXRDb3VudCxcclxuICAgICAgICAgICAgICAgIGJ1Y2tldEJsb2NrU2l6ZTogYnVja2V0QmxvY2tTaXplLFxyXG4gICAgICAgICAgICAgICAgaGFsZkJ1Y2tldEJsb2NrU2l6ZTogaGFsZkJ1Y2tldEJsb2NrU2l6ZSxcclxuICAgICAgICAgICAgICAgIGJ1Y2tldFN0b3JhZ2VTaXplQnl0ZXM6IGJ1Y2tldFN0b3JhZ2VTaXplQnl0ZXMsXHJcbiAgICAgICAgICAgICAgICBidWNrZXRzU3RvcmFnZVNpemVCeXRlczogYnVja2V0c1N0b3JhZ2VTaXplQnl0ZXMsXHJcbiAgICAgICAgICAgICAgICBzcGxhdERhdGFTdG9yYWdlU2l6ZUJ5dGVzOiBzcGxhdERhdGFTdG9yYWdlU2l6ZUJ5dGVzLFxyXG4gICAgICAgICAgICAgICAgc3RvcmFnZVNpemVCeXRlczogc3RvcmFnZVNpemVCeXRlcyxcclxuICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uU2NhbGVSYW5nZTogY29tcHJlc3Npb25TY2FsZVJhbmdlLFxyXG4gICAgICAgICAgICAgICAgY29tcHJlc3Npb25TY2FsZUZhY3RvcjogaGFsZkJ1Y2tldEJsb2NrU2l6ZSAvIGNvbXByZXNzaW9uU2NhbGVSYW5nZSxcclxuICAgICAgICAgICAgICAgIGJhc2U6IHNlY3Rpb25CYXNlLFxyXG4gICAgICAgICAgICAgICAgYnVja2V0c0Jhc2U6IHNlY3Rpb25CYXNlICsgYnVja2V0c01ldGFEYXRhU2l6ZUJ5dGVzLFxyXG4gICAgICAgICAgICAgICAgZGF0YUJhc2U6IHNlY3Rpb25CYXNlICsgYnVja2V0c1N0b3JhZ2VTaXplQnl0ZXMsXHJcbiAgICAgICAgICAgICAgICBmdWxsQnVja2V0Q291bnQ6IGZ1bGxCdWNrZXRDb3VudCxcclxuICAgICAgICAgICAgICAgIHBhcnRpYWxseUZpbGxlZEJ1Y2tldENvdW50OiBwYXJ0aWFsbHlGaWxsZWRCdWNrZXRDb3VudCxcclxuICAgICAgICAgICAgICAgIHNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZTogc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHNlY3Rpb25IZWFkZXJzW2ldID0gc2VjdGlvbkhlYWRlcjtcclxuICAgICAgICAgICAgc2VjdGlvbkJhc2UgKz0gc3RvcmFnZVNpemVCeXRlcztcclxuICAgICAgICAgICAgc2VjdGlvbkhlYWRlckJhc2UgKz0gU3BsYXRCdWZmZXIuU2VjdGlvbkhlYWRlclNpemVCeXRlcztcclxuICAgICAgICAgICAgc2VjdGlvbkhlYWRlckJhc2VVaW50MTYgPSBzZWN0aW9uSGVhZGVyQmFzZSAvIDI7XHJcbiAgICAgICAgICAgIHNlY3Rpb25IZWFkZXJCYXNlVWludDMyID0gc2VjdGlvbkhlYWRlckJhc2UgLyA0O1xyXG4gICAgICAgICAgICBzcGxhdENvdW50T2Zmc2V0ICs9IG1heFNwbGF0Q291bnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc2VjdGlvbkhlYWRlcnM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHN0YXRpYyB3cml0ZVNlY3Rpb25IZWFkZXJUb0J1ZmZlcihzZWN0aW9uSGVhZGVyLCBjb21wcmVzc2lvbkxldmVsLCBidWZmZXIsIG9mZnNldCA9IDApIHtcclxuICAgICAgICBjb25zdCBzZWN0aW9uSGVhZGVBcnJheVVpbnQxNiA9IG5ldyBVaW50MTZBcnJheShidWZmZXIsIG9mZnNldCwgU3BsYXRCdWZmZXIuU2VjdGlvbkhlYWRlclNpemVCeXRlcyAvIDIpO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25IZWFkZUFycmF5VWludDMyID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBTcGxhdEJ1ZmZlci5TZWN0aW9uSGVhZGVyU2l6ZUJ5dGVzIC8gNCk7XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbkhlYWRlQXJyYXlGbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgU3BsYXRCdWZmZXIuU2VjdGlvbkhlYWRlclNpemVCeXRlcyAvIDQpO1xyXG5cclxuICAgICAgICBzZWN0aW9uSGVhZGVBcnJheVVpbnQzMlswXSA9IHNlY3Rpb25IZWFkZXIuc3BsYXRDb3VudDtcclxuICAgICAgICBzZWN0aW9uSGVhZGVBcnJheVVpbnQzMlsxXSA9IHNlY3Rpb25IZWFkZXIubWF4U3BsYXRDb3VudDtcclxuICAgICAgICBzZWN0aW9uSGVhZGVBcnJheVVpbnQzMlsyXSA9IGNvbXByZXNzaW9uTGV2ZWwgPj0gMSA/IHNlY3Rpb25IZWFkZXIuYnVja2V0U2l6ZSA6IDA7XHJcbiAgICAgICAgc2VjdGlvbkhlYWRlQXJyYXlVaW50MzJbM10gPSBjb21wcmVzc2lvbkxldmVsID49IDEgPyBzZWN0aW9uSGVhZGVyLmJ1Y2tldENvdW50IDogMDtcclxuICAgICAgICBzZWN0aW9uSGVhZGVBcnJheUZsb2F0MzJbNF0gPSBjb21wcmVzc2lvbkxldmVsID49IDEgPyBzZWN0aW9uSGVhZGVyLmJ1Y2tldEJsb2NrU2l6ZSA6IDAuMDtcclxuICAgICAgICBzZWN0aW9uSGVhZGVBcnJheVVpbnQxNlsxMF0gPSBjb21wcmVzc2lvbkxldmVsID49IDEgPyBTcGxhdEJ1ZmZlci5CdWNrZXRTdG9yYWdlU2l6ZUJ5dGVzIDogMDtcclxuICAgICAgICBzZWN0aW9uSGVhZGVBcnJheVVpbnQzMls2XSA9IGNvbXByZXNzaW9uTGV2ZWwgPj0gMSA/IHNlY3Rpb25IZWFkZXIuY29tcHJlc3Npb25TY2FsZVJhbmdlIDogMDtcclxuICAgICAgICBzZWN0aW9uSGVhZGVBcnJheVVpbnQzMls3XSA9IHNlY3Rpb25IZWFkZXIuc3RvcmFnZVNpemVCeXRlcztcclxuICAgICAgICBzZWN0aW9uSGVhZGVBcnJheVVpbnQzMls4XSA9IGNvbXByZXNzaW9uTGV2ZWwgPj0gMSA/IHNlY3Rpb25IZWFkZXIuZnVsbEJ1Y2tldENvdW50IDogMDtcclxuICAgICAgICBzZWN0aW9uSGVhZGVBcnJheVVpbnQzMls5XSA9IGNvbXByZXNzaW9uTGV2ZWwgPj0gMSA/IHNlY3Rpb25IZWFkZXIucGFydGlhbGx5RmlsbGVkQnVja2V0Q291bnQgOiAwO1xyXG4gICAgICAgIHNlY3Rpb25IZWFkZUFycmF5VWludDE2WzIwXSA9IHNlY3Rpb25IZWFkZXIuc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgd3JpdGVTZWN0aW9uSGVhZGVyU3BsYXRDb3VudFRvQnVmZmVyKHNwbGF0Q291bnQsIGJ1ZmZlciwgb2Zmc2V0ID0gMCkge1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25IZWFkZUFycmF5VWludDMyID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBTcGxhdEJ1ZmZlci5TZWN0aW9uSGVhZGVyU2l6ZUJ5dGVzIC8gNCk7XHJcbiAgICAgICAgc2VjdGlvbkhlYWRlQXJyYXlVaW50MzJbMF0gPSBzcGxhdENvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdEZyb21CdWZmZXIoYnVmZmVyRGF0YSwgc2VjTG9hZGVkQ291bnRzVG9NYXgpIHtcclxuICAgICAgICB0aGlzLmJ1ZmZlckRhdGEgPSBidWZmZXJEYXRhO1xyXG5cclxuICAgICAgICB0aGlzLmdsb2JhbFNwbGF0SW5kZXhUb0xvY2FsU3BsYXRJbmRleE1hcCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsU3BsYXRJbmRleFRvU2VjdGlvbk1hcCA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBoZWFkZXIgPSBTcGxhdEJ1ZmZlci5wYXJzZUhlYWRlcih0aGlzLmJ1ZmZlckRhdGEpO1xyXG4gICAgICAgIHRoaXMudmVyc2lvbk1ham9yID0gaGVhZGVyLnZlcnNpb25NYWpvcjtcclxuICAgICAgICB0aGlzLnZlcnNpb25NaW5vciA9IGhlYWRlci52ZXJzaW9uTWlub3I7XHJcbiAgICAgICAgdGhpcy5tYXhTZWN0aW9uQ291bnQgPSBoZWFkZXIubWF4U2VjdGlvbkNvdW50O1xyXG4gICAgICAgIHRoaXMuc2VjdGlvbkNvdW50ID0gc2VjTG9hZGVkQ291bnRzVG9NYXggPyBoZWFkZXIubWF4U2VjdGlvbkNvdW50IDogMDtcclxuICAgICAgICB0aGlzLm1heFNwbGF0Q291bnQgPSBoZWFkZXIubWF4U3BsYXRDb3VudDtcclxuICAgICAgICB0aGlzLnNwbGF0Q291bnQgPSBzZWNMb2FkZWRDb3VudHNUb01heCA/IGhlYWRlci5tYXhTcGxhdENvdW50IDogMDtcclxuICAgICAgICB0aGlzLmNvbXByZXNzaW9uTGV2ZWwgPSBoZWFkZXIuY29tcHJlc3Npb25MZXZlbDtcclxuICAgICAgICB0aGlzLnNjZW5lQ2VudGVyID0gbmV3IFZlY3RvcjMoKS5jb3B5KGhlYWRlci5zY2VuZUNlbnRlcik7XHJcbiAgICAgICAgdGhpcy5taW5TcGhlcmljYWxIYXJtb25pY3NDb2VmZiA9IGhlYWRlci5taW5TcGhlcmljYWxIYXJtb25pY3NDb2VmZjtcclxuICAgICAgICB0aGlzLm1heFNwaGVyaWNhbEhhcm1vbmljc0NvZWZmID0gaGVhZGVyLm1heFNwaGVyaWNhbEhhcm1vbmljc0NvZWZmO1xyXG5cclxuICAgICAgICB0aGlzLnNlY3Rpb25zID0gU3BsYXRCdWZmZXIucGFyc2VTZWN0aW9uSGVhZGVycyhoZWFkZXIsIHRoaXMuYnVmZmVyRGF0YSwgU3BsYXRCdWZmZXIuSGVhZGVyU2l6ZUJ5dGVzLCBzZWNMb2FkZWRDb3VudHNUb01heCk7XHJcblxyXG4gICAgICAgIHRoaXMubGlua0J1ZmZlckFycmF5cygpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRNYXBzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNhbGN1bGF0ZUNvbXBvbmVudFN0b3JhZ2UoY29tcHJlc3Npb25MZXZlbCwgc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKSB7XHJcbiAgICAgICAgY29uc3QgYnl0ZXNQZXJDZW50ZXIgPSBTcGxhdEJ1ZmZlci5Db21wcmVzc2lvbkxldmVsc1tjb21wcmVzc2lvbkxldmVsXS5CeXRlc1BlckNlbnRlcjtcclxuICAgICAgICBjb25zdCBieXRlc1BlclNjYWxlID0gU3BsYXRCdWZmZXIuQ29tcHJlc3Npb25MZXZlbHNbY29tcHJlc3Npb25MZXZlbF0uQnl0ZXNQZXJTY2FsZTtcclxuICAgICAgICBjb25zdCBieXRlc1BlclJvdGF0aW9uID0gU3BsYXRCdWZmZXIuQ29tcHJlc3Npb25MZXZlbHNbY29tcHJlc3Npb25MZXZlbF0uQnl0ZXNQZXJSb3RhdGlvbjtcclxuICAgICAgICBjb25zdCBieXRlc1BlckNvbG9yID0gU3BsYXRCdWZmZXIuQ29tcHJlc3Npb25MZXZlbHNbY29tcHJlc3Npb25MZXZlbF0uQnl0ZXNQZXJDb2xvcjtcclxuICAgICAgICBjb25zdCBzcGhlcmljYWxIYXJtb25pY3NDb21wb25lbnRzUGVyU3BsYXQgPSBnZXRTcGhlcmljYWxIYXJtb25pY3NDb21wb25lbnRDb3VudEZvckRlZ3JlZShzcGhlcmljYWxIYXJtb25pY3NEZWdyZWUpO1xyXG4gICAgICAgIGNvbnN0IHNwaGVyaWNhbEhhcm1vbmljc0J5dGVzUGVyU3BsYXQgPSBTcGxhdEJ1ZmZlci5Db21wcmVzc2lvbkxldmVsc1tjb21wcmVzc2lvbkxldmVsXS5CeXRlc1BlclNwaGVyaWNhbEhhcm1vbmljc0NvbXBvbmVudCAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaGVyaWNhbEhhcm1vbmljc0NvbXBvbmVudHNQZXJTcGxhdDtcclxuICAgICAgICBjb25zdCBieXRlc1BlclNwbGF0ID0gYnl0ZXNQZXJDZW50ZXIgKyBieXRlc1BlclNjYWxlICsgYnl0ZXNQZXJSb3RhdGlvbiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUGVyQ29sb3IgKyBzcGhlcmljYWxIYXJtb25pY3NCeXRlc1BlclNwbGF0O1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGJ5dGVzUGVyQ2VudGVyLFxyXG4gICAgICAgICAgICBieXRlc1BlclNjYWxlLFxyXG4gICAgICAgICAgICBieXRlc1BlclJvdGF0aW9uLFxyXG4gICAgICAgICAgICBieXRlc1BlckNvbG9yLFxyXG4gICAgICAgICAgICBzcGhlcmljYWxIYXJtb25pY3NDb21wb25lbnRzUGVyU3BsYXQsXHJcbiAgICAgICAgICAgIHNwaGVyaWNhbEhhcm1vbmljc0J5dGVzUGVyU3BsYXQsXHJcbiAgICAgICAgICAgIGJ5dGVzUGVyU3BsYXRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGxpbmtCdWZmZXJBcnJheXMoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1heFNlY3Rpb25Db3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLnNlY3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBzZWN0aW9uLmJ1Y2tldEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmJ1ZmZlckRhdGEsIHNlY3Rpb24uYnVja2V0c0Jhc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uYnVja2V0Q291bnQgKiBTcGxhdEJ1ZmZlci5CdWNrZXRTdG9yYWdlU2l6ZUZsb2F0cyk7XHJcbiAgICAgICAgICAgIGlmIChzZWN0aW9uLnBhcnRpYWxseUZpbGxlZEJ1Y2tldENvdW50ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5wYXJ0aWFsbHlGaWxsZWRCdWNrZXRMZW5ndGhzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYnVmZmVyRGF0YSwgc2VjdGlvbi5iYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24ucGFydGlhbGx5RmlsbGVkQnVja2V0Q291bnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkTWFwcygpIHtcclxuICAgICAgICBsZXQgY3VtdWxhdGl2ZVNwbGF0Q291bnQgPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tYXhTZWN0aW9uQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5zZWN0aW9uc1tpXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzZWN0aW9uLm1heFNwbGF0Q291bnQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ2xvYmFsU3BsYXRJbmRleCA9IGN1bXVsYXRpdmVTcGxhdENvdW50ICsgajtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2xvYmFsU3BsYXRJbmRleFRvTG9jYWxTcGxhdEluZGV4TWFwW2dsb2JhbFNwbGF0SW5kZXhdID0gajtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2xvYmFsU3BsYXRJbmRleFRvU2VjdGlvbk1hcFtnbG9iYWxTcGxhdEluZGV4XSA9IGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VtdWxhdGl2ZVNwbGF0Q291bnQgKz0gc2VjdGlvbi5tYXhTcGxhdENvdW50O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVMb2FkZWRDb3VudHMobmV3U2VjdGlvbkNvdW50LCBuZXdTcGxhdENvdW50KSB7XHJcbiAgICAgICAgU3BsYXRCdWZmZXIud3JpdGVIZWFkZXJDb3VudHNUb0J1ZmZlcihuZXdTZWN0aW9uQ291bnQsIG5ld1NwbGF0Q291bnQsIHRoaXMuYnVmZmVyRGF0YSk7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uQ291bnQgPSBuZXdTZWN0aW9uQ291bnQ7XHJcbiAgICAgICAgdGhpcy5zcGxhdENvdW50ID0gbmV3U3BsYXRDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTZWN0aW9uTG9hZGVkQ291bnRzKHNlY3Rpb25JbmRleCwgbmV3U3BsYXRDb3VudCkge1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25IZWFkZXJPZmZzZXQgPSBTcGxhdEJ1ZmZlci5IZWFkZXJTaXplQnl0ZXMgKyBTcGxhdEJ1ZmZlci5TZWN0aW9uSGVhZGVyU2l6ZUJ5dGVzICogc2VjdGlvbkluZGV4O1xyXG4gICAgICAgIFNwbGF0QnVmZmVyLndyaXRlU2VjdGlvbkhlYWRlclNwbGF0Q291bnRUb0J1ZmZlcihuZXdTcGxhdENvdW50LCB0aGlzLmJ1ZmZlckRhdGEsIHNlY3Rpb25IZWFkZXJPZmZzZXQpO1xyXG4gICAgICAgIHRoaXMuc2VjdGlvbnNbc2VjdGlvbkluZGV4XS5zcGxhdENvdW50ID0gbmV3U3BsYXRDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgd3JpdGVTcGxhdERhdGFUb1NlY3Rpb25CdWZmZXIgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgY29uc3QgdGVtcENlbnRlckJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigxMik7XHJcbiAgICAgICAgY29uc3QgdGVtcFNjYWxlQnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDEyKTtcclxuICAgICAgICBjb25zdCB0ZW1wUm90YXRpb25CdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoMTYpO1xyXG4gICAgICAgIGNvbnN0IHRlbXBDb2xvckJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig0KTtcclxuICAgICAgICBjb25zdCB0ZW1wU0hCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoMjU2KTtcclxuICAgICAgICBjb25zdCB0ZW1wUm90ID0gbmV3IFF1YXRlcm5pb24oKTtcclxuICAgICAgICBjb25zdCB0ZW1wU2NhbGUgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIGNvbnN0IGJ1Y2tldENlbnRlckRlbHRhID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICBYOiBPRkZTRVRfWCwgWTogT0ZGU0VUX1ksIFo6IE9GRlNFVF9aLFxyXG4gICAgICAgICAgICBTQ0FMRTA6IE9GRlNFVF9TQ0FMRTAsIFNDQUxFMTogT0ZGU0VUX1NDQUxFMSwgU0NBTEUyOiBPRkZTRVRfU0NBTEUyLFxyXG4gICAgICAgICAgICBST1RBVElPTjA6IE9GRlNFVF9ST1QwLCBST1RBVElPTjE6IE9GRlNFVF9ST1QxLCBST1RBVElPTjI6IE9GRlNFVF9ST1QyLCBST1RBVElPTjM6IE9GRlNFVF9ST1QzLFxyXG4gICAgICAgICAgICBGREMwOiBPRkZTRVRfRkRDMCwgRkRDMTogT0ZGU0VUX0ZEQzEsIEZEQzI6IE9GRlNFVF9GREMyLCBPUEFDSVRZOiBPRkZTRVRfT1BBQ0lUWSxcclxuICAgICAgICAgICAgRlJDMDogT0ZGU0VUX0ZSQzAsIEZSQzk6IE9GRlNFVF9GUkM5LFxyXG4gICAgICAgIH0gPSBVbmNvbXByZXNzZWRTcGxhdEFycmF5Lk9GRlNFVDtcclxuXHJcbiAgICAgICAgY29uc3QgY29tcHJlc3NQb3NpdGlvbk9mZnNldCA9ICh2LCBjb21wcmVzc2lvblNjYWxlRmFjdG9yLCBjb21wcmVzc2lvblNjYWxlUmFuZ2UpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZG91YmxlQ29tcHJlc3Npb25TY2FsZVJhbmdlID0gY29tcHJlc3Npb25TY2FsZVJhbmdlICogMiArIDE7XHJcbiAgICAgICAgICAgIHYgPSBNYXRoLnJvdW5kKHYgKiBjb21wcmVzc2lvblNjYWxlRmFjdG9yKSArIGNvbXByZXNzaW9uU2NhbGVSYW5nZTtcclxuICAgICAgICAgICAgcmV0dXJuIGNsYW1wKHYsIDAsIGRvdWJsZUNvbXByZXNzaW9uU2NhbGVSYW5nZSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHRhcmdldFNwbGF0LCBzZWN0aW9uQnVmZmVyLCBidWZmZXJPZmZzZXQsIGNvbXByZXNzaW9uTGV2ZWwsIHNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0Q2VudGVyLCBjb21wcmVzc2lvblNjYWxlRmFjdG9yLCBjb21wcmVzc2lvblNjYWxlUmFuZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pblNwaGVyaWNhbEhhcm1vbmljc0NvZWZmID0gLURlZmF1bHRTcGhlcmljYWxIYXJtb25pY3M4Qml0Q29tcHJlc3Npb25IYWxmUmFuZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFNwaGVyaWNhbEhhcm1vbmljc0NvZWZmID0gRGVmYXVsdFNwaGVyaWNhbEhhcm1vbmljczhCaXRDb21wcmVzc2lvbkhhbGZSYW5nZSkge1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3BoZXJpY2FsSGFybW9uaWNzQ29tcG9uZW50c1BlclNwbGF0ID0gZ2V0U3BoZXJpY2FsSGFybW9uaWNzQ29tcG9uZW50Q291bnRGb3JEZWdyZWUoc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKTtcclxuICAgICAgICAgICAgY29uc3QgYnl0ZXNQZXJDZW50ZXIgPSBTcGxhdEJ1ZmZlci5Db21wcmVzc2lvbkxldmVsc1tjb21wcmVzc2lvbkxldmVsXS5CeXRlc1BlckNlbnRlcjtcclxuICAgICAgICAgICAgY29uc3QgYnl0ZXNQZXJTY2FsZSA9IFNwbGF0QnVmZmVyLkNvbXByZXNzaW9uTGV2ZWxzW2NvbXByZXNzaW9uTGV2ZWxdLkJ5dGVzUGVyU2NhbGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVzUGVyUm90YXRpb24gPSBTcGxhdEJ1ZmZlci5Db21wcmVzc2lvbkxldmVsc1tjb21wcmVzc2lvbkxldmVsXS5CeXRlc1BlclJvdGF0aW9uO1xyXG4gICAgICAgICAgICBjb25zdCBieXRlc1BlckNvbG9yID0gU3BsYXRCdWZmZXIuQ29tcHJlc3Npb25MZXZlbHNbY29tcHJlc3Npb25MZXZlbF0uQnl0ZXNQZXJDb2xvcjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlckJhc2UgPSBidWZmZXJPZmZzZXQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlQmFzZSA9IGNlbnRlckJhc2UgKyBieXRlc1BlckNlbnRlcjtcclxuICAgICAgICAgICAgY29uc3Qgcm90YXRpb25CYXNlID0gc2NhbGVCYXNlICsgYnl0ZXNQZXJTY2FsZTtcclxuICAgICAgICAgICAgY29uc3QgY29sb3JCYXNlID0gcm90YXRpb25CYXNlICsgYnl0ZXNQZXJSb3RhdGlvbjtcclxuICAgICAgICAgICAgY29uc3Qgc3BoZXJpY2FsSGFybW9uaWNzQmFzZSA9IGNvbG9yQmFzZSArIGJ5dGVzUGVyQ29sb3I7XHJcblxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U3BsYXRbT0ZGU0VUX1JPVDBdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRlbXBSb3Quc2V0KHRhcmdldFNwbGF0W09GRlNFVF9ST1QwXSwgdGFyZ2V0U3BsYXRbT0ZGU0VUX1JPVDFdLCB0YXJnZXRTcGxhdFtPRkZTRVRfUk9UMl0sIHRhcmdldFNwbGF0W09GRlNFVF9ST1QzXSk7XHJcbiAgICAgICAgICAgICAgICB0ZW1wUm90Lm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGVtcFJvdC5zZXQoMS4wLCAwLjAsIDAuMCwgMC4wKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldFNwbGF0W09GRlNFVF9TQ0FMRTBdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5zZXQodGFyZ2V0U3BsYXRbT0ZGU0VUX1NDQUxFMF0gfHwgMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3BsYXRbT0ZGU0VUX1NDQUxFMV0gfHwgMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3BsYXRbT0ZGU0VUX1NDQUxFMl0gfHwgMCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wU2NhbGUuc2V0KDAsIDAsIDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29tcHJlc3Npb25MZXZlbCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2VudGVyID0gbmV3IEZsb2F0MzJBcnJheShzZWN0aW9uQnVmZmVyLCBjZW50ZXJCYXNlLCBTcGxhdEJ1ZmZlci5DZW50ZXJDb21wb25lbnRDb3VudCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3QgPSBuZXcgRmxvYXQzMkFycmF5KHNlY3Rpb25CdWZmZXIsIHJvdGF0aW9uQmFzZSwgU3BsYXRCdWZmZXIuUm90YXRpb25Db21wb25lbnRDb3VudCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY2FsZSA9IG5ldyBGbG9hdDMyQXJyYXkoc2VjdGlvbkJ1ZmZlciwgc2NhbGVCYXNlLCBTcGxhdEJ1ZmZlci5TY2FsZUNvbXBvbmVudENvdW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICByb3Quc2V0KFt0ZW1wUm90LngsIHRlbXBSb3QueSwgdGVtcFJvdC56LCB0ZW1wUm90LnddKTtcclxuICAgICAgICAgICAgICAgIHNjYWxlLnNldChbdGVtcFNjYWxlLngsIHRlbXBTY2FsZS55LCB0ZW1wU2NhbGUuel0pO1xyXG4gICAgICAgICAgICAgICAgY2VudGVyLnNldChbdGFyZ2V0U3BsYXRbT0ZGU0VUX1hdLCB0YXJnZXRTcGxhdFtPRkZTRVRfWV0sIHRhcmdldFNwbGF0W09GRlNFVF9aXV0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hPdXQgPSBuZXcgRmxvYXQzMkFycmF5KHNlY3Rpb25CdWZmZXIsIHNwaGVyaWNhbEhhcm1vbmljc0Jhc2UsIHNwaGVyaWNhbEhhcm1vbmljc0NvbXBvbmVudHNQZXJTcGxhdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IDk7IHMrKykgc2hPdXRbc10gPSB0YXJnZXRTcGxhdFtPRkZTRVRfRlJDMCArIHNdIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID49IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IDE1OyBzKyspIHNoT3V0W3MgKyA5XSA9IHRhcmdldFNwbGF0W09GRlNFVF9GUkM5ICsgc10gfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgVWludDE2QXJyYXkodGVtcENlbnRlckJ1ZmZlciwgMCwgU3BsYXRCdWZmZXIuQ2VudGVyQ29tcG9uZW50Q291bnQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm90ID0gbmV3IFVpbnQxNkFycmF5KHRlbXBSb3RhdGlvbkJ1ZmZlciwgMCwgU3BsYXRCdWZmZXIuUm90YXRpb25Db21wb25lbnRDb3VudCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY2FsZSA9IG5ldyBVaW50MTZBcnJheSh0ZW1wU2NhbGVCdWZmZXIsIDAsIFNwbGF0QnVmZmVyLlNjYWxlQ29tcG9uZW50Q291bnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJvdC5zZXQoW3RvSGFsZkZsb2F0KHRlbXBSb3QueCksIHRvSGFsZkZsb2F0KHRlbXBSb3QueSksIHRvSGFsZkZsb2F0KHRlbXBSb3QueiksIHRvSGFsZkZsb2F0KHRlbXBSb3QudyldKTtcclxuICAgICAgICAgICAgICAgIHNjYWxlLnNldChbdG9IYWxmRmxvYXQodGVtcFNjYWxlLngpLCB0b0hhbGZGbG9hdCh0ZW1wU2NhbGUueSksIHRvSGFsZkZsb2F0KHRlbXBTY2FsZS56KV0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGJ1Y2tldENlbnRlckRlbHRhLnNldCh0YXJnZXRTcGxhdFtPRkZTRVRfWF0sIHRhcmdldFNwbGF0W09GRlNFVF9ZXSwgdGFyZ2V0U3BsYXRbT0ZGU0VUX1pdKS5zdWIoYnVja2V0Q2VudGVyKTtcclxuICAgICAgICAgICAgICAgIGJ1Y2tldENlbnRlckRlbHRhLnggPSBjb21wcmVzc1Bvc2l0aW9uT2Zmc2V0KGJ1Y2tldENlbnRlckRlbHRhLngsIGNvbXByZXNzaW9uU2NhbGVGYWN0b3IsIGNvbXByZXNzaW9uU2NhbGVSYW5nZSk7XHJcbiAgICAgICAgICAgICAgICBidWNrZXRDZW50ZXJEZWx0YS55ID0gY29tcHJlc3NQb3NpdGlvbk9mZnNldChidWNrZXRDZW50ZXJEZWx0YS55LCBjb21wcmVzc2lvblNjYWxlRmFjdG9yLCBjb21wcmVzc2lvblNjYWxlUmFuZ2UpO1xyXG4gICAgICAgICAgICAgICAgYnVja2V0Q2VudGVyRGVsdGEueiA9IGNvbXByZXNzUG9zaXRpb25PZmZzZXQoYnVja2V0Q2VudGVyRGVsdGEueiwgY29tcHJlc3Npb25TY2FsZUZhY3RvciwgY29tcHJlc3Npb25TY2FsZVJhbmdlKTtcclxuICAgICAgICAgICAgICAgIGNlbnRlci5zZXQoW2J1Y2tldENlbnRlckRlbHRhLngsIGJ1Y2tldENlbnRlckRlbHRhLnksIGJ1Y2tldENlbnRlckRlbHRhLnpdKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFNIQXJyYXlUeXBlID0gY29tcHJlc3Npb25MZXZlbCA9PT0gMSA/IFVpbnQxNkFycmF5IDogVWludDhBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlc1BlclNIQ29tcG9uZW50ID0gY29tcHJlc3Npb25MZXZlbCA9PT0gMSA/IDIgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoT3V0ID0gbmV3IFNIQXJyYXlUeXBlKHRlbXBTSEJ1ZmZlciwgMCwgc3BoZXJpY2FsSGFybW9uaWNzQ29tcG9uZW50c1BlclNwbGF0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID49IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCA5OyBzKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNyY1ZhbCA9IHRhcmdldFNwbGF0W09GRlNFVF9GUkMwICsgc10gfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoT3V0W3NdID0gY29tcHJlc3Npb25MZXZlbCA9PT0gMSA/IHRvSGFsZkZsb2F0KHNyY1ZhbCkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VpbnQ4KHNyY1ZhbCwgbWluU3BoZXJpY2FsSGFybW9uaWNzQ29lZmYsIG1heFNwaGVyaWNhbEhhcm1vbmljc0NvZWZmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWdyZWUxQnl0ZUNvdW50ID0gOSAqIGJ5dGVzUGVyU0hDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlCZXR3ZWVuQnVmZmVycyhzaE91dC5idWZmZXIsIDAsIHNlY3Rpb25CdWZmZXIsIHNwaGVyaWNhbEhhcm1vbmljc0Jhc2UsIGRlZ3JlZTFCeXRlQ291bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID49IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgMTU7IHMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNyY1ZhbCA9IHRhcmdldFNwbGF0W09GRlNFVF9GUkM5ICsgc10gfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaE91dFtzICsgOV0gPSBjb21wcmVzc2lvbkxldmVsID09PSAxID8gdG9IYWxmRmxvYXQoc3JjVmFsKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9VaW50OChzcmNWYWwsIG1pblNwaGVyaWNhbEhhcm1vbmljc0NvZWZmLCBtYXhTcGhlcmljYWxIYXJtb25pY3NDb2VmZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5QmV0d2VlbkJ1ZmZlcnMoc2hPdXQuYnVmZmVyLCBkZWdyZWUxQnl0ZUNvdW50LCBzZWN0aW9uQnVmZmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaGVyaWNhbEhhcm1vbmljc0Jhc2UgKyBkZWdyZWUxQnl0ZUNvdW50LCAxNSAqIGJ5dGVzUGVyU0hDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvcHlCZXR3ZWVuQnVmZmVycyhjZW50ZXIuYnVmZmVyLCAwLCBzZWN0aW9uQnVmZmVyLCBjZW50ZXJCYXNlLCA2KTtcclxuICAgICAgICAgICAgICAgIGNvcHlCZXR3ZWVuQnVmZmVycyhzY2FsZS5idWZmZXIsIDAsIHNlY3Rpb25CdWZmZXIsIHNjYWxlQmFzZSwgNik7XHJcbiAgICAgICAgICAgICAgICBjb3B5QmV0d2VlbkJ1ZmZlcnMocm90LmJ1ZmZlciwgMCwgc2VjdGlvbkJ1ZmZlciwgcm90YXRpb25CYXNlLCA4KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmdiYSA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh0ZW1wQ29sb3JCdWZmZXIsIDAsIDQpO1xyXG4gICAgICAgICAgICByZ2JhLnNldChbdGFyZ2V0U3BsYXRbT0ZGU0VUX0ZEQzBdIHx8IDAsIHRhcmdldFNwbGF0W09GRlNFVF9GREMxXSB8fCAwLCB0YXJnZXRTcGxhdFtPRkZTRVRfRkRDMl0gfHwgMF0pO1xyXG4gICAgICAgICAgICByZ2JhWzNdID0gdGFyZ2V0U3BsYXRbT0ZGU0VUX09QQUNJVFldIHx8IDA7XHJcblxyXG4gICAgICAgICAgICBjb3B5QmV0d2VlbkJ1ZmZlcnMocmdiYS5idWZmZXIsIDAsIHNlY3Rpb25CdWZmZXIsIGNvbG9yQmFzZSwgNCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB9KCk7XHJcblxyXG4gICAgc3RhdGljIGdlbmVyYXRlRnJvbVVuY29tcHJlc3NlZFNwbGF0QXJyYXlzKHNwbGF0QXJyYXlzLCBtaW5pbXVtQWxwaGEsIGNvbXByZXNzaW9uTGV2ZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVDZW50ZXIsIGJsb2NrU2l6ZSwgYnVja2V0U2l6ZSwgb3B0aW9ucyA9IFtdKSB7XHJcblxyXG4gICAgICAgIGxldCBzaERlZ3JlZSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgc2EgPSAwOyBzYSA8IHNwbGF0QXJyYXlzLmxlbmd0aDsgc2EgKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc3BsYXRBcnJheSA9IHNwbGF0QXJyYXlzW3NhXTtcclxuICAgICAgICAgICAgc2hEZWdyZWUgPSBNYXRoLm1heChzcGxhdEFycmF5LnNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSwgc2hEZWdyZWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1pblNwaGVyaWNhbEhhcm1vbmljc0NvZWZmO1xyXG4gICAgICAgIGxldCBtYXhTcGhlcmljYWxIYXJtb25pY3NDb2VmZjtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgc2EgPSAwOyBzYSA8IHNwbGF0QXJyYXlzLmxlbmd0aDsgc2EgKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc3BsYXRBcnJheSA9IHNwbGF0QXJyYXlzW3NhXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxhdEFycmF5LnNwbGF0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsYXQgPSBzcGxhdEFycmF5LnNwbGF0c1tpXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHNjID0gVW5jb21wcmVzc2VkU3BsYXRBcnJheS5PRkZTRVQuRlJDMDsgc2MgPCBVbmNvbXByZXNzZWRTcGxhdEFycmF5Lk9GRlNFVC5GUkMyMyAmJiBzYyA8IHNwbGF0Lmxlbmd0aDsgc2MrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWluU3BoZXJpY2FsSGFybW9uaWNzQ29lZmYgfHwgc3BsYXRbc2NdIDwgbWluU3BoZXJpY2FsSGFybW9uaWNzQ29lZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWluU3BoZXJpY2FsSGFybW9uaWNzQ29lZmYgPSBzcGxhdFtzY107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWF4U3BoZXJpY2FsSGFybW9uaWNzQ29lZmYgfHwgc3BsYXRbc2NdID4gbWF4U3BoZXJpY2FsSGFybW9uaWNzQ29lZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3BoZXJpY2FsSGFybW9uaWNzQ29lZmYgPSBzcGxhdFtzY107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtaW5TcGhlcmljYWxIYXJtb25pY3NDb2VmZiA9IG1pblNwaGVyaWNhbEhhcm1vbmljc0NvZWZmIHx8IC1EZWZhdWx0U3BoZXJpY2FsSGFybW9uaWNzOEJpdENvbXByZXNzaW9uSGFsZlJhbmdlO1xyXG4gICAgICAgIG1heFNwaGVyaWNhbEhhcm1vbmljc0NvZWZmID0gbWF4U3BoZXJpY2FsSGFybW9uaWNzQ29lZmYgfHwgRGVmYXVsdFNwaGVyaWNhbEhhcm1vbmljczhCaXRDb21wcmVzc2lvbkhhbGZSYW5nZTtcclxuXHJcbiAgICAgICAgY29uc3QgeyBieXRlc1BlclNwbGF0IH0gPSBTcGxhdEJ1ZmZlci5jYWxjdWxhdGVDb21wb25lbnRTdG9yYWdlKGNvbXByZXNzaW9uTGV2ZWwsIHNoRGVncmVlKTtcclxuICAgICAgICBjb25zdCBjb21wcmVzc2lvblNjYWxlUmFuZ2UgPSBTcGxhdEJ1ZmZlci5Db21wcmVzc2lvbkxldmVsc1tjb21wcmVzc2lvbkxldmVsXS5TY2FsZVJhbmdlO1xyXG5cclxuICAgICAgICBjb25zdCBzZWN0aW9uQnVmZmVycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25IZWFkZXJCdWZmZXJzID0gW107XHJcbiAgICAgICAgbGV0IHRvdGFsU3BsYXRDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIGZvciAobGV0IHNhID0gMDsgc2EgPCBzcGxhdEFycmF5cy5sZW5ndGg7IHNhICsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGF0QXJyYXkgPSBzcGxhdEFycmF5c1tzYV07XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkU3BsYXRzID0gbmV3IFVuY29tcHJlc3NlZFNwbGF0QXJyYXkoc2hEZWdyZWUpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGF0QXJyYXkuc3BsYXRDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRTcGxhdCA9IHNwbGF0QXJyYXkuc3BsYXRzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCh0YXJnZXRTcGxhdFtVbmNvbXByZXNzZWRTcGxhdEFycmF5Lk9GRlNFVC5PUEFDSVRZXSB8fCAwKSA+PSBtaW5pbXVtQWxwaGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZFNwbGF0cy5hZGRTcGxhdCh0YXJnZXRTcGxhdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25PcHRpb25zID0gb3B0aW9uc1tzYV0gfHwge307XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25CbG9ja1NpemUgPSAoc2VjdGlvbk9wdGlvbnMuYmxvY2tTaXplRmFjdG9yIHx8IDEpICogKGJsb2NrU2l6ZSB8fCBTcGxhdEJ1ZmZlci5CdWNrZXRCbG9ja1NpemUpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uQnVja2V0U2l6ZSA9IE1hdGguY2VpbCgoc2VjdGlvbk9wdGlvbnMuYnVja2V0U2l6ZUZhY3RvciB8fCAxKSAqIChidWNrZXRTaXplIHx8IFNwbGF0QnVmZmVyLkJ1Y2tldFNpemUpKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldEluZm8gPSBTcGxhdEJ1ZmZlci5jb21wdXRlQnVja2V0c0ZvclVuY29tcHJlc3NlZFNwbGF0QXJyYXkodmFsaWRTcGxhdHMsIHNlY3Rpb25CbG9ja1NpemUsIHNlY3Rpb25CdWNrZXRTaXplKTtcclxuICAgICAgICAgICAgY29uc3QgZnVsbEJ1Y2tldENvdW50ID0gYnVja2V0SW5mby5mdWxsQnVja2V0cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxseUZ1bGxCdWNrZXRMZW5ndGhzID0gYnVja2V0SW5mby5wYXJ0aWFsbHlGdWxsQnVja2V0cy5tYXAoKGJ1Y2tldCkgPT4gYnVja2V0LnNwbGF0cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJ0aWFsbHlGaWxsZWRCdWNrZXRDb3VudCA9IHBhcnRpYWxseUZ1bGxCdWNrZXRMZW5ndGhzLmxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3QgYnVja2V0cyA9IFsuLi5idWNrZXRJbmZvLmZ1bGxCdWNrZXRzLCAuLi5idWNrZXRJbmZvLnBhcnRpYWxseUZ1bGxCdWNrZXRzXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25EYXRhU2l6ZUJ5dGVzID0gdmFsaWRTcGxhdHMuc3BsYXRzLmxlbmd0aCAqIGJ5dGVzUGVyU3BsYXQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldE1ldGFEYXRhU2l6ZUJ5dGVzID0gcGFydGlhbGx5RmlsbGVkQnVja2V0Q291bnQgKiA0O1xyXG4gICAgICAgICAgICBjb25zdCBidWNrZXREYXRhQnl0ZXMgPSBjb21wcmVzc2lvbkxldmVsID49IDEgPyBidWNrZXRzLmxlbmd0aCAqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwbGF0QnVmZmVyLkJ1Y2tldFN0b3JhZ2VTaXplQnl0ZXMgKyBidWNrZXRNZXRhRGF0YVNpemVCeXRlcyA6IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25TaXplQnl0ZXMgPSBzZWN0aW9uRGF0YVNpemVCeXRlcyArIGJ1Y2tldERhdGFCeXRlcztcclxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzZWN0aW9uU2l6ZUJ5dGVzKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXByZXNzaW9uU2NhbGVGYWN0b3IgPSBjb21wcmVzc2lvblNjYWxlUmFuZ2UgLyAoc2VjdGlvbkJsb2NrU2l6ZSAqIDAuNSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldENlbnRlciA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgb3V0U3BsYXRDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYnVja2V0cy5sZW5ndGg7IGIrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gYnVja2V0c1tiXTtcclxuICAgICAgICAgICAgICAgIGJ1Y2tldENlbnRlci5mcm9tQXJyYXkoYnVja2V0LmNlbnRlcik7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Y2tldC5zcGxhdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcm93ID0gYnVja2V0LnNwbGF0c1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRTcGxhdCA9IHZhbGlkU3BsYXRzLnNwbGF0c1tyb3ddO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlck9mZnNldCA9IGJ1Y2tldERhdGFCeXRlcyArIG91dFNwbGF0Q291bnQgKiBieXRlc1BlclNwbGF0O1xyXG4gICAgICAgICAgICAgICAgICAgIFNwbGF0QnVmZmVyLndyaXRlU3BsYXREYXRhVG9TZWN0aW9uQnVmZmVyKHRhcmdldFNwbGF0LCBzZWN0aW9uQnVmZmVyLCBidWZmZXJPZmZzZXQsIGNvbXByZXNzaW9uTGV2ZWwsIHNoRGVncmVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldENlbnRlciwgY29tcHJlc3Npb25TY2FsZUZhY3RvciwgY29tcHJlc3Npb25TY2FsZVJhbmdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblNwaGVyaWNhbEhhcm1vbmljc0NvZWZmLCBtYXhTcGhlcmljYWxIYXJtb25pY3NDb2VmZik7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0U3BsYXRDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvdGFsU3BsYXRDb3VudCArPSBvdXRTcGxhdENvdW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbXByZXNzaW9uTGV2ZWwgPj0gMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnVja2V0TWV0YURhdGFBcnJheSA9IG5ldyBVaW50MzJBcnJheShzZWN0aW9uQnVmZmVyLCAwLCBwYXJ0aWFsbHlGdWxsQnVja2V0TGVuZ3Rocy5sZW5ndGggKiA0KTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHBmYiA9IDA7IHBmYiA8IHBhcnRpYWxseUZ1bGxCdWNrZXRMZW5ndGhzLmxlbmd0aDsgcGZiICsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0TWV0YURhdGFBcnJheVtwZmJdID0gcGFydGlhbGx5RnVsbEJ1Y2tldExlbmd0aHNbcGZiXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1Y2tldEFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShzZWN0aW9uQnVmZmVyLCBidWNrZXRNZXRhRGF0YVNpemVCeXRlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRzLmxlbmd0aCAqIFNwbGF0QnVmZmVyLkJ1Y2tldFN0b3JhZ2VTaXplRmxvYXRzKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGIgPSAwOyBiIDwgYnVja2V0cy5sZW5ndGg7IGIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IGJ1Y2tldHNbYl07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IGIgKiAzO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldEFycmF5W2Jhc2VdID0gYnVja2V0LmNlbnRlclswXTtcclxuICAgICAgICAgICAgICAgICAgICBidWNrZXRBcnJheVtiYXNlICsgMV0gPSBidWNrZXQuY2VudGVyWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldEFycmF5W2Jhc2UgKyAyXSA9IGJ1Y2tldC5jZW50ZXJbMl07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VjdGlvbkJ1ZmZlcnMucHVzaChzZWN0aW9uQnVmZmVyKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25IZWFkZXJCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoU3BsYXRCdWZmZXIuU2VjdGlvbkhlYWRlclNpemVCeXRlcyk7XHJcbiAgICAgICAgICAgIFNwbGF0QnVmZmVyLndyaXRlU2VjdGlvbkhlYWRlclRvQnVmZmVyKHtcclxuICAgICAgICAgICAgICAgIG1heFNwbGF0Q291bnQ6IG91dFNwbGF0Q291bnQsXHJcbiAgICAgICAgICAgICAgICBzcGxhdENvdW50OiBvdXRTcGxhdENvdW50LFxyXG4gICAgICAgICAgICAgICAgYnVja2V0U2l6ZTogc2VjdGlvbkJ1Y2tldFNpemUsXHJcbiAgICAgICAgICAgICAgICBidWNrZXRDb3VudDogYnVja2V0cy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBidWNrZXRCbG9ja1NpemU6IHNlY3Rpb25CbG9ja1NpemUsXHJcbiAgICAgICAgICAgICAgICBjb21wcmVzc2lvblNjYWxlUmFuZ2U6IGNvbXByZXNzaW9uU2NhbGVSYW5nZSxcclxuICAgICAgICAgICAgICAgIHN0b3JhZ2VTaXplQnl0ZXM6IHNlY3Rpb25TaXplQnl0ZXMsXHJcbiAgICAgICAgICAgICAgICBmdWxsQnVja2V0Q291bnQ6IGZ1bGxCdWNrZXRDb3VudCxcclxuICAgICAgICAgICAgICAgIHBhcnRpYWxseUZpbGxlZEJ1Y2tldENvdW50OiBwYXJ0aWFsbHlGaWxsZWRCdWNrZXRDb3VudCxcclxuICAgICAgICAgICAgICAgIHNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZTogc2hEZWdyZWVcclxuICAgICAgICAgICAgfSwgY29tcHJlc3Npb25MZXZlbCwgc2VjdGlvbkhlYWRlckJ1ZmZlciwgMCk7XHJcbiAgICAgICAgICAgIHNlY3Rpb25IZWFkZXJCdWZmZXJzLnB1c2goc2VjdGlvbkhlYWRlckJ1ZmZlcik7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNlY3Rpb25zQ3VtdWxhdGl2ZVNpemVCeXRlcyA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgc2VjdGlvbkJ1ZmZlciBvZiBzZWN0aW9uQnVmZmVycykgc2VjdGlvbnNDdW11bGF0aXZlU2l6ZUJ5dGVzICs9IHNlY3Rpb25CdWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgICAgICBjb25zdCB1bmlmaWVkQnVmZmVyU2l6ZSA9IFNwbGF0QnVmZmVyLkhlYWRlclNpemVCeXRlcyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGxhdEJ1ZmZlci5TZWN0aW9uSGVhZGVyU2l6ZUJ5dGVzICogc2VjdGlvbkJ1ZmZlcnMubGVuZ3RoICsgc2VjdGlvbnNDdW11bGF0aXZlU2l6ZUJ5dGVzO1xyXG4gICAgICAgIGNvbnN0IHVuaWZpZWRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodW5pZmllZEJ1ZmZlclNpemUpO1xyXG5cclxuICAgICAgICBTcGxhdEJ1ZmZlci53cml0ZUhlYWRlclRvQnVmZmVyKHtcclxuICAgICAgICAgICAgdmVyc2lvbk1ham9yOiAwLFxyXG4gICAgICAgICAgICB2ZXJzaW9uTWlub3I6IDEsXHJcbiAgICAgICAgICAgIG1heFNlY3Rpb25Db3VudDogc2VjdGlvbkJ1ZmZlcnMubGVuZ3RoLFxyXG4gICAgICAgICAgICBzZWN0aW9uQ291bnQ6IHNlY3Rpb25CdWZmZXJzLmxlbmd0aCxcclxuICAgICAgICAgICAgbWF4U3BsYXRDb3VudDogdG90YWxTcGxhdENvdW50LFxyXG4gICAgICAgICAgICBzcGxhdENvdW50OiB0b3RhbFNwbGF0Q291bnQsXHJcbiAgICAgICAgICAgIGNvbXByZXNzaW9uTGV2ZWw6IGNvbXByZXNzaW9uTGV2ZWwsXHJcbiAgICAgICAgICAgIHNjZW5lQ2VudGVyOiBzY2VuZUNlbnRlcixcclxuICAgICAgICAgICAgbWluU3BoZXJpY2FsSGFybW9uaWNzQ29lZmY6IG1pblNwaGVyaWNhbEhhcm1vbmljc0NvZWZmLFxyXG4gICAgICAgICAgICBtYXhTcGhlcmljYWxIYXJtb25pY3NDb2VmZjogbWF4U3BoZXJpY2FsSGFybW9uaWNzQ29lZmZcclxuICAgICAgICB9LCB1bmlmaWVkQnVmZmVyKTtcclxuXHJcbiAgICAgICAgbGV0IGN1cnJlbnRVbmlmaWVkQmFzZSA9IFNwbGF0QnVmZmVyLkhlYWRlclNpemVCeXRlcztcclxuICAgICAgICBmb3IgKGxldCBzZWN0aW9uSGVhZGVyQnVmZmVyIG9mIHNlY3Rpb25IZWFkZXJCdWZmZXJzKSB7XHJcbiAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KHVuaWZpZWRCdWZmZXIsIGN1cnJlbnRVbmlmaWVkQmFzZSwgU3BsYXRCdWZmZXIuU2VjdGlvbkhlYWRlclNpemVCeXRlcykuc2V0KG5ldyBVaW50OEFycmF5KHNlY3Rpb25IZWFkZXJCdWZmZXIpKTtcclxuICAgICAgICAgICAgY3VycmVudFVuaWZpZWRCYXNlICs9IFNwbGF0QnVmZmVyLlNlY3Rpb25IZWFkZXJTaXplQnl0ZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBzZWN0aW9uQnVmZmVyIG9mIHNlY3Rpb25CdWZmZXJzKSB7XHJcbiAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KHVuaWZpZWRCdWZmZXIsIGN1cnJlbnRVbmlmaWVkQmFzZSwgc2VjdGlvbkJ1ZmZlci5ieXRlTGVuZ3RoKS5zZXQobmV3IFVpbnQ4QXJyYXkoc2VjdGlvbkJ1ZmZlcikpO1xyXG4gICAgICAgICAgICBjdXJyZW50VW5pZmllZEJhc2UgKz0gc2VjdGlvbkJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3BsYXRCdWZmZXIgPSBuZXcgU3BsYXRCdWZmZXIodW5pZmllZEJ1ZmZlcik7XHJcbiAgICAgICAgcmV0dXJuIHNwbGF0QnVmZmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjb21wdXRlQnVja2V0c0ZvclVuY29tcHJlc3NlZFNwbGF0QXJyYXkoc3BsYXRBcnJheSwgYmxvY2tTaXplLCBidWNrZXRTaXplKSB7XHJcbiAgICAgICAgbGV0IHNwbGF0Q291bnQgPSBzcGxhdEFycmF5LnNwbGF0Q291bnQ7XHJcbiAgICAgICAgY29uc3QgaGFsZkJsb2NrU2l6ZSA9IGJsb2NrU2l6ZSAvIDIuMDtcclxuXHJcbiAgICAgICAgY29uc3QgbWluID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICBjb25zdCBtYXggPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGF0Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRTcGxhdCA9IHNwbGF0QXJyYXkuc3BsYXRzW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBbdGFyZ2V0U3BsYXRbVW5jb21wcmVzc2VkU3BsYXRBcnJheS5PRkZTRVQuWF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTcGxhdFtVbmNvbXByZXNzZWRTcGxhdEFycmF5Lk9GRlNFVC5ZXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFNwbGF0W1VuY29tcHJlc3NlZFNwbGF0QXJyYXkuT0ZGU0VULlpdXTtcclxuICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgY2VudGVyWzBdIDwgbWluLngpIG1pbi54ID0gY2VudGVyWzBdO1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCBjZW50ZXJbMF0gPiBtYXgueCkgbWF4LnggPSBjZW50ZXJbMF07XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwIHx8IGNlbnRlclsxXSA8IG1pbi55KSBtaW4ueSA9IGNlbnRlclsxXTtcclxuICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgY2VudGVyWzFdID4gbWF4LnkpIG1heC55ID0gY2VudGVyWzFdO1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCBjZW50ZXJbMl0gPCBtaW4ueikgbWluLnogPSBjZW50ZXJbMl07XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwIHx8IGNlbnRlclsyXSA+IG1heC56KSBtYXgueiA9IGNlbnRlclsyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBuZXcgVmVjdG9yMygpLmNvcHkobWF4KS5zdWIobWluKTtcclxuICAgICAgICBjb25zdCB5QmxvY2tzID0gTWF0aC5jZWlsKGRpbWVuc2lvbnMueSAvIGJsb2NrU2l6ZSk7XHJcbiAgICAgICAgY29uc3QgekJsb2NrcyA9IE1hdGguY2VpbChkaW1lbnNpb25zLnogLyBibG9ja1NpemUpO1xyXG5cclxuICAgICAgICBjb25zdCBibG9ja0NlbnRlciA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgY29uc3QgZnVsbEJ1Y2tldHMgPSBbXTtcclxuICAgICAgICBjb25zdCBwYXJ0aWFsbHlGdWxsQnVja2V0cyA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGF0Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRTcGxhdCA9IHNwbGF0QXJyYXkuc3BsYXRzW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBbdGFyZ2V0U3BsYXRbVW5jb21wcmVzc2VkU3BsYXRBcnJheS5PRkZTRVQuWF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTcGxhdFtVbmNvbXByZXNzZWRTcGxhdEFycmF5Lk9GRlNFVC5ZXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFNwbGF0W1VuY29tcHJlc3NlZFNwbGF0QXJyYXkuT0ZGU0VULlpdXTtcclxuICAgICAgICAgICAgY29uc3QgeEJsb2NrID0gTWF0aC5mbG9vcigoY2VudGVyWzBdIC0gbWluLngpIC8gYmxvY2tTaXplKTtcclxuICAgICAgICAgICAgY29uc3QgeUJsb2NrID0gTWF0aC5mbG9vcigoY2VudGVyWzFdIC0gbWluLnkpIC8gYmxvY2tTaXplKTtcclxuICAgICAgICAgICAgY29uc3QgekJsb2NrID0gTWF0aC5mbG9vcigoY2VudGVyWzJdIC0gbWluLnopIC8gYmxvY2tTaXplKTtcclxuXHJcbiAgICAgICAgICAgIGJsb2NrQ2VudGVyLnggPSB4QmxvY2sgKiBibG9ja1NpemUgKyBtaW4ueCArIGhhbGZCbG9ja1NpemU7XHJcbiAgICAgICAgICAgIGJsb2NrQ2VudGVyLnkgPSB5QmxvY2sgKiBibG9ja1NpemUgKyBtaW4ueSArIGhhbGZCbG9ja1NpemU7XHJcbiAgICAgICAgICAgIGJsb2NrQ2VudGVyLnogPSB6QmxvY2sgKiBibG9ja1NpemUgKyBtaW4ueiArIGhhbGZCbG9ja1NpemU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBidWNrZXRJZCA9IHhCbG9jayAqICh5QmxvY2tzICogekJsb2NrcykgKyB5QmxvY2sgKiB6QmxvY2tzICsgekJsb2NrO1xyXG4gICAgICAgICAgICBsZXQgYnVja2V0ID0gcGFydGlhbGx5RnVsbEJ1Y2tldHNbYnVja2V0SWRdO1xyXG4gICAgICAgICAgICBpZiAoIWJ1Y2tldCkge1xyXG4gICAgICAgICAgICAgICAgcGFydGlhbGx5RnVsbEJ1Y2tldHNbYnVja2V0SWRdID0gYnVja2V0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICdzcGxhdHMnOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICAnY2VudGVyJzogYmxvY2tDZW50ZXIudG9BcnJheSgpXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBidWNrZXQuc3BsYXRzLnB1c2goaSk7XHJcbiAgICAgICAgICAgIGlmIChidWNrZXQuc3BsYXRzLmxlbmd0aCA+PSBidWNrZXRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICBmdWxsQnVja2V0cy5wdXNoKGJ1Y2tldCk7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWFsbHlGdWxsQnVja2V0c1tidWNrZXRJZF0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJ0aWFsbHlGdWxsQnVja2V0QXJyYXkgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBidWNrZXRJZCBpbiBwYXJ0aWFsbHlGdWxsQnVja2V0cykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihwYXJ0aWFsbHlGdWxsQnVja2V0cywgYnVja2V0SWQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBidWNrZXQgPSBwYXJ0aWFsbHlGdWxsQnVja2V0c1tidWNrZXRJZF07XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVja2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbGx5RnVsbEJ1Y2tldEFycmF5LnB1c2goYnVja2V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ2Z1bGxCdWNrZXRzJzogZnVsbEJ1Y2tldHMsXHJcbiAgICAgICAgICAgICdwYXJ0aWFsbHlGdWxsQnVja2V0cyc6IHBhcnRpYWxseUZ1bGxCdWNrZXRBcnJheSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufSIsIi8qKlxyXG4gKiBTcGxhdFBhcnRpdGlvbmVyXHJcbiAqIFxyXG4gKiBEZXJpdmVkIGZyb20gQG1ra2VsbG9nZy9nYXVzc2lhbi1zcGxhdHMtM2QgKE1JVCBMaWNlbnNlKVxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWtrZWxsb2dnL0dhdXNzaWFuU3BsYXRzM0RcclxuICogXHJcbiAqIFRoaXMgZmlsZSBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbC5cclxuICogSW1wb3J0IHBhdGhzIGFkanVzdGVkIGZvciBnc3BsYXQtZmxhbWUtYXZhdGFyIHBhY2thZ2Ugc3RydWN0dXJlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7IFNwbGF0QnVmZmVyIH0gZnJvbSAnLi9TcGxhdEJ1ZmZlci5qcyc7XHJcbmltcG9ydCB7IFVuY29tcHJlc3NlZFNwbGF0QXJyYXkgfSBmcm9tICcuL1VuY29tcHJlc3NlZFNwbGF0QXJyYXkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNwbGF0UGFydGl0aW9uZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNlY3Rpb25Db3VudCwgc2VjdGlvbkZpbHRlcnMsIGdyb3VwaW5nUGFyYW1ldGVycywgcGFydGl0aW9uR2VuZXJhdG9yKSB7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uQ291bnQgPSBzZWN0aW9uQ291bnQ7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uRmlsdGVycyA9IHNlY3Rpb25GaWx0ZXJzO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmdQYXJhbWV0ZXJzID0gZ3JvdXBpbmdQYXJhbWV0ZXJzO1xyXG4gICAgICAgIHRoaXMucGFydGl0aW9uR2VuZXJhdG9yID0gcGFydGl0aW9uR2VuZXJhdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnRpdGlvblVuY29tcHJlc3NlZFNwbGF0QXJyYXkoc3BsYXRBcnJheSkge1xyXG4gICAgICAgIGxldCBncm91cGluZ1BhcmFtZXRlcnM7XHJcbiAgICAgICAgbGV0IHNlY3Rpb25Db3VudDtcclxuICAgICAgICBsZXQgc2VjdGlvbkZpbHRlcnM7XHJcbiAgICAgICAgaWYgKHRoaXMucGFydGl0aW9uR2VuZXJhdG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLnBhcnRpdGlvbkdlbmVyYXRvcihzcGxhdEFycmF5KTtcclxuICAgICAgICAgICAgZ3JvdXBpbmdQYXJhbWV0ZXJzID0gcmVzdWx0cy5ncm91cGluZ1BhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIHNlY3Rpb25Db3VudCA9IHJlc3VsdHMuc2VjdGlvbkNvdW50O1xyXG4gICAgICAgICAgICBzZWN0aW9uRmlsdGVycyA9IHJlc3VsdHMuc2VjdGlvbkZpbHRlcnM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ3JvdXBpbmdQYXJhbWV0ZXJzID0gdGhpcy5ncm91cGluZ1BhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIHNlY3Rpb25Db3VudCA9IHRoaXMuc2VjdGlvbkNvdW50O1xyXG4gICAgICAgICAgICBzZWN0aW9uRmlsdGVycyA9IHRoaXMuc2VjdGlvbkZpbHRlcnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBuZXdBcnJheXMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNlY3Rpb25Db3VudDsgcysrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25TcGxhdHMgPSBuZXcgVW5jb21wcmVzc2VkU3BsYXRBcnJheShzcGxhdEFycmF5LnNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25GaWx0ZXIgPSBzZWN0aW9uRmlsdGVyc1tzXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxhdEFycmF5LnNwbGF0Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25GaWx0ZXIoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uU3BsYXRzLmFkZFNwbGF0KHNwbGF0QXJyYXkuc3BsYXRzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXdBcnJheXMucHVzaChzZWN0aW9uU3BsYXRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc3BsYXRBcnJheXM6IG5ld0FycmF5cyxcclxuICAgICAgICAgICAgcGFyYW1ldGVyczogZ3JvdXBpbmdQYXJhbWV0ZXJzXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0U3RhbmRhcmRQYXJ0aXRpb25lcihwYXJ0aXRpb25TaXplID0gMCwgc2NlbmVDZW50ZXIgPSBuZXcgVmVjdG9yMygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tTaXplID0gU3BsYXRCdWZmZXIuQnVja2V0QmxvY2tTaXplLCBidWNrZXRTaXplID0gU3BsYXRCdWZmZXIuQnVja2V0U2l6ZSkge1xyXG5cclxuICAgICAgICBjb25zdCBwYXJ0aXRpb25HZW5lcmF0b3IgPSAoc3BsYXRBcnJheSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgT0ZGU0VUX1ggPSBVbmNvbXByZXNzZWRTcGxhdEFycmF5Lk9GRlNFVC5YO1xyXG4gICAgICAgICAgICBjb25zdCBPRkZTRVRfWSA9IFVuY29tcHJlc3NlZFNwbGF0QXJyYXkuT0ZGU0VULlk7XHJcbiAgICAgICAgICAgIGNvbnN0IE9GRlNFVF9aID0gVW5jb21wcmVzc2VkU3BsYXRBcnJheS5PRkZTRVQuWjtcclxuXHJcbiAgICAgICAgICAgIGlmIChwYXJ0aXRpb25TaXplIDw9IDApIHBhcnRpdGlvblNpemUgPSBzcGxhdEFycmF5LnNwbGF0Q291bnQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFtcERpc3RhbmNlID0gMC41O1xyXG4gICAgICAgICAgICBjb25zdCBjbGFtcFBvaW50ID0gKHBvaW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBwb2ludC54ID0gTWF0aC5mbG9vcihwb2ludC54IC8gY2xhbXBEaXN0YW5jZSkgKiBjbGFtcERpc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgcG9pbnQueSA9IE1hdGguZmxvb3IocG9pbnQueSAvIGNsYW1wRGlzdGFuY2UpICogY2xhbXBEaXN0YW5jZTtcclxuICAgICAgICAgICAgICAgIHBvaW50LnogPSBNYXRoLmZsb29yKHBvaW50LnogLyBjbGFtcERpc3RhbmNlKSAqIGNsYW1wRGlzdGFuY2U7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHNwbGF0QXJyYXkuc3BsYXRzLmZvckVhY2goKHNwbGF0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXIuc2V0KHNwbGF0W09GRlNFVF9YXSwgc3BsYXRbT0ZGU0VUX1ldLCBzcGxhdFtPRkZTRVRfWl0pLnN1YihzY2VuZUNlbnRlcik7XHJcbiAgICAgICAgICAgICAgICBjbGFtcFBvaW50KGNlbnRlcik7XHJcbiAgICAgICAgICAgICAgICBzcGxhdC5jZW50ZXJEaXN0ID0gY2VudGVyLmxlbmd0aFNxKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzcGxhdEFycmF5LnNwbGF0cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2VudGVyQURpc3QgPSBhLmNlbnRlckRpc3Q7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2VudGVyQkRpc3QgPSBiLmNlbnRlckRpc3Q7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2VudGVyQURpc3QgPiBjZW50ZXJCRGlzdCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uRmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBncm91cGluZ1BhcmFtZXRlcnMgPSBbXTtcclxuICAgICAgICAgICAgcGFydGl0aW9uU2l6ZSA9IE1hdGgubWluKHNwbGF0QXJyYXkuc3BsYXRDb3VudCwgcGFydGl0aW9uU2l6ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhdGl0aW9uQ291bnQgPSBNYXRoLmNlaWwoc3BsYXRBcnJheS5zcGxhdENvdW50IC8gcGFydGl0aW9uU2l6ZSk7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50U3RhcnRTcGxhdCA9IDA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aXRpb25Db3VudDsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0U3BsYXQgPSBjdXJyZW50U3RhcnRTcGxhdDtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb25GaWx0ZXJzLnB1c2goKHNwbGF0SW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BsYXRJbmRleCA+PSBzdGFydFNwbGF0ICYmIHNwbGF0SW5kZXggPCBzdGFydFNwbGF0ICsgcGFydGl0aW9uU2l6ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBpbmdQYXJhbWV0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICdibG9ja3NTaXplJzogYmxvY2tTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICdidWNrZXRTaXplJzogYnVja2V0U2l6ZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXJ0U3BsYXQgKz0gcGFydGl0aW9uU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgJ3NlY3Rpb25Db3VudCc6IHNlY3Rpb25GaWx0ZXJzLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgIHNlY3Rpb25GaWx0ZXJzLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBpbmdQYXJhbWV0ZXJzXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gbmV3IFNwbGF0UGFydGl0aW9uZXIodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcGFydGl0aW9uR2VuZXJhdG9yKTtcclxuICAgIH1cclxufSIsIi8qKlxyXG4gKiBTcGxhdEJ1ZmZlckdlbmVyYXRvclxyXG4gKiBcclxuICogRGVyaXZlZCBmcm9tIEBta2tlbGxvZ2cvZ2F1c3NpYW4tc3BsYXRzLTNkIChNSVQgTGljZW5zZSlcclxuICogaHR0cHM6Ly9naXRodWIuY29tL21ra2VsbG9nZy9HYXVzc2lhblNwbGF0czNEXHJcbiAqIFxyXG4gKiBUaGlzIGZpbGUgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwuXHJcbiAqIEltcG9ydCBwYXRocyBhZGp1c3RlZCBmb3IgZ3NwbGF0LWZsYW1lLWF2YXRhciBwYWNrYWdlIHN0cnVjdHVyZS5cclxuICovXHJcblxyXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQgeyBTcGxhdEJ1ZmZlciB9IGZyb20gJy4vU3BsYXRCdWZmZXIuanMnO1xyXG5pbXBvcnQgeyBTcGxhdFBhcnRpdGlvbmVyIH0gZnJvbSAnLi9TcGxhdFBhcnRpdGlvbmVyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTcGxhdEJ1ZmZlckdlbmVyYXRvciB7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioc3BsYXRQYXJ0aXRpb25lciwgYWxwaGFSZW1vdmFsVGhyZXNob2xkLCBjb21wcmVzc2lvbkxldmVsLCBzZWN0aW9uU2l6ZSwgc2NlbmVDZW50ZXIsIGJsb2NrU2l6ZSwgYnVja2V0U2l6ZSkge1xyXG4gICAgICAgIHRoaXMuc3BsYXRQYXJ0aXRpb25lciA9IHNwbGF0UGFydGl0aW9uZXI7XHJcbiAgICAgICAgdGhpcy5hbHBoYVJlbW92YWxUaHJlc2hvbGQgPSBhbHBoYVJlbW92YWxUaHJlc2hvbGQ7XHJcbiAgICAgICAgdGhpcy5jb21wcmVzc2lvbkxldmVsID0gY29tcHJlc3Npb25MZXZlbDtcclxuICAgICAgICB0aGlzLnNlY3Rpb25TaXplID0gc2VjdGlvblNpemU7XHJcbiAgICAgICAgdGhpcy5zY2VuZUNlbnRlciA9IHNjZW5lQ2VudGVyID8gbmV3IFZlY3RvcjMoKS5jb3B5KHNjZW5lQ2VudGVyKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmJsb2NrU2l6ZSA9IGJsb2NrU2l6ZTtcclxuICAgICAgICB0aGlzLmJ1Y2tldFNpemUgPSBidWNrZXRTaXplO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlRnJvbVVuY29tcHJlc3NlZFNwbGF0QXJyYXkoc3BsYXRBcnJheSkge1xyXG4gICAgICAgIGNvbnN0IHBhcnRpdGlvblJlc3VsdHMgPSB0aGlzLnNwbGF0UGFydGl0aW9uZXIucGFydGl0aW9uVW5jb21wcmVzc2VkU3BsYXRBcnJheShzcGxhdEFycmF5KTtcclxuICAgICAgICByZXR1cm4gU3BsYXRCdWZmZXIuZ2VuZXJhdGVGcm9tVW5jb21wcmVzc2VkU3BsYXRBcnJheXMocGFydGl0aW9uUmVzdWx0cy5zcGxhdEFycmF5cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbHBoYVJlbW92YWxUaHJlc2hvbGQsIHRoaXMuY29tcHJlc3Npb25MZXZlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZUNlbnRlciwgdGhpcy5ibG9ja1NpemUsIHRoaXMuYnVja2V0U2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uUmVzdWx0cy5wYXJhbWV0ZXJzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0U3RhbmRhcmRHZW5lcmF0b3IoYWxwaGFSZW1vdmFsVGhyZXNob2xkID0gMSwgY29tcHJlc3Npb25MZXZlbCA9IDEsIHNlY3Rpb25TaXplID0gMCwgc2NlbmVDZW50ZXIgPSBuZXcgVmVjdG9yMygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrU2l6ZSA9IFNwbGF0QnVmZmVyLkJ1Y2tldEJsb2NrU2l6ZSwgYnVja2V0U2l6ZSA9IFNwbGF0QnVmZmVyLkJ1Y2tldFNpemUpIHtcclxuICAgICAgICBjb25zdCBzcGxhdFBhcnRpdGlvbmVyID0gU3BsYXRQYXJ0aXRpb25lci5nZXRTdGFuZGFyZFBhcnRpdGlvbmVyKHNlY3Rpb25TaXplLCBzY2VuZUNlbnRlciwgYmxvY2tTaXplLCBidWNrZXRTaXplKTtcclxuICAgICAgICByZXR1cm4gbmV3IFNwbGF0QnVmZmVyR2VuZXJhdG9yKHNwbGF0UGFydGl0aW9uZXIsIGFscGhhUmVtb3ZhbFRocmVzaG9sZCwgY29tcHJlc3Npb25MZXZlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25TaXplLCBzY2VuZUNlbnRlciwgYmxvY2tTaXplLCBidWNrZXRTaXplKTtcclxuICAgIH1cclxufSIsIi8qKlxyXG4gKiBQbHlQYXJzZXJVdGlscyBhbmQgcmVsYXRlZCBjb25zdGFudHNcclxuICogXHJcbiAqIERlcml2ZWQgZnJvbSBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKiBcclxuICogU2ltcGxpZmllZCBmb3IgRkxBTUUgYXZhdGFyIC0gb25seSBzdXBwb3J0cyBJTlJJQVYxIGZvcm1hdC5cclxuICovXHJcblxyXG4vLyBQbHkgZm9ybWF0IHR5cGVzIChzaW1wbGlmaWVkIC0gRkxBTUUgdXNlcyBJTlJJQVYxKVxyXG5leHBvcnQgY29uc3QgUGx5Rm9ybWF0ID0ge1xyXG4gICAgJ0lOUklBVjEnOiAwXHJcbn07XHJcblxyXG4vLyBGaWVsZCBzaXplIElEc1xyXG5leHBvcnQgY29uc3QgRmllbGRTaXplSWREb3VibGUgPSAwO1xyXG5leHBvcnQgY29uc3QgRmllbGRTaXplSWRJbnQgPSAxO1xyXG5leHBvcnQgY29uc3QgRmllbGRTaXplSWRVSW50ID0gMjtcclxuZXhwb3J0IGNvbnN0IEZpZWxkU2l6ZUlkRmxvYXQgPSAzO1xyXG5leHBvcnQgY29uc3QgRmllbGRTaXplSWRTaG9ydCA9IDQ7XHJcbmV4cG9ydCBjb25zdCBGaWVsZFNpemVJZFVTaG9ydCA9IDU7XHJcbmV4cG9ydCBjb25zdCBGaWVsZFNpemVJZFVDaGFyID0gNjtcclxuXHJcbmV4cG9ydCBjb25zdCBGaWVsZFNpemVTdHJpbmdNYXAgPSB7XHJcbiAgICAnZG91YmxlJzogRmllbGRTaXplSWREb3VibGUsXHJcbiAgICAnaW50JzogRmllbGRTaXplSWRJbnQsXHJcbiAgICAndWludCc6IEZpZWxkU2l6ZUlkVUludCxcclxuICAgICdmbG9hdCc6IEZpZWxkU2l6ZUlkRmxvYXQsXHJcbiAgICAnc2hvcnQnOiBGaWVsZFNpemVJZFNob3J0LFxyXG4gICAgJ3VzaG9ydCc6IEZpZWxkU2l6ZUlkVVNob3J0LFxyXG4gICAgJ3VjaGFyJzogRmllbGRTaXplSWRVQ2hhcixcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBGaWVsZFNpemUgPSB7XHJcbiAgICBbRmllbGRTaXplSWREb3VibGVdOiA4LFxyXG4gICAgW0ZpZWxkU2l6ZUlkSW50XTogNCxcclxuICAgIFtGaWVsZFNpemVJZFVJbnRdOiA0LFxyXG4gICAgW0ZpZWxkU2l6ZUlkRmxvYXRdOiA0LFxyXG4gICAgW0ZpZWxkU2l6ZUlkU2hvcnRdOiAyLFxyXG4gICAgW0ZpZWxkU2l6ZUlkVVNob3J0XTogMixcclxuICAgIFtGaWVsZFNpemVJZFVDaGFyXTogMSxcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBQbHlQYXJzZXJVdGlscyB7XHJcblxyXG4gICAgc3RhdGljIEhlYWRlckVuZFRva2VuID0gJ2VuZF9oZWFkZXInO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgfVxyXG5cclxuICAgIGRlY29kZVNlY3Rpb25IZWFkZXIoaGVhZGVyTGluZXMsIGZpZWxkTmFtZUlkTWFwLCBoZWFkZXJTdGFydExpbmUgPSAwKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGV4dHJhY3RlZExpbmVzID0gW107XHJcblxyXG4gICAgICAgIGxldCBwcm9jZXNzaW5nU2VjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBoZWFkZXJFbmRMaW5lID0gLTE7XHJcbiAgICAgICAgbGV0IHZlcnRleENvdW50ID0gMDtcclxuICAgICAgICBsZXQgZW5kT2ZIZWFkZXIgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc2VjdGlvbk5hbWUgPSBudWxsO1xyXG5cclxuICAgICAgICBjb25zdCBmaWVsZElkcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBhbGxGaWVsZE5hbWVzID0gW107XHJcbiAgICAgICAgY29uc3QgdXNlZEZpZWxkTmFtZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBmaWVsZFR5cGVzQnlOYW1lID0ge307XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSBoZWFkZXJTdGFydExpbmU7IGkgPCBoZWFkZXJMaW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lID0gaGVhZGVyTGluZXNbaV0udHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCdlbGVtZW50JykpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzaW5nU2VjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckVuZExpbmUtLTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1NlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlclN0YXJ0TGluZSA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyRW5kTGluZSA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGluZUNvbXBvbmVudHMgPSBsaW5lLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkQ29tcG9uZW50cyA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbGluZUNvbXBvbmVudCBvZiBsaW5lQ29tcG9uZW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmltbWVkQ29tcG9uZW50ID0gbGluZUNvbXBvbmVudC50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmltbWVkQ29tcG9uZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkQ29tcG9uZW50cysrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkQ29tcG9uZW50cyA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lID0gdHJpbW1lZENvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRDb21wb25lbnRzID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4Q291bnQgPSBwYXJzZUludCh0cmltbWVkQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoJ3Byb3BlcnR5JykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkTWF0Y2ggPSBsaW5lLm1hdGNoKC8oXFx3KylcXHMrKFxcdyspXFxzKyhcXHcrKS8pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkTWF0Y2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFR5cGVTdHIgPSBmaWVsZE1hdGNoWzJdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGZpZWxkTWF0Y2hbM107XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsRmllbGROYW1lcy5wdXNoKGZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRJZCA9IGZpZWxkTmFtZUlkTWFwW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGRUeXBlc0J5TmFtZVtmaWVsZE5hbWVdID0gZmllbGRUeXBlU3RyO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IEZpZWxkU2l6ZVN0cmluZ01hcFtmaWVsZFR5cGVTdHJdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZElkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlZEZpZWxkTmFtZXMucHVzaChmaWVsZE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZElkcy5wdXNoKGZpZWxkSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFR5cGVzW2ZpZWxkSWRdID0gZmllbGRUeXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobGluZSA9PT0gUGx5UGFyc2VyVXRpbHMuSGVhZGVyRW5kVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGVuZE9mSGVhZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzaW5nU2VjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZXh0cmFjdGVkTGluZXMucHVzaChsaW5lKTtcclxuICAgICAgICAgICAgICAgIGhlYWRlckVuZExpbmUrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmllbGRPZmZzZXRzID0gW107XHJcbiAgICAgICAgbGV0IGJ5dGVzUGVyVmVydGV4ID0gMDtcclxuICAgICAgICBmb3IgKGxldCBmaWVsZE5hbWUgb2YgYWxsRmllbGROYW1lcykge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBmaWVsZFR5cGVzQnlOYW1lW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duKGZpZWxkVHlwZXNCeU5hbWUsIGZpZWxkTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkSWQgPSBmaWVsZE5hbWVJZE1hcFtmaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkSWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkT2Zmc2V0c1tmaWVsZElkXSA9IGJ5dGVzUGVyVmVydGV4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJ5dGVzUGVyVmVydGV4ICs9IEZpZWxkU2l6ZVtGaWVsZFNpemVTdHJpbmdNYXBbZmllbGRUeXBlXV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzcGhlcmljYWxIYXJtb25pY3MgPSB0aGlzLmRlY29kZVNwaGVyaWNhbEhhcm1vbmljc0Zyb21TZWN0aW9uSGVhZGVyKGFsbEZpZWxkTmFtZXMsIGZpZWxkTmFtZUlkTWFwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ2hlYWRlckxpbmVzJzogZXh0cmFjdGVkTGluZXMsXHJcbiAgICAgICAgICAgICdoZWFkZXJTdGFydExpbmUnOiBoZWFkZXJTdGFydExpbmUsXHJcbiAgICAgICAgICAgICdoZWFkZXJFbmRMaW5lJzogaGVhZGVyRW5kTGluZSxcclxuICAgICAgICAgICAgJ2ZpZWxkVHlwZXMnOiBmaWVsZFR5cGVzLFxyXG4gICAgICAgICAgICAnZmllbGRJZHMnOiBmaWVsZElkcyxcclxuICAgICAgICAgICAgJ2ZpZWxkT2Zmc2V0cyc6IGZpZWxkT2Zmc2V0cyxcclxuICAgICAgICAgICAgJ2J5dGVzUGVyVmVydGV4JzogYnl0ZXNQZXJWZXJ0ZXgsXHJcbiAgICAgICAgICAgICd2ZXJ0ZXhDb3VudCc6IHZlcnRleENvdW50LFxyXG4gICAgICAgICAgICAnZGF0YVNpemVCeXRlcyc6IGJ5dGVzUGVyVmVydGV4ICogdmVydGV4Q291bnQsXHJcbiAgICAgICAgICAgICdlbmRPZkhlYWRlcic6IGVuZE9mSGVhZGVyLFxyXG4gICAgICAgICAgICAnc2VjdGlvbk5hbWUnOiBzZWN0aW9uTmFtZSxcclxuICAgICAgICAgICAgJ3NwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSc6IHNwaGVyaWNhbEhhcm1vbmljcy5kZWdyZWUsXHJcbiAgICAgICAgICAgICdzcGhlcmljYWxIYXJtb25pY3NDb2VmZmljaWVudHNQZXJDaGFubmVsJzogc3BoZXJpY2FsSGFybW9uaWNzLmNvZWZmaWNpZW50c1BlckNoYW5uZWwsXHJcbiAgICAgICAgICAgICdzcGhlcmljYWxIYXJtb25pY3NEZWdyZWUxRmllbGRzJzogc3BoZXJpY2FsSGFybW9uaWNzLmRlZ3JlZTFGaWVsZHMsXHJcbiAgICAgICAgICAgICdzcGhlcmljYWxIYXJtb25pY3NEZWdyZWUyRmllbGRzJzogc3BoZXJpY2FsSGFybW9uaWNzLmRlZ3JlZTJGaWVsZHNcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGRlY29kZVNwaGVyaWNhbEhhcm1vbmljc0Zyb21TZWN0aW9uSGVhZGVyKGZpZWxkTmFtZXMsIGZpZWxkTmFtZUlkTWFwKSB7XHJcbiAgICAgICAgbGV0IHNwaGVyaWNhbEhhcm1vbmljc0ZpZWxkQ291bnQgPSAwO1xyXG4gICAgICAgIGxldCBjb2VmZmljaWVudHNQZXJDaGFubmVsID0gMDtcclxuICAgICAgICBmb3IgKGxldCBmaWVsZE5hbWUgb2YgZmllbGROYW1lcykge1xyXG4gICAgICAgICAgICBpZiAoZmllbGROYW1lLnN0YXJ0c1dpdGgoJ2ZfcmVzdCcpKSBzcGhlcmljYWxIYXJtb25pY3NGaWVsZENvdW50Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvZWZmaWNpZW50c1BlckNoYW5uZWwgPSBzcGhlcmljYWxIYXJtb25pY3NGaWVsZENvdW50IC8gMztcclxuICAgICAgICBsZXQgZGVncmVlID0gMDtcclxuICAgICAgICBpZiAoY29lZmZpY2llbnRzUGVyQ2hhbm5lbCA+PSAzKSBkZWdyZWUgPSAxO1xyXG4gICAgICAgIGlmIChjb2VmZmljaWVudHNQZXJDaGFubmVsID49IDgpIGRlZ3JlZSA9IDI7XHJcblxyXG4gICAgICAgIGxldCBkZWdyZWUxRmllbGRzID0gW107XHJcbiAgICAgICAgbGV0IGRlZ3JlZTJGaWVsZHMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgcmdiID0gMDsgcmdiIDwgMzsgcmdiKyspIHtcclxuICAgICAgICAgICAgaWYgKGRlZ3JlZSA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZ3JlZTFGaWVsZHMucHVzaChmaWVsZE5hbWVJZE1hcFsnZl9yZXN0XycgKyAoaSArIGNvZWZmaWNpZW50c1BlckNoYW5uZWwgKiByZ2IpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRlZ3JlZSA+PSAyKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZ3JlZTJGaWVsZHMucHVzaChmaWVsZE5hbWVJZE1hcFsnZl9yZXN0XycgKyAoaSArIGNvZWZmaWNpZW50c1BlckNoYW5uZWwgKiByZ2IgKyAzKV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnZGVncmVlJzogZGVncmVlLFxyXG4gICAgICAgICAgICAnY29lZmZpY2llbnRzUGVyQ2hhbm5lbCc6IGNvZWZmaWNpZW50c1BlckNoYW5uZWwsXHJcbiAgICAgICAgICAgICdkZWdyZWUxRmllbGRzJzogZGVncmVlMUZpZWxkcyxcclxuICAgICAgICAgICAgJ2RlZ3JlZTJGaWVsZHMnOiBkZWdyZWUyRmllbGRzXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0SGVhZGVyU2VjdGlvbk5hbWVzKGhlYWRlckxpbmVzKSB7XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbk5hbWVzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaGVhZGVyTGluZSBvZiBoZWFkZXJMaW5lcykge1xyXG4gICAgICAgICAgICBpZiAoaGVhZGVyTGluZS5zdGFydHNXaXRoKCdlbGVtZW50JykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVDb21wb25lbnRzID0gaGVhZGVyTGluZS5zcGxpdCgnICcpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbGlkQ29tcG9uZW50cyA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBsaW5lQ29tcG9uZW50IG9mIGxpbmVDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJpbW1lZENvbXBvbmVudCA9IGxpbmVDb21wb25lbnQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0cmltbWVkQ29tcG9uZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRDb21wb25lbnRzKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZENvbXBvbmVudHMgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lcy5wdXNoKHRyaW1tZWRDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZWN0aW9uTmFtZXM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNoZWNrVGV4dEZvckVuZEhlYWRlcihlbmRIZWFkZXJUZXN0VGV4dCkge1xyXG4gICAgICAgIGlmIChlbmRIZWFkZXJUZXN0VGV4dC5pbmNsdWRlcyhQbHlQYXJzZXJVdGlscy5IZWFkZXJFbmRUb2tlbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgY2hlY2tCdWZmZXJGb3JFbmRIZWFkZXIoYnVmZmVyLCBzZWFyY2hPZnNldCwgY2h1bmtTaXplLCBkZWNvZGVyKSB7XHJcbiAgICAgICAgY29uc3QgZW5kSGVhZGVyVGVzdENodW5rID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCBNYXRoLm1heCgwLCBzZWFyY2hPZnNldCAtIGNodW5rU2l6ZSksIGNodW5rU2l6ZSk7XHJcbiAgICAgICAgY29uc3QgZW5kSGVhZGVyVGVzdFRleHQgPSBkZWNvZGVyLmRlY29kZShlbmRIZWFkZXJUZXN0Q2h1bmspO1xyXG4gICAgICAgIHJldHVybiBQbHlQYXJzZXJVdGlscy5jaGVja1RleHRGb3JFbmRIZWFkZXIoZW5kSGVhZGVyVGVzdFRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBleHRyYWN0SGVhZGVyRnJvbUJ1ZmZlclRvVGV4dChwbHlCdWZmZXIpIHtcclxuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XHJcbiAgICAgICAgbGV0IGhlYWRlck9mZnNldCA9IDA7XHJcbiAgICAgICAgbGV0IGhlYWRlclRleHQgPSAnJztcclxuICAgICAgICBjb25zdCByZWFkQ2h1bmtTaXplID0gMTAwO1xyXG5cclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAoaGVhZGVyT2Zmc2V0ICsgcmVhZENodW5rU2l6ZSA+PSBwbHlCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmQgb2YgZmlsZSByZWFjaGVkIHdoaWxlIHNlYXJjaGluZyBmb3IgZW5kIG9mIGhlYWRlcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckNodW5rID0gbmV3IFVpbnQ4QXJyYXkocGx5QnVmZmVyLCBoZWFkZXJPZmZzZXQsIHJlYWRDaHVua1NpemUpO1xyXG4gICAgICAgICAgICBoZWFkZXJUZXh0ICs9IGRlY29kZXIuZGVjb2RlKGhlYWRlckNodW5rKTtcclxuICAgICAgICAgICAgaGVhZGVyT2Zmc2V0ICs9IHJlYWRDaHVua1NpemU7XHJcblxyXG4gICAgICAgICAgICBpZiAoUGx5UGFyc2VyVXRpbHMuY2hlY2tCdWZmZXJGb3JFbmRIZWFkZXIocGx5QnVmZmVyLCBoZWFkZXJPZmZzZXQsIHJlYWRDaHVua1NpemUgKiAyLCBkZWNvZGVyKSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBoZWFkZXJUZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIHJlYWRIZWFkZXJGcm9tQnVmZmVyKHBseUJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuICAgICAgICBsZXQgaGVhZGVyT2Zmc2V0ID0gMDtcclxuICAgICAgICBsZXQgaGVhZGVyVGV4dCA9ICcnO1xyXG4gICAgICAgIGNvbnN0IHJlYWRDaHVua1NpemUgPSAxMDA7XHJcblxyXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmIChoZWFkZXJPZmZzZXQgKyByZWFkQ2h1bmtTaXplID49IHBseUJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuZCBvZiBmaWxlIHJlYWNoZWQgd2hpbGUgc2VhcmNoaW5nIGZvciBlbmQgb2YgaGVhZGVyJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgaGVhZGVyQ2h1bmsgPSBuZXcgVWludDhBcnJheShwbHlCdWZmZXIsIGhlYWRlck9mZnNldCwgcmVhZENodW5rU2l6ZSk7XHJcbiAgICAgICAgICAgIGhlYWRlclRleHQgKz0gZGVjb2Rlci5kZWNvZGUoaGVhZGVyQ2h1bmspO1xyXG4gICAgICAgICAgICBoZWFkZXJPZmZzZXQgKz0gcmVhZENodW5rU2l6ZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChQbHlQYXJzZXJVdGlscy5jaGVja0J1ZmZlckZvckVuZEhlYWRlcihwbHlCdWZmZXIsIGhlYWRlck9mZnNldCwgcmVhZENodW5rU2l6ZSAqIDIsIGRlY29kZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGhlYWRlclRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNvbnZlcnRIZWFkZXJUZXh0VG9MaW5lcyhoZWFkZXJUZXh0KSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyTGluZXMgPSBoZWFkZXJUZXh0LnNwbGl0KCdcXG4nKTtcclxuICAgICAgICBjb25zdCBwcnVuZWRMaW5lcyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVyTGluZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZSA9IGhlYWRlckxpbmVzW2ldLnRyaW0oKTtcclxuICAgICAgICAgICAgcHJ1bmVkTGluZXMucHVzaChsaW5lKTtcclxuICAgICAgICAgICAgaWYgKGxpbmUgPT09IFBseVBhcnNlclV0aWxzLkhlYWRlckVuZFRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJ1bmVkTGluZXM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRldGVybWluZUhlYWRlckZvcm1hdEZyb21IZWFkZXJUZXh0KF9oZWFkZXJUZXh0KSB7XHJcbiAgICAgICAgLy8gU2ltcGxpZmllZCAtIEZMQU1FIGF2YXRhcnMgYWx3YXlzIHVzZSBJTlJJQVYxIGZvcm1hdFxyXG4gICAgICAgIHJldHVybiBQbHlGb3JtYXQuSU5SSUFWMTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZGV0ZXJtaW5lSGVhZGVyRm9ybWF0RnJvbVBseUJ1ZmZlcihwbHlCdWZmZXIpIHtcclxuICAgICAgICBjb25zdCBoZWFkZXJ0VGV4dCA9IFBseVBhcnNlclV0aWxzLmV4dHJhY3RIZWFkZXJGcm9tQnVmZmVyVG9UZXh0KHBseUJ1ZmZlcik7XHJcbiAgICAgICAgcmV0dXJuIFBseVBhcnNlclV0aWxzLmRldGVybWluZUhlYWRlckZvcm1hdEZyb21IZWFkZXJUZXh0KGhlYWRlcnRUZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcmVhZFZlcnRleCh2ZXJ0ZXhEYXRhLCBoZWFkZXIsIHJvdywgZGF0YU9mZnNldCwgZmllbGRzVG9SZWFkLCByYXdWZXJ0ZXgsIG5vcm1hbGl6ZSA9IHRydWUpIHtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSByb3cgKiBoZWFkZXIuYnl0ZXNQZXJWZXJ0ZXggKyBkYXRhT2Zmc2V0O1xyXG4gICAgICAgIGNvbnN0IGZpZWxkT2Zmc2V0cyA9IGhlYWRlci5maWVsZE9mZnNldHM7XHJcbiAgICAgICAgY29uc3QgZmllbGRUeXBlcyA9IGhlYWRlci5maWVsZFR5cGVzO1xyXG4gICAgICAgIGZvciAobGV0IGZpZWxkSWQgb2YgZmllbGRzVG9SZWFkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkVHlwZXNbZmllbGRJZF07XHJcbiAgICAgICAgICAgIGlmIChmaWVsZFR5cGUgPT09IEZpZWxkU2l6ZUlkRmxvYXQpIHtcclxuICAgICAgICAgICAgICAgIHJhd1ZlcnRleFtmaWVsZElkXSA9IHZlcnRleERhdGEuZ2V0RmxvYXQzMihvZmZzZXQgKyBmaWVsZE9mZnNldHNbZmllbGRJZF0sIHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZSA9PT0gRmllbGRTaXplSWRTaG9ydCkge1xyXG4gICAgICAgICAgICAgICAgcmF3VmVydGV4W2ZpZWxkSWRdID0gdmVydGV4RGF0YS5nZXRJbnQxNihvZmZzZXQgKyBmaWVsZE9mZnNldHNbZmllbGRJZF0sIHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZSA9PT0gRmllbGRTaXplSWRVU2hvcnQpIHtcclxuICAgICAgICAgICAgICAgIHJhd1ZlcnRleFtmaWVsZElkXSA9IHZlcnRleERhdGEuZ2V0VWludDE2KG9mZnNldCArIGZpZWxkT2Zmc2V0c1tmaWVsZElkXSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGRUeXBlID09PSBGaWVsZFNpemVJZEludCkge1xyXG4gICAgICAgICAgICAgICAgcmF3VmVydGV4W2ZpZWxkSWRdID0gdmVydGV4RGF0YS5nZXRJbnQzMihvZmZzZXQgKyBmaWVsZE9mZnNldHNbZmllbGRJZF0sIHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZSA9PT0gRmllbGRTaXplSWRVSW50KSB7XHJcbiAgICAgICAgICAgICAgICByYXdWZXJ0ZXhbZmllbGRJZF0gPSB2ZXJ0ZXhEYXRhLmdldFVpbnQzMihvZmZzZXQgKyBmaWVsZE9mZnNldHNbZmllbGRJZF0sIHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZSA9PT0gRmllbGRTaXplSWRVQ2hhcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJhd1ZlcnRleFtmaWVsZElkXSA9IHZlcnRleERhdGEuZ2V0VWludDgob2Zmc2V0ICsgZmllbGRPZmZzZXRzW2ZpZWxkSWRdKSAvIDI1NS4wO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByYXdWZXJ0ZXhbZmllbGRJZF0gPSB2ZXJ0ZXhEYXRhLmdldFVpbnQ4KG9mZnNldCArIGZpZWxkT2Zmc2V0c1tmaWVsZElkXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLyoqXHJcbiAqIElOUklBVjFQbHlQYXJzZXJcclxuICogXHJcbiAqIERlcml2ZWQgZnJvbSBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKiBcclxuICogSW1wb3J0IHBhdGhzIGFkanVzdGVkIGZvciBnc3BsYXQtZmxhbWUtYXZhdGFyIHBhY2thZ2Ugc3RydWN0dXJlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7IFVuY29tcHJlc3NlZFNwbGF0QXJyYXkgfSBmcm9tICcuLi9idWZmZXJzL1VuY29tcHJlc3NlZFNwbGF0QXJyYXkuanMnO1xyXG5pbXBvcnQgeyBTcGxhdEJ1ZmZlciB9IGZyb20gJy4uL2J1ZmZlcnMvU3BsYXRCdWZmZXIuanMnO1xyXG5pbXBvcnQgeyBQbHlQYXJzZXJVdGlscyB9IGZyb20gJy4vUGx5UGFyc2VyVXRpbHMuanMnO1xyXG5pbXBvcnQgeyBjbGFtcCB9IGZyb20gJy4uL3V0aWxzL1V0aWwuanMnO1xyXG5cclxuY29uc3QgQmFzZUZpZWxkTmFtZXNUb1JlYWQgPSBbJ3NjYWxlXzAnLCAnc2NhbGVfMScsICdzY2FsZV8yJywgJ3JvdF8wJywgJ3JvdF8xJywgJ3JvdF8yJywgJ3JvdF8zJywgJ3gnLCAneScsICd6JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZfZGNfMCcsICdmX2RjXzEnLCAnZl9kY18yJywgJ29wYWNpdHknLCAncmVkJywgJ2dyZWVuJywgJ2JsdWUnLCAnZl9yZXN0XzAnXTtcclxuXHJcbmNvbnN0IEJhc2VGaWVsZHNUb1JlYWRJbmRleGVzID0gQmFzZUZpZWxkTmFtZXNUb1JlYWQubWFwKChlLCBpKSA9PiBpKTtcclxuXHJcbmNvbnN0IFtcclxuICAgICAgICBTQ0FMRV8wLCBTQ0FMRV8xLCBTQ0FMRV8yLCBST1RfMCwgUk9UXzEsIFJPVF8yLCBST1RfMywgWCwgWSwgWiwgRl9EQ18wLCBGX0RDXzEsIEZfRENfMiwgT1BBQ0lUWSwgUkVELCBHUkVFTiwgQkxVRSwgRl9SRVNUXzBcclxuICAgICAgXSA9IEJhc2VGaWVsZHNUb1JlYWRJbmRleGVzO1xyXG5cclxuZXhwb3J0IGNsYXNzIElOUklBVjFQbHlQYXJzZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMucGx5UGFyc2VydXRpbHMgPSBuZXcgUGx5UGFyc2VyVXRpbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWNvZGVIZWFkZXJMaW5lcyhoZWFkZXJMaW5lcykge1xyXG5cclxuICAgICAgICBsZXQgc2hMaW5lQ291bnQgPSAwO1xyXG4gICAgICAgIGhlYWRlckxpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGxpbmUuaW5jbHVkZXMoJ2ZfcmVzdF8nKSkgc2hMaW5lQ291bnQrKztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IHNoRmllbGRzVG9SZWFkQ291bnQgPSAwO1xyXG4gICAgICAgIGlmIChzaExpbmVDb3VudCA+PSA0NSkge1xyXG4gICAgICAgICAgICBzaEZpZWxkc1RvUmVhZENvdW50ID0gNDU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzaExpbmVDb3VudCA+PSAyNCkge1xyXG4gICAgICAgICAgICBzaEZpZWxkc1RvUmVhZENvdW50ID0gMjQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzaExpbmVDb3VudCA+PSA5KSB7XHJcbiAgICAgICAgICAgIHNoRmllbGRzVG9SZWFkQ291bnQgPSA5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2hGaWVsZEluZGV4ZXNUb01hcCA9IEFycmF5LmZyb20oQXJyYXkoTWF0aC5tYXgoc2hGaWVsZHNUb1JlYWRDb3VudCAtIDEsIDApKSk7XHJcbiAgICAgICAgbGV0IHNoUmVtYWluaW5nRmllbGROYW1lc1RvUmVhZCA9IHNoRmllbGRJbmRleGVzVG9NYXAubWFwKChlbGVtZW50LCBpbmRleCkgPT4gYGZfcmVzdF8ke2luZGV4ICsgMX1gKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmllbGROYW1lc1RvUmVhZCA9IFsuLi5CYXNlRmllbGROYW1lc1RvUmVhZCwgLi4uc2hSZW1haW5pbmdGaWVsZE5hbWVzVG9SZWFkXTtcclxuICAgICAgICBjb25zdCBmaWVsZHNUb1JlYWRJbmRleGVzID0gZmllbGROYW1lc1RvUmVhZC5tYXAoKGUsIGkpID0+IGkpO1xyXG5cclxuICAgICAgICBjb25zdCBmaWVsZE5hbWVJZE1hcCA9IGZpZWxkc1RvUmVhZEluZGV4ZXMucmVkdWNlKChhY2MsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgYWNjW2ZpZWxkTmFtZXNUb1JlYWRbZWxlbWVudF1dID0gZWxlbWVudDtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5wbHlQYXJzZXJ1dGlscy5kZWNvZGVTZWN0aW9uSGVhZGVyKGhlYWRlckxpbmVzLCBmaWVsZE5hbWVJZE1hcCwgMCk7XHJcbiAgICAgICAgaGVhZGVyLnNwbGF0Q291bnQgPSBoZWFkZXIudmVydGV4Q291bnQ7XHJcbiAgICAgICAgaGVhZGVyLmJ5dGVzUGVyU3BsYXQgPSBoZWFkZXIuYnl0ZXNQZXJWZXJ0ZXg7XHJcbiAgICAgICAgaGVhZGVyLmZpZWxkc1RvUmVhZEluZGV4ZXMgPSBmaWVsZHNUb1JlYWRJbmRleGVzO1xyXG4gICAgICAgIHJldHVybiBoZWFkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZGVjb2RlSGVhZGVyVGV4dChoZWFkZXJUZXh0KSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyTGluZXMgPSBQbHlQYXJzZXJVdGlscy5jb252ZXJ0SGVhZGVyVGV4dFRvTGluZXMoaGVhZGVyVGV4dCk7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5kZWNvZGVIZWFkZXJMaW5lcyhoZWFkZXJMaW5lcyk7XHJcbiAgICAgICAgaGVhZGVyLmhlYWRlclRleHQgPSBoZWFkZXJUZXh0O1xyXG4gICAgICAgIGhlYWRlci5oZWFkZXJTaXplQnl0ZXMgPSBoZWFkZXJUZXh0LmluZGV4T2YoUGx5UGFyc2VyVXRpbHMuSGVhZGVyRW5kVG9rZW4pICsgUGx5UGFyc2VyVXRpbHMuSGVhZGVyRW5kVG9rZW4ubGVuZ3RoICsgMTtcclxuICAgICAgICByZXR1cm4gaGVhZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGRlY29kZUhlYWRlckZyb21CdWZmZXIocGx5QnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyVGV4dCA9IHRoaXMucGx5UGFyc2VydXRpbHMucmVhZEhlYWRlckZyb21CdWZmZXIocGx5QnVmZmVyKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGVIZWFkZXJUZXh0KGhlYWRlclRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbmRTcGxhdERhdGEocGx5QnVmZmVyLCBoZWFkZXIpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGFWaWV3KHBseUJ1ZmZlciwgaGVhZGVyLmhlYWRlclNpemVCeXRlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VUb1VuY29tcHJlc3NlZFNwbGF0QnVmZmVyU2VjdGlvbihoZWFkZXIsIGZyb21TcGxhdCwgdG9TcGxhdCwgc3BsYXREYXRhLCBzcGxhdERhdGFPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvQnVmZmVyLCB0b09mZnNldCwgb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gMCkge1xyXG4gICAgICAgIG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA9IE1hdGgubWluKG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSwgaGVhZGVyLnNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcbiAgICAgICAgY29uc3Qgb3V0Qnl0ZXNQZXJTcGxhdCA9IFNwbGF0QnVmZmVyLkNvbXByZXNzaW9uTGV2ZWxzWzBdLlNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZXNbb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlXS5CeXRlc1BlclNwbGF0O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gZnJvbVNwbGF0OyBpIDw9IHRvU3BsYXQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZWRTcGxhdCA9IElOUklBVjFQbHlQYXJzZXIucGFyc2VUb1VuY29tcHJlc3NlZFNwbGF0KHNwbGF0RGF0YSwgaSwgaGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGF0RGF0YU9mZnNldCwgb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKTtcclxuICAgICAgICAgICAgY29uc3Qgb3V0QmFzZSA9IGkgKiBvdXRCeXRlc1BlclNwbGF0ICsgdG9PZmZzZXQ7XHJcbiAgICAgICAgICAgIFNwbGF0QnVmZmVyLndyaXRlU3BsYXREYXRhVG9TZWN0aW9uQnVmZmVyKHBhcnNlZFNwbGF0LCB0b0J1ZmZlciwgb3V0QmFzZSwgMCwgb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VUb1VuY29tcHJlc3NlZFNwbGF0QXJyYXlTZWN0aW9uKGhlYWRlciwgZnJvbVNwbGF0LCB0b1NwbGF0LCBzcGxhdERhdGEsIHNwbGF0RGF0YU9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxhdEFycmF5LCBvdXRTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPSAwKSB7XHJcbiAgICAgICAgb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gTWF0aC5taW4ob3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlLCBoZWFkZXIuc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gZnJvbVNwbGF0OyBpIDw9IHRvU3BsYXQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZWRTcGxhdCA9IElOUklBVjFQbHlQYXJzZXIucGFyc2VUb1VuY29tcHJlc3NlZFNwbGF0KHNwbGF0RGF0YSwgaSwgaGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGF0RGF0YU9mZnNldCwgb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKTtcclxuICAgICAgICAgICAgc3BsYXRBcnJheS5hZGRTcGxhdChwYXJzZWRTcGxhdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlY29kZVNlY3Rpb25TcGxhdERhdGEoc2VjdGlvblNwbGF0RGF0YSwgc3BsYXRDb3VudCwgc2VjdGlvbkhlYWRlciwgb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKSB7XHJcbiAgICAgICAgb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gTWF0aC5taW4ob3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlLCBzZWN0aW9uSGVhZGVyLnNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcbiAgICAgICAgY29uc3Qgc3BsYXRBcnJheSA9IG5ldyBVbmNvbXByZXNzZWRTcGxhdEFycmF5KG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcbiAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgc3BsYXRDb3VudDsgcm93KyspIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3U3BsYXQgPSBJTlJJQVYxUGx5UGFyc2VyLnBhcnNlVG9VbmNvbXByZXNzZWRTcGxhdChzZWN0aW9uU3BsYXREYXRhLCByb3csIHNlY3Rpb25IZWFkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKTtcclxuICAgICAgICAgICAgc3BsYXRBcnJheS5hZGRTcGxhdChuZXdTcGxhdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzcGxhdEFycmF5O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBwYXJzZVRvVW5jb21wcmVzc2VkU3BsYXQgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgbGV0IHJhd1NwbGF0ID0gW107XHJcbiAgICAgICAgY29uc3QgdGVtcFJvdGF0aW9uID0gbmV3IFF1YXRlcm5pb24oKTtcclxuXHJcbiAgICAgICAgY29uc3QgT0ZGU0VUX1ggPSBVbmNvbXByZXNzZWRTcGxhdEFycmF5Lk9GRlNFVC5YO1xyXG4gICAgICAgIGNvbnN0IE9GRlNFVF9ZID0gVW5jb21wcmVzc2VkU3BsYXRBcnJheS5PRkZTRVQuWTtcclxuICAgICAgICBjb25zdCBPRkZTRVRfWiA9IFVuY29tcHJlc3NlZFNwbGF0QXJyYXkuT0ZGU0VULlo7XHJcblxyXG4gICAgICAgIGNvbnN0IE9GRlNFVF9TQ0FMRTAgPSBVbmNvbXByZXNzZWRTcGxhdEFycmF5Lk9GRlNFVC5TQ0FMRTA7XHJcbiAgICAgICAgY29uc3QgT0ZGU0VUX1NDQUxFMSA9IFVuY29tcHJlc3NlZFNwbGF0QXJyYXkuT0ZGU0VULlNDQUxFMTtcclxuICAgICAgICBjb25zdCBPRkZTRVRfU0NBTEUyID0gVW5jb21wcmVzc2VkU3BsYXRBcnJheS5PRkZTRVQuU0NBTEUyO1xyXG5cclxuICAgICAgICBjb25zdCBPRkZTRVRfUk9UQVRJT04wID0gVW5jb21wcmVzc2VkU3BsYXRBcnJheS5PRkZTRVQuUk9UQVRJT04wO1xyXG4gICAgICAgIGNvbnN0IE9GRlNFVF9ST1RBVElPTjEgPSBVbmNvbXByZXNzZWRTcGxhdEFycmF5Lk9GRlNFVC5ST1RBVElPTjE7XHJcbiAgICAgICAgY29uc3QgT0ZGU0VUX1JPVEFUSU9OMiA9IFVuY29tcHJlc3NlZFNwbGF0QXJyYXkuT0ZGU0VULlJPVEFUSU9OMjtcclxuICAgICAgICBjb25zdCBPRkZTRVRfUk9UQVRJT04zID0gVW5jb21wcmVzc2VkU3BsYXRBcnJheS5PRkZTRVQuUk9UQVRJT04zO1xyXG5cclxuICAgICAgICBjb25zdCBPRkZTRVRfRkRDMCA9IFVuY29tcHJlc3NlZFNwbGF0QXJyYXkuT0ZGU0VULkZEQzA7XHJcbiAgICAgICAgY29uc3QgT0ZGU0VUX0ZEQzEgPSBVbmNvbXByZXNzZWRTcGxhdEFycmF5Lk9GRlNFVC5GREMxO1xyXG4gICAgICAgIGNvbnN0IE9GRlNFVF9GREMyID0gVW5jb21wcmVzc2VkU3BsYXRBcnJheS5PRkZTRVQuRkRDMjtcclxuICAgICAgICBjb25zdCBPRkZTRVRfT1BBQ0lUWSA9IFVuY29tcHJlc3NlZFNwbGF0QXJyYXkuT0ZGU0VULk9QQUNJVFk7XHJcblxyXG4gICAgICAgIGNvbnN0IE9GRlNFVF9GUkMgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0NTsgaSsrKSB7XHJcbiAgICAgICAgICAgIE9GRlNFVF9GUkNbaV0gPSBVbmNvbXByZXNzZWRTcGxhdEFycmF5Lk9GRlNFVC5GUkMwICsgaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihzcGxhdERhdGEsIHJvdywgaGVhZGVyLCBzcGxhdERhdGFPZmZzZXQgPSAwLCBvdXRTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPSAwKSB7XHJcbiAgICAgICAgICAgIG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA9IE1hdGgubWluKG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSwgaGVhZGVyLnNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcbiAgICAgICAgICAgIElOUklBVjFQbHlQYXJzZXIucmVhZFNwbGF0KHNwbGF0RGF0YSwgaGVhZGVyLCByb3csIHNwbGF0RGF0YU9mZnNldCwgcmF3U3BsYXQpO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTcGxhdCA9IFVuY29tcHJlc3NlZFNwbGF0QXJyYXkuY3JlYXRlU3BsYXQob3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlKTtcclxuICAgICAgICAgICAgaWYgKHJhd1NwbGF0W1NDQUxFXzBdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9TQ0FMRTBdID0gTWF0aC5leHAocmF3U3BsYXRbU0NBTEVfMF0pO1xyXG4gICAgICAgICAgICAgICAgbmV3U3BsYXRbT0ZGU0VUX1NDQUxFMV0gPSBNYXRoLmV4cChyYXdTcGxhdFtTQ0FMRV8xXSk7XHJcbiAgICAgICAgICAgICAgICBuZXdTcGxhdFtPRkZTRVRfU0NBTEUyXSA9IE1hdGguZXhwKHJhd1NwbGF0W1NDQUxFXzJdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9TQ0FMRTBdID0gMC4wMTtcclxuICAgICAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9TQ0FMRTFdID0gMC4wMTtcclxuICAgICAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9TQ0FMRTJdID0gMC4wMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJhd1NwbGF0W0ZfRENfMF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgU0hfQzAgPSAwLjI4MjA5NDc5MTc3Mzg3ODE0O1xyXG4gICAgICAgICAgICAgICAgbmV3U3BsYXRbT0ZGU0VUX0ZEQzBdID0gcmF3U3BsYXRbRl9EQ18wXSAqIDI1NTtcclxuICAgICAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9GREMxXSA9IHJhd1NwbGF0W0ZfRENfMV0gKiAyNTU7XHJcbiAgICAgICAgICAgICAgICBuZXdTcGxhdFtPRkZTRVRfRkRDMl0gPSByYXdTcGxhdFtGX0RDXzJdICogMjU1O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJhd1NwbGF0W1JFRF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgbmV3U3BsYXRbT0ZGU0VUX0ZEQzBdID0gcmF3U3BsYXRbUkVEXSAqIDI1NTtcclxuICAgICAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9GREMxXSA9IHJhd1NwbGF0W0dSRUVOXSAqIDI1NTtcclxuICAgICAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9GREMyXSA9IHJhd1NwbGF0W0JMVUVdICogMjU1O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV3U3BsYXRbT0ZGU0VUX0ZEQzBdID0gMDtcclxuICAgICAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9GREMxXSA9IDA7XHJcbiAgICAgICAgICAgICAgICBuZXdTcGxhdFtPRkZTRVRfRkRDMl0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmF3U3BsYXRbT1BBQ0lUWV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgbmV3U3BsYXRbT0ZGU0VUX09QQUNJVFldID0gKDEgLyAoMSArIE1hdGguZXhwKC1yYXdTcGxhdFtPUEFDSVRZXSkpKSAqIDI1NTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbmV3U3BsYXRbT0ZGU0VUX0ZEQzBdID0gY2xhbXAoTWF0aC5mbG9vcihuZXdTcGxhdFtPRkZTRVRfRkRDMF0pLCAwLCAyNTUpO1xyXG4gICAgICAgICAgICBuZXdTcGxhdFtPRkZTRVRfRkRDMV0gPSBjbGFtcChNYXRoLmZsb29yKG5ld1NwbGF0W09GRlNFVF9GREMxXSksIDAsIDI1NSk7XHJcbiAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9GREMyXSA9IGNsYW1wKE1hdGguZmxvb3IobmV3U3BsYXRbT0ZGU0VUX0ZEQzJdKSwgMCwgMjU1KTtcclxuICAgICAgICAgICAgbmV3U3BsYXRbT0ZGU0VUX09QQUNJVFldID0gY2xhbXAoTWF0aC5mbG9vcihuZXdTcGxhdFtPRkZTRVRfT1BBQ0lUWV0pLCAwLCAyNTUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmF3U3BsYXRbRl9SRVNUXzBdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDk7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTcGxhdFtPRkZTRVRfRlJDW2ldXSA9IHJhd1NwbGF0W2hlYWRlci5zcGhlcmljYWxIYXJtb25pY3NEZWdyZWUxRmllbGRzW2ldXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA+PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTU7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3BsYXRbT0ZGU0VUX0ZSQ1s5ICsgaV1dID0gcmF3U3BsYXRbaGVhZGVyLnNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZTJGaWVsZHNbaV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0ZW1wUm90YXRpb24uc2V0KHJhd1NwbGF0W1JPVF8wXSwgcmF3U3BsYXRbUk9UXzFdLCByYXdTcGxhdFtST1RfMl0sIHJhd1NwbGF0W1JPVF8zXSk7XHJcbiAgICAgICAgICAgIHRlbXBSb3RhdGlvbi5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9ST1RBVElPTjBdID0gdGVtcFJvdGF0aW9uLng7XHJcbiAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9ST1RBVElPTjFdID0gdGVtcFJvdGF0aW9uLnk7XHJcbiAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9ST1RBVElPTjJdID0gdGVtcFJvdGF0aW9uLno7XHJcbiAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9ST1RBVElPTjNdID0gdGVtcFJvdGF0aW9uLnc7XHJcblxyXG4gICAgICAgICAgICBuZXdTcGxhdFtPRkZTRVRfWF0gPSByYXdTcGxhdFtYXTtcclxuICAgICAgICAgICAgbmV3U3BsYXRbT0ZGU0VUX1ldID0gcmF3U3BsYXRbWV07XHJcbiAgICAgICAgICAgIG5ld1NwbGF0W09GRlNFVF9aXSA9IHJhd1NwbGF0W1pdO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG5ld1NwbGF0O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgfSgpO1xyXG5cclxuICAgIHN0YXRpYyByZWFkU3BsYXQoc3BsYXREYXRhLCBoZWFkZXIsIHJvdywgZGF0YU9mZnNldCwgcmF3U3BsYXQpIHtcclxuICAgICAgICByZXR1cm4gUGx5UGFyc2VyVXRpbHMucmVhZFZlcnRleChzcGxhdERhdGEsIGhlYWRlciwgcm93LCBkYXRhT2Zmc2V0LCBoZWFkZXIuZmllbGRzVG9SZWFkSW5kZXhlcywgcmF3U3BsYXQsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlVG9VbmNvbXByZXNzZWRTcGxhdEFycmF5KHBseUJ1ZmZlciwgb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gMCkge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuZGVjb2RlSGVhZGVyRnJvbUJ1ZmZlcihwbHlCdWZmZXIpO1xyXG4gICAgICAgIGNvbnN0IHNwbGF0Q291bnQgPSBoZWFkZXIuc3BsYXRDb3VudDtcclxuICAgICAgICBjb25zdCBzcGxhdERhdGEgPSB0aGlzLmZpbmRTcGxhdERhdGEocGx5QnVmZmVyLCBoZWFkZXIpO1xyXG4gICAgICAgIGNvbnN0IHNwbGF0QXJyYXkgPSB0aGlzLmRlY29kZVNlY3Rpb25TcGxhdERhdGEoc3BsYXREYXRhLCBzcGxhdENvdW50LCBoZWFkZXIsIG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcbiAgICAgICAgcmV0dXJuIHNwbGF0QXJyYXk7XHJcbiAgICB9XHJcbn1cclxuIiwiLyoqXHJcbiAqIFBseVBhcnNlclxyXG4gKiBcclxuICogRGVyaXZlZCBmcm9tIEBta2tlbGxvZ2cvZ2F1c3NpYW4tc3BsYXRzLTNkIChNSVQgTGljZW5zZSlcclxuICogaHR0cHM6Ly9naXRodWIuY29tL21ra2VsbG9nZy9HYXVzc2lhblNwbGF0czNEXHJcbiAqIFxyXG4gKiBTaW1wbGlmaWVkIGZvciBGTEFNRSBhdmF0YXIgLSBvbmx5IHN1cHBvcnRzIElOUklBVjEgUExZIGZvcm1hdC5cclxuICovXHJcblxyXG5pbXBvcnQgeyBJTlJJQVYxUGx5UGFyc2VyIH0gZnJvbSAnLi9JTlJJQVYxUGx5UGFyc2VyLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQbHlQYXJzZXIge1xyXG5cclxuICAgIHN0YXRpYyBwYXJzZVRvVW5jb21wcmVzc2VkU3BsYXRBcnJheShwbHlCdWZmZXIsIG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA9IDApIHtcclxuICAgICAgICAvLyBGTEFNRSBhdmF0YXJzIHVzZSBJTlJJQVYxIFBMWSBmb3JtYXRcclxuICAgICAgICByZXR1cm4gbmV3IElOUklBVjFQbHlQYXJzZXIoKS5wYXJzZVRvVW5jb21wcmVzc2VkU3BsYXRBcnJheShwbHlCdWZmZXIsIG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcbiAgICB9XHJcblxyXG59IiwiLyoqXHJcbiAqIFBseUxvYWRlclxyXG4gKiBcclxuICogRGVyaXZlZCBmcm9tIEBta2tlbGxvZ2cvZ2F1c3NpYW4tc3BsYXRzLTNkIChNSVQgTGljZW5zZSlcclxuICogaHR0cHM6Ly9naXRodWIuY29tL21ra2VsbG9nZy9HYXVzc2lhblNwbGF0czNEXHJcbiAqIFxyXG4gKiBTaW1wbGlmaWVkIGZvciBGTEFNRSBhdmF0YXIgLSBvbmx5IHN1cHBvcnRzIElOUklBVjEgUExZIGZvcm1hdC5cclxuICovXHJcblxyXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQgeyBTcGxhdEJ1ZmZlciB9IGZyb20gJy4uL2J1ZmZlcnMvU3BsYXRCdWZmZXIuanMnO1xyXG5pbXBvcnQgeyBVbmNvbXByZXNzZWRTcGxhdEFycmF5IH0gZnJvbSAnLi4vYnVmZmVycy9VbmNvbXByZXNzZWRTcGxhdEFycmF5LmpzJztcclxuaW1wb3J0IHsgU3BsYXRCdWZmZXJHZW5lcmF0b3IgfSBmcm9tICcuLi9idWZmZXJzL1NwbGF0QnVmZmVyR2VuZXJhdG9yLmpzJztcclxuaW1wb3J0IHsgUGx5UGFyc2VyIH0gZnJvbSAnLi9QbHlQYXJzZXIuanMnO1xyXG5pbXBvcnQgeyBQbHlQYXJzZXJVdGlscyB9IGZyb20gJy4vUGx5UGFyc2VyVXRpbHMuanMnO1xyXG5pbXBvcnQgeyBJTlJJQVYxUGx5UGFyc2VyIH0gZnJvbSAnLi9JTlJJQVYxUGx5UGFyc2VyLmpzJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzLCBJbnRlcm5hbExvYWRUeXBlLCBMb2FkZXJTdGF0dXMgfSBmcm9tICcuLi9lbnVtcy9FbmdpbmVDb25zdGFudHMuanMnO1xyXG5pbXBvcnQgeyBmZXRjaFdpdGhQcm9ncmVzcywgZGVsYXllZEV4ZWN1dGUsIG5hdGl2ZVByb21pc2VXaXRoRXh0cmFjdGVkQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL1V0aWwuanMnO1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzdG9yZSBjaHVua3MgaW50byBhIHNpbmdsZSBidWZmZXJcclxuICovXHJcbmZ1bmN0aW9uIHN0b3JlQ2h1bmtzSW5CdWZmZXIoY2h1bmtzLCBidWZmZXIpIHtcclxuICAgIGxldCBpbkJ5dGVzID0gMDtcclxuICAgIGZvciAobGV0IGNodW5rIG9mIGNodW5rcykgaW5CeXRlcyArPSBjaHVuay5zaXplQnl0ZXM7XHJcblxyXG4gICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLmJ5dGVMZW5ndGggPCBpbkJ5dGVzKSB7XHJcbiAgICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGluQnl0ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvZmZzZXQgPSAwO1xyXG4gICAgZm9yIChsZXQgY2h1bmsgb2YgY2h1bmtzKSB7XHJcbiAgICAgICAgbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCBvZmZzZXQsIGNodW5rLnNpemVCeXRlcykuc2V0KGNodW5rLmRhdGEpO1xyXG4gICAgICAgIG9mZnNldCArPSBjaHVuay5zaXplQnl0ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGJ1ZmZlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBmaW5hbGl6ZSBzcGxhdCBkYXRhXHJcbiAqL1xyXG5mdW5jdGlvbiBmaW5hbGl6ZSQxKHNwbGF0RGF0YSwgb3B0aW1pemVTcGxhdERhdGEsIG1pbmltdW1BbHBoYSwgY29tcHJlc3Npb25MZXZlbCwgc2VjdGlvblNpemUsIHNjZW5lQ2VudGVyLCBibG9ja1NpemUsIGJ1Y2tldFNpemUpIHtcclxuICAgIGlmIChvcHRpbWl6ZVNwbGF0RGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHNwbGF0QnVmZmVyR2VuZXJhdG9yID0gU3BsYXRCdWZmZXJHZW5lcmF0b3IuZ2V0U3RhbmRhcmRHZW5lcmF0b3IobWluaW11bUFscGhhLCBjb21wcmVzc2lvbkxldmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvblNpemUsIHNjZW5lQ2VudGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tTaXplLCBidWNrZXRTaXplKTtcclxuICAgICAgICByZXR1cm4gc3BsYXRCdWZmZXJHZW5lcmF0b3IuZ2VuZXJhdGVGcm9tVW5jb21wcmVzc2VkU3BsYXRBcnJheShzcGxhdERhdGEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gU3BsYXRCdWZmZXIuZ2VuZXJhdGVGcm9tVW5jb21wcmVzc2VkU3BsYXRBcnJheXMoW3NwbGF0RGF0YV0sIG1pbmltdW1BbHBoYSwgMCwgbmV3IFZlY3RvcjMoKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQbHlMb2FkZXIge1xyXG5cclxuICAgIHN0YXRpYyBsb2FkRnJvbVVSTChmaWxlTmFtZSwgb25Qcm9ncmVzcywgbG9hZERpcmVjdG9Ub1NwbGF0QnVmZmVyLCBvblByb2dyZXNzaXZlTG9hZFNlY3Rpb25Qcm9ncmVzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtQWxwaGEsIGNvbXByZXNzaW9uTGV2ZWwsIG9wdGltaXplU3BsYXREYXRhID0gdHJ1ZSwgb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlID0gMCxcclxuICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLCBzZWN0aW9uU2l6ZSwgc2NlbmVDZW50ZXIsIGJsb2NrU2l6ZSwgYnVja2V0U2l6ZSkge1xyXG5cclxuICAgICAgICBsZXQgaW50ZXJuYWxMb2FkVHlwZSA9IGxvYWREaXJlY3RvVG9TcGxhdEJ1ZmZlciA/IEludGVybmFsTG9hZFR5cGUuRGlyZWN0VG9TcGxhdEJ1ZmZlciA6IEludGVybmFsTG9hZFR5cGUuRGlyZWN0VG9TcGxhdEFycmF5O1xyXG4gICAgICAgIGlmIChvcHRpbWl6ZVNwbGF0RGF0YSkgaW50ZXJuYWxMb2FkVHlwZSA9IEludGVybmFsTG9hZFR5cGUuRGlyZWN0VG9TcGxhdEFycmF5O1xyXG5cclxuICAgICAgICBjb25zdCBkaXJlY3RMb2FkU2VjdGlvblNpemVCeXRlcyA9IENvbnN0YW50cy5Qcm9ncmVzc2l2ZUxvYWRTZWN0aW9uU2l6ZTtcclxuICAgICAgICBjb25zdCBzcGxhdERhdGFPZmZzZXRCeXRlcyA9IFNwbGF0QnVmZmVyLkhlYWRlclNpemVCeXRlcyArIFNwbGF0QnVmZmVyLlNlY3Rpb25IZWFkZXJTaXplQnl0ZXM7XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbkNvdW50ID0gMTtcclxuXHJcbiAgICAgICAgbGV0IGRpcmVjdExvYWRCdWZmZXJJbjtcclxuICAgICAgICBsZXQgZGlyZWN0TG9hZEJ1ZmZlck91dDtcclxuICAgICAgICBsZXQgZGlyZWN0TG9hZFNwbGF0QnVmZmVyO1xyXG4gICAgICAgIGxldCBtYXhTcGxhdENvdW50ID0gMDtcclxuICAgICAgICBsZXQgc3BsYXRDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcmVhZHlUb0xvYWRTcGxhdERhdGEgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgbG9hZFByb21pc2UgPSBuYXRpdmVQcm9taXNlV2l0aEV4dHJhY3RlZENvbXBvbmVudHMoKTtcclxuXHJcbiAgICAgICAgbGV0IG51bUJ5dGVzU3RyZWFtZWQgPSAwO1xyXG4gICAgICAgIGxldCBudW1CeXRlc1BhcnNlZCA9IDA7XHJcbiAgICAgICAgbGV0IG51bUJ5dGVzRG93bmxvYWRlZCA9IDA7XHJcbiAgICAgICAgbGV0IGhlYWRlclRleHQgPSAnJztcclxuICAgICAgICBsZXQgaGVhZGVyID0gbnVsbDtcclxuICAgICAgICBsZXQgY2h1bmtzID0gW107XHJcblxyXG4gICAgICAgIGxldCBzdGFuZGFyZExvYWRVbmNvbXByZXNzZWRTcGxhdEFycmF5O1xyXG5cclxuICAgICAgICBjb25zdCB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xyXG4gICAgICAgIGNvbnN0IGlucmlhVjFQbHlQYXJzZXIgPSBuZXcgSU5SSUFWMVBseVBhcnNlcigpO1xyXG5cclxuICAgICAgICBjb25zdCBsb2NhbE9uUHJvZ3Jlc3MgPSAocGVyY2VudCwgcGVyY2VudExhYmVsLCBjaHVua0RhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbG9hZENvbXBsZXRlID0gcGVyY2VudCA+PSAxMDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2h1bmtEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBjaHVua3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiBjaHVua0RhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NpemVCeXRlcyc6IGNodW5rRGF0YS5ieXRlTGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgICdzdGFydEJ5dGVzJzogbnVtQnl0ZXNEb3dubG9hZGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICdlbmRCeXRlcyc6IG51bUJ5dGVzRG93bmxvYWRlZCArIGNodW5rRGF0YS5ieXRlTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIG51bUJ5dGVzRG93bmxvYWRlZCArPSBjaHVua0RhdGEuYnl0ZUxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGludGVybmFsTG9hZFR5cGUgPT09IEludGVybmFsTG9hZFR5cGUuRG93bmxvYWRCZWZvcmVQcm9jZXNzaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9hZENvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZFByb21pc2UucmVzb2x2ZShjaHVua3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFoZWFkZXJMb2FkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJUZXh0ICs9IHRleHREZWNvZGVyLmRlY29kZShjaHVua0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChQbHlQYXJzZXJVdGlscy5jaGVja1RleHRGb3JFbmRIZWFkZXIoaGVhZGVyVGV4dCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRkxBTUUgYXZhdGFycyB1c2UgSU5SSUFWMSBmb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gaW5yaWFWMVBseVBhcnNlci5kZWNvZGVIZWFkZXJUZXh0KGhlYWRlclRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhTcGxhdENvdW50ID0gaGVhZGVyLnNwbGF0Q291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5VG9Mb2FkU3BsYXREYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA9IE1hdGgubWluKG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSwgaGVhZGVyLnNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaERlc2NyaXB0b3IgPSBTcGxhdEJ1ZmZlci5Db21wcmVzc2lvbkxldmVsc1swXS5TcGhlcmljYWxIYXJtb25pY3NEZWdyZWVzW291dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwbGF0QnVmZmVyU2l6ZUJ5dGVzID0gc3BsYXREYXRhT2Zmc2V0Qnl0ZXMgKyBzaERlc2NyaXB0b3IuQnl0ZXNQZXJTcGxhdCAqIG1heFNwbGF0Q291bnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxMb2FkVHlwZSA9PT0gSW50ZXJuYWxMb2FkVHlwZS5EaXJlY3RUb1NwbGF0QnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RMb2FkQnVmZmVyT3V0ID0gbmV3IEFycmF5QnVmZmVyKHNwbGF0QnVmZmVyU2l6ZUJ5dGVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwbGF0QnVmZmVyLndyaXRlSGVhZGVyVG9CdWZmZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25NYWpvcjogU3BsYXRCdWZmZXIuQ3VycmVudE1ham9yVmVyc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uTWlub3I6IFNwbGF0QnVmZmVyLkN1cnJlbnRNaW5vclZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2VjdGlvbkNvdW50OiBzZWN0aW9uQ291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbkNvdW50OiBzZWN0aW9uQ291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3BsYXRDb3VudDogbWF4U3BsYXRDb3VudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxhdENvdW50OiBzcGxhdENvdW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uTGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVDZW50ZXI6IG5ldyBWZWN0b3IzKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGRpcmVjdExvYWRCdWZmZXJPdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRMb2FkVW5jb21wcmVzc2VkU3BsYXRBcnJheSA9IG5ldyBVbmNvbXByZXNzZWRTcGxhdEFycmF5KG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bUJ5dGVzU3RyZWFtZWQgPSBoZWFkZXIuaGVhZGVyU2l6ZUJ5dGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1CeXRlc1BhcnNlZCA9IGhlYWRlci5oZWFkZXJTaXplQnl0ZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChoZWFkZXJMb2FkZWQgJiYgcmVhZHlUb0xvYWRTcGxhdERhdGEpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rcy5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RMb2FkQnVmZmVySW4gPSBzdG9yZUNodW5rc0luQnVmZmVyKGNodW5rcywgZGlyZWN0TG9hZEJ1ZmZlckluKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzTG9hZGVkU2luY2VMYXN0U3RyZWFtZWRTZWN0aW9uID0gbnVtQnl0ZXNEb3dubG9hZGVkIC0gbnVtQnl0ZXNTdHJlYW1lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzTG9hZGVkU2luY2VMYXN0U3RyZWFtZWRTZWN0aW9uID4gZGlyZWN0TG9hZFNlY3Rpb25TaXplQnl0ZXMgfHwgbG9hZENvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1CeXRlc1RvUHJvY2VzcyA9IG51bUJ5dGVzRG93bmxvYWRlZCAtIG51bUJ5dGVzUGFyc2VkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkZWRTcGxhdENvdW50ID0gTWF0aC5mbG9vcihudW1CeXRlc1RvUHJvY2VzcyAvIGhlYWRlci5ieXRlc1BlclNwbGF0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bUJ5dGVzVG9QYXJzZSA9IGFkZGVkU3BsYXRDb3VudCAqIGhlYWRlci5ieXRlc1BlclNwbGF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtQnl0ZXNMZWZ0T3ZlciA9IG51bUJ5dGVzVG9Qcm9jZXNzIC0gbnVtQnl0ZXNUb1BhcnNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3U3BsYXRDb3VudCA9IHNwbGF0Q291bnQgKyBhZGRlZFNwbGF0Q291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWREYXRhVmlld09mZnNldCA9IG51bUJ5dGVzUGFyc2VkIC0gY2h1bmtzWzBdLnN0YXJ0Qnl0ZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhVG9QYXJzZSA9IG5ldyBEYXRhVmlldyhkaXJlY3RMb2FkQnVmZmVySW4sIHBhcnNlZERhdGFWaWV3T2Zmc2V0LCBudW1CeXRlc1RvUGFyc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoRGVzY3JpcHRvciA9IFNwbGF0QnVmZmVyLkNvbXByZXNzaW9uTGV2ZWxzWzBdLlNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZXNbb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dE9mZnNldCA9IHNwbGF0Q291bnQgKiBzaERlc2NyaXB0b3IuQnl0ZXNQZXJTcGxhdCArIHNwbGF0RGF0YU9mZnNldEJ5dGVzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbExvYWRUeXBlID09PSBJbnRlcm5hbExvYWRUeXBlLkRpcmVjdFRvU3BsYXRCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnJpYVYxUGx5UGFyc2VyLnBhcnNlVG9VbmNvbXByZXNzZWRTcGxhdEJ1ZmZlclNlY3Rpb24oaGVhZGVyLCAwLCBhZGRlZFNwbGF0Q291bnQgLSAxLCBkYXRhVG9QYXJzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZGlyZWN0TG9hZEJ1ZmZlck91dCwgb3V0T2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnJpYVYxUGx5UGFyc2VyLnBhcnNlVG9VbmNvbXByZXNzZWRTcGxhdEFycmF5U2VjdGlvbihoZWFkZXIsIDAsIGFkZGVkU3BsYXRDb3VudCAtIDEsIGRhdGFUb1BhcnNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzdGFuZGFyZExvYWRVbmNvbXByZXNzZWRTcGxhdEFycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGF0Q291bnQgPSBuZXdTcGxhdENvdW50O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbExvYWRUeXBlID09PSBJbnRlcm5hbExvYWRUeXBlLkRpcmVjdFRvU3BsYXRCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpcmVjdExvYWRTcGxhdEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGxhdEJ1ZmZlci53cml0ZVNlY3Rpb25IZWFkZXJUb0J1ZmZlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTcGxhdENvdW50OiBtYXhTcGxhdENvdW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsYXRDb3VudDogc3BsYXRDb3VudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldFNpemU6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRDb3VudDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEJsb2NrU2l6ZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uU2NhbGVSYW5nZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VTaXplQnl0ZXM6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsQnVja2V0Q291bnQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsbHlGaWxsZWRCdWNrZXRDb3VudDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZTogb3V0U3BoZXJpY2FsSGFybW9uaWNzRGVncmVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDAsIGRpcmVjdExvYWRCdWZmZXJPdXQsIFNwbGF0QnVmZmVyLkhlYWRlclNpemVCeXRlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdExvYWRTcGxhdEJ1ZmZlciA9IG5ldyBTcGxhdEJ1ZmZlcihkaXJlY3RMb2FkQnVmZmVyT3V0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdExvYWRTcGxhdEJ1ZmZlci51cGRhdGVMb2FkZWRDb3VudHMoMSwgc3BsYXRDb3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9uUHJvZ3Jlc3NpdmVMb2FkU2VjdGlvblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3NpdmVMb2FkU2VjdGlvblByb2dyZXNzKGRpcmVjdExvYWRTcGxhdEJ1ZmZlciwgbG9hZENvbXBsZXRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQnl0ZXNTdHJlYW1lZCArPSBkaXJlY3RMb2FkU2VjdGlvblNpemVCeXRlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUJ5dGVzUGFyc2VkICs9IG51bUJ5dGVzVG9QYXJzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtQnl0ZXNMZWZ0T3ZlciA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2VlcENodW5rcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZWVwU2l6ZSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNodW5rcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcFNpemUgKz0gY2h1bmsuc2l6ZUJ5dGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwQ2h1bmtzLnVuc2hpZnQoY2h1bmspO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2VlcFNpemUgPj0gbnVtQnl0ZXNMZWZ0T3ZlcikgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IGtlZXBDaHVua3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkQ29tcGxldGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVybmFsTG9hZFR5cGUgPT09IEludGVybmFsTG9hZFR5cGUuRGlyZWN0VG9TcGxhdEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZFByb21pc2UucmVzb2x2ZShkaXJlY3RMb2FkU3BsYXRCdWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZFByb21pc2UucmVzb2x2ZShzdGFuZGFyZExvYWRVbmNvbXByZXNzZWRTcGxhdEFycmF5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIG9uUHJvZ3Jlc3MocGVyY2VudCwgcGVyY2VudExhYmVsLCBMb2FkZXJTdGF0dXMuRG93bmxvYWRpbmcpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChvblByb2dyZXNzKSBvblByb2dyZXNzKDAsICcwJScsIExvYWRlclN0YXR1cy5Eb3dubG9hZGluZyk7XHJcbiAgICAgICAgcmV0dXJuIGZldGNoV2l0aFByb2dyZXNzKGZpbGVOYW1lLCBsb2NhbE9uUHJvZ3Jlc3MsIGZhbHNlLCBoZWFkZXJzKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIG9uUHJvZ3Jlc3MoMCwgJzAlJywgTG9hZGVyU3RhdHVzLlByb2Nlc3NpbmcpO1xyXG4gICAgICAgICAgICByZXR1cm4gbG9hZFByb21pc2UucHJvbWlzZS50aGVuKChzcGxhdERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChvblByb2dyZXNzKSBvblByb2dyZXNzKDEwMCwgJzEwMCUnLCBMb2FkZXJTdGF0dXMuRG9uZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxMb2FkVHlwZSA9PT0gSW50ZXJuYWxMb2FkVHlwZS5Eb3dubG9hZEJlZm9yZVByb2Nlc3NpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaHVua0RhdGFzID0gY2h1bmtzLm1hcCgoY2h1bmspID0+IGNodW5rLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQmxvYihjaHVua0RhdGFzKS5hcnJheUJ1ZmZlcigpLnRoZW4oKHBseUZpbGVEYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQbHlMb2FkZXIubG9hZEZyb21GaWxlRGF0YShwbHlGaWxlRGF0YSwgbWluaW11bUFscGhhLCBjb21wcmVzc2lvbkxldmVsLCBvcHRpbWl6ZVNwbGF0RGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dFNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSwgc2VjdGlvblNpemUsIHNjZW5lQ2VudGVyLCBibG9ja1NpemUsIGJ1Y2tldFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnRlcm5hbExvYWRUeXBlID09PSBJbnRlcm5hbExvYWRUeXBlLkRpcmVjdFRvU3BsYXRCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BsYXREYXRhO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVsYXllZEV4ZWN1dGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxpemUkMShzcGxhdERhdGEsIG9wdGltaXplU3BsYXREYXRhLCBtaW5pbXVtQWxwaGEsIGNvbXByZXNzaW9uTGV2ZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uU2l6ZSwgc2NlbmVDZW50ZXIsIGJsb2NrU2l6ZSwgYnVja2V0U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBsb2FkRnJvbUZpbGVEYXRhKHBseUZpbGVEYXRhLCBtaW5pbXVtQWxwaGEsIGNvbXByZXNzaW9uTGV2ZWwsIG9wdGltaXplU3BsYXREYXRhLCBvdXRTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUgPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvblNpemUsIHNjZW5lQ2VudGVyLCBibG9ja1NpemUsIGJ1Y2tldFNpemUpIHtcclxuICAgICAgICByZXR1cm4gZGVsYXllZEV4ZWN1dGUoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gUGx5UGFyc2VyLnBhcnNlVG9VbmNvbXByZXNzZWRTcGxhdEFycmF5KHBseUZpbGVEYXRhLCBvdXRTcGhlcmljYWxIYXJtb25pY3NEZWdyZWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnRoZW4oKHNwbGF0QXJyYXkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsaXplJDEoc3BsYXRBcnJheSwgb3B0aW1pemVTcGxhdERhdGEsIG1pbmltdW1BbHBoYSwgY29tcHJlc3Npb25MZXZlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25TaXplLCBzY2VuZUNlbnRlciwgYmxvY2tTaXplLCBidWNrZXRTaXplKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsIi8qKlxyXG4gKiBSYXlcclxuICogXHJcbiAqIERlcml2ZWQgZnJvbSBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKiBcclxuICogVGhpcyBmaWxlIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gdGhlIG9yaWdpbmFsLlxyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuXHJcbmNvbnN0IFZlY3RvclJpZ2h0ID0gbmV3IFRIUkVFLlZlY3RvcjMoMSwgMCwgMCk7XHJcbmNvbnN0IFZlY3RvclVwID0gbmV3IFRIUkVFLlZlY3RvcjMoMCwgMSwgMCk7XHJcbmNvbnN0IFZlY3RvckJhY2t3YXJkID0gbmV3IFRIUkVFLlZlY3RvcjMoMCwgMCwgMSk7XHJcblxyXG5leHBvcnQgY2xhc3MgUmF5IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihvcmlnaW4gPSBuZXcgVEhSRUUuVmVjdG9yMygpLCBkaXJlY3Rpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpKSB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW4gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgICAgICB0aGlzLnNldFBhcmFtZXRlcnMob3JpZ2luLCBkaXJlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBhcmFtZXRlcnMob3JpZ2luLCBkaXJlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLm9yaWdpbi5jb3B5KG9yaWdpbik7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24uY29weShkaXJlY3Rpb24pLm5vcm1hbGl6ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGJveENvbnRhaW5zUG9pbnQoYm94LCBwb2ludCwgZXBzaWxvbikge1xyXG4gICAgICAgIHJldHVybiBwb2ludC54IDwgYm94Lm1pbi54IC0gZXBzaWxvbiB8fCBwb2ludC54ID4gYm94Lm1heC54ICsgZXBzaWxvbiB8fFxyXG4gICAgICAgICAgICAgICBwb2ludC55IDwgYm94Lm1pbi55IC0gZXBzaWxvbiB8fCBwb2ludC55ID4gYm94Lm1heC55ICsgZXBzaWxvbiB8fFxyXG4gICAgICAgICAgICAgICBwb2ludC56IDwgYm94Lm1pbi56IC0gZXBzaWxvbiB8fCBwb2ludC56ID4gYm94Lm1heC56ICsgZXBzaWxvbiA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcnNlY3RCb3ggPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgY29uc3QgcGxhbmVJbnRlcnNlY3Rpb25Qb2ludCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgICAgICAgY29uc3QgcGxhbmVJbnRlcnNlY3Rpb25Qb2ludEFycmF5ID0gW107XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luQXJyYXkgPSBbXTtcclxuICAgICAgICBjb25zdCBkaXJlY3Rpb25BcnJheSA9IFtdO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oYm94LCBvdXRIaXQpIHtcclxuXHJcbiAgICAgICAgICAgIG9yaWdpbkFycmF5WzBdID0gdGhpcy5vcmlnaW4ueDtcclxuICAgICAgICAgICAgb3JpZ2luQXJyYXlbMV0gPSB0aGlzLm9yaWdpbi55O1xyXG4gICAgICAgICAgICBvcmlnaW5BcnJheVsyXSA9IHRoaXMub3JpZ2luLno7XHJcbiAgICAgICAgICAgIGRpcmVjdGlvbkFycmF5WzBdID0gdGhpcy5kaXJlY3Rpb24ueDtcclxuICAgICAgICAgICAgZGlyZWN0aW9uQXJyYXlbMV0gPSB0aGlzLmRpcmVjdGlvbi55O1xyXG4gICAgICAgICAgICBkaXJlY3Rpb25BcnJheVsyXSA9IHRoaXMuZGlyZWN0aW9uLno7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ib3hDb250YWluc1BvaW50KGJveCwgdGhpcy5vcmlnaW4sIDAuMDAwMSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvdXRIaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRIaXQub3JpZ2luLmNvcHkodGhpcy5vcmlnaW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIG91dEhpdC5ub3JtYWwuc2V0KDAsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgIG91dEhpdC5kaXN0YW5jZSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uQXJyYXlbaV0gPT0gMC4wKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaXROb3JtYWwgPSBpID09IDAgPyBWZWN0b3JSaWdodCA6IGkgPT0gMSA/IFZlY3RvclVwIDogVmVjdG9yQmFja3dhcmQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyZW1lVmVjID0gZGlyZWN0aW9uQXJyYXlbaV0gPCAwID8gYm94Lm1heCA6IGJveC5taW47XHJcbiAgICAgICAgICAgICAgICBsZXQgbXVsdGlwbGllciA9IC1NYXRoLnNpZ24oZGlyZWN0aW9uQXJyYXlbaV0pO1xyXG4gICAgICAgICAgICAgICAgcGxhbmVJbnRlcnNlY3Rpb25Qb2ludEFycmF5WzBdID0gaSA9PSAwID8gZXh0cmVtZVZlYy54IDogaSA9PSAxID8gZXh0cmVtZVZlYy55IDogZXh0cmVtZVZlYy56O1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvU2lkZSA9IHBsYW5lSW50ZXJzZWN0aW9uUG9pbnRBcnJheVswXSAtIG9yaWdpbkFycmF5W2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0b1NpZGUgKiBtdWx0aXBsaWVyIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkeDEgPSAoaSArIDEpICUgMztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZHgyID0gKGkgKyAyKSAlIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgcGxhbmVJbnRlcnNlY3Rpb25Qb2ludEFycmF5WzJdID0gZGlyZWN0aW9uQXJyYXlbaWR4MV0gLyBkaXJlY3Rpb25BcnJheVtpXSAqIHRvU2lkZSArIG9yaWdpbkFycmF5W2lkeDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIHBsYW5lSW50ZXJzZWN0aW9uUG9pbnRBcnJheVsxXSA9IGRpcmVjdGlvbkFycmF5W2lkeDJdIC8gZGlyZWN0aW9uQXJyYXlbaV0gKiB0b1NpZGUgKyBvcmlnaW5BcnJheVtpZHgyXTtcclxuICAgICAgICAgICAgICAgICAgICBwbGFuZUludGVyc2VjdGlvblBvaW50LnNldChwbGFuZUludGVyc2VjdGlvblBvaW50QXJyYXlbaV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmVJbnRlcnNlY3Rpb25Qb2ludEFycmF5W2lkeDJdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lSW50ZXJzZWN0aW9uUG9pbnRBcnJheVtpZHgxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYm94Q29udGFpbnNQb2ludChib3gsIHBsYW5lSW50ZXJzZWN0aW9uUG9pbnQsIDAuMDAwMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG91dEhpdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0SGl0Lm9yaWdpbi5jb3B5KHBsYW5lSW50ZXJzZWN0aW9uUG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0SGl0Lm5vcm1hbC5jb3B5KGhpdE5vcm1hbCkubXVsdGlwbHlTY2FsYXIobXVsdGlwbGllcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRIaXQuZGlzdGFuY2UgPSBwbGFuZUludGVyc2VjdGlvblBvaW50LnN1Yih0aGlzLm9yaWdpbikubGVuZ3RoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB9KCk7XHJcblxyXG4gICAgaW50ZXJzZWN0U3BoZXJlID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHRvU3BoZXJlQ2VudGVyVmVjID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNlbnRlciwgcmFkaXVzLCBvdXRIaXQpIHtcclxuICAgICAgICAgICAgdG9TcGhlcmVDZW50ZXJWZWMuY29weShjZW50ZXIpLnN1Yih0aGlzLm9yaWdpbik7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvQ2xvc2VzdEFwcHJvYWNoID0gdG9TcGhlcmVDZW50ZXJWZWMuZG90KHRoaXMuZGlyZWN0aW9uKTtcclxuICAgICAgICAgICAgY29uc3QgdG9DbG9zZXN0QXBwcm9hY2hTcSA9IHRvQ2xvc2VzdEFwcHJvYWNoICogdG9DbG9zZXN0QXBwcm9hY2g7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvU3BoZXJlQ2VudGVyU3EgPSB0b1NwaGVyZUNlbnRlclZlYy5kb3QodG9TcGhlcmVDZW50ZXJWZWMpO1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmU3EgPSB0b1NwaGVyZUNlbnRlclNxIC0gdG9DbG9zZXN0QXBwcm9hY2hTcTtcclxuICAgICAgICAgICAgY29uc3QgcmFkaXVzU3EgPSByYWRpdXMgKiByYWRpdXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGlmZlNxID4gcmFkaXVzU3EpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRoYyA9IE1hdGguc3FydChyYWRpdXNTcSAtIGRpZmZTcSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHQwID0gdG9DbG9zZXN0QXBwcm9hY2ggLSB0aGM7XHJcbiAgICAgICAgICAgIGNvbnN0IHQxID0gdG9DbG9zZXN0QXBwcm9hY2ggKyB0aGM7XHJcblxyXG4gICAgICAgICAgICBpZiAodDEgPCAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCB0ID0gdDAgPCAwID8gdDEgOiB0MDtcclxuXHJcbiAgICAgICAgICAgIGlmIChvdXRIaXQpIHtcclxuICAgICAgICAgICAgICAgIG91dEhpdC5vcmlnaW4uY29weSh0aGlzLm9yaWdpbikuYWRkU2NhbGVkVmVjdG9yKHRoaXMuZGlyZWN0aW9uLCB0KTtcclxuICAgICAgICAgICAgICAgIG91dEhpdC5ub3JtYWwuY29weShvdXRIaXQub3JpZ2luKS5zdWIoY2VudGVyKS5ub3JtYWxpemUoKTtcclxuICAgICAgICAgICAgICAgIG91dEhpdC5kaXN0YW5jZSA9IHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB9KCk7XHJcbn1cclxuIiwiLyoqXHJcbiAqIEhpdFxyXG4gKiBcclxuICogRGVyaXZlZCBmcm9tIEBta2tlbGxvZ2cvZ2F1c3NpYW4tc3BsYXRzLTNkIChNSVQgTGljZW5zZSlcclxuICogaHR0cHM6Ly9naXRodWIuY29tL21ra2VsbG9nZy9HYXVzc2lhblNwbGF0czNEXHJcbiAqIFxyXG4gKiBUaGlzIGZpbGUgaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwuXHJcbiAqL1xyXG5cclxuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEhpdCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW4gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gICAgICAgIHRoaXMubm9ybWFsID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlID0gMDtcclxuICAgICAgICB0aGlzLnNwbGF0SW5kZXggPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHNldChvcmlnaW4sIG5vcm1hbCwgZGlzdGFuY2UsIHNwbGF0SW5kZXgpIHtcclxuICAgICAgICB0aGlzLm9yaWdpbi5jb3B5KG9yaWdpbik7XHJcbiAgICAgICAgdGhpcy5ub3JtYWwuY29weShub3JtYWwpO1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB0aGlzLnNwbGF0SW5kZXggPSBzcGxhdEluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIGNsb25lKCkge1xyXG4gICAgICAgIGNvbnN0IGhpdENsb25lID0gbmV3IEhpdCgpO1xyXG4gICAgICAgIGhpdENsb25lLm9yaWdpbi5jb3B5KHRoaXMub3JpZ2luKTtcclxuICAgICAgICBoaXRDbG9uZS5ub3JtYWwuY29weSh0aGlzLm5vcm1hbCk7XHJcbiAgICAgICAgaGl0Q2xvbmUuZGlzdGFuY2UgPSB0aGlzLmRpc3RhbmNlO1xyXG4gICAgICAgIGhpdENsb25lLnNwbGF0SW5kZXggPSB0aGlzLnNwbGF0SW5kZXg7XHJcbiAgICAgICAgcmV0dXJuIGhpdENsb25lO1xyXG4gICAgfVxyXG5cclxufVxyXG4iLCIvKipcclxuICogUmF5Y2FzdGVyXHJcbiAqIFxyXG4gKiBEZXJpdmVkIGZyb20gQG1ra2VsbG9nZy9nYXVzc2lhbi1zcGxhdHMtM2QgKE1JVCBMaWNlbnNlKVxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWtrZWxsb2dnL0dhdXNzaWFuU3BsYXRzM0RcclxuICogXHJcbiAqIEltcG9ydCBwYXRocyBhZGp1c3RlZCBmb3IgZ3NwbGF0LWZsYW1lLWF2YXRhciBwYWNrYWdlIHN0cnVjdHVyZS5cclxuICovXHJcblxyXG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7IFJheSB9IGZyb20gJy4vUmF5LmpzJztcclxuaW1wb3J0IHsgSGl0IH0gZnJvbSAnLi9IaXQuanMnO1xyXG5pbXBvcnQgeyBTcGxhdFJlbmRlck1vZGUgfSBmcm9tICcuLi9lbnVtcy9pbmRleC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmF5Y2FzdGVyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIGRpcmVjdGlvbiwgcmF5Y2FzdEFnYWluc3RUcnVlU3BsYXRFbGxpcHNvaWQgPSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMucmF5ID0gbmV3IFJheShvcmlnaW4sIGRpcmVjdGlvbik7XHJcbiAgICAgICAgdGhpcy5yYXljYXN0QWdhaW5zdFRydWVTcGxhdEVsbGlwc29pZCA9IHJheWNhc3RBZ2FpbnN0VHJ1ZVNwbGF0RWxsaXBzb2lkO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEZyb21DYW1lcmFBbmRTY3JlZW5Qb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICBjb25zdCBuZGNDb29yZHMgPSBuZXcgVEhSRUUuVmVjdG9yMigpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oY2FtZXJhLCBzY3JlZW5Qb3NpdGlvbiwgc2NyZWVuRGltZW5zaW9ucykge1xyXG4gICAgICAgICAgICBuZGNDb29yZHMueCA9IHNjcmVlblBvc2l0aW9uLnggLyBzY3JlZW5EaW1lbnNpb25zLnggKiAyLjAgLSAxLjA7XHJcbiAgICAgICAgICAgIG5kY0Nvb3Jkcy55ID0gKHNjcmVlbkRpbWVuc2lvbnMueSAtIHNjcmVlblBvc2l0aW9uLnkpIC8gc2NyZWVuRGltZW5zaW9ucy55ICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICBpZiAoY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmF5Lm9yaWdpbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmF5LmRpcmVjdGlvbi5zZXQobmRjQ29vcmRzLngsIG5kY0Nvb3Jkcy55LCAwLjUgKS51bnByb2plY3QoY2FtZXJhKS5zdWIodGhpcy5yYXkub3JpZ2luKS5ub3JtYWxpemUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhbWVyYS5pc09ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yYXkub3JpZ2luLnNldChuZGNDb29yZHMueCwgbmRjQ29vcmRzLnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbWVyYS5uZWFyICsgY2FtZXJhLmZhcikgLyAoY2FtZXJhLm5lYXIgLSBjYW1lcmEuZmFyKSkudW5wcm9qZWN0KGNhbWVyYSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJheS5kaXJlY3Rpb24uc2V0KDAsIDAsIC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSYXljYXN0ZXI6OnNldEZyb21DYW1lcmFBbmRTY3JlZW5Qb3NpdGlvbigpIC0+IFVuc3VwcG9ydGVkIGNhbWVyYSB0eXBlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgIH0oKTtcclxuXHJcbiAgICBpbnRlcnNlY3RTcGxhdE1lc2ggPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgY29uc3QgdG9Mb2NhbCA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XHJcbiAgICAgICAgY29uc3QgZnJvbUxvY2FsID0gbmV3IFRIUkVFLk1hdHJpeDQoKTtcclxuICAgICAgICBjb25zdCBzY2VuZVRyYW5zZm9ybSA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XHJcbiAgICAgICAgY29uc3QgbG9jYWxSYXkgPSBuZXcgUmF5KCk7XHJcbiAgICAgICAgY29uc3QgdGVtcFBvaW50ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNwbGF0TWVzaCwgb3V0SGl0cyA9IFtdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGF0VHJlZSA9IHNwbGF0TWVzaC5nZXRTcGxhdFRyZWUoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghc3BsYXRUcmVlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHNwbGF0VHJlZS5zdWJUcmVlcy5sZW5ndGg7IHMrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViVHJlZSA9IHNwbGF0VHJlZS5zdWJUcmVlc1tzXTtcclxuXHJcbiAgICAgICAgICAgICAgICBmcm9tTG9jYWwuY29weShzcGxhdE1lc2gubWF0cml4V29ybGQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNwbGF0TWVzaC5keW5hbWljTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNwbGF0TWVzaC5nZXRTY2VuZVRyYW5zZm9ybShzLCBzY2VuZVRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbUxvY2FsLm11bHRpcGx5KHNjZW5lVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRvTG9jYWwuY29weShmcm9tTG9jYWwpLmludmVydCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxvY2FsUmF5Lm9yaWdpbi5jb3B5KHRoaXMucmF5Lm9yaWdpbikuYXBwbHlNYXRyaXg0KHRvTG9jYWwpO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxSYXkuZGlyZWN0aW9uLmNvcHkodGhpcy5yYXkub3JpZ2luKS5hZGQodGhpcy5yYXkuZGlyZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGxvY2FsUmF5LmRpcmVjdGlvbi5hcHBseU1hdHJpeDQodG9Mb2NhbCkuc3ViKGxvY2FsUmF5Lm9yaWdpbikubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0SGl0c0ZvclN1YlRyZWUgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmIChzdWJUcmVlLnJvb3ROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXN0UmF5QXRTcGxhdFRyZWVOb2RlKGxvY2FsUmF5LCBzcGxhdFRyZWUsIHN1YlRyZWUucm9vdE5vZGUsIG91dEhpdHNGb3JTdWJUcmVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBvdXRIaXRzRm9yU3ViVHJlZS5mb3JFYWNoKChoaXQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBoaXQub3JpZ2luLmFwcGx5TWF0cml4NChmcm9tTG9jYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhpdC5ub3JtYWwuYXBwbHlNYXRyaXg0KGZyb21Mb2NhbCkubm9ybWFsaXplKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaGl0LmRpc3RhbmNlID0gdGVtcFBvaW50LmNvcHkoaGl0Lm9yaWdpbikuc3ViKHRoaXMucmF5Lm9yaWdpbikubGVuZ3RoKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBvdXRIaXRzLnB1c2goLi4ub3V0SGl0c0ZvclN1YlRyZWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvdXRIaXRzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhLmRpc3RhbmNlID4gYi5kaXN0YW5jZSkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0SGl0cztcclxuICAgICAgICB9O1xyXG5cclxuICAgIH0oKTtcclxuXHJcbiAgICBjYXN0UmF5QXRTcGxhdFRyZWVOb2RlID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHRlbXBDb2xvciA9IG5ldyBUSFJFRS5WZWN0b3I0KCk7XHJcbiAgICAgICAgY29uc3QgdGVtcENlbnRlciA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgICAgICAgY29uc3QgdGVtcFNjYWxlID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgICAgICBjb25zdCB0ZW1wUm90YXRpb24gPSBuZXcgVEhSRUUuUXVhdGVybmlvbigpO1xyXG4gICAgICAgIGNvbnN0IHRlbXBIaXQgPSBuZXcgSGl0KCk7XHJcbiAgICAgICAgY29uc3Qgc2NhbGVFcHNpbG9uID0gMC4wMDAwMDAxO1xyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW4gPSBuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAwKTtcclxuICAgICAgICBjb25zdCB1bmlmb3JtU2NhbGVNYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpO1xyXG4gICAgICAgIGNvbnN0IHNjYWxlTWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQoKTtcclxuICAgICAgICBjb25zdCByb3RhdGlvbk1hdHJpeCA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XHJcbiAgICAgICAgY29uc3QgdG9TcGhlcmVTcGFjZSA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XHJcbiAgICAgICAgY29uc3QgZnJvbVNwaGVyZVNwYWNlID0gbmV3IFRIUkVFLk1hdHJpeDQoKTtcclxuICAgICAgICBjb25zdCB0ZW1wUmF5ID0gbmV3IFJheSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24ocmF5LCBzcGxhdFRyZWUsIG5vZGUsIG91dEhpdHMgPSBbXSkge1xyXG4gICAgICAgICAgICBpZiAoIXJheS5pbnRlcnNlY3RCb3gobm9kZS5ib3VuZGluZ0JveCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobm9kZS5kYXRhICYmIG5vZGUuZGF0YS5pbmRleGVzICYmIG5vZGUuZGF0YS5pbmRleGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5kYXRhLmluZGV4ZXMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BsYXRHbG9iYWxJbmRleCA9IG5vZGUuZGF0YS5pbmRleGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwbGF0U2NlbmVJbmRleCA9IHNwbGF0VHJlZS5zcGxhdE1lc2guZ2V0U2NlbmVJbmRleEZvclNwbGF0KHNwbGF0R2xvYmFsSW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwbGF0U2NlbmUgPSBzcGxhdFRyZWUuc3BsYXRNZXNoLmdldFNjZW5lKHNwbGF0U2NlbmVJbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGxhdFNjZW5lLnZpc2libGUpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzcGxhdFRyZWUuc3BsYXRNZXNoLmdldFNwbGF0Q29sb3Ioc3BsYXRHbG9iYWxJbmRleCwgdGVtcENvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBzcGxhdFRyZWUuc3BsYXRNZXNoLmdldFNwbGF0Q2VudGVyKHNwbGF0R2xvYmFsSW5kZXgsIHRlbXBDZW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNwbGF0VHJlZS5zcGxhdE1lc2guZ2V0U3BsYXRTY2FsZUFuZFJvdGF0aW9uKHNwbGF0R2xvYmFsSW5kZXgsIHRlbXBTY2FsZSwgdGVtcFJvdGF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBTY2FsZS54IDw9IHNjYWxlRXBzaWxvbiB8fCB0ZW1wU2NhbGUueSA8PSBzY2FsZUVwc2lsb24gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BsYXRUcmVlLnNwbGF0TWVzaC5zcGxhdFJlbmRlck1vZGUgPT09IFNwbGF0UmVuZGVyTW9kZS5UaHJlZUQgJiYgdGVtcFNjYWxlLnogPD0gc2NhbGVFcHNpbG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJheWNhc3RBZ2FpbnN0VHJ1ZVNwbGF0RWxsaXBzb2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByYWRpdXMgPSAodGVtcFNjYWxlLnggKyB0ZW1wU2NhbGUueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb21wb25lbnRDb3VudCA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGxhdFRyZWUuc3BsYXRNZXNoLnNwbGF0UmVuZGVyTW9kZSA9PT0gU3BsYXRSZW5kZXJNb2RlLlRocmVlRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzICs9IHRlbXBTY2FsZS56O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50Q291bnQgPSAzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1cyAvIGNvbXBvbmVudENvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmF5LmludGVyc2VjdFNwaGVyZSh0ZW1wQ2VudGVyLCByYWRpdXMsIHRlbXBIaXQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoaXRDbG9uZSA9IHRlbXBIaXQuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpdENsb25lLnNwbGF0SW5kZXggPSBzcGxhdEdsb2JhbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0SGl0cy5wdXNoKGhpdENsb25lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlTWF0cml4Lm1ha2VTY2FsZSh0ZW1wU2NhbGUueCwgdGVtcFNjYWxlLnksIHRlbXBTY2FsZS56KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb25NYXRyaXgubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odGVtcFJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pZm9ybVNjYWxlID0gTWF0aC5sb2cxMCh0ZW1wQ29sb3IudykgKiAyLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1TY2FsZU1hdHJpeC5tYWtlU2NhbGUodW5pZm9ybVNjYWxlLCB1bmlmb3JtU2NhbGUsIHVuaWZvcm1TY2FsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21TcGhlcmVTcGFjZS5jb3B5KHVuaWZvcm1TY2FsZU1hdHJpeCkubXVsdGlwbHkocm90YXRpb25NYXRyaXgpLm11bHRpcGx5KHNjYWxlTWF0cml4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9TcGhlcmVTcGFjZS5jb3B5KGZyb21TcGhlcmVTcGFjZSkuaW52ZXJ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBSYXkub3JpZ2luLmNvcHkocmF5Lm9yaWdpbikuc3ViKHRlbXBDZW50ZXIpLmFwcGx5TWF0cml4NCh0b1NwaGVyZVNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFJheS5kaXJlY3Rpb24uY29weShyYXkub3JpZ2luKS5hZGQocmF5LmRpcmVjdGlvbikuc3ViKHRlbXBDZW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wUmF5LmRpcmVjdGlvbi5hcHBseU1hdHJpeDQodG9TcGhlcmVTcGFjZSkuc3ViKHRlbXBSYXkub3JpZ2luKS5ub3JtYWxpemUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBSYXkuaW50ZXJzZWN0U3BoZXJlKG9yaWdpbiwgMS4wLCB0ZW1wSGl0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGl0Q2xvbmUgPSB0ZW1wSGl0LmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXRDbG9uZS5zcGxhdEluZGV4ID0gc3BsYXRHbG9iYWxJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpdENsb25lLm9yaWdpbi5hcHBseU1hdHJpeDQoZnJvbVNwaGVyZVNwYWNlKS5hZGQodGVtcENlbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRIaXRzLnB1c2goaGl0Q2xvbmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhc3RSYXlBdFNwbGF0VHJlZU5vZGUocmF5LCBzcGxhdFRyZWUsIGNoaWxkLCBvdXRIaXRzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gb3V0SGl0cztcclxuICAgICAgICB9O1xyXG5cclxuICAgIH0oKTtcclxufVxyXG4iLCIvKipcclxuICogU29ydFdvcmtlclxyXG4gKiBcclxuICogRGVyaXZlZCBmcm9tIEBta2tlbGxvZ2cvZ2F1c3NpYW4tc3BsYXRzLTNkIChNSVQgTGljZW5zZSlcclxuICogaHR0cHM6Ly9naXRodWIuY29tL21ra2VsbG9nZy9HYXVzc2lhblNwbGF0czNEXHJcbiAqIFxyXG4gKiBIYW5kbGVzIEdQVS1iYXNlZCBzb3J0aW5nIHVzaW5nIFdlYkFzc2VtYmx5XHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgaXNJT1MsIGdldElPU1NlbWV2ZXIgfSBmcm9tICcuLi91dGlscy9VdGlsLmpzJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vZW51bXMvRW5naW5lQ29uc3RhbnRzLmpzJztcclxuXHJcbi8vIEJhc2U2NCBlbmNvZGVkIFdBU00gbW9kdWxlcyBmb3Igc29ydGluZ1xyXG5jb25zdCBTb3J0ZXJXYXNtID0gXCJBR0Z6YlFFQUFBQUFEd2hrZVd4cGJtc3VNQUVFQUFBQUFBRWJBMkFBQUdBUWYzOS9mMzkvZjM5L2YzOS9mMzkvZndCZ0FBRi9BaElCQTJWdWRnWnRaVzF2Y25rQ0F3Q0FnQVFEQkFNQUFRSUhWQVFSWDE5M1lYTnRYMk5oYkd4ZlkzUnZjbk1BQUJoZlgzZGhjMjFmWVhCd2JIbGZaR0YwWVY5eVpXeHZZM01BQUF0emIzSjBTVzVrWlhobGN3QUJFMlZ0YzJOeWFYQjBaVzVmZEd4elgybHVhWFFBQWdxV0VBTURBQUVMaWhBRUFYd0Rld04vQTMwZ0N5QUtheUVNQWtBQ1FDQU9CRUFnRFFSQVFmai8vLzhISVFwQmlJQ0FnSGdoRFNBTElBeE5EUU1nRENFQkEwQWdBeUFCUVFKMElnVnFJQUlnQUNBRmFpZ0NBRUVDZEdvb0FnQWlCVFlDQUNBRklBb2dCU0FLU0JzaENpQUZJQTBnQlNBTlNoc2hEU0FCUVFGcUlnRWdDMGNOQUFzTUF3c2dEd1JBSUFzZ0RFME5Ba0YvSVE5QitQLy8vd2NoQ2tHSWdJQ0FlQ0VOSUF3aEFnTkFJQThnQnlBQUlBSkJBblFpRldvb0FnQWlGa0VDZEdvb0FnQWlGRWNFUUFKL0lBWDlDUUk0SUFnZ0ZFRUdkR29pRHYwSkFnd2dEaW9DSFAwZ0FTQU9LZ0lzL1NBQ0lBNHFBano5SUFQOTVnRWdCZjBKQWlnZ0R2MEpBZ2dnRGlvQ0dQMGdBU0FPS2dJby9TQUNJQTRxQWpqOUlBUDk1Z0VnQmYwSkFnZ2dEdjBKQWdBZ0Rpb0NFUDBnQVNBT0tnSWcvU0FDSUE0cUFqRDlJQVA5NWdFZ0JmMEpBaGdnRHYwSkFnUWdEaW9DRlAwZ0FTQU9LZ0lrL1NBQ0lBNHFBalQ5SUFQOTVnSDk1QUg5NUFIOTVBRWlFZjFmL1F3QUFBQUFBRUNQUUFBQUFBQUFRSTlBSWhMOThnRWlFLzBoQVNJUW1VUUFBQUFBQUFEZ1FXTUVRQ0FRcWd3QkMwR0FnSUNBZUFzaERnSi9JQlA5SVFBaUVKbEVBQUFBQUFBQTRFRmpCRUFnRUtvTUFRdEJnSUNBZ0hnTC9SRWdEdjBjQVFKL0lCRWdFZjBOQ0FrS0N3d05EZzhBQUFBQUFBQUFBUDFmSUJMOThnRWlFZjBoQUNJUW1VUUFBQUFBQUFEZ1FXTUVRQ0FRcWd3QkMwR0FnSUNBZUF2OUhBSUNmeUFSL1NFQkloQ1pSQUFBQUFBQUFPQkJZd1JBSUJDcURBRUxRWUNBZ0lCNEMvMGNBeUVTSUJRaER3c2dBeUFWYWlBQklCWkJCSFJxL1FBQUFDQVMvYlVCSWhIOUd3QWdFZjBiQVdvZ0VmMGJBbW9nRWYwYkEyb2lEallDQUNBT0lBb2dDaUFPU2hzaENpQU9JQTBnRFNBT1NCc2hEU0FDUVFGcUlnSWdDMGNOQUFzTUF3c0NmeUFGS2dJSXUvMFVJQVVxQWhpNy9TSUIvUXdBQUFBQUFFQ1BRQUFBQUFBQVFJOUEvZklCSWhIOUlRRWlFSmxFQUFBQUFBQUE0RUZqQkVBZ0VLb01BUXRCZ0lDQWdIZ0xJUTRDZnlBUi9TRUFJaENaUkFBQUFBQUFBT0JCWXdSQUlCQ3FEQUVMUVlDQWdJQjRDeUVDQW44Z0JTb0NLTHRFQUFBQUFBQkFqMENpSWhDWlJBQUFBQUFBQU9CQll3UkFJQkNxREFFTFFZQ0FnSUI0Q3lFRlFmai8vLzhISVFwQmlJQ0FnSGdoRFNBTElBeE5EUUlnQXYwUklBNzlIQUVnQmYwY0FpRVNJQXdoQlFOQUlBTWdCVUVDZENJQ2FpQUJJQUFnQW1vb0FnQkJCSFJxL1FBQUFDQVMvYlVCSWhIOUd3QWdFZjBiQVdvZ0VmMGJBbW9pQWpZQ0FDQUNJQW9nQWlBS1NCc2hDaUFDSUEwZ0FpQU5TaHNoRFNBRlFRRnFJZ1VnQzBjTkFBc01BZ3NnRFFSQVFmai8vLzhISVFwQmlJQ0FnSGdoRFNBTElBeE5EUUlnRENFQkEwQWdBeUFCUVFKMElnVnFBbjhnQWlBQUlBVnFLQUlBUVFKMGFpb0NBTHRFQUFBQUFBQUFzRUNpSWhDWlJBQUFBQUFBQU9CQll3UkFJQkNxREFFTFFZQ0FnSUI0Q3lJT05nSUFJQW9nRGlBS0lBNUlHeUVLSUEwZ0RpQU5JQTVLR3lFTklBRkJBV29pQVNBTFJ3MEFDd3dDQ3lBUFJRUkFJQXNnREUwTkFTQUZLZ0lvSVJjZ0JTb0NHQ0VZSUFVcUFnZ2hHVUg0Ly8vL0J5RUtRWWlBZ0lCNElRMGdEQ0VGQTBBQ2Z5QVhJQUVnQUNBRlFRSjBJZ2RxS0FJQVFRUjBhaUlDS2dJSWxDQVpJQUlxQWdDVUlCZ2dBaW9DQkpTU2tydEVBQUFBQUFBQXNFQ2lJaENaUkFBQUFBQUFBT0JCWXdSQUlCQ3FEQUVMUVlDQWdJQjRDeUVPSUFNZ0Iyb2dEallDQUNBS0lBNGdDaUFPU0JzaENpQU5JQTRnRFNBT1Noc2hEU0FGUVFGcUlnVWdDMGNOQUFzTUFnc2dDeUFNVFEwQVFYOGhEMEg0Ly8vL0J5RUtRWWlBZ0lCNElRMGdEQ0VDQTBBZ0R5QUhJQUFnQWtFQ2RDSVVhaWdDQUVFQ2RDSVZhaWdDQUNJT1J3UkFJQVg5Q1FJNElBZ2dEa0VHZEdvaUQvMEpBZ3dnRHlvQ0hQMGdBU0FQS2dJcy9TQUNJQThxQWp6OUlBUDk1Z0VnQmYwSkFpZ2dELzBKQWdnZ0R5b0NHUDBnQVNBUEtnSW8vU0FDSUE4cUFqajlJQVA5NWdFZ0JmMEpBZ2dnRC8wSkFnQWdEeW9DRVAwZ0FTQVBLZ0lnL1NBQ0lBOHFBakQ5SUFQOTVnRWdCZjBKQWhnZ0QvMEpBZ1FnRHlvQ0ZQMGdBU0FQS2dJay9TQUNJQThxQWpUOUlBUDk1Z0g5NUFIOTVBSDk1QUVoRVNBT0lROExJQU1nRkdvQ2Z5QVIvUjhESUFFZ0ZVRUNkQ0lPUVF4eWFpb0NBSlFnRWYwZkFpQUJJQTVCQ0hKcUtnSUFsQ0FSL1I4QUlBRWdEbW9xQWdDVUlCSDlId0VnQVNBT1FRUnlhaW9DQUpTU2twSzdSQUFBQUFBQUFMQkFvaUlRbVVRQUFBQUFBQURnUVdNRVFDQVFxZ3dCQzBHQWdJQ0FlQXNpRGpZQ0FDQUtJQTRnQ2lBT1NCc2hDaUFOSUE0Z0RTQU9TaHNoRFNBQ1FRRnFJZ0lnQzBjTkFBc01BUXRCaUlDQWdIZ2hEVUg0Ly8vL0J5RUtDeUFMSUF4TEJFQWdDVUVCYTdNZ0RiSWdDcktUbFNFWElBd2hEUU5BQW44Z0Z5QURJQTFCQW5ScUlnRW9BZ0FnQ211eWxDSVlpME1BQUFCUFhRUkFJQmlvREFFTFFZQ0FnSUI0Q3lFT0lBRWdEallDQUNBRUlBNUJBblJxSWdFZ0FTZ0NBRUVCYWpZQ0FDQU5RUUZxSWcwZ0MwY05BQXNMSUFsQkFrOEVRQ0FFS0FJQUlRMUJBU0VLQTBBZ0JDQUtRUUowYWlJQklBRW9BZ0FnRFdvaURUWUNBQ0FLUVFGcUlnb2dDVWNOQUFzTElBeEJBRW9FUUNBTUlRb0RRQ0FHSUFwQkFXc2lBVUVDZENJQ2FpQUFJQUpxS0FJQU5nSUFJQXBCQVVzaEFpQUJJUW9nQWcwQUN3c2dDeUFNU2dSQUlBc2hDZ05BSUFZZ0N5QUVJQU1nQ2tFQmF5SUtRUUowSWdGcUtBSUFRUUowYWlJQ0tBSUFJZ1ZyUVFKMGFpQUFJQUZxS0FJQU5nSUFJQUlnQlVFQmF6WUNBQ0FLSUF4S0RRQUxDd3NFQUVFQUN3PT1cIjtcclxuXHJcbmNvbnN0IFNvcnRlcldhc21Ob1NJTUQgPSBcIkFHRnpiUUVBQUFBQUR3aGtlV3hwYm1zdU1BRUVBQUFBQUFFWEFtQUFBR0FRZjM5L2YzOS9mMzkvZjM5L2YzOS9md0FDRWdFRFpXNTJCbTFsYlc5eWVRSURBSUNBQkFNREFnQUJCejRERVY5ZmQyRnpiVjlqWVd4c1gyTjBiM0p6QUFBWVgxOTNZWE50WDJGd2NHeDVYMlJoZEdGZmNtVnNiMk56QUFBTGMyOXlkRWx1WkdWNFpYTUFBUXFpRHdJQ0FBdWNEd01CZkFkOUJuOGdDeUFLYXlFTUFrQUNRQ0FPQkVBZ0RRUkFRZmovLy84SElRcEJpSUNBZ0hnaERTQUxJQXhORFFNZ0RDRUZBMEFnQXlBRlFRSjBJZ0ZxSUFJZ0FDQUJhaWdDQUVFQ2RHb29BZ0FpQVRZQ0FDQUJJQW9nQVNBS1NCc2hDaUFCSUEwZ0FTQU5TaHNoRFNBRlFRRnFJZ1VnQzBjTkFBc01Bd3NnRHdSQUlBc2dERTBOQWtGL0lROUIrUC8vL3djaENrR0lnSUNBZUNFTklBd2hBZ05BSUE4Z0J5QUFJQUpCQW5RaUdtb29BZ0JCQW5RaUcyb29BZ0FpRGtjRVFBSi9JQVVxQWpnaUVTQUlJQTVCQm5ScUlnOHFBanlVSUFVcUFpZ2lFaUFQS2dJNGxDQUZLZ0lJSWhNZ0R5b0NNSlFnQlNvQ0dDSVVJQThxQWpTVWtwS1N1MFFBQUFBQUFFQ1BRS0lpRUpsRUFBQUFBQUFBNEVGakJFQWdFS29NQVF0QmdJQ0FnSGdMSVJnQ2Z5QVJJQThxQWl5VUlCSWdEeW9DS0pRZ0V5QVBLZ0lnbENBVUlBOHFBaVNVa3BLU3UwUUFBQUFBQUVDUFFLSWlFSmxFQUFBQUFBQUE0RUZqQkVBZ0VLb01BUXRCZ0lDQWdIZ0xJUmtDZnlBUklBOHFBaHlVSUJJZ0R5b0NHSlFnRXlBUEtnSVFsQ0FVSUE4cUFoU1VrcEtTdTBRQUFBQUFBRUNQUUtJaUVKbEVBQUFBQUFBQTRFRmpCRUFnRUtvTUFRdEJnSUNBZ0hnTElSd0NmeUFSSUE4cUFneVVJQklnRHlvQ0NKUWdFeUFQS2dJQWxDQVVJQThxQWdTVWtwS1N1MFFBQUFBQUFFQ1BRS0lpRUpsRUFBQUFBQUFBNEVGakJFQWdFS29NQVF0QmdJQ0FnSGdMSVIwZ0RpRVBDeUFESUJwcUlBRWdHMEVDZEdvaURpZ0NCQ0FjYkNBT0tBSUFJQjFzYWlBT0tBSUlJQmxzYWlBT0tBSU1JQmhzYWlJT05nSUFJQTRnQ2lBS0lBNUtHeUVLSUE0Z0RTQU5JQTVJR3lFTklBSkJBV29pQWlBTFJ3MEFDd3dEQ3dKL0lBVXFBaWk3UkFBQUFBQUFRSTlBb2lJUW1VUUFBQUFBQUFEZ1FXTUVRQ0FRcWd3QkMwR0FnSUNBZUFzaEFnSi9JQVVxQWhpN1JBQUFBQUFBUUk5QW9pSVFtVVFBQUFBQUFBRGdRV01FUUNBUXFnd0JDMEdBZ0lDQWVBc2hCeUFMSUF4TkFuOGdCU29DQ0x0RUFBQUFBQUJBajBDaUloQ1pSQUFBQUFBQUFPQkJZd1JBSUJDcURBRUxRWUNBZ0lCNEN5RVBRZmovLy84SElRcEJpSUNBZ0hnaERRMENJQXdoQlFOQUlBTWdCVUVDZENJSWFpQUJJQUFnQ0dvb0FnQkJCSFJxSWdnb0FnUWdCMndnQ0NnQ0FDQVBiR29nQ0NnQ0NDQUNiR29pQ0RZQ0FDQUlJQW9nQ0NBS1NCc2hDaUFJSUEwZ0NDQU5TaHNoRFNBRlFRRnFJZ1VnQzBjTkFBc01BZ3NnRFFSQVFmai8vLzhISVFwQmlJQ0FnSGdoRFNBTElBeE5EUUlnRENFRkEwQWdBeUFGUVFKMElnRnFBbjhnQWlBQUlBRnFLQUlBUVFKMGFpb0NBTHRFQUFBQUFBQUFzRUNpSWhDWlJBQUFBQUFBQU9CQll3UkFJQkNxREFFTFFZQ0FnSUI0Q3lJT05nSUFJQW9nRGlBS0lBNUlHeUVLSUEwZ0RpQU5JQTVLR3lFTklBVkJBV29pQlNBTFJ3MEFDd3dDQ3lBUFJRUkFJQXNnREUwTkFTQUZLZ0lvSVJFZ0JTb0NHQ0VTSUFVcUFnZ2hFMEg0Ly8vL0J5RUtRWWlBZ0lCNElRMGdEQ0VGQTBBQ2Z5QVJJQUVnQUNBRlFRSjBJZ2RxS0FJQVFRUjBhaUlDS2dJSWxDQVRJQUlxQWdDVUlCSWdBaW9DQkpTU2tydEVBQUFBQUFBQXNFQ2lJaENaUkFBQUFBQUFBT0JCWXdSQUlCQ3FEQUVMUVlDQWdJQjRDeUVPSUFNZ0Iyb2dEallDQUNBS0lBNGdDaUFPU0JzaENpQU5JQTRnRFNBT1Noc2hEU0FGUVFGcUlnVWdDMGNOQUFzTUFnc2dDeUFNVFEwQVFYOGhEMEg0Ly8vL0J5RUtRWWlBZ0lCNElRMGdEQ0VDQTBBZ0R5QUhJQUFnQWtFQ2RDSVlhaWdDQUVFQ2RDSVphaWdDQUNJT1J3UkFJQVVxQWpnaUVTQUlJQTVCQm5ScUlnOHFBanlVSUFVcUFpZ2lFaUFQS2dJNGxDQUZLZ0lJSWhNZ0R5b0NNSlFnQlNvQ0dDSVVJQThxQWpTVWtwS1NJUlVnRVNBUEtnSXNsQ0FTSUE4cUFpaVVJQk1nRHlvQ0lKUWdGQ0FQS2dJa2xKS1NraUVXSUJFZ0R5b0NISlFnRWlBUEtnSVlsQ0FUSUE4cUFoQ1VJQlFnRHlvQ0ZKU1NrcEloRnlBUklBOHFBZ3lVSUJJZ0R5b0NDSlFnRXlBUEtnSUFsQ0FVSUE4cUFnU1VrcEtTSVJFZ0RpRVBDeUFESUJocUFuOGdGU0FCSUJsQkFuUnFJZzRxQWd5VUlCWWdEaW9DQ0pRZ0VTQU9LZ0lBbENBWElBNHFBZ1NVa3BLU3UwUUFBQUFBQUFDd1FLSWlFSmxFQUFBQUFBQUE0RUZqQkVBZ0VLb01BUXRCZ0lDQWdIZ0xJZzQyQWdBZ0NpQU9JQW9nRGtnYklRb2dEU0FPSUEwZ0Rrb2JJUTBnQWtFQmFpSUNJQXRIRFFBTERBRUxRWWlBZ0lCNElRMUIrUC8vL3djaENnc2dDeUFNU3dSQUlBbEJBV3V6SUEyeUlBcXlrNVVoRVNBTUlRMERRQUovSUJFZ0F5QU5RUUowYWlJQktBSUFJQXByc3BRaUVvdERBQUFBVDEwRVFDQVNxQXdCQzBHQWdJQ0FlQXNoRGlBQklBNDJBZ0FnQkNBT1FRSjBhaUlCSUFFb0FnQkJBV28yQWdBZ0RVRUJhaUlOSUF0SERRQUxDeUFKUVFKUEJFQWdCQ2dDQUNFTlFRRWhDZ05BSUFRZ0NrRUNkR29pQVNBQktBSUFJQTFxSWcwMkFnQWdDa0VCYWlJS0lBbEhEUUFMQ3lBTVFRQktCRUFnRENFS0EwQWdCaUFLUVFGcklnRkJBblFpQW1vZ0FDQUNhaWdDQURZQ0FDQUtRUUZMSUFFaENnMEFDd3NnQ3lBTVNnUkFJQXNoQ2dOQUlBWWdDeUFFSUFNZ0NrRUJheUlLUVFKMElnRnFLQUlBUVFKMGFpSUNLQUlBSWdWclFRSjBhaUFBSUFGcUtBSUFOZ0lBSUFJZ0JVRUJhellDQUNBS0lBeEtEUUFMQ3dzPVwiO1xyXG5cclxuY29uc3QgU29ydGVyV2FzbU5vblNoYXJlZCA9IFwiQUdGemJRRUFBQUFBRHdoa2VXeHBibXN1TUFFRUFBQUFBQUVYQW1BQUFHQVFmMzkvZjM5L2YzOS9mMzkvZjM5L2Z3QUNEd0VEWlc1MkJtMWxiVzl5ZVFJQUFBTURBZ0FCQno0REVWOWZkMkZ6YlY5allXeHNYMk4wYjNKekFBQVlYMTkzWVhOdFgyRndjR3g1WDJSaGRHRmZjbVZzYjJOekFBQUxjMjl5ZEVsdVpHVjRaWE1BQVFyckR3SUNBQXZsRHdRQmZBTjdCMzBEZnlBTElBcHJJUXdDUUFKQUlBNEVRQ0FOQkVCQitQLy8vd2NoQ2tHSWdJQ0FlQ0VOSUFzZ0RFME5BeUFNSVFVRFFDQURJQVZCQW5RaUFXb2dBaUFBSUFGcUtBSUFRUUowYWlnQ0FDSUJOZ0lBSUFFZ0NpQUJJQXBJR3lFS0lBRWdEU0FCSUExS0d5RU5JQVZCQVdvaUJTQUxSdzBBQ3d3REN5QVBCRUFnQ3lBTVRRMENRWDhoRDBINC8vLy9CeUVLUVlpQWdJQjRJUTBnRENFQ0EwQWdEeUFISUFBZ0FrRUNkQ0ljYWlnQ0FDSWRRUUowYWlnQ0FDSWJSd1JBQW44Z0JmMEpBamdnQ0NBYlFRWjBhaUlPL1FrQ0RDQU9LZ0ljL1NBQklBNHFBaXo5SUFJZ0Rpb0NQUDBnQS8zbUFTQUYvUWtDS0NBTy9Ra0NDQ0FPS2dJWS9TQUJJQTRxQWlqOUlBSWdEaW9DT1AwZ0EvM21BU0FGL1FrQ0NDQU8vUWtDQUNBT0tnSVEvU0FCSUE0cUFpRDlJQUlnRGlvQ01QMGdBLzNtQVNBRi9Ra0NHQ0FPL1FrQ0JDQU9LZ0lVL1NBQklBNHFBaVQ5SUFJZ0Rpb0NOUDBnQS8zbUFmM2tBZjNrQWYza0FTSVIvVi85REFBQUFBQUFRSTlBQUFBQUFBQkFqMEFpRXYzeUFTSVQvU0VCSWhDWlJBQUFBQUFBQU9CQll3UkFJQkNxREFFTFFZQ0FnSUI0Q3lFT0FuOGdFLzBoQUNJUW1VUUFBQUFBQUFEZ1FXTUVRQ0FRcWd3QkMwR0FnSUNBZUF2OUVTQU8vUndCQW44Z0VTQVIvUTBJQ1FvTERBME9Ed0FCQWdNQUFRSUQvVjhnRXYzeUFTSVIvU0VBSWhDWlJBQUFBQUFBQU9CQll3UkFJQkNxREFFTFFZQ0FnSUI0Qy8wY0FnSi9JQkg5SVFFaUVKbEVBQUFBQUFBQTRFRmpCRUFnRUtvTUFRdEJnSUNBZ0hnTC9Sd0RJUklnR3lFUEN5QURJQnhxSUFFZ0hVRUVkR3I5QUFBQUlCTDl0UUVpRWYwYkFDQVIvUnNCYWlBUi9Sc0NhaUFSL1JzRGFpSU9OZ0lBSUE0Z0NpQUtJQTVLR3lFS0lBNGdEU0FOSUE1SUd5RU5JQUpCQVdvaUFpQUxSdzBBQ3d3REN3Si9JQVVxQWdpNy9SUWdCU29DR0x2OUlnSDlEQUFBQUFBQVFJOUFBQUFBQUFCQWowRDk4Z0VpRWYwaEFTSVFtVVFBQUFBQUFBRGdRV01FUUNBUXFnd0JDMEdBZ0lDQWVBc2hEZ0ovSUJIOUlRQWlFSmxFQUFBQUFBQUE0RUZqQkVBZ0VLb01BUXRCZ0lDQWdIZ0xBbjhnQlNvQ0tMdEVBQUFBQUFCQWowQ2lJaENaUkFBQUFBQUFBT0JCWXdSQUlCQ3FEQUVMUVlDQWdJQjRDeUVGUWZqLy8vOEhJUXBCaUlDQWdIZ2hEU0FMSUF4TkRRTDlFU0FPL1J3QklBWDlIQUloRWlBTUlRVURRQ0FESUFWQkFuUWlBbW9nQVNBQUlBSnFLQUlBUVFSMGF2MEFBQUFnRXYyMUFTSVIvUnNBSUJIOUd3RnFJQkg5R3dKcUlnSTJBZ0FnQWlBS0lBSWdDa2diSVFvZ0FpQU5JQUlnRFVvYklRMGdCVUVCYWlJRklBdEhEUUFMREFJTElBMEVRRUg0Ly8vL0J5RUtRWWlBZ0lCNElRMGdDeUFNVFEwQ0lBd2hCUU5BSUFNZ0JVRUNkQ0lCYWdKL0lBSWdBQ0FCYWlnQ0FFRUNkR29xQWdDN1JBQUFBQUFBQUxCQW9pSVFtVVFBQUFBQUFBRGdRV01FUUNBUXFnd0JDMEdBZ0lDQWVBc2lEallDQUNBS0lBNGdDaUFPU0JzaENpQU5JQTRnRFNBT1Noc2hEU0FGUVFGcUlnVWdDMGNOQUFzTUFnc2dEMFVFUUNBTElBeE5EUUVnQlNvQ0tDRVVJQVVxQWhnaEZTQUZLZ0lJSVJaQitQLy8vd2NoQ2tHSWdJQ0FlQ0VOSUF3aEJRTkFBbjhnRkNBQklBQWdCVUVDZENJSGFpZ0NBRUVFZEdvaUFpb0NDSlFnRmlBQ0tnSUFsQ0FWSUFJcUFnU1VrcEs3UkFBQUFBQUFBTEJBb2lJUW1VUUFBQUFBQUFEZ1FXTUVRQ0FRcWd3QkMwR0FnSUNBZUFzaERpQURJQWRxSUE0MkFnQWdDaUFPSUFvZ0RrZ2JJUW9nRFNBT0lBMGdEa29iSVEwZ0JVRUJhaUlGSUF0SERRQUxEQUlMSUFzZ0RFME5BRUYvSVE5QitQLy8vd2NoQ2tHSWdJQ0FlQ0VOSUF3aEFnTkFJQThnQnlBQUlBSkJBblFpRzJvb0FnQkJBblFpSEdvb0FnQWlEa2NFUUNBRktnSTRJaFFnQ0NBT1FRWjBhaUlQS2dJOGxDQUZLZ0lvSWhVZ0R5b0NPSlFnQlNvQ0NDSVdJQThxQWpDVUlBVXFBaGdpRnlBUEtnSTBsSktTa2lFWUlCUWdEeW9DTEpRZ0ZTQVBLZ0lvbENBV0lBOHFBaUNVSUJjZ0R5b0NKSlNTa3BJaEdTQVVJQThxQWh5VUlCVWdEeW9DR0pRZ0ZpQVBLZ0lRbENBWElBOHFBaFNVa3BLU0lSb2dGQ0FQS2dJTWxDQVZJQThxQWdpVUlCWWdEeW9DQUpRZ0Z5QVBLZ0lFbEpLU2tpRVVJQTRoRHdzZ0F5QWJhZ0ovSUJnZ0FTQWNRUUowYWlJT0tnSU1sQ0FaSUE0cUFnaVVJQlFnRGlvQ0FKUWdHaUFPS2dJRWxKS1NrcnRFQUFBQUFBQUFzRUNpSWhDWlJBQUFBQUFBQU9CQll3UkFJQkNxREFFTFFZQ0FnSUI0Q3lJT05nSUFJQW9nRGlBS0lBNUlHeUVLSUEwZ0RpQU5JQTVLR3lFTklBSkJBV29pQWlBTFJ3MEFDd3dCQzBHSWdJQ0FlQ0VOUWZqLy8vOEhJUW9MSUFzZ0RFc0VRQ0FKUVFGcnN5QU5zaUFLc3BPVklSUWdEQ0VOQTBBQ2Z5QVVJQU1nRFVFQ2RHb2lBU2dDQUNBS2E3S1VJaFdMUXdBQUFFOWRCRUFnRmFnTUFRdEJnSUNBZ0hnTElRNGdBU0FPTmdJQUlBUWdEa0VDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQTFCQVdvaURTQUxSdzBBQ3dzZ0NVRUNUd1JBSUFRb0FnQWhEVUVCSVFvRFFDQUVJQXBCQW5ScUlnRWdBU2dDQUNBTmFpSU5OZ0lBSUFwQkFXb2lDaUFKUncwQUN3c2dERUVBU2dSQUlBd2hDZ05BSUFZZ0NrRUJheUlCUVFKMElnSnFJQUFnQW1vb0FnQTJBZ0FnQ2tFQlN5QUJJUW9OQUFzTElBc2dERW9FUUNBTElRb0RRQ0FHSUFzZ0JDQURJQXBCQVdzaUNrRUNkQ0lCYWlnQ0FFRUNkR29pQWlnQ0FDSUZhMEVDZEdvZ0FDQUJhaWdDQURZQ0FDQUNJQVZCQVdzMkFnQWdDaUFNU2cwQUN3c0xcIjtcclxuXHJcbmNvbnN0IFNvcnRlcldhc21Ob1NJTUROb25TaGFyZWQgPSBcIkFHRnpiUUVBQUFBQUR3aGtlV3hwYm1zdU1BRUVBQUFBQUFFWEFtQUFBR0FRZjM5L2YzOS9mMzkvZjM5L2YzOS9md0FDRHdFRFpXNTJCbTFsYlc5eWVRSUFBQU1EQWdBQkJ6NERFVjlmZDJGemJWOWpZV3hzWDJOMGIzSnpBQUFZWDE5M1lYTnRYMkZ3Y0d4NVgyUmhkR0ZmY21Wc2IyTnpBQUFMYzI5eWRFbHVaR1Y0WlhNQUFRcWlEd0lDQUF1Y0R3TUJmQWQ5Qm44Z0N5QUtheUVNQWtBQ1FDQU9CRUFnRFFSQVFmai8vLzhISVFwQmlJQ0FnSGdoRFNBTElBeE5EUU1nRENFRkEwQWdBeUFGUVFKMElnRnFJQUlnQUNBQmFpZ0NBRUVDZEdvb0FnQWlBVFlDQUNBQklBb2dBU0FLU0JzaENpQUJJQTBnQVNBTlNoc2hEU0FGUVFGcUlnVWdDMGNOQUFzTUF3c2dEd1JBSUFzZ0RFME5Ba0YvSVE5QitQLy8vd2NoQ2tHSWdJQ0FlQ0VOSUF3aEFnTkFJQThnQnlBQUlBSkJBblFpR21vb0FnQkJBblFpRzJvb0FnQWlEa2NFUUFKL0lBVXFBamdpRVNBSUlBNUJCblJxSWc4cUFqeVVJQVVxQWlnaUVpQVBLZ0k0bENBRktnSUlJaE1nRHlvQ01KUWdCU29DR0NJVUlBOHFBalNVa3BLU3UwUUFBQUFBQUVDUFFLSWlFSmxFQUFBQUFBQUE0RUZqQkVBZ0VLb01BUXRCZ0lDQWdIZ0xJUmdDZnlBUklBOHFBaXlVSUJJZ0R5b0NLSlFnRXlBUEtnSWdsQ0FVSUE4cUFpU1VrcEtTdTBRQUFBQUFBRUNQUUtJaUVKbEVBQUFBQUFBQTRFRmpCRUFnRUtvTUFRdEJnSUNBZ0hnTElSa0NmeUFSSUE4cUFoeVVJQklnRHlvQ0dKUWdFeUFQS2dJUWxDQVVJQThxQWhTVWtwS1N1MFFBQUFBQUFFQ1BRS0lpRUpsRUFBQUFBQUFBNEVGakJFQWdFS29NQVF0QmdJQ0FnSGdMSVJ3Q2Z5QVJJQThxQWd5VUlCSWdEeW9DQ0pRZ0V5QVBLZ0lBbENBVUlBOHFBZ1NVa3BLU3UwUUFBQUFBQUVDUFFLSWlFSmxFQUFBQUFBQUE0RUZqQkVBZ0VLb01BUXRCZ0lDQWdIZ0xJUjBnRGlFUEN5QURJQnBxSUFFZ0cwRUNkR29pRGlnQ0JDQWNiQ0FPS0FJQUlCMXNhaUFPS0FJSUlCbHNhaUFPS0FJTUlCaHNhaUlPTmdJQUlBNGdDaUFLSUE1S0d5RUtJQTRnRFNBTklBNUlHeUVOSUFKQkFXb2lBaUFMUncwQUN3d0RDd0ovSUFVcUFpaTdSQUFBQUFBQVFJOUFvaUlRbVVRQUFBQUFBQURnUVdNRVFDQVFxZ3dCQzBHQWdJQ0FlQXNoQWdKL0lBVXFBaGk3UkFBQUFBQUFRSTlBb2lJUW1VUUFBQUFBQUFEZ1FXTUVRQ0FRcWd3QkMwR0FnSUNBZUFzaEJ5QUxJQXhOQW44Z0JTb0NDTHRFQUFBQUFBQkFqMENpSWhDWlJBQUFBQUFBQU9CQll3UkFJQkNxREFFTFFZQ0FnSUI0Q3lFUFFmai8vLzhISVFwQmlJQ0FnSGdoRFEwQ0lBd2hCUU5BSUFNZ0JVRUNkQ0lJYWlBQklBQWdDR29vQWdCQkJIUnFJZ2dvQWdRZ0Iyd2dDQ2dDQUNBUGJHb2dDQ2dDQ0NBQ2JHb2lDRFlDQUNBSUlBb2dDQ0FLU0JzaENpQUlJQTBnQ0NBTlNoc2hEU0FGUVFGcUlnVWdDMGNOQUFzTUFnc2dEUVJBUWZqLy8vOEhJUXBCaUlDQWdIZ2hEU0FMSUF4TkRRSWdEQ0VGQTBBZ0F5QUZRUUowSWdGcUFuOGdBaUFBSUFGcUtBSUFRUUowYWlvQ0FMdEVBQUFBQUFBQXNFQ2lJaENaUkFBQUFBQUFBT0JCWXdSQUlCQ3FEQUVMUVlDQWdJQjRDeUlPTmdJQUlBb2dEaUFLSUE1SUd5RUtJQTBnRGlBTklBNUtHeUVOSUFWQkFXb2lCU0FMUncwQUN3d0NDeUFQUlFSQUlBc2dERTBOQVNBRktnSW9JUkVnQlNvQ0dDRVNJQVVxQWdnaEUwSDQvLy8vQnlFS1FZaUFnSUI0SVEwZ0RDRUZBMEFDZnlBUklBRWdBQ0FGUVFKMElnZHFLQUlBUVFSMGFpSUNLZ0lJbENBVElBSXFBZ0NVSUJJZ0Fpb0NCSlNTa3J0RUFBQUFBQUFBc0VDaUloQ1pSQUFBQUFBQUFPQkJZd1JBSUJDcURBRUxRWUNBZ0lCNEN5RU9JQU1nQjJvZ0RqWUNBQ0FLSUE0Z0NpQU9TQnNoQ2lBTklBNGdEU0FPU2hzaERTQUZRUUZxSWdVZ0MwY05BQXNNQWdzZ0N5QU1UUTBBUVg4aEQwSDQvLy8vQnlFS1FZaUFnSUI0SVEwZ0RDRUNBMEFnRHlBSElBQWdBa0VDZENJWWFpZ0NBRUVDZENJWmFpZ0NBQ0lPUndSQUlBVXFBamdpRVNBSUlBNUJCblJxSWc4cUFqeVVJQVVxQWlnaUVpQVBLZ0k0bENBRktnSUlJaE1nRHlvQ01KUWdCU29DR0NJVUlBOHFBalNVa3BLU0lSVWdFU0FQS2dJc2xDQVNJQThxQWlpVUlCTWdEeW9DSUpRZ0ZDQVBLZ0lrbEpLU2tpRVdJQkVnRHlvQ0hKUWdFaUFQS2dJWWxDQVRJQThxQWhDVUlCUWdEeW9DRkpTU2twSWhGeUFSSUE4cUFneVVJQklnRHlvQ0NKUWdFeUFQS2dJQWxDQVVJQThxQWdTVWtwS1NJUkVnRGlFUEN5QURJQmhxQW44Z0ZTQUJJQmxCQW5ScUlnNHFBZ3lVSUJZZ0Rpb0NDSlFnRVNBT0tnSUFsQ0FYSUE0cUFnU1VrcEtTdTBRQUFBQUFBQUN3UUtJaUVKbEVBQUFBQUFBQTRFRmpCRUFnRUtvTUFRdEJnSUNBZ0hnTElnNDJBZ0FnQ2lBT0lBb2dEa2diSVFvZ0RTQU9JQTBnRGtvYklRMGdBa0VCYWlJQ0lBdEhEUUFMREFFTFFZaUFnSUI0SVExQitQLy8vd2NoQ2dzZ0N5QU1Td1JBSUFsQkFXdXpJQTJ5SUFxeWs1VWhFU0FNSVEwRFFBSi9JQkVnQXlBTlFRSjBhaUlCS0FJQUlBcHJzcFFpRW90REFBQUFUMTBFUUNBU3FBd0JDMEdBZ0lDQWVBc2hEaUFCSUE0MkFnQWdCQ0FPUVFKMGFpSUJJQUVvQWdCQkFXbzJBZ0FnRFVFQmFpSU5JQXRIRFFBTEN5QUpRUUpQQkVBZ0JDZ0NBQ0VOUVFFaENnTkFJQVFnQ2tFQ2RHb2lBU0FCS0FJQUlBMXFJZzAyQWdBZ0NrRUJhaUlLSUFsSERRQUxDeUFNUVFCS0JFQWdEQ0VLQTBBZ0JpQUtRUUZySWdGQkFuUWlBbW9nQUNBQ2FpZ0NBRFlDQUNBS1FRRkxJQUVoQ2cwQUN3c2dDeUFNU2dSQUlBc2hDZ05BSUFZZ0N5QUVJQU1nQ2tFQmF5SUtRUUowSWdGcUtBSUFRUUowYWlJQ0tBSUFJZ1ZyUVFKMGFpQUFJQUZxS0FJQU5nSUFJQUlnQlVFQmF6WUNBQ0FLSUF4S0RRQUxDd3M9XCI7XHJcblxyXG4vKipcclxuICogU29ydCB3b3JrZXIgZnVuY3Rpb24gdGhhdCBydW5zIGluIGEgV2ViIFdvcmtlclxyXG4gKiBIYW5kbGVzIHRoZSBhY3R1YWwgc29ydGluZyBsb2dpYyB1c2luZyBXZWJBc3NlbWJseVxyXG4gKi9cclxuZnVuY3Rpb24gc29ydFdvcmtlcihzZWxmKSB7XHJcblxyXG4gICAgbGV0IHdhc21JbnN0YW5jZTtcclxuICAgIGxldCB3YXNtTWVtb3J5O1xyXG4gICAgbGV0IHVzZVNoYXJlZE1lbW9yeTtcclxuICAgIGxldCBpbnRlZ2VyQmFzZWRTb3J0O1xyXG4gICAgbGV0IGR5bmFtaWNNb2RlO1xyXG4gICAgbGV0IHNwbGF0Q291bnQ7XHJcbiAgICBsZXQgaW5kZXhlc1RvU29ydE9mZnNldDtcclxuICAgIGxldCBzb3J0ZWRJbmRleGVzT2Zmc2V0O1xyXG4gICAgbGV0IHNjZW5lSW5kZXhlc09mZnNldDtcclxuICAgIGxldCB0cmFuc2Zvcm1zT2Zmc2V0O1xyXG4gICAgbGV0IHByZWNvbXB1dGVkRGlzdGFuY2VzT2Zmc2V0O1xyXG4gICAgbGV0IG1hcHBlZERpc3RhbmNlc09mZnNldDtcclxuICAgIGxldCBmcmVxdWVuY2llc09mZnNldDtcclxuICAgIGxldCBjZW50ZXJzT2Zmc2V0O1xyXG4gICAgbGV0IG1vZGVsVmlld1Byb2pPZmZzZXQ7XHJcbiAgICBsZXQgY291bnRzWmVybztcclxuICAgIGxldCBzb3J0ZWRJbmRleGVzT3V0O1xyXG4gICAgbGV0IGRpc3RhbmNlTWFwUmFuZ2U7XHJcbiAgICBsZXQgdXBsb2FkZWRTcGxhdENvdW50O1xyXG4gICAgbGV0IENvbnN0YW50cztcclxuXHJcbiAgICBmdW5jdGlvbiBzb3J0KHNwbGF0U29ydENvdW50LCBzcGxhdFJlbmRlckNvdW50LCBtb2RlbFZpZXdQcm9qLFxyXG4gICAgICAgICAgICAgICAgICB1c2VQcmVjb21wdXRlZERpc3RhbmNlcywgY29weUluZGV4ZXNUb1NvcnQsIGNvcHlQcmVjb21wdXRlZERpc3RhbmNlcywgY29weVRyYW5zZm9ybXMpIHtcclxuICAgICAgICBjb25zdCBzb3J0U3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XHJcblxyXG4gICAgICAgIGlmICghdXNlU2hhcmVkTWVtb3J5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ZXNUb1NvcnQgPSBuZXcgVWludDMyQXJyYXkod2FzbU1lbW9yeSwgaW5kZXhlc1RvU29ydE9mZnNldCwgY29weUluZGV4ZXNUb1NvcnQuYnl0ZUxlbmd0aCAvIENvbnN0YW50cy5CeXRlc1BlckludCk7XHJcbiAgICAgICAgICAgIGluZGV4ZXNUb1NvcnQuc2V0KGNvcHlJbmRleGVzVG9Tb3J0KTtcclxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtcyA9IG5ldyBGbG9hdDMyQXJyYXkod2FzbU1lbW9yeSwgdHJhbnNmb3Jtc09mZnNldCwgY29weVRyYW5zZm9ybXMuYnl0ZUxlbmd0aCAvIENvbnN0YW50cy5CeXRlc1BlckZsb2F0KTtcclxuICAgICAgICAgICAgdHJhbnNmb3Jtcy5zZXQoY29weVRyYW5zZm9ybXMpO1xyXG4gICAgICAgICAgICBpZiAodXNlUHJlY29tcHV0ZWREaXN0YW5jZXMpIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcmVjb21wdXRlZERpc3RhbmNlcztcclxuICAgICAgICAgICAgICAgIGlmIChpbnRlZ2VyQmFzZWRTb3J0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY29tcHV0ZWREaXN0YW5jZXMgPSBuZXcgSW50MzJBcnJheSh3YXNtTWVtb3J5LCBwcmVjb21wdXRlZERpc3RhbmNlc09mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlQcmVjb21wdXRlZERpc3RhbmNlcy5ieXRlTGVuZ3RoIC8gQ29uc3RhbnRzLkJ5dGVzUGVySW50KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY29tcHV0ZWREaXN0YW5jZXMgPSBuZXcgRmxvYXQzMkFycmF5KHdhc21NZW1vcnksIHByZWNvbXB1dGVkRGlzdGFuY2VzT2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5UHJlY29tcHV0ZWREaXN0YW5jZXMuYnl0ZUxlbmd0aCAvIENvbnN0YW50cy5CeXRlc1BlckZsb2F0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHByZWNvbXB1dGVkRGlzdGFuY2VzLnNldChjb3B5UHJlY29tcHV0ZWREaXN0YW5jZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvdW50c1plcm8pIGNvdW50c1plcm8gPSBuZXcgVWludDMyQXJyYXkoZGlzdGFuY2VNYXBSYW5nZSk7XHJcbiAgICAgICAgbmV3IEZsb2F0MzJBcnJheSh3YXNtTWVtb3J5LCBtb2RlbFZpZXdQcm9qT2Zmc2V0LCAxNikuc2V0KG1vZGVsVmlld1Byb2opO1xyXG4gICAgICAgIG5ldyBVaW50MzJBcnJheSh3YXNtTWVtb3J5LCBmcmVxdWVuY2llc09mZnNldCwgZGlzdGFuY2VNYXBSYW5nZSkuc2V0KGNvdW50c1plcm8pO1xyXG4gICAgICAgIHdhc21JbnN0YW5jZS5leHBvcnRzLnNvcnRJbmRleGVzKGluZGV4ZXNUb1NvcnRPZmZzZXQsIGNlbnRlcnNPZmZzZXQsIHByZWNvbXB1dGVkRGlzdGFuY2VzT2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZERpc3RhbmNlc09mZnNldCwgZnJlcXVlbmNpZXNPZmZzZXQsIG1vZGVsVmlld1Byb2pPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkSW5kZXhlc09mZnNldCwgc2NlbmVJbmRleGVzT2Zmc2V0LCB0cmFuc2Zvcm1zT2Zmc2V0LCBkaXN0YW5jZU1hcFJhbmdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGF0U29ydENvdW50LCBzcGxhdFJlbmRlckNvdW50LCBzcGxhdENvdW50LCB1c2VQcmVjb21wdXRlZERpc3RhbmNlcywgaW50ZWdlckJhc2VkU29ydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljTW9kZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNvcnRNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICAnc29ydERvbmUnOiB0cnVlLFxyXG4gICAgICAgICAgICAnc3BsYXRTb3J0Q291bnQnOiBzcGxhdFNvcnRDb3VudCxcclxuICAgICAgICAgICAgJ3NwbGF0UmVuZGVyQ291bnQnOiBzcGxhdFJlbmRlckNvdW50LFxyXG4gICAgICAgICAgICAnc29ydFRpbWUnOiAwXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIXVzZVNoYXJlZE1lbW9yeSkge1xyXG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRJbmRleGVzID0gbmV3IFVpbnQzMkFycmF5KHdhc21NZW1vcnksIHNvcnRlZEluZGV4ZXNPZmZzZXQsIHNwbGF0UmVuZGVyQ291bnQpO1xyXG4gICAgICAgICAgICBpZiAoIXNvcnRlZEluZGV4ZXNPdXQgfHwgc29ydGVkSW5kZXhlc091dC5sZW5ndGggPCBzcGxhdFJlbmRlckNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICBzb3J0ZWRJbmRleGVzT3V0ID0gbmV3IFVpbnQzMkFycmF5KHNwbGF0UmVuZGVyQ291bnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNvcnRlZEluZGV4ZXNPdXQuc2V0KHNvcnRlZEluZGV4ZXMpO1xyXG4gICAgICAgICAgICBzb3J0TWVzc2FnZS5zb3J0ZWRJbmRleGVzID0gc29ydGVkSW5kZXhlc091dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc29ydEVuZFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbiAgICAgICAgc29ydE1lc3NhZ2Uuc29ydFRpbWUgPSBzb3J0RW5kVGltZSAtIHNvcnRTdGFydFRpbWU7XHJcblxyXG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2Uoc29ydE1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGYub25tZXNzYWdlID0gKGUpID0+IHtcclxuICAgICAgICBpZiAoZS5kYXRhLmNlbnRlcnMpIHtcclxuICAgICAgICAgICAgbGV0IGNlbnRlcnMgPSBlLmRhdGEuY2VudGVycztcclxuICAgICAgICAgICAgbGV0IHNjZW5lSW5kZXhlcyA9IGUuZGF0YS5zY2VuZUluZGV4ZXM7XHJcbiAgICAgICAgICAgIGlmIChpbnRlZ2VyQmFzZWRTb3J0KSB7XHJcbiAgICAgICAgICAgICAgICBuZXcgSW50MzJBcnJheSh3YXNtTWVtb3J5LCBjZW50ZXJzT2Zmc2V0ICsgZS5kYXRhLnJhbmdlLmZyb20gKiBDb25zdGFudHMuQnl0ZXNQZXJJbnQgKiA0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhLnJhbmdlLmNvdW50ICogNCkuc2V0KG5ldyBJbnQzMkFycmF5KGNlbnRlcnMpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJyYXkod2FzbU1lbW9yeSwgY2VudGVyc09mZnNldCArIGUuZGF0YS5yYW5nZS5mcm9tICogQ29uc3RhbnRzLkJ5dGVzUGVyRmxvYXQgKiA0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmRhdGEucmFuZ2UuY291bnQgKiA0KS5zZXQobmV3IEZsb2F0MzJBcnJheShjZW50ZXJzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGR5bmFtaWNNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBuZXcgVWludDMyQXJyYXkod2FzbU1lbW9yeSwgc2NlbmVJbmRleGVzT2Zmc2V0ICsgZS5kYXRhLnJhbmdlLmZyb20gKiA0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YS5yYW5nZS5jb3VudCkuc2V0KG5ldyBVaW50MzJBcnJheShzY2VuZUluZGV4ZXMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB1cGxvYWRlZFNwbGF0Q291bnQgPSBlLmRhdGEucmFuZ2UuZnJvbSArIGUuZGF0YS5yYW5nZS5jb3VudDtcclxuICAgICAgICB9IGVsc2UgaWYgKGUuZGF0YS5zb3J0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckNvdW50ID0gTWF0aC5taW4oZS5kYXRhLnNvcnQuc3BsYXRSZW5kZXJDb3VudCB8fCAwLCB1cGxvYWRlZFNwbGF0Q291bnQpO1xyXG4gICAgICAgICAgICBjb25zdCBzb3J0Q291bnQgPSBNYXRoLm1pbihlLmRhdGEuc29ydC5zcGxhdFNvcnRDb3VudCB8fCAwLCB1cGxvYWRlZFNwbGF0Q291bnQpO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VQcmVjb21wdXRlZERpc3RhbmNlcyA9IGUuZGF0YS5zb3J0LnVzZVByZWNvbXB1dGVkRGlzdGFuY2VzO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNvcHlJbmRleGVzVG9Tb3J0O1xyXG4gICAgICAgICAgICBsZXQgY29weVByZWNvbXB1dGVkRGlzdGFuY2VzO1xyXG4gICAgICAgICAgICBsZXQgY29weVRyYW5zZm9ybXM7XHJcbiAgICAgICAgICAgIGlmICghdXNlU2hhcmVkTWVtb3J5KSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5SW5kZXhlc1RvU29ydCA9IGUuZGF0YS5zb3J0LmluZGV4ZXNUb1NvcnQ7XHJcbiAgICAgICAgICAgICAgICBjb3B5VHJhbnNmb3JtcyA9IGUuZGF0YS5zb3J0LnRyYW5zZm9ybXM7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlUHJlY29tcHV0ZWREaXN0YW5jZXMpIGNvcHlQcmVjb21wdXRlZERpc3RhbmNlcyA9IGUuZGF0YS5zb3J0LnByZWNvbXB1dGVkRGlzdGFuY2VzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNvcnQoc29ydENvdW50LCByZW5kZXJDb3VudCwgZS5kYXRhLnNvcnQubW9kZWxWaWV3UHJvaiwgdXNlUHJlY29tcHV0ZWREaXN0YW5jZXMsXHJcbiAgICAgICAgICAgICAgICAgY29weUluZGV4ZXNUb1NvcnQsIGNvcHlQcmVjb21wdXRlZERpc3RhbmNlcywgY29weVRyYW5zZm9ybXMpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZS5kYXRhLmluaXQpIHtcclxuICAgICAgICAgICAgLy8gWWVwLCB0aGlzIGlzIHN1cGVyIGhhY2t5IGFuZCBncm9zcyA6KFxyXG4gICAgICAgICAgICBDb25zdGFudHMgPSBlLmRhdGEuaW5pdC5Db25zdGFudHM7XHJcblxyXG4gICAgICAgICAgICBzcGxhdENvdW50ID0gZS5kYXRhLmluaXQuc3BsYXRDb3VudDtcclxuICAgICAgICAgICAgdXNlU2hhcmVkTWVtb3J5ID0gZS5kYXRhLmluaXQudXNlU2hhcmVkTWVtb3J5O1xyXG4gICAgICAgICAgICBpbnRlZ2VyQmFzZWRTb3J0ID0gZS5kYXRhLmluaXQuaW50ZWdlckJhc2VkU29ydDtcclxuICAgICAgICAgICAgZHluYW1pY01vZGUgPSBlLmRhdGEuaW5pdC5keW5hbWljTW9kZTtcclxuICAgICAgICAgICAgZGlzdGFuY2VNYXBSYW5nZSA9IGUuZGF0YS5pbml0LmRpc3RhbmNlTWFwUmFuZ2U7XHJcbiAgICAgICAgICAgIHVwbG9hZGVkU3BsYXRDb3VudCA9IDA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBDRU5URVJTX0JZVEVTX1BFUl9FTlRSWSA9IGludGVnZXJCYXNlZFNvcnQgPyAoQ29uc3RhbnRzLkJ5dGVzUGVySW50ICogNCkgOiAoQ29uc3RhbnRzLkJ5dGVzUGVyRmxvYXQgKiA0KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNvcnRlcldhc21CeXRlcyA9IG5ldyBVaW50OEFycmF5KGUuZGF0YS5pbml0LnNvcnRlcldhc21CeXRlcyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBtYXRyaXhTaXplID0gMTYgKiBDb25zdGFudHMuQnl0ZXNQZXJGbG9hdDtcclxuICAgICAgICAgICAgY29uc3QgbWVtb3J5UmVxdWlyZWRGb3JJbmRleGVzVG9Tb3J0ID0gc3BsYXRDb3VudCAqIENvbnN0YW50cy5CeXRlc1BlckludDtcclxuICAgICAgICAgICAgY29uc3QgbWVtb3J5UmVxdWlyZWRGb3JDZW50ZXJzID0gc3BsYXRDb3VudCAqIENFTlRFUlNfQllURVNfUEVSX0VOVFJZO1xyXG4gICAgICAgICAgICBjb25zdCBtZW1vcnlSZXF1aXJlZEZvck1vZGVsVmlld1Byb2plY3Rpb25NYXRyaXggPSBtYXRyaXhTaXplO1xyXG4gICAgICAgICAgICBjb25zdCBtZW1vcnlSZXF1aXJlZEZvclByZWNvbXB1dGVkRGlzdGFuY2VzID0gaW50ZWdlckJhc2VkU29ydCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BsYXRDb3VudCAqIENvbnN0YW50cy5CeXRlc1BlckludCkgOiAoc3BsYXRDb3VudCAqIENvbnN0YW50cy5CeXRlc1BlckZsb2F0KTtcclxuICAgICAgICAgICAgY29uc3QgbWVtb3J5UmVxdWlyZWRGb3JNYXBwZWREaXN0YW5jZXMgPSBzcGxhdENvdW50ICogQ29uc3RhbnRzLkJ5dGVzUGVySW50O1xyXG4gICAgICAgICAgICBjb25zdCBtZW1vcnlSZXF1aXJlZEZvclNvcnRlZEluZGV4ZXMgPSBzcGxhdENvdW50ICogQ29uc3RhbnRzLkJ5dGVzUGVySW50O1xyXG4gICAgICAgICAgICBjb25zdCBtZW1vcnlSZXF1aXJlZEZvckludGVybWVkaWF0ZVNvcnRCdWZmZXJzID0gaW50ZWdlckJhc2VkU29ydCA/IChkaXN0YW5jZU1hcFJhbmdlICogQ29uc3RhbnRzLkJ5dGVzUGVySW50ICogMikgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXN0YW5jZU1hcFJhbmdlICogQ29uc3RhbnRzLkJ5dGVzUGVyRmxvYXQgKiAyKTtcclxuICAgICAgICAgICAgY29uc3QgbWVtb3J5UmVxdWlyZWRmb3JUcmFuc2Zvcm1JbmRleGVzID0gZHluYW1pY01vZGUgPyAoc3BsYXRDb3VudCAqIENvbnN0YW50cy5CeXRlc1BlckludCkgOiAwO1xyXG4gICAgICAgICAgICBjb25zdCBtZW1vcnlSZXF1aXJlZGZvclRyYW5zZm9ybXMgPSBkeW5hbWljTW9kZSA/IChDb25zdGFudHMuTWF4U2NlbmVzICogbWF0cml4U2l6ZSkgOiAwO1xyXG4gICAgICAgICAgICBjb25zdCBleHRyYU1lbW9yeSA9IENvbnN0YW50cy5NZW1vcnlQYWdlU2l6ZSAqIDMyO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdG90YWxSZXF1aXJlZE1lbW9yeSA9IG1lbW9yeVJlcXVpcmVkRm9ySW5kZXhlc1RvU29ydCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlSZXF1aXJlZEZvckNlbnRlcnMgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5UmVxdWlyZWRGb3JNb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeVJlcXVpcmVkRm9yUHJlY29tcHV0ZWREaXN0YW5jZXMgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5UmVxdWlyZWRGb3JNYXBwZWREaXN0YW5jZXMgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5UmVxdWlyZWRGb3JJbnRlcm1lZGlhdGVTb3J0QnVmZmVycyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlSZXF1aXJlZEZvclNvcnRlZEluZGV4ZXMgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5UmVxdWlyZWRmb3JUcmFuc2Zvcm1JbmRleGVzICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeVJlcXVpcmVkZm9yVHJhbnNmb3JtcyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYU1lbW9yeTtcclxuICAgICAgICAgICAgY29uc3QgdG90YWxQYWdlc1JlcXVpcmVkID0gTWF0aC5mbG9vcih0b3RhbFJlcXVpcmVkTWVtb3J5IC8gQ29uc3RhbnRzLk1lbW9yeVBhZ2VTaXplICkgKyAxO1xyXG4gICAgICAgICAgICBjb25zdCBzb3J0ZXJXYXNtSW1wb3J0ID0ge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlOiB7fSxcclxuICAgICAgICAgICAgICAgIGVudjoge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lbW9yeTogbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWw6IHRvdGFsUGFnZXNSZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogdG90YWxQYWdlc1JlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFdlYkFzc2VtYmx5LmNvbXBpbGUoc29ydGVyV2FzbUJ5dGVzKVxyXG4gICAgICAgICAgICAudGhlbigod2FzbU1vZHVsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHdhc21Nb2R1bGUsIHNvcnRlcldhc21JbXBvcnQpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoaW5zdGFuY2UpID0+IHtcclxuICAgICAgICAgICAgICAgIHdhc21JbnN0YW5jZSA9IGluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgaW5kZXhlc1RvU29ydE9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXJzT2Zmc2V0ID0gaW5kZXhlc1RvU29ydE9mZnNldCArIG1lbW9yeVJlcXVpcmVkRm9ySW5kZXhlc1RvU29ydDtcclxuICAgICAgICAgICAgICAgIG1vZGVsVmlld1Byb2pPZmZzZXQgPSBjZW50ZXJzT2Zmc2V0ICsgbWVtb3J5UmVxdWlyZWRGb3JDZW50ZXJzO1xyXG4gICAgICAgICAgICAgICAgcHJlY29tcHV0ZWREaXN0YW5jZXNPZmZzZXQgPSBtb2RlbFZpZXdQcm9qT2Zmc2V0ICsgbWVtb3J5UmVxdWlyZWRGb3JNb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4O1xyXG4gICAgICAgICAgICAgICAgbWFwcGVkRGlzdGFuY2VzT2Zmc2V0ID0gcHJlY29tcHV0ZWREaXN0YW5jZXNPZmZzZXQgKyBtZW1vcnlSZXF1aXJlZEZvclByZWNvbXB1dGVkRGlzdGFuY2VzO1xyXG4gICAgICAgICAgICAgICAgZnJlcXVlbmNpZXNPZmZzZXQgPSBtYXBwZWREaXN0YW5jZXNPZmZzZXQgKyBtZW1vcnlSZXF1aXJlZEZvck1hcHBlZERpc3RhbmNlcztcclxuICAgICAgICAgICAgICAgIHNvcnRlZEluZGV4ZXNPZmZzZXQgPSBmcmVxdWVuY2llc09mZnNldCArIG1lbW9yeVJlcXVpcmVkRm9ySW50ZXJtZWRpYXRlU29ydEJ1ZmZlcnM7XHJcbiAgICAgICAgICAgICAgICBzY2VuZUluZGV4ZXNPZmZzZXQgPSBzb3J0ZWRJbmRleGVzT2Zmc2V0ICsgbWVtb3J5UmVxdWlyZWRGb3JTb3J0ZWRJbmRleGVzO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3Jtc09mZnNldCA9IHNjZW5lSW5kZXhlc09mZnNldCArIG1lbW9yeVJlcXVpcmVkZm9yVHJhbnNmb3JtSW5kZXhlcztcclxuICAgICAgICAgICAgICAgIHdhc21NZW1vcnkgPSBzb3J0ZXJXYXNtSW1wb3J0LmVudi5tZW1vcnkuYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZVNoYXJlZE1lbW9yeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnc29ydFNldHVwUGhhc2UxQ29tcGxldGUnOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5kZXhlc1RvU29ydEJ1ZmZlcic6IHdhc21NZW1vcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdpbmRleGVzVG9Tb3J0T2Zmc2V0JzogaW5kZXhlc1RvU29ydE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NvcnRlZEluZGV4ZXNCdWZmZXInOiB3YXNtTWVtb3J5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnc29ydGVkSW5kZXhlc09mZnNldCc6IHNvcnRlZEluZGV4ZXNPZmZzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwcmVjb21wdXRlZERpc3RhbmNlc0J1ZmZlcic6IHdhc21NZW1vcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwcmVjb21wdXRlZERpc3RhbmNlc09mZnNldCc6IHByZWNvbXB1dGVkRGlzdGFuY2VzT2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNmb3Jtc0J1ZmZlcic6IHdhc21NZW1vcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2Zvcm1zT2Zmc2V0JzogdHJhbnNmb3Jtc09mZnNldFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NvcnRTZXR1cFBoYXNlMUNvbXBsZXRlJzogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHNvcnQgd29ya2VyIGZvciBHUFUtYmFzZWQgc29ydGluZ1xyXG4gKiBAcGFyYW0ge251bWJlcn0gc3BsYXRDb3VudCAtIE51bWJlciBvZiBzcGxhdHMgdG8gc29ydFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVzZVNoYXJlZE1lbW9yeSAtIFdoZXRoZXIgdG8gdXNlIHNoYXJlZCBtZW1vcnlcclxuICogQHBhcmFtIHtib29sZWFufSBlbmFibGVTSU1ESW5Tb3J0IC0gV2hldGhlciB0byBlbmFibGUgU0lNRCBpbnN0cnVjdGlvbnNcclxuICogQHBhcmFtIHtib29sZWFufSBpbnRlZ2VyQmFzZWRTb3J0IC0gV2hldGhlciB0byB1c2UgaW50ZWdlci1iYXNlZCBzb3J0aW5nXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZHluYW1pY01vZGUgLSBXaGV0aGVyIGR5bmFtaWMgbW9kZSBpcyBlbmFibGVkXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzcGxhdFNvcnREaXN0YW5jZU1hcFByZWNpc2lvbiAtIFByZWNpc2lvbiBmb3IgZGlzdGFuY2UgbWFwXHJcbiAqIEByZXR1cm5zIHtXb3JrZXJ9IFRoZSBjcmVhdGVkIHNvcnQgd29ya2VyXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU29ydFdvcmtlcihzcGxhdENvdW50LCB1c2VTaGFyZWRNZW1vcnksIGVuYWJsZVNJTURJblNvcnQsIGludGVnZXJCYXNlZFNvcnQsIGR5bmFtaWNNb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxhdFNvcnREaXN0YW5jZU1hcFByZWNpc2lvbiA9IENvbnN0YW50cy5EZWZhdWx0U3BsYXRTb3J0RGlzdGFuY2VNYXBQcmVjaXNpb24pIHtcclxuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIoXHJcbiAgICAgICAgVVJMLmNyZWF0ZU9iamVjdFVSTChcclxuICAgICAgICAgICAgbmV3IEJsb2IoWycoJywgc29ydFdvcmtlci50b1N0cmluZygpLCAnKShzZWxmKSddLCB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICksXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBzb3VyY2VXYXNtID0gU29ydGVyV2FzbTtcclxuXHJcbiAgICAvLyBpT1MgbWFrZXMgY2hvb3NpbmcgdGhlIHJpZ2h0IFdlYkFzc2VtYmx5IGNvbmZpZ3VyYXRpb24gdHJpY2t5IDooXHJcbiAgICBjb25zdCBpT1NTZW1WZXIgPSBpc0lPUygpID8gZ2V0SU9TU2VtZXZlcigpIDogbnVsbDtcclxuICAgIGlmICghZW5hYmxlU0lNREluU29ydCAmJiAhdXNlU2hhcmVkTWVtb3J5KSB7XHJcbiAgICAgICAgc291cmNlV2FzbSA9IFNvcnRlcldhc21Ob1NJTUQ7XHJcbiAgICAgICAgLy8gVGVzdGluZyBvbiB2YXJpb3VzIGRldmljZXMgaGFzIHNob3duIHRoYXQgZXZlbiB3aGVuIHNoYXJlZCBtZW1vcnkgaXMgZGlzYWJsZWQsIHRoZSBXQVNNIG1vZHVsZSB3aXRoIHNoYXJlZFxyXG4gICAgICAgIC8vIG1lbW9yeSBjYW4gc3RpbGwgYmUgdXNlZCBtb3N0IG9mIHRoZSB0aW1lIC0tIHRoZSBleGNlcHRpb24gc2VlbXMgdG8gYmUgaU9TIGRldmljZXMgYmVsb3cgMTYuNFxyXG4gICAgICAgIGlmIChpT1NTZW1WZXIgJiYgaU9TU2VtVmVyLm1ham9yIDw9IDE2ICYmIGlPU1NlbVZlci5taW5vciA8IDQpIHtcclxuICAgICAgICAgICAgc291cmNlV2FzbSA9IFNvcnRlcldhc21Ob1NJTUROb25TaGFyZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICghZW5hYmxlU0lNREluU29ydCkge1xyXG4gICAgICAgIHNvdXJjZVdhc20gPSBTb3J0ZXJXYXNtTm9TSU1EO1xyXG4gICAgfSBlbHNlIGlmICghdXNlU2hhcmVkTWVtb3J5KSB7XHJcbiAgICAgICAgLy8gU2FtZSBpc3N1ZSB3aXRoIHNoYXJlZCBtZW1vcnkgYXMgYWJvdmUgb24gaU9TIGRldmljZXNcclxuICAgICAgICBpZiAoaU9TU2VtVmVyICYmIGlPU1NlbVZlci5tYWpvciA8PSAxNiAmJiBpT1NTZW1WZXIubWlub3IgPCA0KSB7XHJcbiAgICAgICAgICAgIHNvdXJjZVdhc20gPSBTb3J0ZXJXYXNtTm9uU2hhcmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzb3J0ZXJXYXNtQmluYXJ5U3RyaW5nID0gYXRvYihzb3VyY2VXYXNtKTtcclxuICAgIGNvbnN0IHNvcnRlcldhc21CeXRlcyA9IG5ldyBVaW50OEFycmF5KHNvcnRlcldhc21CaW5hcnlTdHJpbmcubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVyV2FzbUJpbmFyeVN0cmluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHNvcnRlcldhc21CeXRlc1tpXSA9IHNvcnRlcldhc21CaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgIH1cclxuXHJcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICdpbml0Jzoge1xyXG4gICAgICAgICAgICAnc29ydGVyV2FzbUJ5dGVzJzogc29ydGVyV2FzbUJ5dGVzLmJ1ZmZlcixcclxuICAgICAgICAgICAgJ3NwbGF0Q291bnQnOiBzcGxhdENvdW50LFxyXG4gICAgICAgICAgICAndXNlU2hhcmVkTWVtb3J5JzogdXNlU2hhcmVkTWVtb3J5LFxyXG4gICAgICAgICAgICAnaW50ZWdlckJhc2VkU29ydCc6IGludGVnZXJCYXNlZFNvcnQsXHJcbiAgICAgICAgICAgICdkeW5hbWljTW9kZSc6IGR5bmFtaWNNb2RlLFxyXG4gICAgICAgICAgICAnZGlzdGFuY2VNYXBSYW5nZSc6IDEgPDwgc3BsYXRTb3J0RGlzdGFuY2VNYXBQcmVjaXNpb24sXHJcbiAgICAgICAgICAgIC8vIFN1cGVyIGhhY2t5XHJcbiAgICAgICAgICAgICdDb25zdGFudHMnOiB7XHJcbiAgICAgICAgICAgICAgICAnQnl0ZXNQZXJGbG9hdCc6IENvbnN0YW50cy5CeXRlc1BlckZsb2F0LFxyXG4gICAgICAgICAgICAgICAgJ0J5dGVzUGVySW50JzogQ29uc3RhbnRzLkJ5dGVzUGVySW50LFxyXG4gICAgICAgICAgICAgICAgJ01lbW9yeVBhZ2VTaXplJzogQ29uc3RhbnRzLk1lbW9yeVBhZ2VTaXplLFxyXG4gICAgICAgICAgICAgICAgJ01heFNjZW5lcyc6IENvbnN0YW50cy5NYXhTY2VuZXNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHdvcmtlcjtcclxufVxyXG4iLCIvKipcclxuICogVmlld2VyXHJcbiAqIFxyXG4gKiBCYXNlZCBvbiBAbWtrZWxsb2dnL2dhdXNzaWFuLXNwbGF0cy0zZCAoTUlUIExpY2Vuc2UpXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta2tlbGxvZ2cvR2F1c3NpYW5TcGxhdHMzRFxyXG4gKiBcclxuICogSEVBVklMWSBNT0RJRklFRCBmb3IgRkxBTUUgYXZhdGFyIHN1cHBvcnQ6XHJcbiAqIC0gQWRkZWQgRkxBTUUgaGVhZCBtb2RlbCBpbnRlZ3JhdGlvblxyXG4gKiAtIEV4dGVuZGVkIHdpdGggZXhwcmVzc2lvbi9wb3NlIGNvbnRyb2xzXHJcbiAqIC0gQWRkaXRpb25hbCByZW5kZXJpbmcgcGlwZWxpbmUgbW9kaWZpY2F0aW9uc1xyXG4gKiAtIEFkZGl0aW9uYWwgfjkwMCBsaW5lcyBvZiBGTEFNRS1zcGVjaWZpYyBjb2RlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQm9uZSwgRHluYW1pY0RyYXdVc2FnZSwgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlLCBNYXRoVXRpbHMsIE1hdHJpeDQsIE9ydGhvZ3JhcGhpY0NhbWVyYSwgUGVyc3BlY3RpdmVDYW1lcmEsIFF1YXRlcm5pb24sIFNjZW5lLCBTa2VsZXRvbiwgVmVjdG9yMiwgVmVjdG9yMywgV2ViR0xSZW5kZXJlciB9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHsgXHJcbiAgICBnZXRDdXJyZW50VGltZSwgXHJcbiAgICBjbGFtcCwgXHJcbiAgICBkZWxheWVkRXhlY3V0ZSwgXHJcbiAgICBpc0lPUywgXHJcbiAgICBnZXRJT1NTZW1ldmVyLCBcclxuICAgIFNlbXZlcixcclxuICAgIGZldGNoV2l0aFByb2dyZXNzLFxyXG4gICAgbmF0aXZlUHJvbWlzZVdpdGhFeHRyYWN0ZWRDb21wb25lbnRzLFxyXG4gICAgYWJvcnRhYmxlUHJvbWlzZVdpdGhFeHRyYWN0ZWRDb21wb25lbnRzLFxyXG4gICAgZGlzcG9zZUFsbE1lc2hlcyxcclxuICAgIEFib3J0ZWRQcm9taXNlRXJyb3JcclxufSBmcm9tICcuLi91dGlscy9VdGlsLmpzJztcclxuaW1wb3J0IHsgUmVuZGVyTW9kZSB9IGZyb20gJy4uL2VudW1zL1JlbmRlck1vZGUuanMnO1xyXG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gJy4uL2VudW1zL0xvZ0xldmVsLmpzJztcclxuaW1wb3J0IHsgU3BsYXRSZW5kZXJNb2RlIH0gZnJvbSAnLi4vZW51bXMvU3BsYXRSZW5kZXJNb2RlLmpzJztcclxuaW1wb3J0IHsgU2NlbmVGb3JtYXQsIHNjZW5lRm9ybWF0RnJvbVBhdGggfSBmcm9tICcuLi9lbnVtcy9TY2VuZUZvcm1hdC5qcyc7XHJcbmltcG9ydCB7IFNjZW5lUmV2ZWFsTW9kZSB9IGZyb20gJy4uL2VudW1zL1NjZW5lUmV2ZWFsTW9kZS5qcyc7XHJcbmltcG9ydCB7IE9yYml0Q29udHJvbHMgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vY29udHJvbHMvT3JiaXRDb250cm9scy5qcyc7XHJcbmltcG9ydCB7IFNwbGF0TWVzaCB9IGZyb20gJy4vU3BsYXRNZXNoLmpzJztcclxuaW1wb3J0IHsgU3BsYXRTY2VuZSB9IGZyb20gJy4vU3BsYXRTY2VuZS5qcyc7XHJcbmltcG9ydCB7IERpcmVjdExvYWRFcnJvciB9IGZyb20gJy4uL2xvYWRlcnMvRGlyZWN0TG9hZEVycm9yLmpzJztcclxuaW1wb3J0IHsgUGx5TG9hZGVyIH0gZnJvbSAnLi4vbG9hZGVycy9QbHlMb2FkZXIuanMnO1xyXG5pbXBvcnQgeyBSYXljYXN0ZXIgfSBmcm9tICcuLi9yYXljYXN0ZXIvUmF5Y2FzdGVyLmpzJztcclxuaW1wb3J0IHsgY3JlYXRlU29ydFdvcmtlciB9IGZyb20gJy4uL3dvcmtlci9Tb3J0V29ya2VyLmpzJztcclxuaW1wb3J0IHsgXHJcbiAgICBTQ0VORV9GQURFSU5fUkFURV9GQVNULFxyXG4gICAgU0NFTkVfRkFERUlOX1JBVEVfR1JBRFVBTCxcclxuICAgIFRIUkVFX0NBTUVSQV9GT1YsXHJcbiAgICBNSU5JTVVNX0RJU1RBTkNFX1RPX05FV19GT0NBTF9QT0lOVCxcclxuICAgIENPTlNFQ1VUSVZFX1JFTkRFUkVEX0ZSQU1FU19GT1JfRlBTX0NBTENVTEFUSU9OLFxyXG4gICAgTUlOX1NQTEFUX0NPVU5UX1RPX1NIT1dfU1BMQVRfVFJFRV9MT0FESU5HX1NQSU5ORVIsXHJcbiAgICBGT0NVU19NQVJLRVJfRkFERV9JTl9TUEVFRCxcclxuICAgIEZPQ1VTX01BUktFUl9GQURFX09VVF9TUEVFRCxcclxuICAgIENvbnN0YW50cyxcclxuICAgIExvYWRlclN0YXR1c1xyXG59IGZyb20gJy4uL2VudW1zL0VuZ2luZUNvbnN0YW50cy5qcyc7XHJcblxyXG4vLyBVSSBjb21wb25lbnRzIC0gc3R1YiBpbXBsZW1lbnRhdGlvbnMgZm9yIG5vd1xyXG5jbGFzcyBMb2FkaW5nU3Bpbm5lciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihtc2csIGNvbnRhaW5lcikgeyB0aGlzLnRhc2tzID0gW107IH1cclxuICAgIHNob3coKSB7fVxyXG4gICAgaGlkZSgpIHt9XHJcbiAgICBzZXRDb250YWluZXIoYykge31cclxuICAgIGFkZFRhc2sobXNnKSB7IHJldHVybiB0aGlzLnRhc2tzLnB1c2gobXNnKTsgfVxyXG4gICAgcmVtb3ZlVGFzayhpZCkge31cclxuICAgIHJlbW92ZUFsbFRhc2tzKCkgeyB0aGlzLnRhc2tzID0gW107IH1cclxuICAgIHNldE1lc3NhZ2VGb3JUYXNrKGlkLCBtc2cpIHt9XHJcbn1cclxuXHJcbmNsYXNzIExvYWRpbmdQcm9ncmVzc0JhciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250YWluZXIpIHt9XHJcbiAgICBzaG93KCkge31cclxuICAgIGhpZGUoKSB7fVxyXG4gICAgc2V0Q29udGFpbmVyKGMpIHt9XHJcbiAgICBzZXRQcm9ncmVzcyhwKSB7fVxyXG59XHJcblxyXG5jbGFzcyBTY2VuZUhlbHBlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihzY2VuZSkgeyBcclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7IFxyXG4gICAgICAgIHRoaXMubWVzaEN1cnNvciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tZXNoQ3Vyc29yVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZm9jdXNNYXJrZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZm9jdXNNYXJrZXJPcGFjaXR5ID0gMDtcclxuICAgICAgICB0aGlzLmNvbnRyb2xQbGFuZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb250cm9sUGxhbmVWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBzZXR1cE1lc2hDdXJzb3IoKSB7fVxyXG4gICAgc2V0dXBGb2N1c01hcmtlcigpIHt9XHJcbiAgICBzZXR1cENvbnRyb2xQbGFuZSgpIHt9XHJcbiAgICB1cGRhdGVNZXNoQ3Vyc29yKHBvcywgYWN0aXZlKSB7fVxyXG4gICAgdXBkYXRlRm9jdXNNYXJrZXIodGFyZ2V0LCBjYW1lcmEsIHJlbmRlckRpbWVuc2lvbnMpIHt9XHJcbiAgICB1cGRhdGVDb250cm9sUGxhbmUoY2FtLCBjdHJsKSB7fVxyXG4gICAgc2V0Rm9jdXNNYXJrZXJWaXNpYmlsaXR5KHYpIHt9XHJcbiAgICBzZXRGb2N1c01hcmtlck9wYWNpdHkobykgeyB0aGlzLmZvY3VzTWFya2VyT3BhY2l0eSA9IG87IH1cclxuICAgIGdldEZvY3VzTWFya2VyT3BhY2l0eSgpIHsgcmV0dXJuIHRoaXMuZm9jdXNNYXJrZXJPcGFjaXR5OyB9XHJcbiAgICBwb3NpdGlvbkFuZE9yaWVudEZvY3VzTWFya2VyKHBvcywgY2FtKSB7fVxyXG4gICAgcG9zaXRpb25BbmRPcmllbnRNZXNoQ3Vyc29yKHBvcywgY2FtKSB7fVxyXG4gICAgc2V0TWVzaEN1cnNvclZpc2liaWxpdHkodmlzaWJsZSkgeyB0aGlzLm1lc2hDdXJzb3JWaXNpYmxlID0gdmlzaWJsZTsgfVxyXG4gICAgZ2V0TWVzY2hDdXJzb3JWaXNpYmlsaXR5KCkgeyByZXR1cm4gdGhpcy5tZXNoQ3Vyc29yVmlzaWJsZTsgfVxyXG4gICAgc2V0Q29udHJvbFBsYW5lVmlzaWJpbGl0eSh2aXNpYmxlKSB7IHRoaXMuY29udHJvbFBsYW5lVmlzaWJsZSA9IHZpc2libGU7IH1cclxuICAgIHBvc2l0aW9uQW5kT3JpZW50Q29udHJvbFBsYW5lKHBvcywgcXVhdCwgc2NhbGUpIHt9XHJcbiAgICB1cGRhdGVGb3JSZW5kZXJNb2RlKG1vZGUsIG1lc2gpIHt9XHJcbiAgICBkaXNwb3NlKCkge31cclxufVxyXG5cclxuLyoqXHJcbiAqIFZpZXdlciAtIENvcmUgR2F1c3NpYW4gU3BsYXR0aW5nIFZpZXdlclxyXG4gKiBIYW5kbGVzIHRoZSBUaHJlZS5qcyBzY2VuZSwgY2FtZXJhLCBjb250cm9scywgYW5kIHJlbmRlcmluZyBsb29wLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFZpZXdlciB7XHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnNcclxuICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmNhbWVyYVVwPVswLCAxLCAwXV0gLSBDYW1lcmEgdXAgdmVjdG9yXHJcbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5pbml0aWFsQ2FtZXJhUG9zaXRpb249WzAsIDEwLCAxNV1dIC0gSW5pdGlhbCBjYW1lcmEgcG9zaXRpb25cclxuICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmluaXRpYWxDYW1lcmFSb3RhdGlvbj1bMCwgMCwgMF1dIC0gSW5pdGlhbCBjYW1lcmEgcm90YXRpb25cclxuICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmluaXRpYWxDYW1lcmFMb29rQXQ9WzAsIDAsIDBdXSAtIEluaXRpYWwgY2FtZXJhIGxvb2stYXQgcG9pbnRcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRyb3BJbk1vZGU9ZmFsc2VdIC0gSWYgdHJ1ZSwgdmlld2VyIGlzIHVzZWQgYXMgYSBUaHJlZS5qcyBzY2VuZSBvYmplY3RcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnNlbGZEcml2ZW5Nb2RlPXRydWVdIC0gSWYgdHJ1ZSwgdmlld2VyIG1hbmFnZXMgaXRzIG93biByZW5kZXIgbG9vcFxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudXNlQnVpbHRJbkNvbnRyb2xzPXRydWVdIC0gSWYgdHJ1ZSwgdXNlcyBPcmJpdENvbnRyb2xzXHJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW29wdGlvbnMucm9vdEVsZW1lbnRdIC0gUGFyZW50IGVsZW1lbnQgZm9yIHRoZSBjYW52YXNcclxuICAgKiBAcGFyYW0ge0hUTUxDYW52YXNFbGVtZW50fSBbb3B0aW9ucy50aHJlZWpzQ2FudmFzXSAtIEV4aXN0aW5nIGNhbnZhcyB0byB1c2VcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmlnbm9yZURldmljZVBpeGVsUmF0aW89ZmFsc2VdIC0gSWYgdHJ1ZSwgZm9yY2VzIERQUiB0byAxXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5oYWxmUHJlY2lzaW9uQ292YXJpYW5jZXNPbkdQVT1mYWxzZV0gLSBVc2UgMTYtYml0IGZsb2F0IGZvciBjb3ZhcmlhbmNlc1xyXG4gICAqIEBwYXJhbSB7VEhSRUUuU2NlbmV9IFtvcHRpb25zLnRocmVlU2NlbmVdIC0gRXh0ZXJuYWwgVGhyZWUuanMgc2NlbmUgdG8gcmVuZGVyXHJcbiAgICogQHBhcmFtIHtUSFJFRS5XZWJHTFJlbmRlcmVyfSBbb3B0aW9ucy5yZW5kZXJlcl0gLSBFeHRlcm5hbCBUaHJlZS5qcyByZW5kZXJlclxyXG4gICAqIEBwYXJhbSB7VEhSRUUuQ2FtZXJhfSBbb3B0aW9ucy5jYW1lcmFdIC0gRXh0ZXJuYWwgVGhyZWUuanMgY2FtZXJhXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5ncHVBY2NlbGVyYXRlZFNvcnQ9ZmFsc2VdIC0gVXNlIEdQVSBmb3Igc29ydGluZyBkaXN0YW5jZXNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmludGVnZXJCYXNlZFNvcnQ9dHJ1ZV0gLSBVc2UgaW50ZWdlciBhcml0aG1ldGljIGZvciBzb3J0aW5nXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5zaGFyZWRNZW1vcnlGb3JXb3JrZXJzPXRydWVdIC0gVXNlIFNoYXJlZEFycmF5QnVmZmVyIGZvciB3b3JrZXJzXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5keW5hbWljU2NlbmU9ZmFsc2VdIC0gT3B0aW1pemUgZm9yIGR5bmFtaWMgc2NlbmVzXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICAvLyBUaGUgbmF0dXJhbCAndXAnIHZlY3RvciBmb3Igdmlld2luZyB0aGUgc2NlbmUgKG9ubHkgaGFzIGFuIGVmZmVjdCB3aGVuIHVzZWQgd2l0aCBvcmJpdCBjb250cm9scyBhbmRcclxuICAgIC8vIHdoZW4gdGhlIHZpZXdlciB1c2VzIGl0cyBvd24gY2FtZXJhKS5cclxuICAgIGlmICghb3B0aW9ucy5jYW1lcmFVcCkgb3B0aW9ucy5jYW1lcmFVcCA9IFswLCAxLCAwXTtcclxuICAgIHRoaXMuY2FtZXJhVXAgPSBuZXcgVmVjdG9yMygpLmZyb21BcnJheShvcHRpb25zLmNhbWVyYVVwKTtcclxuXHJcbiAgICAvLyBUaGUgY2FtZXJhJ3MgaW5pdGlhbCBwb3NpdGlvbiAob25seSB1c2VkIHdoZW4gdGhlIHZpZXdlciB1c2VzIGl0cyBvd24gY2FtZXJhKS5cclxuICAgIGlmICghb3B0aW9ucy5pbml0aWFsQ2FtZXJhUG9zaXRpb24pXHJcbiAgICAgIG9wdGlvbnMuaW5pdGlhbENhbWVyYVBvc2l0aW9uID0gWzAsIDEwLCAxNV07XHJcbiAgICB0aGlzLmluaXRpYWxDYW1lcmFQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCkuZnJvbUFycmF5KFxyXG4gICAgICBvcHRpb25zLmluaXRpYWxDYW1lcmFQb3NpdGlvblxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIW9wdGlvbnMuaW5pdGlhbENhbWVyYVJvdGF0aW9uKVxyXG4gICAgICAgIG9wdGlvbnMuaW5pdGlhbENhbWVyYVJvdGF0aW9uID0gWzAsIDAsIDBdO1xyXG4gICAgICB0aGlzLmluaXRpYWxDYW1lcmFSb3RhdGlvbiA9IG5ldyBWZWN0b3IzKCkuZnJvbUFycmF5KFxyXG4gICAgICAgIG9wdGlvbnMuaW5pdGlhbENhbWVyYVJvdGF0aW9uXHJcbiAgICApO1xyXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJhY2tncm91bmRDb2xvcjtcclxuXHJcbiAgICAvLyBUaGUgaW5pdGlhbCBmb2NhbCBwb2ludCBvZiB0aGUgY2FtZXJhIGFuZCBjZW50ZXIgb2YgdGhlIGNhbWVyYSdzIG9yYml0IChvbmx5IHVzZWQgd2hlbiB0aGUgdmlld2VyIHVzZXMgaXRzIG93biBjYW1lcmEpLlxyXG4gICAgaWYgKCFvcHRpb25zLmluaXRpYWxDYW1lcmFMb29rQXQpIG9wdGlvbnMuaW5pdGlhbENhbWVyYUxvb2tBdCA9IFswLCAwLCAwXTtcclxuICAgIHRoaXMuaW5pdGlhbENhbWVyYUxvb2tBdCA9IG5ldyBWZWN0b3IzKCkuZnJvbUFycmF5KFxyXG4gICAgICBvcHRpb25zLmluaXRpYWxDYW1lcmFMb29rQXRcclxuICAgICk7XHJcblxyXG4gICAgLy8gJ2Ryb3BJbk1vZGUnIGlzIGEgZmxhZyB0aGF0IGlzIHVzZWQgaW50ZXJuYWxseSB0byBzdXBwb3J0IHRoZSB1c2FnZSBvZiB0aGUgdmlld2VyIGFzIGEgVGhyZWUuanMgc2NlbmUgb2JqZWN0XHJcbiAgICB0aGlzLmRyb3BJbk1vZGUgPSBvcHRpb25zLmRyb3BJbk1vZGUgfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gSWYgJ3NlbGZEcml2ZW5Nb2RlJyBpcyB0cnVlLCB0aGUgdmlld2VyIG1hbmFnZXMgaXRzIG93biB1cGRhdGUvYW5pbWF0aW9uIGxvb3AgdmlhIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpXHJcbiAgICBpZiAob3B0aW9ucy5zZWxmRHJpdmVuTW9kZSA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuc2VsZkRyaXZlbk1vZGUgPT09IG51bGwpXHJcbiAgICAgIG9wdGlvbnMuc2VsZkRyaXZlbk1vZGUgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxmRHJpdmVuTW9kZSA9IG9wdGlvbnMuc2VsZkRyaXZlbk1vZGUgJiYgIXRoaXMuZHJvcEluTW9kZTtcclxuICAgIHRoaXMuc2VsZkRyaXZlblVwZGF0ZUZ1bmMgPSB0aGlzLnNlbGZEcml2ZW5VcGRhdGUuYmluZCh0aGlzKTtcclxuXHJcbiAgICAvLyBJZiAndXNlQnVpbHRJbkNvbnRyb2xzJyBpcyB0cnVlLCB0aGUgdmlld2VyIHdpbGwgY3JlYXRlIGl0cyBvd24gaW5zdGFuY2Ugb2YgT3JiaXRDb250cm9scyBhbmQgYXR0YWNoIHRvIHRoZSBjYW1lcmFcclxuICAgIGlmIChvcHRpb25zLnVzZUJ1aWx0SW5Db250cm9scyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICBvcHRpb25zLnVzZUJ1aWx0SW5Db250cm9scyA9IHRydWU7XHJcbiAgICB0aGlzLnVzZUJ1aWx0SW5Db250cm9scyA9IG9wdGlvbnMudXNlQnVpbHRJbkNvbnRyb2xzO1xyXG5cclxuICAgIC8vIHBhcmVudCBlbGVtZW50IG9mIHRoZSBUaHJlZS5qcyByZW5kZXJlciBjYW52YXNcclxuICAgIHRoaXMucm9vdEVsZW1lbnQgPSBvcHRpb25zLnJvb3RFbGVtZW50O1xyXG4gICAgdGhpcy5jYW52YXMgPSBvcHRpb25zLnRocmVlanNDYW52YXM7XHJcbiAgICAvLyBUZWxscyB0aGUgdmlld2VyIHRvIHByZXRlbmQgdGhlIGRldmljZSBwaXhlbCByYXRpbyBpcyAxLCB3aGljaCBjYW4gYm9vc3QgcGVyZm9ybWFuY2Ugb24gZGV2aWNlcyB3aGVyZSBpdCBpcyBsYXJnZXIsXHJcbiAgICAvLyBhdCBhIHNtYWxsIGNvc3QgdG8gdmlzdWFsIHF1YWxpdHlcclxuICAgIHRoaXMuaWdub3JlRGV2aWNlUGl4ZWxSYXRpbyA9IG9wdGlvbnMuaWdub3JlRGV2aWNlUGl4ZWxSYXRpbyB8fCBmYWxzZTtcclxuICAgIHRoaXMuZGV2aWNlUGl4ZWxSYXRpbyA9IHRoaXMuaWdub3JlRGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICA/IDFcclxuICAgICAgOiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xyXG5cclxuICAgIC8vIFRlbGxzIHRoZSB2aWV3ZXIgdG8gdXNlIDE2LWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZXMgd2hlbiBzdG9yaW5nIHNwbGF0IGNvdmFyaWFuY2UgZGF0YSBpbiB0ZXh0dXJlcywgaW5zdGVhZCBvZiAzMi1iaXRcclxuICAgIHRoaXMuaGFsZlByZWNpc2lvbkNvdmFyaWFuY2VzT25HUFUgPVxyXG4gICAgICBvcHRpb25zLmhhbGZQcmVjaXNpb25Db3ZhcmlhbmNlc09uR1BVIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIElmICd0aHJlZVNjZW5lJyBpcyB2YWxpZCwgaXQgd2lsbCBiZSByZW5kZXJlZCBieSB0aGUgdmlld2VyIGFsb25nIHdpdGggdGhlIHNwbGF0IG1lc2hcclxuICAgIHRoaXMudGhyZWVTY2VuZSA9IG9wdGlvbnMudGhyZWVTY2VuZTtcclxuICAgIC8vIEFsbG93cyBmb3IgdXNhZ2Ugb2YgYW4gZXh0ZXJuYWwgVGhyZWUuanMgcmVuZGVyZXJcclxuICAgIHRoaXMucmVuZGVyZXIgPSBvcHRpb25zLnJlbmRlcmVyO1xyXG4gICAgLy8gQWxsb3dzIGZvciB1c2FnZSBvZiBhbiBleHRlcm5hbCBUaHJlZS5qcyBjYW1lcmFcclxuICAgIHRoaXMuY2FtZXJhID0gb3B0aW9ucy5jYW1lcmE7XHJcblxyXG4gICAgLy8gSWYgJ2dwdUFjY2VsZXJhdGVkU29ydCcgaXMgdHJ1ZSwgYSBwYXJ0aWFsbHkgR1BVLWFjY2VsZXJhdGVkIGFwcHJvYWNoIHRvIHNvcnRpbmcgc3BsYXRzIHdpbGwgYmUgdXNlZC5cclxuICAgIC8vIEN1cnJlbnRseSB0aGlzIG1lYW5zIHByZS1jb21wdXRpbmcgc3BsYXQgZGlzdGFuY2VzIGZyb20gdGhlIGNhbWVyYSBvbiB0aGUgR1BVXHJcbiAgICB0aGlzLmdwdUFjY2VsZXJhdGVkU29ydCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0ZWRTb3J0IHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmICdpbnRlZ2VyQmFzZWRTb3J0JyBpcyB0cnVlLCB0aGUgaW50ZWdlciB2ZXJzaW9uIG9mIHNwbGF0IGNlbnRlcnMgYXMgd2VsbCBhcyBvdGhlciB2YWx1ZXMgdXNlZCB0byBjYWxjdWxhdGVcclxuICAgIC8vIHNwbGF0IGRpc3RhbmNlcyBhcmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBmbG9hdCB2ZXJzaW9uLiBUaGlzIHNwZWVkcyB1cCBjb21wdXRhdGlvbiwgYnV0IGludHJvZHVjZXMgdGhlIHBvc3NpYmlsaXR5IG9mXHJcbiAgICAvLyBvdmVyZmxvdyBpbiBsYXJnZXIgc2NlbmVzLlxyXG4gICAgaWYgKFxyXG4gICAgICBvcHRpb25zLmludGVnZXJCYXNlZFNvcnQgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICBvcHRpb25zLmludGVnZXJCYXNlZFNvcnQgPT09IG51bGxcclxuICAgICkge1xyXG4gICAgICBvcHRpb25zLmludGVnZXJCYXNlZFNvcnQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbnRlZ2VyQmFzZWRTb3J0ID0gb3B0aW9ucy5pbnRlZ2VyQmFzZWRTb3J0O1xyXG5cclxuICAgIC8vIElmICdzaGFyZWRNZW1vcnlGb3JXb3JrZXJzJyBpcyB0cnVlLCBhIFNoYXJlZEFycmF5QnVmZmVyIHdpbGwgYmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHdlYiB3b3JrZXJzLiBUaGlzIG1ldGhvZFxyXG4gICAgLy8gaXMgZmFzdGVyIHRoYW4gY29weWluZyBtZW1vcnkgdG8gb3IgZnJvbSB3ZWIgd29ya2VycywgYnV0IGNvbWVzIHdpdGggc2VjdXJpdHkgaW1wbGljYXRpb25zIGFzIG91dGxpbmVkIGhlcmU6XHJcbiAgICAvLyBodHRwczovL3dlYi5kZXYvYXJ0aWNsZXMvY3Jvc3Mtb3JpZ2luLWlzb2xhdGlvbi1ndWlkZVxyXG4gICAgLy8gSWYgZW5hYmxlZCwgaXQgcmVxdWlyZXMgc3BlY2lmaWMgQ09SUyBoZWFkZXJzIHRvIGJlIHByZXNlbnQgaW4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciB0aGF0IGlzIHNlbnQgd2hlblxyXG4gICAgLy8gbG9hZGluZyB0aGUgYXBwbGljYXRpb24uIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBSRUFETUUuXHJcbiAgICBpZiAoXHJcbiAgICAgIG9wdGlvbnMuc2hhcmVkTWVtb3J5Rm9yV29ya2VycyA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIG9wdGlvbnMuc2hhcmVkTWVtb3J5Rm9yV29ya2VycyA9PT0gbnVsbFxyXG4gICAgKVxyXG4gICAgICBvcHRpb25zLnNoYXJlZE1lbW9yeUZvcldvcmtlcnMgPSB0cnVlO1xyXG4gICAgdGhpcy5zaGFyZWRNZW1vcnlGb3JXb3JrZXJzID0gZmFsc2U7IC8vb3B0aW9ucy5zaGFyZWRNZW1vcnlGb3JXb3JrZXJzO1xyXG5cclxuICAgIC8vIGlmICdkeW5hbWljU2NlbmUnIGlzIHRydWUsIGl0IHRlbGxzIHRoZSB2aWV3ZXIgdG8gYXNzdW1lIHNjZW5lIGVsZW1lbnRzIGFyZSBub3Qgc3RhdGlvbmFyeSBvciB0aGF0IHRoZSBudW1iZXIgb2Ygc3BsYXRzIGluIHRoZVxyXG4gICAgLy8gc2NlbmUgbWF5IGNoYW5nZS4gVGhpcyBwcmV2ZW50cyBvcHRpbWl6YXRpb25zIHRoYXQgZGVwZW5kIG9uIGEgc3RhdGljIHNjZW5lIGZyb20gYmVpbmcgbWFkZS4gQWRkaXRpb25hbGx5LCBpZiAnZHluYW1pY1NjZW5lJyBpc1xyXG4gICAgLy8gdHJ1ZSBpdCB0ZWxscyB0aGUgc3BsYXQgbWVzaCB0byBub3QgYXBwbHkgc2NlbmUgdHJhbmZvcm1zIHRvIHNwbGF0IGRhdGEgdGhhdCBpcyByZXR1cm5lZCBieSBmdW5jdGlvbnMgbGlrZVxyXG4gICAgLy8gU3BsYXRNZXNoLmdldFNwbGF0Q2VudGVyKCkgYnkgZGVmYXVsdC5cclxuICAgIHRoaXMuZHluYW1pY1NjZW5lID0gISFvcHRpb25zLmR5bmFtaWNTY2VuZTtcclxuXHJcbiAgICAvLyBXaGVuIHRydWUsIHdpbGwgcGVyZm9ybSBhZGRpdGlvbmFsIHN0ZXBzIGR1cmluZyByZW5kZXJpbmcgdG8gYWRkcmVzcyBhcnRpZmFjdHMgY2F1c2VkIGJ5IHRoZSByZW5kZXJpbmcgb2YgZ2F1c3NpYW5zIGF0IGFcclxuICAgIC8vIHN1YnN0YW50aWFsbHkgZGlmZmVyZW50IHJlc29sdXRpb24gdGhhbiB0aGF0IGF0IHdoaWNoIHRoZXkgd2VyZSByZW5kZXJlZCBkdXJpbmcgdHJhaW5pbmcuIFRoaXMgd2lsbCBvbmx5IHdvcmsgY29ycmVjdGx5XHJcbiAgICAvLyBmb3IgbW9kZWxzIHRoYXQgd2VyZSB0cmFpbmVkIHVzaW5nIGEgcHJvY2VzcyB0aGF0IHV0aWxpemVzIHRoaXMgY29tcGVuc2F0aW9uIGNhbGN1bGF0aW9uLiBGb3IgbW9yZSBkZXRhaWxzOlxyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25lcmZzdHVkaW8tcHJvamVjdC9nc3BsYXQvcHVsbC8xMTdcclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaGRlY28taW5yaWEvZ2F1c3NpYW4tc3BsYXR0aW5nL2lzc3Vlcy8yOTQjaXNzdWVjb21tZW50LTE3NzI2ODgwOTNcclxuICAgIHRoaXMuYW50aWFsaWFzZWQgPSBvcHRpb25zLmFudGlhbGlhc2VkIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIFRoaXMgY29uc3RhbnQgaXMgYWRkZWQgdG8gdGhlIHByb2plY3RlZCAyRCBzY3JlZW4tc3BhY2Ugc3BsYXQgc2NhbGVzXHJcbiAgICB0aGlzLmtlcm5lbDJEU2l6ZSA9XHJcbiAgICAgIG9wdGlvbnMua2VybmVsMkRTaXplID09PSB1bmRlZmluZWQgPyAwLjMgOiBvcHRpb25zLmtlcm5lbDJEU2l6ZTtcclxuXHJcbiAgICAvLyBpZiAncmVuZGVyTW9kZScgaXMgUmVuZGVyTW9kZS5BbHdheXMsIHRoZW4gdGhlIHZpZXdlciB3aWxsIHJyZW5kZXIgdGhlIHNjZW5lIG9uIGV2ZXJ5IHVwZGF0ZS4gSWYgaXQgaXMgUmVuZGVyTW9kZS5PbkNoYW5nZSxcclxuICAgIC8vIGl0IHdpbGwgb25seSByZW5kZXIgd2hlbiBzb21ldGhpbmcgaW4gdGhlIHNjZW5lIGhhcyBjaGFuZ2VkLlxyXG4gICAgdGhpcy5yZW5kZXJNb2RlID0gb3B0aW9ucy5yZW5kZXJNb2RlIHx8IFJlbmRlck1vZGUuQWx3YXlzO1xyXG5cclxuICAgIC8vIFNjZW5lUmV2ZWFsTW9kZS5EZWZhdWx0IHJlc3VsdHMgaW4gYSBuaWNlLCBzbG93IGZhZGUtaW4gZWZmZWN0IGZvciBwcm9ncmVzc2l2ZWx5IGxvYWRlZCBzY2VuZXMsXHJcbiAgICAvLyBhbmQgYSBmYXN0IGZhZGUtaW4gZm9yIG5vbiBwcm9ncmVzc2l2ZWx5IGxvYWRlZCBzY2VuZXMuXHJcbiAgICAvLyBTY2VuZVJldmVhbE1vZGUuR3JhZHVhbCB3aWxsIGZvcmNlIGEgc2xvdyBmYWRlLWluIGZvciBhbGwgc2NlbmVzLlxyXG4gICAgLy8gU2NlbmVSZXZlYWxNb2RlLkluc3RhbnQgd2lsbCBmb3JjZSBhbGwgbG9hZGVkIHNjZW5lIGRhdGEgdG8gYmUgaW1tZWRpYXRlbHkgdmlzaWJsZS5cclxuICAgIHRoaXMuc2NlbmVSZXZlYWxNb2RlID0gb3B0aW9ucy5zY2VuZVJldmVhbE1vZGUgfHwgU2NlbmVSZXZlYWxNb2RlLkRlZmF1bHQ7XHJcblxyXG4gICAgLy8gSGFja3ksIGV4cGVyaW1lbnRhbCwgbm9uLXNjaWVudGlmaWMgcGFyYW1ldGVyIGZvciB0d2Vha2luZyBmb2NhbCBsZW5ndGggcmVsYXRlZCBjYWxjdWxhdGlvbnMuIEZvciBzY2VuZXMgd2l0aCB2ZXJ5XHJcbiAgICAvLyBzbWFsbCBnYXVzc2lhbnMsIHNtYWxsIGRldGFpbHMsIGFuZCBzbWFsbCBkaW1lbnNpb25zIC0tIGluY3JlYXNpbmcgdGhpcyB2YWx1ZSBjYW4gaGVscCBpbXByb3ZlIHZpc3VhbCBxdWFsaXR5LlxyXG4gICAgdGhpcy5mb2NhbEFkanVzdG1lbnQgPSBvcHRpb25zLmZvY2FsQWRqdXN0bWVudCB8fCAxLjA7XHJcblxyXG4gICAgLy8gU3BlY2lmeSB0aGUgbWF4aW11bSBzY3JlZW4tc3BhY2Ugc3BsYXQgc2l6ZSwgY2FuIGhlbHAgZGVhbCB3aXRoIGxhcmdlIHNwbGF0cyB0aGF0IGdldCB0b28gdW53aWVsZHlcclxuICAgIHRoaXMubWF4U2NyZWVuU3BhY2VTcGxhdFNpemUgPSBvcHRpb25zLm1heFNjcmVlblNwYWNlU3BsYXRTaXplIHx8IDEwMjQ7XHJcblxyXG4gICAgLy8gVGhlIHZlcmJvc2l0eSBvZiBjb25zb2xlIGxvZ2dpbmdcclxuICAgIHRoaXMubG9nTGV2ZWwgPSBvcHRpb25zLmxvZ0xldmVsIHx8IExvZ0xldmVsLk5vbmU7XHJcblxyXG4gICAgLy8gRGVncmVlIG9mIHNwaGVyaWNhbCBoYXJtb25pY3MgdG8gdXRpbGl6ZSBpbiByZW5kZXJpbmcgc3BsYXRzIChhc3N1bWluZyB0aGUgZGF0YSBpcyBwcmVzZW50IGluIHRoZSBzcGxhdCBzY2VuZSkuXHJcbiAgICAvLyBWYWxpZCB2YWx1ZXMgYXJlIDAgLSAyLiBEZWZhdWx0IHZhbHVlIGlzIDAuXHJcbiAgICB0aGlzLnNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZSA9IG9wdGlvbnMuc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlIHx8IDA7XHJcblxyXG4gICAgLy8gV2hlbiB0cnVlLCBhbGxvd3MgZm9yIHVzYWdlIG9mIGV4dHJhIHByb3BlcnRpZXMgYW5kIGF0dHJpYnV0ZXMgZHVyaW5nIHJlbmRlcmluZyBmb3IgZWZmZWN0cyBzdWNoIGFzIG9wYWNpdHkgYWRqdXN0bWVudC5cclxuICAgIC8vIERlZmF1bHQgaXMgZmFsc2UgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIFRoZXNlIHByb3BlcnRpZXMgYXJlIHNlcGFyYXRlIGZyb20gdHJhbnNmb3JtIHByb3BlcnRpZXMgKHNjYWxlLCByb3RhdGlvbiwgcG9zaXRpb24pXHJcbiAgICAvLyB0aGF0IGFyZSBlbmFibGVkIGJ5IHRoZSAnZHluYW1pY1NjZW5lJyBwYXJhbWV0ZXIuXHJcbiAgICB0aGlzLmVuYWJsZU9wdGlvbmFsRWZmZWN0cyA9IG9wdGlvbnMuZW5hYmxlT3B0aW9uYWxFZmZlY3RzIHx8IGZhbHNlO1xyXG5cclxuICAgIC8vIEVuYWJsZSB0aGUgdXNhZ2Ugb2YgU0lNRCBXZWJBc3NlbWJseSBpbnN0cnVjdGlvbnMgZm9yIHRoZSBzcGxhdCBzb3J0XHJcbiAgICBpZiAoXHJcbiAgICAgIG9wdGlvbnMuZW5hYmxlU0lNREluU29ydCA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIG9wdGlvbnMuZW5hYmxlU0lNREluU29ydCA9PT0gbnVsbFxyXG4gICAgKVxyXG4gICAgICBvcHRpb25zLmVuYWJsZVNJTURJblNvcnQgPSB0cnVlO1xyXG4gICAgdGhpcy5lbmFibGVTSU1ESW5Tb3J0ID0gb3B0aW9ucy5lbmFibGVTSU1ESW5Tb3J0O1xyXG5cclxuICAgIC8vIExldmVsIHRvIGNvbXByZXNzIG5vbiBLU1BMQVQgZmlsZXMgd2hlbiBsb2FkaW5nIHRoZW0gZm9yIGRpcmVjdCByZW5kZXJpbmdcclxuICAgIGlmIChcclxuICAgICAgb3B0aW9ucy5pbk1lbW9yeUNvbXByZXNzaW9uTGV2ZWwgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICBvcHRpb25zLmluTWVtb3J5Q29tcHJlc3Npb25MZXZlbCA9PT0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgIG9wdGlvbnMuaW5NZW1vcnlDb21wcmVzc2lvbkxldmVsID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMuaW5NZW1vcnlDb21wcmVzc2lvbkxldmVsID0gb3B0aW9ucy5pbk1lbW9yeUNvbXByZXNzaW9uTGV2ZWw7XHJcblxyXG4gICAgLy8gUmVvcmRlciBzcGxhdCBkYXRhIGluIG1lbW9yeSBhZnRlciBsb2FkaW5nIGlzIGNvbXBsZXRlIHRvIG9wdGltaXplIGNhY2hlIHV0aWxpemF0aW9uLiBEZWZhdWx0IGlzIHRydWUuXHJcbiAgICAvLyBEb2VzIG5vdCBhcHBseSBpZiBzcGxhdCBzY2VuZSBpcyBwcm9ncmVzc2l2ZWx5IGxvYWRlZC5cclxuICAgIGlmIChcclxuICAgICAgb3B0aW9ucy5vcHRpbWl6ZVNwbGF0RGF0YSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIG9wdGlvbnMub3B0aW1pemVTcGxhdERhdGEgPT09IG51bGxcclxuICAgICkge1xyXG4gICAgICBvcHRpb25zLm9wdGltaXplU3BsYXREYXRhID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW1pemVTcGxhdERhdGEgPSBvcHRpb25zLm9wdGltaXplU3BsYXREYXRhO1xyXG5cclxuICAgIC8vIFdoZW4gdHJ1ZSwgdGhlIGludGVybWVkaWF0ZSBzcGxhdCBkYXRhIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBkZWNvbXByZXNzaW5nIHNwbGF0IGJ1ZmZmZXIocykgYW5kIGlzIHVzZWQgdG9cclxuICAgIC8vIHBvcHVsYXRlIHRoZSBkYXRhIHRleHR1cmVzIHdpbGwgYmUgZnJlZWQuIFRoaXMgd2lsbCByZWR1Y2VzIG1lbW9yeSB1c2FnZSwgYnV0IGlmIHRoYXQgZGF0YSBuZWVkcyB0byBiZSBtb2RpZmllZFxyXG4gICAgLy8gaXQgd2lsbCBuZWVkIHRvIGJlIHJlLXBvcHVsYXRlZCBmcm9tIHRoZSBzcGxhdCBidWZmZXIocykuIERlZmF1bHQgaXMgZmFsc2UuXHJcbiAgICBpZiAoXHJcbiAgICAgIG9wdGlvbnMuZnJlZUludGVybWVkaWF0ZVNwbGF0RGF0YSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIG9wdGlvbnMuZnJlZUludGVybWVkaWF0ZVNwbGF0RGF0YSA9PT0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgIG9wdGlvbnMuZnJlZUludGVybWVkaWF0ZVNwbGF0RGF0YSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mcmVlSW50ZXJtZWRpYXRlU3BsYXREYXRhID0gb3B0aW9ucy5mcmVlSW50ZXJtZWRpYXRlU3BsYXREYXRhO1xyXG5cclxuICAgIC8vIEl0IGFwcGVhcnMgdGhhdCBmb3IgY2VydGFpbiBpT1MgdmVyc2lvbnMsIHNwZWNpYWwgYWN0aW9ucyBuZWVkIHRvIGJlIHRha2VuIHdpdGggdGhlXHJcbiAgICAvLyB1c2FnZSBvZiBTSU1EIGluc3RydWN0aW9ucyBhbmQgc2hhcmVkIG1lbW9yeVxyXG4gICAgaWYgKGlzSU9TKCkpIHtcclxuICAgICAgY29uc3Qgc2VtdmVyID0gZ2V0SU9TU2VtZXZlcigpO1xyXG4gICAgICBpZiAoc2VtdmVyLm1ham9yIDwgMTcpIHtcclxuICAgICAgICB0aGlzLmVuYWJsZVNJTURJblNvcnQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2VtdmVyLm1ham9yIDwgMTYpIHtcclxuICAgICAgICB0aGlzLnNoYXJlZE1lbW9yeUZvcldvcmtlcnMgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFRlbGwgdGhlIHZpZXdlciBob3cgdG8gcmVuZGVyIHRoZSBzcGxhdHNcclxuICAgIGlmIChcclxuICAgICAgb3B0aW9ucy5zcGxhdFJlbmRlck1vZGUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICBvcHRpb25zLnNwbGF0UmVuZGVyTW9kZSA9PT0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgIG9wdGlvbnMuc3BsYXRSZW5kZXJNb2RlID0gU3BsYXRSZW5kZXJNb2RlLlRocmVlRDtcclxuICAgIH1cclxuICAgIHRoaXMuc3BsYXRSZW5kZXJNb2RlID0gb3B0aW9ucy5zcGxhdFJlbmRlck1vZGU7XHJcblxyXG4gICAgLy8gQ3VzdG9taXplIHRoZSBzcGVlZCBhdCB3aGljaCB0aGUgc2NlbmUgaXMgcmV2ZWFsZWRcclxuICAgIHRoaXMuc2NlbmVGYWRlSW5SYXRlTXVsdGlwbGllciA9IG9wdGlvbnMuc2NlbmVGYWRlSW5SYXRlTXVsdGlwbGllciB8fCAxLjA7XHJcblxyXG4gICAgLy8gU2V0IHRoZSByYW5nZSBmb3IgdGhlIGRlcHRoIG1hcCBmb3IgdGhlIGNvdW50aW5nIHNvcnQgdXNlZCB0byBzb3J0IHRoZSBzcGxhdHNcclxuICAgIHRoaXMuc3BsYXRTb3J0RGlzdGFuY2VNYXBQcmVjaXNpb24gPVxyXG4gICAgICBvcHRpb25zLnNwbGF0U29ydERpc3RhbmNlTWFwUHJlY2lzaW9uIHx8XHJcbiAgICAgIENvbnN0YW50cy5EZWZhdWx0U3BsYXRTb3J0RGlzdGFuY2VNYXBQcmVjaXNpb247XHJcbiAgICBjb25zdCBtYXhQcmVjaXNpb24gPSB0aGlzLmludGVnZXJCYXNlZFNvcnQgPyAyMCA6IDI0O1xyXG4gICAgdGhpcy5zcGxhdFNvcnREaXN0YW5jZU1hcFByZWNpc2lvbiA9IGNsYW1wKFxyXG4gICAgICB0aGlzLnNwbGF0U29ydERpc3RhbmNlTWFwUHJlY2lzaW9uLFxyXG4gICAgICAxMCxcclxuICAgICAgbWF4UHJlY2lzaW9uXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMub25TcGxhdE1lc2hDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xyXG4gICAgdGhpcy5jcmVhdGVTcGxhdE1lc2goKTtcclxuXHJcbiAgICB0aGlzLmNvbnRyb2xzID0gbnVsbDtcclxuICAgIHRoaXMucGVyc3BlY3RpdmVDb250cm9scyA9IG51bGw7XHJcbiAgICB0aGlzLm9ydGhvZ3JhcGhpY0NvbnRyb2xzID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLm9ydGhvZ3JhcGhpY0NhbWVyYSA9IG51bGw7XHJcbiAgICB0aGlzLnBlcnNwZWN0aXZlQ2FtZXJhID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnNob3dNZXNoQ3Vyc29yID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dDb250cm9sUGxhbmUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0luZm8gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNjZW5lSGVscGVyID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnNvcnRXb3JrZXIgPSBudWxsO1xyXG4gICAgdGhpcy5zb3J0UnVubmluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zcGxhdFJlbmRlckNvdW50ID0gMDtcclxuICAgIHRoaXMuc3BsYXRTb3J0Q291bnQgPSAwO1xyXG4gICAgdGhpcy5sYXN0U3BsYXRTb3J0Q291bnQgPSAwO1xyXG4gICAgdGhpcy5zb3J0V29ya2VySW5kZXhlc1RvU29ydCA9IG51bGw7XHJcbiAgICB0aGlzLnNvcnRXb3JrZXJTb3J0ZWRJbmRleGVzID0gbnVsbDtcclxuICAgIHRoaXMuc29ydFdvcmtlclByZWNvbXB1dGVkRGlzdGFuY2VzID0gbnVsbDtcclxuICAgIHRoaXMuc29ydFdvcmtlclRyYW5zZm9ybXMgPSBudWxsO1xyXG4gICAgdGhpcy5wcmVTb3J0TWVzc2FnZXMgPSBbXTtcclxuICAgIHRoaXMucnVuQWZ0ZXJOZXh0U29ydCA9IFtdO1xyXG5cclxuICAgIHRoaXMuc2VsZkRyaXZlbk1vZGVSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnNwbGF0UmVuZGVyUmVhZHkgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnJheWNhc3RlciA9IG5ldyBSYXljYXN0ZXIoKTtcclxuXHJcbiAgICB0aGlzLmluZm9QYW5lbCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5zdGFydEluT3J0aG9ncmFwaGljTW9kZSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuY3VycmVudEZQUyA9IDA7XHJcbiAgICB0aGlzLmxhc3RTb3J0VGltZSA9IDA7XHJcbiAgICB0aGlzLmNvbnNlY3V0aXZlUmVuZGVyRnJhbWVzID0gMDtcclxuXHJcbiAgICB0aGlzLnByZXZpb3VzQ2FtZXJhVGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIHRoaXMubmV4dENhbWVyYVRhcmdldCA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgdGhpcy5tb3VzZVBvc2l0aW9uID0gbmV3IFZlY3RvcjIoKTtcclxuICAgIHRoaXMubW91c2VEb3duUG9zaXRpb24gPSBuZXcgVmVjdG9yMigpO1xyXG4gICAgdGhpcy5tb3VzZURvd25UaW1lID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbnVsbDtcclxuICAgIHRoaXMubW91c2VNb3ZlTGlzdGVuZXIgPSBudWxsO1xyXG4gICAgdGhpcy5tb3VzZURvd25MaXN0ZW5lciA9IG51bGw7XHJcbiAgICB0aGlzLm1vdXNlVXBMaXN0ZW5lciA9IG51bGw7XHJcbiAgICB0aGlzLmtleURvd25MaXN0ZW5lciA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5zb3J0UHJvbWlzZSA9IG51bGw7XHJcbiAgICB0aGlzLnNvcnRQcm9taXNlUmVzb2x2ZXIgPSBudWxsO1xyXG4gICAgdGhpcy5zcGxhdFNjZW5lRG93bmxvYWRDb250cm9sbGVycyA9IFtdO1xyXG4gICAgdGhpcy5zcGxhdFNjZW5lRG93bmxvYWRQcm9taXNlcyA9IHt9O1xyXG4gICAgdGhpcy5zcGxhdFNjZW5lRG93bmxvYWRBbmRCdWlsZFByb21pc2UgPSBudWxsO1xyXG4gICAgdGhpcy5zcGxhdFNjZW5lUmVtb3ZhbFByb21pc2UgPSBudWxsO1xyXG5cclxuICAgIHRoaXMubG9hZGluZ1NwaW5uZXIgPSBuZXcgTG9hZGluZ1NwaW5uZXIoXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIHRoaXMucm9vdEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keVxyXG4gICAgKTtcclxuICAgIHRoaXMubG9hZGluZ1NwaW5uZXIuaGlkZSgpO1xyXG4gICAgdGhpcy5sb2FkaW5nUHJvZ3Jlc3NCYXIgPSBuZXcgTG9hZGluZ1Byb2dyZXNzQmFyKFxyXG4gICAgICB0aGlzLnJvb3RFbGVtZW50IHx8IGRvY3VtZW50LmJvZHlcclxuICAgICk7XHJcbiAgICB0aGlzLmxvYWRpbmdQcm9ncmVzc0Jhci5oaWRlKCk7XHJcbiAgICAvLyB0aGlzLmluZm9QYW5lbCA9IG5ldyBJbmZvUGFuZWwodGhpcy5yb290RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KVxyXG4gICAgLy8gdGhpcy5pbmZvUGFuZWwuaGlkZSgpXHJcblxyXG4gICAgdGhpcy51c2luZ0V4dGVybmFsQ2FtZXJhID0gdGhpcy5kcm9wSW5Nb2RlIHx8IHRoaXMuY2FtZXJhID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51c2luZ0V4dGVybmFsUmVuZGVyZXIgPSB0aGlzLmRyb3BJbk1vZGUgfHwgdGhpcy5yZW5kZXJlciA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmRpc3Bvc2luZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5kaXNwb3NlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5kaXNwb3NlUHJvbWlzZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5sYXN0VGltZSA9IDA7XHJcbiAgICB0aGlzLmdhdXNzaWFuU3BsYXRDb3VudCA9IDA7XHJcbiAgICB0aGlzLnRvdGFsRnJhbWVzID0gMDsgXHJcbiAgICB0aGlzLmZsYW1lX3BhcmFtcyA9IG51bGw7XHJcbiAgICB0aGlzLmJvbmVfdHJlZSA9IG51bGw7XHJcbiAgICB0aGlzLmxic193ZWlnaHRfODBrID0gbnVsbDtcclxuICAgIHRoaXMuZnJhbWUgPSAwO1xyXG4gIFxyXG4gICAgdGhpcy51c2VGbGFtZSA9IHRydWU7XHJcbiAgICB0aGlzLmJvbmVzID0gbnVsbDtcclxuICAgIHRoaXMuc2tlbGV0b24gPSBudWxsO1xyXG4gICAgdGhpcy4gYXZhdGFyTWVzaCA9IG51bGw7XHJcbiAgICB0aGlzLnNraW5Nb2RlbCA9IG51bGw7XHJcbiAgICB0aGlzLmJvbmVSb290ID0gbnVsbDtcclxuICAgIHRoaXMuYmFzZU1lc2ggPSBudWxsO1xyXG4gICAgdGhpcy5zZXRTa2luQXR0aWJ1dGVzID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRyb3BJbk1vZGUpIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU3BsYXRNZXNoKCkge1xyXG4gICAgdGhpcy5zcGxhdE1lc2ggPSBuZXcgU3BsYXRNZXNoKFxyXG4gICAgICB0aGlzLnNwbGF0UmVuZGVyTW9kZSxcclxuICAgICAgdGhpcy5keW5hbWljU2NlbmUsXHJcbiAgICAgIHRoaXMuZW5hYmxlT3B0aW9uYWxFZmZlY3RzLFxyXG4gICAgICB0aGlzLmhhbGZQcmVjaXNpb25Db3ZhcmlhbmNlc09uR1BVLFxyXG4gICAgICB0aGlzLmRldmljZVBpeGVsUmF0aW8sXHJcbiAgICAgIHRoaXMuZ3B1QWNjZWxlcmF0ZWRTb3J0LFxyXG4gICAgICB0aGlzLmludGVnZXJCYXNlZFNvcnQsXHJcbiAgICAgIHRoaXMuYW50aWFsaWFzZWQsXHJcbiAgICAgIHRoaXMubWF4U2NyZWVuU3BhY2VTcGxhdFNpemUsXHJcbiAgICAgIHRoaXMubG9nTGV2ZWwsXHJcbiAgICAgIHRoaXMuc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlLFxyXG4gICAgICB0aGlzLnNjZW5lRmFkZUluUmF0ZU11bHRpcGxpZXIsXHJcbiAgICAgIHRoaXMua2VybmVsMkRTaXplXHJcbiAgICApO1xyXG4gICAgdGhpcy5zcGxhdE1lc2guZnJ1c3R1bUN1bGxlZCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMub25TcGxhdE1lc2hDaGFuZ2VkQ2FsbGJhY2spIHRoaXMub25TcGxhdE1lc2hDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIGluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkgcmV0dXJuXHJcblxyXG4gICAgaWYgKCF0aGlzLnJvb3RFbGVtZW50KSB7XHJcbiAgICAgIGlmICghdGhpcy51c2luZ0V4dGVybmFsUmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLnJvb3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy5yb290RWxlbWVudC5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICB0aGlzLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgICAgICB0aGlzLnJvb3RFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMucm9vdEVsZW1lbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucm9vdEVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0dXBDYW1lcmEoKTtcclxuICAgIHRoaXMuc2V0dXBSZW5kZXJlcigpO1xyXG4gICAgLy8g5pqC5pe25Y675o6J5o6n5Yi25ZmoXHJcbiAgICAvLyB0aGlzLnNldHVwQ29udHJvbHMoKVxyXG4gICAgdGhpcy5zZXR1cEV2ZW50SGFuZGxlcnMoKTtcclxuXHJcbiAgICB0aGlzLnRocmVlU2NlbmUgPSB0aGlzLnRocmVlU2NlbmUgfHwgbmV3IFNjZW5lKCk7XHJcbiAgICB0aGlzLnNjZW5lSGVscGVyID0gbmV3IFNjZW5lSGVscGVyKHRoaXMudGhyZWVTY2VuZSk7XHJcbiAgICB0aGlzLnNjZW5lSGVscGVyLnNldHVwTWVzaEN1cnNvcigpO1xyXG4gICAgdGhpcy5zY2VuZUhlbHBlci5zZXR1cEZvY3VzTWFya2VyKCk7XHJcbiAgICB0aGlzLnNjZW5lSGVscGVyLnNldHVwQ29udHJvbFBsYW5lKCk7XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nUHJvZ3Jlc3NCYXIuc2V0Q29udGFpbmVyKHRoaXMucm9vdEVsZW1lbnQpO1xyXG4gICAgdGhpcy5sb2FkaW5nU3Bpbm5lci5zZXRDb250YWluZXIodGhpcy5yb290RWxlbWVudCk7XHJcbiAgICAvLyB0aGlzLmluZm9QYW5lbC5zZXRDb250YWluZXIodGhpcy5yb290RWxlbWVudClcclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNldHVwQ2FtZXJhKCkge1xyXG4gICAgaWYgKCF0aGlzLnVzaW5nRXh0ZXJuYWxDYW1lcmEpIHtcclxuICAgICAgY29uc3QgcmVuZGVyRGltZW5zaW9ucyA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICAgIHRoaXMuZ2V0UmVuZGVyRGltZW5zaW9ucyhyZW5kZXJEaW1lbnNpb25zKTtcclxuXHJcbiAgICAgIHRoaXMucGVyc3BlY3RpdmVDYW1lcmEgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoXHJcbiAgICAgICAgVEhSRUVfQ0FNRVJBX0ZPVixcclxuICAgICAgICByZW5kZXJEaW1lbnNpb25zLnggLyByZW5kZXJEaW1lbnNpb25zLnksXHJcbiAgICAgICAgMC4xLFxyXG4gICAgICAgIDEwMDBcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5vcnRob2dyYXBoaWNDYW1lcmEgPSBuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKFxyXG4gICAgICAgIHJlbmRlckRpbWVuc2lvbnMueCAvIC0yLFxyXG4gICAgICAgIHJlbmRlckRpbWVuc2lvbnMueCAvIDIsXHJcbiAgICAgICAgcmVuZGVyRGltZW5zaW9ucy55IC8gMixcclxuICAgICAgICByZW5kZXJEaW1lbnNpb25zLnkgLyAtMixcclxuICAgICAgICAwLjEsXHJcbiAgICAgICAgMTAwMFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmNhbWVyYSA9IHRoaXMuc3RhcnRJbk9ydGhvZ3JhcGhpY01vZGVcclxuICAgICAgICA/IHRoaXMub3J0aG9ncmFwaGljQ2FtZXJhXHJcbiAgICAgICAgOiB0aGlzLnBlcnNwZWN0aXZlQ2FtZXJhO1xyXG4gICAgICB0aGlzLmNhbWVyYS5wb3NpdGlvbi5jb3B5KHRoaXMuaW5pdGlhbENhbWVyYVBvc2l0aW9uKTtcclxuICAgICAgLy8gdGhpcy5jYW1lcmEudXAuY29weSh0aGlzLmNhbWVyYVVwKS5ub3JtYWxpemUoKVxyXG4gICAgICAvLyB0aGlzLmNhbWVyYS5sb29rQXQodGhpcy5pbml0aWFsQ2FtZXJhTG9va0F0KVxyXG4gICAgICB0aGlzLmNhbWVyYS5yb3RhdGVYKE1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmluaXRpYWxDYW1lcmFSb3RhdGlvbi54KSk7XHJcbiAgICAgIHRoaXMuY2FtZXJhLnJvdGF0ZVkoTWF0aFV0aWxzLmRlZ1RvUmFkKHRoaXMuaW5pdGlhbENhbWVyYVJvdGF0aW9uLnkpKTtcclxuICAgICAgdGhpcy5jYW1lcmEucm90YXRlWihNYXRoVXRpbHMuZGVnVG9SYWQodGhpcy5pbml0aWFsQ2FtZXJhUm90YXRpb24ueikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0dXBSZW5kZXJlcigpIHtcclxuICAgIGlmICghdGhpcy51c2luZ0V4dGVybmFsUmVuZGVyZXIpIHtcclxuICAgICAgY29uc3QgcmVuZGVyRGltZW5zaW9ucyA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICAgIHRoaXMuZ2V0UmVuZGVyRGltZW5zaW9ucyhyZW5kZXJEaW1lbnNpb25zKTtcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgV2ViR0xSZW5kZXJlcih7XHJcbiAgICAgICAgYW50aWFsaWFzOiBmYWxzZSxcclxuICAgICAgICBwcmVjaXNpb246ICdoaWdocCcsXHJcbiAgICAgICAgY2FudmFzOiB0aGlzLmNhbnZhc1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQaXhlbFJhdGlvKHRoaXMuZGV2aWNlUGl4ZWxSYXRpbyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYXV0b0NsZWFyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRDbGVhckNvbG9yKHRoaXMuYmFja2dyb3VuZENvbG9yLCAxLjApOyAvLyBzZXQgYmFja2dyb3VuZCBjb2xvciBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ1xyXG5cclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTaXplKHJlbmRlckRpbWVuc2lvbnMueCwgcmVuZGVyRGltZW5zaW9ucy55KTtcclxuXHJcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2V0UmVuZGVyRGltZW5zaW9ucyhyZW5kZXJEaW1lbnNpb25zKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFNpemUocmVuZGVyRGltZW5zaW9ucy54LCByZW5kZXJEaW1lbnNpb25zLnkpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VSZW5kZXJOZXh0RnJhbWUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnJvb3RFbGVtZW50KTtcclxuICAgICAgdGhpcy5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0dXBDb250cm9scygpIHtcclxuICAgIGlmICh0aGlzLnVzZUJ1aWx0SW5Db250cm9scykge1xyXG4gICAgICBpZiAoIXRoaXMudXNpbmdFeHRlcm5hbENhbWVyYSkge1xyXG4gICAgICAgIHRoaXMucGVyc3BlY3RpdmVDb250cm9scyA9IG5ldyBPcmJpdENvbnRyb2xzKFxyXG4gICAgICAgICAgdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYSxcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuZG9tRWxlbWVudFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5vcnRob2dyYXBoaWNDb250cm9scyA9IG5ldyBPcmJpdENvbnRyb2xzKFxyXG4gICAgICAgICAgdGhpcy5vcnRob2dyYXBoaWNDYW1lcmEsXHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnRcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbWVyYS5pc09ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gICAgICAgICAgdGhpcy5vcnRob2dyYXBoaWNDb250cm9scyA9IG5ldyBPcmJpdENvbnRyb2xzKFxyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYSxcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5kb21FbGVtZW50XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnBlcnNwZWN0aXZlQ29udHJvbHMgPSBuZXcgT3JiaXRDb250cm9scyhcclxuICAgICAgICAgICAgdGhpcy5jYW1lcmEsXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuZG9tRWxlbWVudFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgY29udHJvbHMgb2YgW1xyXG4gICAgICAgIHRoaXMub3J0aG9ncmFwaGljQ29udHJvbHMsXHJcbiAgICAgICAgdGhpcy5wZXJzcGVjdGl2ZUNvbnRyb2xzXHJcbiAgICAgIF0pIHtcclxuICAgICAgICBpZiAoY29udHJvbHMpIHtcclxuICAgICAgICAgIGNvbnRyb2xzLmxpc3RlblRvS2V5RXZlbnRzKHdpbmRvdyk7XHJcbiAgICAgICAgICBjb250cm9scy5yb3RhdGVTcGVlZCA9IDAuNTtcclxuICAgICAgICAgIGNvbnRyb2xzLm1heFBvbGFyQW5nbGUgPSBNYXRoLlBJICogMC41Oy8vICsgTWF0aC5QSSAvIDI0XHJcbiAgICAgICAgICBjb250cm9scy5taW5Qb2xhckFuZ2xlID0gTWF0aC5QSSAqIDAuNTsvLyAtIE1hdGguUEkgLyAyNFxyXG4gICAgICAgICAgY29udHJvbHMubWluQXppbXV0aEFuZ2xlID0gLU1hdGguUEkgLyA3MjtcclxuICAgICAgICAgIGNvbnRyb2xzLm1heEF6aW11dGhBbmdsZSA9IE1hdGguUEkgLyA3MjtcclxuICAgICAgICAgIGNvbnRyb2xzLmVuYWJsZURhbXBpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgY29udHJvbHMuZGFtcGluZ0ZhY3RvciA9IDAuMDU7XHJcbiAgICAgICAgICBjb250cm9scy50YXJnZXQuY29weSh0aGlzLmluaXRpYWxDYW1lcmFMb29rQXQpO1xyXG4gICAgICAgICAgY29udHJvbHMudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29udHJvbHMgPSB0aGlzLmNhbWVyYS5pc09ydGhvZ3JhcGhpY0NhbWVyYVxyXG4gICAgICAgID8gdGhpcy5vcnRob2dyYXBoaWNDb250cm9sc1xyXG4gICAgICAgIDogdGhpcy5wZXJzcGVjdGl2ZUNvbnRyb2xzO1xyXG4gICAgICB0aGlzLmNvbnRyb2xzLnVwZGF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0dXBFdmVudEhhbmRsZXJzKCkge1xyXG4gICAgaWYgKHRoaXMudXNlQnVpbHRJbkNvbnRyb2xzKSB7XHJcbiAgICAgIHRoaXMubW91c2VNb3ZlTGlzdGVuZXIgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQodGhpcyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICdwb2ludGVybW92ZScsXHJcbiAgICAgICAgdGhpcy5tb3VzZU1vdmVMaXN0ZW5lcixcclxuICAgICAgICBmYWxzZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLm1vdXNlRG93bkxpc3RlbmVyID0gdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAncG9pbnRlcmRvd24nLFxyXG4gICAgICAgIHRoaXMubW91c2VEb3duTGlzdGVuZXIsXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5tb3VzZVVwTGlzdGVuZXIgPSB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAncG9pbnRlcnVwJyxcclxuICAgICAgICB0aGlzLm1vdXNlVXBMaXN0ZW5lcixcclxuICAgICAgICBmYWxzZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmtleURvd25MaXN0ZW5lciA9IHRoaXMub25LZXlEb3duLmJpbmQodGhpcyk7XHJcbiAgICAgIC8vIOaaguaXtuWOu+aOiemUruebmOS6i+S7tueahOebkeWQrFxyXG4gICAgICAvLyB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5RG93bkxpc3RlbmVyLCBmYWxzZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUV2ZW50SGFuZGxlcnMoKSB7XHJcbiAgICBpZiAodGhpcy51c2VCdWlsdEluQ29udHJvbHMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ3BvaW50ZXJtb3ZlJyxcclxuICAgICAgICB0aGlzLm1vdXNlTW92ZUxpc3RlbmVyXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMubW91c2VNb3ZlTGlzdGVuZXIgPSBudWxsO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAncG9pbnRlcmRvd24nLFxyXG4gICAgICAgIHRoaXMubW91c2VEb3duTGlzdGVuZXJcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5tb3VzZURvd25MaXN0ZW5lciA9IG51bGw7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICdwb2ludGVydXAnLFxyXG4gICAgICAgIHRoaXMubW91c2VVcExpc3RlbmVyXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMubW91c2VVcExpc3RlbmVyID0gbnVsbDtcclxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleURvd25MaXN0ZW5lcik7XHJcbiAgICAgIHRoaXMua2V5RG93bkxpc3RlbmVyID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFJlbmRlck1vZGUocmVuZGVyTW9kZSkge1xyXG4gICAgdGhpcy5yZW5kZXJNb2RlID0gcmVuZGVyTW9kZTtcclxuICB9XHJcblxyXG4gIHNldEFjdGl2ZVNwaGVyaWNhbEhhcm1vbmljc0RlZ3JlZXMoYWN0aXZlU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlcykge1xyXG4gICAgdGhpcy5zcGxhdE1lc2gubWF0ZXJpYWwudW5pZm9ybXMuc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlLnZhbHVlID1cclxuICAgICAgYWN0aXZlU3BoZXJpY2FsSGFybW9uaWNzRGVncmVlcztcclxuICAgIHRoaXMuc3BsYXRNZXNoLm1hdGVyaWFsLnVuaWZvcm1zTmVlZFVwZGF0ZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvblNwbGF0TWVzaENoYW5nZWQoY2FsbGJhY2spIHtcclxuICAgIHRoaXMub25TcGxhdE1lc2hDaGFuZ2VkQ2FsbGJhY2sgPSBjYWxsYmFjaztcclxuICB9XHJcblxyXG4gIHRlbXBGb3J3YXJkID0gbmV3IFZlY3RvcjMoKVxyXG4gIHRlbXBNYXRyaXhMZWZ0ID0gbmV3IE1hdHJpeDQoKVxyXG4gIHRlbXBNYXRyaXhSaWdodCA9IG5ldyBNYXRyaXg0KClcclxuICBvbktleURvd24gPSAoZSkgPT4ge1xyXG4gICAgdGhpcy50ZW1wRm9yd2FyZC5zZXQoMCwgMCwgLTEpO1xyXG4gICAgdGhpcy50ZW1wRm9yd2FyZC50cmFuc2Zvcm1EaXJlY3Rpb24odGhpcy5jYW1lcmEubWF0cml4V29ybGQpO1xyXG4gICAgdGhpcy50ZW1wTWF0cml4TGVmdC5tYWtlUm90YXRpb25BeGlzKHRoaXMudGVtcEZvcndhcmQsIE1hdGguUEkgLyAxMjgpO1xyXG4gICAgdGhpcy50ZW1wTWF0cml4UmlnaHQubWFrZVJvdGF0aW9uQXhpcyh0aGlzLnRlbXBGb3J3YXJkLCAtTWF0aC5QSSAvIDEyOCk7XHJcbiAgICBzd2l0Y2ggKGUuY29kZSkge1xyXG4gICAgICBjYXNlICdLZXlHJzpcclxuICAgICAgICB0aGlzLmZvY2FsQWRqdXN0bWVudCArPSAwLjAyO1xyXG4gICAgICAgIHRoaXMuZm9yY2VSZW5kZXJOZXh0RnJhbWUoKTtcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdLZXlGJzpcclxuICAgICAgICB0aGlzLmZvY2FsQWRqdXN0bWVudCAtPSAwLjAyO1xyXG4gICAgICAgIHRoaXMuZm9yY2VSZW5kZXJOZXh0RnJhbWUoKTtcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxyXG4gICAgICAgIHRoaXMuY2FtZXJhLnVwLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzLnRlbXBNYXRyaXhMZWZ0KTtcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcclxuICAgICAgICB0aGlzLmNhbWVyYS51cC50cmFuc2Zvcm1EaXJlY3Rpb24odGhpcy50ZW1wTWF0cml4UmlnaHQpO1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ0tleUMnOlxyXG4gICAgICAgIHRoaXMuc2hvd01lc2hDdXJzb3IgPSAhdGhpcy5zaG93TWVzaEN1cnNvcjtcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdLZXlVJzpcclxuICAgICAgICB0aGlzLnNob3dDb250cm9sUGxhbmUgPSAhdGhpcy5zaG93Q29udHJvbFBsYW5lO1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ0tleUknOlxyXG4gICAgICAgIHRoaXMuc2hvd0luZm8gPSAhdGhpcy5zaG93SW5mbztcclxuICAgICAgICBpZiAodGhpcy5zaG93SW5mbykge1xyXG4gICAgICAgICAgLy8gdGhpcy5pbmZvUGFuZWwuc2hvdygpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHRoaXMuaW5mb1BhbmVsLmhpZGUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdLZXlPJzpcclxuICAgICAgICBpZiAoIXRoaXMudXNpbmdFeHRlcm5hbENhbWVyYSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRPcnRob2dyYXBoaWNNb2RlKCF0aGlzLmNhbWVyYS5pc09ydGhvZ3JhcGhpY0NhbWVyYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ0tleVAnOlxyXG4gICAgICAgIGlmICghdGhpcy51c2luZ0V4dGVybmFsQ2FtZXJhKSB7XHJcbiAgICAgICAgICB0aGlzLnNwbGF0TWVzaC5zZXRQb2ludENsb3VkTW9kZUVuYWJsZWQoXHJcbiAgICAgICAgICAgICF0aGlzLnNwbGF0TWVzaC5nZXRQb2ludENsb3VkTW9kZUVuYWJsZWQoKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnRXF1YWwnOlxyXG4gICAgICAgIGlmICghdGhpcy51c2luZ0V4dGVybmFsQ2FtZXJhKSB7XHJcbiAgICAgICAgICB0aGlzLnNwbGF0TWVzaC5zZXRTcGxhdFNjYWxlKHRoaXMuc3BsYXRNZXNoLmdldFNwbGF0U2NhbGUoKSArIDAuMDUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdNaW51cyc6XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzaW5nRXh0ZXJuYWxDYW1lcmEpIHtcclxuICAgICAgICAgIHRoaXMuc3BsYXRNZXNoLnNldFNwbGF0U2NhbGUoXHJcbiAgICAgICAgICAgIE1hdGgubWF4KHRoaXMuc3BsYXRNZXNoLmdldFNwbGF0U2NhbGUoKSAtIDAuMDUsIDAuMClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlTW92ZShtb3VzZSkge1xyXG4gICAgdGhpcy5tb3VzZVBvc2l0aW9uLnNldChtb3VzZS5vZmZzZXRYLCBtb3VzZS5vZmZzZXRZKTtcclxuICB9XHJcblxyXG4gIG9uTW91c2VEb3duKCkge1xyXG4gICAgdGhpcy5tb3VzZURvd25Qb3NpdGlvbi5jb3B5KHRoaXMubW91c2VQb3NpdGlvbik7XHJcbiAgICB0aGlzLm1vdXNlRG93blRpbWUgPSBnZXRDdXJyZW50VGltZSgpO1xyXG4gIH1cclxuXHJcbiAgb25Nb3VzZVVwID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IGNsaWNrT2Zmc2V0ID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1vdXNlKSB7XHJcbiAgICAgIGNsaWNrT2Zmc2V0LmNvcHkodGhpcy5tb3VzZVBvc2l0aW9uKS5zdWIodGhpcy5tb3VzZURvd25Qb3NpdGlvbik7XHJcbiAgICAgIGNvbnN0IG1vdXNlVXBUaW1lID0gZ2V0Q3VycmVudFRpbWUoKTtcclxuICAgICAgY29uc3Qgd2FzQ2xpY2sgPVxyXG4gICAgICAgIG1vdXNlVXBUaW1lIC0gdGhpcy5tb3VzZURvd25UaW1lIDwgMC41ICYmIGNsaWNrT2Zmc2V0Lmxlbmd0aCgpIDwgMjtcclxuICAgICAgaWYgKHdhc0NsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbk1vdXNlQ2xpY2sobW91c2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSkoKVxyXG5cclxuICBvbk1vdXNlQ2xpY2sobW91c2UpIHtcclxuICAgIHRoaXMubW91c2VQb3NpdGlvbi5zZXQobW91c2Uub2Zmc2V0WCwgbW91c2Uub2Zmc2V0WSk7XHJcbiAgICB0aGlzLmNoZWNrRm9yRm9jYWxQb2ludENoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tQb2ludFJlbmRlckRpbWVuc2lvbnMgPSBuZXcgVmVjdG9yMigpXHJcbiAgY2hlY2tQb2ludFRvTmV3Rm9jYWxQb2ludCA9IG5ldyBWZWN0b3IzKClcclxuICBjaGVja1BvaW50T3V0SGl0cyA9IFtdXHJcbiAgY2hlY2tGb3JGb2NhbFBvaW50Q2hhbmdlID0gKCkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLnRyYW5zaXRpb25pbmdDYW1lcmFUYXJnZXQpIHtcclxuICAgICAgdGhpcy5nZXRSZW5kZXJEaW1lbnNpb25zKHRoaXMuY2hlY2tQb2ludFJlbmRlckRpbWVuc2lvbnMpO1xyXG4gICAgICB0aGlzLmNoZWNrUG9pbnRPdXRIaXRzLmxlbmd0aCA9IDA7XHJcbiAgICAgIHRoaXMucmF5Y2FzdGVyLnNldEZyb21DYW1lcmFBbmRTY3JlZW5Qb3NpdGlvbihcclxuICAgICAgICB0aGlzLmNhbWVyYSxcclxuICAgICAgICB0aGlzLm1vdXNlUG9zaXRpb24sXHJcbiAgICAgICAgdGhpcy5jaGVja1BvaW50UmVuZGVyRGltZW5zaW9uc1xyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJheWNhc3Rlci5pbnRlcnNlY3RTcGxhdE1lc2godGhpcy5zcGxhdE1lc2gsIHRoaXMuY2hlY2tQb2ludE91dEhpdHMpO1xyXG4gICAgICBpZiAodGhpcy5jaGVja1BvaW50T3V0SGl0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgaGl0ID0gdGhpcy5jaGVja1BvaW50T3V0SGl0c1swXTtcclxuICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25Qb2ludCA9IGhpdC5vcmlnaW47XHJcbiAgICAgICAgdGhpcy5jaGVja1BvaW50VG9OZXdGb2NhbFBvaW50XHJcbiAgICAgICAgICAuY29weShpbnRlcnNlY3Rpb25Qb2ludClcclxuICAgICAgICAgIC5zdWIodGhpcy5jYW1lcmEucG9zaXRpb24pO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuY2hlY2tQb2ludFRvTmV3Rm9jYWxQb2ludC5sZW5ndGgoKSA+XHJcbiAgICAgICAgICBNSU5JTVVNX0RJU1RBTkNFX1RPX05FV19GT0NBTF9QT0lOVFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5wcmV2aW91c0NhbWVyYVRhcmdldC5jb3B5KHRoaXMuY29udHJvbHMudGFyZ2V0KTtcclxuICAgICAgICAgIHRoaXMubmV4dENhbWVyYVRhcmdldC5jb3B5KGludGVyc2VjdGlvblBvaW50KTtcclxuICAgICAgICAgIHRoaXMudHJhbnNpdGlvbmluZ0NhbWVyYVRhcmdldCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zaXRpb25pbmdDYW1lcmFUYXJnZXRTdGFydFRpbWUgPSBnZXRDdXJyZW50VGltZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVuZGVyRGltZW5zaW9ucyhvdXREaW1lbnNpb25zKSB7XHJcbiAgICBpZiAodGhpcy5yb290RWxlbWVudCkge1xyXG4gICAgICBvdXREaW1lbnNpb25zLnggPSB0aGlzLnJvb3RFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICBvdXREaW1lbnNpb25zLnkgPSB0aGlzLnJvb3RFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuZ2V0U2l6ZShvdXREaW1lbnNpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE9ydGhvZ3JhcGhpY01vZGUob3J0aG9ncmFwaGljTW9kZSkge1xyXG4gICAgaWYgKG9ydGhvZ3JhcGhpY01vZGUgPT09IHRoaXMuY2FtZXJhLmlzT3J0aG9ncmFwaGljQ2FtZXJhKSByZXR1cm5cclxuICAgIGNvbnN0IGZyb21DYW1lcmEgPSB0aGlzLmNhbWVyYTtcclxuICAgIGNvbnN0IHRvQ2FtZXJhID0gb3J0aG9ncmFwaGljTW9kZVxyXG4gICAgICA/IHRoaXMub3J0aG9ncmFwaGljQ2FtZXJhXHJcbiAgICAgIDogdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYTtcclxuICAgIHRvQ2FtZXJhLnBvc2l0aW9uLmNvcHkoZnJvbUNhbWVyYS5wb3NpdGlvbik7XHJcbiAgICB0b0NhbWVyYS51cC5jb3B5KGZyb21DYW1lcmEudXApO1xyXG4gICAgdG9DYW1lcmEucm90YXRpb24uY29weShmcm9tQ2FtZXJhLnJvdGF0aW9uKTtcclxuICAgIHRvQ2FtZXJhLnF1YXRlcm5pb24uY29weShmcm9tQ2FtZXJhLnF1YXRlcm5pb24pO1xyXG4gICAgdG9DYW1lcmEubWF0cml4LmNvcHkoZnJvbUNhbWVyYS5tYXRyaXgpO1xyXG4gICAgdGhpcy5jYW1lcmEgPSB0b0NhbWVyYTtcclxuXHJcbiAgICBpZiAodGhpcy5jb250cm9scykge1xyXG4gICAgICBjb25zdCByZXNldENvbnRyb2xzID0gKGNvbnRyb2xzKSA9PiB7XHJcbiAgICAgICAgY29udHJvbHMuc2F2ZVN0YXRlKCk7XHJcbiAgICAgICAgY29udHJvbHMucmVzZXQoKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IGZyb21Db250cm9scyA9IHRoaXMuY29udHJvbHM7XHJcbiAgICAgIGNvbnN0IHRvQ29udHJvbHMgPSBvcnRob2dyYXBoaWNNb2RlXHJcbiAgICAgICAgPyB0aGlzLm9ydGhvZ3JhcGhpY0NvbnRyb2xzXHJcbiAgICAgICAgOiB0aGlzLnBlcnNwZWN0aXZlQ29udHJvbHM7XHJcblxyXG4gICAgICByZXNldENvbnRyb2xzKHRvQ29udHJvbHMpO1xyXG4gICAgICByZXNldENvbnRyb2xzKGZyb21Db250cm9scyk7XHJcblxyXG4gICAgICB0b0NvbnRyb2xzLnRhcmdldC5jb3B5KGZyb21Db250cm9scy50YXJnZXQpO1xyXG4gICAgICBpZiAob3J0aG9ncmFwaGljTW9kZSkge1xyXG4gICAgICAgIFZpZXdlci5zZXRDYW1lcmFab29tRnJvbVBvc2l0aW9uKHRvQ2FtZXJhLCBmcm9tQ2FtZXJhLCBmcm9tQ29udHJvbHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIFZpZXdlci5zZXRDYW1lcmFQb3NpdGlvbkZyb21ab29tKHRvQ2FtZXJhLCBmcm9tQ2FtZXJhLCB0b0NvbnRyb2xzKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvbnRyb2xzID0gdG9Db250cm9scztcclxuICAgICAgdGhpcy5jYW1lcmEubG9va0F0KHRoaXMuY29udHJvbHMudGFyZ2V0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXRDYW1lcmFQb3NpdGlvbkZyb21ab29tID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IHRlbXBWZWN0b3IgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAocG9zaXRpb25DYW1lcmEsIHpvb21lZENhbWVyYSwgY29udHJvbHMpIHtcclxuICAgICAgY29uc3QgdG9Mb29rQXREaXN0YW5jZSA9IDEgLyAoem9vbWVkQ2FtZXJhLnpvb20gKiAwLjAwMSk7XHJcbiAgICAgIHRlbXBWZWN0b3JcclxuICAgICAgICAuY29weShjb250cm9scy50YXJnZXQpXHJcbiAgICAgICAgLnN1Yihwb3NpdGlvbkNhbWVyYS5wb3NpdGlvbilcclxuICAgICAgICAubm9ybWFsaXplKClcclxuICAgICAgICAubXVsdGlwbHlTY2FsYXIodG9Mb29rQXREaXN0YW5jZSlcclxuICAgICAgICAubmVnYXRlKCk7XHJcbiAgICAgIHBvc2l0aW9uQ2FtZXJhLnBvc2l0aW9uLmNvcHkoY29udHJvbHMudGFyZ2V0KS5hZGQodGVtcFZlY3Rvcik7XHJcbiAgICB9XHJcbiAgfSkoKVxyXG5cclxuICBzdGF0aWMgc2V0Q2FtZXJhWm9vbUZyb21Qb3NpdGlvbiA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCB0ZW1wVmVjdG9yID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHpvb21DYW1lcmEsIHBvc2l0aW9uWmFtZXJhLCBjb250cm9scykge1xyXG4gICAgICBjb25zdCB0b0xvb2tBdERpc3RhbmNlID0gdGVtcFZlY3RvclxyXG4gICAgICAgIC5jb3B5KGNvbnRyb2xzLnRhcmdldClcclxuICAgICAgICAuc3ViKHBvc2l0aW9uWmFtZXJhLnBvc2l0aW9uKVxyXG4gICAgICAgIC5sZW5ndGgoKTtcclxuICAgICAgem9vbUNhbWVyYS56b29tID0gMSAvICh0b0xvb2tBdERpc3RhbmNlICogMC4wMDEpO1xyXG4gICAgfVxyXG4gIH0pKClcclxuXHJcbiAgdXBkYXRlU3BsYXRNZXNoID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IHJlbmRlckRpbWVuc2lvbnMgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmICghdGhpcy5zcGxhdE1lc2gpIHJldHVyblxyXG4gICAgICBjb25zdCBzcGxhdENvdW50ID0gdGhpcy5zcGxhdE1lc2guZ2V0U3BsYXRDb3VudCgpO1xyXG4gICAgICBpZiAoc3BsYXRDb3VudCA+IDApIHtcclxuICAgICAgICB0aGlzLnNwbGF0TWVzaC51cGRhdGVWaXNpYmxlUmVnaW9uRmFkZURpc3RhbmNlKHRoaXMuc2NlbmVSZXZlYWxNb2RlKTtcclxuICAgICAgICB0aGlzLnNwbGF0TWVzaC51cGRhdGVUcmFuc2Zvcm1zKCk7XHJcbiAgICAgICAgdGhpcy5nZXRSZW5kZXJEaW1lbnNpb25zKHJlbmRlckRpbWVuc2lvbnMpO1xyXG4gICAgICAgIGNvbnN0IGZvY2FsTGVuZ3RoWCA9XHJcbiAgICAgICAgICB0aGlzLmNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzBdICpcclxuICAgICAgICAgIDAuNSAqXHJcbiAgICAgICAgICB0aGlzLmRldmljZVBpeGVsUmF0aW8gKlxyXG4gICAgICAgICAgcmVuZGVyRGltZW5zaW9ucy54O1xyXG4gICAgICAgIGNvbnN0IGZvY2FsTGVuZ3RoWSA9XHJcbiAgICAgICAgICB0aGlzLmNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzVdICpcclxuICAgICAgICAgIDAuNSAqXHJcbiAgICAgICAgICB0aGlzLmRldmljZVBpeGVsUmF0aW8gKlxyXG4gICAgICAgICAgcmVuZGVyRGltZW5zaW9ucy55O1xyXG5cclxuICAgICAgICBjb25zdCBmb2NhbE11bHRpcGxpZXIgPSB0aGlzLmNhbWVyYS5pc09ydGhvZ3JhcGhpY0NhbWVyYVxyXG4gICAgICAgICAgPyAxLjAgLyB0aGlzLmRldmljZVBpeGVsUmF0aW9cclxuICAgICAgICAgIDogMS4wO1xyXG4gICAgICAgIGNvbnN0IGZvY2FsQWRqdXN0bWVudCA9IHRoaXMuZm9jYWxBZGp1c3RtZW50ICogZm9jYWxNdWx0aXBsaWVyO1xyXG4gICAgICAgIGNvbnN0IGludmVyc2VGb2NhbEFkanVzdG1lbnQgPSAxLjAgLyBmb2NhbEFkanVzdG1lbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuYWRqdXN0Rm9yV2ViWFJTdGVyZW8ocmVuZGVyRGltZW5zaW9ucyk7XHJcbiAgICAgICAgdGhpcy5zcGxhdE1lc2gudXBkYXRlVW5pZm9ybXMoXHJcbiAgICAgICAgICByZW5kZXJEaW1lbnNpb25zLFxyXG4gICAgICAgICAgZm9jYWxMZW5ndGhYICogZm9jYWxBZGp1c3RtZW50LFxyXG4gICAgICAgICAgZm9jYWxMZW5ndGhZICogZm9jYWxBZGp1c3RtZW50LFxyXG4gICAgICAgICAgdGhpcy5jYW1lcmEuaXNPcnRob2dyYXBoaWNDYW1lcmEsXHJcbiAgICAgICAgICB0aGlzLmNhbWVyYS56b29tIHx8IDEuMCxcclxuICAgICAgICAgIGludmVyc2VGb2NhbEFkanVzdG1lbnRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSkoKVxyXG5cclxuICBhZGp1c3RGb3JXZWJYUlN0ZXJlbyhyZW5kZXJEaW1lbnNpb25zKSB7XHJcbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IGEgbGVzcyBoYWNreSB3YXkgdG8gZGV0ZXJtaW5lIGlmIHN0ZXJlbyByZW5kZXJpbmcgaXMgYWN0aXZlXHJcbiAgICBpZiAodGhpcy5jYW1lcmEgJiYgdGhpcy53ZWJYUkFjdGl2ZSkge1xyXG4gICAgICBjb25zdCB4ckNhbWVyYSA9IHRoaXMucmVuZGVyZXIueHIuZ2V0Q2FtZXJhKCk7XHJcbiAgICAgIGNvbnN0IHhyQ2FtZXJhUHJvajAwID0geHJDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1swXTtcclxuICAgICAgY29uc3QgY2FtZXJhUHJvajAwID0gdGhpcy5jYW1lcmEucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1swXTtcclxuICAgICAgcmVuZGVyRGltZW5zaW9ucy54ICo9IGNhbWVyYVByb2owMCAvIHhyQ2FtZXJhUHJvajAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNMb2FkaW5nT3JVbmxvYWRpbmcoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnNwbGF0U2NlbmVEb3dubG9hZFByb21pc2VzKS5sZW5ndGggPiAwIHx8XHJcbiAgICAgIHRoaXMuc3BsYXRTY2VuZURvd25sb2FkQW5kQnVpbGRQcm9taXNlICE9PSBudWxsIHx8XHJcbiAgICAgIHRoaXMuc3BsYXRTY2VuZVJlbW92YWxQcm9taXNlICE9PSBudWxsXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBpc0Rpc3Bvc2luZ09yRGlzcG9zZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwb3NpbmcgfHwgdGhpcy5kaXNwb3NlZFxyXG4gIH1cclxuXHJcbiAgYWRkU3BsYXRTY2VuZURvd25sb2FkQ29udHJvbGxlcihjb250cm9sbGVyKSB7XHJcbiAgICB0aGlzLnNwbGF0U2NlbmVEb3dubG9hZENvbnRyb2xsZXJzLnB1c2goY29udHJvbGxlcik7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTcGxhdFNjZW5lRG93bmxvYWRDb250cm9sbGVyKGNvbnRyb2xsZXIpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zcGxhdFNjZW5lRG93bmxvYWRDb250cm9sbGVycy5pbmRleE9mKGNvbnRyb2xsZXIpO1xyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLnNwbGF0U2NlbmVEb3dubG9hZENvbnRyb2xsZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRTcGxhdFNjZW5lRG93bmxvYWRQcm9taXNlKHByb21pc2UpIHtcclxuICAgIHRoaXMuc3BsYXRTY2VuZURvd25sb2FkUHJvbWlzZXNbcHJvbWlzZS5pZF0gPSBwcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU3BsYXRTY2VuZURvd25sb2FkUHJvbWlzZShwcm9taXNlKSB7XHJcbiAgICBkZWxldGUgdGhpcy5zcGxhdFNjZW5lRG93bmxvYWRQcm9taXNlc1twcm9taXNlLmlkXTtcclxuICB9XHJcblxyXG4gIHNldFNwbGF0U2NlbmVEb3dubG9hZEFuZEJ1aWxkUHJvbWlzZShwcm9taXNlKSB7XHJcbiAgICB0aGlzLnNwbGF0U2NlbmVEb3dubG9hZEFuZEJ1aWxkUHJvbWlzZSA9IHByb21pc2U7XHJcbiAgfVxyXG5cclxuICBjbGVhclNwbGF0U2NlbmVEb3dubG9hZEFuZEJ1aWxkUHJvbWlzZSgpIHtcclxuICAgIHRoaXMuc3BsYXRTY2VuZURvd25sb2FkQW5kQnVpbGRQcm9taXNlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIHNwbGF0IHNjZW5lIHRvIHRoZSB2aWV3ZXIgYW5kIGRpc3BsYXkgYW55IGxvYWRpbmcgVUkgaWYgYXBwcm9wcmlhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCB0byBzcGxhdCBzY2VuZSB0byBiZSBsb2FkZWRcclxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyB7XHJcbiAgICpcclxuICAgKiAgICAgICAgIHNwbGF0QWxwaGFSZW1vdmFsVGhyZXNob2xkOiBJZ25vcmUgYW55IHNwbGF0cyB3aXRoIGFuIGFscGhhIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKHZhbGlkIHJhbmdlOiAwIC0gMjU1KSwgZGVmYXVsdHMgdG8gMVxyXG4gICAqXHJcbiAgICogICAgICAgICBzaG93TG9hZGluZ1VJOiAgICAgICAgIERpc3BsYXkgYSBsb2FkaW5nIHNwaW5uZXIgd2hpbGUgdGhlIHNjZW5lIGlzIGxvYWRpbmcsIGRlZmF1bHRzIHRvIHRydWVcclxuICAgKlxyXG4gICAqICAgICAgICAgcG9zaXRpb24gKEFycmF5PG51bWJlcj4pOiAgIFBvc2l0aW9uIG9mIHRoZSBzY2VuZSwgYWN0cyBhcyBhbiBvZmZzZXQgZnJvbSBpdHMgZGVmYXVsdCBwb3NpdGlvbiwgZGVmYXVsdHMgdG8gWzAsIDAsIDBdXHJcbiAgICpcclxuICAgKiAgICAgICAgIHJvdGF0aW9uIChBcnJheTxudW1iZXI+KTogICBSb3RhdGlvbiBvZiB0aGUgc2NlbmUgcmVwcmVzZW50ZWQgYXMgYSBxdWF0ZXJuaW9uLCBkZWZhdWx0cyB0byBbMCwgMCwgMCwgMV1cclxuICAgKlxyXG4gICAqICAgICAgICAgc2NhbGUgKEFycmF5PG51bWJlcj4pOiAgICAgIFNjZW5lJ3Mgc2NhbGUsIGRlZmF1bHRzIHRvIFsxLCAxLCAxXVxyXG4gICAqXHJcbiAgICogICAgICAgICBvblByb2dyZXNzOiAgICAgICAgICAgICAgICAgRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFzIGZpbGUgZGF0YSBhcmUgcmVjZWl2ZWQsIG9yIG90aGVyIHByb2Nlc3Npbmcgb2NjdXJzXHJcbiAgICpcclxuICAgKiAgICAgICAgIGhlYWRlcnM6ICAgICAgICAgICAgICAgICAgICBPcHRpb25hbCBIVFRQIGhlYWRlcnMgdG8gYmUgc2VudCBhbG9uZyB3aXRoIHNwbGF0IHJlcXVlc3RzXHJcbiAgICogfVxyXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XHJcbiAgICovXHJcbiAgYWRkU3BsYXRTY2VuZShwYXRoLCBvcHRpb25zID0ge30pIHtcclxuICAgIGlmICh0aGlzLmlzTG9hZGluZ09yVW5sb2FkaW5nKCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdDYW5ub3QgYWRkIHNwbGF0IHNjZW5lIHdoaWxlIGFub3RoZXIgbG9hZCBvciB1bmxvYWQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4nXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Rpc3Bvc2luZ09yRGlzcG9zZWQoKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhZGQgc3BsYXQgc2NlbmUgYWZ0ZXIgZGlzcG9zZSgpIGlzIGNhbGxlZC4nKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgb3B0aW9ucy5wcm9ncmVzc2l2ZUxvYWQgJiZcclxuICAgICAgdGhpcy5zcGxhdE1lc2guc2NlbmVzICYmXHJcbiAgICAgIHRoaXMuc3BsYXRNZXNoLnNjZW5lcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgJ2FkZFNwbGF0U2NlbmUoKTogXCJwcm9ncmVzc2l2ZUxvYWRcIiBvcHRpb24gaWdub3JlIGJlY2F1c2UgdGhlcmUgYXJlIG11bHRpcGxlIHNwbGF0IHNjZW5lcydcclxuICAgICAgKTtcclxuICAgICAgb3B0aW9ucy5wcm9ncmVzc2l2ZUxvYWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmb3JtYXQgPVxyXG4gICAgICBvcHRpb25zLmZvcm1hdCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuZm9ybWF0ICE9PSBudWxsXHJcbiAgICAgICAgPyBvcHRpb25zLmZvcm1hdFxyXG4gICAgICAgIDogc2NlbmVGb3JtYXRGcm9tUGF0aChwYXRoKTtcclxuICAgIGNvbnN0IHByb2dyZXNzaXZlTG9hZCA9XHJcbiAgICAgIFZpZXdlci5pc1Byb2dyZXNzaXZlbHlMb2FkYWJsZShmb3JtYXQpICYmIG9wdGlvbnMucHJvZ3Jlc3NpdmVMb2FkO1xyXG4gICAgY29uc3Qgc2hvd0xvYWRpbmdVSSA9XHJcbiAgICAgIG9wdGlvbnMuc2hvd0xvYWRpbmdVSSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc2hvd0xvYWRpbmdVSSAhPT0gbnVsbFxyXG4gICAgICAgID8gb3B0aW9ucy5zaG93TG9hZGluZ1VJXHJcbiAgICAgICAgOiB0cnVlO1xyXG5cclxuICAgIGxldCBsb2FkaW5nVUlUYXNrSWQgPSBudWxsO1xyXG4gICAgaWYgKHNob3dMb2FkaW5nVUkpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3Bpbm5lci5yZW1vdmVBbGxUYXNrcygpO1xyXG4gICAgICBsb2FkaW5nVUlUYXNrSWQgPSB0aGlzLmxvYWRpbmdTcGlubmVyLmFkZFRhc2soJ0Rvd25sb2FkaW5nLi4uJyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBoaWRlTG9hZGluZ1VJID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRpbmdQcm9ncmVzc0Jhci5oaWRlKCk7XHJcbiAgICAgIHRoaXMubG9hZGluZ1NwaW5uZXIucmVtb3ZlQWxsVGFza3MoKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25Qcm9ncmVzc1VJVXBkYXRlID0gKFxyXG4gICAgICBwZXJjZW50Q29tcGxldGUsXHJcbiAgICAgIHBlcmNlbnRDb21wbGV0ZUxhYmVsLFxyXG4gICAgICBsb2FkZXJTdGF0dXNcclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoc2hvd0xvYWRpbmdVSSkge1xyXG4gICAgICAgIGlmIChsb2FkZXJTdGF0dXMgPT09IExvYWRlclN0YXR1cy5Eb3dubG9hZGluZykge1xyXG4gICAgICAgICAgaWYgKHBlcmNlbnRDb21wbGV0ZSA9PSAxMDApIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3Bpbm5lci5zZXRNZXNzYWdlRm9yVGFzayhcclxuICAgICAgICAgICAgICBsb2FkaW5nVUlUYXNrSWQsXHJcbiAgICAgICAgICAgICAgJ0Rvd25sb2FkIGNvbXBsZXRlISdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9ncmVzc2l2ZUxvYWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdTcGlubmVyLnNldE1lc3NhZ2VGb3JUYXNrKFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZ1VJVGFza0lkLFxyXG4gICAgICAgICAgICAgICAgJ0Rvd25sb2FkaW5nIHNwbGF0cy4uLidcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IHBlcmNlbnRDb21wbGV0ZUxhYmVsXHJcbiAgICAgICAgICAgICAgICA/IGA6ICR7cGVyY2VudENvbXBsZXRlTGFiZWx9YFxyXG4gICAgICAgICAgICAgICAgOiBgLi4uYDtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdTcGlubmVyLnNldE1lc3NhZ2VGb3JUYXNrKFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZ1VJVGFza0lkLFxyXG4gICAgICAgICAgICAgICAgYERvd25sb2FkaW5nJHtzdWZmaXh9YFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGxvYWRlclN0YXR1cyA9PT0gTG9hZGVyU3RhdHVzLlByb2Nlc3NpbmcpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdsb2FkZXJTdGF0dXMgPT09IExvYWRlclN0YXR1cy5Qcm9jZXNzaW5nJyk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTcGlubmVyLnNldE1lc3NhZ2VGb3JUYXNrKFxyXG4gICAgICAgICAgICBsb2FkaW5nVUlUYXNrSWQsXHJcbiAgICAgICAgICAgICdQcm9jZXNzaW5nIHNwbGF0cy4uLidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBkb3dubG9hZERvbmUgPSBmYWxzZTtcclxuICAgIGxldCBkb3dubG9hZGVkUGVyY2VudGFnZSA9IDA7XHJcbiAgICBjb25zdCBzcGxhdEJ1ZmZlcnNBZGRlZFVJVXBkYXRlID0gKGZpcnN0QnVpbGQsIGZpbmFsQnVpbGQpID0+IHtcclxuICAgICAgaWYgKHNob3dMb2FkaW5nVUkpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZmlyc3RCdWlsZCAmJiBwcm9ncmVzc2l2ZUxvYWQpIHx8XHJcbiAgICAgICAgICAoZmluYWxCdWlsZCAmJiAhcHJvZ3Jlc3NpdmVMb2FkKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3Bpbm5lci5yZW1vdmVUYXNrKGxvYWRpbmdVSVRhc2tJZCk7XHJcbiAgICAgICAgICBpZiAoIWZpbmFsQnVpbGQgJiYgIWRvd25sb2FkRG9uZSkgdGhpcy5sb2FkaW5nUHJvZ3Jlc3NCYXIuc2hvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvZ3Jlc3NpdmVMb2FkKSB7XHJcbiAgICAgICAgICBpZiAoZmluYWxCdWlsZCkge1xyXG4gICAgICAgICAgICBkb3dubG9hZERvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdQcm9ncmVzc0Jhci5oaWRlKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdQcm9ncmVzc0Jhci5zZXRQcm9ncmVzcyhkb3dubG9hZGVkUGVyY2VudGFnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9uUHJvZ3Jlc3MgPSAoXHJcbiAgICAgIHBlcmNlbnRDb21wbGV0ZSxcclxuICAgICAgcGVyY2VudENvbXBsZXRlTGFiZWwsXHJcbiAgICAgIGxvYWRlclN0YXR1c1xyXG4gICAgKSA9PiB7XHJcbiAgICAgIGRvd25sb2FkZWRQZXJjZW50YWdlID0gcGVyY2VudENvbXBsZXRlO1xyXG4gICAgICBvblByb2dyZXNzVUlVcGRhdGUocGVyY2VudENvbXBsZXRlLCBwZXJjZW50Q29tcGxldGVMYWJlbCwgbG9hZGVyU3RhdHVzKTtcclxuICAgICAgaWYgKG9wdGlvbnMub25Qcm9ncmVzcylcclxuICAgICAgICBvcHRpb25zLm9uUHJvZ3Jlc3MocGVyY2VudENvbXBsZXRlLCBwZXJjZW50Q29tcGxldGVMYWJlbCwgbG9hZGVyU3RhdHVzKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgYnVpbGRTZWN0aW9uID0gKHNwbGF0QnVmZmVyLCBmaXJzdEJ1aWxkLCBmaW5hbEJ1aWxkKSA9PiB7XHJcbiAgICAgIGlmICghcHJvZ3Jlc3NpdmVMb2FkICYmIG9wdGlvbnMub25Qcm9ncmVzcylcclxuICAgICAgICBvcHRpb25zLm9uUHJvZ3Jlc3MoMCwgJzAlJywgTG9hZGVyU3RhdHVzLlByb2Nlc3NpbmcpO1xyXG4gICAgICBjb25zdCBhZGRTcGxhdEJ1ZmZlck9wdGlvbnMgPSB7XHJcbiAgICAgICAgcm90YXRpb246IG9wdGlvbnMucm90YXRpb24gfHwgb3B0aW9ucy5vcmllbnRhdGlvbixcclxuICAgICAgICBwb3NpdGlvbjogb3B0aW9ucy5wb3NpdGlvbixcclxuICAgICAgICBzY2FsZTogb3B0aW9ucy5zY2FsZSxcclxuICAgICAgICBzcGxhdEFscGhhUmVtb3ZhbFRocmVzaG9sZDogb3B0aW9ucy5zcGxhdEFscGhhUmVtb3ZhbFRocmVzaG9sZFxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gdGhpcy5hZGRTcGxhdEJ1ZmZlcnMoXHJcbiAgICAgICAgW3NwbGF0QnVmZmVyXSxcclxuICAgICAgICBbYWRkU3BsYXRCdWZmZXJPcHRpb25zXSxcclxuICAgICAgICBmaW5hbEJ1aWxkLFxyXG4gICAgICAgIGZpcnN0QnVpbGQgJiYgc2hvd0xvYWRpbmdVSSxcclxuICAgICAgICBzaG93TG9hZGluZ1VJLFxyXG4gICAgICAgIHByb2dyZXNzaXZlTG9hZCxcclxuICAgICAgICBwcm9ncmVzc2l2ZUxvYWRcclxuICAgICAgKS50aGVuKCgpID0+IHtcclxuICAgICAgICBpZiAoIXByb2dyZXNzaXZlTG9hZCAmJiBvcHRpb25zLm9uUHJvZ3Jlc3MpXHJcbiAgICAgICAgICBvcHRpb25zLm9uUHJvZ3Jlc3MoMTAwLCAnMTAwJScsIExvYWRlclN0YXR1cy5Qcm9jZXNzaW5nKTtcclxuICAgICAgICBzcGxhdEJ1ZmZlcnNBZGRlZFVJVXBkYXRlKGZpcnN0QnVpbGQsIGZpbmFsQnVpbGQpO1xyXG4gICAgICB9KVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBsb2FkRnVuYyA9IHByb2dyZXNzaXZlTG9hZFxyXG4gICAgICA/IHRoaXMuZG93bmxvYWRBbmRCdWlsZFNpbmdsZVNwbGF0U2NlbmVQcm9ncmVzc2l2ZUxvYWQuYmluZCh0aGlzKVxyXG4gICAgICA6IHRoaXMuZG93bmxvYWRBbmRCdWlsZFNpbmdsZVNwbGF0U2NlbmVTdGFuZGFyZExvYWQuYmluZCh0aGlzKTtcclxuICAgIHJldHVybiBsb2FkRnVuYyhcclxuICAgICAgcGF0aCxcclxuICAgICAgZm9ybWF0LFxyXG4gICAgICBvcHRpb25zLnNwbGF0QWxwaGFSZW1vdmFsVGhyZXNob2xkLFxyXG4gICAgICBidWlsZFNlY3Rpb24uYmluZCh0aGlzKSxcclxuICAgICAgb25Qcm9ncmVzcyxcclxuICAgICAgaGlkZUxvYWRpbmdVSS5iaW5kKHRoaXMpLFxyXG4gICAgICBvcHRpb25zLmhlYWRlcnNcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERvd25sb2FkIGEgc2luZ2xlIHNwbGF0IHNjZW5lLCBjb252ZXJ0IHRvIHNwbGF0IGJ1ZmZlciBhbmQgdGhlbiByZWJ1aWxkIHRoZSB2aWV3ZXIncyBzcGxhdCBtZXNoXHJcbiAgICogYnkgY2FsbGluZyAnYnVpbGRGdW5jJyAtLSBhbGwgYmVmb3JlIGRpc3BsYXlpbmcgdGhlIHNjZW5lLiBBbHNvIHNldHMvY2xlYXJzIHJlbGV2YW50IGluc3RhbmNlIHN5bmNocm9uaXphdGlvbiBvYmplY3RzLFxyXG4gICAqIGFuZCBjYWxscyBhcHByb3ByaWF0ZSBmdW5jdGlvbnMgb24gc3VjY2VzcyBvciBmYWlsdXJlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdG8gc3BsYXQgc2NlbmUgdG8gYmUgbG9hZGVkXHJcbiAgICogQHBhcmFtIHtTY2VuZUZvcm1hdH0gZm9ybWF0IEZvcm1hdCBvZiB0aGUgc3BsYXQgc2NlbmUgZmlsZVxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzcGxhdEFscGhhUmVtb3ZhbFRocmVzaG9sZCBJZ25vcmUgYW55IHNwbGF0cyB3aXRoIGFuIGFscGhhIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkIHZhbHVlICh2YWxpZCByYW5nZTogMCAtIDI1NSlcclxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBidWlsZEZ1bmMgRnVuY3Rpb24gdG8gYnVpbGQgdGhlIHZpZXdlcidzIHNwbGF0IG1lc2ggd2l0aCB0aGUgZG93bmxvYWRlZCBzcGxhdCBidWZmZXJcclxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvblByb2dyZXNzIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhcyBmaWxlIGRhdGEgYXJlIHJlY2VpdmVkLCBvciBvdGhlciBwcm9jZXNzaW5nIG9jY3Vyc1xyXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uRXhjZXB0aW9uIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGV4Y2VwdGlvbiBvY2N1cnNcclxuICAgKiBAcGFyYW0ge29iamVjdH0gaGVhZGVycyBPcHRpb25hbCBIVFRQIGhlYWRlcnMgdG8gcGFzcyB0byB1c2UgZm9yIGRvd25sb2FkaW5nIHNwbGF0IHNjZW5lXHJcbiAgICogQHJldHVybiB7UHJvbWlzZX1cclxuICAgKi9cclxuICBkb3dubG9hZEFuZEJ1aWxkU2luZ2xlU3BsYXRTY2VuZVN0YW5kYXJkTG9hZChcclxuICAgIHBhdGgsXHJcbiAgICBmb3JtYXQsXHJcbiAgICBzcGxhdEFscGhhUmVtb3ZhbFRocmVzaG9sZCxcclxuICAgIGJ1aWxkRnVuYyxcclxuICAgIG9uUHJvZ3Jlc3MsXHJcbiAgICBvbkV4Y2VwdGlvbixcclxuICAgIGhlYWRlcnNcclxuICApIHtcclxuICAgIGNvbnN0IGRvd25sb2FkUHJvbWlzZSA9IHRoaXMuZG93bmxvYWRTcGxhdFNjZW5lVG9TcGxhdEJ1ZmZlcihcclxuICAgICAgcGF0aCxcclxuICAgICAgc3BsYXRBbHBoYVJlbW92YWxUaHJlc2hvbGQsXHJcbiAgICAgIG9uUHJvZ3Jlc3MsXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIGZvcm1hdCxcclxuICAgICAgaGVhZGVyc1xyXG4gICAgKTtcclxuXHJcbiAgICAvLyBDcmVhdGUgYSBwcm9taXNlIHRoYXQgY2FuIGJlIHJlc29sdmVkL3JlamVjdGVkIGV4dGVybmFsbHksIHdpdGggYWJvcnQgY2FwYWJpbGl0eVxyXG4gICAgY29uc3QgZG93bmxvYWRBbmRCdWlsZFByb21pc2UgPSBhYm9ydGFibGVQcm9taXNlV2l0aEV4dHJhY3RlZENvbXBvbmVudHMoXHJcbiAgICAgIGRvd25sb2FkUHJvbWlzZS5hYm9ydCA/IGRvd25sb2FkUHJvbWlzZS5hYm9ydC5iaW5kKGRvd25sb2FkUHJvbWlzZSkgOiB1bmRlZmluZWRcclxuICAgICk7XHJcblxyXG4gICAgZG93bmxvYWRQcm9taXNlXHJcbiAgICAgIC50aGVuKChzcGxhdEJ1ZmZlcikgPT4ge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlU3BsYXRTY2VuZURvd25sb2FkUHJvbWlzZShkb3dubG9hZFByb21pc2UpO1xyXG4gICAgICAgIHJldHVybiBidWlsZEZ1bmMoc3BsYXRCdWZmZXIsIHRydWUsIHRydWUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgZG93bmxvYWRBbmRCdWlsZFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgdGhpcy5jbGVhclNwbGF0U2NlbmVEb3dubG9hZEFuZEJ1aWxkUHJvbWlzZSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgIGlmIChvbkV4Y2VwdGlvbikgb25FeGNlcHRpb24oKTtcclxuICAgICAgICB0aGlzLmNsZWFyU3BsYXRTY2VuZURvd25sb2FkQW5kQnVpbGRQcm9taXNlKCk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVTcGxhdFNjZW5lRG93bmxvYWRQcm9taXNlKGRvd25sb2FkUHJvbWlzZSk7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPVxyXG4gICAgICAgICAgKGUgaW5zdGFuY2VvZiBBYm9ydGVkUHJvbWlzZUVycm9yIHx8IGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKVxyXG4gICAgICAgICAgICA/IGVcclxuICAgICAgICAgICAgOiBuZXcgRXJyb3IoYFZpZXdlcjo6YWRkU3BsYXRTY2VuZSAtPiBDb3VsZCBub3QgbG9hZCBmaWxlICR7cGF0aH1gKTtcclxuICAgICAgICBkb3dubG9hZEFuZEJ1aWxkUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZFNwbGF0U2NlbmVEb3dubG9hZFByb21pc2UoZG93bmxvYWRQcm9taXNlKTtcclxuICAgIHRoaXMuc2V0U3BsYXRTY2VuZURvd25sb2FkQW5kQnVpbGRQcm9taXNlKGRvd25sb2FkQW5kQnVpbGRQcm9taXNlLnByb21pc2UpO1xyXG5cclxuICAgIHJldHVybiBkb3dubG9hZEFuZEJ1aWxkUHJvbWlzZS5wcm9taXNlXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEb3dubG9hZCBhIHNpbmdsZSBzcGxhdCBzY2VuZSBhbmQgY29udmVydCB0byBzcGxhdCBidWZmZXIgaW4gYSBwcm9ncmVzc2l2ZSBtYW5uZXIsIGFsbG93aW5nIHJlbmRlcmluZyBhcyB0aGUgZmlsZSBkb3dubG9hZHMuXHJcbiAgICogQXMgZWFjaCBzZWN0aW9uIGlzIGRvd25sb2FkZWQsIHRoZSB2aWV3ZXIncyBzcGxhdCBtZXNoIGlzIHJlYnVpbHQgYnkgY2FsbGluZyAnYnVpbGRGdW5jJ1xyXG4gICAqIEFsc28gc2V0cy9jbGVhcnMgcmVsZXZhbnQgaW5zdGFuY2Ugc3luY2hyb25pemF0aW9uIG9iamVjdHMsIGFuZCBjYWxscyBhcHByb3ByaWF0ZSBmdW5jdGlvbnMgb24gc3VjY2VzcyBvciBmYWlsdXJlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdG8gc3BsYXQgc2NlbmUgdG8gYmUgbG9hZGVkXHJcbiAgICogQHBhcmFtIHtTY2VuZUZvcm1hdH0gZm9ybWF0IEZvcm1hdCBvZiB0aGUgc3BsYXQgc2NlbmUgZmlsZVxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzcGxhdEFscGhhUmVtb3ZhbFRocmVzaG9sZCBJZ25vcmUgYW55IHNwbGF0cyB3aXRoIGFuIGFscGhhIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkIHZhbHVlICh2YWxpZCByYW5nZTogMCAtIDI1NSlcclxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBidWlsZEZ1bmMgRnVuY3Rpb24gdG8gcmVidWlsZCB0aGUgdmlld2VyJ3Mgc3BsYXQgbWVzaCBhZnRlciBhIG5ldyBzcGxhdCBidWZmZXIgc2VjdGlvbiBpcyBkb3dubG9hZGVkXHJcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gb25Eb3dubG9hZFByb2dyZXNzIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhcyBmaWxlIGRhdGEgYXJlIHJlY2VpdmVkXHJcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gb25Eb3dubG9hZEV4Y2VwdGlvbiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBleGNlcHRpb24gb2NjdXJzIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIGZ1bGwgZG93bmxvYWRcclxuICAgKiBAcGFyYW0ge29iamVjdH0gaGVhZGVycyBPcHRpb25hbCBIVFRQIGhlYWRlcnMgdG8gcGFzcyB0byB1c2UgZm9yIGRvd25sb2FkaW5nIHNwbGF0IHNjZW5lXHJcbiAgICogQHJldHVybiB7UHJvbWlzZX1cclxuICAgKi9cclxuICBkb3dubG9hZEFuZEJ1aWxkU2luZ2xlU3BsYXRTY2VuZVByb2dyZXNzaXZlTG9hZChcclxuICAgIHBhdGgsXHJcbiAgICBmb3JtYXQsXHJcbiAgICBzcGxhdEFscGhhUmVtb3ZhbFRocmVzaG9sZCxcclxuICAgIGJ1aWxkRnVuYyxcclxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcclxuICAgIG9uRG93bmxvYWRFeGNlcHRpb24sXHJcbiAgICBoZWFkZXJzXHJcbiAgKSB7XHJcbiAgICBsZXQgcHJvZ3Jlc3NpdmVMb2FkZWRTZWN0aW9uQnVpbGRDb3VudCA9IDA7XHJcbiAgICBsZXQgcHJvZ3Jlc3NpdmVMb2FkZWRTZWN0aW9uQnVpbGRpbmcgPSBmYWxzZTtcclxuICAgIGNvbnN0IHF1ZXVlZFByb2dyZXNzaXZlTG9hZFNlY3Rpb25CdWlsZHMgPSBbXTtcclxuXHJcbiAgICBjb25zdCBjaGVja0FuZEJ1aWxkUHJvZ3Jlc3NpdmVMb2FkU2VjdGlvbnMgPSAoKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBxdWV1ZWRQcm9ncmVzc2l2ZUxvYWRTZWN0aW9uQnVpbGRzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAhcHJvZ3Jlc3NpdmVMb2FkZWRTZWN0aW9uQnVpbGRpbmcgJiZcclxuICAgICAgICAhdGhpcy5pc0Rpc3Bvc2luZ09yRGlzcG9zZWQoKVxyXG4gICAgICApIHtcclxuICAgICAgICBwcm9ncmVzc2l2ZUxvYWRlZFNlY3Rpb25CdWlsZGluZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgcXVldWVkQnVpbGQgPSBxdWV1ZWRQcm9ncmVzc2l2ZUxvYWRTZWN0aW9uQnVpbGRzLnNoaWZ0KCk7XHJcbiAgICAgICAgYnVpbGRGdW5jKFxyXG4gICAgICAgICAgcXVldWVkQnVpbGQuc3BsYXRCdWZmZXIsXHJcbiAgICAgICAgICBxdWV1ZWRCdWlsZC5maXJzdEJ1aWxkLFxyXG4gICAgICAgICAgcXVldWVkQnVpbGQuZmluYWxCdWlsZFxyXG4gICAgICAgICkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICBwcm9ncmVzc2l2ZUxvYWRlZFNlY3Rpb25CdWlsZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHF1ZXVlZEJ1aWxkLmZpcnN0QnVpbGQpIHtcclxuICAgICAgICAgICAgcHJvZ3Jlc3NpdmVMb2FkRmlyc3RTZWN0aW9uQnVpbGRQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAocXVldWVkQnVpbGQuZmluYWxCdWlsZCkge1xyXG4gICAgICAgICAgICBzcGxhdFNjZW5lRG93bmxvYWRBbmRCdWlsZFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU3BsYXRTY2VuZURvd25sb2FkQW5kQnVpbGRQcm9taXNlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocXVldWVkUHJvZ3Jlc3NpdmVMb2FkU2VjdGlvbkJ1aWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRlbGF5ZWRFeGVjdXRlKCgpID0+IGNoZWNrQW5kQnVpbGRQcm9ncmVzc2l2ZUxvYWRTZWN0aW9ucygpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvblByb2dyZXNzaXZlTG9hZFNlY3Rpb25Qcm9ncmVzcyA9IChzcGxhdEJ1ZmZlciwgZmluYWxCdWlsZCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuaXNEaXNwb3NpbmdPckRpc3Bvc2VkKCkpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBmaW5hbEJ1aWxkIHx8XHJcbiAgICAgICAgICBxdWV1ZWRQcm9ncmVzc2l2ZUxvYWRTZWN0aW9uQnVpbGRzLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAgICAgc3BsYXRCdWZmZXIuZ2V0U3BsYXRDb3VudCgpID5cclxuICAgICAgICAgICAgcXVldWVkUHJvZ3Jlc3NpdmVMb2FkU2VjdGlvbkJ1aWxkc1swXS5zcGxhdEJ1ZmZlci5nZXRTcGxhdENvdW50KClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHF1ZXVlZFByb2dyZXNzaXZlTG9hZFNlY3Rpb25CdWlsZHMucHVzaCh7XHJcbiAgICAgICAgICAgIHNwbGF0QnVmZmVyLFxyXG4gICAgICAgICAgICBmaXJzdEJ1aWxkOiBwcm9ncmVzc2l2ZUxvYWRlZFNlY3Rpb25CdWlsZENvdW50ID09PSAwLFxyXG4gICAgICAgICAgICBmaW5hbEJ1aWxkXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHByb2dyZXNzaXZlTG9hZGVkU2VjdGlvbkJ1aWxkQ291bnQrKztcclxuICAgICAgICAgIGNoZWNrQW5kQnVpbGRQcm9ncmVzc2l2ZUxvYWRTZWN0aW9ucygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzcGxhdFNjZW5lRG93bmxvYWRQcm9taXNlID0gdGhpcy5kb3dubG9hZFNwbGF0U2NlbmVUb1NwbGF0QnVmZmVyKFxyXG4gICAgICBwYXRoLFxyXG4gICAgICBzcGxhdEFscGhhUmVtb3ZhbFRocmVzaG9sZCxcclxuICAgICAgb25Eb3dubG9hZFByb2dyZXNzLFxyXG4gICAgICB0cnVlLFxyXG4gICAgICBvblByb2dyZXNzaXZlTG9hZFNlY3Rpb25Qcm9ncmVzcyxcclxuICAgICAgZm9ybWF0LFxyXG4gICAgICBoZWFkZXJzXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEdldCBhYm9ydCBoYW5kbGVyIGZyb20gZG93bmxvYWQgcHJvbWlzZVxyXG4gICAgY29uc3QgYWJvcnRIYW5kbGVyID0gc3BsYXRTY2VuZURvd25sb2FkUHJvbWlzZS5hYm9ydCBcclxuICAgICAgPyBzcGxhdFNjZW5lRG93bmxvYWRQcm9taXNlLmFib3J0LmJpbmQoc3BsYXRTY2VuZURvd25sb2FkUHJvbWlzZSkgXHJcbiAgICAgIDogdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IHByb2dyZXNzaXZlTG9hZEZpcnN0U2VjdGlvbkJ1aWxkUHJvbWlzZSA9XHJcbiAgICAgIGFib3J0YWJsZVByb21pc2VXaXRoRXh0cmFjdGVkQ29tcG9uZW50cyhhYm9ydEhhbmRsZXIpO1xyXG5cclxuICAgIGNvbnN0IHNwbGF0U2NlbmVEb3dubG9hZEFuZEJ1aWxkUHJvbWlzZSA9XHJcbiAgICAgIGFib3J0YWJsZVByb21pc2VXaXRoRXh0cmFjdGVkQ29tcG9uZW50cyhhYm9ydEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMuYWRkU3BsYXRTY2VuZURvd25sb2FkUHJvbWlzZShzcGxhdFNjZW5lRG93bmxvYWRQcm9taXNlKTtcclxuICAgIHRoaXMuc2V0U3BsYXRTY2VuZURvd25sb2FkQW5kQnVpbGRQcm9taXNlKFxyXG4gICAgICBzcGxhdFNjZW5lRG93bmxvYWRBbmRCdWlsZFByb21pc2UucHJvbWlzZVxyXG4gICAgKTtcclxuXHJcbiAgICBzcGxhdFNjZW5lRG93bmxvYWRQcm9taXNlXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbW92ZVNwbGF0U2NlbmVEb3dubG9hZFByb21pc2Uoc3BsYXRTY2VuZURvd25sb2FkUHJvbWlzZSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1ZpZXdlcjo6YWRkU3BsYXRTY2VuZSBhY3R1YWwgZXJyb3I6JywgZSk7XHJcbiAgICAgICAgdGhpcy5jbGVhclNwbGF0U2NlbmVEb3dubG9hZEFuZEJ1aWxkUHJvbWlzZSgpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlU3BsYXRTY2VuZURvd25sb2FkUHJvbWlzZShzcGxhdFNjZW5lRG93bmxvYWRQcm9taXNlKTtcclxuICAgICAgICBjb25zdCBlcnJvciA9XHJcbiAgICAgICAgICAoZSBpbnN0YW5jZW9mIEFib3J0ZWRQcm9taXNlRXJyb3IgfHwgZS5uYW1lID09PSAnQWJvcnRFcnJvcicpXHJcbiAgICAgICAgICAgID8gZVxyXG4gICAgICAgICAgICA6IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgIGBWaWV3ZXI6OmFkZFNwbGF0U2NlbmUgLT4gQ291bGQgbm90IGxvYWQgb25lIG9yIG1vcmUgc2NlbmVzOiAke2UubWVzc2FnZX1gXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICBwcm9ncmVzc2l2ZUxvYWRGaXJzdFNlY3Rpb25CdWlsZFByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgICAgICBpZiAob25Eb3dubG9hZEV4Y2VwdGlvbikgb25Eb3dubG9hZEV4Y2VwdGlvbihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwcm9ncmVzc2l2ZUxvYWRGaXJzdFNlY3Rpb25CdWlsZFByb21pc2UucHJvbWlzZVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIG11bHRpcGxlIHNwbGF0IHNjZW5lcyB0byB0aGUgdmlld2VyIGFuZCBkaXNwbGF5IGFueSBsb2FkaW5nIFVJIGlmIGFwcHJvcHJpYXRlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8b2JqZWN0Pn0gc2NlbmVPcHRpb25zIEFycmF5IG9mIHBlci1zY2VuZSBvcHRpb25zOiB7XHJcbiAgICpcclxuICAgKiAgICAgICAgIHBhdGg6IFBhdGggdG8gc3BsYXQgc2NlbmUgdG8gYmUgbG9hZGVkXHJcbiAgICpcclxuICAgKiAgICAgICAgIHNwbGF0QWxwaGFSZW1vdmFsVGhyZXNob2xkOiBJZ25vcmUgYW55IHNwbGF0cyB3aXRoIGFuIGFscGhhIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKHZhbGlkIHJhbmdlOiAwIC0gMjU1KSwgZGVmYXVsdHMgdG8gMVxyXG4gICAqXHJcbiAgICogICAgICAgICBwb3NpdGlvbiAoQXJyYXk8bnVtYmVyPik6ICAgUG9zaXRpb24gb2YgdGhlIHNjZW5lLCBhY3RzIGFzIGFuIG9mZnNldCBmcm9tIGl0cyBkZWZhdWx0IHBvc2l0aW9uLCBkZWZhdWx0cyB0byBbMCwgMCwgMF1cclxuICAgKlxyXG4gICAqICAgICAgICAgcm90YXRpb24gKEFycmF5PG51bWJlcj4pOiAgIFJvdGF0aW9uIG9mIHRoZSBzY2VuZSByZXByZXNlbnRlZCBhcyBhIHF1YXRlcm5pb24sIGRlZmF1bHRzIHRvIFswLCAwLCAwLCAxXVxyXG4gICAqXHJcbiAgICogICAgICAgICBzY2FsZSAoQXJyYXk8bnVtYmVyPik6ICAgICAgU2NlbmUncyBzY2FsZSwgZGVmYXVsdHMgdG8gWzEsIDEsIDFdXHJcbiAgICpcclxuICAgKiAgICAgICAgIGhlYWRlcnM6ICAgICAgICAgICAgICAgICAgICBPcHRpb25hbCBIVFRQIGhlYWRlcnMgdG8gYmUgc2VudCBhbG9uZyB3aXRoIHNwbGF0IHJlcXVlc3RzXHJcbiAgICpcclxuICAgKiAgICAgICAgIGZvcm1hdCAoU2NlbmVGb3JtYXQpICAgICAgICBPcHRpb25hbCwgdGhlIGZvcm1hdCBvZiB0aGUgc2NlbmUgZGF0YSAoLnBseSwgLmtzcGxhdCwgLnNwbGF0KS4gSWYgbm90IHByZXNlbnQsIHRoZVxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgZXh0ZW5zaW9uIGluICdwYXRoJyB3aWxsIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBmb3JtYXQgKGlmIGl0IGlzIHByZXNlbnQpXHJcbiAgICogfVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd0xvYWRpbmdVSSBEaXNwbGF5IGEgbG9hZGluZyBzcGlubmVyIHdoaWxlIHRoZSBzY2VuZSBpcyBsb2FkaW5nLCBkZWZhdWx0cyB0byB0cnVlXHJcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gb25Qcm9ncmVzcyBGdW5jdGlvbiB0byBiZSBjYWxsZWQgYXMgZmlsZSBkYXRhIGFyZSByZWNlaXZlZFxyXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XHJcbiAgICovXHJcbiAgYWRkU3BsYXRTY2VuZXMoc2NlbmVPcHRpb25zLCBzaG93TG9hZGluZ1VJID0gdHJ1ZSwgb25Qcm9ncmVzcyA9IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nT3JVbmxvYWRpbmcoKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ0Nhbm5vdCBhZGQgc3BsYXQgc2NlbmUgd2hpbGUgYW5vdGhlciBsb2FkIG9yIHVubG9hZCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLidcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRGlzcG9zaW5nT3JEaXNwb3NlZCgpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFkZCBzcGxhdCBzY2VuZSBhZnRlciBkaXNwb3NlKCkgaXMgY2FsbGVkLicpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmlsZUNvdW50ID0gc2NlbmVPcHRpb25zLmxlbmd0aDtcclxuICAgIGNvbnN0IHBlcmNlbnRDb21wbGV0ZSA9IFtdO1xyXG5cclxuICAgIGxldCBsb2FkaW5nVUlUYXNrSWQ7XHJcbiAgICBpZiAoc2hvd0xvYWRpbmdVSSkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTcGlubmVyLnJlbW92ZUFsbFRhc2tzKCk7XHJcbiAgICAgIGxvYWRpbmdVSVRhc2tJZCA9IHRoaXMubG9hZGluZ1NwaW5uZXIuYWRkVGFzaygnRG93bmxvYWRpbmcuLi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvbkxvYWRQcm9ncmVzcyA9IChmaWxlSW5kZXgsIHBlcmNlbnQsIHBlcmNlbnRMYWJlbCwgbG9hZGVyU3RhdHVzKSA9PiB7XHJcbiAgICAgIHBlcmNlbnRDb21wbGV0ZVtmaWxlSW5kZXhdID0gcGVyY2VudDtcclxuICAgICAgbGV0IHRvdGFsUGVyY2VudCA9IDA7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZUNvdW50OyBpKyspXHJcbiAgICAgICAgdG90YWxQZXJjZW50ICs9IHBlcmNlbnRDb21wbGV0ZVtpXSB8fCAwO1xyXG4gICAgICB0b3RhbFBlcmNlbnQgPSB0b3RhbFBlcmNlbnQgLyBmaWxlQ291bnQ7XHJcbiAgICAgIHBlcmNlbnRMYWJlbCA9IGAke3RvdGFsUGVyY2VudC50b0ZpeGVkKDIpfSVgO1xyXG4gICAgICBpZiAoc2hvd0xvYWRpbmdVSSkge1xyXG4gICAgICAgIGlmIChsb2FkZXJTdGF0dXMgPT09IExvYWRlclN0YXR1cy5Eb3dubG9hZGluZykge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3Bpbm5lci5zZXRNZXNzYWdlRm9yVGFzayhcclxuICAgICAgICAgICAgbG9hZGluZ1VJVGFza0lkLFxyXG4gICAgICAgICAgICB0b3RhbFBlcmNlbnQgPT0gMTAwXHJcbiAgICAgICAgICAgICAgPyBgRG93bmxvYWQgY29tcGxldGUhYFxyXG4gICAgICAgICAgICAgIDogYERvd25sb2FkaW5nOiAke3BlcmNlbnRMYWJlbH1gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAob25Qcm9ncmVzcykgb25Qcm9ncmVzcyh0b3RhbFBlcmNlbnQsIHBlcmNlbnRMYWJlbCwgbG9hZGVyU3RhdHVzKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xyXG4gICAgY29uc3Qgc2lnbmFsID0gYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcclxuICAgIHRoaXMuYWRkU3BsYXRTY2VuZURvd25sb2FkQ29udHJvbGxlcihhYm9ydENvbnRyb2xsZXIpO1xyXG5cclxuICAgIGNvbnN0IGRvd25sb2FkUHJvbWlzZXMgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NlbmVPcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBzY2VuZU9wdGlvbnNbaV07XHJcbiAgICAgIGNvbnN0IGZvcm1hdCA9XHJcbiAgICAgICAgb3B0aW9ucy5mb3JtYXQgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmZvcm1hdCAhPT0gbnVsbFxyXG4gICAgICAgICAgPyBvcHRpb25zLmZvcm1hdFxyXG4gICAgICAgICAgOiBzY2VuZUZvcm1hdEZyb21QYXRoKG9wdGlvbnMucGF0aCk7XHJcbiAgICAgIGNvbnN0IGRvd25sb2FkUHJvbWlzZSA9IHRoaXMuZG93bmxvYWRTcGxhdFNjZW5lVG9TcGxhdEJ1ZmZlcihcclxuICAgICAgICBvcHRpb25zLnBhdGgsXHJcbiAgICAgICAgb3B0aW9ucy5zcGxhdEFscGhhUmVtb3ZhbFRocmVzaG9sZCxcclxuICAgICAgICBvbkxvYWRQcm9ncmVzcy5iaW5kKHRoaXMsIGkpLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICBmb3JtYXQsXHJcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzLFxyXG4gICAgICAgIHNpZ25hbFxyXG4gICAgICApO1xyXG4gICAgICBkb3dubG9hZFByb21pc2VzLnB1c2goZG93bmxvYWRQcm9taXNlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkb3dubG9hZEFuZEJ1aWxkUHJvbWlzZSA9IFByb21pc2UuYWxsKGRvd25sb2FkUHJvbWlzZXMpXHJcbiAgICAgIC50aGVuKChzcGxhdEJ1ZmZlcnMpID0+IHtcclxuICAgICAgICBpZiAoc2hvd0xvYWRpbmdVSSkgdGhpcy5sb2FkaW5nU3Bpbm5lci5yZW1vdmVUYXNrKGxvYWRpbmdVSVRhc2tJZCk7XHJcbiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIG9uUHJvZ3Jlc3MoMCwgJzAlJywgTG9hZGVyU3RhdHVzLlByb2Nlc3NpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZFNwbGF0QnVmZmVycyhcclxuICAgICAgICAgIHNwbGF0QnVmZmVycyxcclxuICAgICAgICAgIHNjZW5lT3B0aW9ucyxcclxuICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICBzaG93TG9hZGluZ1VJLFxyXG4gICAgICAgICAgc2hvd0xvYWRpbmdVSSxcclxuICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgZmFsc2VcclxuICAgICAgICApLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIG9uUHJvZ3Jlc3MoMTAwLCAnMTAwJScsIExvYWRlclN0YXR1cy5Qcm9jZXNzaW5nKTtcclxuICAgICAgICAgIHRoaXMuY2xlYXJTcGxhdFNjZW5lRG93bmxvYWRBbmRCdWlsZFByb21pc2UoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgaWYgKHNob3dMb2FkaW5nVUkpIHRoaXMubG9hZGluZ1NwaW5uZXIucmVtb3ZlVGFzayhsb2FkaW5nVUlUYXNrSWQpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJTcGxhdFNjZW5lRG93bmxvYWRBbmRCdWlsZFByb21pc2UoKTtcclxuICAgICAgICBjb25zdCBlcnJvciA9XHJcbiAgICAgICAgICBlLm5hbWUgPT09ICdBYm9ydEVycm9yJ1xyXG4gICAgICAgICAgICA/IGVcclxuICAgICAgICAgICAgOiBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgVmlld2VyOjphZGRTcGxhdFNjZW5lcyAtPiBDb3VsZCBub3QgbG9hZCBvbmUgb3IgbW9yZSBzcGxhdCBzY2VuZXMuYFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbW92ZVNwbGF0U2NlbmVEb3dubG9hZENvbnRyb2xsZXIoYWJvcnRDb250cm9sbGVyKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRTcGxhdFNjZW5lRG93bmxvYWRBbmRCdWlsZFByb21pc2UoZG93bmxvYWRBbmRCdWlsZFByb21pc2UpO1xyXG4gICAgcmV0dXJuIGRvd25sb2FkQW5kQnVpbGRQcm9taXNlXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEb3dubG9hZCBhIHNwbGF0IHNjZW5lIGFuZCBjb252ZXJ0IHRvIFNwbGF0QnVmZmVyIGluc3RhbmNlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFBhdGggdG8gc3BsYXQgc2NlbmUgdG8gYmUgbG9hZGVkXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNwbGF0QWxwaGFSZW1vdmFsVGhyZXNob2xkIElnbm9yZSBhbnkgc3BsYXRzIHdpdGggYW4gYWxwaGEgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWRcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKHZhbGlkIHJhbmdlOiAwIC0gMjU1KSwgZGVmYXVsdHMgdG8gMVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gb25Qcm9ncmVzcyBGdW5jdGlvbiB0byBiZSBjYWxsZWQgYXMgZmlsZSBkYXRhIGFyZSByZWNlaXZlZFxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvZ3Jlc3NpdmVCdWlsZCBDb25zdHJ1Y3QgZmlsZSBzZWN0aW9ucyBpbnRvIHNwbGF0IGJ1ZmZlcnMgYXMgdGhleSBhcmUgZG93bmxvYWRlZFxyXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uU2VjdGlvbkJ1aWx0IEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIG5ldyBzZWN0aW9uIGlzIGFkZGVkIHRvIHRoZSBmaWxlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCBGaWxlIGZvcm1hdCBvZiB0aGUgc2NlbmVcclxuICAgKiBAcGFyYW0ge29iamVjdH0gaGVhZGVycyBPcHRpb25hbCBIVFRQIGhlYWRlcnMgdG8gcGFzcyB0byB1c2UgZm9yIGRvd25sb2FkaW5nIHNwbGF0IHNjZW5lXHJcbiAgICogQHBhcmFtIHtBYm9ydFNpZ25hbH0gc2lnbmFsIE9wdGlvbmFsIEFib3J0U2lnbmFsIHRvIGNhbmNlbCB0aGUgZG93bmxvYWRcclxuICAgKiBAcmV0dXJuIHtBYm9ydGFibGVQcm9taXNlfVxyXG4gICAqL1xyXG4gIGRvd25sb2FkU3BsYXRTY2VuZVRvU3BsYXRCdWZmZXIoXHJcbiAgICBwYXRoLFxyXG4gICAgc3BsYXRBbHBoYVJlbW92YWxUaHJlc2hvbGQgPSAxLFxyXG4gICAgb25Qcm9ncmVzcyA9IHVuZGVmaW5lZCxcclxuICAgIHByb2dyZXNzaXZlQnVpbGQgPSBmYWxzZSxcclxuICAgIG9uU2VjdGlvbkJ1aWx0ID0gdW5kZWZpbmVkLFxyXG4gICAgZm9ybWF0LFxyXG4gICAgaGVhZGVyc1xyXG4gICkge1xyXG4gICAgY29uc3Qgb3B0aW1pemVTcGxhdERhdGEgPSBwcm9ncmVzc2l2ZUJ1aWxkID8gZmFsc2UgOiB0aGlzLm9wdGltaXplU3BsYXREYXRhO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGZvcm1hdCA9PT0gU2NlbmVGb3JtYXQuUGx5KSB7XHJcbiAgICAgICAgcmV0dXJuIFBseUxvYWRlci5sb2FkRnJvbVVSTChcclxuICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICBvblByb2dyZXNzLFxyXG4gICAgICAgICAgcHJvZ3Jlc3NpdmVCdWlsZCxcclxuICAgICAgICAgIG9uU2VjdGlvbkJ1aWx0LFxyXG4gICAgICAgICAgc3BsYXRBbHBoYVJlbW92YWxUaHJlc2hvbGQsXHJcbiAgICAgICAgICB0aGlzLmluTWVtb3J5Q29tcHJlc3Npb25MZXZlbCxcclxuICAgICAgICAgIG9wdGltaXplU3BsYXREYXRhLFxyXG4gICAgICAgICAgdGhpcy5zcGhlcmljYWxIYXJtb25pY3NEZWdyZWUsXHJcbiAgICAgICAgICBoZWFkZXJzXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRGlyZWN0TG9hZEVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgJ0ZpbGUgdHlwZSBvciBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBwcm9ncmVzc2l2ZSBsb2FkaW5nLidcclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgVmlld2VyOjpkb3dubG9hZFNwbGF0U2NlbmVUb1NwbGF0QnVmZmVyIC0+IEZpbGUgZm9ybWF0IG5vdCBzdXBwb3J0ZWQ6ICR7cGF0aH1gXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNQcm9ncmVzc2l2ZWx5TG9hZGFibGUoZm9ybWF0KSB7XHJcbiAgICByZXR1cm4gZm9ybWF0ID09PSBTY2VuZUZvcm1hdC5QbHlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBvbmUgb3IgbW9yZSBpbnN0YW5jZXMgb2YgU3BsYXRCdWZmZXIgdG8gdGhlIFNwbGF0TWVzaCBpbnN0YW5jZSBtYW5hZ2VkIGJ5IHRoZSB2aWV3ZXIgYW5kIHNldCB1cCB0aGUgc29ydGluZyB3ZWIgd29ya2VyLlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd2lsbCB0ZXJtaW5hdGUgdGhlIGV4aXN0aW5nIHNvcnQgd29ya2VyIChpZiB0aGVyZSBpcyBvbmUpLlxyXG4gICAqL1xyXG4gIGFkZFNwbGF0QnVmZmVycyA9IChcclxuICAgIHNwbGF0QnVmZmVycyxcclxuICAgIHNwbGF0QnVmZmVyT3B0aW9ucyA9IFtdLFxyXG4gICAgZmluYWxCdWlsZCA9IHRydWUsXHJcbiAgICBzaG93TG9hZGluZ1VJID0gdHJ1ZSxcclxuICAgIHNob3dMb2FkaW5nVUlGb3JTcGxhdFRyZWVCdWlsZCA9IHRydWUsXHJcbiAgICByZXBsYWNlRXhpc3RpbmcgPSBmYWxzZSxcclxuICAgIGVuYWJsZVJlbmRlckJlZm9yZUZpcnN0U29ydCA9IGZhbHNlLFxyXG4gICAgcHJlc2VydmVWaXNpYmxlUmVnaW9uID0gdHJ1ZVxyXG4gICkgPT4ge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNwb3NpbmdPckRpc3Bvc2VkKCkpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxyXG5cclxuICAgIGxldCBzcGxhdFByb2Nlc3NpbmdUYXNrSWQgPSBudWxsO1xyXG4gICAgY29uc3QgcmVtb3ZlU3BsYXRQcm9jZXNzaW5nVGFzayA9ICgpID0+IHtcclxuICAgICAgaWYgKHNwbGF0UHJvY2Vzc2luZ1Rhc2tJZCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1NwaW5uZXIucmVtb3ZlVGFzayhzcGxhdFByb2Nlc3NpbmdUYXNrSWQpO1xyXG4gICAgICAgIHNwbGF0UHJvY2Vzc2luZ1Rhc2tJZCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zcGxhdFJlbmRlclJlYWR5ID0gZmFsc2U7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgaWYgKHNob3dMb2FkaW5nVUkpIHtcclxuICAgICAgICBzcGxhdFByb2Nlc3NpbmdUYXNrSWQgPSB0aGlzLmxvYWRpbmdTcGlubmVyLmFkZFRhc2soXHJcbiAgICAgICAgICAnUHJvY2Vzc2luZyBzcGxhdHMuLi4nXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBkZWxheWVkRXhlY3V0ZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwb3NpbmdPckRpc3Bvc2VkKCkpIHtcclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgYnVpbGRSZXN1bHRzID0gdGhpcy5hZGRTcGxhdEJ1ZmZlcnNUb01lc2goXHJcbiAgICAgICAgICAgIHNwbGF0QnVmZmVycyxcclxuICAgICAgICAgICAgc3BsYXRCdWZmZXJPcHRpb25zLFxyXG4gICAgICAgICAgICBmaW5hbEJ1aWxkLFxyXG4gICAgICAgICAgICBzaG93TG9hZGluZ1VJRm9yU3BsYXRUcmVlQnVpbGQsXHJcbiAgICAgICAgICAgIHJlcGxhY2VFeGlzdGluZyxcclxuICAgICAgICAgICAgcHJlc2VydmVWaXNpYmxlUmVnaW9uXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbnN0IG1heFNwbGF0Q291bnQgPSB0aGlzLnNwbGF0TWVzaC5nZXRNYXhTcGxhdENvdW50KCk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc29ydFdvcmtlciAmJlxyXG4gICAgICAgICAgICB0aGlzLnNvcnRXb3JrZXIubWF4U3BsYXRDb3VudCAhPT0gbWF4U3BsYXRDb3VudFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VTb3J0V29ya2VyKCk7XHJcbiAgICAgICAgICAvLyBJZiB3ZSBhcmVuJ3QgY2FsY3VsYXRpbmcgdGhlIHNwbGF0IGRpc3RhbmNlcyBmcm9tIHRoZSBjZW50ZXIgb24gdGhlIEdQVSwgdGhlIHNvcnRpbmcgd29ya2VyIG5lZWRzXHJcbiAgICAgICAgICAvLyBzcGxhdCBjZW50ZXJzIGFuZCB0cmFuc2Zvcm0gaW5kZXhlcyBzbyB0aGF0IGl0IGNhbiBjYWxjdWxhdGUgdGhvc2UgZGlzdGFuY2UgdmFsdWVzLlxyXG4gICAgICAgICAgaWYgKCF0aGlzLmdwdUFjY2VsZXJhdGVkU29ydCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZVNvcnRNZXNzYWdlcy5wdXNoKHtcclxuICAgICAgICAgICAgICBjZW50ZXJzOiBidWlsZFJlc3VsdHMuY2VudGVycy5idWZmZXIsXHJcbiAgICAgICAgICAgICAgc2NlbmVJbmRleGVzOiBidWlsZFJlc3VsdHMuc2NlbmVJbmRleGVzLmJ1ZmZlcixcclxuICAgICAgICAgICAgICByYW5nZToge1xyXG4gICAgICAgICAgICAgICAgZnJvbTogYnVpbGRSZXN1bHRzLmZyb20sXHJcbiAgICAgICAgICAgICAgICB0bzogYnVpbGRSZXN1bHRzLnRvLFxyXG4gICAgICAgICAgICAgICAgY291bnQ6IGJ1aWxkUmVzdWx0cy5jb3VudFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBzb3J0V29ya2VyU2V0dXBQcm9taXNlID1cclxuICAgICAgICAgICAgIXRoaXMuc29ydFdvcmtlciAmJiBtYXhTcGxhdENvdW50ID4gMFxyXG4gICAgICAgICAgICAgID8gdGhpcy5zZXR1cFNvcnRXb3JrZXIodGhpcy5zcGxhdE1lc2gpXHJcbiAgICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgIHNvcnRXb3JrZXJTZXR1cFByb21pc2UudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGlzcG9zaW5nT3JEaXNwb3NlZCgpKSByZXR1cm5cclxuICAgICAgICAgICAgdGhpcy5ydW5TcGxhdFNvcnQodHJ1ZSwgdHJ1ZSkudGhlbigoc29ydFJ1bm5pbmcpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuc29ydFdvcmtlciB8fCAhc29ydFJ1bm5pbmcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3BsYXRSZW5kZXJSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVTcGxhdFByb2Nlc3NpbmdUYXNrKCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChlbmFibGVSZW5kZXJCZWZvcmVGaXJzdFNvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zcGxhdFJlbmRlclJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJOZXh0U29ydC5wdXNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwbGF0UmVuZGVyUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJOZXh0U29ydC5wdXNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmVtb3ZlU3BsYXRQcm9jZXNzaW5nVGFzaygpO1xyXG4gICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB0cnVlKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgb25lIG9yIG1vcmUgaW5zdGFuY2VzIG9mIFNwbGF0QnVmZmVyIHRvIHRoZSBTcGxhdE1lc2ggaW5zdGFuY2UgbWFuYWdlZCBieSB0aGUgdmlld2VyLiBCeSBkZWZhdWx0LCB0aGlzIGZ1bmN0aW9uIGlzIGFkZGl0aXZlO1xyXG4gICAqIGFsbCBzcGxhdCBidWZmZXJzIGNvbnRhaW5lZCBieSB0aGUgdmlld2VyJ3Mgc3BsYXQgbWVzaCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcHJlc2VydmVkLiBUaGlzIGJlaGF2aW9yIGNhbiBiZVxyXG4gICAqIGNoYW5nZWQgYnkgcGFzc2luZyAndHJ1ZScgZm9yICdyZXBsYWNlRXhpc3RpbmcnLlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8U3BsYXRCdWZmZXI+fSBzcGxhdEJ1ZmZlcnMgU3BsYXRCdWZmZXIgaW5zdGFuY2VzXHJcbiAgICogQHBhcmFtIHtBcnJheTxvYmplY3Q+fSBzcGxhdEJ1ZmZlck9wdGlvbnMgQXJyYXkgb2Ygb3B0aW9ucyBvYmplY3RzOiB7XHJcbiAgICpcclxuICAgKiAgICAgICAgIHNwbGF0QWxwaGFSZW1vdmFsVGhyZXNob2xkOiBJZ25vcmUgYW55IHNwbGF0cyB3aXRoIGFuIGFscGhhIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKHZhbGlkIHJhbmdlOiAwIC0gMjU1KSwgZGVmYXVsdHMgdG8gMVxyXG4gICAqXHJcbiAgICogICAgICAgICBwb3NpdGlvbiAoQXJyYXk8bnVtYmVyPik6ICAgUG9zaXRpb24gb2YgdGhlIHNjZW5lLCBhY3RzIGFzIGFuIG9mZnNldCBmcm9tIGl0cyBkZWZhdWx0IHBvc2l0aW9uLCBkZWZhdWx0cyB0byBbMCwgMCwgMF1cclxuICAgKlxyXG4gICAqICAgICAgICAgcm90YXRpb24gKEFycmF5PG51bWJlcj4pOiAgIFJvdGF0aW9uIG9mIHRoZSBzY2VuZSByZXByZXNlbnRlZCBhcyBhIHF1YXRlcm5pb24sIGRlZmF1bHRzIHRvIFswLCAwLCAwLCAxXVxyXG4gICAqXHJcbiAgICogICAgICAgICBzY2FsZSAoQXJyYXk8bnVtYmVyPik6ICAgICAgU2NlbmUncyBzY2FsZSwgZGVmYXVsdHMgdG8gWzEsIDEsIDFdXHJcbiAgICogfVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluYWxCdWlsZCBXaWxsIHRoZSBzcGxhdCBtZXNoIGJlIGluIGl0cyBmaW5hbCBzdGF0ZSBhZnRlciB0aGlzIGJ1aWxkP1xyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd0xvYWRpbmdVSUZvclNwbGF0VHJlZUJ1aWxkIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgdGhlIGxvYWRpbmcgc3Bpbm5lciBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoZSBzcGxhdCB0cmVlLlxyXG4gICAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgaW5mbyBhYm91dCB0aGUgc3BsYXRzIHRoYXQgYXJlIHVwZGF0ZWRcclxuICAgKi9cclxuICBhZGRTcGxhdEJ1ZmZlcnNUb01lc2ggPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IHNwbGF0T3B0aW1pemluZ1Rhc2tJZDtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKFxyXG4gICAgICBzcGxhdEJ1ZmZlcnMsXHJcbiAgICAgIHNwbGF0QnVmZmVyT3B0aW9ucyxcclxuICAgICAgZmluYWxCdWlsZCA9IHRydWUsXHJcbiAgICAgIHNob3dMb2FkaW5nVUlGb3JTcGxhdFRyZWVCdWlsZCA9IGZhbHNlLFxyXG4gICAgICByZXBsYWNlRXhpc3RpbmcgPSBmYWxzZSxcclxuICAgICAgcHJlc2VydmVWaXNpYmxlUmVnaW9uID0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzRGlzcG9zaW5nT3JEaXNwb3NlZCgpKSByZXR1cm5cclxuICAgICAgbGV0IGFsbFNwbGF0QnVmZmVycyA9IFtdO1xyXG4gICAgICBsZXQgYWxsU3BsYXRCdWZmZXJPcHRpb25zID0gW107XHJcbiAgICAgIGlmICghcmVwbGFjZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgYWxsU3BsYXRCdWZmZXJzID1cclxuICAgICAgICAgIHRoaXMuc3BsYXRNZXNoLnNjZW5lcy5tYXAoKHNjZW5lKSA9PiBzY2VuZS5zcGxhdEJ1ZmZlcikgfHwgW107XHJcbiAgICAgICAgYWxsU3BsYXRCdWZmZXJPcHRpb25zID0gdGhpcy5zcGxhdE1lc2guc2NlbmVPcHRpb25zXHJcbiAgICAgICAgICA/IHRoaXMuc3BsYXRNZXNoLnNjZW5lT3B0aW9ucy5tYXAoKHNjZW5lT3B0aW9ucykgPT4gc2NlbmVPcHRpb25zKVxyXG4gICAgICAgICAgOiBbXTtcclxuICAgICAgfVxyXG4gICAgICBhbGxTcGxhdEJ1ZmZlcnMucHVzaCguLi5zcGxhdEJ1ZmZlcnMpO1xyXG4gICAgICBhbGxTcGxhdEJ1ZmZlck9wdGlvbnMucHVzaCguLi5zcGxhdEJ1ZmZlck9wdGlvbnMpO1xyXG4gICAgICBpZiAodGhpcy5yZW5kZXJlcikgdGhpcy5zcGxhdE1lc2guc2V0UmVuZGVyZXIodGhpcy5yZW5kZXJlcik7XHJcbiAgICAgIGNvbnN0IG9uU3BsYXRUcmVlSW5kZXhlc1VwbG9hZCA9IChmaW5pc2hlZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlzcG9zaW5nT3JEaXNwb3NlZCgpKSByZXR1cm5cclxuICAgICAgICBjb25zdCBzcGxhdENvdW50ID0gdGhpcy5zcGxhdE1lc2guZ2V0U3BsYXRDb3VudCgpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHNob3dMb2FkaW5nVUlGb3JTcGxhdFRyZWVCdWlsZCAmJlxyXG4gICAgICAgICAgc3BsYXRDb3VudCA+PSBNSU5fU1BMQVRfQ09VTlRfVE9fU0hPV19TUExBVF9UUkVFX0xPQURJTkdfU1BJTk5FUlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKCFmaW5pc2hlZCAmJiAhc3BsYXRPcHRpbWl6aW5nVGFza0lkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1NwaW5uZXIuc2V0TWluaW1pemVkKHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICBzcGxhdE9wdGltaXppbmdUYXNrSWQgPSB0aGlzLmxvYWRpbmdTcGlubmVyLmFkZFRhc2soXHJcbiAgICAgICAgICAgICAgJ09wdGltaXppbmcgZGF0YSBzdHJ1Y3R1cmVzLi4uJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgb25TcGxhdFRyZWVSZWFkeSA9IChmaW5pc2hlZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRGlzcG9zaW5nT3JEaXNwb3NlZCgpKSByZXR1cm5cclxuICAgICAgICBpZiAoZmluaXNoZWQgJiYgc3BsYXRPcHRpbWl6aW5nVGFza0lkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTcGlubmVyLnJlbW92ZVRhc2soc3BsYXRPcHRpbWl6aW5nVGFza0lkKTtcclxuICAgICAgICAgIHNwbGF0T3B0aW1pemluZ1Rhc2tJZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBidWlsZFJlc3VsdHMgPSB0aGlzLnNwbGF0TWVzaC5idWlsZChcclxuICAgICAgICBhbGxTcGxhdEJ1ZmZlcnMsXHJcbiAgICAgICAgYWxsU3BsYXRCdWZmZXJPcHRpb25zLFxyXG4gICAgICAgIHRydWUsXHJcbiAgICAgICAgZmluYWxCdWlsZCxcclxuICAgICAgICBvblNwbGF0VHJlZUluZGV4ZXNVcGxvYWQsXHJcbiAgICAgICAgb25TcGxhdFRyZWVSZWFkeSxcclxuICAgICAgICBwcmVzZXJ2ZVZpc2libGVSZWdpb25cclxuICAgICAgKTtcclxuICAgICAgaWYgKGZpbmFsQnVpbGQgJiYgdGhpcy5mcmVlSW50ZXJtZWRpYXRlU3BsYXREYXRhKVxyXG4gICAgICAgIHRoaXMuc3BsYXRNZXNoLmZyZWVJbnRlcm1lZGlhdGVTcGxhdERhdGEoKTtcclxuICAgICAgcmV0dXJuIGJ1aWxkUmVzdWx0c1xyXG4gICAgfVxyXG4gIH0pKClcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHVwIHRoZSBzcGxhdCBzb3J0aW5nIHdlYiB3b3JrZXIuXHJcbiAgICogQHBhcmFtIHtTcGxhdE1lc2h9IHNwbGF0TWVzaCBTcGxhdE1lc2ggaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BsYXRzIHRvIGJlIHNvcnRlZFxyXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XHJcbiAgICovXHJcbiAgYXN5bmMgc2V0dXBTb3J0V29ya2VyKHNwbGF0TWVzaCkge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNwb3NpbmdPckRpc3Bvc2VkKCkpIHJldHVyblxyXG4gICAgY29uc3QgRGlzdGFuY2VzQXJyYXlUeXBlID0gdGhpcy5pbnRlZ2VyQmFzZWRTb3J0XHJcbiAgICAgID8gSW50MzJBcnJheVxyXG4gICAgICA6IEZsb2F0MzJBcnJheTtcclxuICAgIGNvbnN0IHNwbGF0Q291bnQgPSBzcGxhdE1lc2guZ2V0U3BsYXRDb3VudCgpO1xyXG4gICAgY29uc3QgbWF4U3BsYXRDb3VudCA9IHNwbGF0TWVzaC5nZXRNYXhTcGxhdENvdW50KCk7XHJcbiAgICB0aGlzLnNvcnRXb3JrZXIgPSBhd2FpdCBjcmVhdGVTb3J0V29ya2VyKFxyXG4gICAgICBtYXhTcGxhdENvdW50LFxyXG4gICAgICB0aGlzLnNoYXJlZE1lbW9yeUZvcldvcmtlcnMsXHJcbiAgICAgIHRoaXMuZW5hYmxlU0lNREluU29ydCxcclxuICAgICAgdGhpcy5pbnRlZ2VyQmFzZWRTb3J0LFxyXG4gICAgICB0aGlzLnNwbGF0TWVzaC5keW5hbWljTW9kZSxcclxuICAgICAgdGhpcy5zcGxhdFNvcnREaXN0YW5jZU1hcFByZWNpc2lvblxyXG4gICAgKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICB0aGlzLnNvcnRXb3JrZXIub25tZXNzYWdlID0gKGUpID0+IHtcclxuICAgICAgICBpZiAoZS5kYXRhLnNvcnREb25lKSB7XHJcbiAgICAgICAgICB0aGlzLnNvcnRSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBsZXQgbnVtYmVyc0FycmF5ID0gQXJyYXkuZnJvbShcclxuICAgICAgICAgICAgeyBsZW5ndGg6IHRoaXMuZ2F1c3NpYW5TcGxhdENvdW50IH0sXHJcbiAgICAgICAgICAgIChfLCBpKSA9PiBpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2hhcmVkTWVtb3J5Rm9yV29ya2Vycykge1xyXG4gICAgICAgICAgICB0aGlzLnNwbGF0TWVzaC51cGRhdGVSZW5kZXJJbmRleGVzKFxyXG4gICAgICAgICAgICAgIHRoaXMuc29ydFdvcmtlclNvcnRlZEluZGV4ZXMsXHJcbiAgICAgICAgICAgICAgZS5kYXRhLnNwbGF0UmVuZGVyQ291bnRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNvcnRlZEluZGV4ZXMgPSBuZXcgVWludDMyQXJyYXkoXHJcbiAgICAgICAgICAgICAgZS5kYXRhLnNvcnRlZEluZGV4ZXMuYnVmZmVyLFxyXG4gICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgZS5kYXRhLnNwbGF0UmVuZGVyQ291bnRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc29ydGVkSW5kZXhlcyk7XHJcbiAgICAgICAgICAgIHRoaXMuc3BsYXRNZXNoLnVwZGF0ZVJlbmRlckluZGV4ZXMoXHJcbiAgICAgICAgICAgICAgc29ydGVkSW5kZXhlcyxcclxuICAgICAgICAgICAgICBlLmRhdGEuc3BsYXRSZW5kZXJDb3VudFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMubGFzdFNwbGF0U29ydENvdW50ID0gdGhpcy5zcGxhdFNvcnRDb3VudDtcclxuXHJcbiAgICAgICAgICB0aGlzLmxhc3RTb3J0VGltZSA9IGUuZGF0YS5zb3J0VGltZTtcclxuICAgICAgICAgIHRoaXMuc29ydFByb21pc2VSZXNvbHZlcigpO1xyXG4gICAgICAgICAgdGhpcy5zb3J0UHJvbWlzZVJlc29sdmVyID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuZm9yY2VSZW5kZXJOZXh0RnJhbWUoKTtcclxuICAgICAgICAgIGlmICh0aGlzLnJ1bkFmdGVyTmV4dFNvcnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bkFmdGVyTmV4dFNvcnQuZm9yRWFjaCgoZnVuYykgPT4ge1xyXG4gICAgICAgICAgICAgIGZ1bmMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJOZXh0U29ydC5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZS5kYXRhLnNvcnRDYW5jZWxlZCkge1xyXG4gICAgICAgICAgdGhpcy5zb3J0UnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZS5kYXRhLnNvcnRTZXR1cFBoYXNlMUNvbXBsZXRlKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5sb2dMZXZlbCA+PSBMb2dMZXZlbC5JbmZvKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU29ydGluZyB3ZWIgd29ya2VyIFdBU00gc2V0dXAgY29tcGxldGUuJyk7XHJcbiAgICAgICAgICBpZiAodGhpcy5zaGFyZWRNZW1vcnlGb3JXb3JrZXJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydFdvcmtlclNvcnRlZEluZGV4ZXMgPSBuZXcgVWludDMyQXJyYXkoXHJcbiAgICAgICAgICAgICAgZS5kYXRhLnNvcnRlZEluZGV4ZXNCdWZmZXIsXHJcbiAgICAgICAgICAgICAgZS5kYXRhLnNvcnRlZEluZGV4ZXNPZmZzZXQsXHJcbiAgICAgICAgICAgICAgbWF4U3BsYXRDb3VudFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRXb3JrZXJJbmRleGVzVG9Tb3J0ID0gbmV3IFVpbnQzMkFycmF5KFxyXG4gICAgICAgICAgICAgIGUuZGF0YS5pbmRleGVzVG9Tb3J0QnVmZmVyLFxyXG4gICAgICAgICAgICAgIGUuZGF0YS5pbmRleGVzVG9Tb3J0T2Zmc2V0LFxyXG4gICAgICAgICAgICAgIG1heFNwbGF0Q291bnRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zb3J0V29ya2VyUHJlY29tcHV0ZWREaXN0YW5jZXMgPSBuZXcgRGlzdGFuY2VzQXJyYXlUeXBlKFxyXG4gICAgICAgICAgICAgIGUuZGF0YS5wcmVjb21wdXRlZERpc3RhbmNlc0J1ZmZlcixcclxuICAgICAgICAgICAgICBlLmRhdGEucHJlY29tcHV0ZWREaXN0YW5jZXNPZmZzZXQsXHJcbiAgICAgICAgICAgICAgbWF4U3BsYXRDb3VudFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnNvcnRXb3JrZXJUcmFuc2Zvcm1zID0gbmV3IEZsb2F0MzJBcnJheShcclxuICAgICAgICAgICAgICBlLmRhdGEudHJhbnNmb3Jtc0J1ZmZlcixcclxuICAgICAgICAgICAgICBlLmRhdGEudHJhbnNmb3Jtc09mZnNldCxcclxuICAgICAgICAgICAgICBDb25zdGFudHMuTWF4U2NlbmVzICogMTZcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydFdvcmtlckluZGV4ZXNUb1NvcnQgPSBuZXcgVWludDMyQXJyYXkobWF4U3BsYXRDb3VudCk7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydFdvcmtlclByZWNvbXB1dGVkRGlzdGFuY2VzID0gbmV3IERpc3RhbmNlc0FycmF5VHlwZShcclxuICAgICAgICAgICAgICBtYXhTcGxhdENvdW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydFdvcmtlclRyYW5zZm9ybXMgPSBuZXcgRmxvYXQzMkFycmF5KFxyXG4gICAgICAgICAgICAgIENvbnN0YW50cy5NYXhTY2VuZXMgKiAxNlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxhdENvdW50OyBpKyspXHJcbiAgICAgICAgICAgIHRoaXMuc29ydFdvcmtlckluZGV4ZXNUb1NvcnRbaV0gPSBpO1xyXG4gICAgICAgICAgdGhpcy5zb3J0V29ya2VyLm1heFNwbGF0Q291bnQgPSBtYXhTcGxhdENvdW50O1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmxvZ0xldmVsID49IExvZ0xldmVsLkluZm8pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1NvcnRpbmcgd2ViIHdvcmtlciByZWFkeS4nKTtcclxuICAgICAgICAgICAgY29uc3Qgc3BsYXREYXRhVGV4dHVyZXMgPSB0aGlzLnNwbGF0TWVzaC5nZXRTcGxhdERhdGFUZXh0dXJlcygpO1xyXG4gICAgICAgICAgICBjb25zdCBjb3ZhcmlhbmNlc1RleHR1cmVTaXplID0gc3BsYXREYXRhVGV4dHVyZXMuY292YXJpYW5jZXMuc2l6ZTtcclxuICAgICAgICAgICAgY29uc3QgY2VudGVyc0NvbG9yc1RleHR1cmVTaXplID0gc3BsYXREYXRhVGV4dHVyZXMuY2VudGVyQ29sb3JzLnNpemU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICdDb3ZhcmlhbmNlcyB0ZXh0dXJlIHNpemU6ICcgK1xyXG4gICAgICAgICAgICAgICAgY292YXJpYW5jZXNUZXh0dXJlU2l6ZS54ICtcclxuICAgICAgICAgICAgICAgICcgeCAnICtcclxuICAgICAgICAgICAgICAgIGNvdmFyaWFuY2VzVGV4dHVyZVNpemUueVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAnQ2VudGVycy9jb2xvcnMgdGV4dHVyZSBzaXplOiAnICtcclxuICAgICAgICAgICAgICAgIGNlbnRlcnNDb2xvcnNUZXh0dXJlU2l6ZS54ICtcclxuICAgICAgICAgICAgICAgICcgeCAnICtcclxuICAgICAgICAgICAgICAgIGNlbnRlcnNDb2xvcnNUZXh0dXJlU2l6ZS55XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBkaXNwb3NlU29ydFdvcmtlcigpIHtcclxuICAgIGlmICh0aGlzLnNvcnRXb3JrZXIpIHRoaXMuc29ydFdvcmtlci50ZXJtaW5hdGUoKTtcclxuICAgIHRoaXMuc29ydFdvcmtlciA9IG51bGw7XHJcbiAgICB0aGlzLnNvcnRQcm9taXNlID0gbnVsbDtcclxuICAgIGlmICh0aGlzLnNvcnRQcm9taXNlUmVzb2x2ZXIpIHtcclxuICAgICAgdGhpcy5zb3J0UHJvbWlzZVJlc29sdmVyKCk7XHJcbiAgICAgIHRoaXMuc29ydFByb21pc2VSZXNvbHZlciA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLnByZVNvcnRNZXNzYWdlcyA9IFtdO1xyXG4gICAgdGhpcy5zb3J0UnVubmluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU3BsYXRTY2VuZShpbmRleFRvUmVtb3ZlLCBzaG93TG9hZGluZ1VJID0gdHJ1ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlU3BsYXRTY2VuZXMoW2luZGV4VG9SZW1vdmVdLCBzaG93TG9hZGluZ1VJKVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU3BsYXRTY2VuZXMoaW5kZXhlc1RvUmVtb3ZlLCBzaG93TG9hZGluZ1VJID0gdHJ1ZSkge1xyXG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nT3JVbmxvYWRpbmcoKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ0Nhbm5vdCByZW1vdmUgc3BsYXQgc2NlbmUgd2hpbGUgYW5vdGhlciBsb2FkIG9yIHVubG9hZCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLidcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRGlzcG9zaW5nT3JEaXNwb3NlZCgpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlbW92ZSBzcGxhdCBzY2VuZSBhZnRlciBkaXNwb3NlKCkgaXMgY2FsbGVkLicpXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNvcnRQcm9taXNlO1xyXG5cclxuICAgIHRoaXMuc3BsYXRTY2VuZVJlbW92YWxQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBsZXQgcmV2bW92YWxUYXNrSWQ7XHJcblxyXG4gICAgICBpZiAoc2hvd0xvYWRpbmdVSSkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1NwaW5uZXIucmVtb3ZlQWxsVGFza3MoKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTcGlubmVyLnNob3coKTtcclxuICAgICAgICByZXZtb3ZhbFRhc2tJZCA9IHRoaXMubG9hZGluZ1NwaW5uZXIuYWRkVGFzaygnUmVtb3Zpbmcgc3BsYXQgc2NlbmUuLi4nKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY2hlY2tBbmRIaWRlTG9hZGluZ1VJID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChzaG93TG9hZGluZ1VJKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTcGlubmVyLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1NwaW5uZXIucmVtb3ZlVGFzayhyZXZtb3ZhbFRhc2tJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgb25Eb25lID0gKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY2hlY2tBbmRIaWRlTG9hZGluZ1VJKCk7XHJcbiAgICAgICAgdGhpcy5zcGxhdFNjZW5lUmVtb3ZhbFByb21pc2UgPSBudWxsO1xyXG4gICAgICAgIGlmICghZXJyb3IpIHJlc29sdmUoKTtcclxuICAgICAgICBlbHNlIHJlamVjdChlcnJvcik7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCBjaGVja0ZvckVhcmx5RXhpdCA9ICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pc0Rpc3Bvc2luZ09yRGlzcG9zZWQoKSkge1xyXG4gICAgICAgICAgb25Eb25lKCk7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHNvcnRQcm9taXNlID0gdGhpcy5zb3J0UHJvbWlzZSB8fCBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgc29ydFByb21pc2UudGhlbigoKSA9PiB7XHJcbiAgICAgICAgaWYgKGNoZWNrRm9yRWFybHlFeGl0KCkpIHJldHVyblxyXG4gICAgICAgIGNvbnN0IHNhdmVkU3BsYXRCdWZmZXJzID0gW107XHJcbiAgICAgICAgY29uc3Qgc2F2ZWRTY2VuZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICBjb25zdCBzYXZlZFNjZW5lVHJhbnNmb3JtQ29tcG9uZW50cyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zcGxhdE1lc2guc2NlbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQgc2hvdWxkUmVtb3ZlID0gZmFsc2U7XHJcbiAgICAgICAgICBmb3IgKGxldCBpbmRleFRvUmVtb3ZlIG9mIGluZGV4ZXNUb1JlbW92ZSkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXhUb1JlbW92ZSA9PT0gaSkge1xyXG4gICAgICAgICAgICAgIHNob3VsZFJlbW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFzaG91bGRSZW1vdmUpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2NlbmUgPSB0aGlzLnNwbGF0TWVzaC5zY2VuZXNbaV07XHJcbiAgICAgICAgICAgIHNhdmVkU3BsYXRCdWZmZXJzLnB1c2goc2NlbmUuc3BsYXRCdWZmZXIpO1xyXG4gICAgICAgICAgICBzYXZlZFNjZW5lT3B0aW9ucy5wdXNoKHRoaXMuc3BsYXRNZXNoLnNjZW5lT3B0aW9uc1tpXSk7XHJcbiAgICAgICAgICAgIHNhdmVkU2NlbmVUcmFuc2Zvcm1Db21wb25lbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBzY2VuZS5wb3NpdGlvbi5jbG9uZSgpLFxyXG4gICAgICAgICAgICAgIHF1YXRlcm5pb246IHNjZW5lLnF1YXRlcm5pb24uY2xvbmUoKSxcclxuICAgICAgICAgICAgICBzY2FsZTogc2NlbmUuc2NhbGUuY2xvbmUoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXNwb3NlU29ydFdvcmtlcigpO1xyXG4gICAgICAgIHRoaXMuc3BsYXRNZXNoLmRpc3Bvc2UoKTtcclxuICAgICAgICB0aGlzLnNjZW5lUmV2ZWFsTW9kZSA9IFNjZW5lUmV2ZWFsTW9kZS5JbnN0YW50O1xyXG4gICAgICAgIHRoaXMuY3JlYXRlU3BsYXRNZXNoKCk7XHJcbiAgICAgICAgdGhpcy5hZGRTcGxhdEJ1ZmZlcnMoXHJcbiAgICAgICAgICBzYXZlZFNwbGF0QnVmZmVycyxcclxuICAgICAgICAgIHNhdmVkU2NlbmVPcHRpb25zLFxyXG4gICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgIClcclxuICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNoZWNrRm9yRWFybHlFeGl0KCkpIHJldHVyblxyXG4gICAgICAgICAgICBjaGVja0FuZEhpZGVMb2FkaW5nVUkoKTtcclxuICAgICAgICAgICAgdGhpcy5zcGxhdE1lc2guc2NlbmVzLmZvckVhY2goKHNjZW5lLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgIHNjZW5lLnBvc2l0aW9uLmNvcHkoc2F2ZWRTY2VuZVRyYW5zZm9ybUNvbXBvbmVudHNbaW5kZXhdLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICBzY2VuZS5xdWF0ZXJuaW9uLmNvcHkoXHJcbiAgICAgICAgICAgICAgICBzYXZlZFNjZW5lVHJhbnNmb3JtQ29tcG9uZW50c1tpbmRleF0ucXVhdGVybmlvblxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgc2NlbmUuc2NhbGUuY29weShzYXZlZFNjZW5lVHJhbnNmb3JtQ29tcG9uZW50c1tpbmRleF0uc2NhbGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zcGxhdE1lc2gudXBkYXRlVHJhbnNmb3JtcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNwbGF0UmVuZGVyUmVhZHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucnVuU3BsYXRTb3J0KHRydWUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChjaGVja0ZvckVhcmx5RXhpdCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGF0UmVuZGVyUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHNvcnRQcm9taXNlID0gdGhpcy5zb3J0UHJvbWlzZSB8fCBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICBzb3J0UHJvbWlzZS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3BsYXRSZW5kZXJSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBvbkRvbmUoKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIG9uRG9uZShlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnNwbGF0U2NlbmVSZW1vdmFsUHJvbWlzZVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgc2VsZi1kcml2ZW4gbW9kZVxyXG4gICAqL1xyXG4gIHN0YXJ0KCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZkRyaXZlbk1vZGUpIHtcclxuICAgICAgdGhpcy5yZXF1ZXN0RnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnNlbGZEcml2ZW5VcGRhdGVGdW5jKTtcclxuICAgICAgdGhpcy5zZWxmRHJpdmVuTW9kZVJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgdmlld2VyIHVubGVzcyBpdCBpcyBpbiBzZWxmIGRyaXZlbiBtb2RlLicpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHNlbGYtZHJpdmVuIG1vZGVcclxuICAgKi9cclxuICBzdG9wKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZkRyaXZlbk1vZGUgJiYgdGhpcy5zZWxmRHJpdmVuTW9kZVJ1bm5pbmcpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yZXF1ZXN0RnJhbWVJZCk7XHJcbiAgICAgIHRoaXMuc2VsZkRyaXZlbk1vZGVSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwb3NlIG9mIGFsbCByZXNvdXJjZXMgaGVsZCBkaXJlY3RseSBhbmQgaW5kaXJlY3RseSBieSB0aGlzIHZpZXdlci5cclxuICAgKi9cclxuICBhc3luYyBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNwb3NpbmdPckRpc3Bvc2VkKCkpIHJldHVybiB0aGlzLmRpc3Bvc2VQcm9taXNlXHJcblxyXG4gICAgZm9yIChsZXQgY29udHJvbGxlciBvZiB0aGlzLnNwbGF0U2NlbmVEb3dubG9hZENvbnRyb2xsZXJzKSB7XHJcbiAgICAgICAgY29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB3YWl0UHJvbWlzZXMgPSBbXTtcclxuICAgIGlmICh0aGlzLnNvcnRQcm9taXNlKSB7XHJcbiAgICAgIHdhaXRQcm9taXNlcy5wdXNoKHRoaXMuc29ydFByb21pc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlzcG9zaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZGlzcG9zZVByb21pc2UgPSBQcm9taXNlLmFsbCh3YWl0UHJvbWlzZXMpLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgaWYgKHRoaXMub3J0aG9ncmFwaGljQ29udHJvbHMpIHtcclxuICAgICAgICB0aGlzLm9ydGhvZ3JhcGhpY0NvbnRyb2xzLmRpc3Bvc2UoKTtcclxuICAgICAgICB0aGlzLm9ydGhvZ3JhcGhpY0NvbnRyb2xzID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5wZXJzcGVjdGl2ZUNvbnRyb2xzKSB7XHJcbiAgICAgICAgdGhpcy5wZXJzcGVjdGl2ZUNvbnRyb2xzLmRpc3Bvc2UoKTtcclxuICAgICAgICB0aGlzLnBlcnNwZWN0aXZlQ29udHJvbHMgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29udHJvbHMgPSBudWxsO1xyXG4gICAgICBpZiAodGhpcy5zcGxhdE1lc2gpIHtcclxuICAgICAgICB0aGlzLnNwbGF0TWVzaC5kaXNwb3NlKCk7XHJcbiAgICAgICAgdGhpcy5zcGxhdE1lc2ggPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmF2YXRhck1lc2gpIHtcclxuICAgICAgICBkaXNwb3NlQWxsTWVzaGVzKHRoaXMuYXZhdGFyTWVzaCk7XHJcbiAgICAgICAgdGhpcy5hdmF0YXJNZXNoID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zY2VuZUhlbHBlcikge1xyXG4gICAgICAgIHRoaXMuc2NlbmVIZWxwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIHRoaXMuc2NlbmVIZWxwZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci51bm9ic2VydmUodGhpcy5yb290RWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kaXNwb3NlU29ydFdvcmtlcigpO1xyXG4gICAgICB0aGlzLnJlbW92ZUV2ZW50SGFuZGxlcnMoKTtcclxuXHJcbiAgICAgIHRoaXMubG9hZGluZ1NwaW5uZXIucmVtb3ZlQWxsVGFza3MoKTtcclxuICAgICAgdGhpcy5sb2FkaW5nU3Bpbm5lci5zZXRDb250YWluZXIobnVsbCk7XHJcbiAgICAgIHRoaXMubG9hZGluZ1Byb2dyZXNzQmFyLmhpZGUoKTtcclxuICAgICAgdGhpcy5sb2FkaW5nUHJvZ3Jlc3NCYXIuc2V0Q29udGFpbmVyKG51bGwpO1xyXG4gICAgICAvLyB0aGlzLmluZm9QYW5lbC5zZXRDb250YWluZXIobnVsbClcclxuXHJcbiAgICAgIHRoaXMuY2FtZXJhID0gbnVsbDtcclxuICAgICAgdGhpcy50aHJlZVNjZW5lID0gbnVsbDtcclxuICAgICAgdGhpcy5zcGxhdFJlbmRlclJlYWR5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMucmVuZGVyZXIpIHtcclxuICAgICAgICBpZiAoIXRoaXMudXNpbmdFeHRlcm5hbFJlbmRlcmVyKSB7XHJcbiAgICAgICAgICB0aGlzLnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMucmVuZGVyZXIuZG9tRWxlbWVudCk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy51c2luZ0V4dGVybmFsUmVuZGVyZXIpIHtcclxuICAgICAgICAvLyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMucm9vdEVsZW1lbnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNvcnRXb3JrZXJTb3J0ZWRJbmRleGVzID0gbnVsbDtcclxuICAgICAgdGhpcy5zb3J0V29ya2VySW5kZXhlc1RvU29ydCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc29ydFdvcmtlclByZWNvbXB1dGVkRGlzdGFuY2VzID0gbnVsbDtcclxuICAgICAgdGhpcy5zb3J0V29ya2VyVHJhbnNmb3JtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmRpc3Bvc2luZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmRpc3Bvc2VQcm9taXNlID0gbnVsbDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcG9zZVByb21pc2VcclxuICB9XHJcbiAgdnN5bmNOdW0gPSA0XHJcbiAgc2VsZkRyaXZlblVwZGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLnNlbGZEcml2ZW5Nb2RlKSB7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0RnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnNlbGZEcml2ZW5VcGRhdGVGdW5jKTtcclxuXHJcbiAgICAgICAgLy8gY29uc3QgY3VycmVudFRpbWUgPSBnZXRDdXJyZW50VGltZSgpO1xyXG4gICAgICAgIC8vIGNvbnN0IGNhbGNEZWx0YSA9IGN1cnJlbnRUaW1lIC0gdGhpcy5sYXN0VGltZTtcclxuICAgICAgICAvLyBpZiAoY2FsY0RlbHRhID49IDEuMCAvIDMwLjApIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5sYXN0VGltZSA9IGN1cnJlbnRUaW1lO1xyXG4gICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIHJldHVyblxyXG4gICAgICAgIC8vIH1cclxuICAgIH1cclxuICAgIHRoaXMudnN5bmNDb3VudCsrO1xyXG5cclxuICAgIGlmICh0aGlzLnZzeW5jQ291bnQgPCB0aGlzLnZzeW5jTnVtKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudnN5bmNDb3VudCA9IDA7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIGlmICh0aGlzLnNob3VsZFJlbmRlcigpKSB7XHJcbiAgICAgIC8vYWRkIGV4cHJlc3Npb25cclxuXHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICAgIHRoaXMuY29uc2VjdXRpdmVSZW5kZXJGcmFtZXMrKztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uc2VjdXRpdmVSZW5kZXJGcmFtZXMgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJOZXh0RnJhbWUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGZvcmNlUmVuZGVyTmV4dEZyYW1lKCkge1xyXG4gICAgdGhpcy5yZW5kZXJOZXh0RnJhbWUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkUmVuZGVyID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCByZW5kZXJDb3VudCA9IDA7XHJcbiAgICBjb25zdCBsYXN0Q2FtZXJhUG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgY29uc3QgbGFzdENhbWVyYU9yaWVudGF0aW9uID0gbmV3IFF1YXRlcm5pb24oKTtcclxuICAgIGNvbnN0IGNoYW5nZUVwc2lsb24gPSAwLjAwMDE7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLmluaXRpYWxpemVkIHx8XHJcbiAgICAgICAgIXRoaXMuc3BsYXRSZW5kZXJSZWFkeSB8fFxyXG4gICAgICAgIHRoaXMuaXNEaXNwb3NpbmdPckRpc3Bvc2VkKClcclxuICAgICAgKVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgICAgbGV0IHNob3VsZFJlbmRlciA9IGZhbHNlO1xyXG4gICAgICBsZXQgY2FtZXJhQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5jYW1lcmEpIHtcclxuICAgICAgICBjb25zdCBjcCA9IHRoaXMuY2FtZXJhLnBvc2l0aW9uO1xyXG4gICAgICAgIGNvbnN0IGNvID0gdGhpcy5jYW1lcmEucXVhdGVybmlvbjtcclxuICAgICAgICBjYW1lcmFDaGFuZ2VkID1cclxuICAgICAgICAgIE1hdGguYWJzKGNwLnggLSBsYXN0Q2FtZXJhUG9zaXRpb24ueCkgPiBjaGFuZ2VFcHNpbG9uIHx8XHJcbiAgICAgICAgICBNYXRoLmFicyhjcC55IC0gbGFzdENhbWVyYVBvc2l0aW9uLnkpID4gY2hhbmdlRXBzaWxvbiB8fFxyXG4gICAgICAgICAgTWF0aC5hYnMoY3AueiAtIGxhc3RDYW1lcmFQb3NpdGlvbi56KSA+IGNoYW5nZUVwc2lsb24gfHxcclxuICAgICAgICAgIE1hdGguYWJzKGNvLnggLSBsYXN0Q2FtZXJhT3JpZW50YXRpb24ueCkgPiBjaGFuZ2VFcHNpbG9uIHx8XHJcbiAgICAgICAgICBNYXRoLmFicyhjby55IC0gbGFzdENhbWVyYU9yaWVudGF0aW9uLnkpID4gY2hhbmdlRXBzaWxvbiB8fFxyXG4gICAgICAgICAgTWF0aC5hYnMoY28ueiAtIGxhc3RDYW1lcmFPcmllbnRhdGlvbi56KSA+IGNoYW5nZUVwc2lsb24gfHxcclxuICAgICAgICAgIE1hdGguYWJzKGNvLncgLSBsYXN0Q2FtZXJhT3JpZW50YXRpb24udykgPiBjaGFuZ2VFcHNpbG9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzaG91bGRSZW5kZXIgPVxyXG4gICAgICAgIHRoaXMucmVuZGVyTW9kZSAhPT0gUmVuZGVyTW9kZS5OZXZlciAmJlxyXG4gICAgICAgIChyZW5kZXJDb3VudCA9PT0gMCB8fFxyXG4gICAgICAgICAgdGhpcy5zcGxhdE1lc2gudmlzaWJsZVJlZ2lvbkNoYW5naW5nIHx8XHJcbiAgICAgICAgICBjYW1lcmFDaGFuZ2VkIHx8XHJcbiAgICAgICAgICB0aGlzLnJlbmRlck1vZGUgPT09IFJlbmRlck1vZGUuQWx3YXlzIHx8XHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNNb2RlID09PSB0cnVlIHx8XHJcbiAgICAgICAgICB0aGlzLnJlbmRlck5leHRGcmFtZSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jYW1lcmEpIHtcclxuICAgICAgICBsYXN0Q2FtZXJhUG9zaXRpb24uY29weSh0aGlzLmNhbWVyYS5wb3NpdGlvbik7XHJcbiAgICAgICAgbGFzdENhbWVyYU9yaWVudGF0aW9uLmNvcHkodGhpcy5jYW1lcmEucXVhdGVybmlvbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlbmRlckNvdW50Kys7XHJcbiAgICAgIHJldHVybiBzaG91bGRSZW5kZXJcclxuICAgIH1cclxuICB9KSgpXHJcblxyXG4gIHJlbmRlciA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuaW5pdGlhbGl6ZWQgfHxcclxuICAgICAgICAhdGhpcy5zcGxhdFJlbmRlclJlYWR5IHx8XHJcbiAgICAgICAgdGhpcy5pc0Rpc3Bvc2luZ09yRGlzcG9zZWQoKVxyXG4gICAgICApXHJcbiAgICAgICAgcmV0dXJuXHJcblxyXG4gICAgICBjb25zdCBoYXNSZW5kZXJhYmxlcyA9ICh0aHJlZVNjZW5lKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgdGhyZWVTY2VuZS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgaWYgKGNoaWxkLnZpc2libGUpIHJldHVybiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgc2F2ZWRBdW9DbGVhciA9IHRoaXMucmVuZGVyZXIuYXV0b0NsZWFyO1xyXG4gICAgICBpZiAoaGFzUmVuZGVyYWJsZXModGhpcy50aHJlZVNjZW5lKSkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMudGhyZWVTY2VuZSwgdGhpcy5jYW1lcmEpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXV0b0NsZWFyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zcGxhdE1lc2gsIHRoaXMuY2FtZXJhKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hdXRvQ2xlYXIgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMuc2NlbmVIZWxwZXIuZ2V0Rm9jdXNNYXJrZXJPcGFjaXR5KCkgPiAwLjApXHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZUhlbHBlci5mb2N1c01hcmtlciwgdGhpcy5jYW1lcmEpO1xyXG4gICAgICBpZiAodGhpcy5zaG93Q29udHJvbFBsYW5lKVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmVIZWxwZXIuY29udHJvbFBsYW5lLCB0aGlzLmNhbWVyYSk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYXV0b0NsZWFyID0gc2F2ZWRBdW9DbGVhcjtcclxuICAgIH1cclxuICB9KSgpXHJcblxyXG5cclxuICB1cGRhdGUocmVuZGVyZXIsIGNhbWVyYSkge1xyXG4gICAgLy8gdGhpcy5mcmFtZSsrXHJcbiAgICBjb25zdCBmcHNEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnBzJyk7XHJcbiAgICBpZiAoZnBzRGl2KSB7XHJcbiAgICAgIGZwc0Rpdi50ZXh0Q29udGVudCA9IGBGUFM6ICR7dGhpcy5jdXJyZW50RlBTfWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5mcmFtZSA+PSB0aGlzLnRvdGFsRnJhbWVzKSBcclxuICAgICAgICB0aGlzLmZyYW1lID0gMDtcclxuICAgIFxyXG4gICAgaWYgKHRoaXMuZHJvcEluTW9kZSkgdGhpcy51cGRhdGVGb3JEcm9wSW5Nb2RlKHJlbmRlcmVyLCBjYW1lcmEpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuaW5pdGlhbGl6ZWQgfHxcclxuICAgICAgIXRoaXMuc3BsYXRSZW5kZXJSZWFkeSB8fFxyXG4gICAgICB0aGlzLmlzRGlzcG9zaW5nT3JEaXNwb3NlZCgpXHJcbiAgICApXHJcbiAgICAgIHJldHVyblxyXG5cclxuICAgIGlmICh0aGlzLmNvbnRyb2xzKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbHMudXBkYXRlKCk7XHJcbiAgICAgIGlmICh0aGlzLmNhbWVyYS5pc09ydGhvZ3JhcGhpY0NhbWVyYSAmJiAhdGhpcy51c2luZ0V4dGVybmFsQ2FtZXJhKSB7XHJcbiAgICAgICAgVmlld2VyLnNldENhbWVyYVBvc2l0aW9uRnJvbVpvb20oXHJcbiAgICAgICAgICB0aGlzLmNhbWVyYSxcclxuICAgICAgICAgIHRoaXMuY2FtZXJhLFxyXG4gICAgICAgICAgdGhpcy5jb250cm9sc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucnVuTW9ycGhVcGRhdGUoKTtcclxuICAgIHRoaXMucnVuU3BsYXRTb3J0KHRydWUsdHJ1ZSk7XHJcblxyXG4gICAgY29uc3QgcmVwbGFjZUluZGV4ZXMgPSBmYWxzZTtcclxuICAgIGlmIChyZXBsYWNlSW5kZXhlcykge1xyXG4gICAgICB0aGlzLnNwbGF0TWVzaC51cGRhdGVSZW5kZXJJbmRleGVzKFxyXG4gICAgICAgIHRoaXMuc29ydGVkSW5kZXhlcyxcclxuICAgICAgICB0aGlzLnNvcnRlZEluZGV4ZXMubGVuZ3RoXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVGb3JSZW5kZXJlclNpemVDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVNwbGF0TWVzaCgpO1xyXG4gICAgdGhpcy51cGRhdGVNZXNoQ3Vyc29yKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZQUygpO1xyXG4gICAgdGhpcy50aW1pbmdTZW5zaXRpdmVVcGRhdGVzKCk7XHJcbiAgICAvLyB0aGlzLnVwZGF0ZUluZm9QYW5lbCgpXHJcbiAgICB0aGlzLnVwZGF0ZUNvbnRyb2xQbGFuZSgpO1xyXG4gIH1cclxuXHJcbiAgc29ydGVkSW5kZXhlc1xyXG4gIHVwZGF0ZUZvckRyb3BJbk1vZGUocmVuZGVyZXIsIGNhbWVyYSkge1xyXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgaWYgKHRoaXMuc3BsYXRNZXNoKSB0aGlzLnNwbGF0TWVzaC5zZXRSZW5kZXJlcih0aGlzLnJlbmRlcmVyKTtcclxuICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhO1xyXG4gICAgaWYgKHRoaXMuY29udHJvbHMpIHRoaXMuY29udHJvbHMub2JqZWN0ID0gY2FtZXJhO1xyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICBsYXN0Q2FsY1RpbWUgPSBnZXRDdXJyZW50VGltZSgpXHJcbiAgZnBzRnJhbWVDb3VudCA9IDBcclxuICB1cGRhdGVGUFMgPSAoKSA9PiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29uc2VjdXRpdmVSZW5kZXJGcmFtZXMgPlxyXG4gICAgICBDT05TRUNVVElWRV9SRU5ERVJFRF9GUkFNRVNfRk9SX0ZQU19DQUxDVUxBVElPTlxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gZ2V0Q3VycmVudFRpbWUoKTtcclxuICAgICAgY29uc3QgY2FsY0RlbHRhID0gY3VycmVudFRpbWUgLSB0aGlzLmxhc3RDYWxjVGltZTtcclxuICAgICAgaWYgKGNhbGNEZWx0YSA+PSAxLjApIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGUFMgPSB0aGlzLmZwc0ZyYW1lQ291bnQ7XHJcbiAgICAgICAgdGhpcy5mcHNGcmFtZUNvdW50ID0gMDtcclxuICAgICAgICB0aGlzLmxhc3RDYWxjVGltZSA9IGN1cnJlbnRUaW1lO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZnBzRnJhbWVDb3VudCsrO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRGUFMgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRm9yUmVuZGVyZXJTaXplQ2hhbmdlcyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBsYXN0UmVuZGVyZXJTaXplID0gbmV3IFZlY3RvcjIoKTtcclxuICAgIGNvbnN0IGN1cnJlbnRSZW5kZXJlclNpemUgPSBuZXcgVmVjdG9yMigpO1xyXG4gICAgbGV0IGxhc3RDYW1lcmFPcnRob2dyYXBoaWM7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgaWYgKCF0aGlzLnVzaW5nRXh0ZXJuYWxDYW1lcmEpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmdldFNpemUoY3VycmVudFJlbmRlcmVyU2l6ZSk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgbGFzdENhbWVyYU9ydGhvZ3JhcGhpYyA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICBsYXN0Q2FtZXJhT3J0aG9ncmFwaGljICE9PSB0aGlzLmNhbWVyYS5pc09ydGhvZ3JhcGhpY0NhbWVyYSB8fFxyXG4gICAgICAgICAgY3VycmVudFJlbmRlcmVyU2l6ZS54ICE9PSBsYXN0UmVuZGVyZXJTaXplLnggfHxcclxuICAgICAgICAgIGN1cnJlbnRSZW5kZXJlclNpemUueSAhPT0gbGFzdFJlbmRlcmVyU2l6ZS55XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jYW1lcmEuaXNPcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICAgICAgICAgICAgdGhpcy5jYW1lcmEubGVmdCA9IC1jdXJyZW50UmVuZGVyZXJTaXplLnggLyAyLjA7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhLnJpZ2h0ID0gY3VycmVudFJlbmRlcmVyU2l6ZS54IC8gMi4wO1xyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYS50b3AgPSBjdXJyZW50UmVuZGVyZXJTaXplLnkgLyAyLjA7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhLmJvdHRvbSA9IC1jdXJyZW50UmVuZGVyZXJTaXplLnkgLyAyLjA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYS5hc3BlY3QgPSBjdXJyZW50UmVuZGVyZXJTaXplLnggLyBjdXJyZW50UmVuZGVyZXJTaXplLnk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgICBsYXN0UmVuZGVyZXJTaXplLmNvcHkoY3VycmVudFJlbmRlcmVyU2l6ZSk7XHJcbiAgICAgICAgICBsYXN0Q2FtZXJhT3J0aG9ncmFwaGljID0gdGhpcy5jYW1lcmEuaXNPcnRob2dyYXBoaWNDYW1lcmE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSkoKVxyXG5cclxuICB0aW1pbmdTZW5zaXRpdmVVcGRhdGVzID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBsYXN0VXBkYXRlVGltZTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50VGltZSA9IGdldEN1cnJlbnRUaW1lKCk7XHJcbiAgICAgIGlmICghbGFzdFVwZGF0ZVRpbWUpIGxhc3RVcGRhdGVUaW1lID0gY3VycmVudFRpbWU7XHJcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IGN1cnJlbnRUaW1lIC0gbGFzdFVwZGF0ZVRpbWU7XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZUNhbWVyYVRyYW5zaXRpb24oY3VycmVudFRpbWUpO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvY3VzTWFya2VyKHRpbWVEZWx0YSk7XHJcblxyXG4gICAgICBsYXN0VXBkYXRlVGltZSA9IGN1cnJlbnRUaW1lO1xyXG4gICAgfVxyXG4gIH0pKClcclxuXHJcbiAgdGVtcENhbWVyYVRhcmdldCA9IG5ldyBWZWN0b3IzKClcclxuICB0b1ByZXZpb3VzVGFyZ2V0ID0gbmV3IFZlY3RvcjMoKVxyXG4gIHRvTmV4dFRhcmdldCA9IG5ldyBWZWN0b3IzKClcclxuICB1cGRhdGVDYW1lcmFUcmFuc2l0aW9uID0gKGN1cnJlbnRUaW1lKSA9PiB7XHJcbiAgICBpZiAodGhpcy50cmFuc2l0aW9uaW5nQ2FtZXJhVGFyZ2V0KSB7XHJcbiAgICAgIHRoaXMudG9QcmV2aW91c1RhcmdldFxyXG4gICAgICAgIC5jb3B5KHRoaXMucHJldmlvdXNDYW1lcmFUYXJnZXQpXHJcbiAgICAgICAgLnN1Yih0aGlzLmNhbWVyYS5wb3NpdGlvbilcclxuICAgICAgICAubm9ybWFsaXplKCk7XHJcbiAgICAgIHRoaXMudG9OZXh0VGFyZ2V0XHJcbiAgICAgICAgLmNvcHkodGhpcy5uZXh0Q2FtZXJhVGFyZ2V0KVxyXG4gICAgICAgIC5zdWIodGhpcy5jYW1lcmEucG9zaXRpb24pXHJcbiAgICAgICAgLm5vcm1hbGl6ZSgpO1xyXG4gICAgICBjb25zdCByb3RhdGlvbkFuZ2xlID0gTWF0aC5hY29zKFxyXG4gICAgICAgIHRoaXMudG9QcmV2aW91c1RhcmdldC5kb3QodGhpcy50b05leHRUYXJnZXQpXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHJvdGF0aW9uU3BlZWQgPSAocm90YXRpb25BbmdsZSAvIChNYXRoLlBJIC8gMykpICogMC42NSArIDAuMztcclxuICAgICAgY29uc3QgdCA9XHJcbiAgICAgICAgKHJvdGF0aW9uU3BlZWQgLyByb3RhdGlvbkFuZ2xlKSAqXHJcbiAgICAgICAgKGN1cnJlbnRUaW1lIC0gdGhpcy50cmFuc2l0aW9uaW5nQ2FtZXJhVGFyZ2V0U3RhcnRUaW1lKTtcclxuICAgICAgdGhpcy50ZW1wQ2FtZXJhVGFyZ2V0XHJcbiAgICAgICAgLmNvcHkodGhpcy5wcmV2aW91c0NhbWVyYVRhcmdldClcclxuICAgICAgICAubGVycCh0aGlzLm5leHRDYW1lcmFUYXJnZXQsIHQpO1xyXG4gICAgICB0aGlzLmNhbWVyYS5sb29rQXQodGhpcy50ZW1wQ2FtZXJhVGFyZ2V0KTtcclxuICAgICAgdGhpcy5jb250cm9scy50YXJnZXQuY29weSh0aGlzLnRlbXBDYW1lcmFUYXJnZXQpO1xyXG4gICAgICBpZiAodCA+PSAxLjApIHtcclxuICAgICAgICB0aGlzLnRyYW5zaXRpb25pbmdDYW1lcmFUYXJnZXQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRm9jdXNNYXJrZXIgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc3QgcmVuZGVyRGltZW5zaW9ucyA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICBsZXQgd2FzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAodGltZURlbHRhKSB7XHJcbiAgICAgIHRoaXMuZ2V0UmVuZGVyRGltZW5zaW9ucyhyZW5kZXJEaW1lbnNpb25zKTtcclxuICAgICAgaWYgKHRoaXMudHJhbnNpdGlvbmluZ0NhbWVyYVRhcmdldCkge1xyXG4gICAgICAgIHRoaXMuc2NlbmVIZWxwZXIuc2V0Rm9jdXNNYXJrZXJWaXNpYmlsaXR5KHRydWUpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb2N1c01hcmtlck9wYWNpdHkgPSBNYXRoLm1heChcclxuICAgICAgICAgIHRoaXMuc2NlbmVIZWxwZXIuZ2V0Rm9jdXNNYXJrZXJPcGFjaXR5KCksXHJcbiAgICAgICAgICAwLjBcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBuZXdGb2N1c01hcmtlck9wYWNpdHkgPSBNYXRoLm1pbihcclxuICAgICAgICAgIGN1cnJlbnRGb2N1c01hcmtlck9wYWNpdHkgKyBGT0NVU19NQVJLRVJfRkFERV9JTl9TUEVFRCAqIHRpbWVEZWx0YSxcclxuICAgICAgICAgIDEuMFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zY2VuZUhlbHBlci5zZXRGb2N1c01hcmtlck9wYWNpdHkobmV3Rm9jdXNNYXJrZXJPcGFjaXR5KTtcclxuICAgICAgICB0aGlzLnNjZW5lSGVscGVyLnVwZGF0ZUZvY3VzTWFya2VyKFxyXG4gICAgICAgICAgdGhpcy5uZXh0Q2FtZXJhVGFyZ2V0LFxyXG4gICAgICAgICAgdGhpcy5jYW1lcmEsXHJcbiAgICAgICAgICByZW5kZXJEaW1lbnNpb25zXHJcbiAgICAgICAgKTtcclxuICAgICAgICB3YXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcmNlUmVuZGVyTmV4dEZyYW1lKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRGb2N1c01hcmtlck9wYWNpdHk7XHJcbiAgICAgICAgaWYgKHdhc1RyYW5zaXRpb25pbmcpIGN1cnJlbnRGb2N1c01hcmtlck9wYWNpdHkgPSAxLjA7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgY3VycmVudEZvY3VzTWFya2VyT3BhY2l0eSA9IE1hdGgubWluKFxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lSGVscGVyLmdldEZvY3VzTWFya2VyT3BhY2l0eSgpLFxyXG4gICAgICAgICAgICAxLjBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRGb2N1c01hcmtlck9wYWNpdHkgPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNjZW5lSGVscGVyLnVwZGF0ZUZvY3VzTWFya2VyKFxyXG4gICAgICAgICAgICB0aGlzLm5leHRDYW1lcmFUYXJnZXQsXHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhLFxyXG4gICAgICAgICAgICByZW5kZXJEaW1lbnNpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbGV0IG5ld0ZvY3VzTWFya2VyT3BhY2l0eSA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICBjdXJyZW50Rm9jdXNNYXJrZXJPcGFjaXR5IC0gRk9DVVNfTUFSS0VSX0ZBREVfT1VUX1NQRUVEICogdGltZURlbHRhLFxyXG4gICAgICAgICAgICAwLjBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnNjZW5lSGVscGVyLnNldEZvY3VzTWFya2VyT3BhY2l0eShuZXdGb2N1c01hcmtlck9wYWNpdHkpO1xyXG4gICAgICAgICAgaWYgKG5ld0ZvY3VzTWFya2VyT3BhY2l0eSA9PT0gMC4wKVxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lSGVscGVyLnNldEZvY3VzTWFya2VyVmlzaWJpbGl0eShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjdXJyZW50Rm9jdXNNYXJrZXJPcGFjaXR5ID4gMC4wKSB0aGlzLmZvcmNlUmVuZGVyTmV4dEZyYW1lKCk7XHJcbiAgICAgICAgd2FzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSkoKVxyXG5cclxuICB1cGRhdGVNZXNoQ3Vyc29yID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IG91dEhpdHMgPSBbXTtcclxuICAgIGNvbnN0IHJlbmRlckRpbWVuc2lvbnMgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmICh0aGlzLnNob3dNZXNoQ3Vyc29yKSB7XHJcbiAgICAgICAgdGhpcy5mb3JjZVJlbmRlck5leHRGcmFtZSgpO1xyXG4gICAgICAgIHRoaXMuZ2V0UmVuZGVyRGltZW5zaW9ucyhyZW5kZXJEaW1lbnNpb25zKTtcclxuICAgICAgICBvdXRIaXRzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5yYXljYXN0ZXIuc2V0RnJvbUNhbWVyYUFuZFNjcmVlblBvc2l0aW9uKFxyXG4gICAgICAgICAgdGhpcy5jYW1lcmEsXHJcbiAgICAgICAgICB0aGlzLm1vdXNlUG9zaXRpb24sXHJcbiAgICAgICAgICByZW5kZXJEaW1lbnNpb25zXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJheWNhc3Rlci5pbnRlcnNlY3RTcGxhdE1lc2godGhpcy5zcGxhdE1lc2gsIG91dEhpdHMpO1xyXG4gICAgICAgIGlmIChvdXRIaXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc2NlbmVIZWxwZXIuc2V0TWVzaEN1cnNvclZpc2liaWxpdHkodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLnNjZW5lSGVscGVyLnBvc2l0aW9uQW5kT3JpZW50TWVzaEN1cnNvcihcclxuICAgICAgICAgICAgb3V0SGl0c1swXS5vcmlnaW4sXHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNjZW5lSGVscGVyLnNldE1lc2hDdXJzb3JWaXNpYmlsaXR5KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmVIZWxwZXIuZ2V0TWVzY2hDdXJzb3JWaXNpYmlsaXR5KCkpXHJcbiAgICAgICAgICB0aGlzLmZvcmNlUmVuZGVyTmV4dEZyYW1lKCk7XHJcbiAgICAgICAgdGhpcy5zY2VuZUhlbHBlci5zZXRNZXNoQ3Vyc29yVmlzaWJpbGl0eShmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KSgpXHJcblxyXG4gIHVwZGF0ZUluZm9QYW5lbCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCByZW5kZXJEaW1lbnNpb25zID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAoIXRoaXMuc2hvd0luZm8pIHJldHVyblxyXG4gICAgICBjb25zdCBzcGxhdENvdW50ID0gdGhpcy5zcGxhdE1lc2guZ2V0U3BsYXRDb3VudCgpO1xyXG4gICAgICB0aGlzLmdldFJlbmRlckRpbWVuc2lvbnMocmVuZGVyRGltZW5zaW9ucyk7XHJcbiAgICAgIGNvbnN0IGNhbWVyYUxvb2tBdFBvc2l0aW9uID0gdGhpcy5jb250cm9scyA/IHRoaXMuY29udHJvbHMudGFyZ2V0IDogbnVsbDtcclxuICAgICAgY29uc3QgbWVzaEN1cnNvclBvc2l0aW9uID0gdGhpcy5zaG93TWVzaEN1cnNvclxyXG4gICAgICAgID8gdGhpcy5zY2VuZUhlbHBlci5tZXNoQ3Vyc29yLnBvc2l0aW9uXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgICBjb25zdCBzcGxhdFJlbmRlckNvdW50UGN0ID1cclxuICAgICAgICBzcGxhdENvdW50ID4gMCA/ICh0aGlzLnNwbGF0UmVuZGVyQ291bnQgLyBzcGxhdENvdW50KSAqIDEwMCA6IDA7XHJcbiAgICAgIC8vIHRoaXMuaW5mb1BhbmVsLnVwZGF0ZShcclxuICAgICAgLy8gICByZW5kZXJEaW1lbnNpb25zLFxyXG4gICAgICAvLyAgIHRoaXMuY2FtZXJhLnBvc2l0aW9uLFxyXG4gICAgICAvLyAgIGNhbWVyYUxvb2tBdFBvc2l0aW9uLFxyXG4gICAgICAvLyAgIHRoaXMuY2FtZXJhLnVwLFxyXG4gICAgICAvLyAgIHRoaXMuY2FtZXJhLmlzT3J0aG9ncmFwaGljQ2FtZXJhLFxyXG4gICAgICAvLyAgIG1lc2hDdXJzb3JQb3NpdGlvbixcclxuICAgICAgLy8gICB0aGlzLmN1cnJlbnRGUFMgfHwgJ04vQScsXHJcbiAgICAgIC8vICAgc3BsYXRDb3VudCxcclxuICAgICAgLy8gICB0aGlzLnNwbGF0UmVuZGVyQ291bnQsXHJcbiAgICAgIC8vICAgc3BsYXRSZW5kZXJDb3VudFBjdCxcclxuICAgICAgLy8gICB0aGlzLmxhc3RTb3J0VGltZSxcclxuICAgICAgLy8gICB0aGlzLmZvY2FsQWRqdXN0bWVudCxcclxuICAgICAgLy8gICB0aGlzLnNwbGF0TWVzaC5nZXRTcGxhdFNjYWxlKCksXHJcbiAgICAgIC8vICAgdGhpcy5zcGxhdE1lc2guZ2V0UG9pbnRDbG91ZE1vZGVFbmFibGVkKClcclxuICAgICAgLy8gKVxyXG4gICAgfVxyXG4gIH0pKClcclxuXHJcbiAgdXBkYXRlQ29udHJvbFBsYW5lKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0NvbnRyb2xQbGFuZSkge1xyXG4gICAgICB0aGlzLnNjZW5lSGVscGVyLnNldENvbnRyb2xQbGFuZVZpc2liaWxpdHkodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2NlbmVIZWxwZXIucG9zaXRpb25BbmRPcmllbnRDb250cm9sUGxhbmUoXHJcbiAgICAgICAgdGhpcy5jb250cm9scy50YXJnZXQsXHJcbiAgICAgICAgdGhpcy5jYW1lcmEudXBcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2NlbmVIZWxwZXIuc2V0Q29udHJvbFBsYW5lVmlzaWJpbGl0eShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtdnBNYXRyaXggPSBuZXcgTWF0cml4NCgpXHJcbiAgY2FtZXJhUG9zaXRpb25BcnJheSA9IFtdXHJcbiAgbGFzdFNvcnRWaWV3RGlyID0gbmV3IFZlY3RvcjMoMCwgMCwgLTEpXHJcbiAgc29ydFZpZXdEaXIgPSBuZXcgVmVjdG9yMygwLCAwLCAtMSlcclxuICBsYXN0U29ydFZpZXdQb3MgPSBuZXcgVmVjdG9yMygpXHJcbiAgc29ydFZpZXdPZmZzZXQgPSBuZXcgVmVjdG9yMygpXHJcbiAgcXVldWVkU29ydHMgPSBbXVxyXG5cclxuICBwYXJ0aWFsU29ydHMgPSBbXHJcbiAgICB7XHJcbiAgICAgIGFuZ2xlVGhyZXNob2xkOiAwLjU1LFxyXG4gICAgICBzb3J0RnJhY3Rpb25zOiBbMC4xMjUsIDAuMzMzMzMsIDAuNzVdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBhbmdsZVRocmVzaG9sZDogMC42NSxcclxuICAgICAgc29ydEZyYWN0aW9uczogWzAuMzMzMzMsIDAuNjY2NjddXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBhbmdsZVRocmVzaG9sZDogMC44LFxyXG4gICAgICBzb3J0RnJhY3Rpb25zOiBbMC41XVxyXG4gICAgfVxyXG4gIF1cclxuICBydW5TcGxhdFNvcnQgPSAoZm9yY2UgPSBmYWxzZSwgZm9yY2VTb3J0QWxsID0gZmFsc2UpID0+IHtcclxuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcclxuICAgIGlmICh0aGlzLnNvcnRSdW5uaW5nKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpXHJcbiAgICBpZiAodGhpcy5zcGxhdE1lc2guZ2V0U3BsYXRDb3VudCgpIDw9IDApIHtcclxuICAgICAgdGhpcy5zcGxhdFJlbmRlckNvdW50ID0gMDtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYW5nbGVEaWZmID0gMDtcclxuICAgIGxldCBwb3NpdGlvbkRpZmYgPSAwO1xyXG4gICAgbGV0IG5lZWRzUmVmcmVzaEZvclJvdGF0aW9uID0gZmFsc2U7XHJcbiAgICBsZXQgbmVlZHNSZWZyZXNoRm9yUG9zaXRpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNvcnRWaWV3RGlyLnNldCgwLCAwLCAtMSkuYXBwbHlRdWF0ZXJuaW9uKHRoaXMuY2FtZXJhLnF1YXRlcm5pb24pO1xyXG4gICAgYW5nbGVEaWZmID0gdGhpcy5zb3J0Vmlld0Rpci5kb3QodGhpcy5sYXN0U29ydFZpZXdEaXIpO1xyXG4gICAgcG9zaXRpb25EaWZmID0gdGhpcy5zb3J0Vmlld09mZnNldFxyXG4gICAgICAuY29weSh0aGlzLmNhbWVyYS5wb3NpdGlvbilcclxuICAgICAgLnN1Yih0aGlzLmxhc3RTb3J0Vmlld1BvcylcclxuICAgICAgLmxlbmd0aCgpO1xyXG5cclxuICAgIGlmICghZm9yY2UpIHtcclxuICAgICAgaWYgKCF0aGlzLnNwbGF0TWVzaC5keW5hbWljTW9kZSAmJiB0aGlzLnF1ZXVlZFNvcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIGlmIChhbmdsZURpZmYgPD0gMC45OSkgbmVlZHNSZWZyZXNoRm9yUm90YXRpb24gPSB0cnVlO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbkRpZmYgPj0gMS4wKSBuZWVkc1JlZnJlc2hGb3JQb3NpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgaWYgKCFuZWVkc1JlZnJlc2hGb3JSb3RhdGlvbiAmJiAhbmVlZHNSZWZyZXNoRm9yUG9zaXRpb24pXHJcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zb3J0UnVubmluZyA9IHRydWU7XHJcbiAgICBsZXQgeyBzcGxhdFJlbmRlckNvdW50LCBzaG91bGRTb3J0QWxsIH0gPSB0aGlzLmdhdGhlclNjZW5lTm9kZXNGb3JTb3J0KCk7XHJcbiAgICBzaG91bGRTb3J0QWxsID0gc2hvdWxkU29ydEFsbCB8fCBmb3JjZVNvcnRBbGw7XHJcbiAgICB0aGlzLnNwbGF0UmVuZGVyQ291bnQgPSBzcGxhdFJlbmRlckNvdW50O1xyXG5cclxuICAgIHRoaXMubXZwTWF0cml4LmNvcHkodGhpcy5jYW1lcmEubWF0cml4V29ybGQpLmludmVydCgpO1xyXG4gICAgY29uc3QgbXZwQ2FtZXJhID0gdGhpcy5wZXJzcGVjdGl2ZUNhbWVyYSB8fCB0aGlzLmNhbWVyYTtcclxuICAgIHRoaXMubXZwTWF0cml4LnByZW11bHRpcGx5KG12cENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgIGlmICghdGhpcy5zcGxhdE1lc2guZHluYW1pY01vZGUpXHJcbiAgICAgIHRoaXMubXZwTWF0cml4Lm11bHRpcGx5KHRoaXMuc3BsYXRNZXNoLm1hdHJpeFdvcmxkKTtcclxuXHJcbiAgICBsZXQgZ3B1QWNjZWxlcmF0ZWRTb3J0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5ncHVBY2NlbGVyYXRlZFNvcnQgJiZcclxuICAgICAgKHRoaXMucXVldWVkU29ydHMubGVuZ3RoIDw9IDEgfHwgdGhpcy5xdWV1ZWRTb3J0cy5sZW5ndGggJSAyID09PSAwKVxyXG4gICAgKSB7XHJcbiAgICAgIGdwdUFjY2VsZXJhdGVkU29ydFByb21pc2UgPSB0aGlzLnNwbGF0TWVzaC5jb21wdXRlRGlzdGFuY2VzT25HUFUoXHJcbiAgICAgICAgdGhpcy5tdnBNYXRyaXgsXHJcbiAgICAgICAgdGhpcy5zb3J0V29ya2VyUHJlY29tcHV0ZWREaXN0YW5jZXNcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBncHVBY2NlbGVyYXRlZFNvcnRQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5xdWV1ZWRTb3J0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBpZiAodGhpcy5zcGxhdE1lc2guZHluYW1pY01vZGUgfHwgc2hvdWxkU29ydEFsbCkge1xyXG4gICAgICAgICAgdGhpcy5xdWV1ZWRTb3J0cy5wdXNoKHRoaXMuc3BsYXRSZW5kZXJDb3VudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvciAobGV0IHBhcnRpYWxTb3J0IG9mIHRoaXMucGFydGlhbFNvcnRzKSB7XHJcbiAgICAgICAgICAgIGlmIChhbmdsZURpZmYgPCBwYXJ0aWFsU29ydC5hbmdsZVRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IHNvcnRGcmFjdGlvbiBvZiBwYXJ0aWFsU29ydC5zb3J0RnJhY3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlZFNvcnRzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IodGhpcy5zcGxhdFJlbmRlckNvdW50ICogc29ydEZyYWN0aW9uKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5xdWV1ZWRTb3J0cy5wdXNoKHRoaXMuc3BsYXRSZW5kZXJDb3VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBzb3J0Q291bnQgPSBNYXRoLm1pbih0aGlzLnF1ZXVlZFNvcnRzLnNoaWZ0KCksIHRoaXMuc3BsYXRSZW5kZXJDb3VudCk7XHJcbiAgICAgIHRoaXMuc3BsYXRTb3J0Q291bnQgPSBzb3J0Q291bnQ7XHJcblxyXG4gICAgICB0aGlzLmNhbWVyYVBvc2l0aW9uQXJyYXlbMF0gPSB0aGlzLmNhbWVyYS5wb3NpdGlvbi54O1xyXG4gICAgICB0aGlzLmNhbWVyYVBvc2l0aW9uQXJyYXlbMV0gPSB0aGlzLmNhbWVyYS5wb3NpdGlvbi55O1xyXG4gICAgICB0aGlzLmNhbWVyYVBvc2l0aW9uQXJyYXlbMl0gPSB0aGlzLmNhbWVyYS5wb3NpdGlvbi56O1xyXG5cclxuICAgICAgY29uc3Qgc29ydE1lc3NhZ2UgPSB7XHJcbiAgICAgICAgbW9kZWxWaWV3UHJvajogdGhpcy5tdnBNYXRyaXguZWxlbWVudHMsXHJcbiAgICAgICAgY2FtZXJhUG9zaXRpb246IHRoaXMuY2FtZXJhUG9zaXRpb25BcnJheSxcclxuICAgICAgICBzcGxhdFJlbmRlckNvdW50OiB0aGlzLnNwbGF0UmVuZGVyQ291bnQsXHJcbiAgICAgICAgc3BsYXRTb3J0Q291bnQ6IHNvcnRDb3VudCxcclxuICAgICAgICB1c2VQcmVjb21wdXRlZERpc3RhbmNlczogdGhpcy5ncHVBY2NlbGVyYXRlZFNvcnRcclxuICAgICAgfTtcclxuICAgICAgaWYgKHRoaXMuc3BsYXRNZXNoLmR5bmFtaWNNb2RlKSB7XHJcbiAgICAgICAgdGhpcy5zcGxhdE1lc2guZmlsbFRyYW5zZm9ybXNBcnJheSh0aGlzLnNvcnRXb3JrZXJUcmFuc2Zvcm1zKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuc2hhcmVkTWVtb3J5Rm9yV29ya2Vycykge1xyXG4gICAgICAgIHNvcnRNZXNzYWdlLmluZGV4ZXNUb1NvcnQgPSB0aGlzLnNvcnRXb3JrZXJJbmRleGVzVG9Tb3J0O1xyXG4gICAgICAgIHNvcnRNZXNzYWdlLnRyYW5zZm9ybXMgPSB0aGlzLnNvcnRXb3JrZXJUcmFuc2Zvcm1zO1xyXG4gICAgICAgIGlmICh0aGlzLmdwdUFjY2VsZXJhdGVkU29ydCkge1xyXG4gICAgICAgICAgc29ydE1lc3NhZ2UucHJlY29tcHV0ZWREaXN0YW5jZXMgPSB0aGlzLnNvcnRXb3JrZXJQcmVjb21wdXRlZERpc3RhbmNlcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc29ydFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc29ydFByb21pc2VSZXNvbHZlciA9IHJlc29sdmU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMucHJlU29ydE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnByZVNvcnRNZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNvcnRXb3JrZXIucG9zdE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wcmVTb3J0TWVzc2FnZXMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNvcnRXb3JrZXIucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgIHNvcnQ6IHNvcnRNZXNzYWdlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMucXVldWVkU29ydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0U29ydFZpZXdQb3MuY29weSh0aGlzLmNhbWVyYS5wb3NpdGlvbik7XHJcbiAgICAgICAgdGhpcy5sYXN0U29ydFZpZXdEaXIuY29weSh0aGlzLnNvcnRWaWV3RGlyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBncHVBY2NlbGVyYXRlZFNvcnRQcm9taXNlXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmUgd2hpY2ggc3BsYXRzIHRvIHJlbmRlciBieSBjaGVja2luZyB3aGljaCBhcmUgaW5zaWRlIG9yIGNsb3NlIHRvIHRoZSB2aWV3IGZydXN0dW1cclxuICAgKi9cclxuICBnYXRoZXJTY2VuZU5vZGVzRm9yU29ydCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBub2RlUmVuZGVyTGlzdCA9IFtdO1xyXG4gICAgbGV0IGFsbFNwbGF0c1NvcnRCdWZmZXIgPSBudWxsO1xyXG4gICAgY29uc3QgdGVtcFZlY3RvcllaID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIGNvbnN0IHRlbXBWZWN0b3JYWiA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICBjb25zdCB0ZW1wVmVjdG9yID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIGNvbnN0IG1vZGVsVmlldyA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICBjb25zdCBiYXNlTW9kZWxWaWV3ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgIGNvbnN0IHNjZW5lVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgIGNvbnN0IHJlbmRlckRpbWVuc2lvbnMgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgY29uc3QgZm9yd2FyZCA9IG5ldyBWZWN0b3IzKDAsIDAsIC0xKTtcclxuXHJcbiAgICBjb25zdCB0ZW1wTWF4ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIGNvbnN0IG5vZGVTaXplID0gKG5vZGUpID0+IHtcclxuICAgICAgcmV0dXJuIHRlbXBNYXguY29weShub2RlLm1heCkuc3ViKG5vZGUubWluKS5sZW5ndGgoKVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGdhdGhlckFsbE5vZGVzID0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5nZXRSZW5kZXJEaW1lbnNpb25zKHJlbmRlckRpbWVuc2lvbnMpO1xyXG4gICAgICBjb25zdCBjYW1lcmFGb2NhbExlbmd0aCA9XHJcbiAgICAgICAgcmVuZGVyRGltZW5zaW9ucy55IC9cclxuICAgICAgICAyLjAgL1xyXG4gICAgICAgIE1hdGgudGFuKCh0aGlzLmNhbWVyYS5mb3YgLyAyLjApICogTWF0aFV0aWxzLkRFRzJSQUQpO1xyXG4gICAgICBjb25zdCBmb3ZYT3ZlcjIgPSBNYXRoLmF0YW4ocmVuZGVyRGltZW5zaW9ucy54IC8gMi4wIC8gY2FtZXJhRm9jYWxMZW5ndGgpO1xyXG4gICAgICBjb25zdCBmb3ZZT3ZlcjIgPSBNYXRoLmF0YW4ocmVuZGVyRGltZW5zaW9ucy55IC8gMi4wIC8gY2FtZXJhRm9jYWxMZW5ndGgpO1xyXG4gICAgICBjb25zdCBjb3NGb3ZYT3ZlcjIgPSBNYXRoLmNvcyhmb3ZYT3ZlcjIpO1xyXG4gICAgICBjb25zdCBjb3NGb3ZZT3ZlcjIgPSBNYXRoLmNvcyhmb3ZZT3ZlcjIpO1xyXG5cclxuICAgICAgY29uc3Qgc3BsYXRUcmVlID0gdGhpcy5zcGxhdE1lc2guZ2V0U3BsYXRUcmVlKCk7XHJcblxyXG4gICAgICBpZiAoc3BsYXRUcmVlKSB7XHJcbiAgICAgICAgYmFzZU1vZGVsVmlldy5jb3B5KHRoaXMuY2FtZXJhLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtcclxuICAgICAgICBpZiAoIXRoaXMuc3BsYXRNZXNoLmR5bmFtaWNNb2RlKVxyXG4gICAgICAgICAgYmFzZU1vZGVsVmlldy5tdWx0aXBseSh0aGlzLnNwbGF0TWVzaC5tYXRyaXhXb3JsZCk7XHJcblxyXG4gICAgICAgIGxldCBub2RlUmVuZGVyQ291bnQgPSAwO1xyXG4gICAgICAgIGxldCBzcGxhdFJlbmRlckNvdW50ID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzcGxhdFRyZWUuc3ViVHJlZXMubGVuZ3RoOyBzKyspIHtcclxuICAgICAgICAgIGNvbnN0IHN1YlRyZWUgPSBzcGxhdFRyZWUuc3ViVHJlZXNbc107XHJcbiAgICAgICAgICBtb2RlbFZpZXcuY29weShiYXNlTW9kZWxWaWV3KTtcclxuICAgICAgICAgIGlmICh0aGlzLnNwbGF0TWVzaC5keW5hbWljTW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNwbGF0TWVzaC5nZXRTY2VuZVRyYW5zZm9ybShzLCBzY2VuZVRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIG1vZGVsVmlldy5tdWx0aXBseShzY2VuZVRyYW5zZm9ybSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBub2RlQ291bnQgPSBzdWJUcmVlLm5vZGVzV2l0aEluZGV4ZXMubGVuZ3RoO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBub2RlID0gc3ViVHJlZS5ub2Rlc1dpdGhJbmRleGVzW2ldO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIW5vZGUuZGF0YSB8fFxyXG4gICAgICAgICAgICAgICFub2RlLmRhdGEuaW5kZXhlcyB8fFxyXG4gICAgICAgICAgICAgIG5vZGUuZGF0YS5pbmRleGVzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgdGVtcFZlY3Rvci5jb3B5KG5vZGUuY2VudGVyKS5hcHBseU1hdHJpeDQobW9kZWxWaWV3KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlVG9Ob2RlID0gdGVtcFZlY3Rvci5sZW5ndGgoKTtcclxuICAgICAgICAgICAgdGVtcFZlY3Rvci5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgICAgIHRlbXBWZWN0b3JZWi5jb3B5KHRlbXBWZWN0b3IpLnNldFgoMCkubm9ybWFsaXplKCk7XHJcbiAgICAgICAgICAgIHRlbXBWZWN0b3JYWi5jb3B5KHRlbXBWZWN0b3IpLnNldFkoMCkubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjYW1lcmFBbmdsZVhaRG90ID0gZm9yd2FyZC5kb3QodGVtcFZlY3RvclhaKTtcclxuICAgICAgICAgICAgY29uc3QgY2FtZXJhQW5nbGVZWkRvdCA9IGZvcndhcmQuZG90KHRlbXBWZWN0b3JZWik7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBucyA9IG5vZGVTaXplKG5vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBvdXRPZkZvdlkgPSBjYW1lcmFBbmdsZVlaRG90IDwgY29zRm92WU92ZXIyIC0gMC42O1xyXG4gICAgICAgICAgICBjb25zdCBvdXRPZkZvdlggPSBjYW1lcmFBbmdsZVhaRG90IDwgY29zRm92WE92ZXIyIC0gMC42O1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIWdhdGhlckFsbE5vZGVzICYmXHJcbiAgICAgICAgICAgICAgKG91dE9mRm92WCB8fCBvdXRPZkZvdlkpICYmXHJcbiAgICAgICAgICAgICAgZGlzdGFuY2VUb05vZGUgPiBuc1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNwbGF0UmVuZGVyQ291bnQgKz0gbm9kZS5kYXRhLmluZGV4ZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBub2RlUmVuZGVyTGlzdFtub2RlUmVuZGVyQ291bnRdID0gbm9kZTtcclxuICAgICAgICAgICAgbm9kZS5kYXRhLmRpc3RhbmNlVG9Ob2RlID0gZGlzdGFuY2VUb05vZGU7XHJcbiAgICAgICAgICAgIG5vZGVSZW5kZXJDb3VudCsrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbm9kZVJlbmRlckxpc3QubGVuZ3RoID0gbm9kZVJlbmRlckNvdW50O1xyXG4gICAgICAgIG5vZGVSZW5kZXJMaXN0LnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIGlmIChhLmRhdGEuZGlzdGFuY2VUb05vZGUgPCBiLmRhdGEuZGlzdGFuY2VUb05vZGUpIHJldHVybiAtMVxyXG4gICAgICAgICAgZWxzZSByZXR1cm4gMVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgY3VycmVudEJ5dGVPZmZzZXQgPSBzcGxhdFJlbmRlckNvdW50ICogQ29uc3RhbnRzLkJ5dGVzUGVySW50O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZVJlbmRlckNvdW50OyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2RlUmVuZGVyTGlzdFtpXTtcclxuICAgICAgICAgIGNvbnN0IHdpbmRvd1NpemVJbnRzID0gbm9kZS5kYXRhLmluZGV4ZXMubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3Qgd2luZG93U2l6ZUJ5dGVzID0gd2luZG93U2l6ZUludHMgKiBDb25zdGFudHMuQnl0ZXNQZXJJbnQ7XHJcbiAgICAgICAgICBsZXQgZGVzdFZpZXcgPSBuZXcgVWludDMyQXJyYXkoXHJcbiAgICAgICAgICAgIHRoaXMuc29ydFdvcmtlckluZGV4ZXNUb1NvcnQuYnVmZmVyLFxyXG4gICAgICAgICAgICBjdXJyZW50Qnl0ZU9mZnNldCAtIHdpbmRvd1NpemVCeXRlcyxcclxuICAgICAgICAgICAgd2luZG93U2l6ZUludHNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBkZXN0Vmlldy5zZXQobm9kZS5kYXRhLmluZGV4ZXMpO1xyXG4gICAgICAgICAgY3VycmVudEJ5dGVPZmZzZXQgLT0gd2luZG93U2l6ZUJ5dGVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHNwbGF0UmVuZGVyQ291bnQ6IHNwbGF0UmVuZGVyQ291bnQsXHJcbiAgICAgICAgICBzaG91bGRTb3J0QWxsOiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB0b3RhbFNwbGF0Q291bnQgPSB0aGlzLnNwbGF0TWVzaC5nZXRTcGxhdENvdW50KCk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIWFsbFNwbGF0c1NvcnRCdWZmZXIgfHxcclxuICAgICAgICAgIGFsbFNwbGF0c1NvcnRCdWZmZXIubGVuZ3RoICE9PSB0b3RhbFNwbGF0Q291bnRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGFsbFNwbGF0c1NvcnRCdWZmZXIgPSBuZXcgVWludDMyQXJyYXkodG90YWxTcGxhdENvdW50KTtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxTcGxhdENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgYWxsU3BsYXRzU29ydEJ1ZmZlcltpXSA9IGk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc29ydFdvcmtlckluZGV4ZXNUb1NvcnQuc2V0KGFsbFNwbGF0c1NvcnRCdWZmZXIpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBzcGxhdFJlbmRlckNvdW50OiB0b3RhbFNwbGF0Q291bnQsXHJcbiAgICAgICAgICBzaG91bGRTb3J0QWxsOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSkoKVxyXG5cclxuICBnZXRTcGxhdE1lc2goKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zcGxhdE1lc2hcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhIHJlZmVyZW5jZSB0byBhIHNwbGF0IHNjZW5lLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzY2VuZUluZGV4IFRoZSBpbmRleCBvZiB0aGUgc2NlbmUgdG8gd2hpY2ggdGhlIHJlZmVyZW5jZSB3aWxsIGJlIHJldHVybmVkXHJcbiAgICogQHJldHVybiB7U3BsYXRTY2VuZX1cclxuICAgKi9cclxuICBnZXRTcGxhdFNjZW5lKHNjZW5lSW5kZXgpIHtcclxuICAgIHJldHVybiB0aGlzLnNwbGF0TWVzaC5nZXRTY2VuZShzY2VuZUluZGV4KVxyXG4gIH1cclxuXHJcbiAgZ2V0U2NlbmVDb3VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNwbGF0TWVzaC5nZXRTY2VuZUNvdW50KClcclxuICB9XHJcblxyXG4gIGlzTW9iaWxlKCkge1xyXG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoJ01vYmknKVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlQm9uZXNGcm9tSnNvbihib25lc0pzb24pIHtcclxuICAgIGNvbnN0IGJvbmVzID0gW107XHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlQm9uZVJlY3Vyc2l2ZShqc29uQm9uZSwgcGFyZW50ID0gbnVsbCkge1xyXG4gICAgICBjb25zdCBib25lID0gbmV3IEJvbmUoKTtcclxuICAgICAgYm9uZS5uYW1lID0ganNvbkJvbmUubmFtZTtcclxuICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgIHBhcmVudC5hZGQoYm9uZSk7XHJcbiAgICAgIH1cclxuICAgICAgYm9uZS5wb3NpdGlvbi5zZXQoLi4uanNvbkJvbmUucG9zaXRpb24pO1xyXG4gICAgICBib25lcy5wdXNoKGJvbmUpO1xyXG5cclxuICAgICAgaWYgKGpzb25Cb25lLmNoaWxkcmVuKSB7XHJcbiAgICAgICAganNvbkJvbmUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGRKc29uQm9uZSkgPT5cclxuICAgICAgICAgIGNyZWF0ZUJvbmVSZWN1cnNpdmUoY2hpbGRKc29uQm9uZSwgYm9uZSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBib25lXHJcbiAgICB9XHJcblxyXG4gICAgYm9uZXNKc29uLmZvckVhY2goKGJvbmVKc29uKSA9PiBjcmVhdGVCb25lUmVjdXJzaXZlKGJvbmVKc29uKSk7XHJcblxyXG4gICAgcmV0dXJuIGJvbmVzXHJcbiAgfVxyXG5cclxuICB1cGRhdGVNb3JwaFRhcmdldChpbnB1dE1lc2gpIHtcclxuICAgIHRoaXMuYXZhdGFyTWVzaCA9IGlucHV0TWVzaDtcclxuICAgIHRoaXMuc3BsYXRNZXNoLmZsYW1lTW9kZWwgPSBpbnB1dE1lc2g7XHJcbiAgICB0aGlzLnNwbGF0TWVzaC51c2VGbGFtZU1vZGVsID0gdGhpcy51c2VGbGFtZTtcclxuICAgIGlmKHRoaXMudXNlRmxhbWUgPT0gdHJ1ZSkge1xyXG4gICAgICAgIC8vIGNvbnN0IHNraW5EYXRhID0ge1xyXG4gICAgICAgIC8vICAgICBib25lczogW1xyXG4gICAgICAgIC8vICAgICAgICAge1xyXG4gICAgICAgIC8vICAgICAgICAgXCJuYW1lXCI6IFwicm9vdFwiLFxyXG4gICAgICAgIC8vICAgICAgICAgXCJwb3NpdGlvblwiOiBbLTEuNzE0OWUtMDQsIC0xLjQyNTJlLTAxLCAtOC4yNTQxZS0wMl0sXHJcbiAgICAgICAgLy8gICAgICAgICBcImNoaWxkcmVuXCI6IFtcclxuICAgICAgICAvLyAgICAgICAgICAgICB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJuYW1lXCI6IFwibmVja1wiLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgIFwicG9zaXRpb25cIjogWy01LjY5ODhlLTA1LCAtMS42MDY5ZS0wMiwgLTUuNzg1OWUtMDJdLFxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiY2hpbGRyZW5cIjogW1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImphd1wiLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJwb3NpdGlvblwiOiBbNy40NDI5ZS0wNCwgLTguNzI0OWUtMDMsIC01LjM3NjBlLTAyXVxyXG5cclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJsZWZ0RXllXCIsXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwicG9zaXRpb25cIjogWyAgMy4wMjQwZS0wMiwgIDIuMzA5MmUtMDIsICAyLjI5MDBlLTAyXVxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcInJpZ2h0RXllXCIsXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwicG9zaXRpb25cIjogWy0zLjAyOTZlLTAyLCAgMi4zNjc1ZS0wMiwgIDIuMTgzN2UtMDJdXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgICAgICBdXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgXVxyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICBdIFxyXG4gICAgICAgIC8vIH07XHJcblxyXG4gICAgICAgIC8vIHRoaXMuYm9uZXMgPSB0aGlzLmNyZWF0ZUJvbmVzRnJvbUpzb24oc2tpbkRhdGEuYm9uZXMpO1xyXG4gICAgICAgIHRoaXMuYm9uZXMgPSB0aGlzLmNyZWF0ZUJvbmVzRnJvbUpzb24odGhpcy5ib25lX3RyZWVbXCJib25lc1wiXSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGJvbmVzUG9zUmVzZXJ2ZSA9IFtuZXcgVmVjdG9yMyh0aGlzLmJvbmVzWzBdLnBvc2l0aW9uLngsIHRoaXMuYm9uZXNbMF0ucG9zaXRpb24ueSwgdGhpcy5ib25lc1swXS5wb3NpdGlvbi56KSxcclxuICAgICAgICBuZXcgVmVjdG9yMyh0aGlzLmJvbmVzWzFdLnBvc2l0aW9uLngsIHRoaXMuYm9uZXNbMV0ucG9zaXRpb24ueSwgdGhpcy5ib25lc1sxXS5wb3NpdGlvbi56KSxcclxuICAgICAgICBuZXcgVmVjdG9yMyh0aGlzLmJvbmVzWzJdLnBvc2l0aW9uLngsIHRoaXMuYm9uZXNbMl0ucG9zaXRpb24ueSwgdGhpcy5ib25lc1syXS5wb3NpdGlvbi56KSxcclxuICAgICAgICBuZXcgVmVjdG9yMyh0aGlzLmJvbmVzWzNdLnBvc2l0aW9uLngsIHRoaXMuYm9uZXNbM10ucG9zaXRpb24ueSwgdGhpcy5ib25lc1szXS5wb3NpdGlvbi56KSxcclxuICAgICAgICBuZXcgVmVjdG9yMyh0aGlzLmJvbmVzWzRdLnBvc2l0aW9uLngsIHRoaXMuYm9uZXNbNF0ucG9zaXRpb24ueSwgdGhpcy5ib25lc1s0XS5wb3NpdGlvbi56KVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5ib25lc1sxXS5wb3NpdGlvbi5jb3B5KG5ldyBWZWN0b3IzKGJvbmVzUG9zUmVzZXJ2ZVsxXS54IC0gYm9uZXNQb3NSZXNlcnZlWzBdLngsIGJvbmVzUG9zUmVzZXJ2ZVsxXS55IC0gYm9uZXNQb3NSZXNlcnZlWzBdLnksIGJvbmVzUG9zUmVzZXJ2ZVsxXS56IC0gYm9uZXNQb3NSZXNlcnZlWzBdLnopKTtcclxuICAgICAgICB0aGlzLmJvbmVzWzJdLnBvc2l0aW9uLmNvcHkobmV3IFZlY3RvcjMoYm9uZXNQb3NSZXNlcnZlWzJdLnggLSBib25lc1Bvc1Jlc2VydmVbMV0ueCwgYm9uZXNQb3NSZXNlcnZlWzJdLnkgLSBib25lc1Bvc1Jlc2VydmVbMV0ueSwgYm9uZXNQb3NSZXNlcnZlWzJdLnogLSBib25lc1Bvc1Jlc2VydmVbMV0ueikpO1xyXG4gICAgICAgIHRoaXMuYm9uZXNbM10ucG9zaXRpb24uY29weShuZXcgVmVjdG9yMyhib25lc1Bvc1Jlc2VydmVbM10ueCAtIGJvbmVzUG9zUmVzZXJ2ZVsxXS54LCBib25lc1Bvc1Jlc2VydmVbM10ueSAtIGJvbmVzUG9zUmVzZXJ2ZVsxXS55LCBib25lc1Bvc1Jlc2VydmVbM10ueiAtIGJvbmVzUG9zUmVzZXJ2ZVsxXS56KSk7XHJcbiAgICAgICAgdGhpcy5ib25lc1s0XS5wb3NpdGlvbi5jb3B5KG5ldyBWZWN0b3IzKGJvbmVzUG9zUmVzZXJ2ZVs0XS54IC0gYm9uZXNQb3NSZXNlcnZlWzFdLngsIGJvbmVzUG9zUmVzZXJ2ZVs0XS55IC0gYm9uZXNQb3NSZXNlcnZlWzFdLnksIGJvbmVzUG9zUmVzZXJ2ZVs0XS56IC0gYm9uZXNQb3NSZXNlcnZlWzFdLnopKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmJvbmVzWzBdLnVwZGF0ZU1hdHJpeFdvcmxkKHRydWUpO1xyXG4gICAgICAgIGNvbnN0IGJvbmVJbnZlcnNlcyA9IFt0aGlzLmJvbmVzWzBdLm1hdHJpeFdvcmxkLmNsb25lKCkuaW52ZXJ0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib25lc1sxXS5tYXRyaXhXb3JsZC5jbG9uZSgpLmludmVydCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYm9uZXNbMl0ubWF0cml4V29ybGQuY2xvbmUoKS5pbnZlcnQoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJvbmVzWzNdLm1hdHJpeFdvcmxkLmNsb25lKCkuaW52ZXJ0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib25lc1s0XS5tYXRyaXhXb3JsZC5jbG9uZSgpLmludmVydCgpXTtcclxuXHJcbiAgICAgICAgdGhpcy5za2VsZXRvbiA9IG5ldyBTa2VsZXRvbih0aGlzLmJvbmVzLCBib25lSW52ZXJzZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucnVuTW9ycGhVcGRhdGUoKTtcclxuICAgIHRoaXMuc3BsYXRNZXNoLmdhdXNzaWFuU3BsYXRDb3VudCA9IHRoaXMuZ2F1c3NpYW5TcGxhdENvdW50O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlZEJvbmVNYXRyaWNlcyhib25lTnVtKXtcclxuICAgIGxldCB1cGRhdGVkQm9uZU1hdHJpY2VzID0gW107XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJvbmVOdW07IGorKykgeyBcclxuICAgICAgICBsZXQgYm9uZU1hdHJpeDtcclxuICAgICAgICBib25lTWF0cml4ID0gIHRoaXMuc2tlbGV0b24uYm9uZXNbal0ubWF0cml4V29ybGQuY2xvbmUoKS5tdWx0aXBseSh0aGlzLnNrZWxldG9uLmJvbmVJbnZlcnNlc1tqXS5jbG9uZSgpKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYWRkTWF0cml4VG9BcnJheShtYXRyaXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgIGxldCBlbGVtZW50cyA9IG1hdHJpeC5lbGVtZW50czsgXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goZWxlbWVudHNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGFkZE1hdHJpeFRvQXJyYXkoYm9uZU1hdHJpeCwgdXBkYXRlZEJvbmVNYXRyaWNlcyk7XHJcbiAgICB9XHJcbiAgICBsZXQgYm9uZXNNYXRyaXggPSBuZXcgRmxvYXQzMkFycmF5KHVwZGF0ZWRCb25lTWF0cmljZXMpO1xyXG4gICAgcmV0dXJuIGJvbmVzTWF0cml4O1xyXG59XHJcbiAgcnVuTW9ycGhVcGRhdGUoKSB7XHJcbiAgICB0aGlzLmdhdXNzaWFuU3BsYXRDb3VudCA9IHRoaXMuYXZhdGFyTWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50O1xyXG4gICAgdmFyIG1vcnBoZWRNZXNoID0gbmV3IEZsb2F0MzJBcnJheShcclxuICAgICAgdGhpcy5hdmF0YXJNZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXlcclxuICAgICk7XHJcbiAgICBjb25zdCBudW1Cb25lcyA9IDU7XHJcbiAgICB0aGlzLnNwbGF0TWVzaC5ib25lc051bSA9IG51bUJvbmVzO1xyXG4gICAgaWYgKHRoaXMudXNlRmxhbWUgPT0gZmFsc2UpIFxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2tpbk1vZGVsLnNrZWxldG9uLnVwZGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuYm9uZVJvb3QudXBkYXRlTWF0cml4V29ybGQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuc3BsYXRNZXNoLmdlb21ldHJ5LmdldEF0dHJpYnV0ZSgnc3BsYXRJbmRleCcpICYmIHRoaXMuc2V0U2tpbkF0dGlidXRlcyA9PT0gZmFsc2UpIHtcclxuXHJcbiAgICAgICAgICB0aGlzLnNldFNraW5BdHRpYnV0ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSB0aGlzLnNwbGF0TWVzaC5nZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICBjb25zdCBza2luSW5kZXhTb3VyY2UgPSB0aGlzLnNraW5Nb2RlbC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5JbmRleDtcclxuICAgICAgICAgIGNvbnN0IHNraW5XZWlnaHRTb3VyY2UgPSB0aGlzLnNraW5Nb2RlbC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7XHJcblxyXG4gICAgICAgICAgY29uc3QgbmV3U2tpbkluZGV4ID0gbmV3IEluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZShcclxuICAgICAgICAgICAgICBuZXcgc2tpbkluZGV4U291cmNlLmFycmF5LmNvbnN0cnVjdG9yKHNraW5JbmRleFNvdXJjZS5hcnJheSksIFxyXG4gICAgICAgICAgICAgIDQsXHJcbiAgICAgICAgICAgICAgc2tpbkluZGV4U291cmNlLm5vcm1hbGl6ZWQsXHJcbiAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgY29uc3QgbmV3U2tpbldlaWdodCA9IG5ldyBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUoXHJcbiAgICAgICAgICAgICAgbmV3IHNraW5XZWlnaHRTb3VyY2UuYXJyYXkuY29uc3RydWN0b3Ioc2tpbldlaWdodFNvdXJjZS5hcnJheSksIFxyXG4gICAgICAgICAgICAgIDQsXHJcbiAgICAgICAgICAgICAgc2tpbldlaWdodFNvdXJjZS5ub3JtYWxpemVkLFxyXG4gICAgICAgICAgICAgIDFcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBuZXdTa2luSW5kZXguc2V0VXNhZ2UoRHluYW1pY0RyYXdVc2FnZSk7XHJcbiAgICAgICAgICBuZXdTa2luV2VpZ2h0LnNldFVzYWdlKER5bmFtaWNEcmF3VXNhZ2UpO1xyXG4gICAgICAgICAgZ2VvbWV0cnkuc2V0QXR0cmlidXRlKCdza2luSW5kZXgnLCBuZXdTa2luSW5kZXgpO1xyXG4gICAgICAgICAgZ2VvbWV0cnkuc2V0QXR0cmlidXRlKCdza2luV2VpZ2h0JywgbmV3U2tpbldlaWdodCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGbGFtZUJvbmVzKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuc3BsYXRNZXNoLm1vcnBoZWRNZXNoID0gbW9ycGhlZE1lc2g7XHJcblxyXG4gICAgbGV0IHNwbGF0TnVtID0gdGhpcy5zcGxhdE1lc2gubW9ycGhlZE1lc2gubGVuZ3RoIC8gMztcclxuICAgIGlmICh0aGlzLnNwbGF0TWVzaC5zcGxhdERhdGFUZXh0dXJlc1snZmxhbWVNb2RlbCddICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnNwbGF0TWVzaC51cGRhdGVUZXR1cmVBZnRlckJTQW5kU2tlbGV0b24oMCwgc3BsYXROdW0gLSAxLCB0aGlzLnVzZUZsYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUZsYW1lQm9uZXMoKXtcclxuICAgIHRoaXMuc3BsYXRNZXNoLmJzV2VpZ2h0ID0gdGhpcy5mbGFtZV9wYXJhbXNbJ2V4cHInXVt0aGlzLmZyYW1lXTtcclxuXHJcbiAgICBmdW5jdGlvbiBzZXRCb25lUm90YXRpb25BbmRNYXRyaXgoYm9uZSwgYW5nbGVzLCBpc1F1YXQgPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBxdWF0ZXJuaW9uO1xyXG4gICAgICAgIGlmKGlzUXVhdCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbihhbmdsZXNbMF0sIGFuZ2xlc1sxXSwgYW5nbGVzWzJdLCBhbmdsZXNbM10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3IFZlY3RvcjMoYW5nbGVzWzBdLCBhbmdsZXNbMV0sIGFuZ2xlc1syXSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlSW5SYWRpYW5zID0gdmFsdWUubGVuZ3RoKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGF4aXMgPSB2YWx1ZS5ub3JtYWxpemUoKTtcclxuICAgICAgICAgICAgcXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCkuc2V0RnJvbUF4aXNBbmdsZShheGlzLCBhbmdsZUluUmFkaWFucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJvbmUucXVhdGVybmlvbi5jb3B5KHF1YXRlcm5pb24pO1xyXG4gICAgICAgIGJvbmUudXBkYXRlTWF0cml4V29ybGQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGFuZ2xlID0gdGhpcy5mbGFtZV9wYXJhbXNbJ3JvdGF0aW9uJ11bdGhpcy5mcmFtZV07XHJcblxyXG4gICAgc2V0Qm9uZVJvdGF0aW9uQW5kTWF0cml4KHRoaXMuc2tlbGV0b24uYm9uZXNbMF0sIGFuZ2xlKTtcclxuXHJcbiAgICBhbmdsZSA9IHRoaXMuZmxhbWVfcGFyYW1zWyduZWNrX3Bvc2UnXVt0aGlzLmZyYW1lXTtcclxuICAgIHNldEJvbmVSb3RhdGlvbkFuZE1hdHJpeCh0aGlzLnNrZWxldG9uLmJvbmVzWzFdLCBhbmdsZSk7XHJcblxyXG4gICAgYW5nbGUgPSB0aGlzLmZsYW1lX3BhcmFtc1snamF3X3Bvc2UnXVt0aGlzLmZyYW1lXTtcclxuICAgIHNldEJvbmVSb3RhdGlvbkFuZE1hdHJpeCh0aGlzLnNrZWxldG9uLmJvbmVzWzJdLCBhbmdsZSk7XHJcblxyXG4gICAgYW5nbGUgPSB0aGlzLmZsYW1lX3BhcmFtc1snZXllc19wb3NlJ11bdGhpcy5mcmFtZV07XHJcbiAgICBzZXRCb25lUm90YXRpb25BbmRNYXRyaXgodGhpcy5za2VsZXRvbi5ib25lc1szXSwgYW5nbGUpO1xyXG5cclxuICAgIHNldEJvbmVSb3RhdGlvbkFuZE1hdHJpeCh0aGlzLnNrZWxldG9uLmJvbmVzWzRdLCBbYW5nbGVbM10sIGFuZ2xlWzRdLCBhbmdsZVs1XV0pO1xyXG5cclxuICAgIC8vIHVwZGF0ZSBza2VsZXRvblxyXG4gICAgdGhpcy5za2VsZXRvbi51cGRhdGUoKTtcclxuXHJcbiAgICBjb25zdCBudW1Cb25lcyA9IDU7XHJcbiAgICBjb25zdCBib25lc01hdHJpeCA9IHRoaXMudXBkYXRlZEJvbmVNYXRyaWNlcyhudW1Cb25lcyk7XHJcbiAgICB0aGlzLnNwbGF0TWVzaC5ib25lc01hdHJpeCA9IGJvbmVzTWF0cml4O1xyXG4gICAgdGhpcy5zcGxhdE1lc2guYm9uZXNOdW0gPSBudW1Cb25lcztcclxuICAgIHRoaXMuc3BsYXRNZXNoLmJvbmVzV2VpZ2h0ID0gdGhpcy5sYnNfd2VpZ2h0XzgwaztcclxuICB9XHJcbn0iLCIvKipcclxuICogR2F1c3NpYW5TcGxhdFJlbmRlcmVyXHJcbiAqIFxyXG4gKiBEZXJpdmVkIGZyb20gZ2F1c3NpYW4tc3BsYXQtcmVuZGVyZXItZm9yLWxhbVxyXG4gKiBcclxuICogSGlnaC1sZXZlbCBvcmNoZXN0cmF0aW9uIGNsYXNzIHRoYXQ6XHJcbiAqIC0gTG9hZHMgWklQIGFzc2V0cyB2aWEgZmV0Y2hcclxuICogLSBVbnBhY2tzIHdpdGggSlNaaXBcclxuICogLSBDcmVhdGVzIFZpZXdlciBpbnN0YW5jZVxyXG4gKiAtIExvYWRzIEZMQU1FL3NraW4gbW9kZWxzXHJcbiAqIC0gUnVucyB0aGUgcmVuZGVyIGxvb3BcclxuICovXHJcblxyXG4vKiBnbG9iYWwgTlByb2dyZXNzICovXHJcblxyXG5pbXBvcnQge1xyXG4gICAgVmVjdG9yMyxcclxuICAgIEJvbmUsXHJcbiAgICBDbG9jayxcclxuICAgIEFuaW1hdGlvbk1peGVyXHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQgeyBHTFRGTG9hZGVyIH0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvR0xURkxvYWRlci5qcyc7XHJcbmltcG9ydCBKU1ppcCBmcm9tICdqc3ppcCc7XHJcblxyXG4vLyBJbXBvcnQgaW50ZXJuYWwgbW9kdWxlc1xyXG5pbXBvcnQgeyBUWVZvaWNlQ2hhdFN0YXRlIH0gZnJvbSAnLi9BcHBDb25zdGFudHMuanMnO1xyXG5pbXBvcnQgeyBBbmltYXRpb25NYW5hZ2VyIH0gZnJvbSAnLi9BbmltYXRpb25NYW5hZ2VyLmpzJztcclxuaW1wb3J0IHsgVmlld2VyIH0gZnJvbSAnLi4vY29yZS9WaWV3ZXIuanMnO1xyXG5pbXBvcnQgeyBTY2VuZUZvcm1hdCB9IGZyb20gJy4uL2VudW1zL1NjZW5lRm9ybWF0LmpzJztcclxuXHJcbi8vIENvbmZpZ3VyYXRpb24gb2JqZWN0cyAtIHRoZXNlIHdvdWxkIG5vcm1hbGx5IGJlIGxvYWRlZCBmcm9tIHRoZSBaSVBcclxuY29uc3QgY2hhcmFjdG9yQ29uZmlnID0ge1xyXG4gICAgY2FtUG9zOiB7IHg6IDAsIHk6IDEuOCwgejogMSB9LFxyXG4gICAgY2FtUm90OiB7IHg6IC0xMCwgeTogMCwgejogMCB9LFxyXG4gICAgYmFja2dyb3VuZENvbG9yOiAnZmZmZmZmJyxcclxuICAgIHVzZUZsYW1lOiAnZmFsc2UnICAvLyBNYXRjaCBjb21wYWN0IGZpbGUgZGVmYXVsdCAtIHVzZSBub24tRkxBTUUgbW9kZVxyXG59O1xyXG5cclxuY29uc3QgbW90aW9uQ29uZmlnID0ge1xyXG4gICAgb2Zmc2V0OiB7fSxcclxuICAgIHNjYWxlOiB7fVxyXG59O1xyXG5cclxuLy8gQW5pbWF0aW9uIGNvbmZpZ3VyYXRpb24gLSBkZWZpbmVzIGhvdyBhbmltYXRpb24gY2xpcHMgYXJlIGRpc3RyaWJ1dGVkIHRvIHN0YXRlc1xyXG4vLyBUaGUgYW5pbWF0aW9uLmdsYiBjb250YWlucyBjbGlwcyBpbiBvcmRlcjogaGVsbG8oMiksIGlkbGUoMSksIGxpc3RlbigwKSwgc3BlYWsoNiksIHRoaW5rKDMpXHJcbmNvbnN0IGFuaW1hdGlvbkNvbmZpZyA9IHtcclxuICAgIGhlbGxvOiB7IHNpemU6IDIsIGlzR3JvdXA6IGZhbHNlIH0sXHJcbiAgICBpZGxlOiB7IHNpemU6IDEsIGlzR3JvdXA6IGZhbHNlIH0sXHJcbiAgICBsaXN0ZW46IHsgc2l6ZTogMCwgaXNHcm91cDogZmFsc2UgfSxcclxuICAgIHNwZWFrOiB7IHNpemU6IDYsIGlzR3JvdXA6IGZhbHNlIH0sXHJcbiAgICB0aGluazogeyBzaXplOiAzLCBpc0dyb3VwOiB0cnVlIH0sXHJcbiAgICBvdGhlcjogW11cclxufTtcclxuXHJcbi8qKlxyXG4gKiBHYXVzc2lhblNwbGF0UmVuZGVyZXIgLSBNYWluIHJlbmRlcmluZyBjbGFzc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdhdXNzaWFuU3BsYXRSZW5kZXJlciB7XHJcbiAgICAvLyBTdGF0aWMgY2FudmFzIGVsZW1lbnQgc2hhcmVkIGFjcm9zcyBpbnN0YW5jZXNcclxuICAgIHN0YXRpYyBfY2FudmFzID0gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykgOiBudWxsO1xyXG4gICAgXHJcbiAgICAvLyBTaW5nbGV0b24gaW5zdGFuY2VcclxuICAgIHN0YXRpYyBpbnN0YW5jZSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZS9nZXQgcmVuZGVyZXIgaW5zdGFuY2VcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciAtIERPTSBjb250YWluZXIgZm9yIGNhbnZhc1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGFzc2V0UGF0aCAtIFVSTCB0byBjaGFyYWN0ZXIgWklQIGZpbGVcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxHYXVzc2lhblNwbGF0UmVuZGVyZXI+fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXN5bmMgZ2V0SW5zdGFuY2UoY29udGFpbmVyLCBhc3NldFBhdGgsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjaGFyYWN0ZXJQYXRoID0gYXNzZXRQYXRoO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gUGFyc2UgY2hhcmFjdGVyIG5hbWUgZnJvbSBwYXRoXHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoY2hhcmFjdGVyUGF0aCwgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xyXG4gICAgICAgICAgICBjb25zdCBwYXRobmFtZSA9IHVybC5wYXRobmFtZTtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHBhdGhuYW1lLm1hdGNoKC9cXC8oW14vXSs/KVxcLnppcC8pO1xyXG4gICAgICAgICAgICBjb25zdCBjaGFyYWN0ZXJOYW1lID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzFdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoYXJhY3RlciBtb2RlbCBpcyBub3QgZm91bmQnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gU2hvdyBwcm9ncmVzc1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIE5Qcm9ncmVzcyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIE5Qcm9ncmVzcy5zdGFydCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBEb3dubG9hZCBaSVAgZmlsZVxyXG4gICAgICAgICAgICBjb25zdCBjaGFyYWN0ZXJaaXBSZXNwb25zZSA9IGF3YWl0IGZldGNoKGNoYXJhY3RlclBhdGgpO1xyXG4gICAgICAgICAgICBpZiAoIWNoYXJhY3RlclppcFJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkb3dubG9hZDogJHtjaGFyYWN0ZXJaaXBSZXNwb25zZS5zdGF0dXNUZXh0fWApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBSZXBvcnQgZG93bmxvYWQgcHJvZ3Jlc3NcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZG93bmxvYWRQcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kb3dubG9hZFByb2dyZXNzKDEuMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxvYWRQcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5sb2FkUHJvZ3Jlc3MoMC4xKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBOUHJvZ3Jlc3MgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBOUHJvZ3Jlc3MuZG9uZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGNoYXJhY3RlclppcFJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBMb2FkIFpJUCB3aXRoIGltcG9ydGVkIEpTWmlwXHJcbiAgICAgICAgICAgIGNvbnN0IHppcERhdGEgPSBhd2FpdCBKU1ppcC5sb2FkQXN5bmMoYXJyYXlCdWZmZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gRmluZCBmb2xkZXIgbmFtZSBpbiBaSVBcclxuICAgICAgICAgICAgbGV0IGZpbGVOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoemlwRGF0YS5maWxlcykuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChmaWxlLmRpcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZS5uYW1lPy5zbGljZSgwLCBmaWxlLm5hbWU/Lmxlbmd0aCAtIDEpOyAvLyBSZW1vdmUgdHJhaWxpbmcgJy8nXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaWxlIGZvbGRlciBpcyBub3QgZm91bmQnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQ3JlYXRlIHJlbmRlcmVyIGluc3RhbmNlXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IEdhdXNzaWFuU3BsYXRSZW5kZXJlcihjb250YWluZXIsIHppcERhdGEpO1xyXG5cclxuICAgICAgICAgICAgLy8gU2V0dXAgY2FtZXJhIHBvc2l0aW9uXHJcbiAgICAgICAgICAgIGNvbnN0IGNhbWVyYVBvcyA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgIGNhbWVyYVBvcy54ID0gY2hhcmFjdG9yQ29uZmlnLmNhbVBvcz8ueCB8fCAwO1xyXG4gICAgICAgICAgICBjYW1lcmFQb3MueSA9IGNoYXJhY3RvckNvbmZpZy5jYW1Qb3M/LnkgfHwgMDtcclxuICAgICAgICAgICAgY2FtZXJhUG9zLnogPSBjaGFyYWN0b3JDb25maWcuY2FtUG9zPy56IHx8IDE7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjYW1lcmFSb3RhdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgIGNhbWVyYVJvdGF0aW9uLnggPSBjaGFyYWN0b3JDb25maWcuY2FtUm90Py54IHx8IDA7XHJcbiAgICAgICAgICAgIGNhbWVyYVJvdGF0aW9uLnkgPSBjaGFyYWN0b3JDb25maWcuY2FtUm90Py55IHx8IDA7XHJcbiAgICAgICAgICAgIGNhbWVyYVJvdGF0aW9uLnogPSBjaGFyYWN0b3JDb25maWcuY2FtUm90Py56IHx8IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBCYWNrZ3JvdW5kIGNvbG9yXHJcbiAgICAgICAgICAgIGxldCBiYWNrZ3JvdW5kQ29sb3IgPSAweGZmZmZmZjtcclxuICAgICAgICAgICAgaWYgKGNoYXJhY3RvckNvbmZpZy5iYWNrZ3JvdW5kQ29sb3IpIHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IHBhcnNlSW50KGNoYXJhY3RvckNvbmZpZy5iYWNrZ3JvdW5kQ29sb3IsIDE2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucz8uYmFja2dyb3VuZENvbG9yICYmIHJlbmRlcmVyLmlzSGV4Q29sb3JTdHJpY3Qob3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IpKSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBwYXJzZUludChvcHRpb25zLmJhY2tncm91bmRDb2xvciwgMTYpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTdG9yZSBjYWxsYmFja3NcclxuICAgICAgICAgICAgcmVuZGVyZXIuZ2V0Q2hhdFN0YXRlID0gb3B0aW9ucz8uZ2V0Q2hhdFN0YXRlO1xyXG4gICAgICAgICAgICByZW5kZXJlci5nZXRFeHByZXNzaW9uRGF0YSA9IG9wdGlvbnM/LmdldEV4cHJlc3Npb25EYXRhO1xyXG5cclxuICAgICAgICAgICAgLy8gRkxBTUUgbW9kZSBmbGFnXHJcbiAgICAgICAgICAgIGlmIChjaGFyYWN0b3JDb25maWcudXNlRmxhbWUpIHtcclxuICAgICAgICAgICAgICAgIHJlbmRlcmVyLnVzZUZsYW1lID0gKGNoYXJhY3RvckNvbmZpZy51c2VGbGFtZSA9PT0gJ2ZhbHNlJykgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBWaWV3ZXIgd2l0aCBpbXBvcnRlZCBjbGFzc1xyXG4gICAgICAgICAgICByZW5kZXJlci52aWV3ZXIgPSBuZXcgVmlld2VyKHtcclxuICAgICAgICAgICAgICAgIHJvb3RFbGVtZW50OiBjb250YWluZXIsXHJcbiAgICAgICAgICAgICAgICB0aHJlZWpzQ2FudmFzOiBHYXVzc2lhblNwbGF0UmVuZGVyZXIuX2NhbnZhcyxcclxuICAgICAgICAgICAgICAgIGNhbWVyYVVwOiBbMCwgMSwgMF0sXHJcbiAgICAgICAgICAgICAgICBpbml0aWFsQ2FtZXJhUG9zaXRpb246IFtjYW1lcmFQb3MueCwgY2FtZXJhUG9zLnksIGNhbWVyYVBvcy56XSxcclxuICAgICAgICAgICAgICAgIGluaXRpYWxDYW1lcmFSb3RhdGlvbjogW2NhbWVyYVJvdGF0aW9uLngsIGNhbWVyYVJvdGF0aW9uLnksIGNhbWVyYVJvdGF0aW9uLnpdLFxyXG4gICAgICAgICAgICAgICAgc3BoZXJpY2FsSGFybW9uaWNzRGVncmVlOiAwLFxyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3JcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci52aWV3ZXIudXNlRmxhbWUgPSByZW5kZXJlci51c2VGbGFtZTtcclxuXHJcbiAgICAgICAgICAgIC8vIExvYWQgbW9kZWwgYmFzZWQgb24gbW9kZVxyXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIudmlld2VyLnVzZUZsYW1lID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCByZW5kZXJlci5sb2FkRmxhbWVNb2RlbChmaWxlTmFtZSwgbW90aW9uQ29uZmlnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHJlbmRlcmVyLmxvYWRNb2RlbChmaWxlTmFtZSwgYW5pbWF0aW9uQ29uZmlnLCBtb3Rpb25Db25maWcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5sb2FkUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMubG9hZFByb2dyZXNzKDAuMik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIExvYWQgb2Zmc2V0IFBMWVxyXG4gICAgICAgICAgICBjb25zdCBvZmZzZXRGaWxlVXJsID0gYXdhaXQgcmVuZGVyZXIudW5wYWNrRmlsZUFzQmxvYihmaWxlTmFtZSArICcvb2Zmc2V0LnBseScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubG9hZFByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLmxvYWRQcm9ncmVzcygwLjMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgc3BsYXQgc2NlbmVcclxuICAgICAgICAgICAgYXdhaXQgcmVuZGVyZXIudmlld2VyLmFkZFNwbGF0U2NlbmUob2Zmc2V0RmlsZVVybCwge1xyXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NpdmVMb2FkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2hhcmVkTWVtb3J5Rm9yV29ya2VyczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzaG93TG9hZGluZ1VJOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogU2NlbmVGb3JtYXQuUGx5XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxvYWRQcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5sb2FkUHJvZ3Jlc3MoMSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSByZW5kZXJlcjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyO1xyXG5cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdHYXVzc2lhblNwbGF0UmVuZGVyZXIuZ2V0SW5zdGFuY2UgZXJyb3I6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gX2NvbnRhaW5lciAtIERPTSBjb250YWluZXJcclxuICAgICAqIEBwYXJhbSB7SlNaaXB9IHppcERhdGEgLSBMb2FkZWQgWklQIGRhdGFcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoX2NvbnRhaW5lciwgemlwRGF0YSkge1xyXG4gICAgICAgIC8vIFpJUCBmaWxlIGNhY2hlXHJcbiAgICAgICAgdGhpcy56aXBVcmxzID0ge1xyXG4gICAgICAgICAgICB1cmxzOiBuZXcgTWFwKCksXHJcbiAgICAgICAgICAgIHppcDogemlwRGF0YVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFN0YXRlXHJcbiAgICAgICAgdGhpcy51c2VGbGFtZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSAwO1xyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDtcclxuICAgICAgICB0aGlzLmV4cHJlc3Npb25EYXRhID0ge307XHJcbiAgICAgICAgdGhpcy5jaGF0U3RhdGUgPSBUWVZvaWNlQ2hhdFN0YXRlLklkbGU7XHJcblxyXG4gICAgICAgIC8vIFNldHVwIGNhbnZhc1xyXG4gICAgICAgIGlmIChHYXVzc2lhblNwbGF0UmVuZGVyZXIuX2NhbnZhcyAmJiBfY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gX2NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgR2F1c3NpYW5TcGxhdFJlbmRlcmVyLl9jYW52YXMuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcclxuICAgICAgICAgICAgR2F1c3NpYW5TcGxhdFJlbmRlcmVyLl9jYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgR2F1c3NpYW5TcGxhdFJlbmRlcmVyLl9jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICBfY29udGFpbmVyLmFwcGVuZENoaWxkKEdhdXNzaWFuU3BsYXRSZW5kZXJlci5fY2FudmFzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFuaW1hdGlvbiB0aW1pbmdcclxuICAgICAgICB0aGlzLmNsb2NrID0gbmV3IENsb2NrKCk7XHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKSAvIDEwMDAuMDtcclxuXHJcbiAgICAgICAgLy8gVGhlc2Ugd2lsbCBiZSBzZXQgZHVyaW5nIGxvYWRpbmdcclxuICAgICAgICB0aGlzLnZpZXdlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5taXhlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5hbmltTWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3Rpb25jZmcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZ2V0Q2hhdFN0YXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmdldEV4cHJlc3Npb25EYXRhID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgcmVuZGVyZXIgYW5kIGZyZWUgcmVzb3VyY2VzXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgaWYgKEdhdXNzaWFuU3BsYXRSZW5kZXJlci5fY2FudmFzKSB7XHJcbiAgICAgICAgICAgIEdhdXNzaWFuU3BsYXRSZW5kZXJlci5fY2FudmFzLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5kaXNwb3NlTW9kZWwoKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBSZXZva2UgYWxsIGJsb2IgVVJMc1xyXG4gICAgICAgIHRoaXMuemlwVXJscy51cmxzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBHYXVzc2lhblNwbGF0UmVuZGVyZXIuaW5zdGFuY2UgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIG1vZGVsLXNwZWNpZmljIHJlc291cmNlc1xyXG4gICAgICovXHJcbiAgICBkaXNwb3NlTW9kZWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWl4ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5taXhlci5zdG9wQWxsQWN0aW9uKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdlcj8uYXZhdGFyTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5taXhlci51bmNhY2hlUm9vdCh0aGlzLnZpZXdlci5hdmF0YXJNZXNoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1peGVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmFuaW1NYW5hZ2VyPy5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmlld2VyPy5kaXNwb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIFRocmVlLmpzIGNhbWVyYVxyXG4gICAgICogQHJldHVybnMge1RIUkVFLkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FtZXJhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdlcj8uY2FtZXJhO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGJsZW5kc2hhcGUgd2VpZ2h0cyBmcm9tIGFjdGlvbiBkYXRhXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYWN0aW9uRGF0YSAtIEJsZW5kc2hhcGUgd2VpZ2h0c1xyXG4gICAgICogQHJldHVybnMge29iamVjdH0gUHJvY2Vzc2VkIGluZmx1ZW5jZSB2YWx1ZXNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlQlMoYWN0aW9uRGF0YSkge1xyXG4gICAgICAgIC8vIERlZmF1bHQgaW5mbHVlbmNlIHZhbHVlcyAtIGFsbCA1MiBBUktpdCBibGVuZHNoYXBlc1xyXG4gICAgICAgIGxldCBpbmZsdWVuY2UgPSB7XHJcbiAgICAgICAgICAgIGJyb3dEb3duTGVmdDogMC4wLFxyXG4gICAgICAgICAgICBicm93RG93blJpZ2h0OiAwLjAsXHJcbiAgICAgICAgICAgIGJyb3dJbm5lclVwOiAwLjAsXHJcbiAgICAgICAgICAgIGJyb3dPdXRlclVwTGVmdDogMC4wLFxyXG4gICAgICAgICAgICBicm93T3V0ZXJVcFJpZ2h0OiAwLjAsXHJcbiAgICAgICAgICAgIG1vdXRoQ2hlZWtQdWZmOiAwLjAsXHJcbiAgICAgICAgICAgIGNoZWVrU3F1aW50TGVmdDogMC4wLFxyXG4gICAgICAgICAgICBjaGVla1NxdWludFJpZ2h0OiAwLjAsXHJcbiAgICAgICAgICAgIGV5ZUJsaW5rTGVmdDogMC4wLFxyXG4gICAgICAgICAgICBleWVCbGlua1JpZ2h0OiAwLjAsXHJcbiAgICAgICAgICAgIGV5ZUxvb2tEb3duTGVmdDogMC4wLFxyXG4gICAgICAgICAgICBleWVMb29rRG93blJpZ2h0OiAwLjAsXHJcbiAgICAgICAgICAgIGV5ZUxvb2tJbkxlZnQ6IDAuMCxcclxuICAgICAgICAgICAgZXllTG9va0luUmlnaHQ6IDAuMCxcclxuICAgICAgICAgICAgZXllTG9va091dExlZnQ6IDAuMCxcclxuICAgICAgICAgICAgZXllTG9va091dFJpZ2h0OiAwLjAsXHJcbiAgICAgICAgICAgIGV5ZUxvb2tVcExlZnQ6IDAuMCxcclxuICAgICAgICAgICAgZXllTG9va1VwUmlnaHQ6IDAuMCxcclxuICAgICAgICAgICAgZXllU3F1aW50TGVmdDogMC4wLFxyXG4gICAgICAgICAgICBleWVTcXVpbnRSaWdodDogMC4wLFxyXG4gICAgICAgICAgICBleWVXaWRlTGVmdDogMC4wLFxyXG4gICAgICAgICAgICBleWVXaWRlUmlnaHQ6IDAuMCxcclxuICAgICAgICAgICAgamF3Rm9yd2FyZDogMC4wLFxyXG4gICAgICAgICAgICBqYXdMZWZ0OiAwLjAsXHJcbiAgICAgICAgICAgIGphd09wZW46IDAuMCxcclxuICAgICAgICAgICAgamF3UmlnaHQ6IDAuMCxcclxuICAgICAgICAgICAgbW91dGhDbG9zZTogMC4wLFxyXG4gICAgICAgICAgICBtb3V0aERpbXBsZUxlZnQ6IDAuMCxcclxuICAgICAgICAgICAgbW91dGhEaW1wbGVSaWdodDogMC4wLFxyXG4gICAgICAgICAgICBtb3V0aEZyb3duTGVmdDogMC4wLFxyXG4gICAgICAgICAgICBtb3V0aEZyb3duUmlnaHQ6IDAuMCxcclxuICAgICAgICAgICAgbW91dGhGdW5uZWw6IDAuMCxcclxuICAgICAgICAgICAgbW91dGhMZWZ0OiAwLjAsXHJcbiAgICAgICAgICAgIG1vdXRoTG93ZXJEb3duTGVmdDogMC4wLFxyXG4gICAgICAgICAgICBtb3V0aExvd2VyRG93blJpZ2h0OiAwLjAsXHJcbiAgICAgICAgICAgIG1vdXRoUHJlc3NMZWZ0OiAwLjAsXHJcbiAgICAgICAgICAgIG1vdXRoUHJlc3NSaWdodDogMC4wLFxyXG4gICAgICAgICAgICBtb3V0aFB1Y2tlcjogMC4wLFxyXG4gICAgICAgICAgICBtb3V0aFJpZ2h0OiAwLjAsXHJcbiAgICAgICAgICAgIG1vdXRoUm9sbExvd2VyOiAwLjAsXHJcbiAgICAgICAgICAgIG1vdXRoUm9sbFVwcGVyOiAwLjAsXHJcbiAgICAgICAgICAgIG1vdXRoU2hydWdMb3dlcjogMC4wLFxyXG4gICAgICAgICAgICBtb3V0aFNocnVnVXBwZXI6IDAuMCxcclxuICAgICAgICAgICAgbW91dGhTbWlsZUxlZnQ6IDAuMCxcclxuICAgICAgICAgICAgbW91dGhTbWlsZVJpZ2h0OiAwLjAsXHJcbiAgICAgICAgICAgIG1vdXRoU3RyZXRjaExlZnQ6IDAuMCxcclxuICAgICAgICAgICAgbW91dGhTdHJldGNoUmlnaHQ6IDAuMCxcclxuICAgICAgICAgICAgbW91dGhVcHBlclVwTGVmdDogMC4wLFxyXG4gICAgICAgICAgICBtb3V0aFVwcGVyVXBSaWdodDogMC4wLFxyXG4gICAgICAgICAgICBub3NlU25lZXJMZWZ0OiAwLjAsXHJcbiAgICAgICAgICAgIG5vc2VTbmVlclJpZ2h0OiAwLjAsXHJcbiAgICAgICAgICAgIHRvbmd1ZU91dDogMC4wXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKGFjdGlvbkRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpbmZsdWVuY2UgPSBhY3Rpb25EYXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGluZmx1ZW5jZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1haW4gcmVuZGVyIGxvb3BcclxuICAgICAqL1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZpZXdlciAmJiB0aGlzLnZpZXdlci5zZWxmRHJpdmVuTW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdlci5yZXF1ZXN0RnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLnJlbmRlcigpKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lSW5mb0ludGVybmFsID0gMS4wIC8gMzAuMDtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKSAvIDEwMDA7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGRpdmlzaW9uIGJ5IHplcm8gaWYgdG90YWxGcmFtZXMgaXMgMCBvciBub3Qgc2V0XHJcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsRnJhbWVzID0gdGhpcy52aWV3ZXIudG90YWxGcmFtZXMgfHwgMTtcclxuICAgICAgICAgICAgY29uc3QgY2FsY0RlbHRhID0gKGN1cnJlbnRUaW1lIC0gdGhpcy5zdGFydFRpbWUpICUgKHRvdGFsRnJhbWVzICogZnJhbWVJbmZvSW50ZXJuYWwpO1xyXG4gICAgICAgICAgICBjb25zdCBmcmFtZUluZGV4ID0gTWF0aC5mbG9vcihjYWxjRGVsdGEgLyBmcmFtZUluZm9JbnRlcm5hbCk7XHJcbiAgICAgICAgICAgIHRoaXMudmlld2VyLmZyYW1lID0gZnJhbWVJbmRleDtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBjaGF0IHN0YXRlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldENoYXRTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0U3RhdGUgPSB0aGlzLmdldENoYXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gREVCVUc6IExvZyBzdGF0ZSB0cmFuc2l0aW9uc1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9sYXN0TG9nZ2VkU3RhdGUgfHwgdGhpcy5fbGFzdExvZ2dlZFN0YXRlICE9PSB0aGlzLmNoYXRTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbQU5JTV0gQ2hhdCBzdGF0ZSBjaGFuZ2VkIHRvOicsIHRoaXMuY2hhdFN0YXRlLCAnYW5pbU1hbmFnZXIgZXhpc3RzOicsICEhdGhpcy5hbmltTWFuYWdlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFzdExvZ2dlZFN0YXRlID0gdGhpcy5jaGF0U3RhdGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1NYW5hZ2VyPy51cGRhdGUodGhpcy5jaGF0U3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgZXhwcmVzc2lvbiBkYXRhXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEV4cHJlc3Npb25EYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25EYXRhID0gdGhpcy51cGRhdGVCUyh0aGlzLmdldEV4cHJlc3Npb25EYXRhKCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBOb24tRkxBTUUgbW9kZTogYW5pbWF0aW9uIG1peGVyXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdlci51c2VGbGFtZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5taXhlciB8fCAhdGhpcy5hbmltTWFuYWdlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fd2FybmVkT25jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3JlbmRlcjogbWl4ZXIgb3IgYW5pbU1hbmFnZXIgbm90IGluaXRpYWxpemVkLCBza2lwcGluZyBhbmltYXRpb24gdXBkYXRlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbQU5JTV0gdXNlRmxhbWU6JywgdGhpcy52aWV3ZXIudXNlRmxhbWUsICdtaXhlcjonLCAhIXRoaXMubWl4ZXIsICdhbmltTWFuYWdlcjonLCAhIXRoaXMuYW5pbU1hbmFnZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93YXJuZWRPbmNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1peGVyVXBkYXRlRGVsdGEgPSB0aGlzLmNsb2NrLmdldERlbHRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taXhlci51cGRhdGUobWl4ZXJVcGRhdGVEZWx0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5IG1vdGlvbiBjb25maWcgb2Zmc2V0cy9zY2FsZXNcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tb3Rpb25jZmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBtb3JwaFRhcmdldCBpbiB0aGlzLmV4cHJlc3Npb25EYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLm1vdGlvbmNmZy5vZmZzZXQ/Llttb3JwaFRhcmdldF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2FsZSA9IHRoaXMubW90aW9uY2ZnLnNjYWxlPy5bbW9ycGhUYXJnZXRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gdW5kZWZpbmVkICYmIHNjYWxlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25EYXRhW21vcnBoVGFyZ2V0XSA9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25EYXRhW21vcnBoVGFyZ2V0XSAqIHNjYWxlICsgb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEV4cHJlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHZpZXdlclxyXG4gICAgICAgICAgICB0aGlzLnZpZXdlci51cGRhdGUodGhpcy52aWV3ZXIucmVuZGVyZXIsIHRoaXMudmlld2VyLmNhbWVyYSk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZW5kZXIgaWYgbmVlZGVkXHJcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFJlbmRlciA9IHRoaXMudmlld2VyLnNob3VsZFJlbmRlcigpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVuZGVyTG9nQ291bnQgPD0gMykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tHUy1ERUJVR10gc2hvdWxkUmVuZGVyOicsIHNob3VsZFJlbmRlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNob3VsZFJlbmRlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3ZXIucmVuZGVyKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdlci5jb25zZWN1dGl2ZVJlbmRlckZyYW1lcysrO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3ZXIuY29uc2VjdXRpdmVSZW5kZXJGcmFtZXMgPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZpZXdlci5yZW5kZXJOZXh0RnJhbWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIuc2VsZkRyaXZlbk1vZGVSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzdGFydCB2aWV3ZXIgdW5sZXNzIGl0IGlzIGluIHNlbGYgZHJpdmVuIG1vZGUuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZ1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gQ29sb3Igc3RyaW5nIHRvIHZhbGlkYXRlXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNIZXhDb2xvclN0cmljdCh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgaGV4Q29sb3JSZWdleCA9IC9eKCN8MHgpWzAtOUEtRmEtZl17Nn0kL2k7XHJcbiAgICAgICAgcmV0dXJuIGhleENvbG9yUmVnZXgudGVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBleHByZXNzaW9uIGRhdGEgdG8gbWVzaFxyXG4gICAgICovXHJcbiAgICBzZXRFeHByZXNzaW9uKCkge1xyXG4gICAgICAgIC8vIFVwZGF0ZSBzcGxhdCBtZXNoIGJsZW5kc2hhcGVzXHJcbiAgICAgICAgaWYgKHRoaXMudmlld2VyPy5zcGxhdE1lc2gpIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIuc3BsYXRNZXNoLmJzV2VpZ2h0ID0gdGhpcy5leHByZXNzaW9uRGF0YTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBtb3JwaCB0YXJnZXRzIG9uIGF2YXRhciBtb2RlbFxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwudHJhdmVyc2UoKG9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iamVjdC5pc01lc2ggfHwgb2JqZWN0LmlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb3JwaEF0dHJpYnV0ZXMgPSBvYmplY3QuZ2VvbWV0cnk/Lm1vcnBoQXR0cmlidXRlcztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNNb3JwaFRhcmdldHMgPSBtb3JwaEF0dHJpYnV0ZXMgJiYgT2JqZWN0LmtleXMobW9ycGhBdHRyaWJ1dGVzKS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNNb3JwaFRhcmdldHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9ycGhUYXJnZXREaWN0aW9uYXJ5ID0gb2JqZWN0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBtb3JwaFRhcmdldCBpbiBtb3JwaFRhcmdldERpY3Rpb25hcnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG1vcnBoVGFyZ2V0RGljdGlvbmFyeVttb3JwaFRhcmdldF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5leHByZXNzaW9uRGF0YVttb3JwaFRhcmdldF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1t0YXJnZXRdID0gTWF0aC5tYXgoMC4wLCBNYXRoLm1pbigxLjAsIGRhdGEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZCBGTEFNRSBtb2RlbCBmcm9tIFpJUFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhOYW1lIC0gUGF0aCB3aXRoaW4gWklQXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gbW90aW9uQ29uZmlnIC0gTW90aW9uIGNvbmZpZ3VyYXRpb25cclxuICAgICAqL1xyXG4gICAgYXN5bmMgbG9hZEZsYW1lTW9kZWwocGF0aE5hbWUsIG1vdGlvbkNvbmZpZykge1xyXG4gICAgICAgIC8vIExvYWQgYWxsIHJlcXVpcmVkIGZpbGVzIGluIHBhcmFsbGVsXHJcbiAgICAgICAgY29uc3QgW3NraW5Nb2RlbCwgbGJzX3dlaWdodF84MGssIGZsYW1lX3BhcmFtcywgaW5kZXhlcywgYm9uZV90cmVlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICAgICAgdGhpcy51bnBhY2tBbmRMb2FkR2xiKHBhdGhOYW1lICsgJy9za2luLmdsYicpLFxyXG4gICAgICAgICAgICB0aGlzLnVucGFja0FuZExvYWRKc29uKHBhdGhOYW1lICsgJy9sYnNfd2VpZ2h0XzIway5qc29uJyksXHJcbiAgICAgICAgICAgIHRoaXMudW5wYWNrQW5kTG9hZEpzb24ocGF0aE5hbWUgKyAnL2ZsYW1lX3BhcmFtcy5qc29uJyksXHJcbiAgICAgICAgICAgIHRoaXMudW5wYWNrQW5kTG9hZEpzb24ocGF0aE5hbWUgKyAnL3ZlcnRleF9vcmRlci5qc29uJyksXHJcbiAgICAgICAgICAgIHRoaXMudW5wYWNrQW5kTG9hZEpzb24ocGF0aE5hbWUgKyAnL2JvbmVfdHJlZS5qc29uJylcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdlcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlbmRlciB2aWV3ZXIgaXMgbm90IGluaXRpYWxpemVkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGaW5kIHNraW5uZWQgbWVzaCBhbmQgYm9uZSByb290XHJcbiAgICAgICAgbGV0IHNraW5Nb2RlbFNraW5uZWRNZXNoO1xyXG4gICAgICAgIGxldCBib25lUm9vdDtcclxuICAgICAgICBcclxuICAgICAgICBza2luTW9kZWwudHJhdmVyc2UoKG9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0LmlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgIHNraW5Nb2RlbFNraW5uZWRNZXNoID0gb2JqZWN0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb25lICYmIG9iamVjdC5uYW1lID09PSAnaGlwJykge1xyXG4gICAgICAgICAgICAgICAgYm9uZVJvb3QgPSBvYmplY3Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gU2V0IHZpZXdlciBwcm9wZXJ0aWVzXHJcbiAgICAgICAgdGhpcy52aWV3ZXIuc29ydGVkSW5kZXhlcyA9IGluZGV4ZXM7XHJcbiAgICAgICAgdGhpcy52aWV3ZXIuZmxhbWVfcGFyYW1zID0gZmxhbWVfcGFyYW1zO1xyXG4gICAgICAgIHRoaXMudmlld2VyLmxic193ZWlnaHRfODBrID0gbGJzX3dlaWdodF84MGs7XHJcbiAgICAgICAgdGhpcy52aWV3ZXIuYm9uZV90cmVlID0gYm9uZV90cmVlO1xyXG4gICAgICAgIHRoaXMudmlld2VyLnRvdGFsRnJhbWVzID0gZmxhbWVfcGFyYW1zWydleHByJ10/Lmxlbmd0aCB8fCAxO1xyXG5cclxuICAgICAgICBpZiAoc2tpbk1vZGVsU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIuZ2F1c3NpYW5TcGxhdENvdW50ID0gc2tpbk1vZGVsU2tpbm5lZE1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmlld2VyLmF2YXRhck1lc2ggPSBza2luTW9kZWw7XHJcbiAgICAgICAgdGhpcy52aWV3ZXIuc2tpbk1vZGVsID0gc2tpbk1vZGVsU2tpbm5lZE1lc2g7XHJcbiAgICAgICAgdGhpcy52aWV3ZXIuYm9uZVJvb3QgPSBib25lUm9vdDtcclxuICAgICAgICB0aGlzLm1vdGlvbmNmZyA9IG1vdGlvbkNvbmZpZztcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIG1vcnBoIHRhcmdldHNcclxuICAgICAgICBpZiAoc2tpbk1vZGVsU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIudXBkYXRlTW9ycGhUYXJnZXQoc2tpbk1vZGVsU2tpbm5lZE1lc2gpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWRkIHRvIHNjZW5lIChoaWRkZW4pXHJcbiAgICAgICAgdGhpcy52aWV3ZXIudGhyZWVTY2VuZS5hZGQoc2tpbk1vZGVsKTtcclxuICAgICAgICBza2luTW9kZWwudmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBDb21wdXRlIGJvbmUgdGV4dHVyZVxyXG4gICAgICAgIGlmIChza2luTW9kZWxTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICBza2luTW9kZWxTa2lubmVkTWVzaC5za2VsZXRvbi5jb21wdXRlQm9uZVRleHR1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkIG5vbi1GTEFNRSBtb2RlbCB3aXRoIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhOYW1lIC0gUGF0aCB3aXRoaW4gWklQXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYW5pbWF0aW9uQ29uZmlnIC0gQW5pbWF0aW9uIGNvbmZpZ3VyYXRpb25cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBtb3Rpb25Db25maWcgLSBNb3Rpb24gY29uZmlndXJhdGlvblxyXG4gICAgICovXHJcbiAgICBhc3luYyBsb2FkTW9kZWwocGF0aE5hbWUsIGFuaW1hdGlvbkNvbmZpZywgbW90aW9uQ29uZmlnKSB7XHJcbiAgICAgICAgY29uc3QgW3NraW5Nb2RlbCwgYW5pY2xpcCwgaW5kZXhlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICAgIHRoaXMudW5wYWNrQW5kTG9hZEdsYihwYXRoTmFtZSArICcvc2tpbi5nbGInKSxcclxuICAgICAgICAgICAgdGhpcy51bnBhY2tBbmRMb2FkR2xiKHBhdGhOYW1lICsgJy9hbmltYXRpb24uZ2xiJyksXHJcbiAgICAgICAgICAgIHRoaXMudW5wYWNrQW5kTG9hZEpzb24ocGF0aE5hbWUgKyAnL3ZlcnRleF9vcmRlci5qc29uJylcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdlcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlbmRlciB2aWV3ZXIgaXMgbm90IGluaXRpYWxpemVkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2tpbk1vZGVsU2tpbm5lZE1lc2g7XHJcbiAgICAgICAgbGV0IGJvbmVSb290O1xyXG5cclxuICAgICAgICBza2luTW9kZWwudHJhdmVyc2UoKG9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0LmlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgIHNraW5Nb2RlbFNraW5uZWRNZXNoID0gb2JqZWN0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb25lICYmIG9iamVjdC5uYW1lID09PSAnaGlwJykge1xyXG4gICAgICAgICAgICAgICAgYm9uZVJvb3QgPSBvYmplY3Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy52aWV3ZXIuc29ydGVkSW5kZXhlcyA9IGluZGV4ZXM7XHJcblxyXG4gICAgICAgIGlmIChza2luTW9kZWxTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdlci5nYXVzc2lhblNwbGF0Q291bnQgPSBza2luTW9kZWxTa2lubmVkTWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52aWV3ZXIuYXZhdGFyTWVzaCA9IHNraW5Nb2RlbDtcclxuICAgICAgICB0aGlzLnZpZXdlci5za2luTW9kZWwgPSBza2luTW9kZWxTa2lubmVkTWVzaDtcclxuICAgICAgICB0aGlzLnZpZXdlci5ib25lUm9vdCA9IGJvbmVSb290O1xyXG5cclxuICAgICAgICAvLyBTZXR1cCBhbmltYXRpb25cclxuICAgICAgICB0aGlzLm1peGVyID0gbmV3IEFuaW1hdGlvbk1peGVyKHNraW5Nb2RlbCk7XHJcbiAgICAgICAgdGhpcy5hbmltTWFuYWdlciA9IG5ldyBBbmltYXRpb25NYW5hZ2VyKHRoaXMubWl4ZXIsIGFuaWNsaXAsIGFuaW1hdGlvbkNvbmZpZyk7XHJcbiAgICAgICAgdGhpcy5tb3Rpb25jZmcgPSBtb3Rpb25Db25maWc7XHJcblxyXG4gICAgICAgIC8vIFNldCB0b3RhbEZyYW1lcyBmcm9tIGFuaW1hdGlvbiBjbGlwcyBvciBkZWZhdWx0IHRvIDFcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhbmljbGlwKSAmJiBhbmljbGlwLmxlbmd0aCA+IDAgJiYgYW5pY2xpcFswXS5kdXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdlci50b3RhbEZyYW1lcyA9IE1hdGguZmxvb3IoYW5pY2xpcFswXS5kdXJhdGlvbiAqIDMwKTsgLy8gMzAgZnBzXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIudG90YWxGcmFtZXMgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZygnbG9hZE1vZGVsOiB0b3RhbEZyYW1lcyBzZXQgdG8nLCB0aGlzLnZpZXdlci50b3RhbEZyYW1lcyk7XHJcblxyXG4gICAgICAgIGlmIChza2luTW9kZWxTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdlci51cGRhdGVNb3JwaFRhcmdldChza2luTW9kZWxTa2lubmVkTWVzaCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZpZXdlci50aHJlZVNjZW5lLmFkZChza2luTW9kZWwpO1xyXG4gICAgICAgIHNraW5Nb2RlbC52aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChza2luTW9kZWxTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICBza2luTW9kZWxTa2lubmVkTWVzaC5za2VsZXRvbi5jb21wdXRlQm9uZVRleHR1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbnBhY2sgZmlsZSBmcm9tIFpJUCBhcyBibG9iIFVSTFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBQYXRoIHdpdGhpbiBaSVBcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IEJsb2IgVVJMXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHVucGFja0ZpbGVBc0Jsb2IocGF0aCkge1xyXG4gICAgICAgIGlmICghdGhpcy56aXBVcmxzLnVybHMuaGFzKHBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsRmlsZSA9IGF3YWl0IHRoaXMuemlwVXJscy56aXA/LmZpbGUocGF0aCk/LmFzeW5jKCdibG9iJyk7XHJcbiAgICAgICAgICAgIGlmIChtb2RlbEZpbGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChtb2RlbEZpbGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy56aXBVcmxzLnVybHMuc2V0KHBhdGgsIG1vZGVsVXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy56aXBVcmxzLnVybHMuZ2V0KHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5wYWNrIGFuZCBsb2FkIEdMQiBmaWxlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFBhdGggd2l0aGluIFpJUFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8VEhSRUUuR3JvdXB8VEhSRUUuQW5pbWF0aW9uQ2xpcFtdPn1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdW5wYWNrQW5kTG9hZEdsYihwYXRoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnppcFVybHMudXJscy5oYXMocGF0aCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbW9kZWxGaWxlID0gYXdhaXQgdGhpcy56aXBVcmxzLnppcD8uZmlsZShwYXRoKT8uYXN5bmMoJ2FycmF5YnVmZmVyJyk7XHJcbiAgICAgICAgICAgIGlmIChtb2RlbEZpbGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbbW9kZWxGaWxlXSwgeyB0eXBlOiAnbW9kZWwvZ2x0Zi1iaW5hcnknIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWxVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy56aXBVcmxzLnVybHMuc2V0KHBhdGgsIG1vZGVsVXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5Mb2FkR0xURih0aGlzLnppcFVybHMudXJscy5nZXQocGF0aCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5wYWNrIGFuZCBwYXJzZSBKU09OIGZpbGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gUGF0aCB3aXRoaW4gWklQXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxvYmplY3Q+fVxyXG4gICAgICovXHJcbiAgICBhc3luYyB1bnBhY2tBbmRMb2FkSnNvbihwYXRoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuemlwVXJscy56aXA/LmZpbGUocGF0aCk7XHJcbiAgICAgICAgaWYgKCFmaWxlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmQgaW4gWklQOiAke3BhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGpzb25GaWxlID0gYXdhaXQgZmlsZS5hc3luYygnc3RyaW5nJyk7XHJcbiAgICAgICAgaWYgKCFqc29uRmlsZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZWFkIGZpbGUgZnJvbSBaSVA6ICR7cGF0aH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbkZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZCBHTFRGIGZpbGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSBVUkwgdG8gR0xURi9HTEIgZmlsZVxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8VEhSRUUuR3JvdXB8VEhSRUUuQW5pbWF0aW9uQ2xpcFtdPn1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgTG9hZEdMVEYodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbG9hZGVyID0gbmV3IEdMVEZMb2FkZXIoKTtcclxuICAgICAgICAgICAgbG9hZGVyLmxvYWQoXHJcbiAgICAgICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgICAgICAoZ2x0ZikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChnbHRmLmFuaW1hdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGdsdGYuYW5pbWF0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShnbHRmLnNjZW5lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgR2F1c3NpYW5TcGxhdFJlbmRlcmVyO1xyXG4iLCIvKipcclxuICogRmxhbWVDb25zdGFudHNcclxuICogXHJcbiAqIERlcml2ZWQgZnJvbSBnYXVzc2lhbi1zcGxhdC1yZW5kZXJlci1mb3ItbGFtXHJcbiAqIEZMQU1FLXNwZWNpZmljIGNvbnN0YW50cyBmb3IgcGFyYW1ldHJpYyBoZWFkIG1vZGVsLlxyXG4gKiBcclxuICogTm90ZTogR2VuZXJhbCBlbmdpbmUgY29uc3RhbnRzIChNYXhTY2VuZXMsIGV0Yy4pIGFyZSBpbiBlbnVtcy9FbmdpbmVDb25zdGFudHMuanNcclxuICovXHJcblxyXG5leHBvcnQgY29uc3QgQ29uc3RhbnRzID0ge1xyXG4gICAgLy8gRkxBTUUgbW9kZWwgY29uc3RhbnRzXHJcbiAgICBGbGFtZUJvbmVzQ291bnQ6IDUsICAvLyByb290LCBuZWNrLCBqYXcsIGxlZnRFeWUsIHJpZ2h0RXllXHJcbiAgICBEZWZhdWx0QmxlbmRzaGFwZUNvdW50OiA1MiwgIC8vIEFSS2l0IGJsZW5kc2hhcGVzXHJcbiAgICBcclxuICAgIC8vIFRleHR1cmUgc2l6ZXMgZm9yIEZMQU1FIGRhdGFcclxuICAgIEZsYW1lTW9kZWxUZXh0dXJlU2l6ZTogeyB3aWR0aDogNDA5NiwgaGVpZ2h0OiAyMDQ4IH0sXHJcbiAgICBCb25lVGV4dHVyZVNpemU6IHsgd2lkdGg6IDQsIGhlaWdodDogMzIgfSxcclxuICAgIEJvbmVXZWlnaHRUZXh0dXJlU2l6ZTogeyB3aWR0aDogNTEyLCBoZWlnaHQ6IDUxMiB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb25zdGFudHM7XHJcbiIsIi8qKlxyXG4gKiBGTEFNRSBVdGlsaXR5IEZ1bmN0aW9uc1xyXG4gKiBcclxuICogRGVyaXZlZCBmcm9tIGdhdXNzaWFuLXNwbGF0LXJlbmRlcmVyLWZvci1sYW1cclxuICogQ29udGFpbnMgZW5jb2RpbmcgZnVuY3Rpb25zIGFuZCBoZWxwZXJzIGZvciBHUFUgdGV4dHVyZSBkYXRhLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBFbmNvZGUgZmxvYXQgYXMgdWludDMyIGZvciBHUFUgdGV4dHVyZSBzdG9yYWdlXHJcbiAqIFVzZXMgRmxvYXQzMkFycmF5L0ludDMyQXJyYXkgdmlldyB0cmljayB0byByZWludGVycHJldCBmbG9hdCBiaXRzIGFzIGludGVnZXJcclxuICovXHJcbmV4cG9ydCBjb25zdCB1aW50RW5jb2RlZEZsb2F0ID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgZmxvYXRWaWV3ID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcclxuICAgIGNvbnN0IGludDMyVmlldyA9IG5ldyBJbnQzMkFycmF5KGZsb2F0Vmlldy5idWZmZXIpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihmKSB7XHJcbiAgICAgICAgZmxvYXRWaWV3WzBdID0gZjtcclxuICAgICAgICByZXR1cm4gaW50MzJWaWV3WzBdO1xyXG4gICAgfTtcclxufSkoKTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IFJHQkEgdmFsdWVzIHRvIGEgc2luZ2xlIGludGVnZXJcclxuICovXHJcbmV4cG9ydCBjb25zdCByZ2JhVG9JbnRlZ2VyID0gZnVuY3Rpb24ociwgZywgYiwgYSkge1xyXG4gICAgcmV0dXJuIHIgKyAoZyA8PCA4KSArIChiIDw8IDE2KSArIChhIDw8IDI0KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IFJHQkEgYXJyYXkgYXQgb2Zmc2V0IHRvIGEgc2luZ2xlIGludGVnZXJcclxuICovXHJcbmV4cG9ydCBjb25zdCByZ2JhQXJyYXlUb0ludGVnZXIgPSBmdW5jdGlvbihhcnIsIG9mZnNldCkge1xyXG4gICAgcmV0dXJuIGFycltvZmZzZXRdICsgKGFycltvZmZzZXQgKyAxXSA8PCA4KSArIChhcnJbb2Zmc2V0ICsgMl0gPDwgMTYpICsgKGFycltvZmZzZXQgKyAzXSA8PCAyNCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29uc3RhbnRzIGZvciB0ZXh0dXJlIGRhdGEgbGF5b3V0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVGV4dHVyZUNvbnN0YW50cyA9IHtcclxuICAgIENFTlRFUl9DT0xPUlNfRUxFTUVOVFNfUEVSX1RFWEVMOiA0LFxyXG4gICAgQ0VOVEVSX0NPTE9SU19FTEVNRU5UU19QRVJfU1BMQVQ6IDQsXHJcbiAgICBDT1ZBUklBTkNFU19FTEVNRU5UU19QRVJfVEVYRUxfU1RPUkVEOiAyLFxyXG4gICAgQ09WQVJJQU5DRVNfRUxFTUVOVFNfUEVSX1RFWEVMX0FMTE9DQVRFRDogNCxcclxuICAgIENPVkFSSUFOQ0VTX0VMRU1FTlRTX1BFUl9URVhFTF9DT01QUkVTU0VEX1NUT1JFRDogMixcclxuICAgIENPVkFSSUFOQ0VTX0VMRU1FTlRTX1BFUl9URVhFTF9DT01QUkVTU0VEX0FMTE9DQVRFRDogNCxcclxuICAgIENPVkFSSUFOQ0VTX0VMRU1FTlRTX1BFUl9TUExBVDogNixcclxuICAgIFNDQUxFU19ST1RBVElPTlNfRUxFTUVOVFNfUEVSX1RFWEVMOiA0LFxyXG4gICAgU0NFTkVfSU5ERVhFU19FTEVNRU5UU19QRVJfVEVYRUw6IDEsXHJcbiAgICBNQVhfVEVYVFVSRV9URVhFTFM6IDQwOTYgKiA0MDk2XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBGbGFtZVRleHR1cmVNYW5hZ2VyXHJcbiAqIFxyXG4gKiBEZXJpdmVkIGZyb20gZ2F1c3NpYW4tc3BsYXQtcmVuZGVyZXItZm9yLWxhbVxyXG4gKiBcclxuICogTWFuYWdlcyBHUFUgdGV4dHVyZXMgZm9yIEZMQU1FIHBhcmFtZXRyaWMgaGVhZCBtb2RlbDpcclxuICogLSBCbGVuZHNoYXBlIG1vcnBoIHRhcmdldCBkYXRhIHRleHR1cmVzXHJcbiAqIC0gQm9uZSBtYXRyaXggdGV4dHVyZXMgZm9yIHNrZWxldG9uIGFuaW1hdGlvblxyXG4gKiAtIExCUyB3ZWlnaHQgdGV4dHVyZXMgZm9yIHNraW5uaW5nXHJcbiAqL1xyXG5cclxuaW1wb3J0IHtcclxuICAgIFZlY3RvcjIsXHJcbiAgICBEYXRhVGV4dHVyZSxcclxuICAgIFJHQkFJbnRlZ2VyRm9ybWF0LFxyXG4gICAgVW5zaWduZWRJbnRUeXBlXHJcbn0gZnJvbSAndGhyZWUnO1xyXG5cclxuaW1wb3J0IHsgdWludEVuY29kZWRGbG9hdCB9IGZyb20gJy4vdXRpbHMuanMnO1xyXG5cclxuLyoqXHJcbiAqIEJ1aWxkIHRoZSBGTEFNRSBtb2RlbCB0ZXh0dXJlIGNvbnRhaW5pbmcgYmxlbmRzaGFwZSBwb3NpdGlvbnNcclxuICogQHBhcmFtIHtUSFJFRS5Ta2lubmVkTWVzaH0gZmxhbWVNb2RlbCAtIFRoZSBGTEFNRSBtZXNoIHdpdGggbW9ycGggdGFyZ2V0c1xyXG4gKiBAcGFyYW0ge1RIUkVFLlNoYWRlck1hdGVyaWFsfSBtYXRlcmlhbCAtIFRoZSBzcGxhdCBtYXRlcmlhbCB0byB1cGRhdGUgdW5pZm9ybXNcclxuICogQHBhcmFtIHtudW1iZXJ9IGdhdXNzaWFuU3BsYXRDb3VudCAtIE51bWJlciBvZiBnYXVzc2lhbiBzcGxhdHNcclxuICogQHJldHVybnMge29iamVjdH0gVGV4dHVyZSBkYXRhIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTW9kZWxUZXh0dXJlKGZsYW1lTW9kZWwsIG1hdGVyaWFsLCBnYXVzc2lhblNwbGF0Q291bnQpIHtcclxuICAgIGNvbnN0IGZsYW1lTW9kZWxUZXhTaXplID0gbmV3IFZlY3RvcjIoNDA5NiwgMjA0OCk7XHJcblxyXG4gICAgY29uc3Qgc2hhcGVkTWVzaCA9IGZsYW1lTW9kZWwuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcclxuICAgIGxldCBzaGFwZWRNZXNoQXJyYXkgPSBbXTtcclxuICAgIGNvbnN0IHBvaW50TnVtID0gc2hhcGVkTWVzaC5sZW5ndGggLyAzO1xyXG4gICAgY29uc3QgYnNMZW5ndGggPSBmbGFtZU1vZGVsLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg7XHJcblxyXG4gICAgLy8gU29ydCBtb3JwaCB0YXJnZXRzIGJ5IGRpY3Rpb25hcnkgb3JkZXJcclxuICAgIGNvbnN0IG1vcnBoVGFyZ2V0TmFtZXMgPSBPYmplY3Qua2V5cyhmbGFtZU1vZGVsLm1vcnBoVGFyZ2V0RGljdGlvbmFyeSk7XHJcbiAgICBtb3JwaFRhcmdldE5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcclxuICAgICAgICBjb25zdCBvcmlnaW5hbEluZGV4ID0gZmxhbWVNb2RlbC5tb3JwaFRhcmdldERpY3Rpb25hcnlbbmFtZV07XHJcbiAgICAgICAgY29uc3QgYnNNZXNoID0gZmxhbWVNb2RlbC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb25bb3JpZ2luYWxJbmRleF07XHJcbiAgICAgICAgc2hhcGVkTWVzaEFycmF5ID0gc2hhcGVkTWVzaEFycmF5LmNvbmNhdChBcnJheS5mcm9tKGJzTWVzaC5hcnJheSkpO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIC8vIEFkZCBiYXNlIG1lc2ggcG9zaXRpb25zXHJcbiAgICBzaGFwZWRNZXNoQXJyYXkgPSBzaGFwZWRNZXNoQXJyYXkuY29uY2F0KEFycmF5LmZyb20oc2hhcGVkTWVzaCkpO1xyXG5cclxuICAgIC8vIENyZWF0ZSB0ZXh0dXJlIGRhdGFcclxuICAgIGNvbnN0IGZsYW1lTW9kZWxEYXRhID0gbmV3IEZsb2F0MzJBcnJheShmbGFtZU1vZGVsVGV4U2l6ZS54ICogZmxhbWVNb2RlbFRleFNpemUueSAqIDQpO1xyXG4gICAgY29uc3QgZmxhbWVNb2RlbERhdGFJbnQgPSBuZXcgVWludDMyQXJyYXkoZmxhbWVNb2RlbFRleFNpemUueCAqIGZsYW1lTW9kZWxUZXhTaXplLnkgKiA0KTtcclxuICAgIFxyXG4gICAgZm9yIChsZXQgYyA9IDA7IGMgPCBwb2ludE51bSAqIChic0xlbmd0aCArIDEpOyBjKyspIHtcclxuICAgICAgICBmbGFtZU1vZGVsRGF0YVtjICogNCArIDBdID0gc2hhcGVkTWVzaEFycmF5W2MgKiAzICsgMF07XHJcbiAgICAgICAgZmxhbWVNb2RlbERhdGFbYyAqIDQgKyAxXSA9IHNoYXBlZE1lc2hBcnJheVtjICogMyArIDFdO1xyXG4gICAgICAgIGZsYW1lTW9kZWxEYXRhW2MgKiA0ICsgMl0gPSBzaGFwZWRNZXNoQXJyYXlbYyAqIDMgKyAyXTtcclxuXHJcbiAgICAgICAgZmxhbWVNb2RlbERhdGFJbnRbYyAqIDQgKyAwXSA9IHVpbnRFbmNvZGVkRmxvYXQoZmxhbWVNb2RlbERhdGFbYyAqIDQgKyAwXSk7XHJcbiAgICAgICAgZmxhbWVNb2RlbERhdGFJbnRbYyAqIDQgKyAxXSA9IHVpbnRFbmNvZGVkRmxvYXQoZmxhbWVNb2RlbERhdGFbYyAqIDQgKyAxXSk7XHJcbiAgICAgICAgZmxhbWVNb2RlbERhdGFJbnRbYyAqIDQgKyAyXSA9IHVpbnRFbmNvZGVkRmxvYXQoZmxhbWVNb2RlbERhdGFbYyAqIDQgKyAyXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmxhbWVNb2RlbFRleCA9IG5ldyBEYXRhVGV4dHVyZShcclxuICAgICAgICBmbGFtZU1vZGVsRGF0YUludCxcclxuICAgICAgICBmbGFtZU1vZGVsVGV4U2l6ZS54LFxyXG4gICAgICAgIGZsYW1lTW9kZWxUZXhTaXplLnksXHJcbiAgICAgICAgUkdCQUludGVnZXJGb3JtYXQsXHJcbiAgICAgICAgVW5zaWduZWRJbnRUeXBlXHJcbiAgICApO1xyXG4gICAgZmxhbWVNb2RlbFRleC5pbnRlcm5hbEZvcm1hdCA9ICdSR0JBMzJVSSc7XHJcbiAgICBmbGFtZU1vZGVsVGV4Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBVcGRhdGUgbWF0ZXJpYWwgdW5pZm9ybXNcclxuICAgIG1hdGVyaWFsLnVuaWZvcm1zLmZsYW1lTW9kZWxUZXh0dXJlLnZhbHVlID0gZmxhbWVNb2RlbFRleDtcclxuICAgIG1hdGVyaWFsLnVuaWZvcm1zLmZsYW1lTW9kZWxUZXh0dXJlU2l6ZS52YWx1ZS5jb3B5KGZsYW1lTW9kZWxUZXhTaXplKTtcclxuICAgIG1hdGVyaWFsLnVuaWZvcm1zLmdhdXNzaWFuU3BsYXRDb3VudC52YWx1ZSA9IGdhdXNzaWFuU3BsYXRDb3VudDtcclxuICAgIG1hdGVyaWFsLnVuaWZvcm1zTmVlZFVwZGF0ZSA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkYXRhOiBmbGFtZU1vZGVsRGF0YUludCxcclxuICAgICAgICB0ZXh0dXJlOiBmbGFtZU1vZGVsVGV4LFxyXG4gICAgICAgIHNpemU6IGZsYW1lTW9kZWxUZXhTaXplLFxyXG4gICAgICAgIGJhc2VEYXRhOiB7IGZsYW1lTW9kZWxQb3M6IGZsYW1lTW9kZWxEYXRhIH1cclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCdWlsZCBib25lIG1hdHJpeCB0ZXh0dXJlIGZvciBza2VsZXRvbiBhbmltYXRpb25cclxuICogQHBhcmFtIHtGbG9hdDMyQXJyYXl9IGJvbmVzTWF0cml4IC0gRmxhdHRlbmVkIGJvbmUgbWF0cmljZXNcclxuICogQHBhcmFtIHtudW1iZXJ9IGJvbmVzTnVtIC0gTnVtYmVyIG9mIGJvbmVzXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBic1dlaWdodCAtIEJsZW5kc2hhcGUgd2VpZ2h0cyBvYmplY3RcclxuICogQHBhcmFtIHtvYmplY3R9IG1vcnBoVGFyZ2V0RGljdGlvbmFyeSAtIE1hcHMgYmxlbmRzaGFwZSBuYW1lcyB0byBpbmRpY2VzXHJcbiAqIEBwYXJhbSB7VEhSRUUuU2tpbm5lZE1lc2h9IGZsYW1lTW9kZWwgLSBUaGUgRkxBTUUgbWVzaFxyXG4gKiBAcGFyYW0ge1RIUkVFLlNoYWRlck1hdGVyaWFsfSBtYXRlcmlhbCAtIFRoZSBzcGxhdCBtYXRlcmlhbFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVzZUZsYW1lTW9kZWwgLSBVc2UgRkxBTUUgbW9kZVxyXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUZXh0dXJlIGRhdGEgb2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCb25lTWF0cml4VGV4dHVyZShcclxuICAgIGJvbmVzTWF0cml4LFxyXG4gICAgYm9uZXNOdW0sXHJcbiAgICBic1dlaWdodCxcclxuICAgIG1vcnBoVGFyZ2V0RGljdGlvbmFyeSxcclxuICAgIGZsYW1lTW9kZWwsXHJcbiAgICBtYXRlcmlhbCxcclxuICAgIHVzZUZsYW1lTW9kZWxcclxuKSB7XHJcbiAgICBpZiAoIWJzV2VpZ2h0KSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAvLyBib25lc051bSArIGV4cHJlc3Npb25CU051bSAvIDQgPSAzMCwgc28gdGV4dHVyZSBoZWlnaHQgaXMgMzJcclxuICAgIGNvbnN0IGJvbmVUZXh0dXJlU2l6ZSA9IG5ldyBWZWN0b3IyKDQsIDMyKTtcclxuICAgIGNvbnN0IGJvbmVNYXRyaXhUZXh0dXJlRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoYm9uZXNNYXRyaXgpO1xyXG4gICAgY29uc3QgYm9uZU1hdHJpeFRleHR1cmVEYXRhSW50ID0gbmV3IFVpbnQzMkFycmF5KGJvbmVUZXh0dXJlU2l6ZS54ICogYm9uZVRleHR1cmVTaXplLnkgKiA0KTtcclxuXHJcbiAgICBpZiAodXNlRmxhbWVNb2RlbCkge1xyXG4gICAgICAgIC8vIEVuY29kZSBib25lIG1hdHJpY2VzXHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBib25lc051bSAqIDE2OyBjKyspIHtcclxuICAgICAgICAgICAgYm9uZU1hdHJpeFRleHR1cmVEYXRhSW50W2NdID0gdWludEVuY29kZWRGbG9hdChib25lTWF0cml4VGV4dHVyZURhdGFbY10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvLyBTZXQgc2tlbGV0b24gdW5pZm9ybXNcclxuICAgICAgICBpZiAoZmxhbWVNb2RlbCAmJiBmbGFtZU1vZGVsLnNrZWxldG9uKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLmJvbmVUZXh0dXJlMC52YWx1ZSA9IGZsYW1lTW9kZWwuc2tlbGV0b24uYm9uZVRleHR1cmU7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLmJpbmRNYXRyaXgudmFsdWUgPSBmbGFtZU1vZGVsLmJpbmRNYXRyaXg7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLmJpbmRNYXRyaXhJbnZlcnNlLnZhbHVlID0gZmxhbWVNb2RlbC5iaW5kTWF0cml4SW52ZXJzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRW5jb2RlIGJsZW5kc2hhcGUgd2VpZ2h0c1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYnNXZWlnaHQpIHtcclxuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bihic1dlaWdodCwga2V5KSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGJzV2VpZ2h0W2tleV07XHJcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IG1vcnBoVGFyZ2V0RGljdGlvbmFyeVtrZXldO1xyXG4gICAgICAgICAgICBib25lTWF0cml4VGV4dHVyZURhdGFJbnRbaWR4ICsgYm9uZXNOdW0gKiAxNl0gPSB1aW50RW5jb2RlZEZsb2F0KHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYm9uZU1hdHJpeFRleCA9IG5ldyBEYXRhVGV4dHVyZShcclxuICAgICAgICBib25lTWF0cml4VGV4dHVyZURhdGFJbnQsXHJcbiAgICAgICAgYm9uZVRleHR1cmVTaXplLngsXHJcbiAgICAgICAgYm9uZVRleHR1cmVTaXplLnksXHJcbiAgICAgICAgUkdCQUludGVnZXJGb3JtYXQsXHJcbiAgICAgICAgVW5zaWduZWRJbnRUeXBlXHJcbiAgICApO1xyXG4gICAgYm9uZU1hdHJpeFRleC5pbnRlcm5hbEZvcm1hdCA9ICdSR0JBMzJVSSc7XHJcbiAgICBib25lTWF0cml4VGV4Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICBtYXRlcmlhbC51bmlmb3Jtcy5ib25lVGV4dHVyZS52YWx1ZSA9IGJvbmVNYXRyaXhUZXg7XHJcbiAgICBtYXRlcmlhbC51bmlmb3Jtcy5ib25lVGV4dHVyZVNpemUudmFsdWUuY29weShib25lVGV4dHVyZVNpemUpO1xyXG4gICAgbWF0ZXJpYWwudW5pZm9ybXNOZWVkVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGE6IGJvbmVNYXRyaXhUZXh0dXJlRGF0YUludCxcclxuICAgICAgICB0ZXh0dXJlOiBib25lTWF0cml4VGV4LFxyXG4gICAgICAgIHNpemU6IGJvbmVUZXh0dXJlU2l6ZSxcclxuICAgICAgICBiYXNlRGF0YTogeyBib25lTWF0cml4OiBib25lTWF0cml4VGV4dHVyZURhdGFJbnQgfVxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFVwZGF0ZSBib25lIG1hdHJpeCB0ZXh0dXJlIHdpdGggbmV3IGFuaW1hdGlvbiBkYXRhXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBzcGxhdERhdGFUZXh0dXJlcyAtIFRleHR1cmUgZGF0YSBzdG9yYWdlXHJcbiAqIEBwYXJhbSB7RmxvYXQzMkFycmF5fSBib25lc01hdHJpeCAtIFVwZGF0ZWQgYm9uZSBtYXRyaWNlc1xyXG4gKiBAcGFyYW0ge251bWJlcn0gYm9uZXNOdW0gLSBOdW1iZXIgb2YgYm9uZXNcclxuICogQHBhcmFtIHtvYmplY3R9IGJzV2VpZ2h0IC0gVXBkYXRlZCBibGVuZHNoYXBlIHdlaWdodHNcclxuICogQHBhcmFtIHtvYmplY3R9IG1vcnBoVGFyZ2V0RGljdGlvbmFyeSAtIEJsZW5kc2hhcGUgbmFtZSB0byBpbmRleCBtYXBcclxuICogQHBhcmFtIHtUSFJFRS5Ta2lubmVkTWVzaH0gZmxhbWVNb2RlbCAtIFRoZSBGTEFNRSBtZXNoXHJcbiAqIEBwYXJhbSB7VEhSRUUuU2hhZGVyTWF0ZXJpYWx9IG1hdGVyaWFsIC0gVGhlIHNwbGF0IG1hdGVyaWFsXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdXBkYXRlRmxhbWVCb25lTWF0cml4IC0gV2hldGhlciB0byB1cGRhdGUgYm9uZSBtYXRyaWNlc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUJvbmVNYXRyaXhUZXh0dXJlKFxyXG4gICAgc3BsYXREYXRhVGV4dHVyZXMsXHJcbiAgICBib25lc01hdHJpeCxcclxuICAgIGJvbmVzTnVtLFxyXG4gICAgYnNXZWlnaHQsXHJcbiAgICBtb3JwaFRhcmdldERpY3Rpb25hcnksXHJcbiAgICBmbGFtZU1vZGVsLFxyXG4gICAgbWF0ZXJpYWwsXHJcbiAgICB1cGRhdGVGbGFtZUJvbmVNYXRyaXggPSBmYWxzZVxyXG4pIHtcclxuICAgIGlmICghYnNXZWlnaHQgfHwgIW1vcnBoVGFyZ2V0RGljdGlvbmFyeSkgcmV0dXJuO1xyXG5cclxuICAgIGlmICh1cGRhdGVGbGFtZUJvbmVNYXRyaXgpIHtcclxuICAgICAgICBjb25zdCBib25lTWF0cml4VGV4dHVyZURhdGEgPSBuZXcgRmxvYXQzMkFycmF5KGJvbmVzTWF0cml4KTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGJvbmVzTnVtICogMTY7IGMrKykge1xyXG4gICAgICAgICAgICBzcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YVsnYm9uZU1hdHJpeCddW2NdID0gdWludEVuY29kZWRGbG9hdChib25lTWF0cml4VGV4dHVyZURhdGFbY10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgYmxlbmRzaGFwZSB3ZWlnaHRzXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBic1dlaWdodCkge1xyXG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGJzV2VpZ2h0LCBrZXkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYnNXZWlnaHRba2V5XTtcclxuICAgICAgICAgICAgY29uc3QgaWR4ID0gbW9ycGhUYXJnZXREaWN0aW9uYXJ5W2tleV07XHJcbiAgICAgICAgICAgIHNwbGF0RGF0YVRleHR1cmVzLmJhc2VEYXRhWydib25lTWF0cml4J11baWR4ICsgYm9uZXNOdW0gKiAxNl0gPSB1aW50RW5jb2RlZEZsb2F0KHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIHRleHR1cmUgZGF0YVxyXG4gICAgc3BsYXREYXRhVGV4dHVyZXNbJ2JvbmVNYXRyaXgnXVsndGV4dHVyZSddLmRhdGEgPSBzcGxhdERhdGFUZXh0dXJlcy5iYXNlRGF0YVsnYm9uZU1hdHJpeCddO1xyXG4gICAgc3BsYXREYXRhVGV4dHVyZXNbJ2JvbmVNYXRyaXgnXVsndGV4dHVyZSddLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIG1hdGVyaWFsLnVuaWZvcm1zLmJvbmVUZXh0dXJlLnZhbHVlID0gc3BsYXREYXRhVGV4dHVyZXNbJ2JvbmVNYXRyaXgnXVsndGV4dHVyZSddO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBza2VsZXRvbiB1bmlmb3Jtc1xyXG4gICAgaWYgKGZsYW1lTW9kZWwuc2tlbGV0b24pIHtcclxuICAgICAgICBtYXRlcmlhbC51bmlmb3Jtcy5ib25lVGV4dHVyZTAudmFsdWUgPSBmbGFtZU1vZGVsLnNrZWxldG9uLmJvbmVUZXh0dXJlO1xyXG4gICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLmJpbmRNYXRyaXgudmFsdWUgPSBmbGFtZU1vZGVsLmJpbmRNYXRyaXg7XHJcbiAgICAgICAgbWF0ZXJpYWwudW5pZm9ybXMuYmluZE1hdHJpeEludmVyc2UudmFsdWUgPSBmbGFtZU1vZGVsLmJpbmRNYXRyaXhJbnZlcnNlO1xyXG4gICAgfVxyXG5cclxuICAgIG1hdGVyaWFsLnVuaWZvcm1zTmVlZFVwZGF0ZSA9IHRydWU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCdWlsZCBMQlMgd2VpZ2h0IHRleHR1cmUgZm9yIHNraW4gZGVmb3JtYXRpb25cclxuICogQHBhcmFtIHtUSFJFRS5Ta2lubmVkTWVzaH0gZmxhbWVNb2RlbCAtIFRoZSBGTEFNRSBtZXNoXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGJvbmVzV2VpZ2h0IC0gUGVyLXZlcnRleCBib25lIHdlaWdodHMgYXJyYXlcclxuICogQHBhcmFtIHtUSFJFRS5TaGFkZXJNYXRlcmlhbH0gbWF0ZXJpYWwgLSBUaGUgc3BsYXQgbWF0ZXJpYWxcclxuICogQHJldHVybnMge29iamVjdH0gVGV4dHVyZSBkYXRhIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQm9uZVdlaWdodFRleHR1cmUoZmxhbWVNb2RlbCwgYm9uZXNXZWlnaHQsIG1hdGVyaWFsKSB7XHJcbiAgICBjb25zdCBzaGFwZWRNZXNoID0gZmxhbWVNb2RlbC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O1xyXG4gICAgY29uc3QgcG9pbnROdW0gPSBzaGFwZWRNZXNoLmxlbmd0aCAvIDM7XHJcbiAgICBcclxuICAgIGNvbnN0IGJvbmVXZWlnaHRUZXh0dXJlU2l6ZSA9IG5ldyBWZWN0b3IyKDUxMiwgNTEyKTtcclxuICAgIGNvbnN0IGJvbmVXZWlnaHRUZXh0dXJlRGF0YSA9IG5ldyBGbG9hdDMyQXJyYXkoYm9uZVdlaWdodFRleHR1cmVTaXplLnggKiBib25lV2VpZ2h0VGV4dHVyZVNpemUueSAqIDQpO1xyXG4gICAgY29uc3QgYm9uZVdlaWdodFRleHR1cmVEYXRhSW50ID0gbmV3IFVpbnQzMkFycmF5KGJvbmVXZWlnaHRUZXh0dXJlU2l6ZS54ICogYm9uZVdlaWdodFRleHR1cmVTaXplLnkgKiA0KTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50TnVtOyBpKyspIHtcclxuICAgICAgICAvLyBTdG9yZSA1IGJvbmUgd2VpZ2h0cyBwZXIgdmVydGV4ICgyIHRleGVscylcclxuICAgICAgICBib25lV2VpZ2h0VGV4dHVyZURhdGFbaSAqIDggKyAwXSA9IGJvbmVzV2VpZ2h0W2ldWzBdO1xyXG4gICAgICAgIGJvbmVXZWlnaHRUZXh0dXJlRGF0YVtpICogOCArIDFdID0gYm9uZXNXZWlnaHRbaV1bMV07XHJcbiAgICAgICAgYm9uZVdlaWdodFRleHR1cmVEYXRhW2kgKiA4ICsgMl0gPSBib25lc1dlaWdodFtpXVsyXTtcclxuICAgICAgICBib25lV2VpZ2h0VGV4dHVyZURhdGFbaSAqIDggKyAzXSA9IGJvbmVzV2VpZ2h0W2ldWzNdO1xyXG4gICAgICAgIGJvbmVXZWlnaHRUZXh0dXJlRGF0YVtpICogOCArIDRdID0gYm9uZXNXZWlnaHRbaV1bNF07XHJcblxyXG4gICAgICAgIGJvbmVXZWlnaHRUZXh0dXJlRGF0YUludFtpICogOCArIDBdID0gdWludEVuY29kZWRGbG9hdChib25lc1dlaWdodFtpXVswXSk7XHJcbiAgICAgICAgYm9uZVdlaWdodFRleHR1cmVEYXRhSW50W2kgKiA4ICsgMV0gPSB1aW50RW5jb2RlZEZsb2F0KGJvbmVzV2VpZ2h0W2ldWzFdKTtcclxuICAgICAgICBib25lV2VpZ2h0VGV4dHVyZURhdGFJbnRbaSAqIDggKyAyXSA9IHVpbnRFbmNvZGVkRmxvYXQoYm9uZXNXZWlnaHRbaV1bMl0pO1xyXG4gICAgICAgIGJvbmVXZWlnaHRUZXh0dXJlRGF0YUludFtpICogOCArIDNdID0gdWludEVuY29kZWRGbG9hdChib25lc1dlaWdodFtpXVszXSk7XHJcbiAgICAgICAgYm9uZVdlaWdodFRleHR1cmVEYXRhSW50W2kgKiA4ICsgNF0gPSB1aW50RW5jb2RlZEZsb2F0KGJvbmVzV2VpZ2h0W2ldWzRdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBib25lV2VpZ2h0VGV4ID0gbmV3IERhdGFUZXh0dXJlKFxyXG4gICAgICAgIGJvbmVXZWlnaHRUZXh0dXJlRGF0YUludCxcclxuICAgICAgICBib25lV2VpZ2h0VGV4dHVyZVNpemUueCxcclxuICAgICAgICBib25lV2VpZ2h0VGV4dHVyZVNpemUueSxcclxuICAgICAgICBSR0JBSW50ZWdlckZvcm1hdCxcclxuICAgICAgICBVbnNpZ25lZEludFR5cGVcclxuICAgICk7XHJcbiAgICBib25lV2VpZ2h0VGV4LmludGVybmFsRm9ybWF0ID0gJ1JHQkEzMlVJJztcclxuICAgIGJvbmVXZWlnaHRUZXgubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgIG1hdGVyaWFsLnVuaWZvcm1zLmJvbmVXZWlnaHRUZXh0dXJlLnZhbHVlID0gYm9uZVdlaWdodFRleDtcclxuICAgIG1hdGVyaWFsLnVuaWZvcm1zLmJvbmVXZWlnaHRUZXh0dXJlU2l6ZS52YWx1ZS5jb3B5KGJvbmVXZWlnaHRUZXh0dXJlU2l6ZSk7XHJcbiAgICBtYXRlcmlhbC51bmlmb3Jtc05lZWRVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGF0YTogYm9uZVdlaWdodFRleHR1cmVEYXRhSW50LFxyXG4gICAgICAgIHRleHR1cmU6IGJvbmVXZWlnaHRUZXgsXHJcbiAgICAgICAgc2l6ZTogYm9uZVdlaWdodFRleHR1cmVTaXplLFxyXG4gICAgICAgIGJhc2VEYXRhOiB7IGJvbmVXZWlnaHQ6IGJvbmVXZWlnaHRUZXh0dXJlRGF0YUludCB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHVwZGF0ZWQgYm9uZSBtYXRyaWNlcyBmcm9tIHNrZWxldG9uXHJcbiAqIEBwYXJhbSB7VEhSRUUuU2tlbGV0b259IHNrZWxldG9uIC0gVGhlIHNrZWxldG9uIHRvIHJlYWQgbWF0cmljZXMgZnJvbVxyXG4gKiBAcGFyYW0ge251bWJlcn0gYm9uZU51bSAtIE51bWJlciBvZiBib25lc1xyXG4gKiBAcmV0dXJucyB7RmxvYXQzMkFycmF5fSBGbGF0dGVuZWQgYm9uZSBtYXRyaWNlc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZWRCb25lTWF0cmljZXMoc2tlbGV0b24sIGJvbmVOdW0pIHtcclxuICAgIGNvbnN0IHVwZGF0ZWRCb25lTWF0cmljZXMgPSBbXTtcclxuICAgIFxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBib25lTnVtOyBqKyspIHtcclxuICAgICAgICBjb25zdCBib25lTWF0cml4ID0gc2tlbGV0b24uYm9uZXNbal0ubWF0cml4V29ybGQuY2xvbmUoKVxyXG4gICAgICAgICAgICAubXVsdGlwbHkoc2tlbGV0b24uYm9uZUludmVyc2VzW2pdLmNsb25lKCkpO1xyXG5cclxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGJvbmVNYXRyaXguZWxlbWVudHM7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB1cGRhdGVkQm9uZU1hdHJpY2VzLnB1c2goZWxlbWVudHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkodXBkYXRlZEJvbmVNYXRyaWNlcyk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBGbGFtZVRleHR1cmVNYW5hZ2VyID0ge1xyXG4gICAgYnVpbGRNb2RlbFRleHR1cmUsXHJcbiAgICBidWlsZEJvbmVNYXRyaXhUZXh0dXJlLFxyXG4gICAgdXBkYXRlQm9uZU1hdHJpeFRleHR1cmUsXHJcbiAgICBidWlsZEJvbmVXZWlnaHRUZXh0dXJlLFxyXG4gICAgZ2V0VXBkYXRlZEJvbmVNYXRyaWNlc1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmxhbWVUZXh0dXJlTWFuYWdlcjtcclxuIiwiLyoqXHJcbiAqIEZsYW1lQW5pbWF0b3JcclxuICogXHJcbiAqIERlcml2ZWQgZnJvbSBnYXVzc2lhbi1zcGxhdC1yZW5kZXJlci1mb3ItbGFtXHJcbiAqIFxyXG4gKiBIYW5kbGVzIEZMQU1FIG1vZGVsIGFuaW1hdGlvbiBhbmQgc2tlbGV0b24gdXBkYXRlczpcclxuICogLSBCb25lIHJvdGF0aW9uIGZyb20gRkxBTUUgcGFyYW1ldGVyc1xyXG4gKiAtIEJsZW5kc2hhcGUgd2VpZ2h0IHVwZGF0ZXNcclxuICogLSBTa2VsZXRvbiBzeW5jaHJvbml6YXRpb24gd2l0aCBnYXVzc2lhbiBzcGxhdCBtZXNoXHJcbiAqL1xyXG5cclxuaW1wb3J0IHtcclxuICAgIFZlY3RvcjMsXHJcbiAgICBRdWF0ZXJuaW9uLFxyXG4gICAgTWF0cml4NCxcclxuICAgIEJvbmUsXHJcbiAgICBTa2VsZXRvblxyXG59IGZyb20gJ3RocmVlJztcclxuXHJcbmltcG9ydCB7IEZsYW1lVGV4dHVyZU1hbmFnZXIgfSBmcm9tICcuL0ZsYW1lVGV4dHVyZU1hbmFnZXIuanMnO1xyXG5cclxuLyoqXHJcbiAqIEZsYW1lQW5pbWF0b3IgLSBNYW5hZ2VzIEZMQU1FIHBhcmFtZXRyaWMgaGVhZCBtb2RlbCBhbmltYXRpb25cclxuICovXHJcbmV4cG9ydCBjbGFzcyBGbGFtZUFuaW1hdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuc2tlbGV0b24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYm9uZXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZmxhbWVQYXJhbXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGJzV2VpZ2h0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZyYW1lID0gMDtcclxuICAgICAgICB0aGlzLnRvdGFsRnJhbWVzID0gMDtcclxuICAgICAgICB0aGlzLnVzZUZsYW1lID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmF2YXRhck1lc2ggPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZ2F1c3NpYW5TcGxhdENvdW50ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemUgd2l0aCBGTEFNRSBwYXJhbWV0ZXJzIGFuZCBMQlMgd2VpZ2h0c1xyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGZsYW1lUGFyYW1zIC0gRkxBTUUgYW5pbWF0aW9uIHBhcmFtZXRlcnNcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBib25lVHJlZSAtIFNrZWxldG9uIGhpZXJhcmNoeSBkYXRhXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBsYnNXZWlnaHQgLSBMQlMgd2VpZ2h0cyBmb3IgZWFjaCB2ZXJ0ZXhcclxuICAgICAqIEBwYXJhbSB7VEhSRUUuU2tpbm5lZE1lc2h9IGF2YXRhck1lc2ggLSBUaGUgRkxBTUUgYXZhdGFyIG1lc2hcclxuICAgICAqL1xyXG4gICAgaW5pdGlhbGl6ZShmbGFtZVBhcmFtcywgYm9uZVRyZWUsIGxic1dlaWdodCwgYXZhdGFyTWVzaCkge1xyXG4gICAgICAgIHRoaXMuZmxhbWVQYXJhbXMgPSBmbGFtZVBhcmFtcztcclxuICAgICAgICB0aGlzLmxic1dlaWdodCA9IGxic1dlaWdodDtcclxuICAgICAgICB0aGlzLmF2YXRhck1lc2ggPSBhdmF0YXJNZXNoO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChmbGFtZVBhcmFtcyAmJiBmbGFtZVBhcmFtcy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsRnJhbWVzID0gZmxhbWVQYXJhbXMucm90YXRpb24ubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nYXVzc2lhblNwbGF0Q291bnQgPSBhdmF0YXJNZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uY291bnQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gQnVpbGQgc2tlbGV0b24gZnJvbSBib25lIHRyZWVcclxuICAgICAgICB0aGlzLmJ1aWxkU2tlbGV0b24oYm9uZVRyZWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgc2tlbGV0b24gZnJvbSBib25lIHRyZWUgZGF0YVxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGJvbmVUcmVlIC0gU2tlbGV0b24gaGllcmFyY2h5IGRlZmluaXRpb25cclxuICAgICAqL1xyXG4gICAgYnVpbGRTa2VsZXRvbihib25lVHJlZSkge1xyXG4gICAgICAgIGlmICghYm9uZVRyZWUpIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5ib25lcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGJvbmVJbnZlcnNlcyA9IFtdO1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgYm9uZXMgZnJvbSB0cmVlIHN0cnVjdHVyZVxyXG4gICAgICAgIGNvbnN0IGNyZWF0ZUJvbmUgPSAoYm9uZURhdGEsIHBhcmVudEJvbmUgPSBudWxsKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJvbmUgPSBuZXcgQm9uZSgpO1xyXG4gICAgICAgICAgICBib25lLm5hbWUgPSBib25lRGF0YS5uYW1lIHx8IGBib25lXyR7dGhpcy5ib25lcy5sZW5ndGh9YDtcclxuXHJcbiAgICAgICAgICAgIGlmIChib25lRGF0YS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgYm9uZS5wb3NpdGlvbi5mcm9tQXJyYXkoYm9uZURhdGEucG9zaXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChib25lRGF0YS5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgYm9uZS5yb3RhdGlvbi5mcm9tQXJyYXkoYm9uZURhdGEucm90YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChib25lRGF0YS5zY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgYm9uZS5zY2FsZS5mcm9tQXJyYXkoYm9uZURhdGEuc2NhbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocGFyZW50Qm9uZSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Qm9uZS5hZGQoYm9uZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuYm9uZXMucHVzaChib25lKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBpbnZlcnNlIGJpbmQgbWF0cml4XHJcbiAgICAgICAgICAgIGNvbnN0IGludmVyc2VNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgICAgICBpZiAoYm9uZURhdGEuaW52ZXJzZUJpbmRNYXRyaXgpIHtcclxuICAgICAgICAgICAgICAgIGludmVyc2VNYXRyaXguZnJvbUFycmF5KGJvbmVEYXRhLmludmVyc2VCaW5kTWF0cml4KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJvbmUudXBkYXRlTWF0cml4V29ybGQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBpbnZlcnNlTWF0cml4LmNvcHkoYm9uZS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYm9uZUludmVyc2VzLnB1c2goaW52ZXJzZU1hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICAvLyBQcm9jZXNzIGNoaWxkcmVuXHJcbiAgICAgICAgICAgIGlmIChib25lRGF0YS5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgYm9uZURhdGEuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBjcmVhdGVCb25lKGNoaWxkLCBib25lKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBJZiBib25lVHJlZSBpcyBhcnJheSwgY3JlYXRlIGJvbmVzIGRpcmVjdGx5XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYm9uZVRyZWUpKSB7XHJcbiAgICAgICAgICAgIGJvbmVUcmVlLmZvckVhY2goKGJvbmVEYXRhLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm9uZSA9IG5ldyBCb25lKCk7XHJcbiAgICAgICAgICAgICAgICBib25lLm5hbWUgPSBib25lRGF0YS5uYW1lIHx8IGBib25lXyR7aW5kZXh9YDtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKGJvbmVEYXRhLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9uZS5wb3NpdGlvbi5mcm9tQXJyYXkoYm9uZURhdGEucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJvbmVzLnB1c2goYm9uZSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGludmVyc2VNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvbmVEYXRhLmludmVyc2VCaW5kTWF0cml4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW52ZXJzZU1hdHJpeC5mcm9tQXJyYXkoYm9uZURhdGEuaW52ZXJzZUJpbmRNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYm9uZUludmVyc2VzLnB1c2goaW52ZXJzZU1hdHJpeCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gU2V0IHVwIGhpZXJhcmNoeSAoRkxBTUU6IHJvb3QgLT4gbmVjayAtPiBqYXcsIGV5ZXMpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJvbmVzLmxlbmd0aCA+PSA1KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJvbmVzWzBdLmFkZCh0aGlzLmJvbmVzWzFdKTsgLy8gcm9vdCAtPiBuZWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJvbmVzWzFdLmFkZCh0aGlzLmJvbmVzWzJdKTsgLy8gbmVjayAtPiBqYXdcclxuICAgICAgICAgICAgICAgIHRoaXMuYm9uZXNbMV0uYWRkKHRoaXMuYm9uZXNbM10pOyAvLyBuZWNrIC0+IGxlZnRFeWVcclxuICAgICAgICAgICAgICAgIHRoaXMuYm9uZXNbMV0uYWRkKHRoaXMuYm9uZXNbNF0pOyAvLyBuZWNrIC0+IHJpZ2h0RXllXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGJvbmVUcmVlLnJvb3QpIHtcclxuICAgICAgICAgICAgY3JlYXRlQm9uZShib25lVHJlZS5yb290KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBza2VsZXRvblxyXG4gICAgICAgIHRoaXMuc2tlbGV0b24gPSBuZXcgU2tlbGV0b24odGhpcy5ib25lcywgYm9uZUludmVyc2VzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBib25lIHJvdGF0aW9uIGZyb20gYXhpcy1hbmdsZSBvciBxdWF0ZXJuaW9uXHJcbiAgICAgKiBAcGFyYW0ge1RIUkVFLkJvbmV9IGJvbmUgLSBUYXJnZXQgYm9uZVxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gYW5nbGVzIC0gUm90YXRpb24gdmFsdWVzXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUXVhdCAtIFdoZXRoZXIgYW5nbGVzIGFyZSBxdWF0ZXJuaW9uXHJcbiAgICAgKi9cclxuICAgIHNldEJvbmVSb3RhdGlvbihib25lLCBhbmdsZXMsIGlzUXVhdCA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IHF1YXRlcm5pb247XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGlzUXVhdCkge1xyXG4gICAgICAgICAgICBxdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oYW5nbGVzWzBdLCBhbmdsZXNbMV0sIGFuZ2xlc1syXSwgYW5nbGVzWzNdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBBeGlzLWFuZ2xlIHJlcHJlc2VudGF0aW9uXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3IFZlY3RvcjMoYW5nbGVzWzBdLCBhbmdsZXNbMV0sIGFuZ2xlc1syXSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlSW5SYWRpYW5zID0gdmFsdWUubGVuZ3RoKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGF4aXMgPSB2YWx1ZS5ub3JtYWxpemUoKTtcclxuICAgICAgICAgICAgcXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCkuc2V0RnJvbUF4aXNBbmdsZShheGlzLCBhbmdsZUluUmFkaWFucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGJvbmUucXVhdGVybmlvbi5jb3B5KHF1YXRlcm5pb24pO1xyXG4gICAgICAgIGJvbmUudXBkYXRlTWF0cml4V29ybGQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgRkxBTUUgYm9uZXMgZnJvbSBjdXJyZW50IGZyYW1lIHBhcmFtZXRlcnNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlRmxhbWVCb25lcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmxhbWVQYXJhbXMgfHwgIXRoaXMuc2tlbGV0b24pIHJldHVybiB7fTtcclxuXHJcbiAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLmZyYW1lO1xyXG4gICAgICAgIGNvbnN0IGJzV2VpZ2h0ID0gdGhpcy5mbGFtZVBhcmFtc1snZXhwciddW2ZyYW1lXTtcclxuXHJcbiAgICAgICAgLy8gUm9vdCBib25lIHJvdGF0aW9uXHJcbiAgICAgICAgY29uc3Qgcm9vdEFuZ2xlID0gdGhpcy5mbGFtZVBhcmFtc1sncm90YXRpb24nXVtmcmFtZV07XHJcbiAgICAgICAgdGhpcy5zZXRCb25lUm90YXRpb24odGhpcy5za2VsZXRvbi5ib25lc1swXSwgcm9vdEFuZ2xlKTtcclxuXHJcbiAgICAgICAgLy8gTmVjayByb3RhdGlvblxyXG4gICAgICAgIGNvbnN0IG5lY2tBbmdsZSA9IHRoaXMuZmxhbWVQYXJhbXNbJ25lY2tfcG9zZSddW2ZyYW1lXTtcclxuICAgICAgICB0aGlzLnNldEJvbmVSb3RhdGlvbih0aGlzLnNrZWxldG9uLmJvbmVzWzFdLCBuZWNrQW5nbGUpO1xyXG5cclxuICAgICAgICAvLyBKYXcgcm90YXRpb25cclxuICAgICAgICBjb25zdCBqYXdBbmdsZSA9IHRoaXMuZmxhbWVQYXJhbXNbJ2phd19wb3NlJ11bZnJhbWVdO1xyXG4gICAgICAgIHRoaXMuc2V0Qm9uZVJvdGF0aW9uKHRoaXMuc2tlbGV0b24uYm9uZXNbMl0sIGphd0FuZ2xlKTtcclxuXHJcbiAgICAgICAgLy8gRXllcyByb3RhdGlvbiAoY29tYmluZWQgaW4gZXllc19wb3NlIGFycmF5KVxyXG4gICAgICAgIGNvbnN0IGV5ZXNBbmdsZSA9IHRoaXMuZmxhbWVQYXJhbXNbJ2V5ZXNfcG9zZSddW2ZyYW1lXTtcclxuICAgICAgICB0aGlzLnNldEJvbmVSb3RhdGlvbih0aGlzLnNrZWxldG9uLmJvbmVzWzNdLCBleWVzQW5nbGUpO1xyXG4gICAgICAgIHRoaXMuc2V0Qm9uZVJvdGF0aW9uKHRoaXMuc2tlbGV0b24uYm9uZXNbNF0sIFtleWVzQW5nbGVbM10sIGV5ZXNBbmdsZVs0XSwgZXllc0FuZ2xlWzVdXSk7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBza2VsZXRvbiBtYXRyaWNlc1xyXG4gICAgICAgIHRoaXMuc2tlbGV0b24udXBkYXRlKCk7XHJcblxyXG4gICAgICAgIC8vIEdldCB1cGRhdGVkIGJvbmUgbWF0cmljZXNcclxuICAgICAgICBjb25zdCBudW1Cb25lcyA9IDU7XHJcbiAgICAgICAgY29uc3QgYm9uZXNNYXRyaXggPSBGbGFtZVRleHR1cmVNYW5hZ2VyLmdldFVwZGF0ZWRCb25lTWF0cmljZXModGhpcy5za2VsZXRvbiwgbnVtQm9uZXMpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBic1dlaWdodCxcclxuICAgICAgICAgICAgYm9uZXNNYXRyaXgsXHJcbiAgICAgICAgICAgIGJvbmVzTnVtOiBudW1Cb25lcyxcclxuICAgICAgICAgICAgYm9uZXNXZWlnaHQ6IHRoaXMubGJzV2VpZ2h0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJ1biBtb3JwaCB1cGRhdGUgLSBtYWluIGFuaW1hdGlvbiBsb29wIGZ1bmN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1NwbGF0TWVzaH0gc3BsYXRNZXNoIC0gVGhlIGdhdXNzaWFuIHNwbGF0IG1lc2ggdG8gdXBkYXRlXHJcbiAgICAgKi9cclxuICAgIHJ1bk1vcnBoVXBkYXRlKHNwbGF0TWVzaCkge1xyXG4gICAgICAgIGNvbnN0IG1vcnBoZWRNZXNoID0gbmV3IEZsb2F0MzJBcnJheShcclxuICAgICAgICAgICAgdGhpcy5hdmF0YXJNZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBzcGxhdE1lc2guZ2F1c3NpYW5TcGxhdENvdW50ID0gdGhpcy5nYXVzc2lhblNwbGF0Q291bnQ7XHJcbiAgICAgICAgc3BsYXRNZXNoLmJvbmVzTnVtID0gNTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlRmxhbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlRGF0YSA9IHRoaXMudXBkYXRlRmxhbWVCb25lcygpO1xyXG4gICAgICAgICAgICBzcGxhdE1lc2guYnNXZWlnaHQgPSB1cGRhdGVEYXRhLmJzV2VpZ2h0O1xyXG4gICAgICAgICAgICBzcGxhdE1lc2guYm9uZXNNYXRyaXggPSB1cGRhdGVEYXRhLmJvbmVzTWF0cml4O1xyXG4gICAgICAgICAgICBzcGxhdE1lc2guYm9uZXNOdW0gPSB1cGRhdGVEYXRhLmJvbmVzTnVtO1xyXG4gICAgICAgICAgICBzcGxhdE1lc2guYm9uZXNXZWlnaHQgPSB1cGRhdGVEYXRhLmJvbmVzV2VpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3BsYXRNZXNoLm1vcnBoZWRNZXNoID0gbW9ycGhlZE1lc2g7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0ZXh0dXJlc1xyXG4gICAgICAgIGNvbnN0IHNwbGF0TnVtID0gc3BsYXRNZXNoLm1vcnBoZWRNZXNoLmxlbmd0aCAvIDM7XHJcbiAgICAgICAgaWYgKHNwbGF0TWVzaC5zcGxhdERhdGFUZXh0dXJlcyAmJiBzcGxhdE1lc2guc3BsYXREYXRhVGV4dHVyZXNbJ2ZsYW1lTW9kZWwnXSkge1xyXG4gICAgICAgICAgICBzcGxhdE1lc2gudXBkYXRlVGV4dHVyZUFmdGVyQlNBbmRTa2VsZXRvbigwLCBzcGxhdE51bSAtIDEsIHRoaXMudXNlRmxhbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjdXJyZW50IGFuaW1hdGlvbiBmcmFtZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyYW1lIC0gRnJhbWUgbnVtYmVyXHJcbiAgICAgKi9cclxuICAgIHNldEZyYW1lKGZyYW1lKSB7XHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lICUgdGhpcy50b3RhbEZyYW1lcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkdmFuY2UgdG8gbmV4dCBmcmFtZVxyXG4gICAgICovXHJcbiAgICBuZXh0RnJhbWUoKSB7XHJcbiAgICAgICAgdGhpcy5mcmFtZSA9ICh0aGlzLmZyYW1lICsgMSkgJSB0aGlzLnRvdGFsRnJhbWVzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNrZWxldG9uIGZvciBleHRlcm5hbCB1c2VcclxuICAgICAqL1xyXG4gICAgZ2V0U2tlbGV0b24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2tlbGV0b247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgY3VycmVudCBmcmFtZSBudW1iZXJcclxuICAgICAqL1xyXG4gICAgZ2V0RnJhbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdG90YWwgZnJhbWUgY291bnRcclxuICAgICAqL1xyXG4gICAgZ2V0VG90YWxGcmFtZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG90YWxGcmFtZXM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZsYW1lQW5pbWF0b3I7XHJcbiJdLCJuYW1lcyI6WyJDb25zdGFudHMiLCJDT1ZBUklBTkNFU19FTEVNRU5UU19QRVJfU1BMQVQiLCJDRU5URVJfQ09MT1JTX0VMRU1FTlRTX1BFUl9TUExBVCIsIkNPVkFSSUFOQ0VTX0VMRU1FTlRTX1BFUl9URVhFTF9TVE9SRUQiLCJDT1ZBUklBTkNFU19FTEVNRU5UU19QRVJfVEVYRUxfQUxMT0NBVEVEIiwiQ09WQVJJQU5DRVNfRUxFTUVOVFNfUEVSX1RFWEVMX0NPTVBSRVNTRURfU1RPUkVEIiwiQ09WQVJJQU5DRVNfRUxFTUVOVFNfUEVSX1RFWEVMX0NPTVBSRVNTRURfQUxMT0NBVEVEIiwiU0NBTEVTX1JPVEFUSU9OU19FTEVNRU5UU19QRVJfVEVYRUwiLCJDRU5URVJfQ09MT1JTX0VMRU1FTlRTX1BFUl9URVhFTCIsIlNDRU5FX0lOREVYRVNfRUxFTUVOVFNfUEVSX1RFWEVMIiwiU0NFTkVfRkFERUlOX1JBVEVfRkFTVCIsIlNDRU5FX0ZBREVJTl9SQVRFX0dSQURVQUwiLCJ0b0hhbGZGbG9hdCIsImZyb21IYWxmRmxvYXQiLCJ0b1VuY29tcHJlc3NlZEZsb2F0IiwiZnJvbVVpbnQ4IiwidG9VaW50OCIsImZyb21IYWxmRmxvYXRUb1VpbnQ4IiwiZGF0YVZpZXdGbG9hdEZvckNvbXByZXNzaW9uTGV2ZWwiLCJjb3B5QmV0d2VlbkJ1ZmZlcnMiLCJ1aW50RW5jb2RlZEZsb2F0IiwiQkFTRV9DT01QT05FTlRfQ09VTlQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNZLE1BQUMsUUFBUSxHQUFHO0FBQ3hCLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1o7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ1ksTUFBQyxVQUFVLEdBQUc7QUFDMUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1o7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNZLE1BQUMsV0FBVyxHQUFHO0FBQzNCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ1ks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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UsRUFBRUEsV0FBUyxDQUFDLFNBQVMsQ0FBQztBQUN0RixnRUFBZ0UsRUFBRUEsV0FBUyxDQUFDLFNBQVMsQ0FBQztBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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N0MsUUFBUSxNQUFNLHFCQUFxQixHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1RCxRQUFRLElBQUkscUJBQXFCLEdBQUcsSUFBSSxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RyxRQUFRLElBQUksd0JBQXdCLEdBQUcsSUFBSSxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5RyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsWUFBWSxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsWUFBWSxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsWUFBWSxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsWUFBWSxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsWUFBWSxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEU7QUFDQSxZQUFZ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Q0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNFLElBQUksQ0FBQyxDQUFDO0FBQ047QUFDQSxJQUFJLE9BQU8sUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxLQUFLO0FBQ3ZELFFBQVEsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0MsUUFBUSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyxRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDLElBQUksQ0FBQyxDQUFDO0FBQ047QUFDQSxJQUFJLE9BQU8sSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxLQUFLO0FBQ2xFLFFBQVEsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFFBQVEsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFFBQVEsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzRSxRQUFRLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDM0UsUUFBUSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNFLFFBQVEsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzRSxRQUFRLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDM0UsSUFBSSxDQUFDLENBQUM7QUFDTjtBQUNBLElBQUksT0FBTyx5QkFBeUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLO0FBQ2pHLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckQsUUFBUSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyRCxRQUFRLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JELElBQUksQ0FBQyxDQUFDO0FBQ047QUFDQSxJQUFJLE9BQU8seUJBQXlCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztBQUNwRix3Q0FBd0MsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLO0FBQzVHO0FBQ0EsUUFBUSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMvQyxRQUFRLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLFFBQVEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDL0MsUUFBUSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMvQyxRQUFRLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0gsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0QsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNILFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvRDtBQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNILFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0UsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNILFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvRDtBQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVM7QUFDdkYsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0csUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUcsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTO0FBQ3ZGLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9HLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvRDtBQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNILFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0UsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNILFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvRDtBQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNILFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRCxRQUFRLEtBQUssQ0FBQyxDQUFDLENB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USxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ2pHLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDakcsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNqRyxRQUFRLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ2pHLFNBQVMsQ0FBQztBQUNWLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4TCxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEwsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hMLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxH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LENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQ7QUFDQSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2RCxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEQsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1RDtBQUNBLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQ7QUFDQSxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JGO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0I7QUFDQSxJQUFJLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN2QixJQUFJLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FB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QUcsSUFBSSxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RztBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QztBQUNBLFFBQVEscUJBQXFCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsUUFBUSxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxRQUFRLHFCQUFxQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELFFBQVEscUJBQXFCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsUUFBUSxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RDtBQUNBLFFBQVEsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRixRQUFRLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsUUFBUSx3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LENBQUMsQ0FBQztBQUNyQyxJQUFJLENBQUM7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksZ0JBQWdCLEdBQUc7QUFDdkIsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDM0Q7QUFDQSxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDakMsUUFBUSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pEO0FBQ0E7QUFDQSxRQUFRLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUQsUUFBUSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hFO0FBQ0E7QUFDQSxRQUFRLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0QsUUFBUSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hFO0FBQ0E7QUFDQSxRQUFRLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0QsUUFBUSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQy9EO0FBQ0E7QUFDQSxRQUFRLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Qs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