@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
@@ -1,13 +1,23 @@
1
- import { OnInit, Renderer2 } from '@angular/core';
1
+ import { OnInit, Renderer2, Type } from '@angular/core';
2
2
  import { Meta, Title } from '@angular/platform-browser';
3
3
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
4
+ import type { I18n } from '@keycloakify/angular/account/i18n';
5
+ import type { KcContext } from '@keycloakify/angular/account/KcContext';
4
6
  import { AccountResourceInjectorService } from '@keycloakify/angular/account/services/account-resource-injector';
5
7
  import { ClassKey } from 'keycloakify/account/lib/kcClsx';
6
8
  import { Observable } from 'rxjs';
7
- import type { I18n } from '@keycloakify/angular/account/i18n';
8
- import type { KcContext } from '@keycloakify/angular/account/KcContext';
9
9
  import * as i0 from "@angular/core";
10
+ type ActiveType = 'account' | 'password' | 'totp' | 'social' | 'sessions' | 'applications' | 'log' | 'authorization' | undefined;
11
+ export declare class DynamicPageInjectorComponent {
12
+ #private;
13
+ page: import("@angular/core").InputSignal<Type<unknown> | undefined>;
14
+ componentCreated: import("@angular/core").OutputEmitterRef<object>;
15
+ constructor();
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicPageInjectorComponent, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicPageInjectorComponent, "kc-dynamic-page-injector", never, { "page": { "alias": "page"; "required": false; "isSignal": true; }; }, { "componentCreated": "componentCreated"; }, never, never, true, never>;
18
+ }
10
19
  export declare class TemplateComponent extends ComponentReference implements OnInit {
20
+ #private;
11
21
  i18n: I18n;
12
22
  renderer: Renderer2;
13
23
  meta: Meta;
@@ -16,11 +26,14 @@ export declare class TemplateComponent extends ComponentReference implements OnI
16
26
  doUseDefaultCss: boolean;
17
27
  classes: Partial<Record<ClassKey, string>>;
18
28
  accountResourceInjectorService: AccountResourceInjectorService;
19
- active: import("@angular/core").InputSignal<"password" | "applications" | "account" | "sessions" | "log" | "totp" | "social" | "authorization" | undefined>;
20
29
  isReadyToRender$: Observable<boolean>;
30
+ page: import("@angular/core").InputSignal<Type<unknown> | undefined>;
31
+ active: ActiveType;
21
32
  constructor();
22
33
  ngOnInit(): void;
23
34
  private applyKcIndexClasses;
35
+ onComponentCreated(compRef: object): void;
24
36
  static ɵfac: i0.ɵɵFactoryDeclaration<TemplateComponent, never>;
25
- static ɵcmp: i0.ɵɵComponentDeclaration<TemplateComponent, "kc-account-template", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, ["[content]"], true, never>;
37
+ static ɵcmp: i0.ɵɵComponentDeclaration<TemplateComponent, "kc-root", never, { "page": { "alias": "page"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
26
38
  }
39
+ export {};
@@ -1,7 +1,7 @@
1
1
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
2
- import type { ClassKey } from 'keycloakify/account';
3
2
  import type { I18n } from '@keycloakify/angular/account/i18n';
4
3
  import type { KcContext } from '@keycloakify/angular/account/KcContext';
4
+ import type { ClassKey } from 'keycloakify/account';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class AccountComponent extends ComponentReference {
7
7
  i18n: I18n;
@@ -9,6 +9,7 @@ export declare class AccountComponent extends ComponentReference {
9
9
  doUseDefaultCss: boolean;
10
10
  classes: Partial<Record<ClassKey, string>>;
11
11
  additionalClasses: Partial<Record<ClassKey, string>>;
12
+ active: string;
12
13
  static ɵfac: i0.ɵɵFactoryDeclaration<AccountComponent, never>;
13
- static ɵcmp: i0.ɵɵComponentDeclaration<AccountComponent, "kc-root", never, {}, {}, never, never, true, never>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<AccountComponent, "kc-account", never, {}, {}, never, never, true, never>;
14
15
  }
@@ -1,13 +1,14 @@
1
1
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
2
- import type { ClassKey } from 'keycloakify/account';
3
2
  import type { I18n } from '@keycloakify/angular/account/i18n';
4
3
  import type { KcContext } from '@keycloakify/angular/account/KcContext';
4
+ import type { ClassKey } from 'keycloakify/account';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class ApplicationsComponent extends ComponentReference {
7
7
  i18n: I18n;
8
8
  kcContext: KcContext.Applications;
9
9
  doUseDefaultCss: boolean;
10
10
  classes: Partial<Record<ClassKey, string>>;
11
+ active: string;
11
12
  static ɵfac: i0.ɵɵFactoryDeclaration<ApplicationsComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<ApplicationsComponent, "kc-root", never, {}, {}, never, never, true, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<ApplicationsComponent, "kc-applications", never, {}, {}, never, never, true, never>;
13
14
  }
@@ -1,13 +1,14 @@
1
1
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
2
- import type { ClassKey } from 'keycloakify/account';
3
2
  import type { I18n } from '@keycloakify/angular/account/i18n';
4
3
  import type { KcContext } from '@keycloakify/angular/account/KcContext';
4
+ import type { ClassKey } from 'keycloakify/account';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class FederatedIdentityComponent extends ComponentReference {
7
7
  i18n: I18n;
8
8
  kcContext: KcContext.FederatedIdentity;
9
9
  doUseDefaultCss: boolean;
10
10
  classes: Partial<Record<ClassKey, string>>;
11
+ active: string;
11
12
  static ɵfac: i0.ɵɵFactoryDeclaration<FederatedIdentityComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<FederatedIdentityComponent, "kc-root", never, {}, {}, never, never, true, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<FederatedIdentityComponent, "kc-federatedIdentity", never, {}, {}, never, never, true, never>;
13
14
  }
@@ -1,13 +1,14 @@
1
1
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
2
- import type { ClassKey } from 'keycloakify/account';
3
2
  import type { I18n } from '@keycloakify/angular/account/i18n';
4
3
  import type { KcContext } from '@keycloakify/angular/account/KcContext';
4
+ import type { ClassKey } from 'keycloakify/account';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class LogComponent extends ComponentReference {
7
7
  i18n: I18n;
8
8
  kcContext: KcContext.Log;
9
9
  doUseDefaultCss: boolean;
10
10
  classes: Partial<Record<ClassKey, string>>;
11
+ active: string;
11
12
  static ɵfac: i0.ɵɵFactoryDeclaration<LogComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<LogComponent, "kc-root", never, {}, {}, never, never, true, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<LogComponent, "kc-log", never, {}, {}, never, never, true, never>;
13
14
  }
@@ -1,7 +1,7 @@
1
1
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
2
- import type { ClassKey } from 'keycloakify/account';
3
2
  import type { I18n } from '@keycloakify/angular/account/i18n';
4
3
  import type { KcContext } from '@keycloakify/angular/account/KcContext';
4
+ import type { ClassKey } from 'keycloakify/account';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class PasswordComponent extends ComponentReference {
7
7
  i18n: I18n;
@@ -9,6 +9,7 @@ export declare class PasswordComponent extends ComponentReference {
9
9
  doUseDefaultCss: boolean;
10
10
  classes: Partial<Record<ClassKey, string>>;
11
11
  additionalClasses: Partial<Record<ClassKey, string>>;
12
+ active: string;
12
13
  currentPassword: import("@angular/core").WritableSignal<string>;
13
14
  newPassword: import("@angular/core").WritableSignal<string>;
14
15
  newPasswordConfirm: import("@angular/core").WritableSignal<string>;
@@ -24,5 +25,5 @@ export declare class PasswordComponent extends ComponentReference {
24
25
  onNewPasswordConfirmChange(value: string): void;
25
26
  onNewPasswordConfirmBlur(): void;
26
27
  static ɵfac: i0.ɵɵFactoryDeclaration<PasswordComponent, never>;
27
- static ɵcmp: i0.ɵɵComponentDeclaration<PasswordComponent, "kc-root", never, {}, {}, never, never, true, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<PasswordComponent, "kc-password", never, {}, {}, never, never, true, never>;
28
29
  }
@@ -1,13 +1,14 @@
1
1
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
2
- import type { ClassKey } from 'keycloakify/account';
3
2
  import type { I18n } from '@keycloakify/angular/account/i18n';
4
3
  import type { KcContext } from '@keycloakify/angular/account/KcContext';
4
+ import type { ClassKey } from 'keycloakify/account';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class SessionsComponent extends ComponentReference {
7
7
  i18n: I18n;
8
8
  kcContext: KcContext.Sessions;
9
9
  doUseDefaultCss: boolean;
10
10
  classes: Partial<Record<ClassKey, string>>;
11
+ active: string;
11
12
  static ɵfac: i0.ɵɵFactoryDeclaration<SessionsComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<SessionsComponent, "kc-root", never, {}, {}, never, never, true, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<SessionsComponent, "kc-sessions", never, {}, {}, never, never, true, never>;
13
14
  }
@@ -1,13 +1,14 @@
1
1
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
2
- import type { ClassKey } from 'keycloakify/account';
3
2
  import type { I18n } from '@keycloakify/angular/account/i18n';
4
3
  import type { KcContext } from '@keycloakify/angular/account/KcContext';
4
+ import type { ClassKey } from 'keycloakify/account';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class TotpComponent extends ComponentReference {
7
7
  i18n: I18n;
8
8
  kcContext: KcContext.Totp;
9
9
  doUseDefaultCss: boolean;
10
10
  classes: Partial<Record<ClassKey, string>>;
11
+ active: string;
11
12
  static ɵfac: i0.ɵɵFactoryDeclaration<TotpComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<TotpComponent, "kc-root", never, {}, {}, never, never, true, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<TotpComponent, "kc-totp", never, {}, {}, never, never, true, never>;
13
14
  }
@@ -1,5 +1,5 @@
1
1
  import { AsyncPipe, NgClass, NgTemplateOutlet } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, forwardRef, inject, input, Renderer2 } from '@angular/core';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, effect, forwardRef, inject, input, output, Renderer2, ViewContainerRef } from '@angular/core';
3
3
  import { Meta, Title } from '@angular/platform-browser';
4
4
  import { ComponentReference } from '@keycloakify/angular/account/classes/component-reference';
5
5
  import { KcClassDirective } from '@keycloakify/angular/account/directives/kc-class';
@@ -11,18 +11,45 @@ import { KcSanitizePipe } from '@keycloakify/angular/lib/pipes/kc-sanitize';
11
11
  import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';
12
12
  import { getKcClsx } from 'keycloakify/account/lib/kcClsx';
13
13
  import * as i0 from "@angular/core";
14
+ export class DynamicPageInjectorComponent {
15
+ #vcr;
16
+ constructor() {
17
+ this.page = input();
18
+ this.componentCreated = output();
19
+ this.#vcr = inject(ViewContainerRef);
20
+ effect(() => {
21
+ const page = this.page();
22
+ if (!page)
23
+ return;
24
+ const compRef = this.#vcr.createComponent(page);
25
+ this.componentCreated.emit(compRef.instance);
26
+ }, { allowSignalWrites: true });
27
+ }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DynamicPageInjectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.7", type: DynamicPageInjectorComponent, isStandalone: true, selector: "kc-dynamic-page-injector", inputs: { page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { componentCreated: "componentCreated" }, ngImport: i0, template: ``, isInline: true }); }
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DynamicPageInjectorComponent, decorators: [{
32
+ type: Component,
33
+ args: [{
34
+ selector: 'kc-dynamic-page-injector',
35
+ standalone: true,
36
+ template: ``
37
+ }]
38
+ }], ctorParameters: () => [] });
14
39
  export class TemplateComponent extends ComponentReference {
40
+ #cdr;
15
41
  constructor() {
16
42
  super();
17
43
  this.i18n = inject(ACCOUNT_I18N);
18
44
  this.renderer = inject(Renderer2);
45
+ this.#cdr = inject(ChangeDetectorRef);
19
46
  this.meta = inject(Meta);
20
47
  this.title = inject(Title);
21
48
  this.kcContext = inject(KC_ACCOUNT_CONTEXT);
22
49
  this.doUseDefaultCss = inject(USE_DEFAULT_CSS);
23
50
  this.classes = inject(ACCOUNT_CLASSES);
24
51
  this.accountResourceInjectorService = inject(AccountResourceInjectorService);
25
- this.active = input(undefined);
52
+ this.page = input();
26
53
  this.title.setTitle(this.i18n.msgStr('accountManagementTitle'));
27
54
  this.isReadyToRender$ = this.accountResourceInjectorService.injectResource(this.doUseDefaultCss);
28
55
  }
@@ -46,21 +73,27 @@ export class TemplateComponent extends ComponentReference {
46
73
  this.renderer.addClass(document.documentElement, klass);
47
74
  });
48
75
  }
76
+ onComponentCreated(compRef) {
77
+ if ('active' in compRef && compRef.active) {
78
+ this.active = compRef.active;
79
+ }
80
+ this.#cdr.markForCheck();
81
+ }
49
82
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
50
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: TemplateComponent, isStandalone: true, selector: "kc-account-template", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
83
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: TemplateComponent, isStandalone: true, selector: "kc-root", inputs: { page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
51
84
  {
52
85
  provide: ComponentReference,
53
86
  useExisting: forwardRef(() => TemplateComponent)
54
87
  }
55
- ], usesInheritance: true, ngImport: i0, template: "@let enabledLanguages = i18n.enabledLanguages;\n@let currentLanguage = i18n.currentLanguage;\n@let url = kcContext.url;\n@let features = kcContext.features;\n@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let referrer = kcContext.referrer;\n@let activeLink = active();\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <header class=\"navbar navbar-default navbar-pf navbar-main header\">\n <nav\n class=\"navbar\"\n role=\"navigation\"\n >\n <div class=\"navbar-header\">\n <div class=\"container\">\n <h1 class=\"navbar-title\">Keycloak</h1>\n </div>\n </div>\n <div class=\"navbar-collapse navbar-collapse-1\">\n <div class=\"container\">\n <ul class=\"nav navbar-nav navbar-utility\">\n @if (enabledLanguages.length > 1) {\n <li>\n <div\n class=\"kc-dropdown\"\n id=\"kc-locale-dropdown\"\n >\n <a\n href=\"#\"\n id=\"kc-current-locale-link\"\n >\n {{ currentLanguage.label }}\n </a>\n <ul>\n @for (enabledLanguage of enabledLanguages; track enabledLanguage.languageTag) {\n @let label = enabledLanguage.label;\n @let href = enabledLanguage.href;\n\n <li class=\"kc-dropdown-item\">\n <a [href]=\"href\">{{ label }}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n }\n @if (!!referrer?.url) {\n <a\n id=\"referrer\"\n [href]=\"referrer?.url\"\n >\n {{ i18n.msgStr('backTo', referrer?.name) }}\n </a>\n }\n <li>\n <a [href]=\"url.getLogoutUrl()\">{{ i18n.msgStr('doSignOut') }}</a>\n </li>\n </ul>\n </div>\n </div>\n </nav>\n </header>\n\n <div class=\"container\">\n <div class=\"bs-sidebar col-sm-3\">\n <ul>\n <li [ngClass]=\"{ active: activeLink === 'account' }\">\n <a [href]=\"url.accountUrl\">{{ i18n.msgStr('account') }}</a>\n </li>\n @if (features.passwordUpdateSupported) {\n <li [ngClass]=\"{ active: activeLink === 'password' }\">\n <a [href]=\"url.passwordUrl\">{{ i18n.msgStr('password') }}</a>\n </li>\n }\n <li [ngClass]=\"{ active: activeLink === 'totp' }\">\n <a [href]=\"url.totpUrl\">{{ i18n.msgStr('authenticator') }}</a>\n </li>\n @if (features.identityFederation) {\n <li [ngClass]=\"{ active: activeLink === 'social' }\">\n <a [href]=\"url.socialUrl\">{{ i18n.msgStr('federatedIdentity') }}</a>\n </li>\n }\n <li [ngClass]=\"{ active: activeLink === 'sessions' }\">\n <a [href]=\"url.sessionsUrl\">{{ i18n.msgStr('sessions') }}</a>\n </li>\n <li [ngClass]=\"{ active: activeLink === 'applications' }\">\n <a [href]=\"url.applicationsUrl\">{{ i18n.msgStr('applications') }}</a>\n </li>\n @if (features.log) {\n <li [ngClass]=\"{ active: activeLink === 'log' }\">\n <a [href]=\"url.logUrl\">{{ i18n.msgStr('log') }}</a>\n </li>\n }\n @if (realm.userManagedAccessAllowed && features.authorization) {\n <li [ngClass]=\"{ active: activeLink === 'authorization' }\">\n <a [href]=\"url.resourceUrl\">{{ i18n.msgStr('myResources') }}</a>\n </li>\n }\n </ul>\n </div>\n\n <div class=\"col-sm-9 content-area\">\n @if (message) {\n <div [ngClass]=\"['alert', 'alert-' + message.type]\">\n @switch (message.type) {\n @case ('success') {\n <span class=\"pficon pficon-ok\"></span>\n }\n @case ('error') {\n <span class=\"pficon pficon-error-circle-o\"></span>\n }\n }\n <span\n class=\"kc-feedback-text\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <ng-content select=\"[content]\" />\n </div>\n </div>\n}\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
88
+ ], usesInheritance: true, ngImport: i0, template: "@let enabledLanguages = i18n.enabledLanguages;\n@let currentLanguage = i18n.currentLanguage;\n@let url = kcContext.url;\n@let features = kcContext.features;\n@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let referrer = kcContext.referrer;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <header class=\"navbar navbar-default navbar-pf navbar-main header\">\n <nav\n class=\"navbar\"\n role=\"navigation\"\n >\n <div class=\"navbar-header\">\n <div class=\"container\">\n <h1 class=\"navbar-title\">Keycloak</h1>\n </div>\n </div>\n <div class=\"navbar-collapse navbar-collapse-1\">\n <div class=\"container\">\n <ul class=\"nav navbar-nav navbar-utility\">\n @if (enabledLanguages.length > 1) {\n <li>\n <div\n class=\"kc-dropdown\"\n id=\"kc-locale-dropdown\"\n >\n <a\n href=\"#\"\n id=\"kc-current-locale-link\"\n >\n {{ currentLanguage.label }}\n </a>\n <ul>\n @for (enabledLanguage of enabledLanguages; track enabledLanguage.languageTag) {\n @let label = enabledLanguage.label;\n @let href = enabledLanguage.href;\n\n <li class=\"kc-dropdown-item\">\n <a [href]=\"href\">{{ label }}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n }\n @if (!!referrer?.url) {\n <a\n id=\"referrer\"\n [href]=\"referrer?.url\"\n >\n {{ i18n.msgStr('backTo', referrer?.name) }}\n </a>\n }\n <li>\n <a [href]=\"url.getLogoutUrl()\">{{ i18n.msgStr('doSignOut') }}</a>\n </li>\n </ul>\n </div>\n </div>\n </nav>\n </header>\n\n <div class=\"container\">\n <div class=\"bs-sidebar col-sm-3\">\n <ul>\n <li [ngClass]=\"{ active: active === 'account' }\">\n <a [href]=\"url.accountUrl\">{{ i18n.msgStr('account') }}</a>\n </li>\n @if (features.passwordUpdateSupported) {\n <li [ngClass]=\"{ active: active === 'password' }\">\n <a [href]=\"url.passwordUrl\">{{ i18n.msgStr('password') }}</a>\n </li>\n }\n <li [ngClass]=\"{ active: active === 'totp' }\">\n <a [href]=\"url.totpUrl\">{{ i18n.msgStr('authenticator') }}</a>\n </li>\n @if (features.identityFederation) {\n <li [ngClass]=\"{ active: active === 'social' }\">\n <a [href]=\"url.socialUrl\">{{ i18n.msgStr('federatedIdentity') }}</a>\n </li>\n }\n <li [ngClass]=\"{ active: active === 'sessions' }\">\n <a [href]=\"url.sessionsUrl\">{{ i18n.msgStr('sessions') }}</a>\n </li>\n <li [ngClass]=\"{ active: active === 'applications' }\">\n <a [href]=\"url.applicationsUrl\">{{ i18n.msgStr('applications') }}</a>\n </li>\n @if (features.log) {\n <li [ngClass]=\"{ active: active === 'log' }\">\n <a [href]=\"url.logUrl\">{{ i18n.msgStr('log') }}</a>\n </li>\n }\n @if (realm.userManagedAccessAllowed && features.authorization) {\n <li [ngClass]=\"{ active: active === 'authorization' }\">\n <a [href]=\"url.resourceUrl\">{{ i18n.msgStr('myResources') }}</a>\n </li>\n }\n </ul>\n </div>\n\n <div class=\"col-sm-9 content-area\">\n @if (message) {\n <div [ngClass]=\"['alert', 'alert-' + message.type]\">\n @switch (message.type) {\n @case ('success') {\n <span class=\"pficon pficon-ok\"></span>\n }\n @case ('error') {\n <span class=\"pficon pficon-error-circle-o\"></span>\n }\n }\n <span\n class=\"kc-feedback-text\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n @let pageRef = page();\n @if (!!pageRef) {\n <kc-dynamic-page-injector\n [page]=\"pageRef\"\n (componentCreated)=\"onComponentCreated($event)\"\n />\n }\n </div>\n </div>\n}\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: DynamicPageInjectorComponent, selector: "kc-dynamic-page-injector", inputs: ["page"], outputs: ["componentCreated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
56
89
  }
