@kontur.candy/tools 2.185.0 → 2.185.2

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 (599) hide show
  1. package/candy.js +0 -0
  2. package/distr/Common/AsyncUtils.js +1 -1
  3. package/distr/Common/AsyncUtils.js.map +1 -0
  4. package/distr/Common/AutoValidationUtils.js +2 -3
  5. package/distr/Common/AutoValidationUtils.js.map +1 -0
  6. package/distr/Common/CandyApiClient/CandyApiClient.js +2 -3
  7. package/distr/Common/CandyApiClient/CandyApiClient.js.map +1 -0
  8. package/distr/Common/CandyApiClient/CandyApiClientContext.js +4 -5
  9. package/distr/Common/CandyApiClient/CandyApiClientContext.js.map +1 -0
  10. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +1 -1
  11. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js.map +1 -0
  12. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +1 -1
  13. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js.map +1 -0
  14. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -1
  15. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js.map +1 -0
  16. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +1 -1
  17. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js.map +1 -0
  18. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -1
  19. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js.map +1 -0
  20. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -1
  21. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js.map +1 -0
  22. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -1
  23. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js.map +1 -0
  24. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +2 -3
  25. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js.map +1 -0
  26. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -1
  27. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js.map +1 -0
  28. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +2 -3
  29. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js.map +1 -0
  30. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +1 -1
  31. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js.map +1 -0
  32. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +4 -5
  33. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js.map +1 -0
  34. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -1
  35. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js.map +1 -0
  36. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +3 -5
  37. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js.map +1 -0
  38. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +1 -1
  39. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js.map +1 -0
  40. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +1 -1
  41. package/distr/Common/CandyApiClient/FakeCandyApiClient.js.map +1 -0
  42. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  43. package/distr/Common/CandyApiClient/ICandyApiClient.js.map +1 -0
  44. package/distr/Common/CandyApiClient/IsBuffer.js +1 -1
  45. package/distr/Common/CandyApiClient/IsBuffer.js.map +1 -0
  46. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +1 -1
  47. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js.map +1 -0
  48. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +1 -1
  49. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js.map +1 -0
  50. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +1 -1
  51. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js.map +1 -0
  52. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +1 -1
  53. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js.map +1 -0
  54. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +1 -1
  55. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js.map +1 -0
  56. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +3 -5
  57. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js.map +1 -0
  58. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +1 -1
  59. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js.map +1 -0
  60. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
  61. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js.map +1 -0
  62. package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +1 -1
  63. package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js.map +1 -0
  64. package/distr/Common/CandyApiClient/Types/DraftFullId.js +1 -1
  65. package/distr/Common/CandyApiClient/Types/DraftFullId.js.map +1 -0
  66. package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js +2 -3
  67. package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js.map +1 -0
  68. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +3 -5
  69. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js.map +1 -0
  70. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +2 -3
  71. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js.map +1 -0
  72. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +1 -1
  73. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js.map +1 -0
  74. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +1 -1
  75. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js.map +1 -0
  76. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +2 -3
  77. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js.map +1 -0
  78. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +1 -1
  79. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js.map +1 -0
  80. package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +1 -1
  81. package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js.map +1 -0
  82. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +1 -1
  83. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js.map +1 -0
  84. package/distr/Common/CandyApiClient/Types/Guid.js +1 -1
  85. package/distr/Common/CandyApiClient/Types/Guid.js.map +1 -0
  86. package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js +1 -1
  87. package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js.map +1 -0
  88. package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +1 -1
  89. package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js.map +1 -0
  90. package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js +1 -1
  91. package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js.map +1 -0
  92. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +2 -3
  93. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js.map +1 -0
  94. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +1 -1
  95. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js.map +1 -0
  96. package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +1 -1
  97. package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js.map +1 -0
  98. package/distr/Common/CandyApiClient/Types/Print/PrintType.js +2 -3
  99. package/distr/Common/CandyApiClient/Types/Print/PrintType.js.map +1 -0
  100. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js +1 -1
  101. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js.map +1 -0
  102. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js +1 -1
  103. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js.map +1 -0
  104. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js +1 -1
  105. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js.map +1 -0
  106. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js +1 -1
  107. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js.map +1 -0
  108. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js +1 -1
  109. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js.map +1 -0
  110. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js +1 -1
  111. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js.map +1 -0
  112. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js +1 -1
  113. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js.map +1 -0
  114. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js +1 -1
  115. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js.map +1 -0
  116. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js +1 -1
  117. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js.map +1 -0
  118. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js +1 -1
  119. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js.map +1 -0
  120. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js +1 -1
  121. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js.map +1 -0
  122. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js +1 -1
  123. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js.map +1 -0
  124. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js +1 -1
  125. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js.map +1 -0
  126. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js +1 -1
  127. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js.map +1 -0
  128. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js +1 -1
  129. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js.map +1 -0
  130. package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js +1 -1
  131. package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js.map +1 -0
  132. package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js +1 -1
  133. package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js.map +1 -0
  134. package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js +1 -1
  135. package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js.map +1 -0
  136. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +1 -1
  137. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js.map +1 -0
  138. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js +1 -1
  139. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js.map +1 -0
  140. package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js +1 -1
  141. package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js.map +1 -0
  142. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +1 -1
  143. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js.map +1 -0
  144. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +2 -3
  145. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js.map +1 -0
  146. package/distr/Common/CandyApiClient/Types/TestClassification.js +1 -1
  147. package/distr/Common/CandyApiClient/Types/TestClassification.js.map +1 -0
  148. package/distr/Common/CollectionUtils.js +1 -1
  149. package/distr/Common/CollectionUtils.js.map +1 -0
  150. package/distr/Common/CommonConstants/SectionNames.js +1 -1
  151. package/distr/Common/CommonConstants/SectionNames.js.map +1 -0
  152. package/distr/Common/Comparers.js +1 -1
  153. package/distr/Common/Comparers.js.map +1 -0
  154. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +3 -3
  155. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js.map +1 -0
  156. package/distr/Common/EndPoints.js +6 -11
  157. package/distr/Common/EndPoints.js.map +1 -0
  158. package/distr/Common/Enums/ButtonSettingsTypeEnum.js +2 -3
  159. package/distr/Common/Enums/ButtonSettingsTypeEnum.js.map +1 -0
  160. package/distr/Common/Errors.js +1 -1
  161. package/distr/Common/Errors.js.map +1 -0
  162. package/distr/Common/ExtractGFVPath/ExtractGFVPath.js +1 -1
  163. package/distr/Common/ExtractGFVPath/ExtractGFVPath.js.map +1 -0
  164. package/distr/Common/FSPrinterClient/FSPrinterClient.js +2 -2
  165. package/distr/Common/FSPrinterClient/FSPrinterClient.js.map +1 -0
  166. package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js +1 -1
  167. package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js.map +1 -0
  168. package/distr/Common/FSPrinterClient/IFSPrinterClient.js +6 -11
  169. package/distr/Common/FSPrinterClient/IFSPrinterClient.js.map +1 -0
  170. package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -1
  171. package/distr/Common/FormActionHandlers/ContextualActionNames.js.map +1 -0
  172. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +1 -1
  173. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js.map +1 -0
  174. package/distr/Common/FormPathUtils.js +2 -2
  175. package/distr/Common/FormPathUtils.js.map +1 -0
  176. package/distr/Common/Funcs.js +1 -1
  177. package/distr/Common/Funcs.js.map +1 -0
  178. package/distr/Common/GFV.js +1 -1
  179. package/distr/Common/GFV.js.map +1 -0
  180. package/distr/Common/Hooks/UseLocalStorage.js +3 -3
  181. package/distr/Common/Hooks/UseLocalStorage.js.map +1 -0
  182. package/distr/Common/HttpClient/AuthenticationMode.js +1 -1
  183. package/distr/Common/HttpClient/AuthenticationMode.js.map +1 -0
  184. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +2 -3
  185. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js.map +1 -0
  186. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +2 -3
  187. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js.map +1 -0
  188. package/distr/Common/HttpClient/FetchImplementation/Fetch.js +1 -1
  189. package/distr/Common/HttpClient/FetchImplementation/Fetch.js.map +1 -0
  190. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +2 -3
  191. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js.map +1 -0
  192. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +1 -1
  193. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js.map +1 -0
  194. package/distr/Common/HttpClient/HttpClient.js +2 -2
  195. package/distr/Common/HttpClient/HttpClient.js.map +1 -0
  196. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +1 -1
  197. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js.map +1 -0
  198. package/distr/Common/HttpClient/IHttpClient.js +1 -1
  199. package/distr/Common/HttpClient/IHttpClient.js.map +1 -0
  200. package/distr/Common/IndentString.js +1 -1
  201. package/distr/Common/IndentString.js.map +1 -0
  202. package/distr/Common/IntRangeUtils.js +1 -1
  203. package/distr/Common/IntRangeUtils.js.map +1 -0
  204. package/distr/Common/IterableUtils.js +1 -1
  205. package/distr/Common/IterableUtils.js.map +1 -0
  206. package/distr/Common/KCLangRuntimeUtils.js +1 -1
  207. package/distr/Common/KCLangRuntimeUtils.js.map +1 -0
  208. package/distr/Common/ModelPath/AbsoluteModelFieldPath.js +4 -2
  209. package/distr/Common/ModelPath/AbsoluteModelFieldPath.js.map +1 -0
  210. package/distr/Common/ModelPath/BuildIterationSequence.js +1 -1
  211. package/distr/Common/ModelPath/BuildIterationSequence.js.map +1 -0
  212. package/distr/Common/ModelPath/EachCurrentCollision.js +2 -3
  213. package/distr/Common/ModelPath/EachCurrentCollision.js.map +1 -0
  214. package/distr/Common/ModelPath/IEquatable.js +1 -1
  215. package/distr/Common/ModelPath/IEquatable.js.map +1 -0
  216. package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +1 -1
  217. package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js.map +1 -0
  218. package/distr/Common/ModelPath/Map/Map2.js +1 -1
  219. package/distr/Common/ModelPath/Map/Map2.js.map +1 -0
  220. package/distr/Common/ModelPath/Map/ModelPathMap.js +1 -1
  221. package/distr/Common/ModelPath/Map/ModelPathMap.js.map +1 -0
  222. package/distr/Common/ModelPath/ModelPath.js +1 -1
  223. package/distr/Common/ModelPath/ModelPath.js.map +1 -0
  224. package/distr/Common/ModelPath/ModelPathBuilder.js +1 -1
  225. package/distr/Common/ModelPath/ModelPathBuilder.js.map +1 -0
  226. package/distr/Common/ModelPath/ModelPathHelper.js +1 -1
  227. package/distr/Common/ModelPath/ModelPathHelper.js.map +1 -0
  228. package/distr/Common/ModelPath/PathMatcher.js +2 -3
  229. package/distr/Common/ModelPath/PathMatcher.js.map +1 -0
  230. package/distr/Common/ModelPath/PathSplitHelper.js +1 -1
  231. package/distr/Common/ModelPath/PathSplitHelper.js.map +1 -0
  232. package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +1 -1
  233. package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js.map +1 -0
  234. package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +1 -1
  235. package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js.map +1 -0
  236. package/distr/Common/ModelPath/Set/ModelPathSet.js +1 -1
  237. package/distr/Common/ModelPath/Set/ModelPathSet.js.map +1 -0
  238. package/distr/Common/ModelPath/Set/Set2.js +1 -1
  239. package/distr/Common/ModelPath/Set/Set2.js.map +1 -0
  240. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -1
  241. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js.map +1 -0
  242. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +1 -1
  243. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js.map +1 -0
  244. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -1
  245. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js.map +1 -0
  246. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -1
  247. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js.map +1 -0
  248. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -1
  249. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js.map +1 -0
  250. package/distr/Common/NidusClient/INidusClient.js +1 -1
  251. package/distr/Common/NidusClient/INidusClient.js.map +1 -0
  252. package/distr/Common/NidusClient/NidusClientContext.js +3 -3
  253. package/distr/Common/NidusClient/NidusClientContext.js.map +1 -0
  254. package/distr/Common/NidusClient/NidusClientImpl.js +3 -3
  255. package/distr/Common/NidusClient/NidusClientImpl.js.map +1 -0
  256. package/distr/Common/PathConstants.js +4 -7
  257. package/distr/Common/PathConstants.js.map +1 -0
  258. package/distr/Common/PicklistApiClient/IPicklistApiClient.js +1 -1
  259. package/distr/Common/PicklistApiClient/IPicklistApiClient.js.map +1 -0
  260. package/distr/Common/PicklistApiClient/PicklistApiClient.js +1 -1
  261. package/distr/Common/PicklistApiClient/PicklistApiClient.js.map +1 -0
  262. package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js +1 -1
  263. package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js.map +1 -0
  264. package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js +1 -1
  265. package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js.map +1 -0
  266. package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js +1 -1
  267. package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js.map +1 -0
  268. package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js +1 -1
  269. package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js.map +1 -0
  270. package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js +1 -1
  271. package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js.map +1 -0
  272. package/distr/Common/RngSchemeTypes/types.js +1 -1
  273. package/distr/Common/RngSchemeTypes/types.js.map +1 -0
  274. package/distr/Common/StringArrayKey.js +1 -1
  275. package/distr/Common/StringArrayKey.js.map +1 -0
  276. package/distr/Common/TextExtractor/TextExtractorTypes.js +1 -1
  277. package/distr/Common/TextExtractor/TextExtractorTypes.js.map +1 -0
  278. package/distr/Common/TypingUtils.js +1 -1
  279. package/distr/Common/TypingUtils.js.map +1 -0
  280. package/distr/Common/UUID.js +1 -1
  281. package/distr/Common/UUID.js.map +1 -0
  282. package/distr/Common/UseAsyncEffect.js +3 -3
  283. package/distr/Common/UseAsyncEffect.js.map +1 -0
  284. package/distr/Common/UseShowOnce.js +1 -1
  285. package/distr/Common/UseShowOnce.js.map +1 -0
  286. package/distr/Common/UseTypedSelector.js +2 -3
  287. package/distr/Common/UseTypedSelector.js.map +1 -0
  288. package/distr/Common/WellKnownDirectories.js +1 -1
  289. package/distr/Common/WellKnownDirectories.js.map +1 -0
  290. package/distr/Common/getRngSchemaFilename.js +1 -1
  291. package/distr/Common/getRngSchemaFilename.js.map +1 -0
  292. package/distr/Common/hashUtils.js +1 -1
  293. package/distr/Common/hashUtils.js.map +1 -0
  294. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +9 -4
  295. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js.map +1 -0
  296. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +6 -12
  297. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js.map +1 -0
  298. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -1
  299. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js.map +1 -0
  300. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +3 -3
  301. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js.map +1 -0
  302. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +4 -3
  303. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js.map +1 -0
  304. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -1
  305. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js.map +1 -0
  306. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +1 -1
  307. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js.map +1 -0
  308. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -1
  309. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js.map +1 -0
  310. package/distr/Tools/src/BuildTasks/FSTask.js +1 -1
  311. package/distr/Tools/src/BuildTasks/FSTask.js.map +1 -0
  312. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -3
  313. package/distr/Tools/src/BuildTasks/Form/CompileForm.js.map +1 -0
  314. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +3 -3
  315. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js.map +1 -0
  316. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -1
  317. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js.map +1 -0
  318. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +1 -1
  319. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js.map +1 -0
  320. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +3 -3
  321. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js.map +1 -0
  322. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -1
  323. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js.map +1 -0
  324. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +3 -3
  325. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js.map +1 -0
  326. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +4 -3
  327. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js.map +1 -0
  328. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +1 -1
  329. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js.map +1 -0
  330. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +4 -4
  331. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js.map +1 -0
  332. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +1 -1
  333. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js.map +1 -0
  334. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +1 -1
  335. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js.map +1 -0
  336. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +1 -1
  337. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js.map +1 -0
  338. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +1 -1
  339. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js.map +1 -0
  340. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +1 -1
  341. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js.map +1 -0
  342. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +5 -5
  343. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js.map +1 -0
  344. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +3 -3
  345. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js.map +1 -0
  346. package/distr/Tools/src/BuildTasks/ReadFormSource.js +1 -1
  347. package/distr/Tools/src/BuildTasks/ReadFormSource.js.map +1 -0
  348. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +2 -3
  349. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js.map +1 -0
  350. package/distr/Tools/src/BuildTasks/Version.js +3 -3
  351. package/distr/Tools/src/BuildTasks/Version.js.map +1 -0
  352. package/distr/Tools/src/BuildTasks/WriteFormMeta.js +1 -1
  353. package/distr/Tools/src/BuildTasks/WriteFormMeta.js.map +1 -0
  354. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +2 -3
  355. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js.map +1 -0
  356. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +2 -3
  357. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js.map +1 -0
  358. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +1 -1
  359. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js.map +1 -0
  360. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +3 -3
  361. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js.map +1 -0
  362. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +3 -5
  363. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js.map +1 -0
  364. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +4 -5
  365. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js.map +1 -0
  366. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +5 -6
  367. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js.map +1 -0
  368. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +4 -5
  369. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js.map +1 -0
  370. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +2 -3
  371. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js.map +1 -0
  372. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +4 -5
  373. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js.map +1 -0
  374. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +4 -5
  375. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js.map +1 -0
  376. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +2 -3
  377. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js.map +1 -0
  378. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +4 -5
  379. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js.map +1 -0
  380. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +4 -5
  381. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js.map +1 -0
  382. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +4 -4
  383. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js.map +1 -0
  384. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +1 -1
  385. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js.map +1 -0
  386. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +1 -1
  387. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js.map +1 -0
  388. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +1 -1
  389. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js.map +1 -0
  390. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +1 -1
  391. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js.map +1 -0
  392. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +1 -1
  393. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js.map +1 -0
  394. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +1 -1
  395. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js.map +1 -0
  396. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +1 -1
  397. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js.map +1 -0
  398. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +1 -1
  399. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js.map +1 -0
  400. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +3 -3
  401. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js.map +1 -0
  402. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +1 -1
  403. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js.map +1 -0
  404. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -1
  405. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js.map +1 -0
  406. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +1 -1
  407. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js.map +1 -0
  408. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -1
  409. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js.map +1 -0
  410. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +1 -1
  411. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js.map +1 -0
  412. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +2 -3
  413. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js.map +1 -0
  414. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +3 -5
  415. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js.map +1 -0
  416. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +1 -1
  417. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js.map +1 -0
  418. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +2 -3
  419. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js.map +1 -0
  420. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +1 -1
  421. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js.map +1 -0
  422. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +2 -3
  423. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js.map +1 -0
  424. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +2 -2
  425. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js.map +1 -0
  426. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +4 -5
  427. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js.map +1 -0
  428. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/fetchfunctions/{gfv}.fetchfunctions.js +1 -1
  429. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/fetchfunctions/{gfv}.fetchfunctions.js.map +1 -0
  430. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +2 -3
  431. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js.map +1 -0
  432. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +2 -3
  433. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js.map +1 -0
  434. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +2 -3
  435. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js.map +1 -0
  436. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +3 -3
  437. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js.map +1 -0
  438. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +2 -3
  439. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js.map +1 -0
  440. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +1 -1
  441. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js.map +1 -0
  442. package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js +2 -3
  443. package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js.map +1 -0
  444. package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js +3 -3
  445. package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js.map +1 -0
  446. package/distr/Tools/src/CLICommands/SugarExtractor/ExtractTextsFromSugarController.js +2 -3
  447. package/distr/Tools/src/CLICommands/SugarExtractor/ExtractTextsFromSugarController.js.map +1 -0
  448. package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js +1 -1
  449. package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js.map +1 -0
  450. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +3 -3
  451. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js.map +1 -0
  452. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +2 -3
  453. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js.map +1 -0
  454. package/distr/Tools/src/CandyCLI.js +1 -1
  455. package/distr/Tools/src/CandyCLI.js.map +1 -0
  456. package/distr/Tools/src/CheckNodeJsVersion.js +2 -3
  457. package/distr/Tools/src/CheckNodeJsVersion.js.map +1 -0
  458. package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +1 -1
  459. package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js.map +1 -0
  460. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +3 -3
  461. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js.map +1 -0
  462. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -1
  463. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js.map +1 -0
  464. package/distr/Tools/src/Commons/ErrorUntyped.js +1 -1
  465. package/distr/Tools/src/Commons/ErrorUntyped.js.map +1 -0
  466. package/distr/Tools/src/Commons/EventObject.js +1 -1
  467. package/distr/Tools/src/Commons/EventObject.js.map +1 -0
  468. package/distr/Tools/src/Commons/ExecUtils.js +1 -1
  469. package/distr/Tools/src/Commons/ExecUtils.js.map +1 -0
  470. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -1
  471. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js.map +1 -0
  472. package/distr/Tools/src/Commons/FormGlobsUtils.js +1 -1
  473. package/distr/Tools/src/Commons/FormGlobsUtils.js.map +1 -0
  474. package/distr/Tools/src/Commons/FormLocationInfo.js +1 -1
  475. package/distr/Tools/src/Commons/FormLocationInfo.js.map +1 -0
  476. package/distr/Tools/src/Commons/FsUtils.js +5 -7
  477. package/distr/Tools/src/Commons/FsUtils.js.map +1 -0
  478. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -1
  479. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js.map +1 -0
  480. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +1 -1
  481. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js.map +1 -0
  482. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -1
  483. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js.map +1 -0
  484. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -1
  485. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js.map +1 -0
  486. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +1 -1
  487. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js.map +1 -0
  488. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -1
  489. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js.map +1 -0
  490. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -1
  491. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js.map +1 -0
  492. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +1 -1
  493. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js.map +1 -0
  494. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -1
  495. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js.map +1 -0
  496. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +2 -3
  497. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js.map +1 -0
  498. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -1
  499. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js.map +1 -0
  500. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -1
  501. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js.map +1 -0
  502. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -1
  503. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js.map +1 -0
  504. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -1
  505. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js.map +1 -0
  506. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +1 -1
  507. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js.map +1 -0
  508. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -1
  509. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js.map +1 -0
  510. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -1
  511. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js.map +1 -0
  512. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +3 -3
  513. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js.map +1 -0
  514. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +2 -3
  515. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js.map +1 -0
  516. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +6 -6
  517. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js.map +1 -0
  518. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +1 -1
  519. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js.map +1 -0
  520. package/distr/Tools/src/Commons/Locks/Lock.js +1 -1
  521. package/distr/Tools/src/Commons/Locks/Lock.js.map +1 -0
  522. package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -1
  523. package/distr/Tools/src/Commons/Locks/LockHandle.js.map +1 -0
  524. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +1 -1
  525. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js.map +1 -0
  526. package/distr/Tools/src/Commons/Logging/ELKLogger.js +2 -3
  527. package/distr/Tools/src/Commons/Logging/ELKLogger.js.map +1 -0
  528. package/distr/Tools/src/Commons/Logging/ILogger.js +1 -1
  529. package/distr/Tools/src/Commons/Logging/ILogger.js.map +1 -0
  530. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +1 -1
  531. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js.map +1 -0
  532. package/distr/Tools/src/Commons/Logging/Logger.js +1 -1
  533. package/distr/Tools/src/Commons/Logging/Logger.js.map +1 -0
  534. package/distr/Tools/src/Commons/Logging/StaticLogger.js +1 -1
  535. package/distr/Tools/src/Commons/Logging/StaticLogger.js.map +1 -0
  536. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -1
  537. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js.map +1 -0
  538. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +3 -3
  539. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js.map +1 -0
  540. package/distr/Tools/src/Commons/PathPattern.js +1 -1
  541. package/distr/Tools/src/Commons/PathPattern.js.map +1 -0
  542. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -1
  543. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js.map +1 -0
  544. package/distr/Tools/src/Commons/TasksCore/BuildTask.js +1 -1
  545. package/distr/Tools/src/Commons/TasksCore/BuildTask.js.map +1 -0
  546. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +5 -5
  547. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js.map +1 -0
  548. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +3 -3
  549. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js.map +1 -0
  550. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +1 -1
  551. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js.map +1 -0
  552. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +1 -1
  553. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js.map +1 -0
  554. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +1 -1
  555. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js.map +1 -0
  556. package/distr/Tools/src/Commons/TasksCore/FixedDirectoryEntriesProducer.js +1 -1
  557. package/distr/Tools/src/Commons/TasksCore/FixedDirectoryEntriesProducer.js.map +1 -0
  558. package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -1
  559. package/distr/Tools/src/Commons/TasksCore/Observe.js.map +1 -0
  560. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +1 -1
  561. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js.map +1 -0
  562. package/distr/Tools/src/Commons/TimingUtils.js +1 -1
  563. package/distr/Tools/src/Commons/TimingUtils.js.map +1 -0
  564. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +3 -3
  565. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js.map +1 -0
  566. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +2 -2
  567. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js.map +1 -0
  568. package/distr/Tools/src/GenerateReadMe.js +1 -1
  569. package/distr/Tools/src/GenerateReadMe.js.map +1 -0
  570. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  571. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.LICENSE.txt +5 -3
  572. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  573. package/distr/Tools/src/LocalServerFrontEndDist/index.js.LICENSE.txt +5 -3
  574. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  575. package/distr/Tools/src/Options/CandyToolOptions.js +2 -3
  576. package/distr/Tools/src/Options/CandyToolOptions.js.map +1 -0
  577. package/distr/Tools/src/ReadFarmConfig.js +1 -1
  578. package/distr/Tools/src/ReadFarmConfig.js.map +1 -0
  579. package/distr/Tools/src/SelfUpdate.js +3 -3
  580. package/distr/Tools/src/SelfUpdate.js.map +1 -0
  581. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +681 -686
  582. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  583. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +581 -866
  584. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.LICENSE.txt +1 -1
  585. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  586. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +1 -1
  587. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js.map +1 -0
  588. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1 -1
  589. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js.map +1 -0
  590. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +1 -1
  591. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js.map +1 -0
  592. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +1 -1
  593. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js.map +1 -0
  594. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1 -1
  595. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js.map +1 -0
  596. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +1 -1
  597. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js.map +1 -0
  598. package/package.json +24 -24
  599. package/CHANGELOG.md +0 -1659
