@keycloakify/angular 0.0.1-rc.18 → 0.0.1-rc.19

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 (271) hide show
  1. package/account/containers/template/template.component.d.ts +18 -5
  2. package/account/pages/account/account.component.d.ts +3 -2
  3. package/account/pages/applications/applications.component.d.ts +3 -2
  4. package/account/pages/federatedIdentity/federatedIdentity.component.d.ts +3 -2
  5. package/account/pages/log/log.component.d.ts +3 -2
  6. package/account/pages/password/password.component.d.ts +3 -2
  7. package/account/pages/sessions/sessions.component.d.ts +3 -2
  8. package/account/pages/totp/totp.component.d.ts +3 -2
  9. package/esm2022/account/containers/template/template.component.mjs +40 -7
  10. package/esm2022/account/pages/account/account.component.mjs +6 -5
  11. package/esm2022/account/pages/applications/applications.component.mjs +6 -5
  12. package/esm2022/account/pages/federatedIdentity/federatedIdentity.component.mjs +6 -5
  13. package/esm2022/account/pages/log/log.component.mjs +6 -5
  14. package/esm2022/account/pages/password/password.component.mjs +6 -5
  15. package/esm2022/account/pages/sessions/sessions.component.mjs +6 -5
  16. package/esm2022/account/pages/totp/totp.component.mjs +6 -5
  17. package/esm2022/login/containers/template/template.component.mjs +81 -13
  18. package/esm2022/login/pages/code/code.component.mjs +14 -8
  19. package/esm2022/login/pages/delete-account-confirm/delete-account-confirm.component.mjs +12 -6
  20. package/esm2022/login/pages/delete-credential/delete-credential.component.mjs +10 -9
  21. package/esm2022/login/pages/error/error.component.mjs +14 -8
  22. package/esm2022/login/pages/frontchannel-logout/frontchannel-logout.component.mjs +12 -10
  23. package/esm2022/login/pages/idp-review-user-profile/idp-review-user-profile.component.mjs +12 -11
  24. package/esm2022/login/pages/info/info.component.mjs +11 -10
  25. package/esm2022/login/pages/login/login.component.mjs +13 -12
  26. package/esm2022/login/pages/login-config-totp/login-config-totp.component.mjs +12 -11
  27. package/esm2022/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.mjs +11 -14
  28. package/esm2022/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.mjs +11 -14
  29. package/esm2022/login/pages/login-idp-link-email/login-idp-link-email.component.mjs +10 -13
  30. package/esm2022/login/pages/login-oauth-grant/login-oauth-grant.component.mjs +11 -13
  31. package/esm2022/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.mjs +10 -9
  32. package/esm2022/login/pages/login-otp/login-otp.component.mjs +11 -10
  33. package/esm2022/login/pages/login-page-expired/login-page-expired.component.mjs +10 -9
  34. package/esm2022/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.mjs +11 -6
  35. package/esm2022/login/pages/login-password/login-password.component.mjs +13 -11
  36. package/esm2022/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.mjs +12 -11
  37. package/esm2022/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.mjs +12 -11
  38. package/esm2022/login/pages/login-reset-otp/login-reset-otp.component.mjs +11 -10
  39. package/esm2022/login/pages/login-reset-password/login-reset-password.component.mjs +11 -10
  40. package/esm2022/login/pages/login-update-password/login-update-password.component.mjs +11 -10
  41. package/esm2022/login/pages/login-update-profile/login-update-profile.component.mjs +11 -10
  42. package/esm2022/login/pages/login-username/login-username.component.mjs +12 -11
  43. package/esm2022/login/pages/login-verify-email/login-verify-email.component.mjs +10 -9
  44. package/esm2022/login/pages/login-x509-info/login-x509-info.component.mjs +10 -9
  45. package/esm2022/login/pages/logout-confirm/logout-confirm.component.mjs +10 -13
  46. package/esm2022/login/pages/register/register.component.mjs +14 -13
  47. package/esm2022/login/pages/saml-post-form/saml-post-form.component.mjs +14 -15
  48. package/esm2022/login/pages/select-authenticator/select-authenticator.component.mjs +11 -10
  49. package/esm2022/login/pages/terms/terms.component.mjs +10 -9
  50. package/esm2022/login/pages/update-email/update-email.component.mjs +12 -15
  51. package/esm2022/login/pages/webauthn-authenticate/webauthn-authenticate.component.mjs +10 -9
  52. package/esm2022/login/pages/webauthn-error/webauthn-error.component.mjs +11 -10
  53. package/esm2022/login/pages/webauthn-register/webauthn-register.component.mjs +10 -9
  54. package/fesm2022/keycloakify-angular-account-containers-template.mjs +40 -7
  55. package/fesm2022/keycloakify-angular-account-containers-template.mjs.map +1 -1
  56. package/fesm2022/keycloakify-angular-account-pages-account.mjs +5 -4
  57. package/fesm2022/keycloakify-angular-account-pages-account.mjs.map +1 -1
  58. package/fesm2022/keycloakify-angular-account-pages-applications.mjs +5 -4
  59. package/fesm2022/keycloakify-angular-account-pages-applications.mjs.map +1 -1
  60. package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs +5 -4
  61. package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs.map +1 -1
  62. package/fesm2022/keycloakify-angular-account-pages-log.mjs +5 -4
  63. package/fesm2022/keycloakify-angular-account-pages-log.mjs.map +1 -1
  64. package/fesm2022/keycloakify-angular-account-pages-password.mjs +5 -4
  65. package/fesm2022/keycloakify-angular-account-pages-password.mjs.map +1 -1
  66. package/fesm2022/keycloakify-angular-account-pages-sessions.mjs +5 -4
  67. package/fesm2022/keycloakify-angular-account-pages-sessions.mjs.map +1 -1
  68. package/fesm2022/keycloakify-angular-account-pages-totp.mjs +5 -4
  69. package/fesm2022/keycloakify-angular-account-pages-totp.mjs.map +1 -1
  70. package/fesm2022/keycloakify-angular-login-containers-template.mjs +81 -13
  71. package/fesm2022/keycloakify-angular-login-containers-template.mjs.map +1 -1
  72. package/fesm2022/keycloakify-angular-login-pages-code.mjs +13 -7
  73. package/fesm2022/keycloakify-angular-login-pages-code.mjs.map +1 -1
  74. package/fesm2022/keycloakify-angular-login-pages-delete-account-confirm.mjs +11 -5
  75. package/fesm2022/keycloakify-angular-login-pages-delete-account-confirm.mjs.map +1 -1
  76. package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs +9 -8
  77. package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs.map +1 -1
  78. package/fesm2022/keycloakify-angular-login-pages-error.mjs +13 -7
  79. package/fesm2022/keycloakify-angular-login-pages-error.mjs.map +1 -1
  80. package/fesm2022/keycloakify-angular-login-pages-frontchannel-logout.mjs +11 -9
  81. package/fesm2022/keycloakify-angular-login-pages-frontchannel-logout.mjs.map +1 -1
  82. package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs +11 -10
  83. package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs.map +1 -1
  84. package/fesm2022/keycloakify-angular-login-pages-info.mjs +10 -9
  85. package/fesm2022/keycloakify-angular-login-pages-info.mjs.map +1 -1
  86. package/fesm2022/keycloakify-angular-login-pages-login-config-totp.mjs +11 -10
  87. package/fesm2022/keycloakify-angular-login-pages-login-config-totp.mjs.map +1 -1
  88. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm-override.mjs +10 -13
  89. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm-override.mjs.map +1 -1
  90. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm.mjs +10 -13
  91. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm.mjs.map +1 -1
  92. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs +9 -12
  93. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs.map +1 -1
  94. package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs +10 -12
  95. package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs.map +1 -1
  96. package/fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs +9 -8
  97. package/fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs.map +1 -1
  98. package/fesm2022/keycloakify-angular-login-pages-login-otp.mjs +10 -9
  99. package/fesm2022/keycloakify-angular-login-pages-login-otp.mjs.map +1 -1
  100. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs +9 -8
  101. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs.map +1 -1
  102. package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs +10 -5
  103. package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs.map +1 -1
  104. package/fesm2022/keycloakify-angular-login-pages-login-password.mjs +12 -10
  105. package/fesm2022/keycloakify-angular-login-pages-login-password.mjs.map +1 -1
  106. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-config.mjs +11 -10
  107. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-config.mjs.map +1 -1
  108. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs +11 -10
  109. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs.map +1 -1
  110. package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs +10 -9
  111. package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs.map +1 -1
  112. package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs +10 -9
  113. package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs.map +1 -1
  114. package/fesm2022/keycloakify-angular-login-pages-login-update-password.mjs +10 -9
  115. package/fesm2022/keycloakify-angular-login-pages-login-update-password.mjs.map +1 -1
  116. package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs +10 -9
  117. package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs.map +1 -1
  118. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs +11 -10
  119. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs.map +1 -1
  120. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs +9 -8
  121. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs.map +1 -1
  122. package/fesm2022/keycloakify-angular-login-pages-login-x509-info.mjs +9 -8
  123. package/fesm2022/keycloakify-angular-login-pages-login-x509-info.mjs.map +1 -1
  124. package/fesm2022/keycloakify-angular-login-pages-login.mjs +12 -11
  125. package/fesm2022/keycloakify-angular-login-pages-login.mjs.map +1 -1
  126. package/fesm2022/keycloakify-angular-login-pages-logout-confirm.mjs +9 -12
  127. package/fesm2022/keycloakify-angular-login-pages-logout-confirm.mjs.map +1 -1
  128. package/fesm2022/keycloakify-angular-login-pages-register.mjs +13 -12
  129. package/fesm2022/keycloakify-angular-login-pages-register.mjs.map +1 -1
  130. package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs +13 -14
  131. package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs.map +1 -1
  132. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs +10 -9
  133. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs.map +1 -1
  134. package/fesm2022/keycloakify-angular-login-pages-terms.mjs +9 -8
  135. package/fesm2022/keycloakify-angular-login-pages-terms.mjs.map +1 -1
  136. package/fesm2022/keycloakify-angular-login-pages-update-email.mjs +11 -14
  137. package/fesm2022/keycloakify-angular-login-pages-update-email.mjs.map +1 -1
  138. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs +9 -8
  139. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs.map +1 -1
  140. package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs +10 -9
  141. package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs.map +1 -1
  142. package/fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs +9 -8
  143. package/fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs.map +1 -1
  144. package/login/containers/template/template.component.d.ts +25 -9
  145. package/login/pages/code/code.component.d.ts +12 -3
  146. package/login/pages/delete-account-confirm/delete-account-confirm.component.d.ts +11 -2
  147. package/login/pages/delete-credential/delete-credential.component.d.ts +9 -5
  148. package/login/pages/error/error.component.d.ts +11 -2
  149. package/login/pages/frontchannel-logout/frontchannel-logout.component.d.ts +9 -5
  150. package/login/pages/idp-review-user-profile/idp-review-user-profile.component.d.ts +10 -7
  151. package/login/pages/info/info.component.d.ts +9 -5
  152. package/login/pages/login/login.component.d.ts +10 -6
  153. package/login/pages/login-config-totp/login-config-totp.component.d.ts +9 -5
  154. package/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.d.ts +8 -7
  155. package/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.d.ts +8 -7
  156. package/login/pages/login-idp-link-email/login-idp-link-email.component.d.ts +8 -7
  157. package/login/pages/login-oauth-grant/login-oauth-grant.component.d.ts +8 -7
  158. package/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.d.ts +9 -5
  159. package/login/pages/login-otp/login-otp.component.d.ts +9 -5
  160. package/login/pages/login-page-expired/login-page-expired.component.d.ts +9 -5
  161. package/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.d.ts +11 -3
  162. package/login/pages/login-password/login-password.component.d.ts +10 -5
  163. package/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.d.ts +9 -5
  164. package/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.d.ts +9 -5
  165. package/login/pages/login-reset-otp/login-reset-otp.component.d.ts +9 -5
  166. package/login/pages/login-reset-password/login-reset-password.component.d.ts +9 -5
  167. package/login/pages/login-update-password/login-update-password.component.d.ts +9 -5
  168. package/login/pages/login-update-profile/login-update-profile.component.d.ts +9 -6
  169. package/login/pages/login-username/login-username.component.d.ts +10 -6
  170. package/login/pages/login-verify-email/login-verify-email.component.d.ts +9 -5
  171. package/login/pages/login-x509-info/login-x509-info.component.d.ts +9 -5
  172. package/login/pages/logout-confirm/logout-confirm.component.d.ts +8 -7
  173. package/login/pages/register/register.component.d.ts +11 -8
  174. package/login/pages/saml-post-form/saml-post-form.component.d.ts +10 -7
  175. package/login/pages/select-authenticator/select-authenticator.component.d.ts +9 -5
  176. package/login/pages/terms/terms.component.d.ts +9 -5
  177. package/login/pages/update-email/update-email.component.d.ts +9 -9
  178. package/login/pages/webauthn-authenticate/webauthn-authenticate.component.d.ts +10 -6
  179. package/login/pages/webauthn-error/webauthn-error.component.d.ts +9 -5
  180. package/login/pages/webauthn-register/webauthn-register.component.d.ts +10 -6
  181. package/package.json +8 -8
  182. package/src/account/containers/template/template.component.html +15 -10
  183. package/src/account/containers/template/template.component.ts +54 -7
  184. package/src/account/pages/account/account.component.html +139 -143
  185. package/src/account/pages/account/account.component.ts +4 -3
  186. package/src/account/pages/applications/applications.component.html +128 -136
  187. package/src/account/pages/applications/applications.component.ts +4 -3
  188. package/src/account/pages/federatedIdentity/federatedIdentity.component.html +84 -88
  189. package/src/account/pages/federatedIdentity/federatedIdentity.component.ts +4 -3
  190. package/src/account/pages/log/log.component.html +35 -39
  191. package/src/account/pages/log/log.component.ts +4 -3
  192. package/src/account/pages/password/password.component.html +109 -113
  193. package/src/account/pages/password/password.component.ts +5 -3
  194. package/src/account/pages/sessions/sessions.component.html +52 -56
  195. package/src/account/pages/sessions/sessions.component.ts +4 -3
  196. package/src/account/pages/totp/totp.component.html +234 -238
  197. package/src/account/pages/totp/totp.component.ts +4 -3
  198. package/src/login/containers/template/template.component.html +22 -8
  199. package/src/login/containers/template/template.component.ts +100 -12
  200. package/src/login/pages/code/code.component.html +19 -23
  201. package/src/login/pages/code/code.component.ts +18 -6
  202. package/src/login/pages/delete-account-confirm/delete-account-confirm.component.html +41 -45
  203. package/src/login/pages/delete-account-confirm/delete-account-confirm.component.ts +16 -4
  204. package/src/login/pages/delete-credential/delete-credential.component.html +29 -31
  205. package/src/login/pages/delete-credential/delete-credential.component.ts +16 -9
  206. package/src/login/pages/error/error.component.html +20 -22
  207. package/src/login/pages/error/error.component.ts +17 -5
  208. package/src/login/pages/frontchannel-logout/frontchannel-logout.component.html +25 -34
  209. package/src/login/pages/frontchannel-logout/frontchannel-logout.component.ts +17 -9
  210. package/src/login/pages/idp-review-user-profile/idp-review-user-profile.component.html +29 -38
  211. package/src/login/pages/idp-review-user-profile/idp-review-user-profile.component.ts +18 -12
  212. package/src/login/pages/info/info.component.html +39 -48
  213. package/src/login/pages/info/info.component.ts +17 -10
  214. package/src/login/pages/login/login.component.html +184 -194
  215. package/src/login/pages/login/login.component.ts +20 -12
  216. package/src/login/pages/login-config-totp/login-config-totp.component.html +181 -190
  217. package/src/login/pages/login-config-totp/login-config-totp.component.ts +16 -10
  218. package/src/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.html +27 -37
  219. package/src/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.ts +15 -14
  220. package/src/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.html +26 -36
  221. package/src/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.ts +15 -14
  222. package/src/login/pages/login-idp-link-email/login-idp-link-email.component.html +24 -34
  223. package/src/login/pages/login-idp-link-email/login-idp-link-email.component.ts +15 -14
  224. package/src/login/pages/login-oauth-grant/login-oauth-grant.component.html +75 -84
  225. package/src/login/pages/login-oauth-grant/login-oauth-grant.component.ts +15 -14
  226. package/src/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.html +49 -58
  227. package/src/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.ts +15 -9
  228. package/src/login/pages/login-otp/login-otp.component.html +89 -98
  229. package/src/login/pages/login-otp/login-otp.component.ts +16 -9
  230. package/src/login/pages/login-page-expired/login-page-expired.component.html +26 -33
  231. package/src/login/pages/login-page-expired/login-page-expired.component.ts +15 -9
  232. package/src/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.html +181 -188
  233. package/src/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.ts +15 -5
  234. package/src/login/pages/login-password/login-password.component.html +73 -80
  235. package/src/login/pages/login-password/login-password.component.ts +17 -9
  236. package/src/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.html +136 -145
  237. package/src/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.ts +17 -9
  238. package/src/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.html +60 -68
  239. package/src/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.ts +16 -9
  240. package/src/login/pages/login-reset-otp/login-reset-otp.component.html +53 -60
  241. package/src/login/pages/login-reset-otp/login-reset-otp.component.ts +15 -8
  242. package/src/login/pages/login-reset-password/login-reset-password.component.html +77 -86
  243. package/src/login/pages/login-reset-password/login-reset-password.component.ts +16 -9
  244. package/src/login/pages/login-update-password/login-update-password.component.html +98 -108
  245. package/src/login/pages/login-update-password/login-update-password.component.ts +15 -8
  246. package/src/login/pages/login-update-profile/login-update-profile.component.html +44 -53
  247. package/src/login/pages/login-update-profile/login-update-profile.component.ts +17 -10
  248. package/src/login/pages/login-username/login-username.component.html +138 -148
  249. package/src/login/pages/login-username/login-username.component.ts +16 -9
  250. package/src/login/pages/login-verify-email/login-verify-email.component.html +17 -25
  251. package/src/login/pages/login-verify-email/login-verify-email.component.ts +15 -9
  252. package/src/login/pages/login-x509-info/login-x509-info.component.html +85 -94
  253. package/src/login/pages/login-x509-info/login-x509-info.component.ts +15 -9
  254. package/src/login/pages/logout-confirm/logout-confirm.component.html +39 -49
  255. package/src/login/pages/logout-confirm/logout-confirm.component.ts +15 -14
  256. package/src/login/pages/register/register.component.html +100 -110
  257. package/src/login/pages/register/register.component.ts +19 -12
  258. package/src/login/pages/saml-post-form/saml-post-form.component.html +39 -48
  259. package/src/login/pages/saml-post-form/saml-post-form.component.ts +19 -13
  260. package/src/login/pages/select-authenticator/select-authenticator.component.html +36 -44
  261. package/src/login/pages/select-authenticator/select-authenticator.component.ts +16 -9
  262. package/src/login/pages/terms/terms.component.html +25 -34
  263. package/src/login/pages/terms/terms.component.ts +16 -9
  264. package/src/login/pages/update-email/update-email.component.html +44 -53
  265. package/src/login/pages/update-email/update-email.component.ts +16 -15
  266. package/src/login/pages/webauthn-authenticate/webauthn-authenticate.component.html +134 -144
  267. package/src/login/pages/webauthn-authenticate/webauthn-authenticate.component.ts +16 -9
  268. package/src/login/pages/webauthn-error/webauthn-error.component.html +45 -55
  269. package/src/login/pages/webauthn-error/webauthn-error.component.ts +16 -9
  270. package/src/login/pages/webauthn-register/webauthn-register.component.html +65 -75
  271. package/src/login/pages/webauthn-register/webauthn-register.component.ts +16 -9