57
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TemplateComponent, decorators: [{
58
91
  type: Component,
59
- args: [{ selector: 'kc-account-template', standalone: true, imports: [AsyncPipe, KcSanitizePipe, NgTemplateOutlet, KcClassDirective, NgClass], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
92
+ args: [{ selector: 'kc-root', standalone: true, imports: [AsyncPipe, KcSanitizePipe, NgTemplateOutlet, KcClassDirective, NgClass, DynamicPageInjectorComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
60
93
  {
61
94
  provide: ComponentReference,
62
95
  useExisting: forwardRef(() => TemplateComponent)
63
96
  }
64
- ], template: "@let enabledLanguages = i18n.enabledLanguages;\n@let currentLanguage = i18n.currentLanguage;\n@let url = kcContext.url;\n@let features = kcContext.features;\n@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let referrer = kcContext.referrer;\n@let activeLink = active();\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <header class=\"navbar navbar-default navbar-pf navbar-main header\">\n <nav\n class=\"navbar\"\n role=\"navigation\"\n >\n <div class=\"navbar-header\">\n <div class=\"container\">\n <h1 class=\"navbar-title\">Keycloak</h1>\n </div>\n </div>\n <div class=\"navbar-collapse navbar-collapse-1\">\n <div class=\"container\">\n <ul class=\"nav navbar-nav navbar-utility\">\n @if (enabledLanguages.length > 1) {\n <li>\n <div\n class=\"kc-dropdown\"\n id=\"kc-locale-dropdown\"\n >\n <a\n href=\"#\"\n id=\"kc-current-locale-link\"\n >\n {{ currentLanguage.label }}\n </a>\n <ul>\n @for (enabledLanguage of enabledLanguages; track enabledLanguage.languageTag) {\n @let label = enabledLanguage.label;\n @let href = enabledLanguage.href;\n\n <li class=\"kc-dropdown-item\">\n <a [href]=\"href\">{{ label }}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n }\n @if (!!referrer?.url) {\n <a\n id=\"referrer\"\n [href]=\"referrer?.url\"\n >\n {{ i18n.msgStr('backTo', referrer?.name) }}\n </a>\n }\n <li>\n <a [href]=\"url.getLogoutUrl()\">{{ i18n.msgStr('doSignOut') }}</a>\n </li>\n </ul>\n </div>\n </div>\n </nav>\n </header>\n\n <div class=\"container\">\n <div class=\"bs-sidebar col-sm-3\">\n <ul>\n <li [ngClass]=\"{ active: activeLink === 'account' }\">\n <a [href]=\"url.accountUrl\">{{ i18n.msgStr('account') }}</a>\n </li>\n @if (features.passwordUpdateSupported) {\n <li [ngClass]=\"{ active: activeLink === 'password' }\">\n <a [href]=\"url.passwordUrl\">{{ i18n.msgStr('password') }}</a>\n </li>\n }\n <li [ngClass]=\"{ active: activeLink === 'totp' }\">\n <a [href]=\"url.totpUrl\">{{ i18n.msgStr('authenticator') }}</a>\n </li>\n @if (features.identityFederation) {\n <li [ngClass]=\"{ active: activeLink === 'social' }\">\n <a [href]=\"url.socialUrl\">{{ i18n.msgStr('federatedIdentity') }}</a>\n </li>\n }\n <li [ngClass]=\"{ active: activeLink === 'sessions' }\">\n <a [href]=\"url.sessionsUrl\">{{ i18n.msgStr('sessions') }}</a>\n </li>\n <li [ngClass]=\"{ active: activeLink === 'applications' }\">\n <a [href]=\"url.applicationsUrl\">{{ i18n.msgStr('applications') }}</a>\n </li>\n @if (features.log) {\n <li [ngClass]=\"{ active: activeLink === 'log' }\">\n <a [href]=\"url.logUrl\">{{ i18n.msgStr('log') }}</a>\n </li>\n }\n @if (realm.userManagedAccessAllowed && features.authorization) {\n <li [ngClass]=\"{ active: activeLink === 'authorization' }\">\n <a [href]=\"url.resourceUrl\">{{ i18n.msgStr('myResources') }}</a>\n </li>\n }\n </ul>\n </div>\n\n <div class=\"col-sm-9 content-area\">\n @if (message) {\n <div [ngClass]=\"['alert', 'alert-' + message.type]\">\n @switch (message.type) {\n @case ('success') {\n <span class=\"pficon pficon-ok\"></span>\n }\n @case ('error') {\n <span class=\"pficon pficon-error-circle-o\"></span>\n }\n }\n <span\n class=\"kc-feedback-text\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <ng-content select=\"[content]\" />\n </div>\n </div>\n}\n" }]
97
+ ], template: "@let enabledLanguages = i18n.enabledLanguages;\n@let currentLanguage = i18n.currentLanguage;\n@let url = kcContext.url;\n@let features = kcContext.features;\n@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let referrer = kcContext.referrer;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <header class=\"navbar navbar-default navbar-pf navbar-main header\">\n <nav\n class=\"navbar\"\n role=\"navigation\"\n >\n <div class=\"navbar-header\">\n <div class=\"container\">\n <h1 class=\"navbar-title\">Keycloak</h1>\n </div>\n </div>\n <div class=\"navbar-collapse navbar-collapse-1\">\n <div class=\"container\">\n <ul class=\"nav navbar-nav navbar-utility\">\n @if (enabledLanguages.length > 1) {\n <li>\n <div\n class=\"kc-dropdown\"\n id=\"kc-locale-dropdown\"\n >\n <a\n href=\"#\"\n id=\"kc-current-locale-link\"\n >\n {{ currentLanguage.label }}\n </a>\n <ul>\n @for (enabledLanguage of enabledLanguages; track enabledLanguage.languageTag) {\n @let label = enabledLanguage.label;\n @let href = enabledLanguage.href;\n\n <li class=\"kc-dropdown-item\">\n <a [href]=\"href\">{{ label }}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n }\n @if (!!referrer?.url) {\n <a\n id=\"referrer\"\n [href]=\"referrer?.url\"\n >\n {{ i18n.msgStr('backTo', referrer?.name) }}\n </a>\n }\n <li>\n <a [href]=\"url.getLogoutUrl()\">{{ i18n.msgStr('doSignOut') }}</a>\n </li>\n </ul>\n </div>\n </div>\n </nav>\n </header>\n\n <div class=\"container\">\n <div class=\"bs-sidebar col-sm-3\">\n <ul>\n <li [ngClass]=\"{ active: active === 'account' }\">\n <a [href]=\"url.accountUrl\">{{ i18n.msgStr('account') }}</a>\n </li>\n @if (features.passwordUpdateSupported) {\n <li [ngClass]=\"{ active: active === 'password' }\">\n <a [href]=\"url.passwordUrl\">{{ i18n.msgStr('password') }}</a>\n </li>\n }\n <li [ngClass]=\"{ active: active === 'totp' }\">\n <a [href]=\"url.totpUrl\">{{ i18n.msgStr('authenticator') }}</a>\n </li>\n @if (features.identityFederation) {\n <li [ngClass]=\"{ active: active === 'social' }\">\n <a [href]=\"url.socialUrl\">{{ i18n.msgStr('federatedIdentity') }}</a>\n </li>\n }\n <li [ngClass]=\"{ active: active === 'sessions' }\">\n <a [href]=\"url.sessionsUrl\">{{ i18n.msgStr('sessions') }}</a>\n </li>\n <li [ngClass]=\"{ active: active === 'applications' }\">\n <a [href]=\"url.applicationsUrl\">{{ i18n.msgStr('applications') }}</a>\n </li>\n @if (features.log) {\n <li [ngClass]=\"{ active: active === 'log' }\">\n <a [href]=\"url.logUrl\">{{ i18n.msgStr('log') }}</a>\n </li>\n }\n @if (realm.userManagedAccessAllowed && features.authorization) {\n <li [ngClass]=\"{ active: active === 'authorization' }\">\n <a [href]=\"url.resourceUrl\">{{ i18n.msgStr('myResources') }}</a>\n </li>\n }\n </ul>\n </div>\n\n <div class=\"col-sm-9 content-area\">\n @if (message) {\n <div [ngClass]=\"['alert', 'alert-' + message.type]\">\n @switch (message.type) {\n @case ('success') {\n <span class=\"pficon pficon-ok\"></span>\n }\n @case ('error') {\n <span class=\"pficon pficon-error-circle-o\"></span>\n }\n }\n <span\n class=\"kc-feedback-text\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n @let pageRef = page();\n @if (!!pageRef) {\n <kc-dynamic-page-injector\n [page]=\"pageRef\"\n (componentCreated)=\"onComponentCreated($event)\"\n />\n }\n </div>\n </div>\n}\n" }]
65
98
  }], ctorParameters: () => [] });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FjY291bnQvY29udGFpbmVycy90ZW1wbGF0ZS90ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvYWNjb3VudC9jb250YWluZXJzL3RlbXBsYXRlL3RlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUM5RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNwRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDbEYsT0FBTyxFQUFZLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQWtCckUsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGtCQUFrQjtJQWNyRDtRQUNJLEtBQUssRUFBRSxDQUFDO1FBZFosU0FBSSxHQUFHLE1BQU0sQ0FBTyxZQUFZLENBQUMsQ0FBQztRQUNsQyxhQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLFNBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixjQUFTLEdBQUcsTUFBTSxDQUFZLGtCQUFrQixDQUFDLENBQUM7UUFDekMsb0JBQWUsR0FBRyxNQUFNLENBQVUsZUFBZSxDQUFDLENBQUM7UUFDbkQsWUFBTyxHQUFHLE1BQU0sQ0FBb0MsZUFBZSxDQUFDLENBQUM7UUFDOUUsbUNBQThCLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFeEUsV0FBTSxHQUFHLEtBQUssQ0FBaUgsU0FBUyxDQUFDLENBQUM7UUFNdEksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQ3JCLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDeEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNWLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUMsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNILGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBeENRLGlCQUFpQjtrR0FBakIsaUJBQWlCLHlNQVBmO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQzthQUNuRDtTQUNKLGlEQzNCTCxzK0tBNkhBLHVDRHpHYyxTQUFTLHlDQUFFLGNBQWMsbURBQXNDLE9BQU87OzJGQVN2RSxpQkFBaUI7a0JBYjdCLFNBQVM7K0JBQ0kscUJBQXFCLGNBRW5CLElBQUksV0FDUCxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLG1CQUNoRSx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxrQkFBa0I7NEJBQzNCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDO3lCQUNuRDtxQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBpbmplY3QsIGlucHV0LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YSwgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IENvbXBvbmVudFJlZmVyZW5jZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvY2xhc3Nlcy9jb21wb25lbnQtcmVmZXJlbmNlJztcbmltcG9ydCB7IEtjQ2xhc3NEaXJlY3RpdmUgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2RpcmVjdGl2ZXMva2MtY2xhc3MnO1xuaW1wb3J0IHsgQWNjb3VudFJlc291cmNlSW5qZWN0b3JTZXJ2aWNlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9zZXJ2aWNlcy9hY2NvdW50LXJlc291cmNlLWluamVjdG9yJztcbmltcG9ydCB7IEFDQ09VTlRfQ0xBU1NFUyB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2NsYXNzZXMnO1xuaW1wb3J0IHsgQUNDT1VOVF9JMThOIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMvaTE4bic7XG5pbXBvcnQgeyBLQ19BQ0NPVU5UX0NPTlRFWFQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9rYy1jb250ZXh0JztcbmltcG9ydCB7IEtjU2FuaXRpemVQaXBlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbGliL3BpcGVzL2tjLXNhbml0aXplJztcbmltcG9ydCB7IFVTRV9ERUZBVUxUX0NTUyB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xpYi90b2tlbnMvdXNlLWRlZmF1bHQtY3NzJztcbmltcG9ydCB7IENsYXNzS2V5LCBnZXRLY0Nsc3ggfSBmcm9tICdrZXljbG9ha2lmeS9hY2NvdW50L2xpYi9rY0Nsc3gnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHR5cGUgeyBJMThuIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9pMThuJztcbmltcG9ydCB0eXBlIHsgS2NDb250ZXh0IH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9LY0NvbnRleHQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2tjLWFjY291bnQtdGVtcGxhdGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBLY1Nhbml0aXplUGlwZSwgTmdUZW1wbGF0ZU91dGxldCwgS2NDbGFzc0RpcmVjdGl2ZSwgTmdDbGFzc10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENvbXBvbmVudFJlZmVyZW5jZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRlbXBsYXRlQ29tcG9uZW50KVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudFJlZmVyZW5jZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgaTE4biA9IGluamVjdDxJMThuPihBQ0NPVU5UX0kxOE4pO1xuICAgIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gICAgbWV0YSA9IGluamVjdChNZXRhKTtcbiAgICB0aXRsZSA9IGluamVjdChUaXRsZSk7XG4gICAga2NDb250ZXh0ID0gaW5qZWN0PEtjQ29udGV4dD4oS0NfQUNDT1VOVF9DT05URVhUKTtcbiAgICBvdmVycmlkZSBkb1VzZURlZmF1bHRDc3MgPSBpbmplY3Q8Ym9vbGVhbj4oVVNFX0RFRkFVTFRfQ1NTKTtcbiAgICBvdmVycmlkZSBjbGFzc2VzID0gaW5qZWN0PFBhcnRpYWw8UmVjb3JkPENsYXNzS2V5LCBzdHJpbmc+Pj4oQUNDT1VOVF9DTEFTU0VTKTtcbiAgICBhY2NvdW50UmVzb3VyY2VJbmplY3RvclNlcnZpY2UgPSBpbmplY3QoQWNjb3VudFJlc291cmNlSW5qZWN0b3JTZXJ2aWNlKTtcblxuICAgIGFjdGl2ZSA9IGlucHV0PCdhY2NvdW50JyB8ICdwYXNzd29yZCcgfCAndG90cCcgfCAnc29jaWFsJyB8ICdzZXNzaW9ucycgfCAnYXBwbGljYXRpb25zJyB8ICdsb2cnIHwgJ2F1dGhvcml6YXRpb24nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gICAgaXNSZWFkeVRvUmVuZGVyJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnRpdGxlLnNldFRpdGxlKHRoaXMuaTE4bi5tc2dTdHIoJ2FjY291bnRNYW5hZ2VtZW50VGl0bGUnKSk7XG4gICAgICAgIHRoaXMuaXNSZWFkeVRvUmVuZGVyJCA9IHRoaXMuYWNjb3VudFJlc291cmNlSW5qZWN0b3JTZXJ2aWNlLmluamVjdFJlc291cmNlKHRoaXMuZG9Vc2VEZWZhdWx0Q3NzKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5hcHBseUtjSW5kZXhDbGFzc2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseUtjSW5kZXhDbGFzc2VzKCkge1xuICAgICAgICBjb25zdCBrY0Nsc3ggPSBnZXRLY0Nsc3goe1xuICAgICAgICAgICAgZG9Vc2VEZWZhdWx0Q3NzOiB0aGlzLmRvVXNlRGVmYXVsdENzcyxcbiAgICAgICAgICAgIGNsYXNzZXM6IHRoaXMuY2xhc3Nlc1xuICAgICAgICB9KS5rY0Nsc3g7XG4gICAgICAgIGNvbnN0IGtjQm9keUNsYXNzID0ga2NDbHN4KCdrY0JvZHlDbGFzcycpO1xuICAgICAgICBjb25zdCBrY0h0bWxDbGFzcyA9IGtjQ2xzeCgna2NIdG1sQ2xhc3MnKTtcbiAgICAgICAgY29uc3Qga2NCb2R5Q2xhc3NlcyA9IGtjQm9keUNsYXNzLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgIGNvbnN0IGtjSHRtbENsYXNzZXMgPSBrY0h0bWxDbGFzcy5zcGxpdCgvXFxzKy8pO1xuICAgICAgICBrY0JvZHlDbGFzc2VzLnB1c2goJ2FkbWluLWNvbnNvbGUnLCAndXNlcicpO1xuICAgICAgICBrY0JvZHlDbGFzc2VzLmZvckVhY2goa2xhc3MgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBrbGFzcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBrY0h0bWxDbGFzc2VzLmZvckVhY2goa2xhc3MgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGtsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiQGxldCBlbmFibGVkTGFuZ3VhZ2VzID0gaTE4bi5lbmFibGVkTGFuZ3VhZ2VzO1xuQGxldCBjdXJyZW50TGFuZ3VhZ2UgPSBpMThuLmN1cnJlbnRMYW5ndWFnZTtcbkBsZXQgdXJsID0ga2NDb250ZXh0LnVybDtcbkBsZXQgZmVhdHVyZXMgPSBrY0NvbnRleHQuZmVhdHVyZXM7XG5AbGV0IHJlYWxtID0ga2NDb250ZXh0LnJlYWxtO1xuQGxldCBtZXNzYWdlID0ga2NDb250ZXh0Lm1lc3NhZ2U7XG5AbGV0IHJlZmVycmVyID0ga2NDb250ZXh0LnJlZmVycmVyO1xuQGxldCBhY3RpdmVMaW5rID0gYWN0aXZlKCk7XG5AbGV0IGlzUmVhZHlUb1JlbmRlciA9IGlzUmVhZHlUb1JlbmRlciQgfCBhc3luYztcblxuQGlmIChpc1JlYWR5VG9SZW5kZXIpIHtcbiAgICA8aGVhZGVyIGNsYXNzPVwibmF2YmFyIG5hdmJhci1kZWZhdWx0IG5hdmJhci1wZiBuYXZiYXItbWFpbiBoZWFkZXJcIj5cbiAgICAgICAgPG5hdlxuICAgICAgICAgICAgY2xhc3M9XCJuYXZiYXJcIlxuICAgICAgICAgICAgcm9sZT1cIm5hdmlnYXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2YmFyLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibmF2YmFyLXRpdGxlXCI+S2V5Y2xvYWs8L2gxPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2YmFyLWNvbGxhcHNlIG5hdmJhci1jb2xsYXBzZS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2YmFyLW5hdiBuYXZiYXItdXRpbGl0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlbmFibGVkTGFuZ3VhZ2VzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwia2MtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrYy1sb2NhbGUtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImtjLWN1cnJlbnQtbG9jYWxlLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRMYW5ndWFnZS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGVuYWJsZWRMYW5ndWFnZSBvZiBlbmFibGVkTGFuZ3VhZ2VzOyB0cmFjayBlbmFibGVkTGFuZ3VhZ2UubGFuZ3VhZ2VUYWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBsYWJlbCA9IGVuYWJsZWRMYW5ndWFnZS5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBocmVmID0gZW5hYmxlZExhbmd1YWdlLmhyZWY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwia2MtZHJvcGRvd24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiaHJlZlwiPnt7IGxhYmVsIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEhcmVmZXJyZXI/LnVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJyZWZlcnJlcj8udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdiYWNrVG8nLCByZWZlcnJlcj8ubmFtZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwidXJsLmdldExvZ291dFVybCgpXCI+e3sgaTE4bi5tc2dTdHIoJ2RvU2lnbk91dCcpIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25hdj5cbiAgICA8L2hlYWRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJzLXNpZGViYXIgY29sLXNtLTNcIj5cbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGFjdGl2ZUxpbmsgPT09ICdhY2NvdW50JyB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cInVybC5hY2NvdW50VXJsXCI+e3sgaTE4bi5tc2dTdHIoJ2FjY291bnQnKSB9fTwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIEBpZiAoZmVhdHVyZXMucGFzc3dvcmRVcGRhdGVTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBhY3RpdmVMaW5rID09PSAncGFzc3dvcmQnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cInVybC5wYXNzd29yZFVybFwiPnt7IGkxOG4ubXNnU3RyKCdwYXNzd29yZCcpIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGFjdGl2ZUxpbmsgPT09ICd0b3RwJyB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cInVybC50b3RwVXJsXCI+e3sgaTE4bi5tc2dTdHIoJ2F1dGhlbnRpY2F0b3InKSB9fTwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIEBpZiAoZmVhdHVyZXMuaWRlbnRpdHlGZWRlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ7IGFjdGl2ZTogYWN0aXZlTGluayA9PT0gJ3NvY2lhbCcgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwidXJsLnNvY2lhbFVybFwiPnt7IGkxOG4ubXNnU3RyKCdmZWRlcmF0ZWRJZGVudGl0eScpIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGFjdGl2ZUxpbmsgPT09ICdzZXNzaW9ucycgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJ1cmwuc2Vzc2lvbnNVcmxcIj57eyBpMThuLm1zZ1N0cignc2Vzc2lvbnMnKSB9fTwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ7IGFjdGl2ZTogYWN0aXZlTGluayA9PT0gJ2FwcGxpY2F0aW9ucycgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJ1cmwuYXBwbGljYXRpb25zVXJsXCI+e3sgaTE4bi5tc2dTdHIoJ2FwcGxpY2F0aW9ucycpIH19PC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgQGlmIChmZWF0dXJlcy5sb2cpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBhY3RpdmVMaW5rID09PSAnbG9nJyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJ1cmwubG9nVXJsXCI+e3sgaTE4bi5tc2dTdHIoJ2xvZycpIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKHJlYWxtLnVzZXJNYW5hZ2VkQWNjZXNzQWxsb3dlZCAmJiBmZWF0dXJlcy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ7IGFjdGl2ZTogYWN0aXZlTGluayA9PT0gJ2F1dGhvcml6YXRpb24nIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cInVybC5yZXNvdXJjZVVybFwiPnt7IGkxOG4ubXNnU3RyKCdteVJlc291cmNlcycpIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOSBjb250ZW50LWFyZWFcIj5cbiAgICAgICAgICAgIEBpZiAobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiWydhbGVydCcsICdhbGVydC0nICsgbWVzc2FnZS50eXBlXVwiPlxuICAgICAgICAgICAgICAgICAgICBAc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgnc3VjY2VzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBmaWNvbiBwZmljb24tb2tcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGZpY29uIHBmaWNvbi1lcnJvci1jaXJjbGUtb1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrYy1mZWVkYmFjay10ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwibWVzc2FnZS5zdW1tYXJ5IHwga2NTYW5pdGl6ZTogJ2h0bWwnXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjb250ZW50XVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxufVxuIl19
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FjY291bnQvY29udGFpbmVycy90ZW1wbGF0ZS90ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvYWNjb3VudC9jb250YWluZXJzL3RlbXBsYXRlL3RlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUVULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBR3BGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNsRixPQUFPLEVBQVksU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBU3JFLE1BQU0sT0FBTyw0QkFBNEI7SUFHckMsSUFBSSxDQUE4QztJQUNsRDtRQUhBLFNBQUksR0FBRyxLQUFLLEVBQWlCLENBQUM7UUFDOUIscUJBQWdCLEdBQUcsTUFBTSxFQUFVLENBQUM7UUFDcEMsU0FBSSxHQUFHLE1BQU0sQ0FBbUIsZ0JBQWdCLENBQUMsQ0FBQztRQUU5QyxNQUFNLENBQ0YsR0FBRyxFQUFFO1lBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFDbEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBa0IsQ0FBQyxDQUFDO1FBQzNELENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUM5QixDQUFDO0lBQ04sQ0FBQzs4R0FkUSw0QkFBNEI7a0dBQTVCLDRCQUE0Qix3UUFGM0IsRUFBRTs7MkZBRUgsNEJBQTRCO2tCQUx4QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsRUFBRTtpQkFDZjs7QUErQkQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGtCQUFrQjtJQUdyRCxJQUFJLENBQTZCO0lBY2pDO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFqQlosU0FBSSxHQUFHLE1BQU0sQ0FBTyxZQUFZLENBQUMsQ0FBQztRQUNsQyxhQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLFNBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqQyxTQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLFVBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsY0FBUyxHQUFHLE1BQU0sQ0FBWSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3pDLG9CQUFlLEdBQUcsTUFBTSxDQUFVLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELFlBQU8sR0FBRyxNQUFNLENBQW9DLGVBQWUsQ0FBQyxDQUFDO1FBQzlFLG1DQUE4QixHQUFHLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBSXhFLFNBQUksR0FBRyxLQUFLLEVBQWlCLENBQUM7UUFNMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQ3JCLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDeEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNWLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUMsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNILGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFlO1FBQzlCLElBQUksUUFBUSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBb0IsQ0FBQztRQUMvQyxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDOzhHQW5EUSxpQkFBaUI7a0dBQWpCLGlCQUFpQix1TEFQZjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7YUFDbkQ7U0FDSixpREMvREwsd25MQWtJQSx1Q0QxRWMsU0FBUyx5Q0FBRSxjQUFjLG1EQUFzQyxPQUFPLG9GQXJCdkUsNEJBQTRCOzsyRkE4QjVCLGlCQUFpQjtrQkFiN0IsU0FBUzsrQkFDSSxTQUFTLGNBRVAsSUFBSSxXQUNQLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLENBQUMsbUJBQzlGLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGtCQUFrQjs0QkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7eUJBQ25EO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIGVmZmVjdCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBPbkluaXQsXG4gICAgb3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBUeXBlLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZXRhLCBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmZXJlbmNlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9jbGFzc2VzL2NvbXBvbmVudC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgS2NDbGFzc0RpcmVjdGl2ZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvZGlyZWN0aXZlcy9rYy1jbGFzcyc7XG5pbXBvcnQgdHlwZSB7IEkxOG4gfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBLY0NvbnRleHQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L0tjQ29udGV4dCc7XG5pbXBvcnQgeyBBY2NvdW50UmVzb3VyY2VJbmplY3RvclNlcnZpY2UgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3NlcnZpY2VzL2FjY291bnQtcmVzb3VyY2UtaW5qZWN0b3InO1xuaW1wb3J0IHsgQUNDT1VOVF9DTEFTU0VTIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMvY2xhc3Nlcyc7XG5pbXBvcnQgeyBBQ0NPVU5UX0kxOE4gfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9pMThuJztcbmltcG9ydCB7IEtDX0FDQ09VTlRfQ09OVEVYVCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2tjLWNvbnRleHQnO1xuaW1wb3J0IHsgS2NTYW5pdGl6ZVBpcGUgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9saWIvcGlwZXMva2Mtc2FuaXRpemUnO1xuaW1wb3J0IHsgVVNFX0RFRkFVTFRfQ1NTIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbGliL3Rva2Vucy91c2UtZGVmYXVsdC1jc3MnO1xuaW1wb3J0IHsgQ2xhc3NLZXksIGdldEtjQ2xzeCB9IGZyb20gJ2tleWNsb2FraWZ5L2FjY291bnQvbGliL2tjQ2xzeCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG50eXBlIEFjdGl2ZVR5cGUgPSAnYWNjb3VudCcgfCAncGFzc3dvcmQnIHwgJ3RvdHAnIHwgJ3NvY2lhbCcgfCAnc2Vzc2lvbnMnIHwgJ2FwcGxpY2F0aW9ucycgfCAnbG9nJyB8ICdhdXRob3JpemF0aW9uJyB8IHVuZGVmaW5lZDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdrYy1keW5hbWljLXBhZ2UtaW5qZWN0b3InLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBgXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNQYWdlSW5qZWN0b3JDb21wb25lbnQge1xuICAgIHBhZ2UgPSBpbnB1dDxUeXBlPHVua25vd24+PigpO1xuICAgIGNvbXBvbmVudENyZWF0ZWQgPSBvdXRwdXQ8b2JqZWN0PigpO1xuICAgICN2Y3IgPSBpbmplY3Q8Vmlld0NvbnRhaW5lclJlZj4oVmlld0NvbnRhaW5lclJlZik7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gdGhpcy5wYWdlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYWdlKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcFJlZiA9IHRoaXMuI3Zjci5jcmVhdGVDb21wb25lbnQocGFnZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRDcmVhdGVkLmVtaXQoY29tcFJlZi5pbnN0YW5jZSBhcyBvYmplY3QpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICAgICApO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdrYy1yb290JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0FzeW5jUGlwZSwgS2NTYW5pdGl6ZVBpcGUsIE5nVGVtcGxhdGVPdXRsZXQsIEtjQ2xhc3NEaXJlY3RpdmUsIE5nQ2xhc3MsIER5bmFtaWNQYWdlSW5qZWN0b3JDb21wb25lbnRdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBDb21wb25lbnRSZWZlcmVuY2UsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUZW1wbGF0ZUNvbXBvbmVudClcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRSZWZlcmVuY2UgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGkxOG4gPSBpbmplY3Q8STE4bj4oQUNDT1VOVF9JMThOKTtcbiAgICByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgICNjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIG1ldGEgPSBpbmplY3QoTWV0YSk7XG4gICAgdGl0bGUgPSBpbmplY3QoVGl0bGUpO1xuICAgIGtjQ29udGV4dCA9IGluamVjdDxLY0NvbnRleHQ+KEtDX0FDQ09VTlRfQ09OVEVYVCk7XG4gICAgb3ZlcnJpZGUgZG9Vc2VEZWZhdWx0Q3NzID0gaW5qZWN0PGJvb2xlYW4+KFVTRV9ERUZBVUxUX0NTUyk7XG4gICAgb3ZlcnJpZGUgY2xhc3NlcyA9IGluamVjdDxQYXJ0aWFsPFJlY29yZDxDbGFzc0tleSwgc3RyaW5nPj4+KEFDQ09VTlRfQ0xBU1NFUyk7XG4gICAgYWNjb3VudFJlc291cmNlSW5qZWN0b3JTZXJ2aWNlID0gaW5qZWN0KEFjY291bnRSZXNvdXJjZUluamVjdG9yU2VydmljZSk7XG5cbiAgICBpc1JlYWR5VG9SZW5kZXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgcGFnZSA9IGlucHV0PFR5cGU8dW5rbm93bj4+KCk7XG5cbiAgICBhY3RpdmU6IEFjdGl2ZVR5cGU7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50aXRsZS5zZXRUaXRsZSh0aGlzLmkxOG4ubXNnU3RyKCdhY2NvdW50TWFuYWdlbWVudFRpdGxlJykpO1xuICAgICAgICB0aGlzLmlzUmVhZHlUb1JlbmRlciQgPSB0aGlzLmFjY291bnRSZXNvdXJjZUluamVjdG9yU2VydmljZS5pbmplY3RSZXNvdXJjZSh0aGlzLmRvVXNlRGVmYXVsdENzcyk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlLY0luZGV4Q2xhc3NlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlLY0luZGV4Q2xhc3NlcygpIHtcbiAgICAgICAgY29uc3Qga2NDbHN4ID0gZ2V0S2NDbHN4KHtcbiAgICAgICAgICAgIGRvVXNlRGVmYXVsdENzczogdGhpcy5kb1VzZURlZmF1bHRDc3MsXG4gICAgICAgICAgICBjbGFzc2VzOiB0aGlzLmNsYXNzZXNcbiAgICAgICAgfSkua2NDbHN4O1xuICAgICAgICBjb25zdCBrY0JvZHlDbGFzcyA9IGtjQ2xzeCgna2NCb2R5Q2xhc3MnKTtcbiAgICAgICAgY29uc3Qga2NIdG1sQ2xhc3MgPSBrY0Nsc3goJ2tjSHRtbENsYXNzJyk7XG4gICAgICAgIGNvbnN0IGtjQm9keUNsYXNzZXMgPSBrY0JvZHlDbGFzcy5zcGxpdCgvXFxzKy8pO1xuICAgICAgICBjb25zdCBrY0h0bWxDbGFzc2VzID0ga2NIdG1sQ2xhc3Muc3BsaXQoL1xccysvKTtcbiAgICAgICAga2NCb2R5Q2xhc3Nlcy5wdXNoKCdhZG1pbi1jb25zb2xlJywgJ3VzZXInKTtcbiAgICAgICAga2NCb2R5Q2xhc3Nlcy5mb3JFYWNoKGtsYXNzID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwga2xhc3MpO1xuICAgICAgICB9KTtcbiAgICAgICAga2NIdG1sQ2xhc3Nlcy5mb3JFYWNoKGtsYXNzID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBrbGFzcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ29tcG9uZW50Q3JlYXRlZChjb21wUmVmOiBvYmplY3QpIHtcbiAgICAgICAgaWYgKCdhY3RpdmUnIGluIGNvbXBSZWYgJiYgY29tcFJlZi5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gY29tcFJlZi5hY3RpdmUgYXMgQWN0aXZlVHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG4iLCJAbGV0IGVuYWJsZWRMYW5ndWFnZXMgPSBpMThuLmVuYWJsZWRMYW5ndWFnZXM7XG5AbGV0IGN1cnJlbnRMYW5ndWFnZSA9IGkxOG4uY3VycmVudExhbmd1YWdlO1xuQGxldCB1cmwgPSBrY0NvbnRleHQudXJsO1xuQGxldCBmZWF0dXJlcyA9IGtjQ29udGV4dC5mZWF0dXJlcztcbkBsZXQgcmVhbG0gPSBrY0NvbnRleHQucmVhbG07XG5AbGV0IG1lc3NhZ2UgPSBrY0NvbnRleHQubWVzc2FnZTtcbkBsZXQgcmVmZXJyZXIgPSBrY0NvbnRleHQucmVmZXJyZXI7XG5AbGV0IGlzUmVhZHlUb1JlbmRlciA9IGlzUmVhZHlUb1JlbmRlciQgfCBhc3luYztcblxuQGlmIChpc1JlYWR5VG9SZW5kZXIpIHtcbiAgICA8aGVhZGVyIGNsYXNzPVwibmF2YmFyIG5hdmJhci1kZWZhdWx0IG5hdmJhci1wZiBuYXZiYXItbWFpbiBoZWFkZXJcIj5cbiAgICAgICAgPG5hdlxuICAgICAgICAgICAgY2xhc3M9XCJuYXZiYXJcIlxuICAgICAgICAgICAgcm9sZT1cIm5hdmlnYXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2YmFyLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibmF2YmFyLXRpdGxlXCI+S2V5Y2xvYWs8L2gxPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2YmFyLWNvbGxhcHNlIG5hdmJhci1jb2xsYXBzZS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2YmFyLW5hdiBuYXZiYXItdXRpbGl0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlbmFibGVkTGFuZ3VhZ2VzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwia2MtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrYy1sb2NhbGUtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImtjLWN1cnJlbnQtbG9jYWxlLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRMYW5ndWFnZS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGVuYWJsZWRMYW5ndWFnZSBvZiBlbmFibGVkTGFuZ3VhZ2VzOyB0cmFjayBlbmFibGVkTGFuZ3VhZ2UubGFuZ3VhZ2VUYWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBsYWJlbCA9IGVuYWJsZWRMYW5ndWFnZS5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBocmVmID0gZW5hYmxlZExhbmd1YWdlLmhyZWY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwia2MtZHJvcGRvd24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiaHJlZlwiPnt7IGxhYmVsIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEhcmVmZXJyZXI/LnVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJyZWZlcnJlcj8udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdiYWNrVG8nLCByZWZlcnJlcj8ubmFtZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwidXJsLmdldExvZ291dFVybCgpXCI+e3sgaTE4bi5tc2dTdHIoJ2RvU2lnbk91dCcpIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25hdj5cbiAgICA8L2hlYWRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJzLXNpZGViYXIgY29sLXNtLTNcIj5cbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGFjdGl2ZSA9PT0gJ2FjY291bnQnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwidXJsLmFjY291bnRVcmxcIj57eyBpMThuLm1zZ1N0cignYWNjb3VudCcpIH19PC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgQGlmIChmZWF0dXJlcy5wYXNzd29yZFVwZGF0ZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGFjdGl2ZSA9PT0gJ3Bhc3N3b3JkJyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJ1cmwucGFzc3dvcmRVcmxcIj57eyBpMThuLm1zZ1N0cigncGFzc3dvcmQnKSB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBhY3RpdmUgPT09ICd0b3RwJyB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cInVybC50b3RwVXJsXCI+e3sgaTE4bi5tc2dTdHIoJ2F1dGhlbnRpY2F0b3InKSB9fTwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIEBpZiAoZmVhdHVyZXMuaWRlbnRpdHlGZWRlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ7IGFjdGl2ZTogYWN0aXZlID09PSAnc29jaWFsJyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJ1cmwuc29jaWFsVXJsXCI+e3sgaTE4bi5tc2dTdHIoJ2ZlZGVyYXRlZElkZW50aXR5JykgfX08L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ7IGFjdGl2ZTogYWN0aXZlID09PSAnc2Vzc2lvbnMnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwidXJsLnNlc3Npb25zVXJsXCI+e3sgaTE4bi5tc2dTdHIoJ3Nlc3Npb25zJykgfX08L2E+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGFjdGl2ZSA9PT0gJ2FwcGxpY2F0aW9ucycgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJ1cmwuYXBwbGljYXRpb25zVXJsXCI+e3sgaTE4bi5tc2dTdHIoJ2FwcGxpY2F0aW9ucycpIH19PC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgQGlmIChmZWF0dXJlcy5sb2cpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBhY3RpdmUgPT09ICdsb2cnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cInVybC5sb2dVcmxcIj57eyBpMThuLm1zZ1N0cignbG9nJykgfX08L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAocmVhbG0udXNlck1hbmFnZWRBY2Nlc3NBbGxvd2VkICYmIGZlYXR1cmVzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBhY3RpdmUgPT09ICdhdXRob3JpemF0aW9uJyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJ1cmwucmVzb3VyY2VVcmxcIj57eyBpMThuLm1zZ1N0cignbXlSZXNvdXJjZXMnKSB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTkgY29udGVudC1hcmVhXCI+XG4gICAgICAgICAgICBAaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIlsnYWxlcnQnLCAnYWxlcnQtJyArIG1lc3NhZ2UudHlwZV1cIj5cbiAgICAgICAgICAgICAgICAgICAgQHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZmljb24gcGZpY29uLW9rXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBmaWNvbiBwZmljb24tZXJyb3ItY2lyY2xlLW9cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwia2MtZmVlZGJhY2stdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm1lc3NhZ2Uuc3VtbWFyeSB8IGtjU2FuaXRpemU6ICdodG1sJ1wiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAbGV0IHBhZ2VSZWYgPSBwYWdlKCk7XG4gICAgICAgICAgICBAaWYgKCEhcGFnZVJlZikge1xuICAgICAgICAgICAgICAgIDxrYy1keW5hbWljLXBhZ2UtaW5qZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgW3BhZ2VdPVwicGFnZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIChjb21wb25lbnRDcmVhdGVkKT1cIm9uQ29tcG9uZW50Q3JlYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbn1cbiJdfQ==
@@ -18,22 +18,23 @@ export class AccountComponent extends ComponentReference {
18
18
  this.additionalClasses = {
19
19
  kcBodyClass: `${this.classes?.kcBodyClass} user`
20
20
  };
21
+ this.active = 'account';
21
22
  }