@@ -1,838 +1,547 @@
1
1
  "use strict";
2
2
 
3
- /*! For license information please see client.min.js.LICENSE.txt */
4
3
  !function () {
5
4
  "use strict";
6
5
 
7
- var t = {};
8
- function e(t, e, r) {
9
- return e in t ? Object.defineProperty(t, e, {
10
- value: r,
6
+ var e = {};
7
+ function t(e) {
8
+ return t = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
9
+ return typeof e;
10
+ } : function (e) {
11
+ return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
12
+ }, t(e);
13
+ }
14
+ function r(e) {
15
+ var r = function (e, r) {
16
+ if ("object" != t(e) || !e) return e;
17
+ var n = e[Symbol.toPrimitive];
18
+ if (void 0 !== n) {
19
+ var o = n.call(e, "string");
20
+ if ("object" != t(o)) return o;
21
+ throw new TypeError("@@toPrimitive must return a primitive value.");
22
+ }
23
+ return String(e);
24
+ }(e);
25
+ return "symbol" == t(r) ? r : r + "";
26
+ }
27
+ function n(e, t, n) {
28
+ return (t = r(t)) in e ? Object.defineProperty(e, t, {
29
+ value: n,
11
30
  enumerable: !0,
12
31
  configurable: !0,
13
32
  writable: !0
14
- }) : t[e] = r, t;
33
+ }) : e[t] = n, e;
15
34
  }
16
- function r(t, e) {
17
- (null == e || e > t.length) && (e = t.length);
18
- for (var r = 0, n = new Array(e); r < e; r++) n[r] = t[r];
35
+ function o(e, t) {
36
+ (null == t || t > e.length) && (t = e.length);
37
+ for (var r = 0, n = Array(t); r < t; r++) n[r] = e[r];
19
38
  return n;
20
39
  }
21
- t.g = function () {
40
+ e.g = function () {
22
41
  if ("object" == typeof globalThis) return globalThis;
23
42
  try {
24
43
  return this || new Function("return this")();
25
- } catch (t) {
44
+ } catch (e) {
26
45
  if ("object" == typeof window) return window;
27
46
  }
28
47
  }();
29
- var n = "undefined" != typeof globalThis && globalThis || "undefined" != typeof self && self || void 0 !== n && n,
30
- o = ("URLSearchParams" in n),
31
- i = "Symbol" in n && "iterator" in Symbol,
32
- a = "FileReader" in n && "Blob" in n && function () {
48
+ var i = "undefined" != typeof globalThis && globalThis || "undefined" != typeof self && self || void 0 !== e.g && e.g || {},
49
+ a = ("URLSearchParams" in i),
50
+ s = "Symbol" in i && "iterator" in Symbol,
51
+ u = "FileReader" in i && "Blob" in i && function () {
33
52
  try {
34
53
  return new Blob(), !0;
35
- } catch (t) {
54
+ } catch (e) {
36
55
  return !1;
37
56
  }
38
57
  }(),
39
- u = ("FormData" in n),
40
- s = ("ArrayBuffer" in n);
41
- if (s) var c = ["[object Int8Array]", "[object Uint8Array]", "[object Uint8ClampedArray]", "[object Int16Array]", "[object Uint16Array]", "[object Int32Array]", "[object Uint32Array]", "[object Float32Array]", "[object Float64Array]"],
42
- l = ArrayBuffer.isView || function (t) {
43
- return t && c.indexOf(Object.prototype.toString.call(t)) > -1;
58
+ c = ("FormData" in i),
59
+ l = ("ArrayBuffer" in i);
60
+ if (l) var f = ["[object Int8Array]", "[object Uint8Array]", "[object Uint8ClampedArray]", "[object Int16Array]", "[object Uint16Array]", "[object Int32Array]", "[object Uint32Array]", "[object Float32Array]", "[object Float64Array]"],
61
+ h = ArrayBuffer.isView || function (e) {
62
+ return e && f.indexOf(Object.prototype.toString.call(e)) > -1;
44
63
  };
45
- function f(t) {
46
- if ("string" != typeof t && (t = String(t)), /[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(t) || "" === t) throw new TypeError('Invalid character in header field name: "' + t + '"');
47
- return t.toLowerCase();
64
+ function d(e) {
65
+ if ("string" != typeof e && (e = String(e)), /[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e) || "" === e) throw new TypeError('Invalid character in header field name: "' + e + '"');
66
+ return e.toLowerCase();
48
67
  }
49
- function h(t) {
50
- return "string" != typeof t && (t = String(t)), t;
68
+ function p(e) {
69
+ return "string" != typeof e && (e = String(e)), e;
51
70
  }
52
- function d(t) {
53
- var e = {
71
+ function y(e) {
72
+ var t = {
54
73
  next: function () {
55
- var e = t.shift();
74
+ var t = e.shift();
56
75
  return {
57
- done: void 0 === e,
58
- value: e
76
+ done: void 0 === t,
77
+ value: t
59
78
  };
60
79
  }
61
80
  };
62
- return i && (e[Symbol.iterator] = function () {
63
- return e;
64
- }), e;
81
+ return s && (t[Symbol.iterator] = function () {
82
+ return t;
83
+ }), t;
65
84
  }
66
- function p(t) {
67
- this.map = {}, t instanceof p ? t.forEach(function (t, e) {
68
- this.append(e, t);
69
- }, this) : Array.isArray(t) ? t.forEach(function (t) {
70
- this.append(t[0], t[1]);
71
- }, this) : t && Object.getOwnPropertyNames(t).forEach(function (e) {
72
- this.append(e, t[e]);
85
+ function m(e) {
86
+ this.map = {}, e instanceof m ? e.forEach(function (e, t) {
87
+ this.append(t, e);
88
+ }, this) : Array.isArray(e) ? e.forEach(function (e) {
89
+ if (2 != e.length) throw new TypeError("Headers constructor: expected name/value pair to be length 2, found" + e.length);
90
+ this.append(e[0], e[1]);
91
+ }, this) : e && Object.getOwnPropertyNames(e).forEach(function (t) {
92
+ this.append(t, e[t]);
73
93
  }, this);
74
94
  }
75
- function y(t) {
76
- if (t.bodyUsed) return Promise.reject(new TypeError("Already read"));
77
- t.bodyUsed = !0;
95
+ function v(e) {
96
+ if (!e._noBody) return e.bodyUsed ? Promise.reject(new TypeError("Already read")) : void (e.bodyUsed = !0);
78
97
  }
79
- function v(t) {
80
- return new Promise(function (e, r) {
81
- t.onload = function () {
82
- e(t.result);
83
- }, t.onerror = function () {
84
- r(t.error);
98
+ function b(e) {
99
+ return new Promise(function (t, r) {
100
+ e.onload = function () {
101
+ t(e.result);
102
+ }, e.onerror = function () {
103
+ r(e.error);
85
104
  };
86
105
  });
87
106
  }
88
- function m(t) {
89
- var e = new FileReader(),
90
- r = v(e);
91
- return e.readAsArrayBuffer(t), r;
107
+ function w(e) {
108
+ var t = new FileReader(),
109
+ r = b(t);
110
+ return t.readAsArrayBuffer(e), r;
92
111
  }
93
- function b(t) {
94
- if (t.slice) return t.slice(0);
95
- var e = new Uint8Array(t.byteLength);
96
- return e.set(new Uint8Array(t)), e.buffer;
112
+ function g(e) {
113
+ if (e.slice) return e.slice(0);
114
+ var t = new Uint8Array(e.byteLength);
115
+ return t.set(new Uint8Array(e)), t.buffer;
97
116
  }
98
- function w() {
99
- return this.bodyUsed = !1, this._initBody = function (t) {
100
- var e;
101
- this.bodyUsed = this.bodyUsed, this._bodyInit = t, t ? "string" == typeof t ? this._bodyText = t : a && Blob.prototype.isPrototypeOf(t) ? this._bodyBlob = t : u && FormData.prototype.isPrototypeOf(t) ? this._bodyFormData = t : o && URLSearchParams.prototype.isPrototypeOf(t) ? this._bodyText = t.toString() : s && a && (e = t) && DataView.prototype.isPrototypeOf(e) ? (this._bodyArrayBuffer = b(t.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : s && (ArrayBuffer.prototype.isPrototypeOf(t) || l(t)) ? this._bodyArrayBuffer = b(t) : this._bodyText = t = Object.prototype.toString.call(t) : this._bodyText = "", this.headers.get("content-type") || ("string" == typeof t ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : o && URLSearchParams.prototype.isPrototypeOf(t) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
102
- }, a && (this.blob = function () {
103
- var t = y(this);
104
- if (t) return t;
117
+ function E() {
118
+ return this.bodyUsed = !1, this._initBody = function (e) {
119
+ var t;
120
+ this.bodyUsed = this.bodyUsed, this._bodyInit = e, e ? "string" == typeof e ? this._bodyText = e : u && Blob.prototype.isPrototypeOf(e) ? this._bodyBlob = e : c && FormData.prototype.isPrototypeOf(e) ? this._bodyFormData = e : a && URLSearchParams.prototype.isPrototypeOf(e) ? this._bodyText = e.toString() : l && u && (t = e) && DataView.prototype.isPrototypeOf(t) ? (this._bodyArrayBuffer = g(e.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : l && (ArrayBuffer.prototype.isPrototypeOf(e) || h(e)) ? this._bodyArrayBuffer = g(e) : this._bodyText = e = Object.prototype.toString.call(e) : (this._noBody = !0, this._bodyText = ""), this.headers.get("content-type") || ("string" == typeof e ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : a && URLSearchParams.prototype.isPrototypeOf(e) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
121
+ }, u && (this.blob = function () {
122
+ var e = v(this);
123
+ if (e) return e;
105
124
  if (this._bodyBlob) return Promise.resolve(this._bodyBlob);
106
125
  if (this._bodyArrayBuffer) return Promise.resolve(new Blob([this._bodyArrayBuffer]));
107
126
  if (this._bodyFormData) throw new Error("could not read FormData body as blob");
108
127
  return Promise.resolve(new Blob([this._bodyText]));
109
- }, this.arrayBuffer = function () {
110
- return this._bodyArrayBuffer ? y(this) || (ArrayBuffer.isView(this._bodyArrayBuffer) ? Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset, this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength)) : Promise.resolve(this._bodyArrayBuffer)) : this.blob().then(m);
111
- }), this.text = function () {
112
- var t,
113
- e,
128
+ }), this.arrayBuffer = function () {
129
+ if (this._bodyArrayBuffer) return v(this) || (ArrayBuffer.isView(this._bodyArrayBuffer) ? Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset, this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength)) : Promise.resolve(this._bodyArrayBuffer));
130
+ if (u) return this.blob().then(w);
131
+ throw new Error("could not read as ArrayBuffer");
132
+ }, this.text = function () {
133
+ var e,
134
+ t,
114
135
  r,
115
- n = y(this);
116
- if (n) return n;
117
- if (this._bodyBlob) return t = this._bodyBlob, r = v(e = new FileReader()), e.readAsText(t), r;
118
- if (this._bodyArrayBuffer) return Promise.resolve(function (t) {
119
- for (var e = new Uint8Array(t), r = new Array(e.length), n = 0; n < e.length; n++) r[n] = String.fromCharCode(e[n]);
136
+ n,
137
+ o,
138
+ i = v(this);
139
+ if (i) return i;
140
+ if (this._bodyBlob) return e = this._bodyBlob, r = b(t = new FileReader()), o = (n = /charset=([A-Za-z0-9_-]+)/.exec(e.type)) ? n[1] : "utf-8", t.readAsText(e, o), r;
141
+ if (this._bodyArrayBuffer) return Promise.resolve(function (e) {
142
+ for (var t = new Uint8Array(e), r = new Array(t.length), n = 0; n < t.length; n++) r[n] = String.fromCharCode(t[n]);
120
143
  return r.join("");
121
144
  }(this._bodyArrayBuffer));
122
145
  if (this._bodyFormData) throw new Error("could not read FormData body as text");
123
146
  return Promise.resolve(this._bodyText);
124
- }, u && (this.formData = function () {
125
- return this.text().then(O);
147
+ }, c && (this.formData = function () {
148
+ return this.text().then(k);
126
149
  }), this.json = function () {
127
150
  return this.text().then(JSON.parse);
128
151
  }, this;
129
152
  }
130
- p.prototype.append = function (t, e) {
131
- t = f(t), e = h(e);
132
- var r = this.map[t];
133
- this.map[t] = r ? r + ", " + e : e;
134
- }, p.prototype.delete = function (t) {
135
- delete this.map[f(t)];
136
- }, p.prototype.get = function (t) {
137
- return t = f(t), this.has(t) ? this.map[t] : null;
138
- }, p.prototype.has = function (t) {
139
- return this.map.hasOwnProperty(f(t));
140
- }, p.prototype.set = function (t, e) {
141
- this.map[f(t)] = h(e);
142
- }, p.prototype.forEach = function (t, e) {
143
- for (var r in this.map) this.map.hasOwnProperty(r) && t.call(e, this.map[r], r, this);
144
- }, p.prototype.keys = function () {
145
- var t = [];
146
- return this.forEach(function (e, r) {
147
- t.push(r);
148
- }), d(t);
149
- }, p.prototype.values = function () {
150
- var t = [];
151
- return this.forEach(function (e) {
152
- t.push(e);
153
- }), d(t);
154
- }, p.prototype.entries = function () {
155
- var t = [];
156
- return this.forEach(function (e, r) {
157
- t.push([r, e]);
158
- }), d(t);
159
- }, i && (p.prototype[Symbol.iterator] = p.prototype.entries);
160
- var g = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
161
- function E(t, e) {
162
- if (!(this instanceof E)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
153
+ m.prototype.append = function (e, t) {
154
+ e = d(e), t = p(t);
155
+ var r = this.map[e];
156
+ this.map[e] = r ? r + ", " + t : t;
157
+ }, m.prototype.delete = function (e) {
158
+ delete this.map[d(e)];
159
+ }, m.prototype.get = function (e) {
160
+ return e = d(e), this.has(e) ? this.map[e] : null;
161
+ }, m.prototype.has = function (e) {
162
+ return this.map.hasOwnProperty(d(e));
163
+ }, m.prototype.set = function (e, t) {
164
+ this.map[d(e)] = p(t);
165
+ }, m.prototype.forEach = function (e, t) {
166
+ for (var r in this.map) this.map.hasOwnProperty(r) && e.call(t, this.map[r], r, this);
167
+ }, m.prototype.keys = function () {
168
+ var e = [];
169
+ return this.forEach(function (t, r) {
170
+ e.push(r);
171
+ }), y(e);
172
+ }, m.prototype.values = function () {
173
+ var e = [];
174
+ return this.forEach(function (t) {
175
+ e.push(t);
176
+ }), y(e);
177
+ }, m.prototype.entries = function () {
178
+ var e = [];
179
+ return this.forEach(function (t, r) {
180
+ e.push([r, t]);
181
+ }), y(e);
182
+ }, s && (m.prototype[Symbol.iterator] = m.prototype.entries);
183
+ var O = ["CONNECT", "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT", "TRACE"];
184
+ function A(e, t) {
185
+ if (!(this instanceof A)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
163
186
  var r,
164
187
  n,
165
- o = (e = e || {}).body;
166
- if (t instanceof E) {
167
- if (t.bodyUsed) throw new TypeError("Already read");
168
- this.url = t.url, this.credentials = t.credentials, e.headers || (this.headers = new p(t.headers)), this.method = t.method, this.mode = t.mode, this.signal = t.signal, o || null == t._bodyInit || (o = t._bodyInit, t.bodyUsed = !0);
169
- } else this.url = String(t);
170
- if (this.credentials = e.credentials || this.credentials || "same-origin", !e.headers && this.headers || (this.headers = new p(e.headers)), this.method = (n = (r = e.method || this.method || "GET").toUpperCase(), g.indexOf(n) > -1 ? n : r), this.mode = e.mode || this.mode || null, this.signal = e.signal || this.signal, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
171
- if (this._initBody(o), !("GET" !== this.method && "HEAD" !== this.method || "no-store" !== e.cache && "no-cache" !== e.cache)) {
172
- var i = /([?&])_=[^&]*/;
173
- i.test(this.url) ? this.url = this.url.replace(i, "$1_=" + new Date().getTime()) : this.url += (/\?/.test(this.url) ? "&" : "?") + "_=" + new Date().getTime();
188
+ o = (t = t || {}).body;
189
+ if (e instanceof A) {
190
+ if (e.bodyUsed) throw new TypeError("Already read");
191
+ this.url = e.url, this.credentials = e.credentials, t.headers || (this.headers = new m(e.headers)), this.method = e.method, this.mode = e.mode, this.signal = e.signal, o || null == e._bodyInit || (o = e._bodyInit, e.bodyUsed = !0);
192
+ } else this.url = String(e);
193
+ if (this.credentials = t.credentials || this.credentials || "same-origin", !t.headers && this.headers || (this.headers = new m(t.headers)), this.method = (n = (r = t.method || this.method || "GET").toUpperCase(), O.indexOf(n) > -1 ? n : r), this.mode = t.mode || this.mode || null, this.signal = t.signal || this.signal || function () {
194
+ if ("AbortController" in i) return new AbortController().signal;
195
+ }(), this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
196
+ if (this._initBody(o), !("GET" !== this.method && "HEAD" !== this.method || "no-store" !== t.cache && "no-cache" !== t.cache)) {
197
+ var a = /([?&])_=[^&]*/;
198
+ a.test(this.url) ? this.url = this.url.replace(a, "$1_=" + new Date().getTime()) : this.url += (/\?/.test(this.url) ? "&" : "?") + "_=" + new Date().getTime();
174
199
  }
175
200
  }
176
- function O(t) {
177
- var e = new FormData();
178
- return t.trim().split("&").forEach(function (t) {
179
- if (t) {
180
- var r = t.split("="),
201
+ function k(e) {
202
+ var t = new FormData();
203
+ return e.trim().split("&").forEach(function (e) {
204
+ if (e) {
205
+ var r = e.split("="),
181
206
  n = r.shift().replace(/\+/g, " "),
182
207
  o = r.join("=").replace(/\+/g, " ");
183
- e.append(decodeURIComponent(n), decodeURIComponent(o));
208
+ t.append(decodeURIComponent(n), decodeURIComponent(o));
184
209
  }
185
- }), e;
210
+ }), t;
186
211
  }
187
- function k(t, e) {
188
- if (!(this instanceof k)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
189
- e || (e = {}), this.type = "default", this.status = void 0 === e.status ? 200 : e.status, this.ok = this.status >= 200 && this.status < 300, this.statusText = void 0 === e.statusText ? "" : "" + e.statusText, this.headers = new p(e.headers), this.url = e.url || "", this._initBody(t);
212
+ function j(e, t) {
213
+ if (!(this instanceof j)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
214
+ if (t || (t = {}), this.type = "default", this.status = void 0 === t.status ? 200 : t.status, this.status < 200 || this.status > 599) throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].");
215
+ this.ok = this.status >= 200 && this.status < 300, this.statusText = void 0 === t.statusText ? "" : "" + t.statusText, this.headers = new m(t.headers), this.url = t.url || "", this._initBody(e);
190
216
  }
191
- E.prototype.clone = function () {
192
- return new E(this, {
217
+ A.prototype.clone = function () {
218
+ return new A(this, {
193
219
  body: this._bodyInit
194
220
  });
195
- }, w.call(E.prototype), w.call(k.prototype), k.prototype.clone = function () {
196
- return new k(this._bodyInit, {
221
+ }, E.call(A.prototype), E.call(j.prototype), j.prototype.clone = function () {
222
+ return new j(this._bodyInit, {
197
223
  status: this.status,
198
224
  statusText: this.statusText,
199
- headers: new p(this.headers),
225
+ headers: new m(this.headers),
200
226
  url: this.url
201
227
  });
202
- }, k.error = function () {
203
- var t = new k(null, {
204
- status: 0,
228
+ }, j.error = function () {
229
+ var e = new j(null, {
230
+ status: 200,
205
231
  statusText: ""
206
232
  });
207
- return t.type = "error", t;
233
+ return e.ok = !1, e.status = 0, e.type = "error", e;
208
234
  };
209
- var j = [301, 302, 303, 307, 308];
210
- k.redirect = function (t, e) {
211
- if (-1 === j.indexOf(e)) throw new RangeError("Invalid status code");
212
- return new k(null, {
213
- status: e,
235
+ var T = [301, 302, 303, 307, 308];
236
+ j.redirect = function (e, t) {
237
+ if (-1 === T.indexOf(t)) throw new RangeError("Invalid status code");
238
+ return new j(null, {
239
+ status: t,
214
240
  headers: {
215
- location: t
241
+ location: e
216
242
  }
217
243
  });
218
244
  };
219
- var A = n.DOMException;
245
+ var S = i.DOMException;
220
246
  try {
221
- new A();
222
- } catch (t) {
223
- (A = function (t, e) {
224
- this.message = t, this.name = e;
225
- var r = Error(t);
247
+ new S();
248
+ } catch (e) {
249
+ (S = function (e, t) {
250
+ this.message = e, this.name = t;
251
+ var r = Error(e);
226
252
  this.stack = r.stack;
227
- }).prototype = Object.create(Error.prototype), A.prototype.constructor = A;
253
+ }).prototype = Object.create(Error.prototype), S.prototype.constructor = S;
228
254
  }
229
- function _(t, e) {
230
- return new Promise(function (r, o) {
231
- var i = new E(t, e);
232
- if (i.signal && i.signal.aborted) return o(new A("Aborted", "AbortError"));
233
- var u = new XMLHttpRequest();
234
- function c() {
235
- u.abort();
255
+ function P(e, t) {
256
+ return new Promise(function (r, n) {
257
+ var o = new A(e, t);
258
+ if (o.signal && o.signal.aborted) return n(new S("Aborted", "AbortError"));
259
+ var a = new XMLHttpRequest();
260
+ function s() {
261
+ a.abort();
236
262
  }
237
- u.onload = function () {
238
- var t,
239
- e,
263
+ if (a.onload = function () {
264
+ var e,
265
+ t,
240
266
  n = {
241
- status: u.status,
242
- statusText: u.statusText,
243
- headers: (t = u.getAllResponseHeaders() || "", e = new p(), t.replace(/\r?\n[\t ]+/g, " ").split("\r").map(function (t) {
244
- return 0 === t.indexOf("\n") ? t.substr(1, t.length) : t;
245
- }).forEach(function (t) {
246
- var r = t.split(":"),
267
+ statusText: a.statusText,
268
+ headers: (e = a.getAllResponseHeaders() || "", t = new m(), e.replace(/\r?\n[\t ]+/g, " ").split("\r").map(function (e) {
269
+ return 0 === e.indexOf("\n") ? e.substr(1, e.length) : e;
270
+ }).forEach(function (e) {
271
+ var r = e.split(":"),
247
272
  n = r.shift().trim();
248
273
  if (n) {
249
274
  var o = r.join(":").trim();
250
- e.append(n, o);
275
+ try {
276
+ t.append(n, o);
277
+ } catch (e) {
278
+ console.warn("Response " + e.message);
279
+ }
251
280
  }
252
- }), e)
281
+ }), t)
253
282
  };
254
- n.url = "responseURL" in u ? u.responseURL : n.headers.get("X-Request-URL");
255
- var o = "response" in u ? u.response : u.responseText;
283
+ 0 === o.url.indexOf("file://") && (a.status < 200 || a.status > 599) ? n.status = 200 : n.status = a.status, n.url = "responseURL" in a ? a.responseURL : n.headers.get("X-Request-URL");
284
+ var i = "response" in a ? a.response : a.responseText;
256
285
  setTimeout(function () {
257
- r(new k(o, n));
286
+ r(new j(i, n));
258
287
  }, 0);
259
- }, u.onerror = function () {
288
+ }, a.onerror = function () {
260
289
  setTimeout(function () {
261
- o(new TypeError("Network request failed"));
290
+ n(new TypeError("Network request failed"));
262
291
  }, 0);
263
- }, u.ontimeout = function () {
292
+ }, a.ontimeout = function () {
264
293
  setTimeout(function () {
265
- o(new TypeError("Network request failed"));
294
+ n(new TypeError("Network request timed out"));
266
295
  }, 0);
267
- }, u.onabort = function () {
296
+ }, a.onabort = function () {
268
297
  setTimeout(function () {
269
- o(new A("Aborted", "AbortError"));
298
+ n(new S("Aborted", "AbortError"));
270
299
  }, 0);
271
- }, u.open(i.method, function (t) {
300
+ }, a.open(o.method, function (e) {
272
301
  try {
273
- return "" === t && n.location.href ? n.location.href : t;
274
- } catch (e) {
275
- return t;
302
+ return "" === e && i.location.href ? i.location.href : e;
303
+ } catch (t) {
304
+ return e;
276
305
  }
277
- }(i.url), !0), "include" === i.credentials ? u.withCredentials = !0 : "omit" === i.credentials && (u.withCredentials = !1), "responseType" in u && (a ? u.responseType = "blob" : s && i.headers.get("Content-Type") && -1 !== i.headers.get("Content-Type").indexOf("application/octet-stream") && (u.responseType = "arraybuffer")), !e || "object" != typeof e.headers || e.headers instanceof p ? i.headers.forEach(function (t, e) {
278
- u.setRequestHeader(e, t);
279
- }) : Object.getOwnPropertyNames(e.headers).forEach(function (t) {
280
- u.setRequestHeader(t, h(e.headers[t]));
281
- }), i.signal && (i.signal.addEventListener("abort", c), u.onreadystatechange = function () {
282
- 4 === u.readyState && i.signal.removeEventListener("abort", c);
283
- }), u.send(void 0 === i._bodyInit ? null : i._bodyInit);
306
+ }(o.url), !0), "include" === o.credentials ? a.withCredentials = !0 : "omit" === o.credentials && (a.withCredentials = !1), "responseType" in a && (u ? a.responseType = "blob" : l && (a.responseType = "arraybuffer")), t && "object" == typeof t.headers && !(t.headers instanceof m || i.Headers && t.headers instanceof i.Headers)) {
307
+ var c = [];
308
+ Object.getOwnPropertyNames(t.headers).forEach(function (e) {
309
+ c.push(d(e)), a.setRequestHeader(e, p(t.headers[e]));
310
+ }), o.headers.forEach(function (e, t) {
311
+ -1 === c.indexOf(t) && a.setRequestHeader(t, e);
312
+ });
313
+ } else o.headers.forEach(function (e, t) {
314
+ a.setRequestHeader(t, e);
315
+ });
316
+ o.signal && (o.signal.addEventListener("abort", s), a.onreadystatechange = function () {
317
+ 4 === a.readyState && o.signal.removeEventListener("abort", s);
318
+ }), a.send(void 0 === o._bodyInit ? null : o._bodyInit);
284
319
  });
285
320
  }
286
- function S(t, e) {
287
- if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function");
321
+ function _(e, t) {
322
+ if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
288
323
  }
289
- function P(t, e) {
290
- for (var r = 0; r < e.length; r++) {
291
- var n = e[r];
292
- n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);
324
+ function B(e, t) {
325
+ for (var n = 0; n < t.length; n++) {
326
+ var o = t[n];
327
+ o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, r(o.key), o);
293
328
  }
294
329
  }
295
- function T(t, e, r) {
296
- return e && P(t.prototype, e), r && P(t, r), Object.defineProperty(t, "prototype", {
330
+ function C(e, t, r) {
331
+ return t && B(e.prototype, t), r && B(e, r), Object.defineProperty(e, "prototype", {
297
332
  writable: !1
298
- }), t;
333
+ }), e;
299
334
  }
300
- _.polyfill = !0, n.fetch || (n.fetch = _, n.Headers = p, n.Request = E, n.Response = k);
301
- var x = function () {
302
- function t() {
303
- S(this, t);
304
- }
305
- return T(t, null, [{
335
+ P.polyfill = !0, i.fetch || (i.fetch = P, i.Headers = m, i.Request = A, i.Response = j);
336
+ var R = function () {
337
+ return C(function e() {
338
+ _(this, e);
339
+ }, null, [{
306
340
  key: "script",
307
- value: function (t, e) {
341
+ value: function (e, t) {
308
342
  var r = !1,
309
343
  n = document.getElementsByTagName("head")[0] || document.documentElement,
310
344
  o = document.createElement("script");
311
345
  function i() {
312
- r || o.readyState && "loaded" !== o.readyState && "complete" !== o.readyState || (r = !0, e());
346
+ r || o.readyState && "loaded" !== o.readyState && "complete" !== o.readyState || (r = !0, t());
313
347
  }
314
348
  o.onload = i, o.onreadystatechange = i, o.onerror = function () {
315
- o.parentNode && o.parentNode.removeChild(o), e(new Error("Error while loading script."));
316
- }, o.src = t, o.setAttribute("crossorigin", "use-credentials"), n.appendChild(o);
349
+ o.parentNode && o.parentNode.removeChild(o), t(new Error("Error while loading script."));
350
+ }, o.src = e, o.setAttribute("crossorigin", "use-credentials"), n.appendChild(o);
317
351
  }
318
352
  }, {
319
353
  key: "styleSheet",
320
- value: function (t, e, r) {
354
+ value: function (e, t, r) {
321
355
  var n,
322
356
  o = null !== (n = document.getElementsByTagName("head")[0]) && void 0 !== n ? n : document.documentElement,
323
357
  i = document.createElement("link");
324
358
  i.setAttribute("rel", "stylesheet"), i.setAttribute("type", "text/css"), i.addEventListener("load", function () {
325
359
  return r(void 0);
326
360
  }), i.addEventListener("error", function () {
327
- r(e ? void 0 : new Error("Error while loading stylesheet."));
328
- }), o.appendChild(i), i.setAttribute("href", t);
361
+ r(t ? void 0 : new Error("Error while loading stylesheet."));
362
+ }), o.appendChild(i), i.setAttribute("href", e);
329
363
  }
330
- }]), t;
364
+ }]);
331
365
  }();
332
- function B(t) {
333
- return "string" == typeof t ? "false" !== t && "true" === t : Boolean(t);
366
+ function I(e) {
367
+ return "string" == typeof e ? "false" !== e && "true" === e : Boolean(e);
334
368
  }
335
- var C = {
336
- authorized: B("{authorized}"),
369
+ var D = {
370
+ authorized: I("{authorized}"),
337
371
  cauldronApiUrl: "{cauldronApiUrl}",
338
- isTestServer: B("{isTestServer}"),
339
- renderCachingForIE8: B("{renderCachingForIE8}"),
340
- normalizationOnServer: B("{normalizationOnServer}"),
372
+ isTestServer: I("{isTestServer}"),
373
+ renderCachingForIE8: I("{renderCachingForIE8}"),
374
+ normalizationOnServer: I("{normalizationOnServer}"),
341
375
  normativeUrl: "{normativeUrl}",
342
376
  resourcesVersion: "{resourcesVersion}",
343
377
  konturDomains: "{konturDomains}"
344
378
  };
345
- function I(t) {
346
- return I = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) {
347
- return typeof t;
348
- } : function (t) {
349
- return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t;
350
- }, I(t);
351
- }
352
- function L(t, e, r, n, o, i, a) {
379
+ function U(e, t, r, n, o, i, a) {
353
380
  try {
354
- var u = t[i](a),
355
- s = u.value;
356
- } catch (t) {
357
- return void r(t);
381
+ var s = e[i](a),
382
+ u = s.value;
383
+ } catch (e) {
384
+ return void r(e);
358
385
  }
359
- u.done ? e(s) : Promise.resolve(s).then(n, o);
386
+ s.done ? t(u) : Promise.resolve(u).then(n, o);
360
387
  }
361
- function F(t) {
388
+ function x(e) {
362
389
  return function () {
363
- var e = this,
390
+ var t = this,
364
391
  r = arguments;
365
392
  return new Promise(function (n, o) {
366
- var i = t.apply(e, r);
367
- function a(t) {
368
- L(i, n, o, a, u, "next", t);
393
+ var i = e.apply(t, r);
394
+ function a(e) {
395
+ U(i, n, o, a, s, "next", e);
369
396
  }
370
- function u(t) {
371
- L(i, n, o, a, u, "throw", t);
397
+ function s(e) {
398
+ U(i, n, o, a, s, "throw", e);
372
399
  }
373
400
  a(void 0);
374
401
  });
375
402
  };
376
403
  }
377
- function D(t, e) {
378
- return D = Object.setPrototypeOf || function (t, e) {
379
- return t.__proto__ = e, t;
380
- }, D(t, e);
404
+ function F(e) {
405
+ return F = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (e) {
406
+ return e.__proto__ || Object.getPrototypeOf(e);
407
+ }, F(e);
381
408
  }
382
- function R(t, e) {
383
- if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
384
- t.prototype = Object.create(e && e.prototype, {
409
+ function M(e, t) {
410
+ return M = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) {
411
+ return e.__proto__ = t, e;
412
+ }, M(e, t);
413
+ }
414
+ function N(e, t) {
415
+ if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function");
416
+ e.prototype = Object.create(t && t.prototype, {
385
417
  constructor: {
386
- value: t,
418
+ value: e,
387
419
  writable: !0,
388
420
  configurable: !0
389
421
  }
390
- }), Object.defineProperty(t, "prototype", {
422
+ }), Object.defineProperty(e, "prototype", {
391
423
  writable: !1
392
- }), e && D(t, e);
393
- }
394
- function U(t) {
395
- return U = Object.setPrototypeOf ? Object.getPrototypeOf : function (t) {
396
- return t.__proto__ || Object.getPrototypeOf(t);
397
- }, U(t);
424
+ }), t && M(e, t);
398
425
  }
399
- function M(t, e, r) {
400
- return M = function () {
401
- if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
402
- if (Reflect.construct.sham) return !1;
403
- if ("function" == typeof Proxy) return !0;
404
- try {
405
- return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;
406
- } catch (t) {
407
- return !1;
408
- }
409
- }() ? Reflect.construct : function (t, e, r) {
410
- var n = [null];
411
- n.push.apply(n, e);
412
- var o = new (Function.bind.apply(t, n))();
413
- return r && D(o, r.prototype), o;
414
- }, M.apply(null, arguments);
426
+ function L() {
427
+ try {
428
+ var e = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
429
+ } catch (e) {}
430
+ return (L = function () {
431
+ return !!e;
432
+ })();
415
433
  }
416
- function N(t) {
417
- var e = "function" == typeof Map ? new Map() : void 0;
418
- return N = function (t) {
419
- if (null === t || (r = t, -1 === Function.toString.call(r).indexOf("[native code]"))) return t;
420
- var r;
421
- if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
422
- if (void 0 !== e) {
423
- if (e.has(t)) return e.get(t);
424
- e.set(t, n);
434
+ function V(e) {
435
+ var t = "function" == typeof Map ? new Map() : void 0;
436
+ return V = function (e) {
437
+ if (null === e || !function (e) {
438
+ try {
439
+ return -1 !== Function.toString.call(e).indexOf("[native code]");
440
+ } catch (t) {
441
+ return "function" == typeof e;
442
+ }
443
+ }(e)) return e;
444
+ if ("function" != typeof e) throw new TypeError("Super expression must either be null or a function");
445
+ if (void 0 !== t) {
446
+ if (t.has(e)) return t.get(e);
447
+ t.set(e, r);
425
448
  }
426
- function n() {
427
- return M(t, arguments, U(this).constructor);
449
+ function r() {
450
+ return function (e, t, r) {
451
+ if (L()) return Reflect.construct.apply(null, arguments);
452
+ var n = [null];
453
+ n.push.apply(n, t);
454
+ var o = new (e.bind.apply(e, n))();
455
+ return r && M(o, r.prototype), o;
456
+ }(e, arguments, F(this).constructor);
428
457
  }
429
- return n.prototype = Object.create(t.prototype, {
458
+ return r.prototype = Object.create(e.prototype, {
430
459
  constructor: {
431
- value: n,
460
+ value: r,
432
461
  enumerable: !1,
433
462
  writable: !0,
434
463
  configurable: !0
435
464
  }
436
- }), D(n, t);
437
- }, N(t);
465
+ }), M(r, e);
466
+ }, V(e);
438
467
  }
439
- function V(t) {
440
- var e = function () {
441
- if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
442
- if (Reflect.construct.sham) return !1;
443
- if ("function" == typeof Proxy) return !0;
444
- try {
445
- return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;
446
- } catch (t) {
447
- return !1;
448
- }
449
- }();
450
- return function () {
451
- var r,
452
- n = U(t);
453
- if (e) {
454
- var o = U(this).constructor;
455
- r = Reflect.construct(n, arguments, o);
456
- } else r = n.apply(this, arguments);
457
- return function (t, e) {
458
- if (e && ("object" === I(e) || "function" == typeof e)) return e;
459
- if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
460
- return function (t) {
461
- if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
462
- return t;
463
- }(t);
464
- }(this, r);
465
- };
468
+ function H(e, r, n) {
469
+ return r = F(r), function (e, r) {
470
+ if (r && ("object" == t(r) || "function" == typeof r)) return r;
471
+ if (void 0 !== r) throw new TypeError("Derived constructors may only return object or undefined");
472
+ return function (e) {
473
+ if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
474
+ return e;
475
+ }(e);
476
+ }(e, z() ? Reflect.construct(r, n || [], F(e).constructor) : r.apply(e, n));
466
477
  }
467
- var G = function (t) {
468
- R(r, t);
469
- var e = V(r);
470
- function r() {
471
- return S(this, r), e.call(this, "Operation not implemented");
472
- }
473
- return T(r);
474
- }(function (t) {
475
- R(r, t);
476
- var e = V(r);
477
- function r(t) {
478
- var n;
479
- return S(this, r), (n = e.call(this, t)).name = n.constructor.name, n;
480
- }
481
- return T(r);
482
- }(N(Error)));
483
478
  function z() {
484
- z = function () {
485
- return t;
486
- };
487
- var t = {},
488
- e = Object.prototype,
489
- r = e.hasOwnProperty,
490
- n = Object.defineProperty || function (t, e, r) {
491
- t[e] = r.value;
492
- },
493
- o = "function" == typeof Symbol ? Symbol : {},
494
- i = o.iterator || "@@iterator",
495
- a = o.asyncIterator || "@@asyncIterator",
496
- u = o.toStringTag || "@@toStringTag";
497
- function s(t, e, r) {
498
- return Object.defineProperty(t, e, {
499
- value: r,
500
- enumerable: !0,
501
- configurable: !0,
502
- writable: !0
503
- }), t[e];
504
- }
505
479
  try {
506
- s({}, "");
507
- } catch (t) {
508
- s = function (t, e, r) {
509
- return t[e] = r;
510
- };
511
- }
512
- function c(t, e, r, o) {
513
- var i = e && e.prototype instanceof h ? e : h,
514
- a = Object.create(i.prototype),
515
- u = new A(o || []);
516
- return n(a, "_invoke", {
517
- value: E(t, r, u)
518
- }), a;
519
- }
520
- function l(t, e, r) {
521
- try {
522
- return {
523
- type: "normal",
524
- arg: t.call(e, r)
525
- };
526
- } catch (t) {
527
- return {
528
- type: "throw",
529
- arg: t
530
- };
531
- }
532
- }
533
- t.wrap = c;
534
- var f = {};
535
- function h() {}
536
- function d() {}
537
- function p() {}
538
- var y = {};
539
- s(y, i, function () {
540
- return this;
541
- });
542
- var v = Object.getPrototypeOf,
543
- m = v && v(v(_([])));
544
- m && m !== e && r.call(m, i) && (y = m);
545
- var b = p.prototype = h.prototype = Object.create(y);
546
- function w(t) {
547
- ["next", "throw", "return"].forEach(function (e) {
548
- s(t, e, function (t) {
549
- return this._invoke(e, t);
550
- });
551
- });
552
- }
553
- function g(t, e) {
554
- function o(n, i, a, u) {
555
- var s = l(t[n], t, i);
556
- if ("throw" !== s.type) {
557
- var c = s.arg,
558
- f = c.value;
559
- return f && "object" == I(f) && r.call(f, "__await") ? e.resolve(f.__await).then(function (t) {
560
- o("next", t, a, u);
561
- }, function (t) {
562
- o("throw", t, a, u);
563
- }) : e.resolve(f).then(function (t) {
564
- c.value = t, a(c);
565
- }, function (t) {
566
- return o("throw", t, a, u);
567
- });
568
- }
569
- u(s.arg);
570
- }
571
- var i;
572
- n(this, "_invoke", {
573
- value: function (t, r) {
574
- function n() {
575
- return new e(function (e, n) {
576
- o(t, r, e, n);
577
- });
578
- }
579
- return i = i ? i.then(n, n) : n();
580
- }
581
- });
582
- }
583
- function E(t, e, r) {
584
- var n = "suspendedStart";
585
- return function (o, i) {
586
- if ("executing" === n) throw new Error("Generator is already running");
587
- if ("completed" === n) {
588
- if ("throw" === o) throw i;
589
- return {
590
- value: void 0,
591
- done: !0
592
- };
593
- }
594
- for (r.method = o, r.arg = i;;) {
595
- var a = r.delegate;
596
- if (a) {
597
- var u = O(a, r);
598
- if (u) {
599
- if (u === f) continue;
600
- return u;
601
- }
602
- }
603
- if ("next" === r.method) r.sent = r._sent = r.arg;else if ("throw" === r.method) {
604
- if ("suspendedStart" === n) throw n = "completed", r.arg;
605
- r.dispatchException(r.arg);
606
- } else "return" === r.method && r.abrupt("return", r.arg);
607
- n = "executing";
608
- var s = l(t, e, r);
609
- if ("normal" === s.type) {
610
- if (n = r.done ? "completed" : "suspendedYield", s.arg === f) continue;
611
- return {
612
- value: s.arg,
613
- done: r.done
614
- };
615
- }
616
- "throw" === s.type && (n = "completed", r.method = "throw", r.arg = s.arg);
617
- }
618
- };
619
- }
620
- function O(t, e) {
621
- var r = e.method,
622
- n = t.iterator[r];
623
- if (void 0 === n) return e.delegate = null, "throw" === r && t.iterator.return && (e.method = "return", e.arg = void 0, O(t, e), "throw" === e.method) || "return" !== r && (e.method = "throw", e.arg = new TypeError("The iterator does not provide a '" + r + "' method")), f;
624
- var o = l(n, t.iterator, e.arg);
625
- if ("throw" === o.type) return e.method = "throw", e.arg = o.arg, e.delegate = null, f;
626
- var i = o.arg;
627
- return i ? i.done ? (e[t.resultName] = i.value, e.next = t.nextLoc, "return" !== e.method && (e.method = "next", e.arg = void 0), e.delegate = null, f) : i : (e.method = "throw", e.arg = new TypeError("iterator result is not an object"), e.delegate = null, f);
628
- }
629
- function k(t) {
630
- var e = {
631
- tryLoc: t[0]
632
- };
633
- 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
634
- }
635
- function j(t) {
636
- var e = t.completion || {};
637
- e.type = "normal", delete e.arg, t.completion = e;
638
- }
639
- function A(t) {
640
- this.tryEntries = [{
641
- tryLoc: "root"
642
- }], t.forEach(k, this), this.reset(!0);
643
- }
644
- function _(t) {
645
- if (t) {
646
- var e = t[i];
647
- if (e) return e.call(t);
648
- if ("function" == typeof t.next) return t;
649
- if (!isNaN(t.length)) {
650
- var n = -1,
651
- o = function e() {
652
- for (; ++n < t.length;) if (r.call(t, n)) return e.value = t[n], e.done = !1, e;
653
- return e.value = void 0, e.done = !0, e;
654
- };
655
- return o.next = o;
656
- }
657
- }
658
- return {
659
- next: S
660
- };
480
+ var e = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
481
+ } catch (e) {}
482
+ return (z = function () {
483
+ return !!e;
484
+ })();
485
+ }
486
+ var q = function (e) {
487
+ function t() {
488
+ return _(this, t), H(this, t, ["Operation not implemented"]);
661
489
  }
662
- function S() {
663
- return {
664
- value: void 0,
665
- done: !0
666
- };
490
+ return N(t, e), C(t);
491
+ }(function (e) {
492
+ function t(e) {
493
+ var r;
494
+ return _(this, t), (r = H(this, t, [e])).name = r.constructor.name, r;
667
495
  }
668
- return d.prototype = p, n(b, "constructor", {
669
- value: p,
670
- configurable: !0
671
- }), n(p, "constructor", {
672
- value: d,
673
- configurable: !0
674
- }), d.displayName = s(p, u, "GeneratorFunction"), t.isGeneratorFunction = function (t) {
675
- var e = "function" == typeof t && t.constructor;
676
- return !!e && (e === d || "GeneratorFunction" === (e.displayName || e.name));
677
- }, t.mark = function (t) {
678
- return Object.setPrototypeOf ? Object.setPrototypeOf(t, p) : (t.__proto__ = p, s(t, u, "GeneratorFunction")), t.prototype = Object.create(b), t;
679
- }, t.awrap = function (t) {
680
- return {
681
- __await: t
682
- };
683
- }, w(g.prototype), s(g.prototype, a, function () {
684
- return this;
685
- }), t.AsyncIterator = g, t.async = function (e, r, n, o, i) {
686
- void 0 === i && (i = Promise);
687
- var a = new g(c(e, r, n, o), i);
688
- return t.isGeneratorFunction(r) ? a : a.next().then(function (t) {
689
- return t.done ? t.value : a.next();
690
- });
691
- }, w(b), s(b, u, "Generator"), s(b, i, function () {
692
- return this;
693
- }), s(b, "toString", function () {
694
- return "[object Generator]";
695
- }), t.keys = function (t) {
696
- var e = Object(t),
697
- r = [];
698
- for (var n in e) r.push(n);
699
- return r.reverse(), function t() {
700
- for (; r.length;) {
701
- var n = r.pop();
702
- if (n in e) return t.value = n, t.done = !1, t;
703
- }
704
- return t.done = !0, t;
705
- };
706
- }, t.values = _, A.prototype = {
707
- constructor: A,
708
- reset: function (t) {
709
- if (this.prev = 0, this.next = 0, this.sent = this._sent = void 0, this.done = !1, this.delegate = null, this.method = "next", this.arg = void 0, this.tryEntries.forEach(j), !t) for (var e in this) "t" === e.charAt(0) && r.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = void 0);
710
- },
711
- stop: function () {
712
- this.done = !0;
713
- var t = this.tryEntries[0].completion;
714
- if ("throw" === t.type) throw t.arg;
715
- return this.rval;
716
- },
717
- dispatchException: function (t) {
718
- if (this.done) throw t;
719
- var e = this;
720
- function n(r, n) {
721
- return a.type = "throw", a.arg = t, e.next = r, n && (e.method = "next", e.arg = void 0), !!n;
722
- }
723
- for (var o = this.tryEntries.length - 1; o >= 0; --o) {
724
- var i = this.tryEntries[o],
725
- a = i.completion;
726
- if ("root" === i.tryLoc) return n("end");
727
- if (i.tryLoc <= this.prev) {
728
- var u = r.call(i, "catchLoc"),
729
- s = r.call(i, "finallyLoc");
730
- if (u && s) {
731
- if (this.prev < i.catchLoc) return n(i.catchLoc, !0);
732
- if (this.prev < i.finallyLoc) return n(i.finallyLoc);
733
- } else if (u) {
734
- if (this.prev < i.catchLoc) return n(i.catchLoc, !0);
735
- } else {
736
- if (!s) throw new Error("try statement without catch or finally");
737
- if (this.prev < i.finallyLoc) return n(i.finallyLoc);
738
- }
739
- }
740
- }
741
- },
742
- abrupt: function (t, e) {
743
- for (var n = this.tryEntries.length - 1; n >= 0; --n) {
744
- var o = this.tryEntries[n];
745
- if (o.tryLoc <= this.prev && r.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
746
- var i = o;
747
- break;
748
- }
749
- }
750
- i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
751
- var a = i ? i.completion : {};
752
- return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, f) : this.complete(a);
753
- },
754
- complete: function (t, e) {
755
- if ("throw" === t.type) throw t.arg;
756
- return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), f;
757
- },
758
- finish: function (t) {
759
- for (var e = this.tryEntries.length - 1; e >= 0; --e) {
760
- var r = this.tryEntries[e];
761
- if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), j(r), f;
762
- }
763
- },
764
- catch: function (t) {
765
- for (var e = this.tryEntries.length - 1; e >= 0; --e) {
766
- var r = this.tryEntries[e];
767
- if (r.tryLoc === t) {
768
- var n = r.completion;
769
- if ("throw" === n.type) {
770
- var o = n.arg;
771
- j(r);
772
- }
773
- return o;
774
- }
775
- }
776
- throw new Error("illegal catch attempt");
777
- },
778
- delegateYield: function (t, e, r) {
779
- return this.delegate = {
780
- iterator: _(t),
781
- resultName: e,
782
- nextLoc: r
783
- }, "next" === this.method && (this.arg = void 0), f;
784
- }
785
- }, t;
786
- }
787
- function q(t, e) {
788
- var r = Object.keys(t);
496
+ return N(t, e), C(t);
497
+ }(V(Error)));
498
+ function Z(e, t) {
499
+ var r = Object.keys(e);
789
500
  if (Object.getOwnPropertySymbols) {
790
- var n = Object.getOwnPropertySymbols(t);
791
- e && (n = n.filter(function (e) {
792
- return Object.getOwnPropertyDescriptor(t, e).enumerable;
501
+ var n = Object.getOwnPropertySymbols(e);
502
+ t && (n = n.filter(function (t) {
503
+ return Object.getOwnPropertyDescriptor(e, t).enumerable;
793
504
  })), r.push.apply(r, n);
794
505
  }
795
506
  return r;
796
507
  }
797
- function H(t) {
798
- for (var r = 1; r < arguments.length; r++) {
799
- var n = null != arguments[r] ? arguments[r] : {};
800
- r % 2 ? q(Object(n), !0).forEach(function (r) {
801
- e(t, r, n[r]);
802
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : q(Object(n)).forEach(function (e) {
803
- Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e));
508
+ function G(e) {
509
+ for (var t = 1; t < arguments.length; t++) {
510
+ var r = null != arguments[t] ? arguments[t] : {};
511
+ t % 2 ? Z(Object(r), !0).forEach(function (t) {
512
+ n(e, t, r[t]);
513
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : Z(Object(r)).forEach(function (t) {
514
+ Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t));
804
515
  });
805
516
  }
806
- return t;
517
+ return e;
807
518
  }
808
- function Z(t, e) {
809
- if (null != e) {
810
- if (null == t) throw new Error("Path must be defined");
811
- return ["model", "change", t, e];
519
+ function $(e, t) {
520
+ if (null != t) {
521
+ if (null == e) throw new Error("Path must be defined");
522
+ return ["model", "change", e, t];
812
523
  }
813
- return null != t ? ["model", "change", t] : ["model", "change"];
524
+ return null != e ? ["model", "change", e] : ["model", "change"];
814
525
  }
815
- function $(t) {
816
- return Object.keys(t).filter(function (e) {
817
- return t[e] && Object.prototype.hasOwnProperty.call(t[e], "value");
818
- }).map(function (r) {
819
- var n = t[r];
820
- return null == n ? {} : e({}, r, n.value);
526
+ function X(e) {
527
+ return Object.keys(e).filter(function (t) {
528
+ return e[t] && Object.prototype.hasOwnProperty.call(e[t], "value");
529
+ }).map(function (t) {
530
+ var r = e[t];
531
+ return null == r ? {} : n({}, t, r.value);
821
532
  });
822
533
  }
823
- function X(t) {
824
- return t.reduce(function (t, e) {
825
- return H(H({}, t), e);
534
+ function J(e) {
535
+ return e.reduce(function (e, t) {
536
+ return G(G({}, e), t);
826
537
  }, {});
827
538
  }
828
- var Y = function () {
829
- function t(e) {
830
- S(this, t), this.form = void 0, this.form = e;
831
- }
832
- var r, n, o;
833
- return T(t, [{
539
+ var W = function () {
540
+ return C(function e(t) {
541
+ _(this, e), this.form = void 0, this.form = t;
542
+ }, [{
834
543
  key: "navigateByHighlanderPaths",
835
- value: function (t) {
544
+ value: function (e) {
836
545
  throw new Error("Method not implemented.");
837
546
  }
838
547
  }, {
@@ -842,7 +551,7 @@
842
551
  }
843
552
  }, {
844
553
  key: "batchUpdate",
845
- value: function (t) {
554
+ value: function (e) {
846
555
  throw new Error("Method not implemented.");
847
556
  }
848
557
  }, {
@@ -852,22 +561,22 @@
852
561
  }
853
562
  }, {
854
563
  key: "setErrorLog",
855
- value: function (t) {
564
+ value: function (e) {
856
565
  throw new Error("Method not implemented.");
857
566
  }
858
567
  }, {
859
568
  key: "validateChildrenByPath",
860
- value: (o = F(z().mark(function t(e) {
861
- return z().wrap(function (t) {
862
- for (;;) switch (t.prev = t.next) {
569
+ value: (o = x(regeneratorRuntime.mark(function e(t) {
570
+ return regeneratorRuntime.wrap(function (e) {
571
+ for (;;) switch (e.prev = e.next) {
863
572
  case 0:
864
573
  throw new Error("Method not implemented.");
865
574
  case 1:
866
575
  case "end":
867
- return t.stop();
576
+ return e.stop();
868
577
  }
869
- }, t);
870
- })), function (t) {
578
+ }, e);
579
+ })), function (e) {
871
580
  return o.apply(this, arguments);
872
581
  })
873
582
  }, {
@@ -877,22 +586,22 @@
877
586
  }
878
587
  }, {
879
588
  key: "__INTERNAL__getSelectFunctionForDisableEmployeeInSS",
880
- value: (n = F(z().mark(function t(e) {
881
- return z().wrap(function (t) {
882
- for (;;) switch (t.prev = t.next) {
589
+ value: (r = x(regeneratorRuntime.mark(function e(t) {
590
+ return regeneratorRuntime.wrap(function (e) {
591
+ for (;;) switch (e.prev = e.next) {
883
592
  case 0:
884
593
  throw new Error("Method not implemented.");
885
594
  case 1:
886
595
  case "end":
887
- return t.stop();
596
+ return e.stop();
888
597
  }
889
- }, t);
890
- })), function (t) {
891
- return n.apply(this, arguments);
598
+ }, e);
599
+ })), function (e) {
600
+ return r.apply(this, arguments);
892
601
  })
893
602
  }, {
894
603
  key: "getModalUnitOpenedInstance",
895
- value: function (t) {
604
+ value: function (e) {
896
605
  throw new Error("Method not implemented.");
897
606
  }
898
607
  }, {
@@ -902,47 +611,47 @@
902
611
  }
903
612
  }, {
904
613
  key: "navigate",
905
- value: function (t) {
614
+ value: function (e) {
906
615
  throw new Error("Method not implemented.");
907
616
  }
908
617
  }, {
909
618
  key: "importEmployerDocuments",
910
- value: function (t) {
619
+ value: function (e) {
911
620
  throw new Error("Method not implemented.");
912
621
  }
913
622
  }, {
914
623
  key: "importEmployees",
915
- value: function (t, e) {
624
+ value: function (e, t) {
916
625
  throw new Error("Method not implemented.");
917
626
  }
918
627
  }, {
919
628
  key: "print",
920
- value: function (t, e) {
629
+ value: function (e, t) {
921
630
  throw new Error("Method not implemented.");
922
631
  }
923
632
  }, {
924
633
  key: "runMassAction",
925
- value: function (t, e) {
634
+ value: function (e, t) {
926
635
  throw new Error("Method not implemented.");
927
636
  }
928
637
  }, {
929
638
  key: "getByGId",
930
- value: function (t, e) {
931
- return this.form.picklistsProvider.getDigestApiPicklist(t).query(e);
639
+ value: function (e, t) {
640
+ return this.form.picklistsProvider.getDigestApiPicklist(e).query(t);
932
641
  }
933
642
  }, {
934
643
  key: "on",
935
- value: function (t, e) {
936
- this.form.eventManager.on(["form", t], e);
644
+ value: function (e, t) {
645
+ this.form.eventManager.on(["form", e], t);
937
646
  }
938
647
  }, {
939
648
  key: "off",
940
- value: function (t, e) {
941
- this.form.eventManager.off(["form", t], e);
649
+ value: function (e, t) {
650
+ this.form.eventManager.off(["form", e], t);
942
651
  }
943
652
  }, {
944
653
  key: "onModelChange",
945
- value: function (t, e) {
654
+ value: function (e, t) {
946
655
  throw Error("form.onModelChange() is not supported yet");
947
656
  }
948
657
  }, {
@@ -963,260 +672,266 @@
963
672
  }, {
964
673
  key: "validate",
965
674
  value: function () {
966
- var t = Object.keys(this.form.model.getChunk(this.form.settings.formRoot));
967
- return this.form.validator.validateAll(t);
675
+ var e = Object.keys(this.form.model.getChunk(this.form.settings.formRoot));
676
+ return this.form.validator.validateAll(e);
968
677
  }
969
678
  }, {
970
679
  key: "getAdditionalEmployeeInfo",
971
- value: function (t) {
680
+ value: function (e) {
972
681
  throw new Error("not implemented");
973
682
  }
974
683
  }, {
975
684
  key: "reloadInner",
976
- value: (r = F(z().mark(function t() {
977
- return z().wrap(function (t) {
978
- for (;;) switch (t.prev = t.next) {
685
+ value: (e = x(regeneratorRuntime.mark(function e() {
686
+ return regeneratorRuntime.wrap(function (e) {
687
+ for (;;) switch (e.prev = e.next) {
979
688
  case 0:
980
689
  throw new Error("not implemented");
981
690
  case 1:
982
691
  case "end":
983
- return t.stop();
692
+ return e.stop();
984
693
  }
985
- }, t);
694
+ }, e);
986
695
  })), function () {
987
- return r.apply(this, arguments);
696
+ return e.apply(this, arguments);
988
697
  })
989
698
  }, {
990
699
  key: "getWorkingEventsForEmployee",
991
- value: function (t) {
700
+ value: function (e) {
992
701
  throw new Error("not implemented");
993
702
  }
994
703
  }, {
995
704
  key: "hasErrors",
996
705
  value: function () {
997
- var t = this.form.model.get(this.form.settings.formRoot, "errorsCount");
998
- return null != t && t > 0;
706
+ var e = this.form.model.get(this.form.settings.formRoot, "errorsCount");
707
+ return null != e && e > 0;
999
708
  }
1000
709
  }, {
1001
710
  key: "onErrorsCountChanged",
1002
- value: function (t) {
1003
- this.form.eventManager.on(Z(this.form.settings.formRoot, "errorsCount"), t);
711
+ value: function (e) {
712
+ this.form.eventManager.on($(this.form.settings.formRoot, "errorsCount"), e);
1004
713
  }
1005
714
  }, {
1006
715
  key: "offErrorsCountChanged",
1007
- value: function (t) {
1008
- this.form.eventManager.off(Z(this.form.settings.formRoot, "errorsCount"), t);
716
+ value: function (e) {
717
+ this.form.eventManager.off($(this.form.settings.formRoot, "errorsCount"), e);
1009
718
  }
1010
719
  }, {
1011
720
  key: "set",
1012
- value: function (t, r) {
1013
- if (null === t || "string" == typeof t || "object" !== I(t) || Array.isArray(t)) {
1014
- if ("string" != typeof t) throw new Error("form.set() parameter should be string path or object with path-value pairs");
1015
- this.form.model.set(t, "value", r);
721
+ value: function (e, r) {
722
+ if (null === e || "string" == typeof e || "object" !== t(e) || Array.isArray(e)) {
723
+ if ("string" != typeof e) throw new Error("form.set() parameter should be string path or object with path-value pairs");
724
+ this.form.model.set(e, "value", r);
1016
725
  } else {
1017
- var n = Object.keys(t).reduce(function (r, n) {
1018
- return H(e({}, n, {
1019
- value: t[n]
1020
- }), r);
726
+ var o = Object.keys(e).reduce(function (t, r) {
727
+ return G(n({}, r, {
728
+ value: e[r]
729
+ }), t);
1021
730
  }, {});
1022
- this.form.model.fill(n);
731
+ this.form.model.fill(o);
1023
732
  }
1024
733
  }
1025
734
  }, {
1026
735
  key: "get",
1027
- value: function (t) {
1028
- var e = this;
1029
- if (Array.isArray(t)) return X(t.map(function (t) {
1030
- return $(e.form.model.getChunk(t));
1031
- }).reduce(function (t, e) {
1032
- return t.concat(e);
736
+ value: function (e) {
737
+ var t = this;
738
+ if (Array.isArray(e)) return J(e.map(function (e) {
739
+ return X(t.form.model.getChunk(e));
740
+ }).reduce(function (e, t) {
741
+ return e.concat(t);
1033
742
  }, []));
1034
- if ("string" == typeof t) return X($(this.form.model.getChunk(t)));
1035
- if (void 0 === t) return X($(this.form.model.getChunk(this.form.settings.formRoot)));
743
+ if ("string" == typeof e) return J(X(this.form.model.getChunk(e)));
744
+ if (void 0 === e) return J(X(this.form.model.getChunk(this.form.settings.formRoot)));
1036
745
  throw new Error("form.get() parameter should be string path or array of paths");
1037
746
  }
1038
747
  }, {
1039
748
  key: "getValue",
1040
- value: function (t) {
1041
- return this.form.model.get(t, "value");
749
+ value: function (e) {
750
+ return this.form.model.get(e, "value");
1042
751
  }
1043
752
  }, {
1044
753
  key: "copySubtree",
1045
- value: function (t, e, r) {
1046
- throw new G();
754
+ value: function (e, t, r) {
755
+ throw new q();
1047
756
  }
1048
757
  }, {
1049
758
  key: "addInstance",
1050
- value: function (t) {
1051
- throw new G();
759
+ value: function (e) {
760
+ throw new q();
1052
761
  }
1053
762
  }, {
1054
763
  key: "getChildren",
1055
- value: function (t) {
1056
- throw new G();
764
+ value: function (e) {
765
+ throw new q();
1057
766
  }
1058
767
  }, {
1059
768
  key: "uuidGenerate",
1060
769
  value: function () {
1061
- throw new G();
770
+ throw new q();
1062
771
  }
1063
772
  }, {
1064
773
  key: "showModal",
1065
- value: function (t) {
1066
- throw new G();
774
+ value: function (e) {
775
+ throw new q();
1067
776
  }
1068
777
  }, {
1069
778
  key: "addSection",
1070
- value: function (t) {
1071
- throw new G();
779
+ value: function (e) {
780
+ throw new q();
1072
781
  }
1073
782
  }, {
1074
783
  key: "callInitSection",
1075
- value: function (t) {
1076
- throw new G();
784
+ value: function (e) {
785
+ throw new q();
1077
786
  }
1078
787
  }, {
1079
788
  key: "createFiasApiClient",
1080
- value: function (t) {
1081
- throw new G();
789
+ value: function (e) {
790
+ throw new q();
1082
791
  }
1083
792
  }, {
1084
793
  key: "openEmployeeEditor",
1085
- value: function (t) {
1086
- throw new G();
794
+ value: function (e) {
795
+ throw new q();
1087
796
  }
1088
797
  }, {
1089
798
  key: "removeInstance",
1090
- value: function (t, e) {
1091
- throw new G();
799
+ value: function (e, t) {
800
+ throw new q();
1092
801
  }
1093
802
  }, {
1094
803
  key: "removeInstances",
1095
- value: function (t, e) {
1096
- throw new G();
804
+ value: function (e, t) {
805
+ throw new q();
1097
806
  }
1098
807
  }, {
1099
808
  key: "focusOnControlIfExist",
1100
- value: function (t) {
1101
- throw new G();
809
+ value: function (e) {
810
+ throw new q();
1102
811
  }
1103
812
  }, {
1104
813
  key: "setAutoFieldsToAutoValue",
1105
- value: function (t) {
814
+ value: function (e) {
1106
815
  return Promise.resolve(void 0);
1107
816
  }
1108
817
  }, {
1109
818
  key: "ensureInstanceFullyLoaded",
1110
- value: function (t) {
819
+ value: function (e) {
1111
820
  throw new Error("Method not implemented.");
1112
821
  }
1113
822
  }, {
1114
823
  key: "customNormalize",
1115
- value: function (t, e) {
1116
- throw new G();
824
+ value: function (e, t) {
825
+ throw new q();
1117
826
  }
1118
827
  }, {
1119
828
  key: "removeInstancesByRules",
1120
- value: function (t) {
1121
- throw new G();
829
+ value: function (e) {
830
+ throw new q();
1122
831
  }
1123
832
  }, {
1124
833
  key: "createDnp",
1125
834
  value: function () {
1126
- throw new G();
835
+ throw new q();
1127
836
  }
1128
- }]), t;
837
+ }]);
838
+ var e, r, o;
1129
839
  }();
1130
- function J(t, e) {
1131
- var r = Object.keys(t);
840
+ function K(e, t) {
841
+ var r = Object.keys(e);
1132
842
  if (Object.getOwnPropertySymbols) {
1133
- var n = Object.getOwnPropertySymbols(t);
1134
- e && (n = n.filter(function (e) {
1135
- return Object.getOwnPropertyDescriptor(t, e).enumerable;
843
+ var n = Object.getOwnPropertySymbols(e);
844
+ t && (n = n.filter(function (t) {
845
+ return Object.getOwnPropertyDescriptor(e, t).enumerable;
1136
846
  })), r.push.apply(r, n);
1137
847
  }
1138
848
  return r;
1139
849
  }
1140
- function W(t) {
1141
- for (var r = 1; r < arguments.length; r++) {
1142
- var n = null != arguments[r] ? arguments[r] : {};
1143
- r % 2 ? J(Object(n), !0).forEach(function (r) {
1144
- e(t, r, n[r]);
1145
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : J(Object(n)).forEach(function (e) {
1146
- Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e));
850
+ function Q(e) {
851
+ for (var t = 1; t < arguments.length; t++) {
852
+ var r = null != arguments[t] ? arguments[t] : {};
853
+ t % 2 ? K(Object(r), !0).forEach(function (t) {
854
+ n(e, t, r[t]);
855
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : K(Object(r)).forEach(function (t) {
856
+ Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t));
1147
857
  });
1148
858
  }
1149
- return t;
859
+ return e;
1150
860
  }
1151
- function K() {}
1152
- function Q() {
1153
- var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
1154
- r = t.g.CF.keformsUrl || "";
1155
- return "".concat(r, "/").concat(e).replace(/([^:])\/{2,}/g, "$1/");
861
+ function Y() {}
862
+ function ee() {
863
+ var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
864
+ r = e.g.CF.keformsUrl || "";
865
+ return "".concat(r, "/").concat(t).replace(/([^:])\/{2,}/g, "$1/");
1156
866
  }
1157
- function tt(t, e) {
1158
- if (void 0 === e) return t;
1159
- for (var r = [], n = 0, o = Object.keys(e); n < o.length; n++) {
867
+ function te(e, t) {
868
+ if (void 0 === t) return e;
869
+ for (var r = [], n = 0, o = Object.keys(t); n < o.length; n++) {
1160
870
  var i = o[n],
1161
- a = e[i];
871
+ a = t[i];
1162
872
  null != a && r.push("".concat(i, "=").concat(encodeURIComponent(a)));
1163
873
  }
1164
- return 0 === r.length ? t : t + "?" + r.join("&");
874
+ return 0 === r.length ? e : e + "?" + r.join("&");
1165
875
  }
1166
- function et(e) {
1167
- return (t.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (t) {
1168
- return t.replace(/\+/g, " ").split("=").map(decodeURIComponent);
1169
- }).find(function (t) {
1170
- return (n = t, o = 1, function (t) {
1171
- if (Array.isArray(t)) return t;
1172
- }(n) || function (t, e) {
1173
- var r = null == t ? null : "undefined" != typeof Symbol && t[Symbol.iterator] || t["@@iterator"];
876
+ function re(t) {
877
+ return (e.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (e) {
878
+ return e.replace(/\+/g, " ").split("=").map(decodeURIComponent);
879
+ }).find(function (e) {
880
+ return (r = e, n = 1, function (e) {
881
+ if (Array.isArray(e)) return e;
882
+ }(r) || function (e, t) {
883
+ var r = null == e ? null : "undefined" != typeof Symbol && e[Symbol.iterator] || e["@@iterator"];
1174
884
  if (null != r) {
1175
885
  var n,
1176
886
  o,
1177
- i = [],
1178
- a = !0,
1179
- u = !1;
887
+ i,
888
+ a,
889
+ s = [],
890
+ u = !0,
891
+ c = !1;
1180
892
  try {
1181
- for (r = r.call(t); !(a = (n = r.next()).done) && (i.push(n.value), !e || i.length !== e); a = !0);
1182
- } catch (t) {
1183
- u = !0, o = t;
893
+ if (i = (r = r.call(e)).next, 0 === t) {
894
+ if (Object(r) !== r) return;
895
+ u = !1;
896
+ } else for (; !(u = (n = i.call(r)).done) && (s.push(n.value), s.length !== t); u = !0);
897
+ } catch (e) {
898
+ c = !0, o = e;
1184
899
  } finally {
1185
900
  try {
1186
- a || null == r.return || r.return();
901
+ if (!u && null != r.return && (a = r.return(), Object(a) !== a)) return;
1187
902
  } finally {
1188
- if (u) throw o;
903
+ if (c) throw o;
1189
904
  }
1190
905
  }
1191
- return i;
906
+ return s;
1192
907
  }
1193
- }(n, o) || function (t, e) {
1194
- if (t) {
1195
- if ("string" == typeof t) return r(t, e);
1196
- var n = Object.prototype.toString.call(t).slice(8, -1);
1197
- return "Object" === n && t.constructor && (n = t.constructor.name), "Map" === n || "Set" === n ? Array.from(t) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? r(t, e) : void 0;
908
+ }(r, n) || function (e, t) {
909
+ if (e) {
910
+ if ("string" == typeof e) return o(e, t);
911
+ var r = {}.toString.call(e).slice(8, -1);
912
+ return "Object" === r && e.constructor && (r = e.constructor.name), "Map" === r || "Set" === r ? Array.from(e) : "Arguments" === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) ? o(e, t) : void 0;
1198
913
  }
1199
- }(n, o) || function () {
914
+ }(r, n) || function () {
1200
915
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
1201
- }())[0] == e;
1202
- var n, o;
916
+ }())[0] == t;
917
+ var r, n;
1203
918
  }) || [])[1];
1204
919
  }
1205
- var rt = {
1206
- start: function (e, r) {
920
+ var ne = {
921
+ start: function (t, r) {
1207
922
  var n,
1208
923
  o,
1209
- i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : K,
924
+ i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : Y,
1210
925
  a = null,
1211
- u = r.ns,
1212
- s = r.draftId;
1213
- if (new RegExp("^(?:".concat(C.konturDomains.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-._]+"), ")$")).test(t.g.location.host) ? C.authorized ? s ? u || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
1214
- var c = null !== (n = r.resourceZone) && void 0 !== n ? n : et("resourceZone"),
1215
- l = tt(Q(function (t) {
1216
- return "v1/ns/".concat(t.ns, "/drafts/").concat(t.draftId, "/client-draft-info");
926
+ s = r.ns,
927
+ u = r.draftId;
928
+ if (new RegExp("^(?:".concat(D.konturDomains.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-._]+"), ")$")).test(e.g.location.host) ? D.authorized ? u ? s || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
929
+ var c = null !== (n = r.resourceZone) && void 0 !== n ? n : re("resourceZone"),
930
+ l = te(ee(function (e) {
931
+ return "v1/ns/".concat(e.ns, "/drafts/").concat(e.draftId, "/client-draft-info");
1217
932
  }({
1218
- ns: u,
1219
- draftId: s
933
+ ns: s,
934
+ draftId: u
1220
935
  })), {
1221
936
  resourceZone: c
1222
937
  }),
@@ -1227,67 +942,67 @@
1227
942
  var h;
1228
943
  f.credentials = "omit", f.headers = null !== (h = f.headers) && void 0 !== h ? h : {}, f.headers.Authorization = "AUTH.SID ".concat(r.authentication.authSid);
1229
944
  } else f.credentials = "omit";
1230
- (null !== (o = r.fetch) && void 0 !== o ? o : _)(l, f).then(function (t) {
1231
- return t.json();
945
+ (null !== (o = r.fetch) && void 0 !== o ? o : P)(l, f).then(function (e) {
946
+ return e.json();
1232
947
  }).then(function (n) {
1233
948
  var o,
1234
949
  a,
1235
- u,
1236
950
  s,
951
+ u,
1237
952
  l,
1238
953
  f = n.gfv,
1239
954
  h = n.engineVersion,
1240
- d = W(W(W({
1241
- authorized: C.authorized,
1242
- cauldronApiUrl: C.cauldronApiUrl,
1243
- isTestServer: C.isTestServer,
1244
- renderCachingForIE8: C.renderCachingForIE8,
1245
- normalizationOnServer: C.normalizationOnServer,
1246
- normativeUrl: C.normativeUrl,
1247
- resourcesVersion: C.resourcesVersion,
1248
- konturDomains: C.konturDomains,
955
+ d = Q(Q(Q({
956
+ authorized: D.authorized,
957
+ cauldronApiUrl: D.cauldronApiUrl,
958
+ isTestServer: D.isTestServer,
959
+ renderCachingForIE8: D.renderCachingForIE8,
960
+ normalizationOnServer: D.normalizationOnServer,
961
+ normativeUrl: D.normativeUrl,
962
+ resourcesVersion: D.resourcesVersion,
963
+ konturDomains: D.konturDomains,
1249
964
  showNavigationSidebar: null === (o = r.showNavigationSidebar) || void 0 === o || o,
1250
965
  onRemoveAttachment: r.onRemoveAttachment
1251
966
  }, r), n), {}, {
1252
967
  gfv: f,
1253
968
  engineVersion: h,
1254
969
  feedbackEnabled: null !== (a = r.feedbackEnabled) && void 0 !== a ? a : n.feedbackEnabled,
1255
- isDisabledCleanForm: null !== (u = r.isDisabledCleanForm) && void 0 !== u && u,
1256
- isDisabledCloseButton: null !== (s = r.isDisabledCloseButton) && void 0 !== s && s,
970
+ isDisabledCleanForm: null !== (s = r.isDisabledCleanForm) && void 0 !== s && s,
971
+ isDisabledCloseButton: null !== (u = r.isDisabledCloseButton) && void 0 !== u && u,
1257
972
  isDisabledCloseAndSaveButton: null !== (l = r.isDisabledCloseAndSaveButton) && void 0 !== l && l,
1258
973
  resourceZone: c
1259
974
  });
1260
- !function (e, r) {
1261
- var n = e.gfv,
1262
- o = e.engineVersion,
1263
- i = e.resourcesVersion;
1264
- if (t.g.CF.entryPoint[n]) r();else {
1265
- var a = o && !t.g[o],
1266
- u = "true" === et("debug") ? "" : ".min",
1267
- s = [],
975
+ !function (t, r) {
976
+ var n = t.gfv,
977
+ o = t.engineVersion,
978
+ i = t.resourcesVersion;
979
+ if (e.g.CF.entryPoint[n]) r();else {
980
+ var a = o && !e.g[o],
981
+ s = "true" === re("debug") ? "" : ".min",
982
+ u = [],
1268
983
  c = {
1269
984
  v: i,
1270
- resourceZone: e.resourceZone
985
+ resourceZone: t.resourceZone
1271
986
  };
1272
- s.push(function (t) {
1273
- return x.styleSheet(Q(tt("static/public/styles/".concat(n).concat(u, ".css"), c)), !0, t);
1274
- }), s.push(function (t) {
1275
- return x.script(Q(tt("static/public/scripts/".concat(n).concat(u, ".js"), c)), t);
1276
- }), a && s.push(function (t) {
1277
- return x.styleSheet(Q(tt("static/public/styles/candy_".concat(o).concat(u, ".css"), c)), !1, t);
1278
- }, function (t) {
1279
- return x.script(Q(tt("static/public/scripts/candy_".concat(o).concat(u, ".js"), c)), t);
1280
- }), function (t, e) {
987
+ u.push(function (e) {
988
+ return R.styleSheet(ee(te("static/public/styles/".concat(n).concat(s, ".css"), c)), !0, e);
989
+ }), u.push(function (e) {
990
+ return R.script(ee(te("static/public/scripts/".concat(n).concat(s, ".js"), c)), e);
991
+ }), a && u.push(function (e) {
992
+ return R.styleSheet(ee(te("static/public/styles/candy_".concat(o).concat(s, ".css"), c)), !1, e);
993
+ }, function (e) {
994
+ return R.script(ee(te("static/public/scripts/candy_".concat(o).concat(s, ".js"), c)), e);
995
+ }), function (e, t) {
1281
996
  var r = 0;
1282
- t.forEach(function (n) {
997
+ e.forEach(function (n) {
1283
998
  n(function (n) {
1284
- if (r !== t.length) {
1285
- if (n) return r = t.length, void e(n);
1286
- (r += 1) === t.length && e();
999
+ if (r !== e.length) {
1000
+ if (n) return r = e.length, void t(n);
1001
+ (r += 1) === e.length && t();
1287
1002
  }
1288
1003
  });
1289
1004
  });
1290
- }(s, r);
1005
+ }(u, r);
1291
1006
  }
1292
1007
  }({
1293
1008
  gfv: d.gfv,
@@ -1296,21 +1011,21 @@
1296
1011
  resourcesVersion: d.resourcesVersion,
1297
1012
  theme: d.theme
1298
1013
  }, function (n) {
1299
- if (!n && t.g.CF.entryPoint[f]) {
1300
- var o = function (e) {
1301
- if (null != e) return t.g[e] && t.g[e].default;
1014
+ if (!n && e.g.CF.entryPoint[f]) {
1015
+ var o = function (t) {
1016
+ if (null != t) return e.g[t] && e.g[t].default;
1302
1017
  }(h);
1303
- !function (e, r, n) {
1018
+ !function (t, r, n) {
1304
1019
  var o;
1305
- (null !== (o = t.g.CF.entryPoint[r.gfv]) && void 0 !== o ? o : function (t) {
1306
- throw "string" == typeof t || null == t ? new Error(null != t ? t : "Undefined is not allowed") : t;
1307
- }("Form entry point ".concat(r.gfv, " not found.")))(e, r).then(function (t) {
1308
- var e = t.publicForm || function (t) {
1309
- return new Y(t);
1310
- }(t);
1311
- n(null, e);
1020
+ (null !== (o = e.g.CF.entryPoint[r.gfv]) && void 0 !== o ? o : function (e) {
1021
+ throw "string" == typeof e || null == e ? new Error(null != e ? e : "Undefined is not allowed") : e;
1022
+ }("Form entry point ".concat(r.gfv, " not found.")))(t, r).then(function (e) {
1023
+ var t = e.publicForm || function (e) {
1024
+ return new W(e);
1025
+ }(e);
1026
+ n(null, t);
1312
1027
  }).catch(n);
1313
- }(e, W(W({}, d), {}, {
1028
+ }(t, Q(Q({}, d), {}, {
1314
1029
  templatesApi: r.templatesApi,
1315
1030
  renderForm: o
1316
1031
  }), i);
@@ -1323,6 +1038,6 @@
1323
1038
  partialRenderingForIE8: ("{partialRenderingForIE8}", !1),
1324
1039
  keformsUrl: "{keformsUrl}"
1325
1040
  };
1326
- t.g.CF = rt;
1041
+ e.g.CF = ne;
1327
1042
  }();
1328
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0IiwiZSIsInIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwibGVuZ3RoIiwibiIsIkFycmF5IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIndpbmRvdyIsInNlbGYiLCJvIiwiaSIsIlN5bWJvbCIsImEiLCJCbG9iIiwidSIsInMiLCJjIiwibCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImYiLCJTdHJpbmciLCJ0ZXN0IiwiVHlwZUVycm9yIiwidG9Mb3dlckNhc2UiLCJoIiwiZCIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJpdGVyYXRvciIsInAiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiaXNBcnJheSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ5IiwiYm9keVVzZWQiLCJQcm9taXNlIiwicmVqZWN0IiwidiIsIm9ubG9hZCIsInJlc3VsdCIsIm9uZXJyb3IiLCJlcnJvciIsIm0iLCJGaWxlUmVhZGVyIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJiIiwic2xpY2UiLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsInNldCIsImJ1ZmZlciIsInciLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiRGF0YVZpZXciLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsImdldCIsInR5cGUiLCJibG9iIiwicmVzb2x2ZSIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJyZWFkQXNUZXh0IiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImZvcm1EYXRhIiwiTyIsImpzb24iLCJKU09OIiwicGFyc2UiLCJkZWxldGUiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsIkUiLCJib2R5IiwidXJsIiwiY3JlZGVudGlhbHMiLCJtZXRob2QiLCJtb2RlIiwic2lnbmFsIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImNhY2hlIiwicmVwbGFjZSIsIkRhdGUiLCJnZXRUaW1lIiwidHJpbSIsInNwbGl0IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiayIsInN0YXR1cyIsIm9rIiwic3RhdHVzVGV4dCIsImNsb25lIiwiaiIsInJlZGlyZWN0IiwiUmFuZ2VFcnJvciIsImxvY2F0aW9uIiwiQSIsIkRPTUV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJuYW1lIiwic3RhY2siLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIl8iLCJhYm9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInN1YnN0ciIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJzZXRUaW1lb3V0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJocmVmIiwid2l0aENyZWRlbnRpYWxzIiwicmVzcG9uc2VUeXBlIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJTIiwiUCIsImtleSIsIlQiLCJwb2x5ZmlsbCIsImZldGNoIiwiSGVhZGVycyIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIngiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiQiIsIkJvb2xlYW4iLCJDIiwiYXV0aG9yaXplZCIsImNhdWxkcm9uQXBpVXJsIiwiaXNUZXN0U2VydmVyIiwicmVuZGVyQ2FjaGluZ0ZvcklFOCIsIm5vcm1hbGl6YXRpb25PblNlcnZlciIsIm5vcm1hdGl2ZVVybCIsInJlc291cmNlc1ZlcnNpb24iLCJrb250dXJEb21haW5zIiwiSSIsIkwiLCJGIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJEIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJSIiwiVSIsImdldFByb3RvdHlwZU9mIiwiTSIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJ2YWx1ZU9mIiwiYmluZCIsIk4iLCJNYXAiLCJfd3JhcE5hdGl2ZVN1cGVyIiwiViIsIlJlZmVyZW5jZUVycm9yIiwiRyIsInoiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiYXJnIiwid3JhcCIsIl9pbnZva2UiLCJfX2F3YWl0IiwiZGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsInJldHVybiIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwiYXdyYXAiLCJBc3luY0l0ZXJhdG9yIiwiYXN5bmMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInN0b3AiLCJydmFsIiwiY29tcGxldGUiLCJmaW5pc2giLCJjYXRjaCIsImRlbGVnYXRlWWllbGQiLCJxIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiWiIsIiQiLCJYIiwicmVkdWNlIiwiWSIsImZvcm0iLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE1hbmFnZXIiLCJvbiIsIm9mZiIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJtb2RlbCIsImdldENodW5rIiwic2V0dGluZ3MiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZmlsbCIsImNvbmNhdCIsIkoiLCJXIiwiSyIsIlEiLCJDRiIsImtlZm9ybXNVcmwiLCJ0dCIsImVuY29kZVVSSUNvbXBvbmVudCIsImV0Iiwic2VhcmNoIiwiZmluZCIsImZyb20iLCJydCIsInN0YXJ0IiwibnMiLCJkcmFmdElkIiwiUmVnRXhwIiwiaG9zdCIsInJlc291cmNlWm9uZSIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsIkF1dGhvcml6YXRpb24iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwic2hvd05hdmlnYXRpb25TaWRlYmFyIiwib25SZW1vdmVBdHRhY2htZW50IiwiZmVlZGJhY2tFbmFibGVkIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJlbnRyeVBvaW50Iiwic3R5bGVTaGVldCIsInNjcmlwdCIsInRoZW1lIiwiZGVmYXVsdCIsInB1YmxpY0Zvcm0iLCJ0ZW1wbGF0ZXNBcGkiLCJyZW5kZXJGb3JtIiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY29uc3RydWN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3dyYXBOYXRpdmVTdXBlci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXNOYXRpdmVGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwidmFyIGdsb2JhbCA9XG4gICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmKSB8fFxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnbG9iYWwsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnbG9iYWwgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gIGJsb2I6XG4gICAgJ0ZpbGVSZWFkZXInIGluIGdsb2JhbCAmJlxuICAgICdCbG9iJyBpbiBnbG9iYWwgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGdsb2JhbCxcbiAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gZ2xvYmFsXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgIH0sIHRoaXMpXG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWVcbn1cblxuSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpXG4gICAgfVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChuYW1lKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpdGVtcy5wdXNoKHZhbHVlKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbmlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxuICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pXG4gIH1cbiAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICB9IGVsc2Uge1xuICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgfVxufVxuXG5mdW5jdGlvbiBCb2R5KCkge1xuICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAvKlxuICAgICAgZmV0Y2gtbW9jayB3cmFwcyB0aGUgUmVzcG9uc2Ugb2JqZWN0IGluIGFuIEVTNiBQcm94eSB0b1xuICAgICAgcHJvdmlkZSB1c2VmdWwgdGVzdCBoYXJuZXNzIGZlYXR1cmVzIHN1Y2ggYXMgZmx1c2guIEhvd2V2ZXIsIG9uXG4gICAgICBFUzUgYnJvd3NlcnMgd2l0aG91dCBmZXRjaCBvciBQcm94eSBzdXBwb3J0IHBvbGx5ZmlsbHMgbXVzdCBiZSB1c2VkO1xuICAgICAgdGhlIHByb3h5LXBvbGx5ZmlsbCBpcyB1bmFibGUgdG8gcHJveHkgYW4gYXR0cmlidXRlIHVubGVzcyBpdCBleGlzdHNcbiAgICAgIG9uIHRoZSBvYmplY3QgYmVmb3JlIHRoZSBQcm94eSBpcyBjcmVhdGVkLiBUaGlzIGNoYW5nZSBlbnN1cmVzXG4gICAgICBSZXNwb25zZS5ib2R5VXNlZCBleGlzdHMgb24gdGhlIGluc3RhbmNlLCB3aGlsZSBtYWludGFpbmluZyB0aGVcbiAgICAgIHNlbWFudGljIG9mIHNldHRpbmcgUmVxdWVzdC5ib2R5VXNlZCBpbiB0aGUgY29uc3RydWN0b3IgYmVmb3JlXG4gICAgICBfaW5pdEJvZHkgaXMgY2FsbGVkLlxuICAgICovXG4gICAgdGhpcy5ib2R5VXNlZCA9IHRoaXMuYm9keVVzZWRcbiAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCArIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWxcbiAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICB9XG4gIHRoaXMuX2luaXRCb2R5KGJvZHkpXG5cbiAgaWYgKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgaWYgKG9wdGlvbnMuY2FjaGUgPT09ICduby1zdG9yZScgfHwgb3B0aW9ucy5jYWNoZSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgLy8gU2VhcmNoIGZvciBhICdfJyBwYXJhbWV0ZXIgaW4gdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgdmFyIHJlUGFyYW1TZWFyY2ggPSAvKFs/Jl0pXz1bXiZdKi9cbiAgICAgIGlmIChyZVBhcmFtU2VhcmNoLnRlc3QodGhpcy51cmwpKSB7XG4gICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIHRoZW4gc2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLnVybC5yZXBsYWNlKHJlUGFyYW1TZWFyY2gsICckMV89JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBhIG5ldyAnXycgcGFyYW1ldGVyIHRvIHRoZSBlbmQgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHZhciByZVF1ZXJ5U3RyaW5nID0gL1xcPy9cbiAgICAgICAgdGhpcy51cmwgKz0gKHJlUXVlcnlTdHJpbmcudGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpICsgJ189JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxufVxuXG5mdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gIGJvZHlcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcmJylcbiAgICAuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGZvcm1cbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gIC8vIFJlcGxhY2UgaW5zdGFuY2VzIG9mIFxcclxcbiBhbmQgXFxuIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBvciBob3Jpem9udGFsIHRhYiB3aXRoIGEgc3BhY2VcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJylcbiAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9pc3N1ZXMvNzQ4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy83NTFcbiAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgIC5zcGxpdCgnXFxyJylcbiAgICAubWFwKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICB9KVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gaGVhZGVyc1xufVxuXG5Cb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzXG4gIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgdGhpcy5zdGF0dXNUZXh0ID0gb3B0aW9ucy5zdGF0dXNUZXh0ID09PSB1bmRlZmluZWQgPyAnJyA6ICcnICsgb3B0aW9ucy5zdGF0dXNUZXh0XG4gIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xuICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbn1cblxuQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSlcblxuUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgIHVybDogdGhpcy51cmxcbiAgfSlcbn1cblxuUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbnZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5SZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbn1cblxuZXhwb3J0IHZhciBET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGdsb2JhbC5sb2NhdGlvbi5ocmVmID8gZ2xvYmFsLmxvY2F0aW9uLmhyZWYgOiB1cmxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCBmaXhVcmwocmVxdWVzdC51cmwpLCB0cnVlKVxuXG4gICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhocikge1xuICAgICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdXBwb3J0LmFycmF5QnVmZmVyICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpLmluZGV4T2YoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSkge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG5cbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gRE9ORSAoc3VjY2VzcyBvciBmYWlsdXJlKVxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgfSlcbn1cblxuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG5cbmlmICghZ2xvYmFsLmZldGNoKSB7XG4gIGdsb2JhbC5mZXRjaCA9IGZldGNoXG4gIGdsb2JhbC5IZWFkZXJzID0gSGVhZGVyc1xuICBnbG9iYWwuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZ2xvYmFsLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBcIntyZXNvdXJjZXNWZXJzaW9ufVwiLFxuICAgIGtvbnR1ckRvbWFpbnM6IFwie2tvbnR1ckRvbWFpbnN9XCIsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgZnJvbSBcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICB9IGVsc2Uge1xuICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgIHZhciBhID0gW251bGxdO1xuICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICBpZiAoQ2xhc3MpIHNldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSIsImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVGdW5jdGlvbiBmcm9tIFwiLi9pc05hdGl2ZUZ1bmN0aW9uLmpzXCI7XG5pbXBvcnQgY29uc3RydWN0IGZyb20gXCIuL2NvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gXCJmdW5jdGlvblwiID8gbmV3IE1hcCgpIDogdW5kZWZpbmVkO1xuXG4gIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFpc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzO1xuXG4gICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuXG4gICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IFdyYXBwZXIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgfTtcblxuICByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpICE9PSAtMTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIk9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlID8/IFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIiArIChtZXNzYWdlICE9IHVuZGVmaW5lZCA/IFwiOiBcIiArIG1lc3NhZ2UgOiBcIlwiKSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgRW1wbG95ZWUsXG4gICAgRW1wbG95ZWVMaXN0LFxuICAgIEdldEVtcGxveWVlTGlzdFJlcXVlc3QsXG4gICAgR2V0V29ya2luZ0V2ZW50TGlzdFJlcXVlc3QsXG4gICAgV29ya2luZ0V2ZW50TGlzdCxcbn0gZnJvbSBcIkBza2Jrb250dXIvc3RhZmYtc2VsZWN0b3Itd2lkZ2V0XCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwiRW5naW5lL3NyYy9FbmdpbmUvRm9ybS9Nb2RlbENoYW5nZUV2ZW50TGlzdGVuZXJcIjtcblxuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vRXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXAgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvRm9ybVBhcnRzL1RvdXIvVG91clR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nUGF0aCwgTW9kZWxWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxIb29rRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L0V4dGVybmFsRXZlbnRzL0V4dGVybmFsSG9va0Z1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5TW9kZWxDaHVuayB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RlbFN0b3JpbmcvTW9kZWxDaHVua1wiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFF1ZXJ5UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvUGlja2xpc3RzL1BpY2tsaXN0VHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHsgTW9kZWxFdmVudHNMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvTW9kZWxFdmVudHMvTW9kZWxFdmVudFwiO1xuaW1wb3J0IHsgRGlnZXN0UXVlcnlGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudC9UeXBlcy9EaWdlc3RRdWVyeUZpbHRlclwiO1xuaW1wb3J0IHsgSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtTW9kZWxBY2Nlc3NvclwiO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGFsTWFuYWdlci9JTW9kYWxTdGF0ZVwiO1xuaW1wb3J0IHsgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL01vZGVsUGF0aFwiO1xuaW1wb3J0IHsgQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcywgSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSW5pdFNlY3Rpb25MaWdodGJveFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuaW1wb3J0IHsgRmlhc0FwaSwgRmlhc0NsaWVudEluaXRPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL1ZhbHVlRWRpdG9ycy9GaWFzL0ZpYXNJbnB1dC9GaWFzQXBpXCI7XG5pbXBvcnQgeyBJbnN0YW5jZXNEZWxldGluZ1J1bGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL0luc3RhbmNlc0RlbGV0aW5nL0luc3RhbmNlc0RlbGV0aW5nUnVsZVwiO1xuaW1wb3J0IHsgQ29tYmluZUZ1ZlJlc3VsdCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvRHJhZnRBY3Rpb25zL0NvbWJpbmVGdWZSZXN1bHRcIjtcbmltcG9ydCB7IElDYW5keUNvbXBvbmVudEhhbmRsZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db21wb25lbnRIYW5kbGVSZWdpc3RyeS9JQ2FuZHlDb21wb25lbnRIYW5kbGVcIjtcbmltcG9ydCB7IE5hdmlnYXRpb25QYXRoTWFwcGVyIH0gZnJvbSBcIi4uLy4uL0luamVjdGFibGVNb2R1bGVzL0luamVjdGFibGVFbmdpbmVNb2R1bGVzXCI7XG5pbXBvcnQgeyBJbXBvcnRFbXBsb3llckRvY3VtZW50c09wdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vU3RhZmZTZXJ2aWNlSW50ZWdyYXRpb24vRW1wbG95ZWVTZXJ2aWNlVHlwZXNcIjtcbmltcG9ydCB7IFRhYkluZm9zU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvTXVsdGlDb250cm9scy9UYWJzL1N0b3JlL1RhYkluZm9zU3RhdGVcIjtcblxuaW1wb3J0IHsgSUxlZ2FjeUZvcm0gfSBmcm9tIFwiLi9JTGVnYWN5Rm9ybVwiO1xuXG5leHBvcnQgdHlwZSBNb2RlbEV2ZW50UGF0aCA9XG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl1cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxDaGFuZ2VFdmVudFBhdGgocGF0aD86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogTW9kZWxFdmVudFBhdGgge1xuICAgIGlmIChmaWVsZE5hbWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGgsIGZpZWxkTmFtZV07XG4gICAgfVxuICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXTtcbn1cblxuZnVuY3Rpb24gbWFwQ2h1bmtWYWx1ZXMoY2h1bms6IFJlYWRvbmx5TW9kZWxDaHVuayk6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjaHVuaylcbiAgICAgICAgLmZpbHRlcihwYXRoID0+IGNodW5rW3BhdGhdICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaHVua1twYXRoXSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNodW5rW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBbcGF0aF06IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlQ2h1bmtWYWx1ZXMoY2h1bmtzOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+KTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICByZXR1cm4gY2h1bmtzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgY2h1bmspID0+ICh7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAuLi5jaHVuayxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuY2xhc3MgTGVnYWN5UHVibGljRm9ybSBpbXBsZW1lbnRzIElQdWJsaWNGb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm06IElMZWdhY3lGb3JtO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvcm06IElMZWdhY3lGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIG5hdmlnYXRlQnlIaWdobGFuZGVyUGF0aHMocGF0aHM6IHN0cmluZ1tdKTogUHJvbWlzZTxJQ2FuZHlDb21wb25lbnRIYW5kbGUgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hdmlnYXRpb25QYXRoTWFwcGVyKCk6IE5hdmlnYXRpb25QYXRoTWFwcGVyIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGJhdGNoVXBkYXRlKHVwZGF0ZVByb2M6ICh1cGRhdGVBY2Nlc3NvcjogSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yKSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBQYXJ0aWFsPFNlcnZlckVycm9yTG9nPik6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdmFsaWRhdGVDaGlsZHJlbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIF9fSU5URVJOQUxfX2ltcG9ydEZyb21FbXBsb3llZVNlcnZpY2UoKTogUHJvbWlzZTxFbXBsb3llZVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfX0lOVEVSTkFMX19nZXRTZWxlY3RGdW5jdGlvbkZvckRpc2FibGVFbXBsb3llZUluU1MoXG4gICAgICAgIHBhdGhTcGVjOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPChlbXBsb3llZTogRW1wbG95ZWUpID0+IGJvb2xlYW4+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1vZGFsVW5pdE9wZW5lZEluc3RhbmNlKHBhZ2VJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUYWJzU3RhdGUoKTogVGFiSW5mb3NTdGF0ZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuYXZpZ2F0ZShuYXZpZ2F0aW9uUGF0aDogc3RyaW5nKTogUHJvbWlzZTxJQ2FuZHlDb21wb25lbnRIYW5kbGUgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGltcG9ydEVtcGxveWVyRG9jdW1lbnRzKG9wdGlvbnM6IEltcG9ydEVtcGxveWVyRG9jdW1lbnRzT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1wb3J0RW1wbG95ZWVzKGVtcGxveWVlczogRW1wbG95ZWVbXSwgb3B0aW9ucz86IHsgc2NlbmFyaW8/OiBzdHJpbmcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnQocHJpbnRUeXBlOiBQcmludFR5cGUsIGJvZHk/OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG4gICAgcHVibGljIHJ1bk1hc3NBY3Rpb24oYWN0aW9uSWQ6IHN0cmluZywgcGFyYW1ldGVycz86IE1hc3NBY3Rpb25QYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeUdJZChnSWQ6IHN0cmluZywgZmlsdGVyPzogRGlnZXN0UXVlcnlGaWx0ZXIpOiBQcm9taXNlPFBpY2tsaXN0UXVlcnlSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnBpY2tsaXN0c1Byb3ZpZGVyLmdldERpZ2VzdEFwaVBpY2tsaXN0KGdJZCkucXVlcnkoZmlsdGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb24oZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmYoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RlbENoYW5nZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgbGlzdGVuZXI6IHVua25vd24pOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICB0aHJvdyBFcnJvcihcImZvcm0ub25Nb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZvcm0uY2hhbmdlU2V0LnN0b3BBdXRvc2VuZCgpO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnVubW91bnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS51bm1vdW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRvdXJTdGVwcygpOiBTdGVwW10ge1xuICAgICAgICAvLyBGb3Igb2xkIGtld2ViXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUg0K3RgtC+INCyINGB0YLQsNGA0YvRhSDQtNCy0LjQttC60LDRhSDRgtGD0YIg0YLQsNC60L7QuSDQstGL0LfQvtCyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnZhbGlkYXRvci52YWxpZGF0ZUFsbChrZXlzKTtcbiAgICB9XG4gICAgcHVibGljIGdldEFkZGl0aW9uYWxFbXBsb3llZUluZm8oZmlsdGVyczogR2V0RW1wbG95ZWVMaXN0UmVxdWVzdCk6IFByb21pc2U8RW1wbG95ZWVMaXN0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVsb2FkSW5uZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V29ya2luZ0V2ZW50c0ZvckVtcGxveWVlKGZpbHRlcnM6IEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0KTogUHJvbWlzZTxXb3JraW5nRXZlbnRMaXN0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlcnJvckNvdW50ID0gdGhpcy5mb3JtLm1vZGVsLmdldCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIik7XG4gICAgICAgIHJldHVybiBlcnJvckNvdW50ICE9IHVuZGVmaW5lZCAmJiBlcnJvckNvdW50ID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0pOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZywgdmFsdWU6IE1vZGVsVmFsdWUpOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KFxuICAgICAgICBwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcgfCB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSxcbiAgICAgICAgdmFsdWU/OiBNb2RlbFZhbHVlXG4gICAgKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXRoT3JNb2RlbENodW5rICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBhdGhPck1vZGVsQ2h1bmspXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJDaHVuayA9IE9iamVjdC5rZXlzKHBhdGhPck1vZGVsQ2h1bmspLnJlZHVjZTxSZWFkb25seU1vZGVsQ2h1bms+KFxuICAgICAgICAgICAgICAgIChyZXN1bHQsIHBhdGgpID0+ICh7IFtwYXRoXTogeyB2YWx1ZTogcGF0aE9yTW9kZWxDaHVua1twYXRoXSB9LCAuLi5yZXN1bHQgfSksXG4gICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5maWxsKGlubmVyQ2h1bmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuc2V0KHBhdGhPck1vZGVsQ2h1bmssIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5zZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIG9iamVjdCB3aXRoIHBhdGgtdmFsdWUgcGFpcnNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldChwYXRoT3JBcnJheTogc3RyaW5nIHwgc3RyaW5nW10pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoT3JBcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhcbiAgICAgICAgICAgICAgICBwYXRoT3JBcnJheVxuICAgICAgICAgICAgICAgICAgICAubWFwKHBhdGggPT4gbWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGgpKSlcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlPEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4+KChyZXN1bHQsIGFycmF5KSA9PiByZXN1bHQuY29uY2F0KGFycmF5KSwgW10pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JBcnJheSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoT3JBcnJheSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoT3JBcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLmdldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3IgYXJyYXkgb2YgcGF0aHNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKHBhdGg6IHN0cmluZyk6IE1vZGVsVmFsdWUge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5tb2RlbC5nZXQocGF0aCwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weVN1YnRyZWUoXG4gICAgICAgIHNvdXJjZUJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIHRhcmdldEJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIGRvTm90Q29weVBhdGhzPzogc3RyaW5nW11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSW5zdGFuY2UocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW4ocGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1dWlkR2VuZXJhdGUoKTogc3RyaW5nIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd01vZGFsKG9wdGlvbnM6IE1vZGFsT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTZWN0aW9uKG9wdGlvbnM6IEluaXRTZWN0aW9uRm9ybUxpZ2h0Ym94T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxsSW5pdFNlY3Rpb24ob3B0aW9uczogQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVGaWFzQXBpQ2xpZW50KG9wdGlvbnM6IEZpYXNDbGllbnRJbml0T3B0aW9ucyk6IEZpYXNBcGkge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuRW1wbG95ZWVFZGl0b3IoZW1wbG95ZWVJZDogc3RyaW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlKHBhdGg6IHN0cmluZywgaW5zdGFuY2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZXMocGF0aDogc3RyaW5nLCBpbnN0YW5jZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzT25Db250cm9sSWZFeGlzdChwYXRoOiBCaW5kaW5nUGF0aCk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdXRvRmllbGRzVG9BdXRvVmFsdWUocGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVuc3VyZUluc3RhbmNlRnVsbHlMb2FkZWQoXG4gICAgICAgIGJpbmRpbmdQYXRoOiBzdHJpbmcgfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICAuLi5pbnN0YW5jZXM6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjdXN0b21Ob3JtYWxpemUobm9ybWFsaXplcklkOiBzdHJpbmcsIHBhdGhQcmVmaXhlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlc0J5UnVsZXMocnVsZXM6IEluc3RhbmNlc0RlbGV0aW5nUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURucCgpOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm06IElGb3JtKTogSVB1YmxpY0Zvcm0ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbmV3IExlZ2FjeVB1YmxpY0Zvcm0oZm9ybSBhcyBJTGVnYWN5Rm9ybSk7XG59XG4iLCIvKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgbm8tYW55IG5vLXVuc2FmZS1hbnkgKi9cbmltcG9ydCB7IGZldGNoIH0gZnJvbSBcIndoYXR3Zy1mZXRjaFwiO1xuaW1wb3J0IHsgQWxsSWNvbk5hbWVzIH0gZnJvbSBcInJlYWN0LXVpXCI7XG5cbmltcG9ydCB7IEVycm9yRmlyc3RDYWxsYmFjaywgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHsgTG9hZEludG9Eb2N1bWVudCB9IGZyb20gXCIuLi8uLi9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQgfSBmcm9tIFwiLi4vVHlwZXMvSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IENsaWVudERyYWZ0SW5mb1Jlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2VcIjtcbmltcG9ydCB7IGdldENsaWVudERyYWZ0SW5mb1VybCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0dldENsaWVudERyYWZ0SW5mb1VybFwiO1xuaW1wb3J0IHsgQVVPT3B0aW9ucyB9IGZyb20gXCIuLi9UeXBlcy9BVU9PcHRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IExheW91dEV2ZW50c1N0YXRpYyB9IGZyb20gXCIuLi8uLi9Db250cm9scy9JbnRlcm5hbHMvTGF5b3V0RXZlbnRzL0xheW91dEV2ZW50c1wiO1xuXG5pbXBvcnQgeyBjbGllbnRTZXR0aW5ncyB9IGZyb20gXCIuL0NsaWVudFNldHRpbmdzXCI7XG5pbXBvcnQgeyBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtIH0gZnJvbSBcIi4vTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtXCI7XG5cbnR5cGUgRm9ybUNvbnRhaW5lciA9IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuXG50eXBlIEVuZ2luZUVudHJ5UG9pbnQgPSAoKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkRlc2NyaXB0aW9uIHtcbiAgICBpY29uOiBBbGxJY29uTmFtZXM7XG4gICAgdGV4dD86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpO1xuICAgIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG4gICAgaGludD86IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHRpZD86IHN0cmluZztcbiAgICB3ZWlnaHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG4gICAgcGFuZWxBY3Rpb25zPzogQWN0aW9uRGVzY3JpcHRpb25bXTtcbn1cblxudHlwZSBTdGFydEZvcm1GdW5jID0gKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBleHRlbmRlZFNldHRpbmdzOiBSZW5kZXJGb3JtU2V0dGluZ3MpID0+IFByb21pc2U8SUZvcm0+O1xuXG5pbnRlcmZhY2UgQ2FuZHlHbG9iYWxJbmplY3RlZFZhciB7XG4gICAgc3RhcnQ6IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucywgY2FsbGJhY2s/OiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+KSA9PiB2b2lkO1xuICAgIGtlZm9ybXNVcmw/OiBzdHJpbmc7XG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogYm9vbGVhbjtcbiAgICBlbnRyeVBvaW50OiB7IFtrZXk6IHN0cmluZ106IFN0YXJ0Rm9ybUZ1bmMgfTtcbiAgICBsb2FkRXJyb3I/OiB1bmtub3duO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gICAgbmFtZXNwYWNlIE5vZGVKUyB7XG4gICAgICAgIGludGVyZmFjZSBHbG9iYWwge1xuICAgICAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmRlY2xhcmUgY29uc3QgZ2xvYmFsOiBXaW5kb3c7XG5cbmZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvKiBlbXB0eSAqL1xufVxuXG5mdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVybChyZWxhdGl2ZVVybDogc3RyaW5nID0gXCJcIik6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVVybCA9IGdsb2JhbC5DRi5rZWZvcm1zVXJsIHx8IFwiXCI7XG5cbiAgICByZXR1cm4gYCR7YmFzZVVybH0vJHtyZWxhdGl2ZVVybH1gLnJlcGxhY2UoLyhbXjpdKVxcL3syLH0vZywgXCIkMS9cIik7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHVuZGVmaW5lZCB8IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5UGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBwYXJhbU5hbWUgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gcGFyYW1zW3BhcmFtTmFtZV07XG4gICAgICAgIGlmIChwYXJhbVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcXVlcnlQYXJ0cy5wdXNoKGAke3BhcmFtTmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSl9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHF1ZXJ5UGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aCArIFwiP1wiICsgcXVlcnlQYXJ0cy5qb2luKFwiJlwiKTtcbn1cblxuZnVuY3Rpb24gaXNBbGxvd2VkKGRvbWFpbnM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKD86JHtkb21haW5zLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuXCIpLnJlcGxhY2UoL1xcKi9nLCBcIlthLXowLTktLl9dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBwYW5lbEFjdGlvbnM/OiBBY3Rpb25EZXNjcmlwdGlvbltdO1xuICAgIGV2ZW50RW1pdHRlcj86IExheW91dEV2ZW50c1N0YXRpYztcbiAgICBlbXBsb3llcklkPzogc3RyaW5nO1xuICAgIHNob3dOYXZpZ2F0aW9uU2lkZWJhcj86IGJvb2xlYW47XG4gICAgb25SZW1vdmVBdHRhY2htZW50PzogKCkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghaXNBbGxvd2VkKGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChnZXRDbGllbnREcmFmdEluZm9VcmwoeyBuczogbnMsIGRyYWZ0SWQ6IGRyYWZ0SWQgfSkpLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gY2xpZW50RHJhZnRJbmZvLmdmdjtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXplZDogY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCxcbiAgICAgICAgICAgICAgICBjYXVsZHJvbkFwaVVybDogY2xpZW50U2V0dGluZ3MuY2F1bGRyb25BcGlVcmwsXG4gICAgICAgICAgICAgICAgaXNUZXN0U2VydmVyOiBjbGllbnRTZXR0aW5ncy5pc1Rlc3RTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogY2xpZW50U2V0dGluZ3MucmVuZGVyQ2FjaGluZ0ZvcklFOCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IGNsaWVudFNldHRpbmdzLm5vcm1hbGl6YXRpb25PblNlcnZlcixcbiAgICAgICAgICAgICAgICBub3JtYXRpdmVVcmw6IGNsaWVudFNldHRpbmdzLm5vcm1hdGl2ZVVybCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBjbGllbnRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGtvbnR1ckRvbWFpbnM6IGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMsXG4gICAgICAgICAgICAgICAgc2hvd05hdmlnYXRpb25TaWRlYmFyOiBvcHRpb25zLnNob3dOYXZpZ2F0aW9uU2lkZWJhciA/PyB0cnVlLFxuICAgICAgICAgICAgICAgIG9uUmVtb3ZlQXR0YWNobWVudDogb3B0aW9ucy5vblJlbW92ZUF0dGFjaG1lbnQsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi5jbGllbnREcmFmdEluZm8sXG4gICAgICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IG9wdGlvbnMuZmVlZGJhY2tFbmFibGVkID8/IGNsaWVudERyYWZ0SW5mby5mZWVkYmFja0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsZWFuRm9ybTogb3B0aW9ucy5pc0Rpc2FibGVkQ2xlYW5Gb3JtID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbG9hZEZvcm0oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBnZnY6IGV4dGVuZGVkU2V0dGluZ3MuZ2Z2LFxuICAgICAgICAgICAgICAgICAgICBlbmdpbmVWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLmVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1ZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2VzVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgdGhlbWU6IGV4dGVuZGVkU2V0dGluZ3MudGhlbWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkRXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEVycm9yIHx8ICFnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoYGR5bmFtaWMgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciBnZnYgJHtnZnZ9YCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmV4dGVuZGVkU2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzQXBpOiBvcHRpb25zLnRlbXBsYXRlc0FwaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtOiByZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5jb25zdCBDYW5keUNsaWVudEV4cG9ydHM6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIgPSB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVudHJ5UG9pbnQ6IHt9LFxuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4fVwiKSxcbiAgICBrZWZvcm1zVXJsOiBcIntrZWZvcm1zVXJsfVwiLFxufTtcblxuZ2xvYmFsLkNGID0gQ2FuZHlDbGllbnRFeHBvcnRzO1xuXG5leHBvcnQgeyBDYW5keUNsaWVudEV4cG9ydHMgfTtcbiIsImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcblxuICBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcblxuICB2YXIgX3MsIF9lO1xuXG4gIHRyeSB7XG4gICAgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsImltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4uL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnREcmFmdEluZm9VcmwoZHJhZnRJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAvLyBOT1RFINCt0YLQsCDRhNGD0L3QutGG0LjRjyDQvtCx0YrRj9Cy0LvQtdC90LAg0L7RgtC00LXQu9GM0L3Qviwg0LjQsdC+INC+0L3QsCDQstGF0L7QtNC40YIg0LIg0YHQvtGB0YLQsNCyIGNsaWVudC5qcyDQuFxuICAgIC8vINC90LUg0LTQvtC70LbQvdC+INC/0YDQvtC40YHRhdC+0LTQuNGC0Ywg0YPRgtC10LbQtdC70LXQvdC40Y8gY2xpZW50LmpzLdCwXG4gICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0SWQubnN9L2RyYWZ0cy8ke2RyYWZ0SWQuZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gO1xufVxuIiwiLyoqKlxuICog0KHRgtGA0L7Qs9C+0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90LDRjyDQt9Cw0LzQtdC90LAg0LTQu9GPIEJvb2xlYW4oLi4uKVxuICog0J7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8gWy4uLl0uZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVVua25vd25FcnJvcihlcnJvcjogdW5rbm93bik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvcj8uW1wibWVzc2FnZVwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGFzc2VydHMgaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIGlmICghaXNOb3ROdWxsT3JVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgbXVzdCBiZSBkZWZpbmVkYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IpOiBuZXZlciB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IG1lc3NhZ2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG1lc3NhZ2U7XG4gICAgfVxufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUxlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBoYXZlIG1pbmltYWwgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bmV2ZXJBcmd1bWVudH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuQXN5bmNBY3Rpb24oYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIGFjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0ID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgc3RyaW5nIHtcbiAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHkoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JXaGl0ZVNwYWNlKGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogaW5wdXQgaXMgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dC50cmltKCkgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltTGFzdFNsYXNoKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNsaWNlKC0xKSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4odmFsdWU6IFQpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztFQUNBLElBQUlBLENBQUEsR0FBc0IsQ0FBQztFQ0RaLFNBQVNDLEVBQWdCRCxDQUFBLEVBQUtDLENBQUEsRUFBS0MsQ0FBQTtJQVloRCxPQVhJRCxDQUFBLElBQU9ELENBQUEsR0FDVEcsTUFBQSxDQUFPQyxjQUFBLENBQWVKLENBQUEsRUFBS0MsQ0FBQSxFQUFLO01BQzlCSSxLQUFBLEVBQU9ILENBQUE7TUFDUEksVUFBQSxHQUFZO01BQ1pDLFlBQUEsR0FBYztNQUNkQyxRQUFBLEdBQVU7SUFBQSxLQUdaUixDQUFBLENBQUlDLENBQUEsSUFBT0MsQ0FBQSxFQUdORixDQUNUO0VBQUE7RUNiZSxTQUFTRSxFQUFrQkYsQ0FBQSxFQUFLQyxDQUFBO0lBQUEsQ0FDbEMsUUFBUEEsQ0FBQSxJQUFlQSxDQUFBLEdBQU1ELENBQUEsQ0FBSVMsTUFBQSxNQUFRUixDQUFBLEdBQU1ELENBQUEsQ0FBSVMsTUFBQTtJQUUvQyxLQUFLLElBQUlQLENBQUEsR0FBSSxHQUFHUSxDQUFBLEdBQU8sSUFBSUMsS0FBQSxDQUFNVixDQUFBLEdBQU1DLENBQUEsR0FBSUQsQ0FBQSxF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
1043
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJyIiwibiIsInRvUHJpbWl0aXZlIiwibyIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwibGVuZ3RoIiwiQXJyYXkiLCJnIiwiZ2xvYmFsVGhpcyIsIkZ1bmN0aW9uIiwid2luZG93IiwiaSIsInNlbGYiLCJhIiwicyIsInUiLCJCbG9iIiwiYyIsImwiLCJmIiwiaCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsInRvU3RyaW5nIiwiZCIsInRlc3QiLCJ0b0xvd2VyQ2FzZSIsInAiLCJ5IiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsIm0iLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiaXNBcnJheSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ2IiwiX25vQm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImIiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJ3IiwiRmlsZVJlYWRlciIsInJlYWRBc0FycmF5QnVmZmVyIiwic2xpY2UiLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsInNldCIsImJ1ZmZlciIsIkUiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiRGF0YVZpZXciLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsImdldCIsInR5cGUiLCJibG9iIiwicmVzb2x2ZSIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJleGVjIiwicmVhZEFzVGV4dCIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJmb3JtRGF0YSIsImsiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwiZGVsZXRlIiwiaGFzIiwiaGFzT3duUHJvcGVydHkiLCJrZXlzIiwicHVzaCIsInZhbHVlcyIsImVudHJpZXMiLCJPIiwiQSIsImJvZHkiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1ldGhvZCIsIm1vZGUiLCJzaWduYWwiLCJ0b1VwcGVyQ2FzZSIsIkFib3J0Q29udHJvbGxlciIsInJlZmVycmVyIiwiY2FjaGUiLCJyZXBsYWNlIiwiRGF0ZSIsImdldFRpbWUiLCJ0cmltIiwic3BsaXQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJqIiwic3RhdHVzIiwiUmFuZ2VFcnJvciIsIm9rIiwic3RhdHVzVGV4dCIsImNsb25lIiwiVCIsInJlZGlyZWN0IiwibG9jYXRpb24iLCJTIiwiRE9NRXhjZXB0aW9uIiwibWVzc2FnZSIsIm5hbWUiLCJzdGFjayIsImNyZWF0ZSIsIlAiLCJhYm9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInN1YnN0ciIsImNvbnNvbGUiLCJ3YXJuIiwicmVzcG9uc2VVUkwiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0Iiwib3BlbiIsImhyZWYiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJIZWFkZXJzIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJfIiwiQiIsImtleSIsIkMiLCJwb2x5ZmlsbCIsImZldGNoIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiUiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJkb2N1bWVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJJIiwiQm9vbGVhbiIsIkQiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJVIiwieCIsImFyZ3VtZW50cyIsImFwcGx5IiwiRiIsInNldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJiaW5kIiwiX19wcm90b19fIiwiTSIsIk4iLCJMIiwidmFsdWVPZiIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiViIsIk1hcCIsIl93cmFwTmF0aXZlU3VwZXIiLCJSZWZlcmVuY2VFcnJvciIsInEiLCJIIiwiJCIsIlgiLCJmaWx0ZXIiLCJKIiwicmVkdWNlIiwiRyIsIlciLCJmb3JtIiwicmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIndyYXAiLCJwcmV2Iiwic3RvcCIsInBpY2tsaXN0c1Byb3ZpZGVyIiwiZ2V0RGlnZXN0QXBpUGlja2xpc3QiLCJxdWVyeSIsImV2ZW50TWFuYWdlciIsIm9uIiwib2ZmIiwiY2hhbmdlU2V0Iiwic3RvcEF1dG9zZW5kIiwidW5tb3VudCIsIm1vZGVsIiwiZ2V0Q2h1bmsiLCJzZXR0aW5ncyIsImZvcm1Sb290IiwidmFsaWRhdG9yIiwidmFsaWRhdGVBbGwiLCJmaWxsIiwiY29uY2F0IiwiWSIsImVlIiwiQ0YiLCJrZWZvcm1zVXJsIiwidGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJyZSIsInNlYXJjaCIsImZpbmQiLCJyZXR1cm4iLCJmcm9tIiwibmUiLCJzdGFydCIsIm5zIiwiZHJhZnRJZCIsIlJlZ0V4cCIsImhvc3QiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImF1dGhTaWQiLCJBdXRob3JpemF0aW9uIiwiZ2Z2IiwiZW5naW5lVmVyc2lvbiIsIlEiLCJzaG93TmF2aWdhdGlvblNpZGViYXIiLCJvblJlbW92ZUF0dGFjaG1lbnQiLCJmZWVkYmFja0VuYWJsZWQiLCJpc0Rpc2FibGVkQ2xlYW5Gb3JtIiwiaXNEaXNhYmxlZENsb3NlQnV0dG9uIiwiaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbiIsImVudHJ5UG9pbnQiLCJzdHlsZVNoZWV0Iiwic2NyaXB0IiwidGhlbWUiLCJkZWZhdWx0IiwicHVibGljRm9ybSIsImNhdGNoIiwidGVtcGxhdGVzQXBpIiwicmVuZGVyRm9ybSIsInBhcnRpYWxSZW5kZXJpbmdGb3JJRTgiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvSGVscGVycy9Mb2FkSW50b0RvY3VtZW50LnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudFNldHRpbmdzLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3dyYXBOYXRpdmVTdXBlci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXNOYXRpdmVGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY29uc3RydWN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0Vycm9ycy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50LnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmwudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL1R5cGluZ1V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4iLCJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxuZXhwb3J0IHsgdG9Qcm9wZXJ0eUtleSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxuZXhwb3J0IHsgdG9QcmltaXRpdmUgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5leHBvcnQgeyBfZGVmaW5lUHJvcGVydHkgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5leHBvcnQgeyBfYXJyYXlMaWtlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbnZhciBnID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKSB8fFxuICB7fVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZyAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgYmxvYjpcbiAgICAnRmlsZVJlYWRlcicgaW4gZyAmJlxuICAgICdCbG9iJyBpbiBnICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnLFxuICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIZWFkZXJzIGNvbnN0cnVjdG9yOiBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kJyArIGhlYWRlci5sZW5ndGgpXG4gICAgICB9XG4gICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICB9XG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKG5hbWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbn1cblxuZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICBpZiAoYm9keS5fbm9Cb2R5KSByZXR1cm5cbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICB2YXIgbWF0Y2ggPSAvY2hhcnNldD0oW0EtWmEtejAtOV8tXSspLy5leGVjKGJsb2IudHlwZSlcbiAgdmFyIGVuY29kaW5nID0gbWF0Y2ggPyBtYXRjaFsxXSA6ICd1dGYtOCdcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgfVxuICByZXR1cm4gY2hhcnMuam9pbignJylcbn1cblxuZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gIGlmIChidWYuc2xpY2UpIHtcbiAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gIH0gZWxzZSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICB9XG59XG5cbmZ1bmN0aW9uIEJvZHkoKSB7XG4gIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgIC8qXG4gICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICBwcm92aWRlIHVzZWZ1bCB0ZXN0IGhhcm5lc3MgZmVhdHVyZXMgc3VjaCBhcyBmbHVzaC4gSG93ZXZlciwgb25cbiAgICAgIEVTNSBicm93c2VycyB3aXRob3V0IGZldGNoIG9yIFByb3h5IHN1cHBvcnQgcG9sbHlmaWxscyBtdXN0IGJlIHVzZWQ7XG4gICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgb24gdGhlIG9iamVjdCBiZWZvcmUgdGhlIFByb3h5IGlzIGNyZWF0ZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXNcbiAgICAgIFJlc3BvbnNlLmJvZHlVc2VkIGV4aXN0cyBvbiB0aGUgaW5zdGFuY2UsIHdoaWxlIG1haW50YWluaW5nIHRoZVxuICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgIF9pbml0Qm9keSBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgIGlmICghYm9keSkge1xuICAgICAgdGhpcy5fbm9Cb2R5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICB2YXIgaXNDb25zdW1lZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgYXMgQXJyYXlCdWZmZXInKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydDT05ORUNUJywgJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BBVENIJywgJ1BPU1QnLCAnUFVUJywgJ1RSQUNFJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWwgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoJ0Fib3J0Q29udHJvbGxlcicgaW4gZykge1xuICAgICAgdmFyIGN0cmwgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICByZXR1cm4gY3RybC5zaWduYWw7XG4gICAgfVxuICB9KCkpO1xuICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gIH1cbiAgdGhpcy5faW5pdEJvZHkoYm9keSlcblxuICBpZiAodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICB2YXIgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgICAgaWYgKHJlUGFyYW1TZWFyY2gudGVzdCh0aGlzLnVybCkpIHtcbiAgICAgICAgLy8gSWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlbiBzZXQgdGhlIHZhbHVlIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGEgbmV3ICdfJyBwYXJhbWV0ZXIgdG8gdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdmFyIHJlUXVlcnlTdHJpbmcgPSAvXFw/L1xuICAgICAgICB0aGlzLnVybCArPSAocmVRdWVyeVN0cmluZy50ZXN0KHRoaXMudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG59XG5cbmZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgYm9keVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAvLyBBdm9pZGluZyBzcGxpdCB2aWEgcmVnZXggdG8gd29yayBhcm91bmQgYSBjb21tb24gSUUxMSBidWcgd2l0aCB0aGUgY29yZS1qcyAzLjYuMCByZWdleCBwb2x5ZmlsbFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzc1MVxuICBwcmVQcm9jZXNzZWRIZWFkZXJzXG4gICAgLnNwbGl0KCdcXHInKVxuICAgIC5tYXAoZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YoJ1xcbicpID09PSAwID8gaGVhZGVyLnN1YnN0cigxLCBoZWFkZXIubGVuZ3RoKSA6IGhlYWRlclxuICAgIH0pXG4gICAgLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdSZXNwb25zZSAnICsgZXJyb3IubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbkJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXNcbiAgaWYgKHRoaXMuc3RhdHVzIDwgMjAwIHx8IHRoaXMuc3RhdHVzID4gNTk5KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdSZXNwb25zZSc6IFRoZSBzdGF0dXMgcHJvdmlkZWQgKDApIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsyMDAsIDU5OV0uXCIpXG4gIH1cbiAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHQgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyBvcHRpb25zLnN0YXR1c1RleHRcbiAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgdXJsOiB0aGlzLnVybFxuICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMjAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLm9rID0gZmFsc2VcbiAgcmVzcG9uc2Uuc3RhdHVzID0gMFxuICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxufVxuXG5leHBvcnQgdmFyIERPTUV4Y2VwdGlvbiA9IGcuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICAvLyBUaGlzIGNoZWNrIGlmIHNwZWNpZmljYWxseSBmb3Igd2hlbiBhIHVzZXIgZmV0Y2hlcyBhIGZpbGUgbG9jYWxseSBmcm9tIHRoZSBmaWxlIHN5c3RlbVxuICAgICAgLy8gT25seSBpZiB0aGUgc3RhdHVzIGlzIG91dCBvZiBhIG5vcm1hbCByYW5nZVxuICAgICAgaWYgKHJlcXVlc3QudXJsLmluZGV4T2YoJ2ZpbGU6Ly8nKSA9PT0gMCAmJiAoeGhyLnN0YXR1cyA8IDIwMCB8fCB4aHIuc3RhdHVzID4gNTk5KSkge1xuICAgICAgICBvcHRpb25zLnN0YXR1cyA9IDIwMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMuc3RhdHVzID0geGhyLnN0YXR1cztcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgdGltZWQgb3V0JykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGcubG9jYXRpb24uaHJlZiA/IGcubG9jYXRpb24uaHJlZiA6IHVybFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpXG5cbiAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXJcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycyB8fCAoZy5IZWFkZXJzICYmIGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIGcuSGVhZGVycykpKSB7XG4gICAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIG5hbWVzLnB1c2gobm9ybWFsaXplTmFtZShuYW1lKSlcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAobmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICB9KVxufVxuXG5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuaWYgKCFnLmZldGNoKSB7XG4gIGcuZmV0Y2ggPSBmZXRjaFxuICBnLkhlYWRlcnMgPSBIZWFkZXJzXG4gIGcuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZy5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikge1xuICBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG59XG5leHBvcnQgeyBfY2xhc3NDYWxsQ2hlY2sgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHtcbiAgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7XG4gICAgdmFyIG8gPSByW3RdO1xuICAgIG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCB0b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7XG4gIHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGU7XG59XG5leHBvcnQgeyBfY3JlYXRlQ2xhc3MgYXMgZGVmYXVsdCB9OyIsIi8vIHRzbGludDpkaXNhYmxlIG5vLXVuc2FmZS1hbnlcbmV4cG9ydCBjbGFzcyBMb2FkSW50b0RvY3VtZW50IHtcbiAgICBwdWJsaWMgc3RhdGljIHNjcmlwdCh1cmk6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGxldCBzY3JpcHRMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHNjcmlwdDogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblxuICAgICAgICBmdW5jdGlvbiBsb2FkSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHRMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc2NyaXB0LnJlYWR5U3RhdGUgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgIHNjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmcgdGhlIHVzZXIgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBjb21wbGV0ZXMgdG8gbG9hZC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiBJRSBldmVuIHVwb24gZXJyb3IuIEluIGFueVxuICAgICAgICAvLyBjYXNlIGl0IGlzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgc2NyaXB0IHJhblxuICAgICAgICAvLyBzdWNjZXNzZnVsbHkuXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBsb2FkSGFuZGxlcjtcbiAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGxvYWRIYW5kbGVyO1xuXG4gICAgICAgIC8vIEFkZCBhbiBlcnJvciBjYWxsYmFjay5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogTm90IHN1cHBvcnRlZCBpbiBJRS5cbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzY3JpcHQuXCIpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgdGhlIHNjcmlwdCBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogU2FmYXJpIG5ldmVyIGxvYWRzIHRoZSBzY3JpcHQgaWYgd2UgZG9uJ3Qgc2V0XG4gICAgICAgIC8vIHRoZSBzcmMgYXR0cmlidXRlIGJlZm9yZSBhcHBlbmRpbmcuXG4gICAgICAgIHNjcmlwdC5zcmMgPSB1cmk7XG4gICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiLCBcInVzZS1jcmVkZW50aWFsc1wiKTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc3R5bGVTaGVldCh1cmk6IHN0cmluZywgaWdub3JlRXJyb3I6IGJvb2xlYW4sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNvbHZlID0gKCkgPT4gY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlnbm9yZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzdHlsZXNoZWV0LlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSA/PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcInN0eWxlc2hlZXRcIik7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJpKTtcbiAgICB9XG59XG4iLCJmdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGllbnRTZXR0aW5ncyA9IHtcbiAgICBhdXRob3JpemVkOiBwYXJzZUJvb2woXCJ7YXV0aG9yaXplZH1cIiksXG4gICAgY2F1bGRyb25BcGlVcmw6IFwie2NhdWxkcm9uQXBpVXJsfVwiLFxuICAgIGlzVGVzdFNlcnZlcjogcGFyc2VCb29sKFwie2lzVGVzdFNlcnZlcn1cIiksXG4gICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogcGFyc2VCb29sKFwie3JlbmRlckNhY2hpbmdGb3JJRTh9XCIpLFxuICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogcGFyc2VCb29sKFwie25vcm1hbGl6YXRpb25PblNlcnZlcn1cIiksXG4gICAgbm9ybWF0aXZlVXJsOiBcIntub3JtYXRpdmVVcmx9XCIsXG4gICAgcmVzb3VyY2VzVmVyc2lvbjogXCJ7cmVzb3VyY2VzVmVyc2lvbn1cIixcbiAgICBrb250dXJEb21haW5zOiBcIntrb250dXJEb21haW5zfVwiLFxufTtcbiIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChuLCB0LCBlLCByLCBvLCBhLCBjKSB7XG4gIHRyeSB7XG4gICAgdmFyIGkgPSBuW2FdKGMpLFxuICAgICAgdSA9IGkudmFsdWU7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gdm9pZCBlKG4pO1xuICB9XG4gIGkuZG9uZSA/IHQodSkgOiBQcm9taXNlLnJlc29sdmUodSkudGhlbihyLCBvKTtcbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdCA9IHRoaXMsXG4gICAgICBlID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAociwgbykge1xuICAgICAgdmFyIGEgPSBuLmFwcGx5KHQsIGUpO1xuICAgICAgZnVuY3Rpb24gX25leHQobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIG4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgbik7XG4gICAgICB9XG4gICAgICBfbmV4dCh2b2lkIDApO1xuICAgIH0pO1xuICB9O1xufVxuZXhwb3J0IHsgX2FzeW5jVG9HZW5lcmF0b3IgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO1xuICB9LCBfZ2V0UHJvdG90eXBlT2YodCk7XG59XG5leHBvcnQgeyBfZ2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0O1xuICB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfc2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzKHQsIGUpIHtcbiAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSAmJiBudWxsICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlICYmIGUucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiB0LFxuICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH1cbiAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlICYmIHNldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICB0cnkge1xuICAgIHZhciB0ID0gIUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgfSBjYXRjaCAodCkge31cbiAgcmV0dXJuIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICByZXR1cm4gISF0O1xuICB9KSgpO1xufVxuZXhwb3J0IHsgX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGdldFByb3RvdHlwZU9mIGZyb20gXCIuL2dldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZUZ1bmN0aW9uIGZyb20gXCIuL2lzTmF0aXZlRnVuY3Rpb24uanNcIjtcbmltcG9ydCBjb25zdHJ1Y3QgZnJvbSBcIi4vY29uc3RydWN0LmpzXCI7XG5mdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKHQpIHtcbiAgdmFyIHIgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIE1hcCA/IG5ldyBNYXAoKSA6IHZvaWQgMDtcbiAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKHQpIHtcbiAgICBpZiAobnVsbCA9PT0gdCB8fCAhaXNOYXRpdmVGdW5jdGlvbih0KSkgcmV0dXJuIHQ7XG4gICAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIGlmICh2b2lkIDAgIT09IHIpIHtcbiAgICAgIGlmIChyLmhhcyh0KSkgcmV0dXJuIHIuZ2V0KHQpO1xuICAgICAgci5zZXQodCwgV3JhcHBlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gY29uc3RydWN0KHQsIGFyZ3VtZW50cywgZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgfVxuICAgIH0pLCBzZXRQcm90b3R5cGVPZihXcmFwcGVyLCB0KTtcbiAgfSwgX3dyYXBOYXRpdmVTdXBlcih0KTtcbn1cbmV4cG9ydCB7IF93cmFwTmF0aXZlU3VwZXIgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKHQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gLTEgIT09IEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwodCkuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIik7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gXCJmdW5jdGlvblwiID09IHR5cGVvZiB0O1xuICB9XG59XG5leHBvcnQgeyBfaXNOYXRpdmVGdW5jdGlvbiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBmcm9tIFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIjtcbmltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2NvbnN0cnVjdCh0LCBlLCByKSB7XG4gIGlmIChpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkgcmV0dXJuIFJlZmxlY3QuY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIHZhciBvID0gW251bGxdO1xuICBvLnB1c2guYXBwbHkobywgZSk7XG4gIHZhciBwID0gbmV3ICh0LmJpbmQuYXBwbHkodCwgbykpKCk7XG4gIHJldHVybiByICYmIHNldFByb3RvdHlwZU9mKHAsIHIucHJvdG90eXBlKSwgcDtcbn1cbmV4cG9ydCB7IF9jb25zdHJ1Y3QgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxuZXhwb3J0IHsgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxuZXhwb3J0IHsgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBhcyBkZWZhdWx0IH07IiwiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgcHJvZ3JhbSBzdGF0ZVwiICsgKG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gXCI6IFwiICsgbWVzc2FnZSA6IFwiXCIpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihhcmd1bWVudE5hbWU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gYCR7bWVzc2FnZX0gKGFyZ3VtZW50OiAke2FyZ3VtZW50TmFtZX0pYCA6IGBJbnZhbGlkIGFyZ3VtZW50IHZhbHVlOiAke2FyZ3VtZW50TmFtZX1gXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwaW5nRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCB0eXBpbmdcIik7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcbiAgICBFbXBsb3llZSxcbiAgICBFbXBsb3llZUxpc3QsXG4gICAgR2V0RW1wbG95ZWVMaXN0UmVxdWVzdCxcbiAgICBHZXRXb3JraW5nRXZlbnRMaXN0UmVxdWVzdCxcbiAgICBXb3JraW5nRXZlbnRMaXN0LFxufSBmcm9tIFwiQHNrYmtvbnR1ci9zdGFmZi1zZWxlY3Rvci13aWRnZXRcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJFbmdpbmUvc3JjL0VuZ2luZS9Gb3JtL01vZGVsQ2hhbmdlRXZlbnRMaXN0ZW5lclwiO1xuXG5pbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9FcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU3RlcCB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9Gb3JtUGFydHMvVG91ci9Ub3VyVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRXJyb3JMb2cgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdQYXRoLCBNb2RlbFZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0NvcmVUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbEhvb2tGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvRXh0ZXJuYWxFdmVudHMvRXh0ZXJuYWxIb29rRnVuY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgUmVhZG9ubHlNb2RlbENodW5rIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGVsU3RvcmluZy9Nb2RlbENodW5rXCI7XG5pbXBvcnQgdHlwZSB7IFBpY2tsaXN0UXVlcnlSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9QaWNrbGlzdHMvUGlja2xpc3RUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgeyBNb2RlbEV2ZW50c0xpc3RlbmVyIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9Nb2RlbEV2ZW50cy9Nb2RlbEV2ZW50XCI7XG5pbXBvcnQgeyBEaWdlc3RRdWVyeUZpbHRlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvRGlnZXN0QXBpQ2xpZW50L1R5cGVzL0RpZ2VzdFF1ZXJ5RmlsdGVyXCI7XG5pbXBvcnQgeyBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1Nb2RlbEFjY2Vzc29yXCI7XG5pbXBvcnQgeyBNb2RhbE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kYWxNYW5hZ2VyL0lNb2RhbFN0YXRlXCI7XG5pbXBvcnQgeyBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTW9kZWxQYXRoXCI7XG5pbXBvcnQgeyBDYWxsSW5pdFNlY3Rpb25MaWdodGJveFByb3BzLCBJbml0U2VjdGlvbkZvcm1MaWdodGJveE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9Jbml0U2VjdGlvbkxpZ2h0Ym94XCI7XG5pbXBvcnQgeyBNYXNzQWN0aW9uUGFyYW1ldGVycyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvTWFzc0FjdGlvbnMvTWFzc0FjdGlvblBhcmFtZXRlcnNcIjtcbmltcG9ydCB7IFByaW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvUHJpbnQvUHJpbnRUeXBlXCI7XG5pbXBvcnQgeyBGaWFzQXBpLCBGaWFzQ2xpZW50SW5pdE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvVmFsdWVFZGl0b3JzL0ZpYXMvRmlhc0lucHV0L0ZpYXNBcGlcIjtcbmltcG9ydCB7IEluc3RhbmNlc0RlbGV0aW5nUnVsZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvSW5zdGFuY2VzRGVsZXRpbmcvSW5zdGFuY2VzRGVsZXRpbmdSdWxlXCI7XG5pbXBvcnQgeyBDb21iaW5lRnVmUmVzdWx0IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgSUNhbmR5Q29tcG9uZW50SGFuZGxlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0NvbXBvbmVudEhhbmRsZVJlZ2lzdHJ5L0lDYW5keUNvbXBvbmVudEhhbmRsZVwiO1xuaW1wb3J0IHsgTmF2aWdhdGlvblBhdGhNYXBwZXIgfSBmcm9tIFwiLi4vLi4vSW5qZWN0YWJsZU1vZHVsZXMvSW5qZWN0YWJsZUVuZ2luZU1vZHVsZXNcIjtcbmltcG9ydCB7IEltcG9ydEVtcGxveWVyRG9jdW1lbnRzT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9TdGFmZlNlcnZpY2VJbnRlZ3JhdGlvbi9FbXBsb3llZVNlcnZpY2VUeXBlc1wiO1xuaW1wb3J0IHsgVGFiSW5mb3NTdGF0ZSB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9NdWx0aUNvbnRyb2xzL1RhYnMvU3RvcmUvVGFiSW5mb3NTdGF0ZVwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmF2aWdhdGVCeUhpZ2hsYW5kZXJQYXRocyhwYXRoczogc3RyaW5nW10pOiBQcm9taXNlPElDYW5keUNvbXBvbmVudEhhbmRsZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmF2aWdhdGlvblBhdGhNYXBwZXIoKTogTmF2aWdhdGlvblBhdGhNYXBwZXIge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmF0Y2hVcGRhdGUodXBkYXRlUHJvYzogKHVwZGF0ZUFjY2Vzc29yOiBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFBhcnRpYWw8U2VydmVyRXJyb3JMb2c+KTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUNoaWxkcmVuQnlQYXRoKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX19JTlRFUk5BTF9faW1wb3J0RnJvbUVtcGxveWVlU2VydmljZSgpOiBQcm9taXNlPEVtcGxveWVlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9fSU5URVJOQUxfX2dldFNlbGVjdEZ1bmN0aW9uRm9yRGlzYWJsZUVtcGxveWVlSW5TUyhcbiAgICAgICAgcGF0aFNwZWM6IHN0cmluZ1xuICAgICk6IFByb21pc2U8KGVtcGxveWVlOiBFbXBsb3llZSkgPT4gYm9vbGVhbj4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TW9kYWxVbml0T3BlbmVkSW5zdGFuY2UocGFnZUlkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRhYnNTdGF0ZSgpOiBUYWJJbmZvc1N0YXRlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIG5hdmlnYXRlKG5hdmlnYXRpb25QYXRoOiBzdHJpbmcpOiBQcm9taXNlPElDYW5keUNvbXBvbmVudEhhbmRsZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1wb3J0RW1wbG95ZXJEb2N1bWVudHMob3B0aW9uczogSW1wb3J0RW1wbG95ZXJEb2N1bWVudHNPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llZXMoZW1wbG95ZWVzOiBFbXBsb3llZVtdLCBvcHRpb25zPzogeyBzY2VuYXJpbz86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludChwcmludFR5cGU6IFByaW50VHlwZSwgYm9keT86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBwdWJsaWMgcnVuTWFzc0FjdGlvbihhY3Rpb25JZDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogTWFzc0FjdGlvblBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIHRocm93IEVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc3RvcEF1dG9zZW5kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udW5tb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVubW91bnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG91clN0ZXBzKCk6IFN0ZXBbXSB7XG4gICAgICAgIC8vIEZvciBvbGQga2V3ZWJcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0QWRkaXRpb25hbEVtcGxveWVlSW5mbyhmaWx0ZXJzOiBHZXRFbXBsb3llZUxpc3RSZXF1ZXN0KTogUHJvbWlzZTxFbXBsb3llZUxpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWxvYWRJbm5lcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXb3JraW5nRXZlbnRzRm9yRW1wbG95ZWUoZmlsdGVyczogR2V0V29ya2luZ0V2ZW50TGlzdFJlcXVlc3QpOiBQcm9taXNlPFdvcmtpbmdFdmVudExpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0KHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5U3VidHJlZShcbiAgICAgICAgc291cmNlQmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgdGFyZ2V0QmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgZG9Ob3RDb3B5UGF0aHM/OiBzdHJpbmdbXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHV1aWRHZW5lcmF0ZSgpOiBzdHJpbmcge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93TW9kYWwob3B0aW9uczogTW9kYWxPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlY3Rpb24ob3B0aW9uczogSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGxJbml0U2VjdGlvbihvcHRpb25zOiBDYWxsSW5pdFNlY3Rpb25MaWdodGJveFByb3BzKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZpYXNBcGlDbGllbnQob3B0aW9uczogRmlhc0NsaWVudEluaXRPcHRpb25zKTogRmlhc0FwaSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5FbXBsb3llZUVkaXRvcihlbXBsb3llZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlcyhwYXRoOiBzdHJpbmcsIGluc3RhbmNlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNPbkNvbnRyb2xJZkV4aXN0KHBhdGg6IEJpbmRpbmdQYXRoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dG9GaWVsZHNUb0F1dG9WYWx1ZShwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5zdXJlSW5zdGFuY2VGdWxseUxvYWRlZChcbiAgICAgICAgYmluZGluZ1BhdGg6IHN0cmluZyB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIC4uLmluc3RhbmNlczogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzQnlSdWxlcyhydWxlczogSW5zdGFuY2VzRGVsZXRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRG5wKCk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlOm5vLW51bGwta2V5d29yZCBuby1hbnkgbm8tdW5zYWZlLWFueSAqL1xuaW1wb3J0IHsgZmV0Y2ggfSBmcm9tIFwid2hhdHdnLWZldGNoXCI7XG5pbXBvcnQgeyBBbGxJY29uTmFtZXMgfSBmcm9tIFwicmVhY3QtdWlcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGVzY3JpcHRpb24ge1xuICAgIGljb246IEFsbEljb25OYW1lcztcbiAgICB0ZXh0Pzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG4gICAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgICBoaW50PzogdW5kZWZpbmVkIHwgc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdGlkPzogc3RyaW5nO1xuICAgIHdlaWdodDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVuZGVyRm9ybVNldHRpbmdzIHtcbiAgICBnZnY6IHN0cmluZztcbiAgICBlbmdpbmVWZXJzaW9uPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZW5kZXJGb3JtOiB1bmRlZmluZWQgfCBFbmdpbmVFbnRyeVBvaW50O1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbiAgICBwYW5lbEFjdGlvbnM/OiBBY3Rpb25EZXNjcmlwdGlvbltdO1xufVxuXG50eXBlIFN0YXJ0Rm9ybUZ1bmMgPSAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncykgPT4gUHJvbWlzZTxJRm9ybT47XG5cbmludGVyZmFjZSBDYW5keUdsb2JhbEluamVjdGVkVmFyIHtcbiAgICBzdGFydDogKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLCBjYWxsYmFjaz86IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4pID0+IHZvaWQ7XG4gICAga2Vmb3Jtc1VybD86IHN0cmluZztcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBib29sZWFuO1xuICAgIGVudHJ5UG9pbnQ6IHsgW2tleTogc3RyaW5nXTogU3RhcnRGb3JtRnVuYyB9O1xuICAgIGxvYWRFcnJvcj86IHVua25vd247XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICAgICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZGVjbGFyZSBjb25zdCBnbG9iYWw6IFdpbmRvdztcblxuZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8qIGVtcHR5ICovXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdXJsKHJlbGF0aXZlVXJsOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2xvYmFsLkNGLmtlZm9ybXNVcmwgfHwgXCJcIjtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke3JlbGF0aXZlVXJsfWAucmVwbGFjZSgvKFteOl0pXFwvezIsfS9nLCBcIiQxL1wiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogdW5kZWZpbmVkIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goYCR7cGFyYW1OYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnlQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoICsgXCI/XCIgKyBxdWVyeVBhcnRzLmpvaW4oXCImXCIpO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWQoZG9tYWluczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2RvbWFpbnMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIikucmVwbGFjZSgvXFwqL2csIFwiW2EtejAtOS0uX10rXCIpfSkkYCkudGVzdChcbiAgICAgICAgZ2xvYmFsLmxvY2F0aW9uLmhvc3RcbiAgICApO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJCeU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoZ2xvYmFsLmxvY2F0aW9uLnNlYXJjaFxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnJlcGxhY2UoL14oXFw/fCN8JikvLCBcIlwiKVxuICAgICAgICAgICAgLnNwbGl0KFwiJlwiKVxuICAgICAgICAgICAgLm1hcChwYXJhbSA9PiBwYXJhbS5yZXBsYWNlKC9cXCsvZywgXCIgXCIpLnNwbGl0KFwiPVwiKS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KSlcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgICAuZmluZCgoW2tleV0pID0+IGtleSA9PSBuYW1lKSB8fCBbXSlbMV1cbiAgICApO1xufVxuXG50eXBlIFRhc2sgPSAoY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBydW5QYXJhbGxlbCh0YXNrczogVGFza1tdLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBsZXQgY29tcGxldGVkID0gMDtcblxuICAgIHRhc2tzLmZvckVhY2godGFzayA9PiB7XG4gICAgICAgIHRhc2soZXJyb3IgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkID0gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmludGVyZmFjZSBTdGFydEZvcm1TZXR0aW5nIHtcbiAgICBnZnY6IHN0cmluZztcbiAgICBlbmdpbmVWZXJzaW9uPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbChsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBsZWZ0TnVtYmVycyA9IGxlZnRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0TnVtYmVycyA9IHJpZ2h0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGxlZnROdW1iZXJzWzBdID8/IDApID4gKHJpZ2h0TnVtYmVyc1swXSA/PyAwKSB8fFxuICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1swXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1swXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICgobGVmdE51bWJlcnNbMV0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzFdID8/IDApIHx8XG4gICAgICAgICAgICAgICAgICAgICgobGVmdE51bWJlcnNbMV0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMV0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChsZWZ0TnVtYmVyc1syXSA/PyAwKSA+PSAocmlnaHROdW1iZXJzWzJdID8/IDApKSkpXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRGb3JtKHNldHRpbmdzOiBTdGFydEZvcm1TZXR0aW5nLCBjYWxsYmFjazogKGVycm9yPzogbnVsbCB8IHVuZGVmaW5lZCB8IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgeyBnZnYsIGVuZ2luZVZlcnNpb24sIHJlc291cmNlc1ZlcnNpb24gfSA9IHNldHRpbmdzO1xuXG4gICAgaWYgKGdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc05lZWRFbmdpbmUgPSBlbmdpbmVWZXJzaW9uICYmICFnbG9iYWxbZW5naW5lVmVyc2lvbl07XG4gICAgY29uc3Qgbm9TdHlsZXNGb3JHZnYgPSBmYWxzZTsgLy8gZW5naW5lVmVyc2lvbiAhPSB1bmRlZmluZWQgJiYgKGlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbChlbmdpbmVWZXJzaW9uLCBcIjQuMjE0LjBcIikgfHwgZW5naW5lVmVyc2lvbiA9PT0gXCJsb2NhbFwiKTtcbiAgICBjb25zdCBuZWVkTG9hZFN0eWxlc0ZvckdmdiA9ICFub1N0eWxlc0ZvckdmdjtcbiAgICBjb25zdCBtaW4gPSBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJkZWJ1Z1wiKSA9PT0gXCJ0cnVlXCIgPyBcIlwiIDogXCIubWluXCI7XG4gICAgY29uc3QgdGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gICAgY29uc3QgcGFyYW1zID0geyB2OiByZXNvdXJjZXNWZXJzaW9uLCByZXNvdXJjZVpvbmU6IHNldHRpbmdzLnJlc291cmNlWm9uZSB9O1xuICAgIGlmIChuZWVkTG9hZFN0eWxlc0Zvckdmdikge1xuICAgICAgICB0YXNrcy5wdXNoKGNiID0+XG4gICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnN0eWxlU2hlZXQodXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy8ke2dmdn0ke21pbn0uY3NzYCwgcGFyYW1zKSksIHRydWUsIGNiKVxuICAgICAgICApO1xuICAgIH1cbiAgICB0YXNrcy5wdXNoKGNiID0+IExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zY3JpcHRzLyR7Z2Z2fSR7bWlufS5qc2AsIHBhcmFtcykpLCBjYikpO1xuXG4gICAgaWYgKGlzTmVlZEVuZ2luZSkge1xuICAgICAgICB0YXNrcy5wdXNoKFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnN0eWxlU2hlZXQoXG4gICAgICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7bWlufS5jc3NgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zY3JpcHQoXG4gICAgICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zY3JpcHRzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uanNgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcnVuUGFyYWxsZWwodGFza3MsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyRm9ybShcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBleHRlbmRlZFNldHRpbmdzOiBSZW5kZXJGb3JtU2V0dGluZ3MsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT5cbik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1FbnRyeVBvaW50ID1cbiAgICAgICAgZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZXh0ZW5kZWRTZXR0aW5ncy5nZnZdID8/IHJlamVjdChgRm9ybSBlbnRyeSBwb2ludCAke2V4dGVuZGVkU2V0dGluZ3MuZ2Z2fSBub3QgZm91bmQuYCk7XG4gICAgZm9ybUVudHJ5UG9pbnQocGFnZUNvbnRlbnQsIGV4dGVuZGVkU2V0dGluZ3MpXG4gICAgICAgIC50aGVuKGZvcm0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHVibGljRm9ybSA9IGZvcm0ucHVibGljRm9ybSB8fCBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm0pO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBwdWJsaWNGb3JtKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFydEZvcm1PcHRpb25zIGV4dGVuZHMgUGFydGlhbDxBVU9PcHRpb25zPiB7XG4gICAgbnM6IHN0cmluZztcbiAgICBkcmFmdElkOiBzdHJpbmc7XG4gICAgZ2Z2Pzogc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG4gICAgZmVlZGJhY2tFbmFibGVkPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VCdXR0b24/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbGVhbkZvcm0/OiBib29sZWFuO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICBhdXRoZW50aWNhdGlvbj86IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIgfCB7IGF1dGhTaWQ6IHN0cmluZyB9O1xuICAgIGZldGNoPzogdHlwZW9mIGZldGNoO1xuICAgIG1vZGVsPzogeyBbcGF0aDogc3RyaW5nXTogdW5rbm93biB9O1xuICAgIHBhbmVsQWN0aW9ucz86IEFjdGlvbkRlc2NyaXB0aW9uW107XG4gICAgZXZlbnRFbWl0dGVyPzogTGF5b3V0RXZlbnRzU3RhdGljO1xuICAgIGVtcGxveWVySWQ/OiBzdHJpbmc7XG4gICAgc2hvd05hdmlnYXRpb25TaWRlYmFyPzogYm9vbGVhbjtcbiAgICBvblJlbW92ZUF0dGFjaG1lbnQ/OiAoKSA9PiB2b2lkO1xufVxuXG5mdW5jdGlvbiBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb246IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmcpOiB1bmRlZmluZWQgfCBFbmdpbmVFbnRyeVBvaW50IHtcbiAgICBpZiAoZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIGdsb2JhbFtlbmdpbmVWZXJzaW9uXSAmJiBnbG9iYWxbZW5naW5lVmVyc2lvbl0uZGVmYXVsdDtcbn1cblxuZnVuY3Rpb24gc3RhcnQoXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPiA9IGRlZmF1bHRDYWxsYmFja1xuKTogdm9pZCB7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICBjb25zdCB7IG5zLCBkcmFmdElkIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKCFpc0FsbG93ZWQoY2xpZW50U2V0dGluZ3Mua29udHVyRG9tYWlucykpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJkb21haW4udW50cnVzdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWNsaWVudFNldHRpbmdzLmF1dGhvcml6ZWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJ1c2VyLnVuYXV0aGVudGljYXRlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFkcmFmdElkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwib3B0aW9ucy5kcmFmdElkIGlzIHJlcXVpcmVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIW5zKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwib3B0aW9ucy5ucyBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2Vab25lID0gb3B0aW9ucy5yZXNvdXJjZVpvbmUgPz8gZ2V0UGFyYW1ldGVyQnlOYW1lKFwicmVzb3VyY2Vab25lXCIpO1xuICAgIGNvbnN0IGNsaWVudERyYWZ0VXJsID0gYnVpbGRVcmwodXJsKGdldENsaWVudERyYWZ0SW5mb1VybCh7IG5zOiBucywgZHJhZnRJZDogZHJhZnRJZCB9KSksIHtcbiAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogUmVxdWVzdEluaXQgPSB7IG1ldGhvZDogXCJHRVRcIiB9O1xuICAgIGlmIChvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09PSBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJpbmNsdWRlXCI7XG4gICAgfSBlbHNlIGlmIChcImF1dGhTaWRcIiBpbiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uICYmIG9wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPz8ge307XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEFVVEguU0lEICR7b3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICB9XG4gICAgY29uc3QgZmV0Y2hJbXBsID0gb3B0aW9ucy5mZXRjaCA/PyBmZXRjaDtcblxuICAgIGZldGNoSW1wbChjbGllbnREcmFmdFVybCwgcmVxdWVzdE9wdGlvbnMpXG4gICAgICAgIC50aGVuKHggPT4geC5qc29uKCkpXG4gICAgICAgIC50aGVuKChjbGllbnREcmFmdEluZm86IENsaWVudERyYWZ0SW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZnYgPSBjbGllbnREcmFmdEluZm8uZ2Z2O1xuICAgICAgICAgICAgY29uc3QgZW5naW5lVmVyc2lvbiA9IGNsaWVudERyYWZ0SW5mby5lbmdpbmVWZXJzaW9uO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICBhdXRob3JpemVkOiBjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkLFxuICAgICAgICAgICAgICAgIGNhdWxkcm9uQXBpVXJsOiBjbGllbnRTZXR0aW5ncy5jYXVsZHJvbkFwaVVybCxcbiAgICAgICAgICAgICAgICBpc1Rlc3RTZXJ2ZXI6IGNsaWVudFNldHRpbmdzLmlzVGVzdFNlcnZlcixcbiAgICAgICAgICAgICAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBjbGllbnRTZXR0aW5ncy5yZW5kZXJDYWNoaW5nRm9ySUU4LFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogY2xpZW50U2V0dGluZ3Mubm9ybWFsaXphdGlvbk9uU2VydmVyLFxuICAgICAgICAgICAgICAgIG5vcm1hdGl2ZVVybDogY2xpZW50U2V0dGluZ3Mubm9ybWF0aXZlVXJsLFxuICAgICAgICAgICAgICAgIHJlc291cmNlc1ZlcnNpb246IGNsaWVudFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAga29udHVyRG9tYWluczogY2xpZW50U2V0dGluZ3Mua29udHVyRG9tYWlucyxcbiAgICAgICAgICAgICAgICBzaG93TmF2aWdhdGlvblNpZGViYXI6IG9wdGlvbnMuc2hvd05hdmlnYXRpb25TaWRlYmFyID8/IHRydWUsXG4gICAgICAgICAgICAgICAgb25SZW1vdmVBdHRhY2htZW50OiBvcHRpb25zLm9uUmVtb3ZlQXR0YWNobWVudCxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICBlbmdpbmVWZXJzaW9uOiBlbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogb3B0aW9ucy5mZWVkYmFja0VuYWJsZWQgPz8gY2xpZW50RHJhZnRJbmZvLmZlZWRiYWNrRW5hYmxlZCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuZXhwb3J0IHsgX3NsaWNlZFRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhIb2xlcyBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheUxpbWl0IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkge1xuICBpZiAocikge1xuICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiByKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShyLCBhKTtcbiAgICB2YXIgdCA9IHt9LnRvU3RyaW5nLmNhbGwocikuc2xpY2UoOCwgLTEpO1xuICAgIHJldHVybiBcIk9iamVjdFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcIk1hcFwiID09PSB0IHx8IFwiU2V0XCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXCJBcmd1bWVudHNcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IGFycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7XG4gIH1cbn1cbmV4cG9ydCB7IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVJlc3QgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4uL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnREcmFmdEluZm9VcmwoZHJhZnRJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAvLyBOT1RFINCt0YLQsCDRhNGD0L3QutGG0LjRjyDQvtCx0YrRj9Cy0LvQtdC90LAg0L7RgtC00LXQu9GM0L3Qviwg0LjQsdC+INC+0L3QsCDQstGF0L7QtNC40YIg0LIg0YHQvtGB0YLQsNCyIGNsaWVudC5qcyDQuFxuICAgIC8vINC90LUg0LTQvtC70LbQvdC+INC/0YDQvtC40YHRhdC+0LTQuNGC0Ywg0YPRgtC10LbQtdC70LXQvdC40Y8gY2xpZW50LmpzLdCwXG4gICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0SWQubnN9L2RyYWZ0cy8ke2RyYWZ0SWQuZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gO1xufVxuIiwiLyoqKlxuICog0KHRgtGA0L7Qs9C+0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90LDRjyDQt9Cw0LzQtdC90LAg0LTQu9GPIEJvb2xlYW4oLi4uKVxuICog0J7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8gWy4uLl0uZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVVua25vd25FcnJvcihlcnJvcjogdW5rbm93bik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvcj8uW1wibWVzc2FnZVwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGFzc2VydHMgaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIGlmICghaXNOb3ROdWxsT3JVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgbXVzdCBiZSBkZWZpbmVkYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IpOiBuZXZlciB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IG1lc3NhZ2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG1lc3NhZ2U7XG4gICAgfVxufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUxlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBoYXZlIG1pbmltYWwgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bmV2ZXJBcmd1bWVudH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuQXN5bmNBY3Rpb24oYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIGFjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0ID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgc3RyaW5nIHtcbiAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHkoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JXaGl0ZVNwYWNlKGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogaW5wdXQgaXMgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dC50cmltKCkgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltTGFzdFNsYXNoKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNsaWNlKC0xKSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4odmFsdWU6IFQpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0VBQ0EsSUFBSUEsQ0FBQSxHQUFzQixDQUFDO0VDRDNCLFNBQVNDLEVBQVFELENBQUE7SUFHZixPQUFPQyxDQUFBLEdBQVUscUJBQXFCQyxNQUFB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