@@ -15,22 +15,23 @@ export class SessionsComponent extends ComponentReference {
15
15
  this.kcContext = inject(KC_ACCOUNT_CONTEXT);
16
16
  this.doUseDefaultCss = inject(USE_DEFAULT_CSS);
17
17
  this.classes = inject(ACCOUNT_CLASSES);
18
+ this.active = 'sessions';
18
19
  }
19
20
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SessionsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
20
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: SessionsComponent, isStandalone: true, selector: "kc-root", providers: [
21
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: SessionsComponent, isStandalone: true, selector: "kc-sessions", providers: [
21
22
  {
22
23
  provide: ComponentReference,
23
24
  useExisting: forwardRef(() => SessionsComponent)
24
25
  }
25
- ], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let sessions = kcContext.sessions;\n@let stateChecker = kcContext.stateChecker;\n\n<kc-account-template [active]=\"'sessions'\">\n <ng-container content>\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('sessionsHtmlTitle') }}</h2>\n </div>\n </div>\n\n <table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <th>{{ i18n.msgStr('ip') }}</th>\n <th>{{ i18n.msgStr('started') }}</th>\n <th>{{ i18n.msgStr('lastAccess') }}</th>\n <th>{{ i18n.msgStr('expires') }}</th>\n <th>{{ i18n.msgStr('clients') }}</th>\n </tr>\n </thead>\n\n <tbody role=\"rowgroup\">\n @for (session of sessions.sessions; track session) {\n <tr>\n <td>{{ session.ipAddress }}</td>\n <td>{{ session?.started }}</td>\n <td>{{ session?.lastAccess }}</td>\n <td>{{ session?.expires }}</td>\n <td>\n @for (client of session.clients; track client) {\n <div>\n {{ client }}\n <br />\n </div>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <form\n method=\"post\"\n [action]=\"url.sessionsUrl\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <button\n id=\"logout-all-sessions\"\n type=\"submit\"\n [kcClass]=\"['kcButtonDefaultClass', 'kcButtonClass']\"\n >\n {{ i18n.msgStr('doLogOutAllSessions') }}\n </button>\n </form>\n </ng-container>\n</kc-account-template>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "component", type: TemplateComponent, selector: "kc-account-template", inputs: ["active"] }] }); }
26
+ ], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let sessions = kcContext.sessions;\n@let stateChecker = kcContext.stateChecker;\n\n<div [kcClass]=\"'kcContentWrapperClass'\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('sessionsHtmlTitle') }}</h2>\n </div>\n</div>\n\n<table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <th>{{ i18n.msgStr('ip') }}</th>\n <th>{{ i18n.msgStr('started') }}</th>\n <th>{{ i18n.msgStr('lastAccess') }}</th>\n <th>{{ i18n.msgStr('expires') }}</th>\n <th>{{ i18n.msgStr('clients') }}</th>\n </tr>\n </thead>\n\n <tbody role=\"rowgroup\">\n @for (session of sessions.sessions; track session) {\n <tr>\n <td>{{ session.ipAddress }}</td>\n <td>{{ session?.started }}</td>\n <td>{{ session?.lastAccess }}</td>\n <td>{{ session?.expires }}</td>\n <td>\n @for (client of session.clients; track client) {\n <div>\n {{ client }}\n <br />\n </div>\n }\n </td>\n </tr>\n }\n </tbody>\n</table>\n\n<form\n method=\"post\"\n [action]=\"url.sessionsUrl\"\n>\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <button\n id=\"logout-all-sessions\"\n type=\"submit\"\n [kcClass]=\"['kcButtonDefaultClass', 'kcButtonClass']\"\n >\n {{ i18n.msgStr('doLogOutAllSessions') }}\n </button>\n</form>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }] }); }
26
27
  }