22
23
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AccountComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
23
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: AccountComponent, isStandalone: true, selector: "kc-root", providers: [
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: AccountComponent, isStandalone: true, selector: "kc-account", providers: [
24
25
  {
25
26
  provide: ComponentReference,
26
27
  useExisting: forwardRef(() => AccountComponent)
27
28
  }
28
- ], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let realm = kcContext.realm;\n@let messagesPerField = kcContext.messagesPerField;\n@let stateChecker = kcContext.stateChecker;\n@let account = kcContext.account;\n@let referrer = kcContext.referrer;\n\n<kc-account-template [active]=\"'account'\">\n <ng-container content>\n <div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('editAccountHtmlTitle') }}</h2>\n </div>\n <div class=\"col-md-2 subtitle\">\n <span class=\"subtitle\"> <span class=\"required\">*</span> {{ i18n.msgStr('requiredFields') }} </span>\n </div>\n </div>\n <form\n class=\"form-horizontal\"\n method=\"post\"\n [action]=\"url.accountUrl\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n @if (!realm.registrationEmailAsUsername) {\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('username') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"username\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('username') }}\n </label>\n @if (realm.editUsernameAllowed) {\n <span class=\"required\">*</span>\n }\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"username\"\n name=\"username\"\n [disabled]=\"!realm.editUsernameAllowed\"\n [defaultValue]=\"account.username ?? ''\"\n />\n </div>\n </div>\n }\n\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('email') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"email\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('email') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"email\"\n name=\"email\"\n autoFocus\n [defaultValue]=\"account.email ?? ''\"\n />\n </div>\n </div>\n\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('firstName') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"firstName\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('firstName') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"firstName\"\n name=\"firstName\"\n [defaultValue]=\"account.firstName\"\n />\n </div>\n </div>\n\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('lastName') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"lastName\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('lastName') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"lastName\"\n name=\"lastName\"\n [defaultValue]=\"account.lastName ?? ''\"\n />\n </div>\n </div>\n\n <div class=\"form-group\">\n <div\n id=\"kc-form-buttons\"\n class=\"col-md-offset-2 col-md-10 submit\"\n >\n <div>\n @if (referrer) {\n <a [href]=\"referrer?.url\">{{ i18n.msgStr('backToApplication') }}</a>\n }\n <button\n type=\"submit\"\n name=\"submitAction\"\n value=\"Save\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doSave') }}\n </button>\n <button\n type=\"submit\"\n name=\"submitAction\"\n value=\"Cancel\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </div>\n </div>\n </div>\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"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
29
+ ], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let realm = kcContext.realm;\n@let messagesPerField = kcContext.messagesPerField;\n@let stateChecker = kcContext.stateChecker;\n@let account = kcContext.account;\n@let referrer = kcContext.referrer;\n\n<div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('editAccountHtmlTitle') }}</h2>\n </div>\n <div class=\"col-md-2 subtitle\">\n <span class=\"subtitle\"> <span class=\"required\">*</span> {{ i18n.msgStr('requiredFields') }} </span>\n </div>\n</div>\n<form\n class=\"form-horizontal\"\n method=\"post\"\n [action]=\"url.accountUrl\"\n>\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n @if (!realm.registrationEmailAsUsername) {\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('username') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"username\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('username') }}\n </label>\n @if (realm.editUsernameAllowed) {\n <span class=\"required\">*</span>\n }\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"username\"\n name=\"username\"\n [disabled]=\"!realm.editUsernameAllowed\"\n [defaultValue]=\"account.username ?? ''\"\n />\n </div>\n </div>\n }\n\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('email') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"email\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('email') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"email\"\n name=\"email\"\n autoFocus\n [defaultValue]=\"account.email ?? ''\"\n />\n </div>\n </div>\n\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('firstName') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"firstName\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('firstName') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"firstName\"\n name=\"firstName\"\n [defaultValue]=\"account.firstName\"\n />\n </div>\n </div>\n\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('lastName') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"lastName\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('lastName') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"lastName\"\n name=\"lastName\"\n [defaultValue]=\"account.lastName ?? ''\"\n />\n </div>\n </div>\n\n <div class=\"form-group\">\n <div\n id=\"kc-form-buttons\"\n class=\"col-md-offset-2 col-md-10 submit\"\n >\n <div>\n @if (referrer) {\n <a [href]=\"referrer?.url\">{{ i18n.msgStr('backToApplication') }}</a>\n }\n <button\n type=\"submit\"\n name=\"submitAction\"\n value=\"Save\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doSave') }}\n </button>\n <button\n type=\"submit\"\n name=\"submitAction\"\n value=\"Cancel\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </div>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
29
30
  }