27
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SessionsComponent, decorators: [{
28
29
  type: Component,
29
- args: [{ standalone: true, imports: [KcClassDirective, TemplateComponent, NgClass], selector: 'kc-root', providers: [
30
+ args: [{ standalone: true, imports: [KcClassDirective, TemplateComponent, NgClass], selector: 'kc-sessions', providers: [
30
31
  {
31
32
  provide: ComponentReference,
32
33
  useExisting: forwardRef(() => SessionsComponent)
33
34
  }
34
- ], template: "@let url = kcContext.url;\n@let sessions = kcContext.sessions;\n@let stateChecker = kcContext.stateChecker;\n\n<kc-account-template [active]=\"'sessions'\">\n <ng-container content>\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('sessionsHtmlTitle') }}</h2>\n </div>\n </div>\n\n <table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <th>{{ i18n.msgStr('ip') }}</th>\n <th>{{ i18n.msgStr('started') }}</th>\n <th>{{ i18n.msgStr('lastAccess') }}</th>\n <th>{{ i18n.msgStr('expires') }}</th>\n <th>{{ i18n.msgStr('clients') }}</th>\n </tr>\n </thead>\n\n <tbody role=\"rowgroup\">\n @for (session of sessions.sessions; track session) {\n <tr>\n <td>{{ session.ipAddress }}</td>\n <td>{{ session?.started }}</td>\n <td>{{ session?.lastAccess }}</td>\n <td>{{ session?.expires }}</td>\n <td>\n @for (client of session.clients; track client) {\n <div>\n {{ client }}\n <br />\n </div>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <form\n method=\"post\"\n [action]=\"url.sessionsUrl\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <button\n id=\"logout-all-sessions\"\n type=\"submit\"\n [kcClass]=\"['kcButtonDefaultClass', 'kcButtonClass']\"\n >\n {{ i18n.msgStr('doLogOutAllSessions') }}\n </button>\n </form>\n </ng-container>\n</kc-account-template>\n" }]
35
+ ], template: "@let url = kcContext.url;\n@let sessions = kcContext.sessions;\n@let stateChecker = kcContext.stateChecker;\n\n<div [kcClass]=\"'kcContentWrapperClass'\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('sessionsHtmlTitle') }}</h2>\n </div>\n</div>\n\n<table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <th>{{ i18n.msgStr('ip') }}</th>\n <th>{{ i18n.msgStr('started') }}</th>\n <th>{{ i18n.msgStr('lastAccess') }}</th>\n <th>{{ i18n.msgStr('expires') }}</th>\n <th>{{ i18n.msgStr('clients') }}</th>\n </tr>\n </thead>\n\n <tbody role=\"rowgroup\">\n @for (session of sessions.sessions; track session) {\n <tr>\n <td>{{ session.ipAddress }}</td>\n <td>{{ session?.started }}</td>\n <td>{{ session?.lastAccess }}</td>\n <td>{{ session?.expires }}</td>\n <td>\n @for (client of session.clients; track client) {\n <div>\n {{ client }}\n <br />\n </div>\n }\n </td>\n </tr>\n }\n </tbody>\n</table>\n\n<form\n method=\"post\"\n [action]=\"url.sessionsUrl\"\n>\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <button\n id=\"logout-all-sessions\"\n type=\"submit\"\n [kcClass]=\"['kcButtonDefaultClass', 'kcButtonClass']\"\n >\n {{ i18n.msgStr('doLogOutAllSessions') }}\n </button>\n</form>\n" }]
35
36
  }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FjY291bnQvcGFnZXMvc2Vzc2lvbnMvc2Vzc2lvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2FjY291bnQvcGFnZXMvc2Vzc2lvbnMvc2Vzc2lvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUM5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7QUFpQmxGLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxrQkFBa0I7SUFaekQ7O1FBYUksU0FBSSxHQUFHLE1BQU0sQ0FBTyxZQUFZLENBQUMsQ0FBQztRQUNsQyxjQUFTLEdBQUcsTUFBTSxDQUFpRCxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlFLG9CQUFlLEdBQUcsTUFBTSxDQUFVLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELFlBQU8sR0FBRyxNQUFNLENBQW9DLGVBQWUsQ0FBQyxDQUFDO0tBQ2pGOzhHQUxZLGlCQUFpQjtrR0FBakIsaUJBQWlCLHNEQVBmO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQzthQUNuRDtTQUNKLGlEQ3ZCTCwrckVBK0RBLDRDRGhEYyxnQkFBZ0IsK0ZBQUUsaUJBQWlCOzsyRkFVcEMsaUJBQWlCO2tCQVo3QixTQUFTO2lDQUNNLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxZQUM3QyxTQUFTLGFBRVI7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGtCQUFrQjs0QkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7eUJBQ25EO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmZXJlbmNlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9jbGFzc2VzL2NvbXBvbmVudC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2NvbnRhaW5lcnMvdGVtcGxhdGUnO1xuaW1wb3J0IHsgS2NDbGFzc0RpcmVjdGl2ZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvZGlyZWN0aXZlcy9rYy1jbGFzcyc7XG5pbXBvcnQgeyBBQ0NPVU5UX0NMQVNTRVMgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9jbGFzc2VzJztcbmltcG9ydCB7IEFDQ09VTlRfSTE4TiB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2kxOG4nO1xuaW1wb3J0IHsgS0NfQUNDT1VOVF9DT05URVhUIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMva2MtY29udGV4dCc7XG5pbXBvcnQgeyBVU0VfREVGQVVMVF9DU1MgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9saWIvdG9rZW5zL3VzZS1kZWZhdWx0LWNzcyc7XG5pbXBvcnQgdHlwZSB7IENsYXNzS2V5IH0gZnJvbSAna2V5Y2xvYWtpZnkvYWNjb3VudCc7XG5pbXBvcnQgdHlwZSB7IEkxOG4gfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBLY0NvbnRleHQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L0tjQ29udGV4dCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0tjQ2xhc3NEaXJlY3RpdmUsIFRlbXBsYXRlQ29tcG9uZW50LCBOZ0NsYXNzXSxcbiAgICBzZWxlY3RvcjogJ2tjLXJvb3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnc2Vzc2lvbnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBDb21wb25lbnRSZWZlcmVuY2UsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTZXNzaW9uc0NvbXBvbmVudClcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgU2Vzc2lvbnNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRSZWZlcmVuY2Uge1xuICAgIGkxOG4gPSBpbmplY3Q8STE4bj4oQUNDT1VOVF9JMThOKTtcbiAgICBrY0NvbnRleHQgPSBpbmplY3Q8RXh0cmFjdDxLY0NvbnRleHQsIHsgcGFnZUlkOiAnc2Vzc2lvbnMuZnRsJyB9Pj4oS0NfQUNDT1VOVF9DT05URVhUKTtcbiAgICBvdmVycmlkZSBkb1VzZURlZmF1bHRDc3MgPSBpbmplY3Q8Ym9vbGVhbj4oVVNFX0RFRkFVTFRfQ1NTKTtcbiAgICBvdmVycmlkZSBjbGFzc2VzID0gaW5qZWN0PFBhcnRpYWw8UmVjb3JkPENsYXNzS2V5LCBzdHJpbmc+Pj4oQUNDT1VOVF9DTEFTU0VTKTtcbn1cbiIsIkBsZXQgdXJsID0ga2NDb250ZXh0LnVybDtcbkBsZXQgc2Vzc2lvbnMgPSBrY0NvbnRleHQuc2Vzc2lvbnM7XG5AbGV0IHN0YXRlQ2hlY2tlciA9IGtjQ29udGV4dC5zdGF0ZUNoZWNrZXI7XG5cbjxrYy1hY2NvdW50LXRlbXBsYXRlIFthY3RpdmVdPVwiJ3Nlc3Npb25zJ1wiPlxuICAgIDxuZy1jb250YWluZXIgY29udGVudD5cbiAgICAgICAgPGRpdiBba2NDbGFzc109XCIna2NDb250ZW50V3JhcHBlckNsYXNzJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMFwiPlxuICAgICAgICAgICAgICAgIDxoMj57eyBpMThuLm1zZ1N0cignc2Vzc2lvbnNIdG1sVGl0bGUnKSB9fTwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZFwiPlxuICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRoPnt7IGkxOG4ubXNnU3RyKCdpcCcpIH19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPnt7IGkxOG4ubXNnU3RyKCdzdGFydGVkJykgfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGg+e3sgaTE4bi5tc2dTdHIoJ2xhc3RBY2Nlc3MnKSB9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD57eyBpMThuLm1zZ1N0cignZXhwaXJlcycpIH19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPnt7IGkxOG4ubXNnU3RyKCdjbGllbnRzJykgfX08L3RoPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuXG4gICAgICAgICAgICA8dGJvZHkgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoc2Vzc2lvbiBvZiBzZXNzaW9ucy5zZXNzaW9uczsgdHJhY2sgc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgc2Vzc2lvbi5pcEFkZHJlc3MgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHNlc3Npb24/LnN0YXJ0ZWQgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHNlc3Npb24/Lmxhc3RBY2Nlc3MgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHNlc3Npb24/LmV4cGlyZXMgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNsaWVudCBvZiBzZXNzaW9uLmNsaWVudHM7IHRyYWNrIGNsaWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2xpZW50IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgIDxmb3JtXG4gICAgICAgICAgICBtZXRob2Q9XCJwb3N0XCJcbiAgICAgICAgICAgIFthY3Rpb25dPVwidXJsLnNlc3Npb25zVXJsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgaWQ9XCJzdGF0ZUNoZWNrZXJcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJzdGF0ZUNoZWNrZXJcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdGF0ZUNoZWNrZXJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImxvZ291dC1hbGwtc2Vzc2lvbnNcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIlsna2NCdXR0b25EZWZhdWx0Q2xhc3MnLCAna2NCdXR0b25DbGFzcyddXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cignZG9Mb2dPdXRBbGxTZXNzaW9ucycpIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9rYy1hY2NvdW50LXRlbXBsYXRlPlxuIl19
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FjY291bnQvcGFnZXMvc2Vzc2lvbnMvc2Vzc2lvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2FjY291bnQvcGFnZXMvc2Vzc2lvbnMvc2Vzc2lvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUM5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUdwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7QUFlbEYsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGtCQUFrQjtJQVp6RDs7UUFhSSxTQUFJLEdBQUcsTUFBTSxDQUFPLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxNQUFNLENBQWlELGtCQUFrQixDQUFDLENBQUM7UUFDOUUsb0JBQWUsR0FBRyxNQUFNLENBQVUsZUFBZSxDQUFDLENBQUM7UUFDbkQsWUFBTyxHQUFHLE1BQU0sQ0FBb0MsZUFBZSxDQUFDLENBQUM7UUFDOUUsV0FBTSxHQUFHLFVBQVUsQ0FBQztLQUN2Qjs4R0FOWSxpQkFBaUI7a0dBQWpCLGlCQUFpQiwwREFQZjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7YUFDbkQ7U0FDSixpREN2QkwsdXFEQTJEQSw0Q0Q1Q2MsZ0JBQWdCOzsyRkFVakIsaUJBQWlCO2tCQVo3QixTQUFTO2lDQUNNLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxZQUM3QyxhQUFhLGFBRVo7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGtCQUFrQjs0QkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7eUJBQ25EO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmZXJlbmNlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9jbGFzc2VzL2NvbXBvbmVudC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2NvbnRhaW5lcnMvdGVtcGxhdGUnO1xuaW1wb3J0IHsgS2NDbGFzc0RpcmVjdGl2ZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvZGlyZWN0aXZlcy9rYy1jbGFzcyc7XG5pbXBvcnQgdHlwZSB7IEkxOG4gfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBLY0NvbnRleHQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L0tjQ29udGV4dCc7XG5pbXBvcnQgeyBBQ0NPVU5UX0NMQVNTRVMgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9jbGFzc2VzJztcbmltcG9ydCB7IEFDQ09VTlRfSTE4TiB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2kxOG4nO1xuaW1wb3J0IHsgS0NfQUNDT1VOVF9DT05URVhUIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMva2MtY29udGV4dCc7XG5pbXBvcnQgeyBVU0VfREVGQVVMVF9DU1MgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9saWIvdG9rZW5zL3VzZS1kZWZhdWx0LWNzcyc7XG5pbXBvcnQgdHlwZSB7IENsYXNzS2V5IH0gZnJvbSAna2V5Y2xvYWtpZnkvYWNjb3VudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0tjQ2xhc3NEaXJlY3RpdmUsIFRlbXBsYXRlQ29tcG9uZW50LCBOZ0NsYXNzXSxcbiAgICBzZWxlY3RvcjogJ2tjLXNlc3Npb25zJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3Nlc3Npb25zLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQ29tcG9uZW50UmVmZXJlbmNlLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2Vzc2lvbnNDb21wb25lbnQpXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlc3Npb25zQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50UmVmZXJlbmNlIHtcbiAgICBpMThuID0gaW5qZWN0PEkxOG4+KEFDQ09VTlRfSTE4Tik7XG4gICAga2NDb250ZXh0ID0gaW5qZWN0PEV4dHJhY3Q8S2NDb250ZXh0LCB7IHBhZ2VJZDogJ3Nlc3Npb25zLmZ0bCcgfT4+KEtDX0FDQ09VTlRfQ09OVEVYVCk7XG4gICAgb3ZlcnJpZGUgZG9Vc2VEZWZhdWx0Q3NzID0gaW5qZWN0PGJvb2xlYW4+KFVTRV9ERUZBVUxUX0NTUyk7XG4gICAgb3ZlcnJpZGUgY2xhc3NlcyA9IGluamVjdDxQYXJ0aWFsPFJlY29yZDxDbGFzc0tleSwgc3RyaW5nPj4+KEFDQ09VTlRfQ0xBU1NFUyk7XG4gICAgYWN0aXZlID0gJ3Nlc3Npb25zJztcbn1cbiIsIkBsZXQgdXJsID0ga2NDb250ZXh0LnVybDtcbkBsZXQgc2Vzc2lvbnMgPSBrY0NvbnRleHQuc2Vzc2lvbnM7XG5AbGV0IHN0YXRlQ2hlY2tlciA9IGtjQ29udGV4dC5zdGF0ZUNoZWNrZXI7XG5cbjxkaXYgW2tjQ2xhc3NdPVwiJ2tjQ29udGVudFdyYXBwZXJDbGFzcydcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XG4gICAgICAgIDxoMj57eyBpMThuLm1zZ1N0cignc2Vzc2lvbnNIdG1sVGl0bGUnKSB9fTwvaDI+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZFwiPlxuICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoPnt7IGkxOG4ubXNnU3RyKCdpcCcpIH19PC90aD5cbiAgICAgICAgICAgIDx0aD57eyBpMThuLm1zZ1N0cignc3RhcnRlZCcpIH19PC90aD5cbiAgICAgICAgICAgIDx0aD57eyBpMThuLm1zZ1N0cignbGFzdEFjY2VzcycpIH19PC90aD5cbiAgICAgICAgICAgIDx0aD57eyBpMThuLm1zZ1N0cignZXhwaXJlcycpIH19PC90aD5cbiAgICAgICAgICAgIDx0aD57eyBpMThuLm1zZ1N0cignY2xpZW50cycpIH19PC90aD5cbiAgICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuXG4gICAgPHRib2R5IHJvbGU9XCJyb3dncm91cFwiPlxuICAgICAgICBAZm9yIChzZXNzaW9uIG9mIHNlc3Npb25zLnNlc3Npb25zOyB0cmFjayBzZXNzaW9uKSB7XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgPHRkPnt7IHNlc3Npb24uaXBBZGRyZXNzIH19PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+e3sgc2Vzc2lvbj8uc3RhcnRlZCB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkPnt7IHNlc3Npb24/Lmxhc3RBY2Nlc3MgfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD57eyBzZXNzaW9uPy5leHBpcmVzIH19PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNsaWVudCBvZiBzZXNzaW9uLmNsaWVudHM7IHRyYWNrIGNsaWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjbGllbnQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIH1cbiAgICA8L3Rib2R5PlxuPC90YWJsZT5cblxuPGZvcm1cbiAgICBtZXRob2Q9XCJwb3N0XCJcbiAgICBbYWN0aW9uXT1cInVybC5zZXNzaW9uc1VybFwiXG4+XG4gICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICBpZD1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgIG5hbWU9XCJzdGF0ZUNoZWNrZXJcIlxuICAgICAgICBbdmFsdWVdPVwic3RhdGVDaGVja2VyXCJcbiAgICAvPlxuICAgIDxidXR0b25cbiAgICAgICAgaWQ9XCJsb2dvdXQtYWxsLXNlc3Npb25zXCJcbiAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgIFtrY0NsYXNzXT1cIlsna2NCdXR0b25EZWZhdWx0Q2xhc3MnLCAna2NCdXR0b25DbGFzcyddXCJcbiAgICA+XG4gICAgICAgIHt7IGkxOG4ubXNnU3RyKCdkb0xvZ091dEFsbFNlc3Npb25zJykgfX1cbiAgICA8L2J1dHRvbj5cbjwvZm9ybT5cbiJdfQ==
@@ -16,22 +16,23 @@ export class TotpComponent extends ComponentReference {
16
16
  this.kcContext = inject(KC_ACCOUNT_CONTEXT);
17
17
  this.doUseDefaultCss = inject(USE_DEFAULT_CSS);
18
18
  this.classes = inject(ACCOUNT_CLASSES);
19
+ this.active = 'totp';
19
20
  }
20
21
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TotpComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
21
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: TotpComponent, isStandalone: true, selector: "kc-root", providers: [
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: TotpComponent, isStandalone: true, selector: "kc-totp", providers: [
22
23
  {
23
24
  provide: ComponentReference,
24
25
  useExisting: forwardRef(() => TotpComponent)
25
26
  }
26
- ], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let mode = kcContext.mode;\n@let messagesPerField = kcContext.messagesPerField;\n@let stateChecker = kcContext.stateChecker;\n@let totp = kcContext.totp;\n\n<kc-account-template [active]=\"'totp'\">\n <ng-container content>\n <div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('authenticatorTitle') }}</h2>\n </div>\n @if (totp.otpCredentials.length) {\n <div class=\"subtitle col-md-2\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </div>\n }\n </div>\n @if (totp.enabled) {\n <table class=\"table table-bordered table-striped\">\n <thead>\n @if (totp.otpCredentials.length > 1) {\n <tr>\n <th [colSpan]=\"4\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n } @else {\n <tr>\n <th [colSpan]=\"3\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n }\n </thead>\n <tbody>\n @for (credential of totp.otpCredentials; track credential; let index = $index) {\n <tr>\n <td class=\"provider\">{{ i18n.msgStr('mobile') }}</td>\n @if (totp.otpCredentials.length > 1) {\n <td class=\"provider\">{{ credential.id }}</td>\n }\n <td class=\"provider\">{{ credential.userLabel || '' }}</td>\n <td class=\"action\">\n <form\n method=\"post\"\n class=\"form-inline\"\n [action]=\"url.totpUrl\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n id=\"submitAction\"\n name=\"submitAction\"\n value=\"Delete\"\n />\n <input\n type=\"hidden\"\n id=\"credentialId\"\n name=\"credentialId\"\n [value]=\"credential.id\"\n />\n <button\n class=\"btn btn-default\"\n [id]=\"'remove-mobile-' + index\"\n >\n <i class=\"pficon pficon-delete\"></i>\n </button>\n </form>\n </td>\n </tr>\n }\n </tbody>\n </table>\n } @else {\n <div>\n <hr />\n <ol id=\"kc-totp-settings\">\n <li>\n <p>{{ i18n.msgStr('totpStep1') }}</p>\n\n <ul id=\"kc-totp-supported-apps\">\n @for (app of totp.supportedApplications; track app) {\n <li>{{ i18n.advancedMsgStr(app) }}</li>\n }\n </ul>\n </li>\n @if (mode && mode === 'manual') {\n <li>\n <p>{{ i18n.msgStr('totpManualStep2') }}</p>\n <p>\n <span id=\"kc-totp-secret-key\">{{ totp.totpSecretEncoded }}</span>\n </p>\n <p>\n <a\n id=\"mode-barcode\"\n [href]=\"totp.qrUrl\"\n >\n {{ i18n.msgStr('totpScanBarcode') }}\n </a>\n </p>\n </li>\n <li>\n <p>{{ i18n.msgStr('totpManualStep3') }}</p>\n <ul>\n <li id=\"kc-totp-type\">{{ i18n.msgStr('totpType') }}: {{ i18n.msgStr($any('totp.' + totp.policy.type)) }}</li>\n <li id=\"kc-totp-algorithm\">{{ i18n.msgStr('totpAlgorithm') }}: {{ totp.policy.getAlgorithmKey() }}</li>\n <li id=\"kc-totp-digits\">{{ i18n.msgStr('totpDigits') }}: {{ totp.policy.digits }}</li>\n @if (totp.policy.type === 'totp') {\n <li id=\"kc-totp-period\">{{ i18n.msgStr('totpInterval') }}: {{ totp.policy.period }}</li>\n } @else {\n <li id=\"kc-totp-counter\">{{ i18n.msgStr('totpCounter') }}: {{ totp.policy.initialCounter }}</li>\n }\n </ul>\n </li>\n } @else {\n <li>\n <p>{{ i18n.msgStr('totpStep2') }}</p>\n <p>\n <img\n id=\"kc-totp-secret-qr-code\"\n alt=\"Figure: Barcode\"\n [src]=\"'data:image/png;base64, ' + totp.totpSecretQrCode\"\n />\n </p>\n <p>\n <a\n id=\"mode-manual\"\n [href]=\"totp.manualUrl\"\n >\n {{ i18n.msgStr('totpUnableToScan') }}\n </a>\n </p>\n </li>\n }\n <li>\n <p>{{ i18n.msgStr('totpStep3') }}</p>\n <p>{{ i18n.msgStr('totpStep3DeviceName') }}</p>\n </li>\n </ol>\n <hr />\n <form\n id=\"kc-totp-settings-form\"\n method=\"post\"\n [action]=\"url.totpUrl\"\n [kcClass]=\"'kcFormClass'\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"totp\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('authenticatorCode') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"totp\"\n name=\"totp\"\n autoComplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('totp')\"\n />\n @if (messagesPerField.existsError('totp')) {\n <span\n id=\"input-error-otp-code\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('totp') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n <input\n type=\"hidden\"\n id=\"totpSecret\"\n name=\"totpSecret\"\n [value]=\"totp.totpSecret\"\n />\n @if (mode) {\n <input\n type=\"hidden\"\n id=\"mode\"\n [value]=\"mode\"\n />\n }\n </div>\n\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"userLabel\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('totpDeviceName') }}\n </label>\n @if (totp.otpCredentials.length >= 1) {\n <span class=\"required\">*</span>\n }\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"userLabel\"\n name=\"userLabel\"\n autoComplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('userLabel')\"\n />\n @if (messagesPerField.existsError('userLabel')) {\n <span\n id=\"input-error-otp-label\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('userLabel') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n </div>\n\n <div\n id=\"kc-form-buttons\"\n class=\"text-right\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <div [kcClass]=\"'kcInputWrapperClass'\">\n <input\n type=\"submit\"\n id=\"saveTOTPBtn\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doSave')\"\n />\n <button\n type=\"submit\"\n id=\"cancelTOTPBtn\"\n name=\"submitAction\"\n value=\"Cancel\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n }\n </ng-container>\n</kc-account-template>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "component", type: TemplateComponent, selector: "kc-account-template", inputs: ["active"] }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }] }); }
27
+ ], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let mode = kcContext.mode;\n@let messagesPerField = kcContext.messagesPerField;\n@let stateChecker = kcContext.stateChecker;\n@let totp = kcContext.totp;\n\n<div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('authenticatorTitle') }}</h2>\n </div>\n @if (totp.otpCredentials.length) {\n <div class=\"subtitle col-md-2\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </div>\n }\n</div>\n@if (totp.enabled) {\n <table class=\"table table-bordered table-striped\">\n <thead>\n @if (totp.otpCredentials.length > 1) {\n <tr>\n <th [colSpan]=\"4\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n } @else {\n <tr>\n <th [colSpan]=\"3\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n }\n </thead>\n <tbody>\n @for (credential of totp.otpCredentials; track credential; let index = $index) {\n <tr>\n <td class=\"provider\">{{ i18n.msgStr('mobile') }}</td>\n @if (totp.otpCredentials.length > 1) {\n <td class=\"provider\">{{ credential.id }}</td>\n }\n <td class=\"provider\">{{ credential.userLabel || '' }}</td>\n <td class=\"action\">\n <form\n method=\"post\"\n class=\"form-inline\"\n [action]=\"url.totpUrl\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n id=\"submitAction\"\n name=\"submitAction\"\n value=\"Delete\"\n />\n <input\n type=\"hidden\"\n id=\"credentialId\"\n name=\"credentialId\"\n [value]=\"credential.id\"\n />\n <button\n class=\"btn btn-default\"\n [id]=\"'remove-mobile-' + index\"\n >\n <i class=\"pficon pficon-delete\"></i>\n </button>\n </form>\n </td>\n </tr>\n }\n </tbody>\n </table>\n} @else {\n <div>\n <hr />\n <ol id=\"kc-totp-settings\">\n <li>\n <p>{{ i18n.msgStr('totpStep1') }}</p>\n\n <ul id=\"kc-totp-supported-apps\">\n @for (app of totp.supportedApplications; track app) {\n <li>{{ i18n.advancedMsgStr(app) }}</li>\n }\n </ul>\n </li>\n @if (mode && mode === 'manual') {\n <li>\n <p>{{ i18n.msgStr('totpManualStep2') }}</p>\n <p>\n <span id=\"kc-totp-secret-key\">{{ totp.totpSecretEncoded }}</span>\n </p>\n <p>\n <a\n id=\"mode-barcode\"\n [href]=\"totp.qrUrl\"\n >\n {{ i18n.msgStr('totpScanBarcode') }}\n </a>\n </p>\n </li>\n <li>\n <p>{{ i18n.msgStr('totpManualStep3') }}</p>\n <ul>\n <li id=\"kc-totp-type\">{{ i18n.msgStr('totpType') }}: {{ i18n.msgStr($any('totp.' + totp.policy.type)) }}</li>\n <li id=\"kc-totp-algorithm\">{{ i18n.msgStr('totpAlgorithm') }}: {{ totp.policy.getAlgorithmKey() }}</li>\n <li id=\"kc-totp-digits\">{{ i18n.msgStr('totpDigits') }}: {{ totp.policy.digits }}</li>\n @if (totp.policy.type === 'totp') {\n <li id=\"kc-totp-period\">{{ i18n.msgStr('totpInterval') }}: {{ totp.policy.period }}</li>\n } @else {\n <li id=\"kc-totp-counter\">{{ i18n.msgStr('totpCounter') }}: {{ totp.policy.initialCounter }}</li>\n }\n </ul>\n </li>\n } @else {\n <li>\n <p>{{ i18n.msgStr('totpStep2') }}</p>\n <p>\n <img\n id=\"kc-totp-secret-qr-code\"\n alt=\"Figure: Barcode\"\n [src]=\"'data:image/png;base64, ' + totp.totpSecretQrCode\"\n />\n </p>\n <p>\n <a\n id=\"mode-manual\"\n [href]=\"totp.manualUrl\"\n >\n {{ i18n.msgStr('totpUnableToScan') }}\n </a>\n </p>\n </li>\n }\n <li>\n <p>{{ i18n.msgStr('totpStep3') }}</p>\n <p>{{ i18n.msgStr('totpStep3DeviceName') }}</p>\n </li>\n </ol>\n <hr />\n <form\n id=\"kc-totp-settings-form\"\n method=\"post\"\n [action]=\"url.totpUrl\"\n [kcClass]=\"'kcFormClass'\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"totp\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('authenticatorCode') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"totp\"\n name=\"totp\"\n autoComplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('totp')\"\n />\n @if (messagesPerField.existsError('totp')) {\n <span\n id=\"input-error-otp-code\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('totp') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n <input\n type=\"hidden\"\n id=\"totpSecret\"\n name=\"totpSecret\"\n [value]=\"totp.totpSecret\"\n />\n @if (mode) {\n <input\n type=\"hidden\"\n id=\"mode\"\n [value]=\"mode\"\n />\n }\n </div>\n\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"userLabel\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('totpDeviceName') }}\n </label>\n @if (totp.otpCredentials.length >= 1) {\n <span class=\"required\">*</span>\n }\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"userLabel\"\n name=\"userLabel\"\n autoComplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('userLabel')\"\n />\n @if (messagesPerField.existsError('userLabel')) {\n <span\n id=\"input-error-otp-label\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('userLabel') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n </div>\n\n <div\n id=\"kc-form-buttons\"\n class=\"text-right\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <div [kcClass]=\"'kcInputWrapperClass'\">\n <input\n type=\"submit\"\n id=\"saveTOTPBtn\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doSave')\"\n />\n <button\n type=\"submit\"\n id=\"cancelTOTPBtn\"\n name=\"submitAction\"\n value=\"Cancel\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n}\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }] }); }
27
28
  }