30
31
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AccountComponent, decorators: [{
31
32
  type: Component,
32
- args: [{ standalone: true, imports: [KcClassDirective, TemplateComponent, NgClass], selector: 'kc-root', providers: [
33
+ args: [{ standalone: true, imports: [KcClassDirective, TemplateComponent, NgClass], selector: 'kc-account', providers: [
33
34
  {
34
35
  provide: ComponentReference,
35
36
  useExisting: forwardRef(() => AccountComponent)
36
37
  }
37
- ], template: "@let url = kcContext.url;\n@let realm = kcContext.realm;\n@let messagesPerField = kcContext.messagesPerField;\n@let stateChecker = kcContext.stateChecker;\n@let account = kcContext.account;\n@let referrer = kcContext.referrer;\n\n<kc-account-template [active]=\"'account'\">\n <ng-container content>\n <div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('editAccountHtmlTitle') }}</h2>\n </div>\n <div class=\"col-md-2 subtitle\">\n <span class=\"subtitle\"> <span class=\"required\">*</span> {{ i18n.msgStr('requiredFields') }} </span>\n </div>\n </div>\n <form\n class=\"form-horizontal\"\n method=\"post\"\n [action]=\"url.accountUrl\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n @if (!realm.registrationEmailAsUsername) {\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('username') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"username\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('username') }}\n </label>\n @if (realm.editUsernameAllowed) {\n <span class=\"required\">*</span>\n }\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"username\"\n name=\"username\"\n [disabled]=\"!realm.editUsernameAllowed\"\n [defaultValue]=\"account.username ?? ''\"\n />\n </div>\n </div>\n }\n\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('email') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"email\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('email') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"email\"\n name=\"email\"\n autoFocus\n [defaultValue]=\"account.email ?? ''\"\n />\n </div>\n </div>\n\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('firstName') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"firstName\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('firstName') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"firstName\"\n name=\"firstName\"\n [defaultValue]=\"account.firstName\"\n />\n </div>\n </div>\n\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('lastName') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"lastName\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('lastName') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"lastName\"\n name=\"lastName\"\n [defaultValue]=\"account.lastName ?? ''\"\n />\n </div>\n </div>\n\n <div class=\"form-group\">\n <div\n id=\"kc-form-buttons\"\n class=\"col-md-offset-2 col-md-10 submit\"\n >\n <div>\n @if (referrer) {\n <a [href]=\"referrer?.url\">{{ i18n.msgStr('backToApplication') }}</a>\n }\n <button\n type=\"submit\"\n name=\"submitAction\"\n value=\"Save\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doSave') }}\n </button>\n <button\n type=\"submit\"\n name=\"submitAction\"\n value=\"Cancel\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </ng-container>\n</kc-account-template>\n" }]
38
+ ], template: "@let url = kcContext.url;\n@let realm = kcContext.realm;\n@let messagesPerField = kcContext.messagesPerField;\n@let stateChecker = kcContext.stateChecker;\n@let account = kcContext.account;\n@let referrer = kcContext.referrer;\n\n<div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('editAccountHtmlTitle') }}</h2>\n </div>\n <div class=\"col-md-2 subtitle\">\n <span class=\"subtitle\"> <span class=\"required\">*</span> {{ i18n.msgStr('requiredFields') }} </span>\n </div>\n</div>\n<form\n class=\"form-horizontal\"\n method=\"post\"\n [action]=\"url.accountUrl\"\n>\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n @if (!realm.registrationEmailAsUsername) {\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('username') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"username\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('username') }}\n </label>\n @if (realm.editUsernameAllowed) {\n <span class=\"required\">*</span>\n }\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"username\"\n name=\"username\"\n [disabled]=\"!realm.editUsernameAllowed\"\n [defaultValue]=\"account.username ?? ''\"\n />\n </div>\n </div>\n }\n\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('email') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"email\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('email') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"email\"\n name=\"email\"\n autoFocus\n [defaultValue]=\"account.email ?? ''\"\n />\n </div>\n </div>\n\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('firstName') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"firstName\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('firstName') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"firstName\"\n name=\"firstName\"\n [defaultValue]=\"account.firstName\"\n />\n </div>\n </div>\n\n <div\n class=\"form-group\"\n [ngClass]=\"{ 'has-error': messagesPerField.existsError('lastName') }\"\n >\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"lastName\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('lastName') }}\n </label>\n <span class=\"required\">*</span>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"text\"\n class=\"form-control\"\n id=\"lastName\"\n name=\"lastName\"\n [defaultValue]=\"account.lastName ?? ''\"\n />\n </div>\n </div>\n\n <div class=\"form-group\">\n <div\n id=\"kc-form-buttons\"\n class=\"col-md-offset-2 col-md-10 submit\"\n >\n <div>\n @if (referrer) {\n <a [href]=\"referrer?.url\">{{ i18n.msgStr('backToApplication') }}</a>\n }\n <button\n type=\"submit\"\n name=\"submitAction\"\n value=\"Save\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doSave') }}\n </button>\n <button\n type=\"submit\"\n name=\"submitAction\"\n value=\"Cancel\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n >\n {{ i18n.msgStr('doCancel') }}\n </button>\n </div>\n </div>\n </div>\n</form>\n" }]
38
39
  }] });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYWNjb3VudC9wYWdlcy9hY2NvdW50L2FjY291bnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2FjY291bnQvcGFnZXMvYWNjb3VudC9hY2NvdW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7O0FBaUJsRixNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsa0JBQWtCO0lBWnhEOztRQWFJLFNBQUksR0FBRyxNQUFNLENBQU8sWUFBWSxDQUFDLENBQUM7UUFDbEMsY0FBUyxHQUFHLE1BQU0sQ0FBZ0Qsa0JBQWtCLENBQUMsQ0FBQztRQUM3RSxvQkFBZSxHQUFHLE1BQU0sQ0FBVSxlQUFlLENBQUMsQ0FBQztRQUNuRCxZQUFPLEdBQUcsTUFBTSxDQUFvQyxlQUFlLENBQUMsQ0FBQztRQUNyRSxzQkFBaUIsR0FBc0M7WUFDNUQsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLE9BQU87U0FDbkQsQ0FBQztLQUNMOzhHQVJZLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLHNEQVBkO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQzthQUNsRDtTQUNKLGlEQ3ZCTCwwb01BcUtBLDRDRHRKYyxnQkFBZ0IsK0ZBQUUsaUJBQWlCLG9GQUFFLE9BQU87OzJGQVU3QyxnQkFBZ0I7a0JBWjVCLFNBQVM7aUNBQ00sSUFBSSxXQUNQLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFlBQzdDLFNBQVMsYUFFUjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsa0JBQWtCOzRCQUMzQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQzt5QkFDbEQ7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRSZWZlcmVuY2UgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2NsYXNzZXMvY29tcG9uZW50LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvY29udGFpbmVycy90ZW1wbGF0ZSc7XG5pbXBvcnQgeyBLY0NsYXNzRGlyZWN0aXZlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9kaXJlY3RpdmVzL2tjLWNsYXNzJztcbmltcG9ydCB7IEFDQ09VTlRfQ0xBU1NFUyB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2NsYXNzZXMnO1xuaW1wb3J0IHsgQUNDT1VOVF9JMThOIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMvaTE4bic7XG5pbXBvcnQgeyBLQ19BQ0NPVU5UX0NPTlRFWFQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9rYy1jb250ZXh0JztcbmltcG9ydCB7IFVTRV9ERUZBVUxUX0NTUyB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xpYi90b2tlbnMvdXNlLWRlZmF1bHQtY3NzJztcbmltcG9ydCB0eXBlIHsgQ2xhc3NLZXkgfSBmcm9tICdrZXljbG9ha2lmeS9hY2NvdW50JztcbmltcG9ydCB0eXBlIHsgSTE4biB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvaTE4bic7XG5pbXBvcnQgdHlwZSB7IEtjQ29udGV4dCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvS2NDb250ZXh0JztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbS2NDbGFzc0RpcmVjdGl2ZSwgVGVtcGxhdGVDb21wb25lbnQsIE5nQ2xhc3NdLFxuICAgIHNlbGVjdG9yOiAna2Mtcm9vdCcsXG4gICAgdGVtcGxhdGVVcmw6ICdhY2NvdW50LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQ29tcG9uZW50UmVmZXJlbmNlLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQWNjb3VudENvbXBvbmVudClcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQWNjb3VudENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudFJlZmVyZW5jZSB7XG4gICAgaTE4biA9IGluamVjdDxJMThuPihBQ0NPVU5UX0kxOE4pO1xuICAgIGtjQ29udGV4dCA9IGluamVjdDxFeHRyYWN0PEtjQ29udGV4dCwgeyBwYWdlSWQ6ICdhY2NvdW50LmZ0bCcgfT4+KEtDX0FDQ09VTlRfQ09OVEVYVCk7XG4gICAgb3ZlcnJpZGUgZG9Vc2VEZWZhdWx0Q3NzID0gaW5qZWN0PGJvb2xlYW4+KFVTRV9ERUZBVUxUX0NTUyk7XG4gICAgb3ZlcnJpZGUgY2xhc3NlcyA9IGluamVjdDxQYXJ0aWFsPFJlY29yZDxDbGFzc0tleSwgc3RyaW5nPj4+KEFDQ09VTlRfQ0xBU1NFUyk7XG4gICAgb3ZlcnJpZGUgYWRkaXRpb25hbENsYXNzZXM6IFBhcnRpYWw8UmVjb3JkPENsYXNzS2V5LCBzdHJpbmc+PiA9IHtcbiAgICAgICAga2NCb2R5Q2xhc3M6IGAke3RoaXMuY2xhc3Nlcz8ua2NCb2R5Q2xhc3N9IHVzZXJgXG4gICAgfTtcbn1cbiIsIkBsZXQgdXJsID0ga2NDb250ZXh0LnVybDtcbkBsZXQgcmVhbG0gPSBrY0NvbnRleHQucmVhbG07XG5AbGV0IG1lc3NhZ2VzUGVyRmllbGQgPSBrY0NvbnRleHQubWVzc2FnZXNQZXJGaWVsZDtcbkBsZXQgc3RhdGVDaGVja2VyID0ga2NDb250ZXh0LnN0YXRlQ2hlY2tlcjtcbkBsZXQgYWNjb3VudCA9IGtjQ29udGV4dC5hY2NvdW50O1xuQGxldCByZWZlcnJlciA9IGtjQ29udGV4dC5yZWZlcnJlcjtcblxuPGtjLWFjY291bnQtdGVtcGxhdGUgW2FjdGl2ZV09XCInYWNjb3VudCdcIj5cbiAgICA8bmctY29udGFpbmVyIGNvbnRlbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIj5cbiAgICAgICAgICAgICAgICA8aDI+e3sgaTE4bi5tc2dTdHIoJ2VkaXRBY2NvdW50SHRtbFRpdGxlJykgfX08L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1YnRpdGxlXCI+IDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPiB7eyBpMThuLm1zZ1N0cigncmVxdWlyZWRGaWVsZHMnKSB9fSA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxmb3JtXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiXG4gICAgICAgICAgICBtZXRob2Q9XCJwb3N0XCJcbiAgICAgICAgICAgIFthY3Rpb25dPVwidXJsLmFjY291bnRVcmxcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBpZD1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAgICAgbmFtZT1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgQGlmICghcmVhbG0ucmVnaXN0cmF0aW9uRW1haWxBc1VzZXJuYW1lKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdoYXMtZXJyb3InOiBtZXNzYWdlc1BlckZpZWxkLmV4aXN0c0Vycm9yKCd1c2VybmFtZScpIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yIGNvbC1tZC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cigndXNlcm5hbWUnKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocmVhbG0uZWRpdFVzZXJuYW1lQWxsb3dlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwIGNvbC1tZC0xMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcmVhbG0uZWRpdFVzZXJuYW1lQWxsb3dlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJhY2NvdW50LnVzZXJuYW1lID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdoYXMtZXJyb3InOiBtZXNzYWdlc1BlckZpZWxkLmV4aXN0c0Vycm9yKCdlbWFpbCcpIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMiBjb2wtbWQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdlbWFpbCcpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMCBjb2wtbWQtMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0VmFsdWVdPVwiYWNjb3VudC5lbWFpbCA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncm91cFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaGFzLWVycm9yJzogbWVzc2FnZXNQZXJGaWVsZC5leGlzdHNFcnJvcignZmlyc3ROYW1lJykgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yIGNvbC1tZC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiZmlyc3ROYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdmaXJzdE5hbWUnKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTAgY29sLW1kLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJmaXJzdE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cImFjY291bnQuZmlyc3ROYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdoYXMtZXJyb3InOiBtZXNzYWdlc1BlckZpZWxkLmV4aXN0c0Vycm9yKCdsYXN0TmFtZScpIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMiBjb2wtbWQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdsYXN0TmFtZScpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMCBjb2wtbWQtMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJsYXN0TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cImFjY291bnQubGFzdE5hbWUgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBpZD1cImtjLWZvcm0tYnV0dG9uc1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLW9mZnNldC0yIGNvbC1tZC0xMCBzdWJtaXRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocmVmZXJyZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJyZWZlcnJlcj8udXJsXCI+e3sgaTE4bi5tc2dTdHIoJ2JhY2tUb0FwcGxpY2F0aW9uJykgfX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInN1Ym1pdEFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJTYXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCJbJ2tjQnV0dG9uQ2xhc3MnLCAna2NCdXR0b25QcmltYXJ5Q2xhc3MnLCAna2NCdXR0b25MYXJnZUNsYXNzJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdkb1NhdmUnKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInN1Ym1pdEFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJDYW5jZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIlsna2NCdXR0b25DbGFzcycsICdrY0J1dHRvblByaW1hcnlDbGFzcycsICdrY0J1dHRvbkxhcmdlQ2xhc3MnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5tc2dTdHIoJ2RvQ2FuY2VsJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2tjLWFjY291bnQtdGVtcGxhdGU+XG4iXX0=
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYWNjb3VudC9wYWdlcy9hY2NvdW50L2FjY291bnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2FjY291bnQvcGFnZXMvYWNjb3VudC9hY2NvdW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7O0FBZWxGLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxrQkFBa0I7SUFaeEQ7O1FBYUksU0FBSSxHQUFHLE1BQU0sQ0FBTyxZQUFZLENBQUMsQ0FBQztRQUNsQyxjQUFTLEdBQUcsTUFBTSxDQUFnRCxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdFLG9CQUFlLEdBQUcsTUFBTSxDQUFVLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELFlBQU8sR0FBRyxNQUFNLENBQW9DLGVBQWUsQ0FBQyxDQUFDO1FBQ3JFLHNCQUFpQixHQUFzQztZQUM1RCxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsT0FBTztTQUNuRCxDQUFDO1FBQ0YsV0FBTSxHQUFHLFNBQVMsQ0FBQztLQUN0Qjs4R0FUWSxnQkFBZ0I7a0dBQWhCLGdCQUFnQix5REFQZDtZQUNQO2dCQUNJLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7YUFDbEQ7U0FDSixpREN2QkwsbTRKQWlLQSw0Q0RsSmMsZ0JBQWdCLCtGQUFxQixPQUFPOzsyRkFVN0MsZ0JBQWdCO2tCQVo1QixTQUFTO2lDQUNNLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxZQUM3QyxZQUFZLGFBRVg7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGtCQUFrQjs0QkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUM7eUJBQ2xEO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmZXJlbmNlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9jbGFzc2VzL2NvbXBvbmVudC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2NvbnRhaW5lcnMvdGVtcGxhdGUnO1xuaW1wb3J0IHsgS2NDbGFzc0RpcmVjdGl2ZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvZGlyZWN0aXZlcy9rYy1jbGFzcyc7XG5pbXBvcnQgdHlwZSB7IEkxOG4gfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBLY0NvbnRleHQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L0tjQ29udGV4dCc7XG5pbXBvcnQgeyBBQ0NPVU5UX0NMQVNTRVMgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9jbGFzc2VzJztcbmltcG9ydCB7IEFDQ09VTlRfSTE4TiB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2kxOG4nO1xuaW1wb3J0IHsgS0NfQUNDT1VOVF9DT05URVhUIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMva2MtY29udGV4dCc7XG5pbXBvcnQgeyBVU0VfREVGQVVMVF9DU1MgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9saWIvdG9rZW5zL3VzZS1kZWZhdWx0LWNzcyc7XG5pbXBvcnQgdHlwZSB7IENsYXNzS2V5IH0gZnJvbSAna2V5Y2xvYWtpZnkvYWNjb3VudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0tjQ2xhc3NEaXJlY3RpdmUsIFRlbXBsYXRlQ29tcG9uZW50LCBOZ0NsYXNzXSxcbiAgICBzZWxlY3RvcjogJ2tjLWFjY291bnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnYWNjb3VudC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENvbXBvbmVudFJlZmVyZW5jZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFjY291bnRDb21wb25lbnQpXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEFjY291bnRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRSZWZlcmVuY2Uge1xuICAgIGkxOG4gPSBpbmplY3Q8STE4bj4oQUNDT1VOVF9JMThOKTtcbiAgICBrY0NvbnRleHQgPSBpbmplY3Q8RXh0cmFjdDxLY0NvbnRleHQsIHsgcGFnZUlkOiAnYWNjb3VudC5mdGwnIH0+PihLQ19BQ0NPVU5UX0NPTlRFWFQpO1xuICAgIG92ZXJyaWRlIGRvVXNlRGVmYXVsdENzcyA9IGluamVjdDxib29sZWFuPihVU0VfREVGQVVMVF9DU1MpO1xuICAgIG92ZXJyaWRlIGNsYXNzZXMgPSBpbmplY3Q8UGFydGlhbDxSZWNvcmQ8Q2xhc3NLZXksIHN0cmluZz4+PihBQ0NPVU5UX0NMQVNTRVMpO1xuICAgIG92ZXJyaWRlIGFkZGl0aW9uYWxDbGFzc2VzOiBQYXJ0aWFsPFJlY29yZDxDbGFzc0tleSwgc3RyaW5nPj4gPSB7XG4gICAgICAgIGtjQm9keUNsYXNzOiBgJHt0aGlzLmNsYXNzZXM/LmtjQm9keUNsYXNzfSB1c2VyYFxuICAgIH07XG4gICAgYWN0aXZlID0gJ2FjY291bnQnO1xufVxuIiwiQGxldCB1cmwgPSBrY0NvbnRleHQudXJsO1xuQGxldCByZWFsbSA9IGtjQ29udGV4dC5yZWFsbTtcbkBsZXQgbWVzc2FnZXNQZXJGaWVsZCA9IGtjQ29udGV4dC5tZXNzYWdlc1BlckZpZWxkO1xuQGxldCBzdGF0ZUNoZWNrZXIgPSBrY0NvbnRleHQuc3RhdGVDaGVja2VyO1xuQGxldCBhY2NvdW50ID0ga2NDb250ZXh0LmFjY291bnQ7XG5AbGV0IHJlZmVycmVyID0ga2NDb250ZXh0LnJlZmVycmVyO1xuXG48ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMFwiPlxuICAgICAgICA8aDI+e3sgaTE4bi5tc2dTdHIoJ2VkaXRBY2NvdW50SHRtbFRpdGxlJykgfX08L2gyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBzdWJ0aXRsZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInN1YnRpdGxlXCI+IDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPiB7eyBpMThuLm1zZ1N0cigncmVxdWlyZWRGaWVsZHMnKSB9fSA8L3NwYW4+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxmb3JtXG4gICAgY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIlxuICAgIG1ldGhvZD1cInBvc3RcIlxuICAgIFthY3Rpb25dPVwidXJsLmFjY291bnRVcmxcIlxuPlxuICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgaWQ9XCJzdGF0ZUNoZWNrZXJcIlxuICAgICAgICBuYW1lPVwic3RhdGVDaGVja2VyXCJcbiAgICAgICAgW3ZhbHVlXT1cInN0YXRlQ2hlY2tlclwiXG4gICAgLz5cbiAgICBAaWYgKCFyZWFsbS5yZWdpc3RyYXRpb25FbWFpbEFzVXNlcm5hbWUpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2hhcy1lcnJvcic6IG1lc3NhZ2VzUGVyRmllbGQuZXhpc3RzRXJyb3IoJ3VzZXJuYW1lJykgfVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMiBjb2wtbWQtMlwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBmb3I9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cigndXNlcm5hbWUnKSB9fVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgQGlmIChyZWFsbS5lZGl0VXNlcm5hbWVBbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwIGNvbC1tZC0xMFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcmVhbG0uZWRpdFVzZXJuYW1lQWxsb3dlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0VmFsdWVdPVwiYWNjb3VudC51c2VybmFtZSA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZm9ybS1ncm91cFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2hhcy1lcnJvcic6IG1lc3NhZ2VzUGVyRmllbGQuZXhpc3RzRXJyb3IoJ2VtYWlsJykgfVwiXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTIgY29sLW1kLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgIGZvcj1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdlbWFpbCcpIH19XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTAgY29sLW1kLTEwXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIGlkPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzXG4gICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJhY2NvdW50LmVtYWlsID8/ICcnXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXBcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdoYXMtZXJyb3InOiBtZXNzYWdlc1BlckZpZWxkLmV4aXN0c0Vycm9yKCdmaXJzdE5hbWUnKSB9XCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMiBjb2wtbWQtMlwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgZm9yPVwiZmlyc3ROYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdmaXJzdE5hbWUnKSB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwIGNvbC1tZC0xMFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBpZD1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJhY2NvdW50LmZpcnN0TmFtZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnaGFzLWVycm9yJzogbWVzc2FnZXNQZXJGaWVsZC5leGlzdHNFcnJvcignbGFzdE5hbWUnKSB9XCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMiBjb2wtbWQtMlwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgZm9yPVwibGFzdE5hbWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgaTE4bi5tc2dTdHIoJ2xhc3ROYW1lJykgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMCBjb2wtbWQtMTBcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJsYXN0TmFtZVwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cImFjY291bnQubGFzdE5hbWUgPz8gJydcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBpZD1cImtjLWZvcm0tYnV0dG9uc1wiXG4gICAgICAgICAgICBjbGFzcz1cImNvbC1tZC1vZmZzZXQtMiBjb2wtbWQtMTAgc3VibWl0XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICBAaWYgKHJlZmVycmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cInJlZmVycmVyPy51cmxcIj57eyBpMThuLm1zZ1N0cignYmFja1RvQXBwbGljYXRpb24nKSB9fTwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInN1Ym1pdEFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiU2F2ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIlsna2NCdXR0b25DbGFzcycsICdrY0J1dHRvblByaW1hcnlDbGFzcycsICdrY0J1dHRvbkxhcmdlQ2xhc3MnXVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cignZG9TYXZlJykgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwic3VibWl0QWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJDYW5jZWxcIlxuICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCJbJ2tjQnV0dG9uQ2xhc3MnLCAna2NCdXR0b25QcmltYXJ5Q2xhc3MnLCAna2NCdXR0b25MYXJnZUNsYXNzJ11cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5tc2dTdHIoJ2RvQ2FuY2VsJykgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==