28
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TotpComponent, decorators: [{
29
30
  type: Component,
30
- args: [{ standalone: true, imports: [KcClassDirective, TemplateComponent, KcSanitizePipe, NgClass], selector: 'kc-root', providers: [
31
+ args: [{ standalone: true, imports: [KcClassDirective, TemplateComponent, KcSanitizePipe, NgClass], selector: 'kc-totp', providers: [
31
32
  {
32
33
  provide: ComponentReference,
33
34
  useExisting: forwardRef(() => TotpComponent)
34
35
  }
35
- ], template: "@let url = kcContext.url;\n@let mode = kcContext.mode;\n@let messagesPerField = kcContext.messagesPerField;\n@let stateChecker = kcContext.stateChecker;\n@let totp = kcContext.totp;\n\n<kc-account-template [active]=\"'totp'\">\n <ng-container content>\n <div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('authenticatorTitle') }}</h2>\n </div>\n @if (totp.otpCredentials.length) {\n <div class=\"subtitle col-md-2\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </div>\n }\n </div>\n @if (totp.enabled) {\n <table class=\"table table-bordered table-striped\">\n <thead>\n @if (totp.otpCredentials.length > 1) {\n <tr>\n <th [colSpan]=\"4\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n } @else {\n <tr>\n <th [colSpan]=\"3\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n }\n </thead>\n <tbody>\n @for (credential of totp.otpCredentials; track credential; let index = $index) {\n <tr>\n <td class=\"provider\">{{ i18n.msgStr('mobile') }}</td>\n @if (totp.otpCredentials.length > 1) {\n <td class=\"provider\">{{ credential.id }}</td>\n }\n <td class=\"provider\">{{ credential.userLabel || '' }}</td>\n <td class=\"action\">\n <form\n method=\"post\"\n class=\"form-inline\"\n [action]=\"url.totpUrl\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n id=\"submitAction\"\n name=\"submitAction\"\n value=\"Delete\"\n />\n <input\n type=\"hidden\"\n id=\"credentialId\"\n name=\"credentialId\"\n [value]=\"credential.id\"\n />\n <button\n class=\"btn btn-default\"\n [id]=\"'remove-mobile-' + index\"\n >\n <i class=\"pficon pficon-delete\"></i>\n </button>\n </form>\n </td>\n </tr>\n }\n </tbody>\n </table>\n } @else {\n <div>\n <hr />\n <ol id=\"kc-totp-settings\">\n <li>\n <p>{{ i18n.msgStr('totpStep1') }}</p>\n\n <ul id=\"kc-totp-supported-apps\">\n @for (app of totp.supportedApplications; track app) {\n <li>{{ i18n.advancedMsgStr(app) }}</li>\n }\n </ul>\n </li>\n @if (mode && mode === 'manual') {\n <li>\n <p>{{ i18n.msgStr('totpManualStep2') }}</p>\n <p>\n <span id=\"kc-totp-secret-key\">{{ totp.totpSecretEncoded }}</span>\n </p>\n <p>\n <a\n id=\"mode-barcode\"\n [href]=\"totp.qrUrl\"\n >\n {{ i18n.msgStr('totpScanBarcode') }}\n </a>\n </p>\n </li>\n <li>\n <p>{{ i18n.msgStr('totpManualStep3') }}</p>\n <ul>\n <li id=\"kc-totp-type\">{{ i18n.msgStr('totpType') }}: {{ i18n.msgStr($any('totp.' + totp.policy.type)) }}</li>\n <li id=\"kc-totp-algorithm\">{{ i18n.msgStr('totpAlgorithm') }}: {{ totp.policy.getAlgorithmKey() }}</li>\n <li id=\"kc-totp-digits\">{{ i18n.msgStr('totpDigits') }}: {{ totp.policy.digits }}</li>\n @if (totp.policy.type === 'totp') {\n <li id=\"kc-totp-period\">{{ i18n.msgStr('totpInterval') }}: {{ totp.policy.period }}</li>\n } @else {\n <li id=\"kc-totp-counter\">{{ i18n.msgStr('totpCounter') }}: {{ totp.policy.initialCounter }}</li>\n }\n </ul>\n </li>\n } @else {\n <li>\n <p>{{ i18n.msgStr('totpStep2') }}</p>\n <p>\n <img\n id=\"kc-totp-secret-qr-code\"\n alt=\"Figure: Barcode\"\n [src]=\"'data:image/png;base64, ' + totp.totpSecretQrCode\"\n />\n </p>\n <p>\n <a\n id=\"mode-manual\"\n [href]=\"totp.manualUrl\"\n >\n {{ i18n.msgStr('totpUnableToScan') }}\n </a>\n </p>\n </li>\n }\n <li>\n <p>{{ i18n.msgStr('totpStep3') }}</p>\n <p>{{ i18n.msgStr('totpStep3DeviceName') }}</p>\n </li>\n </ol>\n <hr />\n <form\n id=\"kc-totp-settings-form\"\n method=\"post\"\n [action]=\"url.totpUrl\"\n [kcClass]=\"'kcFormClass'\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"totp\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('authenticatorCode') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"totp\"\n name=\"totp\"\n autoComplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('totp')\"\n />\n @if (messagesPerField.existsError('totp')) {\n <span\n id=\"input-error-otp-code\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('totp') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n <input\n type=\"hidden\"\n id=\"totpSecret\"\n name=\"totpSecret\"\n [value]=\"totp.totpSecret\"\n />\n @if (mode) {\n <input\n type=\"hidden\"\n id=\"mode\"\n [value]=\"mode\"\n />\n }\n </div>\n\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"userLabel\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('totpDeviceName') }}\n </label>\n @if (totp.otpCredentials.length >= 1) {\n <span class=\"required\">*</span>\n }\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"userLabel\"\n name=\"userLabel\"\n autoComplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('userLabel')\"\n />\n @if (messagesPerField.existsError('userLabel')) {\n <span\n id=\"input-error-otp-label\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('userLabel') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n </div>\n\n <div\n id=\"kc-form-buttons\"\n class=\"text-right\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <div [kcClass]=\"'kcInputWrapperClass'\">\n <input\n type=\"submit\"\n id=\"saveTOTPBtn\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doSave')\"\n />\n <button\n type=\"submit\"\n id=\"cancelTOTPBtn\"\n name=\"submitAction\"\n value=\"Cancel\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n }\n </ng-container>\n</kc-account-template>\n" }]
36
+ ], template: "@let url = kcContext.url;\n@let mode = kcContext.mode;\n@let messagesPerField = kcContext.messagesPerField;\n@let stateChecker = kcContext.stateChecker;\n@let totp = kcContext.totp;\n\n<div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('authenticatorTitle') }}</h2>\n </div>\n @if (totp.otpCredentials.length) {\n <div class=\"subtitle col-md-2\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </div>\n }\n</div>\n@if (totp.enabled) {\n <table class=\"table table-bordered table-striped\">\n <thead>\n @if (totp.otpCredentials.length > 1) {\n <tr>\n <th [colSpan]=\"4\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n } @else {\n <tr>\n <th [colSpan]=\"3\">{{ i18n.msgStr('configureAuthenticators') }}</th>\n </tr>\n }\n </thead>\n <tbody>\n @for (credential of totp.otpCredentials; track credential; let index = $index) {\n <tr>\n <td class=\"provider\">{{ i18n.msgStr('mobile') }}</td>\n @if (totp.otpCredentials.length > 1) {\n <td class=\"provider\">{{ credential.id }}</td>\n }\n <td class=\"provider\">{{ credential.userLabel || '' }}</td>\n <td class=\"action\">\n <form\n method=\"post\"\n class=\"form-inline\"\n [action]=\"url.totpUrl\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n id=\"submitAction\"\n name=\"submitAction\"\n value=\"Delete\"\n />\n <input\n type=\"hidden\"\n id=\"credentialId\"\n name=\"credentialId\"\n [value]=\"credential.id\"\n />\n <button\n class=\"btn btn-default\"\n [id]=\"'remove-mobile-' + index\"\n >\n <i class=\"pficon pficon-delete\"></i>\n </button>\n </form>\n </td>\n </tr>\n }\n </tbody>\n </table>\n} @else {\n <div>\n <hr />\n <ol id=\"kc-totp-settings\">\n <li>\n <p>{{ i18n.msgStr('totpStep1') }}</p>\n\n <ul id=\"kc-totp-supported-apps\">\n @for (app of totp.supportedApplications; track app) {\n <li>{{ i18n.advancedMsgStr(app) }}</li>\n }\n </ul>\n </li>\n @if (mode && mode === 'manual') {\n <li>\n <p>{{ i18n.msgStr('totpManualStep2') }}</p>\n <p>\n <span id=\"kc-totp-secret-key\">{{ totp.totpSecretEncoded }}</span>\n </p>\n <p>\n <a\n id=\"mode-barcode\"\n [href]=\"totp.qrUrl\"\n >\n {{ i18n.msgStr('totpScanBarcode') }}\n </a>\n </p>\n </li>\n <li>\n <p>{{ i18n.msgStr('totpManualStep3') }}</p>\n <ul>\n <li id=\"kc-totp-type\">{{ i18n.msgStr('totpType') }}: {{ i18n.msgStr($any('totp.' + totp.policy.type)) }}</li>\n <li id=\"kc-totp-algorithm\">{{ i18n.msgStr('totpAlgorithm') }}: {{ totp.policy.getAlgorithmKey() }}</li>\n <li id=\"kc-totp-digits\">{{ i18n.msgStr('totpDigits') }}: {{ totp.policy.digits }}</li>\n @if (totp.policy.type === 'totp') {\n <li id=\"kc-totp-period\">{{ i18n.msgStr('totpInterval') }}: {{ totp.policy.period }}</li>\n } @else {\n <li id=\"kc-totp-counter\">{{ i18n.msgStr('totpCounter') }}: {{ totp.policy.initialCounter }}</li>\n }\n </ul>\n </li>\n } @else {\n <li>\n <p>{{ i18n.msgStr('totpStep2') }}</p>\n <p>\n <img\n id=\"kc-totp-secret-qr-code\"\n alt=\"Figure: Barcode\"\n [src]=\"'data:image/png;base64, ' + totp.totpSecretQrCode\"\n />\n </p>\n <p>\n <a\n id=\"mode-manual\"\n [href]=\"totp.manualUrl\"\n >\n {{ i18n.msgStr('totpUnableToScan') }}\n </a>\n </p>\n </li>\n }\n <li>\n <p>{{ i18n.msgStr('totpStep3') }}</p>\n <p>{{ i18n.msgStr('totpStep3DeviceName') }}</p>\n </li>\n </ol>\n <hr />\n <form\n id=\"kc-totp-settings-form\"\n method=\"post\"\n [action]=\"url.totpUrl\"\n [kcClass]=\"'kcFormClass'\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"totp\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('authenticatorCode') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"totp\"\n name=\"totp\"\n autoComplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('totp')\"\n />\n @if (messagesPerField.existsError('totp')) {\n <span\n id=\"input-error-otp-code\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('totp') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n <input\n type=\"hidden\"\n id=\"totpSecret\"\n name=\"totpSecret\"\n [value]=\"totp.totpSecret\"\n />\n @if (mode) {\n <input\n type=\"hidden\"\n id=\"mode\"\n [value]=\"mode\"\n />\n }\n </div>\n\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"userLabel\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.msgStr('totpDeviceName') }}\n </label>\n @if (totp.otpCredentials.length >= 1) {\n <span class=\"required\">*</span>\n }\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n id=\"userLabel\"\n name=\"userLabel\"\n autoComplete=\"off\"\n [kcClass]=\"'kcInputClass'\"\n [attr.aria-invalid]=\"messagesPerField.existsError('userLabel')\"\n />\n @if (messagesPerField.existsError('userLabel')) {\n <span\n id=\"input-error-otp-label\"\n aria-live=\"polite\"\n [kcClass]=\"'kcInputErrorMessageClass'\"\n [innerHTML]=\"messagesPerField.get('userLabel') | kcSanitize: 'html'\"\n ></span>\n }\n </div>\n </div>\n\n <div\n id=\"kc-form-buttons\"\n class=\"text-right\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <div [kcClass]=\"'kcInputWrapperClass'\">\n <input\n type=\"submit\"\n id=\"saveTOTPBtn\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n [value]=\"i18n.msgStr('doSave')\"\n />\n <button\n type=\"submit\"\n id=\"cancelTOTPBtn\"\n name=\"submitAction\"\n value=\"Cancel\"\n [kcClass]=\"['kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </div>\n </div>\n </form>\n </div>\n}\n" }]
36
37
  }] });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG90cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYWNjb3VudC9wYWdlcy90b3RwL3RvdHAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2FjY291bnQvcGFnZXMvdG90cC90b3RwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNwRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOztBQWlCbEYsTUFBTSxPQUFPLGFBQWMsU0FBUSxrQkFBa0I7SUFackQ7O1FBYUksU0FBSSxHQUFHLE1BQU0sQ0FBTyxZQUFZLENBQUMsQ0FBQztRQUNsQyxjQUFTLEdBQUcsTUFBTSxDQUE2QyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFFLG9CQUFlLEdBQUcsTUFBTSxDQUFVLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELFlBQU8sR0FBRyxNQUFNLENBQW9DLGVBQWUsQ0FBQyxDQUFDO0tBQ2pGOzhHQUxZLGFBQWE7a0dBQWIsYUFBYSxzREFQWDtZQUNQO2dCQUNJLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO2FBQy9DO1NBQ0osaURDeEJMLGdwWUFrUUEsNENEbFBjLGdCQUFnQiwrRkFBRSxpQkFBaUIsK0VBQUUsY0FBYzs7MkZBVXBELGFBQWE7a0JBWnpCLFNBQVM7aUNBQ00sSUFBSSxXQUNQLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxZQUM3RCxTQUFTLGFBRVI7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGtCQUFrQjs0QkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDO3lCQUMvQztxQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFJlZmVyZW5jZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvY2xhc3Nlcy9jb21wb25lbnQtcmVmZXJlbmNlJztcbmltcG9ydCB7IFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9jb250YWluZXJzL3RlbXBsYXRlJztcbmltcG9ydCB7IEtjQ2xhc3NEaXJlY3RpdmUgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2RpcmVjdGl2ZXMva2MtY2xhc3MnO1xuaW1wb3J0IHsgQUNDT1VOVF9DTEFTU0VTIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMvY2xhc3Nlcyc7XG5pbXBvcnQgeyBBQ0NPVU5UX0kxOE4gfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9pMThuJztcbmltcG9ydCB7IEtDX0FDQ09VTlRfQ09OVEVYVCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2tjLWNvbnRleHQnO1xuaW1wb3J0IHsgS2NTYW5pdGl6ZVBpcGUgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9saWIvcGlwZXMva2Mtc2FuaXRpemUnO1xuaW1wb3J0IHsgVVNFX0RFRkFVTFRfQ1NTIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbGliL3Rva2Vucy91c2UtZGVmYXVsdC1jc3MnO1xuaW1wb3J0IHR5cGUgeyBDbGFzc0tleSB9IGZyb20gJ2tleWNsb2FraWZ5L2FjY291bnQnO1xuaW1wb3J0IHR5cGUgeyBJMThuIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9pMThuJztcbmltcG9ydCB0eXBlIHsgS2NDb250ZXh0IH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9LY0NvbnRleHQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtLY0NsYXNzRGlyZWN0aXZlLCBUZW1wbGF0ZUNvbXBvbmVudCwgS2NTYW5pdGl6ZVBpcGUsIE5nQ2xhc3NdLFxuICAgIHNlbGVjdG9yOiAna2Mtcm9vdCcsXG4gICAgdGVtcGxhdGVVcmw6ICd0b3RwLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQ29tcG9uZW50UmVmZXJlbmNlLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVG90cENvbXBvbmVudClcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVG90cENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudFJlZmVyZW5jZSB7XG4gICAgaTE4biA9IGluamVjdDxJMThuPihBQ0NPVU5UX0kxOE4pO1xuICAgIGtjQ29udGV4dCA9IGluamVjdDxFeHRyYWN0PEtjQ29udGV4dCwgeyBwYWdlSWQ6ICd0b3RwLmZ0bCcgfT4+KEtDX0FDQ09VTlRfQ09OVEVYVCk7XG4gICAgb3ZlcnJpZGUgZG9Vc2VEZWZhdWx0Q3NzID0gaW5qZWN0PGJvb2xlYW4+KFVTRV9ERUZBVUxUX0NTUyk7XG4gICAgb3ZlcnJpZGUgY2xhc3NlcyA9IGluamVjdDxQYXJ0aWFsPFJlY29yZDxDbGFzc0tleSwgc3RyaW5nPj4+KEFDQ09VTlRfQ0xBU1NFUyk7XG59XG4iLCJAbGV0IHVybCA9IGtjQ29udGV4dC51cmw7XG5AbGV0IG1vZGUgPSBrY0NvbnRleHQubW9kZTtcbkBsZXQgbWVzc2FnZXNQZXJGaWVsZCA9IGtjQ29udGV4dC5tZXNzYWdlc1BlckZpZWxkO1xuQGxldCBzdGF0ZUNoZWNrZXIgPSBrY0NvbnRleHQuc3RhdGVDaGVja2VyO1xuQGxldCB0b3RwID0ga2NDb250ZXh0LnRvdHA7XG5cbjxrYy1hY2NvdW50LXRlbXBsYXRlIFthY3RpdmVdPVwiJ3RvdHAnXCI+XG4gICAgPG5nLWNvbnRhaW5lciBjb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XG4gICAgICAgICAgICAgICAgPGgyPnt7IGkxOG4ubXNnU3RyKCdhdXRoZW50aWNhdG9yVGl0bGUnKSB9fTwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAodG90cC5vdHBDcmVkZW50aWFscy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGUgY29sLW1kLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdyZXF1aXJlZEZpZWxkcycpIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKHRvdHAuZW5hYmxlZCkge1xuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtc3RyaXBlZFwiPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgQGlmICh0b3RwLm90cENyZWRlbnRpYWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggW2NvbFNwYW5dPVwiNFwiPnt7IGkxOG4ubXNnU3RyKCdjb25maWd1cmVBdXRoZW50aWNhdG9ycycpIH19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBbY29sU3Bhbl09XCIzXCI+e3sgaTE4bi5tc2dTdHIoJ2NvbmZpZ3VyZUF1dGhlbnRpY2F0b3JzJykgfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChjcmVkZW50aWFsIG9mIHRvdHAub3RwQ3JlZGVudGlhbHM7IHRyYWNrIGNyZWRlbnRpYWw7IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInByb3ZpZGVyXCI+e3sgaTE4bi5tc2dTdHIoJ21vYmlsZScpIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHRvdHAub3RwQ3JlZGVudGlhbHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwcm92aWRlclwiPnt7IGNyZWRlbnRpYWwuaWQgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwcm92aWRlclwiPnt7IGNyZWRlbnRpYWwudXNlckxhYmVsIHx8ICcnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZD1cInBvc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWlubGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cInVybC50b3RwVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzdGF0ZUNoZWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJzdGF0ZUNoZWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdGF0ZUNoZWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic3VibWl0QWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic3VibWl0QWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIkRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjcmVkZW50aWFsSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjcmVkZW50aWFsSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjcmVkZW50aWFsLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCIncmVtb3ZlLW1vYmlsZS0nICsgaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGZpY29uIHBmaWNvbi1kZWxldGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aHIgLz5cbiAgICAgICAgICAgICAgICA8b2wgaWQ9XCJrYy10b3RwLXNldHRpbmdzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPnt7IGkxOG4ubXNnU3RyKCd0b3RwU3RlcDEnKSB9fTwvcD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGlkPVwia2MtdG90cC1zdXBwb3J0ZWQtYXBwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGFwcCBvZiB0b3RwLnN1cHBvcnRlZEFwcGxpY2F0aW9uczsgdHJhY2sgYXBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT57eyBpMThuLmFkdmFuY2VkTXNnU3RyKGFwcCkgfX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobW9kZSAmJiBtb2RlID09PSAnbWFudWFsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPnt7IGkxOG4ubXNnU3RyKCd0b3RwTWFudWFsU3RlcDInKSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJrYy10b3RwLXNlY3JldC1rZXlcIj57eyB0b3RwLnRvdHBTZWNyZXRFbmNvZGVkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibW9kZS1iYXJjb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInRvdHAucXJVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cigndG90cFNjYW5CYXJjb2RlJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e3sgaTE4bi5tc2dTdHIoJ3RvdHBNYW51YWxTdGVwMycpIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGlkPVwia2MtdG90cC10eXBlXCI+e3sgaTE4bi5tc2dTdHIoJ3RvdHBUeXBlJykgfX06IHt7IGkxOG4ubXNnU3RyKCRhbnkoJ3RvdHAuJyArIHRvdHAucG9saWN5LnR5cGUpKSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBpZD1cImtjLXRvdHAtYWxnb3JpdGhtXCI+e3sgaTE4bi5tc2dTdHIoJ3RvdHBBbGdvcml0aG0nKSB9fToge3sgdG90cC5wb2xpY3kuZ2V0QWxnb3JpdGhtS2V5KCkgfX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgaWQ9XCJrYy10b3RwLWRpZ2l0c1wiPnt7IGkxOG4ubXNnU3RyKCd0b3RwRGlnaXRzJykgfX06IHt7IHRvdHAucG9saWN5LmRpZ2l0cyB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodG90cC5wb2xpY3kudHlwZSA9PT0gJ3RvdHAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgaWQ9XCJrYy10b3RwLXBlcmlvZFwiPnt7IGkxOG4ubXNnU3RyKCd0b3RwSW50ZXJ2YWwnKSB9fToge3sgdG90cC5wb2xpY3kucGVyaW9kIH19PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgaWQ9XCJrYy10b3RwLWNvdW50ZXJcIj57eyBpMThuLm1zZ1N0cigndG90cENvdW50ZXInKSB9fToge3sgdG90cC5wb2xpY3kuaW5pdGlhbENvdW50ZXIgfX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPnt7IGkxOG4ubXNnU3RyKCd0b3RwU3RlcDInKSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrYy10b3RwLXNlY3JldC1xci1jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIkZpZ3VyZTogQmFyY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIidkYXRhOmltYWdlL3BuZztiYXNlNjQsICcgKyB0b3RwLnRvdHBTZWNyZXRRckNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibW9kZS1tYW51YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwidG90cC5tYW51YWxVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cigndG90cFVuYWJsZVRvU2NhbicpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPnt7IGkxOG4ubXNnU3RyKCd0b3RwU3RlcDMnKSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPnt7IGkxOG4ubXNnU3RyKCd0b3RwU3RlcDNEZXZpY2VOYW1lJykgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC9vbD5cbiAgICAgICAgICAgICAgICA8aHIgLz5cbiAgICAgICAgICAgICAgICA8Zm9ybVxuICAgICAgICAgICAgICAgICAgICBpZD1cImtjLXRvdHAtc2V0dGluZ3MtZm9ybVwiXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZD1cInBvc3RcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cInVybC50b3RwVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjRm9ybUNsYXNzJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzdGF0ZUNoZWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RhdGVDaGVja2VyXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBba2NDbGFzc109XCIna2NGb3JtR3JvdXBDbGFzcydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMiBjb2wtbWQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJ0b3RwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdhdXRoZW50aWNhdG9yQ29kZScpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMCBjb2wtbWQtMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInRvdHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidG90cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0lucHV0Q2xhc3MnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cIm1lc3NhZ2VzUGVyRmllbGQuZXhpc3RzRXJyb3IoJ3RvdHAnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG1lc3NhZ2VzUGVyRmllbGQuZXhpc3RzRXJyb3IoJ3RvdHAnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJpbnB1dC1lcnJvci1vdHAtY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjSW5wdXRFcnJvck1lc3NhZ2VDbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJtZXNzYWdlc1BlckZpZWxkLmdldCgndG90cCcpIHwga2NTYW5pdGl6ZTogJ2h0bWwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwidG90cFNlY3JldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRvdHBTZWNyZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0b3RwLnRvdHBTZWNyZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2tjQ2xhc3NdPVwiJ2tjRm9ybUdyb3VwQ2xhc3MnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTIgY29sLW1kLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwidXNlckxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjTGFiZWxDbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5tc2dTdHIoJ3RvdHBEZXZpY2VOYW1lJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodG90cC5vdHBDcmVkZW50aWFscy5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTAgY29sLW1kLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ1c2VyTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidXNlckxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjSW5wdXRDbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwibWVzc2FnZXNQZXJGaWVsZC5leGlzdHNFcnJvcigndXNlckxhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlc1BlckZpZWxkLmV4aXN0c0Vycm9yKCd1c2VyTGFiZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJpbnB1dC1lcnJvci1vdHAtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0lucHV0RXJyb3JNZXNzYWdlQ2xhc3MnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwibWVzc2FnZXNQZXJGaWVsZC5nZXQoJ3VzZXJMYWJlbCcpIHwga2NTYW5pdGl6ZTogJ2h0bWwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrYy1mb3JtLWJ1dHRvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0Zvcm1Hcm91cENsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2tjQ2xhc3NdPVwiJ2tjSW5wdXRXcmFwcGVyQ2xhc3MnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNhdmVUT1RQQnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiWydrY0J1dHRvbkNsYXNzJywgJ2tjQnV0dG9uUHJpbWFyeUNsYXNzJywgJ2tjQnV0dG9uTGFyZ2VDbGFzcyddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImkxOG4ubXNnU3RyKCdkb1NhdmUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNhbmNlbFRPVFBCdG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic3VibWl0QWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJDYW5jZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCJbJ2tjQnV0dG9uQ2xhc3MnLCAna2NCdXR0b25EZWZhdWx0Q2xhc3MnLCAna2NCdXR0b25MYXJnZUNsYXNzJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5tc2dTdHIoJ2RvQ2FuY2VsJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvbmctY29udGFpbmVyPlxuPC9rYy1hY2NvdW50LXRlbXBsYXRlPlxuIl19
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG90cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYWNjb3VudC9wYWdlcy90b3RwL3RvdHAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2FjY291bnQvcGFnZXMvdG90cC90b3RwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNwRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOztBQWVsRixNQUFNLE9BQU8sYUFBYyxTQUFRLGtCQUFrQjtJQVpyRDs7UUFhSSxTQUFJLEdBQUcsTUFBTSxDQUFPLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxNQUFNLENBQTZDLGtCQUFrQixDQUFDLENBQUM7UUFDMUUsb0JBQWUsR0FBRyxNQUFNLENBQVUsZUFBZSxDQUFDLENBQUM7UUFDbkQsWUFBTyxHQUFHLE1BQU0sQ0FBb0MsZUFBZSxDQUFDLENBQUM7UUFDOUUsV0FBTSxHQUFHLE1BQU0sQ0FBQztLQUNuQjs4R0FOWSxhQUFhO2tHQUFiLGFBQWEsc0RBUFg7WUFDUDtnQkFDSSxPQUFPLEVBQUUsa0JBQWtCO2dCQUMzQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQzthQUMvQztTQUNKLGlEQ3hCTCxvblVBOFBBLDRDRDlPYyxnQkFBZ0IsMEZBQXFCLGNBQWM7OzJGQVVwRCxhQUFhO2tCQVp6QixTQUFTO2lDQUNNLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsWUFDN0QsU0FBUyxhQUVSO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxrQkFBa0I7NEJBQzNCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQzt5QkFDL0M7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRSZWZlcmVuY2UgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2NsYXNzZXMvY29tcG9uZW50LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvY29udGFpbmVycy90ZW1wbGF0ZSc7XG5pbXBvcnQgeyBLY0NsYXNzRGlyZWN0aXZlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9kaXJlY3RpdmVzL2tjLWNsYXNzJztcbmltcG9ydCB0eXBlIHsgSTE4biB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvaTE4bic7XG5pbXBvcnQgdHlwZSB7IEtjQ29udGV4dCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvS2NDb250ZXh0JztcbmltcG9ydCB7IEFDQ09VTlRfQ0xBU1NFUyB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2NsYXNzZXMnO1xuaW1wb3J0IHsgQUNDT1VOVF9JMThOIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMvaTE4bic7XG5pbXBvcnQgeyBLQ19BQ0NPVU5UX0NPTlRFWFQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9rYy1jb250ZXh0JztcbmltcG9ydCB7IEtjU2FuaXRpemVQaXBlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbGliL3BpcGVzL2tjLXNhbml0aXplJztcbmltcG9ydCB7IFVTRV9ERUZBVUxUX0NTUyB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xpYi90b2tlbnMvdXNlLWRlZmF1bHQtY3NzJztcbmltcG9ydCB0eXBlIHsgQ2xhc3NLZXkgfSBmcm9tICdrZXljbG9ha2lmeS9hY2NvdW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbS2NDbGFzc0RpcmVjdGl2ZSwgVGVtcGxhdGVDb21wb25lbnQsIEtjU2FuaXRpemVQaXBlLCBOZ0NsYXNzXSxcbiAgICBzZWxlY3RvcjogJ2tjLXRvdHAnLFxuICAgIHRlbXBsYXRlVXJsOiAndG90cC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENvbXBvbmVudFJlZmVyZW5jZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRvdHBDb21wb25lbnQpXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRvdHBDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRSZWZlcmVuY2Uge1xuICAgIGkxOG4gPSBpbmplY3Q8STE4bj4oQUNDT1VOVF9JMThOKTtcbiAgICBrY0NvbnRleHQgPSBpbmplY3Q8RXh0cmFjdDxLY0NvbnRleHQsIHsgcGFnZUlkOiAndG90cC5mdGwnIH0+PihLQ19BQ0NPVU5UX0NPTlRFWFQpO1xuICAgIG92ZXJyaWRlIGRvVXNlRGVmYXVsdENzcyA9IGluamVjdDxib29sZWFuPihVU0VfREVGQVVMVF9DU1MpO1xuICAgIG92ZXJyaWRlIGNsYXNzZXMgPSBpbmplY3Q8UGFydGlhbDxSZWNvcmQ8Q2xhc3NLZXksIHN0cmluZz4+PihBQ0NPVU5UX0NMQVNTRVMpO1xuICAgIGFjdGl2ZSA9ICd0b3RwJztcbn1cbiIsIkBsZXQgdXJsID0ga2NDb250ZXh0LnVybDtcbkBsZXQgbW9kZSA9IGtjQ29udGV4dC5tb2RlO1xuQGxldCBtZXNzYWdlc1BlckZpZWxkID0ga2NDb250ZXh0Lm1lc3NhZ2VzUGVyRmllbGQ7XG5AbGV0IHN0YXRlQ2hlY2tlciA9IGtjQ29udGV4dC5zdGF0ZUNoZWNrZXI7XG5AbGV0IHRvdHAgPSBrY0NvbnRleHQudG90cDtcblxuPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIj5cbiAgICAgICAgPGgyPnt7IGkxOG4ubXNnU3RyKCdhdXRoZW50aWNhdG9yVGl0bGUnKSB9fTwvaDI+XG4gICAgPC9kaXY+XG4gICAgQGlmICh0b3RwLm90cENyZWRlbnRpYWxzLmxlbmd0aCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGUgY29sLW1kLTJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAge3sgaTE4bi5tc2dTdHIoJ3JlcXVpcmVkRmllbGRzJykgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG5AaWYgKHRvdHAuZW5hYmxlZCkge1xuICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLXN0cmlwZWRcIj5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgQGlmICh0b3RwLm90cENyZWRlbnRpYWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBbY29sU3Bhbl09XCI0XCI+e3sgaTE4bi5tc2dTdHIoJ2NvbmZpZ3VyZUF1dGhlbnRpY2F0b3JzJykgfX08L3RoPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBbY29sU3Bhbl09XCIzXCI+e3sgaTE4bi5tc2dTdHIoJ2NvbmZpZ3VyZUF1dGhlbnRpY2F0b3JzJykgfX08L3RoPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgIEBmb3IgKGNyZWRlbnRpYWwgb2YgdG90cC5vdHBDcmVkZW50aWFsczsgdHJhY2sgY3JlZGVudGlhbDsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwcm92aWRlclwiPnt7IGkxOG4ubXNnU3RyKCdtb2JpbGUnKSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAodG90cC5vdHBDcmVkZW50aWFscy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwcm92aWRlclwiPnt7IGNyZWRlbnRpYWwuaWQgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInByb3ZpZGVyXCI+e3sgY3JlZGVudGlhbC51c2VyTGFiZWwgfHwgJycgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPVwicG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWlubGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJ1cmwudG90cFVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJzdGF0ZUNoZWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RhdGVDaGVja2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzdWJtaXRBY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic3VibWl0QWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJEZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNyZWRlbnRpYWxJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjcmVkZW50aWFsSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY3JlZGVudGlhbC5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidyZW1vdmUtbW9iaWxlLScgKyBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBmaWNvbiBwZmljb24tZGVsZXRlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbn0gQGVsc2Uge1xuICAgIDxkaXY+XG4gICAgICAgIDxociAvPlxuICAgICAgICA8b2wgaWQ9XCJrYy10b3RwLXNldHRpbmdzXCI+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgPHA+e3sgaTE4bi5tc2dTdHIoJ3RvdHBTdGVwMScpIH19PC9wPlxuXG4gICAgICAgICAgICAgICAgPHVsIGlkPVwia2MtdG90cC1zdXBwb3J0ZWQtYXBwc1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChhcHAgb2YgdG90cC5zdXBwb3J0ZWRBcHBsaWNhdGlvbnM7IHRyYWNrIGFwcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGxpPnt7IGkxOG4uYWR2YW5jZWRNc2dTdHIoYXBwKSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIEBpZiAobW9kZSAmJiBtb2RlID09PSAnbWFudWFsJykge1xuICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgPHA+e3sgaTE4bi5tc2dTdHIoJ3RvdHBNYW51YWxTdGVwMicpIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwia2MtdG90cC1zZWNyZXQta2V5XCI+e3sgdG90cC50b3RwU2VjcmV0RW5jb2RlZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJtb2RlLWJhcmNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInRvdHAucXJVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCd0b3RwU2NhbkJhcmNvZGUnKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IGkxOG4ubXNnU3RyKCd0b3RwTWFudWFsU3RlcDMnKSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGlkPVwia2MtdG90cC10eXBlXCI+e3sgaTE4bi5tc2dTdHIoJ3RvdHBUeXBlJykgfX06IHt7IGkxOG4ubXNnU3RyKCRhbnkoJ3RvdHAuJyArIHRvdHAucG9saWN5LnR5cGUpKSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgaWQ9XCJrYy10b3RwLWFsZ29yaXRobVwiPnt7IGkxOG4ubXNnU3RyKCd0b3RwQWxnb3JpdGhtJykgfX06IHt7IHRvdHAucG9saWN5LmdldEFsZ29yaXRobUtleSgpIH19PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBpZD1cImtjLXRvdHAtZGlnaXRzXCI+e3sgaTE4bi5tc2dTdHIoJ3RvdHBEaWdpdHMnKSB9fToge3sgdG90cC5wb2xpY3kuZGlnaXRzIH19PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodG90cC5wb2xpY3kudHlwZSA9PT0gJ3RvdHAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGlkPVwia2MtdG90cC1wZXJpb2RcIj57eyBpMThuLm1zZ1N0cigndG90cEludGVydmFsJykgfX06IHt7IHRvdHAucG9saWN5LnBlcmlvZCB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgaWQ9XCJrYy10b3RwLWNvdW50ZXJcIj57eyBpMThuLm1zZ1N0cigndG90cENvdW50ZXInKSB9fToge3sgdG90cC5wb2xpY3kuaW5pdGlhbENvdW50ZXIgfX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IGkxOG4ubXNnU3RyKCd0b3RwU3RlcDInKSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrYy10b3RwLXNlY3JldC1xci1jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJGaWd1cmU6IEJhcmNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwgJyArIHRvdHAudG90cFNlY3JldFFyQ29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1vZGUtbWFudWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJ0b3RwLm1hbnVhbFVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5tc2dTdHIoJ3RvdHBVbmFibGVUb1NjYW4nKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICA8cD57eyBpMThuLm1zZ1N0cigndG90cFN0ZXAzJykgfX08L3A+XG4gICAgICAgICAgICAgICAgPHA+e3sgaTE4bi5tc2dTdHIoJ3RvdHBTdGVwM0RldmljZU5hbWUnKSB9fTwvcD5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvb2w+XG4gICAgICAgIDxociAvPlxuICAgICAgICA8Zm9ybVxuICAgICAgICAgICAgaWQ9XCJrYy10b3RwLXNldHRpbmdzLWZvcm1cIlxuICAgICAgICAgICAgbWV0aG9kPVwicG9zdFwiXG4gICAgICAgICAgICBbYWN0aW9uXT1cInVybC50b3RwVXJsXCJcbiAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0Zvcm1DbGFzcydcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBpZD1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAgICAgbmFtZT1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBba2NDbGFzc109XCIna2NGb3JtR3JvdXBDbGFzcydcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTIgY29sLW1kLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJ0b3RwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdhdXRoZW50aWNhdG9yQ29kZScpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTAgY29sLW1kLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0b3RwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0b3RwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCIna2NJbnB1dENsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwibWVzc2FnZXNQZXJGaWVsZC5leGlzdHNFcnJvcigndG90cCcpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlc1BlckZpZWxkLmV4aXN0c0Vycm9yKCd0b3RwJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJpbnB1dC1lcnJvci1vdHAtY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCIna2NJbnB1dEVycm9yTWVzc2FnZUNsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJtZXNzYWdlc1BlckZpZWxkLmdldCgndG90cCcpIHwga2NTYW5pdGl6ZTogJ2h0bWwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwidG90cFNlY3JldFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0b3RwU2VjcmV0XCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRvdHAudG90cFNlY3JldFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICBAaWYgKG1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibW9kZVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgW2tjQ2xhc3NdPVwiJ2tjRm9ybUdyb3VwQ2xhc3MnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yIGNvbC1tZC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwidXNlckxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0xhYmVsQ2xhc3MnXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5tc2dTdHIoJ3RvdHBEZXZpY2VOYW1lJykgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgQGlmICh0b3RwLm90cENyZWRlbnRpYWxzLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTAgY29sLW1kLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ1c2VyTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInVzZXJMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjSW5wdXRDbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cIm1lc3NhZ2VzUGVyRmllbGQuZXhpc3RzRXJyb3IoJ3VzZXJMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChtZXNzYWdlc1BlckZpZWxkLmV4aXN0c0Vycm9yKCd1c2VyTGFiZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImlucHV0LWVycm9yLW90cC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCIna2NJbnB1dEVycm9yTWVzc2FnZUNsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJtZXNzYWdlc1BlckZpZWxkLmdldCgndXNlckxhYmVsJykgfCBrY1Nhbml0aXplOiAnaHRtbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBpZD1cImtjLWZvcm0tYnV0dG9uc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCJcbiAgICAgICAgICAgICAgICBba2NDbGFzc109XCIna2NGb3JtR3JvdXBDbGFzcydcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgW2tjQ2xhc3NdPVwiJ2tjSW5wdXRXcmFwcGVyQ2xhc3MnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNhdmVUT1RQQnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIlsna2NCdXR0b25DbGFzcycsICdrY0J1dHRvblByaW1hcnlDbGFzcycsICdrY0J1dHRvbkxhcmdlQ2xhc3MnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaTE4bi5tc2dTdHIoJ2RvU2F2ZScpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNhbmNlbFRPVFBCdG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInN1Ym1pdEFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIkNhbmNlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCJbJ2tjQnV0dG9uQ2xhc3MnLCAna2NCdXR0b25EZWZhdWx0Q2xhc3MnLCAna2NCdXR0b25MYXJnZUNsYXNzJ11cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cignZG9DYW5jZWwnKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG59XG4iXX0=